diff options
3 files changed, 18 insertions, 1 deletions
diff --git a/source/slang/slang-ir-byte-address-legalize.cpp b/source/slang/slang-ir-byte-address-legalize.cpp index a6d0acee7..b3260c8c7 100644 --- a/source/slang/slang-ir-byte-address-legalize.cpp +++ b/source/slang/slang-ir-byte-address-legalize.cpp @@ -74,6 +74,8 @@ struct ByteAddressBufferLegalizationContext void processGetEquivalentStructuredBuffer(IRInst* inst) { + m_builder.setInsertBefore(inst); + // We need to see what type it is to be interpreted as. auto type = inst->getDataType(); @@ -83,7 +85,6 @@ struct ByteAddressBufferLegalizationContext // The buffer is operand 0 auto buffer = inst->getOperand(0); - // Get the equivalent structured buffer for the buffer. if( auto structuredBuffer = getEquivalentStructuredBuffer(elementType, buffer) ) { diff --git a/tests/bugs/byte-address-buffer-interlocked-add-f32.slang b/tests/bugs/byte-address-buffer-interlocked-add-f32.slang new file mode 100644 index 000000000..f1fccdcf3 --- /dev/null +++ b/tests/bugs/byte-address-buffer-interlocked-add-f32.slang @@ -0,0 +1,14 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type + +//TEST_INPUT: set buffer = [ubuffer(data=[0]), ubuffer(data=[1])] +RWByteAddressBuffer buffer[2]; + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name outputBuffer +RWStructuredBuffer<float> outputBuffer; + +[numthreads(1,1,1)] +void computeMain( uint2 dispatchThreadID : SV_DispatchThreadID ) +{ + buffer[0].InterlockedAddF32(0, 1.0f); + outputBuffer[dispatchThreadID.x] = buffer[0].Load<float>(0); +}
\ No newline at end of file diff --git a/tests/bugs/byte-address-buffer-interlocked-add-f32.slang.expected.txt b/tests/bugs/byte-address-buffer-interlocked-add-f32.slang.expected.txt new file mode 100644 index 000000000..f49a13c3e --- /dev/null +++ b/tests/bugs/byte-address-buffer-interlocked-add-f32.slang.expected.txt @@ -0,0 +1,2 @@ +type: float +1.0 |
