From bd6dbaf7c3ea720b4ed39904fe08878f9dcbd947 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 21 Aug 2023 17:07:34 -0700 Subject: Compile append and consume structured buffers to glsl. (#3142) * Compile append and consume structured buffers to glsl. * Fix. * Update CI config. --------- Co-authored-by: Yong He --- tests/hlsl/append-structured-buffer.slang | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tests/hlsl/append-structured-buffer.slang (limited to 'tests/hlsl/append-structured-buffer.slang') diff --git a/tests/hlsl/append-structured-buffer.slang b/tests/hlsl/append-structured-buffer.slang new file mode 100644 index 000000000..8d0352e85 --- /dev/null +++ b/tests/hlsl/append-structured-buffer.slang @@ -0,0 +1,43 @@ + +//TEST:SIMPLE(filecheck=GLSL):-target glsl -profile glsl_450 -stage compute -entry computeMain +//TEST:SIMPLE(filecheck=SPIRV):-target spirv -profile glsl_450 -stage compute -entry computeMain + +//DISABLED_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type -xslang -fvk-use-gl-layout + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +AppendStructuredBuffer appendBuffer; + +// GLSL: layout(std430, binding = 1) buffer StructuredBuffer_float2_t +// GLSL: vec2 _data[]; +// GLSL: } appendBuffer_elements_0 + +// GLSL: layout(std430, binding = 2) buffer StructuredBuffer_int_t +// GLSL: int _data[]; +// GLSL: } appendBuffer_counter + +// GLSL: void AppendStructuredBuffer_Append_0(vec2 [[PARAM:[A-Za-z0-9_]+]]) +// GLSL: int [[COUNTER:[A-Za-z0-9_]+]] = atomicAdd(appendBuffer_counter_0._data[0], 1); +// GLSL: appendBuffer_elements_0._data{{\[}}[[COUNTER]]{{\]}} = [[PARAM]]; + +// GLSL: uvec2 StructuredBuffer_GetDimensions_0() +// GLSL: { +// GLSL: return uvec2(uint(appendBuffer_counter_0._data[0]), 8U); +// GLSL: } + +// SPIRV: OpEntryPoint + +//TEST_INPUT:set inBuffer = ubuffer(data=[1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0], stride=4) +RWByteAddressBuffer inBuffer; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + var g = inBuffer.Load(4); + appendBuffer.Append(g.xy); + + uint numStructs, stride; + appendBuffer.GetDimensions(numStructs, stride); + outputBuffer[dispatchThreadID.x] = numStructs; // expect 1.0 +} -- cgit v1.2.3