DirectX 12 を使用しており、UAV を使用してレンダリングしようとしています。これが私のピクセルシェーダーコードです:
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 Graphics Debugger は、適切にバインドされた 2 つの UAV を示しています)。ただし、それがシェーダーのコンパイルに影響を与えるとは思いません。
FLBuffer
またはを参照するたびにStartOffsetBuffer
、コンパイルされません。
この問題の原因は何ですか?