0
我有一個HLSL着色器,當我將特定變量添加到常量緩衝區時,出現意外錯誤。整個着色器在下面。爲了排除一切,我包含了整個着色器。HLSL常量緩衝區包裝意外錯誤
當我將NewVariable
添加到第三個常量緩衝區時發生錯誤。
我沒有在文檔中發現這一點,但其中一個矢量開始部分的方式進入C0矢量我不能執行以下包裝?
float1 var1 : packoffset(c0.x);
float3 var2 : packoffset(c0.yzw);
我得到的不良記錄錯誤X3530(ERR_BIND_INVALID)。 MSDN說:「執行了無效的綁定操作,例如,緩衝區只能綁定到一個槽或一個常量偏移量;無效的寄存器規範,因爲預期會發生特定的綁定但不會發生;不能將packoffset元素與非包含偏移量元素在一個cbuffer。「這個錯誤信息真的不能告訴我什麼是錯誤的,並且包的偏移對我來說看起來是正確的。
cbuffer SceneGlobals : register(b0)
{
int NumAmbientLights : packoffset(c0);
int NumDirectionalLights : packoffset(c0.y);
int NumPointLights : packoffset(c0.z);
int NumSpotLights : packoffset(c0.w);
}
cbuffer FrameGlobals : register(b1)
{
float Time : packoffset(c0);
float Timestep : packoffset(c0.y);
int NumCameras : packoffset(c0.z);
float4 CameraPosition[1] : packoffset(c1);
float4x4 CameraView[1] : packoffset(c2);
float4x4 CameraProjection[1] : packoffset(c6);
float4x4 CameraViewProjection[1] : packoffset(c10);
}
cbuffer ObjectGlobals : register(b2)
{
int ActiveCamera : packoffset(c0);
int3 NewVariable : packoffset(c0.yzw); // ERROR OCCURS HERE
}
struct InputStruct
{
float4 Position : POSITION;
float4 Color : COLOR;
};
struct OutputStruct
{
float4 Position : SV_POSITION0;
float4 Color : COLOR0;
float4 Normal : NORMAL0;
float4 WorldPos : POSITION0;
float4 TexCoords : TEXCOORD0;
};
OutputStruct VS(InputStruct Input)
{
OutputStruct Output = (OutputStruct)0;
Output.Position = mul(CameraViewProjection[ActiveCamera], Input.Position);
Output.Color = Input.Color;
return Output;
}