diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2021-02-02 03:25:33 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2021-02-04 16:49:41 +0000 |
| commit | 9d12e54e819249ede1cc7bc2d62d219f0dc4f41f (patch) | |
| tree | 67cf38ba595d9df88c7f67f288daab451a39f812 | |
| parent | Reworked ShaderResourceLayoutTest.Textures and ShaderResourceLayoutTest.Immut... (diff) | |
| download | DiligentCore-9d12e54e819249ede1cc7bc2d62d219f0dc4f41f.tar.gz DiligentCore-9d12e54e819249ede1cc7bc2d62d219f0dc4f41f.zip | |
Reworked ShaderResourceLayoutTest.FormattedBuffers and ShaderResourceLayoutTest.StructuredBuffers to verify actual resource bindings
4 files changed, 256 insertions, 72 deletions
diff --git a/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/FormattedBuffers.hlsl b/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/FormattedBuffers.hlsl index a32ae31c..c6081f43 100644 --- a/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/FormattedBuffers.hlsl +++ b/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/FormattedBuffers.hlsl @@ -6,39 +6,94 @@ Buffer g_BuffArr_Static[STATIC_BUFF_ARRAY_SIZE]; // 4 Buffer g_BuffArr_Mut [MUTABLE_BUFF_ARRAY_SIZE]; // 3 Buffer g_BuffArr_Dyn [DYNAMIC_BUFF_ARRAY_SIZE]; // 2 -float4 UseResources() +#ifdef VERTEX_SHADER +# define Buff_Static_Ref float4(1, 0, 0, 0) +# define Buff_Mut_Ref float4(0, 1, 0, 0) +# define Buff_Dyn_Ref float4(0, 0, 1, 0) + +# define BuffArr_Mut_Ref0 float4(1, 0, 0, 0) +# define BuffArr_Mut_Ref1 float4(0, 1, 0, 0) +# define BuffArr_Mut_Ref2 float4(0, 0, 1, 0) + +# define BuffArr_Dyn_Ref0 float4(0, 1, 0, 0) +# define BuffArr_Dyn_Ref1 float4(0, 0, 1, 0) +#endif + +#ifdef PIXEL_SHADER +# define Buff_Static_Ref float4(0, 0, 1, 0) +# define Buff_Mut_Ref float4(0, 0, 0, 1) +# define Buff_Dyn_Ref float4(0, 1, 0, 0) + +# define BuffArr_Mut_Ref0 float4(0, 1, 0, 0) +# define BuffArr_Mut_Ref1 float4(0, 0, 1, 0) +# define BuffArr_Mut_Ref2 float4(0, 0, 0, 1) + +# define BuffArr_Dyn_Ref0 float4(0, 0, 1, 0) +# define BuffArr_Dyn_Ref1 float4(0, 0, 0, 1) +#endif + + +#define BuffArr_Static_Ref0 float4(1, 0, 0, 0) +#define BuffArr_Static_Ref1 float4(0, 1, 0, 0) +#define BuffArr_Static_Ref2 float4(0, 0, 1, 0) +#define BuffArr_Static_Ref3 float4(0, 0, 0, 1) + +float4 CheckValue(float4 Val, float4 Expected) { - float4 f4Color = float4(0.0, 0.0, 0.0, 0.0); - f4Color += g_Buff_Static.Load(0); - f4Color += g_Buff_Mut. Load(0); - f4Color += g_Buff_Dyn. Load(0); + return float4(Val.x == Expected.x ? 1.0 : 0.0, + Val.y == Expected.y ? 1.0 : 0.0, + Val.z == Expected.z ? 1.0 : 0.0, + Val.w == Expected.w ? 1.0 : 0.0); +} + +float4 VerifyResources() +{ + float4 AllCorrect = float4(1.0, 1.0, 1.0, 1.0); + + AllCorrect *= CheckValue(g_Buff_Static.Load(0), Buff_Static_Ref); + AllCorrect *= CheckValue(g_Buff_Mut. Load(1), Buff_Mut_Ref); + AllCorrect *= CheckValue(g_Buff_Dyn. Load(2), Buff_Dyn_Ref); // glslang is not smart enough to unroll the loops even when explicitly told to do so - f4Color += g_BuffArr_Static[0].Load(0); - f4Color += g_BuffArr_Static[1].Load(0); - f4Color += g_BuffArr_Static[2].Load(0); - f4Color += g_BuffArr_Static[3].Load(0); + AllCorrect *= CheckValue(g_BuffArr_Static[0].Load(0), BuffArr_Static_Ref0); + AllCorrect *= CheckValue(g_BuffArr_Static[1].Load(1), BuffArr_Static_Ref1); + AllCorrect *= CheckValue(g_BuffArr_Static[2].Load(2), BuffArr_Static_Ref2); + AllCorrect *= CheckValue(g_BuffArr_Static[3].Load(3), BuffArr_Static_Ref3); - f4Color += g_BuffArr_Mut[0].Load(0); - f4Color += g_BuffArr_Mut[1].Load(0); - f4Color += g_BuffArr_Mut[2].Load(0); + AllCorrect *= CheckValue(g_BuffArr_Mut[0].Load(0), BuffArr_Mut_Ref0); + AllCorrect *= CheckValue(g_BuffArr_Mut[1].Load(1), BuffArr_Mut_Ref1); + AllCorrect *= CheckValue(g_BuffArr_Mut[2].Load(2), BuffArr_Mut_Ref2); - f4Color += g_BuffArr_Dyn[0].Load(0); - f4Color += g_BuffArr_Dyn[1].Load(0); + AllCorrect *= CheckValue(g_BuffArr_Dyn[0].Load(0), BuffArr_Dyn_Ref0); + AllCorrect *= CheckValue(g_BuffArr_Dyn[1].Load(1), BuffArr_Dyn_Ref1); - return f4Color; + return AllCorrect; } -void VSMain(out float4 f4Color : COLOR, +void VSMain(in uint VertId : SV_VertexID, + out float4 f4Color : COLOR, out float4 f4Position : SV_Position) { - f4Color = UseResources(); - f4Position = float4(0.0, 0.0, 0.0, 1.0); + float4 Pos[6]; + Pos[0] = float4(-1.0, -0.5, 0.0, 1.0); + Pos[1] = float4(-0.5, +0.5, 0.0, 1.0); + Pos[2] = float4( 0.0, -0.5, 0.0, 1.0); + + Pos[3] = float4(+0.0, -0.5, 0.0, 1.0); + Pos[4] = float4(+0.5, +0.5, 0.0, 1.0); + Pos[5] = float4(+1.0, -0.5, 0.0, 1.0); + + f4Color = float4(VertId % 3 == 0 ? 1.0 : 0.0, + VertId % 3 == 1 ? 1.0 : 0.0, + VertId % 3 == 2 ? 1.0 : 0.0, + 1.0) * VerifyResources(); + + f4Position = Pos[VertId]; } float4 PSMain(in float4 in_f4Color : COLOR, in float4 f4Position : SV_Position) : SV_Target { - return in_f4Color + UseResources(); + return in_f4Color * VerifyResources(); } diff --git a/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.glsl b/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.glsl index 91e74cca..4a20dd50 100644 --- a/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.glsl +++ b/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.glsl @@ -33,28 +33,71 @@ layout(std140) readonly buffer g_BuffArr_Dyn }g_StorageBuffArr_Dyn[DYNAMIC_BUFF_ARRAY_SIZE]; // 2 #endif -vec4 UseResources() + +#ifdef VERTEX_SHADER +# define Buff_Static_Ref vec4(1, 0, 0, 0) +# define Buff_Mut_Ref vec4(0, 1, 0, 0) +# define Buff_Dyn_Ref vec4(0, 0, 1, 0) + +# define BuffArr_Mut_Ref0 vec4(1, 0, 0, 0) +# define BuffArr_Mut_Ref1 vec4(0, 1, 0, 0) +# define BuffArr_Mut_Ref2 vec4(0, 0, 1, 0) + +# define BuffArr_Dyn_Ref0 vec4(0, 1, 0, 0) +# define BuffArr_Dyn_Ref1 vec4(0, 0, 1, 0) +#endif + +#ifdef PIXEL_SHADER +# define Buff_Static_Ref vec4(0, 0, 1, 0) +# define Buff_Mut_Ref vec4(0, 0, 0, 1) +# define Buff_Dyn_Ref vec4(0, 1, 0, 0) + +# define BuffArr_Mut_Ref0 vec4(0, 1, 0, 0) +# define BuffArr_Mut_Ref1 vec4(0, 0, 1, 0) +# define BuffArr_Mut_Ref2 vec4(0, 0, 0, 1) + +# define BuffArr_Dyn_Ref0 vec4(0, 0, 1, 0) +# define BuffArr_Dyn_Ref1 vec4(0, 0, 0, 1) +#endif + + +#define BuffArr_Static_Ref0 vec4(1, 0, 0, 0) +#define BuffArr_Static_Ref1 vec4(0, 1, 0, 0) +#define BuffArr_Static_Ref2 vec4(0, 0, 1, 0) +#define BuffArr_Static_Ref3 vec4(0, 0, 0, 1) + +vec4 CheckValue(vec4 Val, vec4 Expected) +{ + return vec4(Val.x == Expected.x ? 1.0 : 0.0, + Val.y == Expected.y ? 1.0 : 0.0, + Val.z == Expected.z ? 1.0 : 0.0, + Val.w == Expected.w ? 1.0 : 0.0); +} + +vec4 VerifyResources() { - vec4 f4Color = vec4(0.0, 0.0, 0.0, 0.0); - f4Color += g_StorageBuff_Static.data; - f4Color += g_StorageBuff_Mut .data; - f4Color += g_StorageBuff_Dyn .data; + vec4 AllCorrect = vec4(1.0, 1.0, 1.0, 1.0); + + AllCorrect *= CheckValue(g_StorageBuff_Static.data, Buff_Static_Ref); + AllCorrect *= CheckValue(g_StorageBuff_Mut .data, Buff_Mut_Ref); + AllCorrect *= CheckValue(g_StorageBuff_Dyn .data, Buff_Dyn_Ref); // glslang is not smart enough to unroll the loops even when explicitly told to do so #ifdef FRAGMENT_SHADER - f4Color += g_StorageBuffArr_Static[0].data; - f4Color += g_StorageBuffArr_Static[1].data; - f4Color += g_StorageBuffArr_Static[2].data; - f4Color += g_StorageBuffArr_Static[3].data; + AllCorrect *= CheckValue(g_StorageBuffArr_Static[0].data, BuffArr_Static_Ref0); + AllCorrect *= CheckValue(g_StorageBuffArr_Static[1].data, BuffArr_Static_Ref1); + AllCorrect *= CheckValue(g_StorageBuffArr_Static[2].data, BuffArr_Static_Ref2); + AllCorrect *= CheckValue(g_StorageBuffArr_Static[3].data, BuffArr_Static_Ref3); - f4Color += g_StorageBuffArr_Mut[0].data; - f4Color += g_StorageBuffArr_Mut[1].data; - f4Color += g_StorageBuffArr_Mut[2].data; + AllCorrect *= CheckValue(g_StorageBuffArr_Mut[0].data, BuffArr_Mut_Ref0); + AllCorrect *= CheckValue(g_StorageBuffArr_Mut[1].data, BuffArr_Mut_Ref1); + AllCorrect *= CheckValue(g_StorageBuffArr_Mut[2].data, BuffArr_Mut_Ref2); - f4Color += g_StorageBuffArr_Dyn[0].data; - f4Color += g_StorageBuffArr_Dyn[1].data; + AllCorrect *= CheckValue(g_StorageBuffArr_Dyn[0].data, BuffArr_Dyn_Ref0); + AllCorrect *= CheckValue(g_StorageBuffArr_Dyn[1].data, BuffArr_Dyn_Ref1); #endif - return f4Color; + + return AllCorrect; } #ifdef VERTEX_SHADER @@ -72,11 +115,31 @@ out gl_PerVertex #endif layout(location = 0)out vec4 out_Color; + void main() { - out_Color = UseResources(); - gl_Position = vec4(0.0, 0.0, 0.0, 1.0); -} + vec4 Pos[6]; + Pos[0] = vec4(-1.0, -0.5, 0.0, 1.0); + Pos[1] = vec4(-0.5, +0.5, 0.0, 1.0); + Pos[2] = vec4( 0.0, -0.5, 0.0, 1.0); + + Pos[3] = vec4(+0.0, -0.5, 0.0, 1.0); + Pos[4] = vec4(+0.5, +0.5, 0.0, 1.0); + Pos[5] = vec4(+1.0, -0.5, 0.0, 1.0); + + vec4 Col[3]; + Col[0] = vec4(1.0, 0.0, 0.0, 1.0); + Col[1] = vec4(0.0, 1.0, 0.0, 1.0); + Col[2] = vec4(0.0, 0.0, 1.0, 1.0); + +#ifdef VULKAN + gl_Position = Pos[gl_VertexIndex]; + out_Color = Col[gl_VertexIndex % 3] * VerifyResources(); +#else + gl_Position = Pos[gl_VertexID]; + out_Color = Col[gl_VertexIndex % 3] * VerifyResources(); +#endif +} #endif #ifdef FRAGMENT_SHADER @@ -84,6 +147,6 @@ layout(location = 0)in vec4 in_Color; layout(location = 0)out vec4 out_Color; void main() { - out_Color = UseResources(); + out_Color = in_Color * VerifyResources(); } #endif diff --git a/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.hlsl b/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.hlsl index ad02a84c..86b2a1e2 100644 --- a/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.hlsl +++ b/Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.hlsl @@ -11,39 +11,95 @@ StructuredBuffer<BufferData> g_BuffArr_Static[STATIC_BUFF_ARRAY_SIZE]; // 4 StructuredBuffer<BufferData> g_BuffArr_Mut [MUTABLE_BUFF_ARRAY_SIZE]; // 3 StructuredBuffer<BufferData> g_BuffArr_Dyn [DYNAMIC_BUFF_ARRAY_SIZE]; // 2 -float4 UseResources() + +#ifdef VERTEX_SHADER +# define Buff_Static_Ref float4(1, 0, 0, 0) +# define Buff_Mut_Ref float4(0, 1, 0, 0) +# define Buff_Dyn_Ref float4(0, 0, 1, 0) + +# define BuffArr_Mut_Ref0 float4(1, 0, 0, 0) +# define BuffArr_Mut_Ref1 float4(0, 1, 0, 0) +# define BuffArr_Mut_Ref2 float4(0, 0, 1, 0) + +# define BuffArr_Dyn_Ref0 float4(0, 1, 0, 0) +# define BuffArr_Dyn_Ref1 float4(0, 0, 1, 0) +#endif + +#ifdef PIXEL_SHADER +# define Buff_Static_Ref float4(0, 0, 1, 0) +# define Buff_Mut_Ref float4(0, 0, 0, 1) +# define Buff_Dyn_Ref float4(0, 1, 0, 0) + +# define BuffArr_Mut_Ref0 float4(0, 1, 0, 0) +# define BuffArr_Mut_Ref1 float4(0, 0, 1, 0) +# define BuffArr_Mut_Ref2 float4(0, 0, 0, 1) + +# define BuffArr_Dyn_Ref0 float4(0, 0, 1, 0) +# define BuffArr_Dyn_Ref1 float4(0, 0, 0, 1) +#endif + + +#define BuffArr_Static_Ref0 float4(1, 0, 0, 0) +#define BuffArr_Static_Ref1 float4(0, 1, 0, 0) +#define BuffArr_Static_Ref2 float4(0, 0, 1, 0) +#define BuffArr_Static_Ref3 float4(0, 0, 0, 1) + +float4 CheckValue(float4 Val, float4 Expected) +{ + return float4(Val.x == Expected.x ? 1.0 : 0.0, + Val.y == Expected.y ? 1.0 : 0.0, + Val.z == Expected.z ? 1.0 : 0.0, + Val.w == Expected.w ? 1.0 : 0.0); +} + +float4 VerifyResources() { - float4 f4Color = float4(0.0, 0.0, 0.0, 0.0); - f4Color += g_Buff_Static[0].data; - f4Color += g_Buff_Mut [0].data; - f4Color += g_Buff_Dyn [0].data; + float4 AllCorrect = float4(1.0, 1.0, 1.0, 1.0); + + AllCorrect *= CheckValue(g_Buff_Static[0].data, Buff_Static_Ref); + AllCorrect *= CheckValue(g_Buff_Mut [0].data, Buff_Mut_Ref); + AllCorrect *= CheckValue(g_Buff_Dyn [0].data, Buff_Dyn_Ref); // glslang is not smart enough to unroll the loops even when explicitly told to do so - f4Color += g_BuffArr_Static[0][0].data; - f4Color += g_BuffArr_Static[1][0].data; - f4Color += g_BuffArr_Static[2][0].data; - f4Color += g_BuffArr_Static[3][0].data; + AllCorrect *= CheckValue(g_BuffArr_Static[0][0].data, BuffArr_Static_Ref0); + AllCorrect *= CheckValue(g_BuffArr_Static[1][0].data, BuffArr_Static_Ref1); + AllCorrect *= CheckValue(g_BuffArr_Static[2][0].data, BuffArr_Static_Ref2); + AllCorrect *= CheckValue(g_BuffArr_Static[3][0].data, BuffArr_Static_Ref3); - f4Color += g_BuffArr_Mut[0][0].data; - f4Color += g_BuffArr_Mut[1][0].data; - f4Color += g_BuffArr_Mut[2][0].data; + AllCorrect *= CheckValue(g_BuffArr_Mut[0][0].data, BuffArr_Mut_Ref0); + AllCorrect *= CheckValue(g_BuffArr_Mut[1][0].data, BuffArr_Mut_Ref1); + AllCorrect *= CheckValue(g_BuffArr_Mut[2][0].data, BuffArr_Mut_Ref2); - f4Color += g_BuffArr_Dyn[0][0].data; - f4Color += g_BuffArr_Dyn[1][0].data; + AllCorrect *= CheckValue(g_BuffArr_Dyn[0][0].data, BuffArr_Dyn_Ref0); + AllCorrect *= CheckValue(g_BuffArr_Dyn[1][0].data, BuffArr_Dyn_Ref1); - return f4Color; + return AllCorrect; } -void VSMain(out float4 f4Color : COLOR, +void VSMain(in uint VertId : SV_VertexID, + out float4 f4Color : COLOR, out float4 f4Position : SV_Position) { - f4Color = UseResources(); - f4Position = float4(0.0, 0.0, 0.0, 1.0); + float4 Pos[6]; + Pos[0] = float4(-1.0, -0.5, 0.0, 1.0); + Pos[1] = float4(-0.5, +0.5, 0.0, 1.0); + Pos[2] = float4( 0.0, -0.5, 0.0, 1.0); + + Pos[3] = float4(+0.0, -0.5, 0.0, 1.0); + Pos[4] = float4(+0.5, +0.5, 0.0, 1.0); + Pos[5] = float4(+1.0, -0.5, 0.0, 1.0); + + f4Color = float4(VertId % 3 == 0 ? 1.0 : 0.0, + VertId % 3 == 1 ? 1.0 : 0.0, + VertId % 3 == 2 ? 1.0 : 0.0, + 1.0) * VerifyResources(); + + f4Position = Pos[VertId]; } float4 PSMain(in float4 in_f4Color : COLOR, in float4 f4Position : SV_Position) : SV_Target { - return in_f4Color + UseResources(); + return in_f4Color * VerifyResources(); } diff --git a/Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp b/Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp index 41440235..dbf49f43 100644 --- a/Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp +++ b/Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp @@ -32,6 +32,7 @@ #include "TestingEnvironment.hpp" #include "ShaderMacroHelper.hpp" #include "GraphicsAccessories.hpp" +#include "BasicMath.hpp" #include "gtest/gtest.h" @@ -207,23 +208,26 @@ protected: pPSO->CreateShaderResourceBinding(&pSRB, false); } - static RefCntAutoPtr<IBufferView> CreateResourceBufferView(BUFFER_MODE BufferMode, BUFFER_VIEW_TYPE ViewType) + static RefCntAutoPtr<IBufferView> CreateResourceBufferView(BUFFER_MODE BufferMode, BUFFER_VIEW_TYPE ViewType, const float4& Value) { VERIFY_EXPR(ViewType == BUFFER_VIEW_SHADER_RESOURCE || ViewType == BUFFER_VIEW_UNORDERED_ACCESS); auto* pEnv = TestingEnvironment::GetInstance(); auto* pDevice = pEnv->GetDevice(); - BufferDesc BuffDesc; + std::vector<float4> InitData(16, Value); + BufferDesc BuffDesc; BuffDesc.Name = "Formatted buffer"; - BuffDesc.uiSizeInBytes = 256; + BuffDesc.uiSizeInBytes = static_cast<Uint32>(InitData.size() * sizeof(InitData[0])); BuffDesc.BindFlags = ViewType == BUFFER_VIEW_SHADER_RESOURCE ? BIND_SHADER_RESOURCE : BIND_UNORDERED_ACCESS; BuffDesc.Usage = USAGE_DEFAULT; BuffDesc.ElementByteStride = 16; BuffDesc.Mode = BufferMode; RefCntAutoPtr<IBuffer> pBuffer; RefCntAutoPtr<IBufferView> pBufferView; - pDevice->CreateBuffer(BuffDesc, nullptr, &pBuffer); + + BufferData BuffData{InitData.data(), BuffDesc.uiSizeInBytes}; + pDevice->CreateBuffer(BuffDesc, &BuffData, &pBuffer); if (!pBuffer) { ADD_FAILURE() << "Unable to create buffer " << BuffDesc; @@ -448,7 +452,7 @@ void ShaderResourceLayoutTest::TestTexturesAndImtblSamplers(bool TestImtblSample pContext->SetPipelineState(pPSO); pContext->CommitShaderResources(pSRB, RESOURCE_STATE_TRANSITION_MODE_TRANSITION); - DrawAttribs DrawAttrs(6, DRAW_FLAG_VERIFY_ALL); + DrawAttribs DrawAttrs{6, DRAW_FLAG_VERIFY_ALL}; pContext->Draw(DrawAttrs); SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_Tex2D_Dyn", Set, pTexSRVs[2]); @@ -579,9 +583,10 @@ void ShaderResourceLayoutTest::TestStructuredOrFormattedBuffer(bool IsFormatted) std::vector<RefCntAutoPtr<IBufferView>> pBufferViews(MaxBuffers); std::vector<IDeviceObject*> pBuffSRVs(MaxBuffers); + std::array<float4, MaxBuffers> BufferVal = {float4{1, 0, 0, 0}, float4{0, 1, 0, 0}, float4{0, 0, 1, 0}, float4{0, 0, 0, 1}}; for (Uint32 i = 0; i < MaxBuffers; ++i) { - pBufferViews[i] = CreateResourceBufferView(IsFormatted ? BUFFER_MODE_FORMATTED : BUFFER_MODE_STRUCTURED, BUFFER_VIEW_SHADER_RESOURCE); + pBufferViews[i] = CreateResourceBufferView(IsFormatted ? BUFFER_MODE_FORMATTED : BUFFER_MODE_STRUCTURED, BUFFER_VIEW_SHADER_RESOURCE, BufferVal[i]); ASSERT_NE(pBufferViews[i], nullptr) << "Unable to formatted buffer view "; pBuffSRVs[i] = pBufferViews[i]; } @@ -595,11 +600,11 @@ void ShaderResourceLayoutTest::TestStructuredOrFormattedBuffer(bool IsFormatted) { EXPECT_EQ(pPSO->GetStaticVariableByName(SHADER_TYPE_VERTEX, "g_BuffArr_Static"), nullptr); } - SET_STATIC_VAR(pPSO, SHADER_TYPE_PIXEL, "g_Buff_Static", Set, pBuffSRVs[0]); + SET_STATIC_VAR(pPSO, SHADER_TYPE_PIXEL, "g_Buff_Static", Set, pBuffSRVs[2]); SET_STATIC_VAR(pPSO, SHADER_TYPE_PIXEL, "g_BuffArr_Static", SetArray, pBuffSRVs.data(), 0, StaticBuffArraySize); - SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_Buff_Mut", Set, pBuffSRVs[0]); + SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_Buff_Mut", Set, pBuffSRVs[1]); SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_Buff_Dyn", Set, pBuffSRVs[0]); if (!UseArraysInPSOnly) { @@ -612,9 +617,9 @@ void ShaderResourceLayoutTest::TestStructuredOrFormattedBuffer(bool IsFormatted) EXPECT_EQ(pSRB->GetVariableByName(SHADER_TYPE_VERTEX, "g_BuffArr_Dyn"), nullptr); } - SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_Buff_Mut", Set, pBuffSRVs[0]); + SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_Buff_Mut", Set, pBuffSRVs[3]); SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_Buff_Dyn", Set, pBuffSRVs[0]); - SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_BuffArr_Mut", SetArray, pBuffSRVs.data(), 0, MutableBuffArraySize); + SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_BuffArr_Mut", SetArray, pBuffSRVs.data() + 1, 0, MutableBuffArraySize); SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_BuffArr_Dyn", SetArray, pBuffSRVs.data(), 0, DynamicBuffArraySize); pSRB->InitializeStaticResources(pPSO); @@ -627,19 +632,24 @@ void ShaderResourceLayoutTest::TestStructuredOrFormattedBuffer(bool IsFormatted) pContext->SetPipelineState(pPSO); pContext->CommitShaderResources(pSRB, RESOURCE_STATE_TRANSITION_MODE_TRANSITION); - DrawAttribs DrawAttrs(3, DRAW_FLAG_VERIFY_ALL); + DrawAttribs DrawAttrs{6, DRAW_FLAG_VERIFY_ALL}; pContext->Draw(DrawAttrs); - SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_Buff_Dyn", Set, pBuffSRVs[1]); + SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_Buff_Dyn", Set, pBuffSRVs[2]); if (!UseArraysInPSOnly) { - SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_BuffArr_Dyn", SetArray, pBuffSRVs.data(), 1, DynamicBuffArraySize - 1); + SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_BuffArr_Dyn", SetArray, pBuffSRVs.data() + 1, 0, 1); + SET_SRB_VAR(pSRB, SHADER_TYPE_VERTEX, "g_BuffArr_Dyn", SetArray, pBuffSRVs.data() + 2, 1, 1); } SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_Buff_Dyn", Set, pBuffSRVs[1]); - SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_BuffArr_Dyn", SetArray, pBuffSRVs.data(), 1, DynamicBuffArraySize - 1); + SET_SRB_VAR(pSRB, SHADER_TYPE_PIXEL, "g_BuffArr_Dyn", SetArray, pBuffSRVs.data() + 2, 0, DynamicBuffArraySize); + + pContext->CommitShaderResources(pSRB, RESOURCE_STATE_TRANSITION_MODE_TRANSITION); pContext->Draw(DrawAttrs); + + pEnv->GetSwapChain()->Present(); } TEST_F(ShaderResourceLayoutTest, FormattedBuffers) @@ -745,7 +755,7 @@ void ShaderResourceLayoutTest::TestRWStructuredOrFormattedBuffer(bool IsFormatte for (Uint32 i = 0; i < TotalBuffers; ++i) { - pBufferViews[i] = CreateResourceBufferView(IsFormatted ? BUFFER_MODE_FORMATTED : BUFFER_MODE_STRUCTURED, BUFFER_VIEW_UNORDERED_ACCESS); + pBufferViews[i] = CreateResourceBufferView(IsFormatted ? BUFFER_MODE_FORMATTED : BUFFER_MODE_STRUCTURED, BUFFER_VIEW_UNORDERED_ACCESS, float4{}); ASSERT_NE(pBufferViews[i], nullptr) << "Unable to formatted buffer view "; pBuffUAVs[i] = pBufferViews[i]; } |
