fxc.exe可以用恒定的统一函数参数编译HLSL吗?

时间:2014-04-16 22:18:50

标签: direct3d hlsl

使用Effects11框架和fx_5_0目标配置文件,您可以创建将统一变量作为参数的函数,并使用这些变量的常量值对其进行编译。例如:

void colorVS(float4 positionL : POSITION,
             uniform float4 color,
             out float4 position : SV_Position,
             out float4 vertexColor : COLOR) {
  position = mul(positionL, viewProjectionMatrix);
  vertexColor = color;
}

VertexShader redShader = CompileShader(vs_5_0, colorVS(float4(1,0,0,1)));
VertexShader greenShader = CompileShader(vs_5_0, colorVS(float4(0,1,0,1)));

technique11 RedTechnique { pass {
  SetVertexShader(redShader);
} }

technique11 GreenTechnique { pass {
  SetVertexShader(greenShader);
} }

现在,我并没有提倡这种做法,但这是我正在处理的事情,因为我的任务是将现有项目从Effects11移植到直接的HLSL。使用greenShader(未优化)生成的fx_5_0程序集包含:

dcl_temps 1
itof r0.xyzw, l(0, 1, 0, 1)
mov o1.xyzw, r0.xyzw

它只是在临时寄存器中设置常量值。但是,在定位vs_5_0(或任何其他非FX)配置文件时,我无法找到完成相同操作的语法。通过简单地传递colorVS作为切入点,最终发生的是:

// cbuffer $Params
// {
//   float4 color;                      // Offset:    0 Size:    16
// }

dcl_constantbuffer cb0[1], immediateIndexed
// ...
mov o1.xyzw, cb0[0].xyzw

我是否可以仅使用vs_5_0配置文件使用FXC编译这些着色器并传递常量值?

0 个答案:

没有答案