Skip to content

Commit 5e4b751

Browse files
committed
aggregate-initialize the SPIRVShaderResourceRefAttribs.
1 parent 4da3afb commit 5e4b751

File tree

1 file changed

+42
-71
lines changed

1 file changed

+42
-71
lines changed

Tests/DiligentCoreTest/src/ShaderTools/SPIRVShaderResourcesTest.cpp

Lines changed: 42 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -45,49 +45,20 @@ namespace
4545

4646
struct SPIRVShaderResourceRefAttribs
4747
{
48-
// clang-format off
49-
50-
/* 0 */const char* const Name;
51-
/* 8 */const Uint16 ArraySize;
52-
/* 10 */const SPIRVShaderResourceAttribs::ResourceType Type;
53-
/* 11.0*/const Uint8 ResourceDim : 7; // RESOURCE_DIMENSION
54-
/* 11.7*/const Uint8 IsMS : 1;
55-
56-
// Offset in SPIRV words (uint32_t) of binding & descriptor set decorations in SPIRV binary
57-
/* 12 */const uint32_t BindingDecorationOffset;
58-
/* 16 */const uint32_t DescriptorSetDecorationOffset;
59-
60-
/* 20 */const Uint32 BufferStaticSize;
61-
/* 24 */const Uint32 BufferStride;
62-
/* 28 */
63-
/* 32 */ // End of structure
64-
65-
// clang-format on
66-
//
67-
// Test-only constructor for creating reference resources
68-
SPIRVShaderResourceRefAttribs(const char* _Name,
69-
SPIRVShaderResourceAttribs::ResourceType _Type,
70-
Uint16 _ArraySize,
71-
RESOURCE_DIMENSION _ResourceDim,
72-
Uint8 _IsMS,
73-
Uint32 _BufferStaticSize,
74-
Uint32 _BufferStride) noexcept :
75-
// clang-format off
76-
Name {_Name},
77-
ArraySize {_ArraySize},
78-
Type {_Type},
79-
ResourceDim {static_cast<Uint8>(_ResourceDim)},
80-
IsMS {_IsMS},
81-
BindingDecorationOffset {0}, // Not used in tests
82-
DescriptorSetDecorationOffset {0}, // Not used in tests
83-
BufferStaticSize {_BufferStaticSize},
84-
BufferStride {_BufferStride}
85-
// clang-format on
86-
{}
48+
const char* const Name;
49+
const Uint16 ArraySize;
50+
const SPIRVShaderResourceAttribs::ResourceType Type;
51+
const Uint8 ResourceDim; // RESOURCE_DIMENSION
52+
const Uint8 IsMS;
53+
54+
// Offset in SPIRV words (uint32_t) of binding & descriptor set decorations in SPIRV binary
55+
const uint32_t BindingDecorationOffset;
56+
const uint32_t DescriptorSetDecorationOffset;
57+
58+
const Uint32 BufferStaticSize;
59+
const Uint32 BufferStride;
8760
};
8861

89-
static_assert(sizeof(SPIRVShaderResourceRefAttribs) == sizeof(SPIRVShaderResourceAttribs), "Size of SPIRVShaderResourceRefAttribs struct must be equal to SPIRVShaderResourceAttribs");
90-
9162
std::vector<unsigned int> LoadSPIRVFromHLSL(const char* FilePath, SHADER_TYPE ShaderType = SHADER_TYPE_PIXEL)
9263
{
9364
std::vector<unsigned int> SPIRV;
@@ -271,8 +242,8 @@ TEST(SPIRVShaderResources, UniformBuffers)
271242
TestSPIRVResources("UniformBuffers.psh",
272243
{
273244
// CB0 is optimized away as it's not used in the shader
274-
SPIRVShaderResourceRefAttribs{"CB1", SPIRVResourceType::UniformBuffer, 1, RESOURCE_DIM_BUFFER, 0, 48, 0},
275-
SPIRVShaderResourceRefAttribs{"CB2", SPIRVResourceType::UniformBuffer, 1, RESOURCE_DIM_BUFFER, 0, 16, 0},
245+
SPIRVShaderResourceRefAttribs{"CB1", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 48, 0},
246+
SPIRVShaderResourceRefAttribs{"CB2", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 16, 0},
276247
});
277248
}
278249

