summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2021-02-02 03:25:33 +0000
committerassiduous <assiduous@diligentgraphics.com>2021-02-04 16:49:41 +0000
commit9d12e54e819249ede1cc7bc2d62d219f0dc4f41f (patch)
tree67cf38ba595d9df88c7f67f288daab451a39f812
parentReworked ShaderResourceLayoutTest.Textures and ShaderResourceLayoutTest.Immut... (diff)
downloadDiligentCore-9d12e54e819249ede1cc7bc2d62d219f0dc4f41f.tar.gz
DiligentCore-9d12e54e819249ede1cc7bc2d62d219f0dc4f41f.zip
Reworked ShaderResourceLayoutTest.FormattedBuffers and ShaderResourceLayoutTest.StructuredBuffers to verify actual resource bindings
-rw-r--r--Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/FormattedBuffers.hlsl93
-rw-r--r--Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.glsl101
-rw-r--r--Tests/DiligentCoreAPITest/assets/shaders/ShaderResourceLayout/StructuredBuffers.hlsl94
-rw-r--r--Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp40
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];
}