HLSL min16float无法编译

时间:2019-07-15 06:04:35

标签: directx shader hlsl

我有一个着色器:

float4 Test_PixelShader(float2 inTex:TEXCOORD,
                uniform int    mode          ):COLOR
{
   if(mode) // half
   {
      min16float2 t=(min16float2)inTex;
      min16float2 r=1;
      for(int i=0; i<256; i++)
      {
         r+=t*r;
      }
      return float4(r.x, r.y, mode, 1);
   }else
   {
      float2 t=inTex;
      float2 r=1;
      for(int i=0; i<256; i++)
      {
         r+=t*r;
      }
      return float4(r.x, r.y, mode, 1);
   }
}
#define TECHNIQUE5(name, vs, ps)   technique11 name{pass p0{SetVertexShader(CompileShader(vs_5_0, vs)); SetPixelShader(CompileShader(ps_5_0, ps));}}
TECHNIQUE5(Test , Draw_VertexShader(), Test_PixelShader(0));
TECHNIQUE5(Test1, Draw_VertexShader(), Test_PixelShader(1));

我正在使用哪个进行编译:

#define FLAGS_DX11    (D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY|D3DCOMPILE_OPTIMIZATION_LEVEL3|D3DCOMPILE_NO_PRESHADER)
D3DCompile(data.data(), data.elms(), null, d3d_macros.data(), &Include11(src), null, "fx_5_0", FLAGS_DX11, 0, &buffer, &error);

编译失败,并且我收到的唯一错误消息是:

  

警告X4717:D3DCompiler_47不推荐使用的效果

没有错误,只是一个警告,但着色器blob为空。

但是,如果我将所有min16float2替换为float2,则编译正常。

如何使min16float工作?

我已经读过https://gpuopen.com/first-steps-implementing-fp16/文章,并提到它应该可以正常工作。

我是否需要使用https://github.com/microsoft/DirectXShaderCompiler而不是Win10SDK中的D3DCompile

我有Windows 10,使用最新的Windows SDK

1 个答案:

答案 0 :(得分:0)

它看起来失败了,因为Microsoft放弃了“ fx_ *”目标,而不得不使用“ vs / ps”目标。