Ich benutze DirectX 12, versuche mit UAVs zu rendern. Hier ist mein Pixel-Shader-Code:Warum wird dieser HLSL Pixel Shader nicht kompiliert, wenn RWStructuredBuffer referenziert wird?
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;
}
Es Kompilierung schlägt fehl, wenn die D3DCompileFromFile
Funktion.
Wenn ich diese Zeile:
input.color.x = float(FLBuffer[0].nextFragment);
mit etwas wie folgt aus:
FragmentAndLinkStruct otherThing;
otherThing.nextFragment = 1;
input.color.x = float(otherThing.nextFragment);
, die keinen Hinweis auf die RWStructuredBuffer
hat, dann stellt es ganz gut und macht richtig.
Ich glaube nicht, ich habe Probleme mit gebundenen Daten (VS Graphics Debugger zeigt die beiden UAVs ordnungsgemäß gebunden). Ich glaube nicht, dass dies die Erstellung des Shaders beeinflussen würde.
Jedes Mal, wenn ich FLBuffer
oder StartOffsetBuffer
referenziere, wird es nicht kompilieren.
Was würde dieses Problem verursachen?