@@ -281,20 +252,20 @@ TEST(SPIRVShaderResources, StorageBuffers)
281252
TestSPIRVResources("StorageBuffers.psh",
282253
{
283254
// StructuredBuffers have BufferStaticSize=0 (runtime array) and BufferStride is the element size
284-
SPIRVShaderResourceRefAttribs{"g_ROBuffer", SPIRVResourceType::ROStorageBuffer, 1, RESOURCE_DIM_BUFFER, 0, 0, 32},
285-
SPIRVShaderResourceRefAttribs{"g_RWBuffer", SPIRVResourceType::RWStorageBuffer, 1, RESOURCE_DIM_BUFFER, 0, 0, 64},
255+
SPIRVShaderResourceRefAttribs{"g_ROBuffer", 1, SPIRVResourceType::ROStorageBuffer, RESOURCE_DIM_BUFFER, 0, 0, 32},
256+
SPIRVShaderResourceRefAttribs{"g_RWBuffer", 1, SPIRVResourceType::RWStorageBuffer, RESOURCE_DIM_BUFFER, 0, 0, 64},
286257
// ByteAddressBuffers also have BufferStaticSize=0 and BufferStride=4 (uint size)
287-
SPIRVShaderResourceRefAttribs{"g_ROAtomicBuffer", SPIRVResourceType::ROStorageBuffer, 1, RESOURCE_DIM_BUFFER, 0, 0, 4},
288-
SPIRVShaderResourceRefAttribs{"g_RWAtomicBuffer", SPIRVResourceType::RWStorageBuffer, 1, RESOURCE_DIM_BUFFER, 0, 0, 4},
258+
SPIRVShaderResourceRefAttribs{"g_ROAtomicBuffer", 1, SPIRVResourceType::ROStorageBuffer, RESOURCE_DIM_BUFFER, 0, 0, 4},
259+
SPIRVShaderResourceRefAttribs{"g_RWAtomicBuffer", 1, SPIRVResourceType::RWStorageBuffer, RESOURCE_DIM_BUFFER, 0, 0, 4},
289260
});
290261
}
291262

292263
TEST(SPIRVShaderResources, TexelBuffers)
293264
{
294265
TestSPIRVResources("TexelBuffers.psh",
295266
{
296-
SPIRVShaderResourceRefAttribs{"g_UniformTexelBuffer", SPIRVResourceType::UniformTexelBuffer, 1, RESOURCE_DIM_BUFFER, 0, 0, 0},
297-
SPIRVShaderResourceRefAttribs{"g_StorageTexelBuffer", SPIRVResourceType::StorageTexelBuffer, 1, RESOURCE_DIM_BUFFER, 0, 0, 0},
267+
SPIRVShaderResourceRefAttribs{"g_UniformTexelBuffer", 1, SPIRVResourceType::UniformTexelBuffer, RESOURCE_DIM_BUFFER, 0, 0, 0},
268+
SPIRVShaderResourceRefAttribs{"g_StorageTexelBuffer", 1, SPIRVResourceType::StorageTexelBuffer, RESOURCE_DIM_BUFFER, 0, 0, 0},
298269
});
299270
}
300271

