Optimization 如何减少或优化此SM3着色器代码上的指令槽?

Optimization 如何减少或优化此SM3着色器代码上的指令槽?,optimization,directx,shader,hlsl,directx-9,Optimization,Directx,Shader,Hlsl,Directx 9,以下着色器代码上的指令槽太多: float2纹理大小; 浮动4x4矩阵变换; 常数静态浮点数系数=2.0; 常量静态浮动3 yuv_加权=浮动3(14.352,28.176,5.472); 采样器贴花:登记(s0); 浮动4 df(浮动4 A,浮动4 B) { 返回abs(浮动4(A.x-B.x,A.y-B.y,A.z-B.z,A.w-B.w)); } 浮动4加权距离(浮动4 a、浮动4 b、浮动4 c、浮动4 d、浮动4 e、浮动4 f、浮动4 g、浮动4 h) { 返回(df(a,b)+df

以下着色器代码上的指令槽太多:

float2纹理大小;
浮动4x4矩阵变换;
常数静态浮点数系数=2.0;
常量静态浮动3 yuv_加权=浮动3(14.352,28.176,5.472);
采样器贴花:登记(s0);
浮动4 df(浮动4 A,浮动4 B)
{
返回abs(浮动4(A.x-B.x,A.y-B.y,A.z-B.z,A.w-B.w));
}
浮动4加权距离(浮动4 a、浮动4 b、浮动4 c、浮动4 d、浮动4 e、浮动4 f、浮动4 g、浮动4 h)
{
返回(df(a,b)+df(a,c)+df(d,e)+df(d,f)+4.0*df(g,h));
}
float4主顶点(inout float4颜色:COLOR0,inout float2 texCoord:TEXCOORD0,inout float4位置:POSITION0):TEXCOORD1
{
float2ps=float2(1.0/纹理大小.x,1.0/纹理大小.y);
4 t1;
t1.xy=float2(ps.x,0);//F
t1.zw=float2(0,ps.y);//H
位置=mul(位置,矩阵变换);
返回t1;
}
/*片段着色器*/
float4主片段(float4 p:POSITION0,float2 tex0:TEXCOORD0,float4 tex1:TEXCOORD1):COLOR0
{
bool4 edr,edr_left,edr_up,px;//px=像素,edr=边缘检测规则
bool4 ir_1级,ir_2级左,ir_2级向上;
bool4 nc;//新颜色
bool4 fx,fx_left,fx_up;//直线不等式。
float2 fp=分形(tex0*纹理大小);
float2 dx=tex1.xy;
float2dy=tex1.zw;
float3a=tex2D(贴花,tex0-dx-dy).xyz;
float3b=tex2D(贴花,tex0-dy).xyz;
float3c=tex2D(贴花,tex0+dx-dy).xyz;
float3d=tex2D(贴花,tex0-dx).xyz;
float3e=tex2D(贴花,tex0).xyz;
float3 F=tex2D(贴花,tex0+dx).xyz;
float3 G=tex2D(贴花,tex0-dx+dy).xyz;
float3 H=tex2D(贴花,tex0+dy).xyz;
float3 I=tex2D(贴花,tex0+dx+dy).xyz;
float3 A1=tex2D(贴花,tex0-dx-2.0*dy).xyz;
float3 C1=tex2D(贴花,tex0+dx-2.0*dy).xyz;
float3 A0=tex2D(贴花,tex0-2.0*dx-dy).xyz;
float3 G0=tex2D(贴花,tex0-2.0*dx+dy).xyz;
float3 C4=tex2D(贴花,tex0+2.0*dx-dy).xyz;
float3 I4=tex2D(贴花,tex0+2.0*dx+dy).xyz;
float3 G5=tex2D(贴花,tex0-dx+2.0*dy).xyz;
float3 I5=tex2D(贴花,tex0+dx+2.0*dy).xyz;
float3 B1=tex2D(贴花,tex0-2.0*dy).xyz;
float3 D0=tex2D(贴花,tex0-2.0*dx).xyz;
float3 H5=tex2D(贴花,tex0+2.0*dy).xyz;
float3 F4=tex2D(贴花,tex0+2.0*dx).xyz;
浮动4 b=mul(浮动4x3(b,D,H,F),yuv_加权);
浮动4 c=mul(浮动4x3(c,A,G,I),yuv_加权);
浮动4 e=mul(浮动4X3(e,e,e,e),yuv_加权);
float4d=b.yzwx;
float4f=b.wxyz;
4 g=c.zwxy;
float4h=b.zwxy;
float4 i=c.wxyz;
浮动4 i4=mul(浮动4X3(i4,C1,A0,G5),yuv_加权);
浮动4 i5=mul(浮动4X3(i5,C4,A1,G0),yuv_加权);
浮点数4 h5=mul(浮点数4X3(h5、F4、B1、D0),yuv_加权);
float4 f4=h5.yzwx;
浮动4 Ao=浮动4(1.0,-1.0,-1.0,1.0);
浮动4 Bo=浮动4(1.0,1.0,-1.0,-1.0);
浮动4 Co=浮动4(1.5,0.5,-0.5,0.5);
浮动4 Ax=浮动4(1.0,-1.0,-1.0,1.0);
浮动4 Bx=浮动4(0.5,2.0,-0.5,-2.0);
float4cx=float4(1.0,1.0,-0.5,0.0);
浮动4 Ay=浮动4(1.0,-1.0,-1.0,1.0);
float4by=float4(2.0,0.5,-2.0,-0.5);
浮动4 Cy=浮动4(2.0,0.0,-1.0,0.5);
//这些不等式定义了插值发生的线。
外汇指数=(Ao.x*fp.y+Bo.x*fp.x>Co.x);
fx_left.x=(Ax.x*fp.y+Bx.x*fp.x>Cx.x);
fx_up.x=(y.x*fp.y+By.x*fp.x>Cy.x);
外汇指数y=(Ao.y*fp.y+Bo.y*fp.x>Co.y);
fx_left.y=(Ax.y*fp.y+Bx.y*fp.x>Cx.y);
fx_up.y=(y.y*fp.y+By.y*fp.x>Cy.y);
fx.z=(Ao.z*fp.y+Bo.z*fp.x>Co.z);
fx_left.z=(Ax.z*fp.y+Bx.z*fp.x>Cx.z);
fx_up.z=(Ay.z*fp.y+By.z*fp.x>Cy.z);
外汇基金净值=(Ao.w*fp.y+Bo.w*fp.x>Co.w);
fx_left.w=(Ax.w*fp.y+Bx.w*fp.x>Cx.w);
fx_up.w=(y.w*fp.y+By.w*fp.x>Cy.w);
ir_lv1.x=((e.x!=f.x)和&(e.x!=h.x));
ir_lv2_left.x=((e.x!=g.x)和&(d.x!=g.x));
ir_lv2_up.x=((e.x!=c.x)和&(b.x!=c.x));
ir_lv1.y=((e.y!=f.y)和&(e.y!=h.y));
ir_lv2_left.y=((e.y!=g.y)和&(d.y!=g.y));
ir_lv2_up.y=((e.y!=c.y)和&(b.y!=c.y));
ir_lv1.z=((e.z!=f.z)和&(e.z!=h.z));
ir_lv2_left.z=((e.z!=g.z)和&(d.z!=g.z));
ir_lv2_up.z=((e.z!=c.z)和&(b.z!=c.z));
ir_lv1.w=((e.w!=f.w)和&(e.w!=h.w));
ir_lv2_left.w=((e.w!=g.w)和&(d.w!=g.w));
ir_lv2_up.w=((e.w!=c.w)和&(b.w!=c.w));
float4 w1=加权距离(e、c、g、i、h5、f4、h、f);
float4 w2=加权距离(h,d,i5,f,i4,b,e,i);
浮动4 df_fg=df(f,g);
浮动4 df_hc=df(h,c);
float4 t1=(coef*df_fg);
浮动4 t2=df_hc;
float4 t3=df_fg;
浮动4 t4=(系数*单位hc);
edr=bool4((w1.xedr_left=bool4((t1.x多亏@Gnietschow提供的信息,我才能够实现此功能。以下优化版本将使用不到512个指令槽

float2纹理大小;
浮动4x4矩阵变换;
常数静态浮点数系数=2.0;
常量静态浮动3 yuv_加权=浮动3(14.352,28.176,5.472);
采样器贴花:登记(s0);
浮动4 df(浮动4 A,浮动4 B)
{
返回abs(A-B);
}
浮动4加权距离(浮动4 a、浮动4 b、浮动4 c、浮动4 d、,
浮子4 e、浮子4 f、浮子4 g、浮子4 h)
{
返回(df(a,b)+df(a,c)+df(d,e)+df(d,f)+4.0*df(g,h));
}
float4主顶点(inout float4颜色:COLOR0,inout float2 texCoord:TEXCOORD0,
inout float4位置:位置0):TEXCOORD1
{
float2 ps=float2(1.0/纹理大小.x,1.0/纹理大小。