We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
I am trying to translate from Spirv to WGSL using Naga
First, I started with the following HLSL:
RWStructuredBuffer<uint1> data: register(u1); [numthreads(128, 1, 1)] void csSimpleTest(uint3 ID : SV_GroupThreadID, uint3 GP : SV_GroupID) { uint1 index = GP.x*100+ID.x; uint originalValue; InterlockedExchange(data[index].x, 1, originalValue); }
I used the DirectX compiler to translate this HLSL to Spirv (spirv-dis to disassemble it)
; SPIR-V ; Version: 1.0 ; Generator: Google spiregg; 0 ; Bound: 28 ; Schema: 0 OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %csSimpleTest "csSimpleTest" %gl_LocalInvocationID %gl_WorkGroupID OpExecutionMode %csSimpleTest LocalSize 128 1 1 OpSource HLSL 600 OpName %type_RWStructuredBuffer_uint "type.RWStructuredBuffer.uint" OpName %data "data" OpName %csSimpleTest "csSimpleTest" OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId OpDecorate %data DescriptorSet 0 OpDecorate %data Binding 1 OpDecorate %_runtimearr_uint ArrayStride 4 OpMemberDecorate %type_RWStructuredBuffer_uint 0 Offset 0 OpDecorate %type_RWStructuredBuffer_uint BufferBlock %int = OpTypeInt 32 1 %int_0 = OpConstant %int 0 %uint = OpTypeInt 32 0 %uint_100 = OpConstant %uint 100 %uint_0 = OpConstant %uint 0 %uint_1 = OpConstant %uint 1 %_runtimearr_uint = OpTypeRuntimeArray %uint %type_RWStructuredBuffer_uint = OpTypeStruct %_runtimearr_uint %_ptr_Uniform_type_RWStructuredBuffer_uint = OpTypePointer Uniform %type_RWStructuredBuffer_uint %v3uint = OpTypeVector %uint 3 %_ptr_Input_v3uint = OpTypePointer Input %v3uint %void = OpTypeVoid %17 = OpTypeFunction %void %_ptr_Uniform_uint = OpTypePointer Uniform %uint %data = OpVariable %_ptr_Uniform_type_RWStructuredBuffer_uint Uniform %gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input %gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input %csSimpleTest = OpFunction %void None %17 %19 = OpLabel %20 = OpLoad %v3uint %gl_LocalInvocationID %21 = OpLoad %v3uint %gl_WorkGroupID %22 = OpCompositeExtract %uint %21 0 %23 = OpIMul %uint %22 %uint_100 %24 = OpCompositeExtract %uint %20 0 %25 = OpIAdd %uint %23 %24 %26 = OpAccessChain %_ptr_Uniform_uint %data %int_0 %25 %27 = OpAtomicExchange %uint %26 %uint_1 %uint_0 %uint_1 OpReturn OpFunctionEnd
Finally, I used Naga to translate from Spirv to Wgsl and the following error is thrown: Unsupported instruction AtomicExchange at Function
The text was updated successfully, but these errors were encountered:
Thanks for the report!
Atomics are not currently supported by the SPIR-V frontend and they are non-trivial to implement.
Closing as duplicate of gfx-rs/wgpu#4489
Sorry, something went wrong.
No branches or pull requests
I am trying to translate from Spirv to WGSL using Naga
First, I started with the following HLSL:
I used the DirectX compiler to translate this HLSL to Spirv (spirv-dis to disassemble it)
Finally, I used Naga to translate from Spirv to Wgsl and the following error is thrown:
Unsupported instruction AtomicExchange at Function
The text was updated successfully, but these errors were encountered: