我正在使用 DirectX 12,尝试使用无人机进行渲染。这是我的像素着色器代码:
struct PSInput
{
float4 position : SV_POSITION;
float4 color : COLOR;
};
struct FragmentDataStruct
{
float4 color;
float depth;
};
struct FragmentAndLinkStruct
{
FragmentDataStruct fragmentData;
uint nextFragment;
};
RWStructuredBuffer <FragmentAndLinkStruct> FLBuffer : register(u0);
RWByteAddressBuffer StartOffsetBuffer : register(u1);
float4 PSMain(PSInput input) : SV_TARGET
{
input.color.x = float(FLBuffer[0].nextFragment);
return input.color;
}
使用该D3DCompileFromFile
函数时编译失败。
当我替换这一行时:
input.color.x = float(FLBuffer[0].nextFragment);
像这样:
FragmentAndLinkStruct otherThing;
otherThing.nextFragment = 1;
input.color.x = float(otherThing.nextFragment);
没有提到RWStructuredBuffer
,那么它编译得很好并正确渲染。
我认为绑定数据没有任何问题(VS 图形调试器显示正确绑定的两个无人机)。不过,我认为这不会影响着色器的编译。
任何时候我引用FLBuffer
or StartOffsetBuffer
,它都不会编译。
什么会导致这个问题?