From 7826afcaad78cc33c976bb3db3cdc9eada4c77e8 Mon Sep 17 00:00:00 2001 From: Ellie Hermaszewska Date: Wed, 18 Oct 2023 06:26:00 +0800 Subject: Type layouts for structured buffers with counters (#3269) * More tests for append structured buffer * Append and Consume structured buffer tests for DX12 * neaten * test wobble * Add counter layout information to append/consume structured buffers * add getRWStructuredBufferType * Correct definition of get size for append/consume structured buffers * tweak append structured buffer test * Allow initializing counter buffer in render test * vulkan test for consume structured buffer * Handle null counterVarLayout in getExplicitCounterBindingRangeOffset * remove dead code * Implement atomic counter increment/decrement for spirv * explicit spirv test * Add missing check on result * Hold on to counter resources --------- Co-authored-by: Yong He --- .../slang-ir-lower-append-consume-structured-buffer.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'source/slang/slang-ir-lower-append-consume-structured-buffer.cpp') diff --git a/source/slang/slang-ir-lower-append-consume-structured-buffer.cpp b/source/slang/slang-ir-lower-append-consume-structured-buffer.cpp index 9df5f4e7e..ed04541ef 100644 --- a/source/slang/slang-ir-lower-append-consume-structured-buffer.cpp +++ b/source/slang/slang-ir-lower-append-consume-structured-buffer.cpp @@ -154,14 +154,15 @@ namespace Slang builder.setInsertInto(getDimensionsFunc); builder.emitBlock(); auto bufferParam = builder.emitParam(structType); - auto counterBuffer = builder.emitFieldExtract(counterBufferType, bufferParam, counterBufferKey); - IRInst* getCounterPtrArgs[] = { counterBuffer, builder.getIntValue(builder.getIntType(), 0) }; - auto counterBufferPtr = builder.emitIntrinsicInst(builder.getPtrType(builder.getIntType()), kIROp_RWStructuredBufferGetElementPtr, 2, getCounterPtrArgs); - auto counter = builder.emitLoad(counterBufferPtr); - counter = builder.emitCast(builder.getUIntType(), counter); - auto stride = builder.getIntValue(builder.getUIntType(), elementSize.getStride()); - IRInst* vecArgs[] = { counter, stride }; - builder.emitReturn(builder.emitMakeVector(uint2Type, 2, vecArgs)); + auto elementBuffer = builder.emitFieldExtract(elementBufferType, bufferParam, elementBufferKey); + + const auto dim = builder.emitIntrinsicInst( + uint2Type, + kIROp_StructuredBufferGetDimensions, + 1, + &elementBuffer + ); + builder.emitReturn(dim); } // Replace all insts with synthesized functions. -- cgit v1.2.3