@@ -304,17 +275,17 @@ TEST(SPIRVShaderResources, Textures)
304275
{
305276
// When textures and samplers are declared separately in HLSL, they are compiled as separate_images
306277
// instead of sampled_images. This is the correct behavior for separate sampler/texture declarations.
307-
SPIRVShaderResourceRefAttribs{"g_SampledImage", SPIRVResourceType::SeparateImage, 1, RESOURCE_DIM_TEX_2D, 0, 0, 0},
308-
SPIRVShaderResourceRefAttribs{"g_SampledImageMS", SPIRVResourceType::SeparateImage, 1, RESOURCE_DIM_TEX_2D, 1, 0, 0},
309-
SPIRVShaderResourceRefAttribs{"g_SampledImage3D", SPIRVResourceType::SeparateImage, 1, RESOURCE_DIM_TEX_3D, 0, 0, 0},
310-
SPIRVShaderResourceRefAttribs{"g_SampledImageCube", SPIRVResourceType::SeparateImage, 1, RESOURCE_DIM_TEX_CUBE, 0, 0, 0},
311-
SPIRVShaderResourceRefAttribs{"g_Sampler", SPIRVResourceType::SeparateSampler, 1, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
312-
SPIRVShaderResourceRefAttribs{"g_SeparateImage", SPIRVResourceType::SeparateImage, 1, RESOURCE_DIM_TEX_2D, 0, 0, 0},
278+
SPIRVShaderResourceRefAttribs{"g_SampledImage", 1, SPIRVResourceType::SeparateImage, RESOURCE_DIM_TEX_2D, 0, 0, 0},
279+
SPIRVShaderResourceRefAttribs{"g_SampledImageMS", 1, SPIRVResourceType::SeparateImage, RESOURCE_DIM_TEX_2D, 1, 0, 0},
280+
SPIRVShaderResourceRefAttribs{"g_SampledImage3D", 1, SPIRVResourceType::SeparateImage, RESOURCE_DIM_TEX_3D, 0, 0, 0},
281+
SPIRVShaderResourceRefAttribs{"g_SampledImageCube", 1, SPIRVResourceType::SeparateImage, RESOURCE_DIM_TEX_CUBE, 0, 0, 0},
282+
SPIRVShaderResourceRefAttribs{"g_Sampler", 1, SPIRVResourceType::SeparateSampler, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
283+
SPIRVShaderResourceRefAttribs{"g_SeparateImage", 1, SPIRVResourceType::SeparateImage, RESOURCE_DIM_TEX_2D, 0, 0, 0},
313284
// Combined sampler: g_Texture and g_Texture_sampler
314285
// Note: Even with CombinedSamplerSuffix, SPIRV may still classify them as separate_images
315286
// if they are declared separately. The CombinedSamplerSuffix is mainly used for naming convention.
316-
SPIRVShaderResourceRefAttribs{"g_Texture", SPIRVResourceType::SeparateImage, 1, RESOURCE_DIM_TEX_2D, 0, 0, 0},
317-
SPIRVShaderResourceRefAttribs{"g_Texture_sampler", SPIRVResourceType::SeparateSampler, 1, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
287+
SPIRVShaderResourceRefAttribs{"g_Texture", 1, SPIRVResourceType::SeparateImage, RESOURCE_DIM_TEX_2D, 0, 0, 0},
288+
SPIRVShaderResourceRefAttribs{"g_Texture_sampler", 1, SPIRVResourceType::SeparateSampler, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
318289
});
319290
}
320291

@@ -323,9 +294,9 @@ TEST(SPIRVShaderResources, StorageImages)
323294
TestSPIRVResources("StorageImages.psh",
324295
{
325296
// Note: HLSL does not support RWTextureCube, so we only test 2D, 2DArray, and 3D storage images
326-
SPIRVShaderResourceRefAttribs{"g_RWImage2D", SPIRVResourceType::StorageImage, 1, RESOURCE_DIM_TEX_2D, 0, 0, 0},
327-
SPIRVShaderResourceRefAttribs{"g_RWImage2DArray", SPIRVResourceType::StorageImage, 1, RESOURCE_DIM_TEX_2D_ARRAY, 0, 0, 0},
328-
SPIRVShaderResourceRefAttribs{"g_RWImage3D", SPIRVResourceType::StorageImage, 1, RESOURCE_DIM_TEX_3D, 0, 0, 0},
297+
SPIRVShaderResourceRefAttribs{"g_RWImage2D", 1, SPIRVResourceType::StorageImage, RESOURCE_DIM_TEX_2D, 0, 0, 0},
298+
SPIRVShaderResourceRefAttribs{"g_RWImage2DArray", 1, SPIRVResourceType::StorageImage, RESOURCE_DIM_TEX_2D_ARRAY, 0, 0, 0},
299+
SPIRVShaderResourceRefAttribs{"g_RWImage3D", 1, SPIRVResourceType::StorageImage, RESOURCE_DIM_TEX_3D, 0, 0, 0},
329300
});
330301
}
331302

@@ -337,7 +308,7 @@ TEST(SPIRVShaderResources, AtomicCounters)
337308
// The resource name is the buffer block name (AtomicCounterBuffer), not the instance name (g_AtomicCounter).
338309
TestSPIRVResources("AtomicCounters.glsl",
339310
{
340-
SPIRVShaderResourceRefAttribs{"AtomicCounterBuffer", SPIRVResourceType::RWStorageBuffer, 1, RESOURCE_DIM_BUFFER, 0, 4, 0},
311+
SPIRVShaderResourceRefAttribs{"AtomicCounterBuffer", 1, SPIRVResourceType::RWStorageBuffer, RESOURCE_DIM_BUFFER, 0, 4, 0},
341312
},
342313
SHADER_TYPE_PIXEL,
343314
nullptr,
@@ -348,7 +319,7 @@ TEST(SPIRVShaderResources, InputAttachments)
348319
{
349320
TestSPIRVResources("InputAttachments.psh",
350321
{
351-
SPIRVShaderResourceRefAttribs{"g_InputAttachment", SPIRVResourceType::InputAttachment, 1, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
322+
SPIRVShaderResourceRefAttribs{"g_InputAttachment", 1, SPIRVResourceType::InputAttachment, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
352323
});
353324
}
354325

@@ -359,7 +330,7 @@ TEST(SPIRVShaderResources, AccelerationStructures)
359330
// The ray gen shader uses traceRayEXT with g_AccelStruct to ensure it's not optimized away
360331
TestSPIRVResources("AccelerationStructures.glsl",
361332
{
362-
SPIRVShaderResourceRefAttribs{"g_AccelStruct", SPIRVResourceType::AccelerationStructure, 1, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
333+
SPIRVShaderResourceRefAttribs{"g_AccelStruct", 1, SPIRVResourceType::AccelerationStructure, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
363334
},
364335
SHADER_TYPE_RAY_GEN,
365336
nullptr,
@@ -373,7 +344,7 @@ TEST(SPIRVShaderResources, PushConstants)
373344
// Total: 16 + 4 + 2 + 1 + 1 = 24 floats/uints = 24 * 4 bytes = 96 bytes = 24 words
374345
TestSPIRVResources("PushConstants.psh",
375346
{
376-
SPIRVShaderResourceRefAttribs{"PushConstants", SPIRVResourceType::PushConstant, 24, RESOURCE_DIM_BUFFER, 0, 96, 0},
347+
SPIRVShaderResourceRefAttribs{"PushConstants", 24, SPIRVResourceType::PushConstant, RESOURCE_DIM_BUFFER, 0, 96, 0},
377348
});
378349
}
379350

@@ -382,18 +353,18 @@ TEST(SPIRVShaderResources, MixedResources)
382353
TestSPIRVResources("MixedResources.psh",
383354
{
384355
// UniformBuff: float4x4 (64 bytes) + float4 (16 bytes) = 80 bytes
385-
SPIRVShaderResourceRefAttribs{"UniformBuff", SPIRVResourceType::UniformBuffer, 1, RESOURCE_DIM_BUFFER, 0, 80, 0},
356+
SPIRVShaderResourceRefAttribs{"UniformBuff", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 80, 0},
386357
// ROStorageBuff: StructuredBuffer<BufferData> where BufferData = float4[4] = 64 bytes
387358
// StructuredBuffers have BufferStaticSize=0 (runtime array) and BufferStride is the element size
388-
SPIRVShaderResourceRefAttribs{"ROStorageBuff", SPIRVResourceType::ROStorageBuffer, 1, RESOURCE_DIM_BUFFER, 0, 0, 64},
359+
SPIRVShaderResourceRefAttribs{"ROStorageBuff", 1, SPIRVResourceType::ROStorageBuffer, RESOURCE_DIM_BUFFER, 0, 0, 64},
389360
// RWStorageBuff: same as ROStorageBuff
390-
SPIRVShaderResourceRefAttribs{"RWStorageBuff", SPIRVResourceType::RWStorageBuffer, 1, RESOURCE_DIM_BUFFER, 0, 0, 64},
361+
SPIRVShaderResourceRefAttribs{"RWStorageBuff", 1, SPIRVResourceType::RWStorageBuffer, RESOURCE_DIM_BUFFER, 0, 0, 64},
391362
// SampledTex: When Texture2D and SamplerState are declared separately, they are compiled as SeparateImage
392-
SPIRVShaderResourceRefAttribs{"SampledTex", SPIRVResourceType::SeparateImage, 1, RESOURCE_DIM_TEX_2D, 0, 0, 0},
393-
SPIRVShaderResourceRefAttribs{"StorageTex", SPIRVResourceType::StorageImage, 1, RESOURCE_DIM_TEX_2D, 0, 0, 0},
394-
SPIRVShaderResourceRefAttribs{"Sampler", SPIRVResourceType::SeparateSampler, 1, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
363+
SPIRVShaderResourceRefAttribs{"SampledTex", 1, SPIRVResourceType::SeparateImage, RESOURCE_DIM_TEX_2D, 0, 0, 0},
364+
SPIRVShaderResourceRefAttribs{"StorageTex", 1, SPIRVResourceType::StorageImage, RESOURCE_DIM_TEX_2D, 0, 0, 0},
365+
SPIRVShaderResourceRefAttribs{"Sampler", 1, SPIRVResourceType::SeparateSampler, RESOURCE_DIM_UNDEFINED, 0, 0, 0},
395366
// PushConstants: float2 (2 floats) + float (1 float) + uint (1 uint) = 4 words = 16 bytes
396-
SPIRVShaderResourceRefAttribs{"PushConstants", SPIRVResourceType::PushConstant, 4, RESOURCE_DIM_BUFFER, 0, 16, 0},
367+
SPIRVShaderResourceRefAttribs{"PushConstants", 4, SPIRVResourceType::PushConstant, RESOURCE_DIM_BUFFER, 0, 16, 0},
397368
});
398369
}
399370

0 commit comments

Comments
 (0)