-
Notifications
You must be signed in to change notification settings - Fork 863
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1946 from KhronosGroup/extend-web
Web: Extend with compute stage, SSBOs, and atomics on SSBO memory.
- Loading branch information
Showing
21 changed files
with
2,373 additions
and
1,828 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
388096 ../build/install/bin/glslangValidator.exe | ||
396288 ../build/install/bin/glslangValidator.exe |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
; SPIR-V | ||
; Version: 1.0 | ||
; Generator: Khronos Glslang Reference Front End; 7 | ||
; Bound: 108 | ||
; Schema: 0 | ||
OpCapability Shader | ||
%1 = OpExtInstImport "GLSL.std.450" | ||
OpMemoryModel Logical GLSL450 | ||
OpEntryPoint GLCompute %main "main" %gl_NumWorkGroups %gl_WorkGroupID %gl_LocalInvocationID %gl_GlobalInvocationID %gl_LocalInvocationIndex | ||
OpExecutionMode %main LocalSize 2 5 7 | ||
OpSource ESSL 310 | ||
OpName %main "main" | ||
OpName %bName "bName" | ||
OpMemberName %bName 0 "size" | ||
OpMemberName %bName 1 "count" | ||
OpMemberName %bName 2 "data" | ||
OpName %bInst "bInst" | ||
OpName %s "s" | ||
OpName %arrX "arrX" | ||
OpName %arrY "arrY" | ||
OpName %arrZ "arrZ" | ||
OpName %gl_NumWorkGroups "gl_NumWorkGroups" | ||
OpName %gl_WorkGroupID "gl_WorkGroupID" | ||
OpName %gl_LocalInvocationID "gl_LocalInvocationID" | ||
OpName %gl_GlobalInvocationID "gl_GlobalInvocationID" | ||
OpName %gl_LocalInvocationIndex "gl_LocalInvocationIndex" | ||
OpDecorate %_runtimearr_v4float ArrayStride 16 | ||
OpMemberDecorate %bName 0 Offset 0 | ||
OpMemberDecorate %bName 1 Offset 16 | ||
OpMemberDecorate %bName 2 Offset 32 | ||
OpDecorate %bName BufferBlock | ||
OpDecorate %bInst DescriptorSet 0 | ||
OpDecorate %bInst Binding 0 | ||
OpDecorate %39 SpecId 18 | ||
OpDecorate %41 SpecId 19 | ||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize | ||
OpDecorate %gl_NumWorkGroups BuiltIn NumWorkgroups | ||
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId | ||
OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId | ||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId | ||
OpDecorate %gl_LocalInvocationIndex BuiltIn LocalInvocationIndex | ||
%void = OpTypeVoid | ||
%3 = OpTypeFunction %void | ||
%uint = OpTypeInt 32 0 | ||
%uint_2 = OpConstant %uint 2 | ||
%uint_264 = OpConstant %uint 264 | ||
%int = OpTypeInt 32 1 | ||
%v3uint = OpTypeVector %uint 3 | ||
%float = OpTypeFloat 32 | ||
%v4float = OpTypeVector %float 4 | ||
%_runtimearr_v4float = OpTypeRuntimeArray %v4float | ||
%bName = OpTypeStruct %int %v3uint %_runtimearr_v4float | ||
%_ptr_Uniform_bName = OpTypePointer Uniform %bName | ||
%bInst = OpVariable %_ptr_Uniform_bName Uniform | ||
%int_2 = OpConstant %int 2 | ||
%int_0 = OpConstant %int 0 | ||
%_ptr_Uniform_int = OpTypePointer Uniform %int | ||
%float_7 = OpConstant %float 7 | ||
%24 = OpConstantComposite %v4float %float_7 %float_7 %float_7 %float_7 | ||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float | ||
%uint_1 = OpConstant %uint 1 | ||
%uint_3400 = OpConstant %uint 3400 | ||
%uint_72 = OpConstant %uint 72 | ||
%uint_197645 = OpConstant %uint 197645 | ||
%_arr_v4float_uint_197645 = OpTypeArray %v4float %uint_197645 | ||
%_ptr_Workgroup__arr_v4float_uint_197645 = OpTypePointer Workgroup %_arr_v4float_uint_197645 | ||
%s = OpVariable %_ptr_Workgroup__arr_v4float_uint_197645 Workgroup | ||
%int_3 = OpConstant %int 3 | ||
%float_0 = OpConstant %float 0 | ||
%39 = OpSpecConstant %uint 2 | ||
%uint_5 = OpConstant %uint 5 | ||
%41 = OpSpecConstant %uint 7 | ||
%gl_WorkGroupSize = OpSpecConstantComposite %v3uint %39 %uint_5 %41 | ||
%uint_0 = OpConstant %uint 0 | ||
%_arr_int_44 = OpTypeArray %int %44 | ||
%_ptr_Private__arr_int_44 = OpTypePointer Private %_arr_int_44 | ||
%arrX = OpVariable %_ptr_Private__arr_int_44 Private | ||
%_ptr_Private_int = OpTypePointer Private %int | ||
%_arr_int_52 = OpTypeArray %int %52 | ||
%_ptr_Private__arr_int_52 = OpTypePointer Private %_arr_int_52 | ||
%arrY = OpVariable %_ptr_Private__arr_int_52 Private | ||
%_arr_int_59 = OpTypeArray %int %59 | ||
%_ptr_Private__arr_int_59 = OpTypePointer Private %_arr_int_59 | ||
%arrZ = OpVariable %_ptr_Private__arr_int_59 Private | ||
%_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float | ||
%int_1 = OpConstant %int 1 | ||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint | ||
%gl_NumWorkGroups = OpVariable %_ptr_Input_v3uint Input | ||
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input | ||
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input | ||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input | ||
%_ptr_Input_uint = OpTypePointer Input %uint | ||
%gl_LocalInvocationIndex = OpVariable %_ptr_Input_uint Input | ||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint | ||
%int_5 = OpConstant %int 5 | ||
%int_197645 = OpConstant %int 197645 | ||
%main = OpFunction %void None %3 | ||
%5 = OpLabel | ||
OpControlBarrier %uint_2 %uint_2 %uint_264 | ||
%20 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%21 = OpLoad %int %20 | ||
%22 = OpSDiv %int %21 %int_2 | ||
%26 = OpAccessChain %_ptr_Uniform_v4float %bInst %int_2 %22 | ||
%27 = OpLoad %v4float %26 | ||
%28 = OpFMul %v4float %27 %24 | ||
%29 = OpAccessChain %_ptr_Uniform_v4float %bInst %int_2 %22 | ||
OpStore %29 %28 | ||
OpMemoryBarrier %uint_1 %uint_3400 | ||
OpMemoryBarrier %uint_2 %uint_3400 | ||
OpMemoryBarrier %uint_1 %uint_264 | ||
OpMemoryBarrier %uint_1 %uint_72 | ||
%44 = OpCompositeExtract %uint %gl_WorkGroupSize 0 | ||
%49 = OpAccessChain %_ptr_Private_int %arrX %int_0 | ||
%50 = OpLoad %int %49 | ||
%51 = OpConvertSToF %float %50 | ||
%52 = OpCompositeExtract %uint %gl_WorkGroupSize 1 | ||
%56 = OpAccessChain %_ptr_Private_int %arrY %int_0 | ||
%57 = OpLoad %int %56 | ||
%58 = OpConvertSToF %float %57 | ||
%59 = OpCompositeExtract %uint %gl_WorkGroupSize 2 | ||
%63 = OpAccessChain %_ptr_Private_int %arrZ %int_0 | ||
%64 = OpLoad %int %63 | ||
%65 = OpConvertSToF %float %64 | ||
%66 = OpCompositeConstruct %v4float %float_0 %51 %58 %65 | ||
%68 = OpAccessChain %_ptr_Workgroup_v4float %s %int_3 | ||
OpStore %68 %66 | ||
%72 = OpLoad %v3uint %gl_NumWorkGroups | ||
%73 = OpIAdd %v3uint %72 %gl_WorkGroupSize | ||
%75 = OpLoad %v3uint %gl_WorkGroupID | ||
%76 = OpIAdd %v3uint %73 %75 | ||
%78 = OpLoad %v3uint %gl_LocalInvocationID | ||
%79 = OpIAdd %v3uint %76 %78 | ||
%81 = OpLoad %v3uint %gl_GlobalInvocationID | ||
%84 = OpLoad %uint %gl_LocalInvocationIndex | ||
%85 = OpCompositeConstruct %v3uint %84 %84 %84 | ||
%86 = OpIMul %v3uint %81 %85 | ||
%87 = OpIAdd %v3uint %79 %86 | ||
%89 = OpAccessChain %_ptr_Uniform_v3uint %bInst %int_1 | ||
OpStore %89 %87 | ||
%90 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%91 = OpAtomicIAdd %int %90 %uint_1 %uint_0 %int_2 | ||
%92 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%93 = OpAtomicSMin %int %92 %uint_1 %uint_0 %int_2 | ||
%94 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%95 = OpAtomicSMax %int %94 %uint_1 %uint_0 %int_2 | ||
%96 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%97 = OpAtomicAnd %int %96 %uint_1 %uint_0 %int_2 | ||
%98 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%99 = OpAtomicOr %int %98 %uint_1 %uint_0 %int_2 | ||
%100 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%101 = OpAtomicXor %int %100 %uint_1 %uint_0 %int_2 | ||
%102 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%103 = OpAtomicExchange %int %102 %uint_1 %uint_0 %int_2 | ||
%104 = OpAccessChain %_ptr_Uniform_int %bInst %int_0 | ||
%106 = OpAtomicCompareExchange %int %104 %uint_1 %uint_0 %uint_0 %int_2 %int_5 | ||
OpReturn | ||
OpFunctionEnd |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
; SPIR-V | ||
; Version: 1.0 | ||
; Generator: Khronos Glslang Reference Front End; 7 | ||
; Bound: 99 | ||
; Schema: 0 | ||
OpCapability Shader | ||
%1 = OpExtInstImport "GLSL.std.450" | ||
OpMemoryModel Logical GLSL450 | ||
OpEntryPoint Fragment %main "main" %color %i | ||
OpExecutionMode %main OriginUpperLeft | ||
OpSource ESSL 310 | ||
OpName %main "main" | ||
OpName %color "color" | ||
OpName %t2d "t2d" | ||
OpName %s "s" | ||
OpName %t3d "t3d" | ||
OpName %sA "sA" | ||
OpName %sShadow "sShadow" | ||
OpName %i "i" | ||
OpName %tex2D "tex2D" | ||
OpName %texCube "texCube" | ||
OpName %tex2DArray "tex2DArray" | ||
OpName %itex2D "itex2D" | ||
OpName %itex3D "itex3D" | ||
OpName %itexCube "itexCube" | ||
OpName %itex2DArray "itex2DArray" | ||
OpName %utex2D "utex2D" | ||
OpName %utex3D "utex3D" | ||
OpName %utexCube "utexCube" | ||
OpName %utex2DArray "utex2DArray" | ||
OpName %tex3D "tex3D" | ||
OpDecorate %color Location 0 | ||
OpDecorate %t2d RelaxedPrecision | ||
OpDecorate %t2d DescriptorSet 0 | ||
OpDecorate %t2d Binding 3 | ||
OpDecorate %14 RelaxedPrecision | ||
OpDecorate %s DescriptorSet 0 | ||
OpDecorate %s Binding 0 | ||
OpDecorate %23 RelaxedPrecision | ||
OpDecorate %t3d DescriptorSet 0 | ||
OpDecorate %t3d Binding 4 | ||
OpDecorate %sA DescriptorSet 0 | ||
OpDecorate %sA Binding 2 | ||
OpDecorate %48 RelaxedPrecision | ||
OpDecorate %51 RelaxedPrecision | ||
OpDecorate %sShadow DescriptorSet 0 | ||
OpDecorate %sShadow Binding 1 | ||
OpDecorate %i RelaxedPrecision | ||
OpDecorate %i Flat | ||
OpDecorate %i Location 0 | ||
OpDecorate %tex2D RelaxedPrecision | ||
OpDecorate %tex2D DescriptorSet 0 | ||
OpDecorate %tex2D Binding 5 | ||
OpDecorate %texCube RelaxedPrecision | ||
OpDecorate %texCube DescriptorSet 0 | ||
OpDecorate %texCube Binding 6 | ||
OpDecorate %tex2DArray DescriptorSet 0 | ||
OpDecorate %tex2DArray Binding 15 | ||
OpDecorate %itex2D DescriptorSet 0 | ||
OpDecorate %itex2D Binding 16 | ||
OpDecorate %itex3D DescriptorSet 0 | ||
OpDecorate %itex3D Binding 17 | ||
OpDecorate %itexCube DescriptorSet 0 | ||
OpDecorate %itexCube Binding 18 | ||
OpDecorate %itex2DArray DescriptorSet 0 | ||
OpDecorate %itex2DArray Binding 19 | ||
OpDecorate %utex2D DescriptorSet 0 | ||
OpDecorate %utex2D Binding 20 | ||
OpDecorate %utex3D DescriptorSet 0 | ||
OpDecorate %utex3D Binding 21 | ||
OpDecorate %utexCube DescriptorSet 0 | ||
OpDecorate %utexCube Binding 22 | ||
OpDecorate %utex2DArray DescriptorSet 0 | ||
OpDecorate %utex2DArray Binding 23 | ||
OpDecorate %tex3D DescriptorSet 0 | ||
OpDecorate %tex3D Binding 36 | ||
%void = OpTypeVoid | ||
%3 = OpTypeFunction %void | ||
%float = OpTypeFloat 32 | ||
%v4float = OpTypeVector %float 4 | ||
%_ptr_Output_v4float = OpTypePointer Output %v4float | ||
%color = OpVariable %_ptr_Output_v4float Output | ||
%10 = OpTypeImage %float 2D 0 0 0 1 Unknown | ||
%11 = OpTypeSampledImage %10 | ||
%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11 | ||
%t2d = OpVariable %_ptr_UniformConstant_11 UniformConstant | ||
%15 = OpTypeSampler | ||
%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15 | ||
%s = OpVariable %_ptr_UniformConstant_15 UniformConstant | ||
%v2float = OpTypeVector %float 2 | ||
%float_0_5 = OpConstant %float 0.5 | ||
%22 = OpConstantComposite %v2float %float_0_5 %float_0_5 | ||
%24 = OpTypeImage %float 3D 0 0 0 1 Unknown | ||
%25 = OpTypeSampledImage %24 | ||
%uint = OpTypeInt 32 0 | ||
%uint_4 = OpConstant %uint 4 | ||
%_arr_25_uint_4 = OpTypeArray %25 %uint_4 | ||
%_ptr_UniformConstant__arr_25_uint_4 = OpTypePointer UniformConstant %_arr_25_uint_4 | ||
%t3d = OpVariable %_ptr_UniformConstant__arr_25_uint_4 UniformConstant | ||
%int = OpTypeInt 32 1 | ||
%int_1 = OpConstant %int 1 | ||
%_ptr_UniformConstant_25 = OpTypePointer UniformConstant %25 | ||
%_arr_15_uint_4 = OpTypeArray %15 %uint_4 | ||
%_ptr_UniformConstant__arr_15_uint_4 = OpTypePointer UniformConstant %_arr_15_uint_4 | ||
%sA = OpVariable %_ptr_UniformConstant__arr_15_uint_4 UniformConstant | ||
%int_2 = OpConstant %int 2 | ||
%v3float = OpTypeVector %float 3 | ||
%44 = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0_5 | ||
%sShadow = OpVariable %_ptr_UniformConstant_15 UniformConstant | ||
%_ptr_Input_int = OpTypePointer Input %int | ||
%i = OpVariable %_ptr_Input_int Input | ||
%tex2D = OpVariable %_ptr_UniformConstant_11 UniformConstant | ||
%58 = OpTypeImage %float Cube 0 0 0 1 Unknown | ||
%59 = OpTypeSampledImage %58 | ||
%_ptr_UniformConstant_59 = OpTypePointer UniformConstant %59 | ||
%texCube = OpVariable %_ptr_UniformConstant_59 UniformConstant | ||
%62 = OpTypeImage %float 2D 0 1 0 1 Unknown | ||
%63 = OpTypeSampledImage %62 | ||
%_ptr_UniformConstant_63 = OpTypePointer UniformConstant %63 | ||
%tex2DArray = OpVariable %_ptr_UniformConstant_63 UniformConstant | ||
%66 = OpTypeImage %int 2D 0 0 0 1 Unknown | ||
%67 = OpTypeSampledImage %66 | ||
%_ptr_UniformConstant_67 = OpTypePointer UniformConstant %67 | ||
%itex2D = OpVariable %_ptr_UniformConstant_67 UniformConstant | ||
%70 = OpTypeImage %int 3D 0 0 0 1 Unknown | ||
%71 = OpTypeSampledImage %70 | ||
%_ptr_UniformConstant_71 = OpTypePointer UniformConstant %71 | ||
%itex3D = OpVariable %_ptr_UniformConstant_71 UniformConstant | ||
%74 = OpTypeImage %int Cube 0 0 0 1 Unknown | ||
%75 = OpTypeSampledImage %74 | ||
%_ptr_UniformConstant_75 = OpTypePointer UniformConstant %75 | ||
%itexCube = OpVariable %_ptr_UniformConstant_75 UniformConstant | ||
%78 = OpTypeImage %int 2D 0 1 0 1 Unknown | ||
%79 = OpTypeSampledImage %78 | ||
%_ptr_UniformConstant_79 = OpTypePointer UniformConstant %79 | ||
%itex2DArray = OpVariable %_ptr_UniformConstant_79 UniformConstant | ||
%82 = OpTypeImage %uint 2D 0 0 0 1 Unknown | ||
%83 = OpTypeSampledImage %82 | ||
%_ptr_UniformConstant_83 = OpTypePointer UniformConstant %83 | ||
%utex2D = OpVariable %_ptr_UniformConstant_83 UniformConstant | ||
%86 = OpTypeImage %uint 3D 0 0 0 1 Unknown | ||
%87 = OpTypeSampledImage %86 | ||
%_ptr_UniformConstant_87 = OpTypePointer UniformConstant %87 | ||
%utex3D = OpVariable %_ptr_UniformConstant_87 UniformConstant | ||
%90 = OpTypeImage %uint Cube 0 0 0 1 Unknown | ||
%91 = OpTypeSampledImage %90 | ||
%_ptr_UniformConstant_91 = OpTypePointer UniformConstant %91 | ||
%utexCube = OpVariable %_ptr_UniformConstant_91 UniformConstant | ||
%94 = OpTypeImage %uint 2D 0 1 0 1 Unknown | ||
%95 = OpTypeSampledImage %94 | ||
%_ptr_UniformConstant_95 = OpTypePointer UniformConstant %95 | ||
%utex2DArray = OpVariable %_ptr_UniformConstant_95 UniformConstant | ||
%tex3D = OpVariable %_ptr_UniformConstant_25 UniformConstant | ||
%main = OpFunction %void None %3 | ||
%5 = OpLabel | ||
%14 = OpLoad %11 %t2d | ||
%18 = OpLoad %15 %s | ||
%19 = OpSampledImage %11 %14 %18 | ||
%23 = OpImageSampleImplicitLod %v4float %19 %22 | ||
OpStore %color %23 | ||
%34 = OpAccessChain %_ptr_UniformConstant_25 %t3d %int_1 | ||
%35 = OpLoad %25 %34 | ||
%40 = OpAccessChain %_ptr_UniformConstant_15 %sA %int_2 | ||
%41 = OpLoad %15 %40 | ||
%42 = OpSampledImage %25 %35 %41 | ||
%45 = OpImageSampleImplicitLod %v4float %42 %44 | ||
%46 = OpLoad %v4float %color | ||
%47 = OpFAdd %v4float %46 %45 | ||
OpStore %color %47 | ||
%48 = OpLoad %11 %t2d | ||
%49 = OpLoad %15 %s | ||
%50 = OpSampledImage %11 %48 %49 | ||
%51 = OpImageSampleImplicitLod %v4float %50 %22 | ||
%52 = OpLoad %v4float %color | ||
%53 = OpFAdd %v4float %52 %51 | ||
OpStore %color %53 | ||
OpReturn | ||
OpFunctionEnd |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
#version 310 es | ||
|
||
layout(local_size_x_id = 18, local_size_z_id = 19) in; | ||
|
||
layout(local_size_x = 2) in; | ||
layout(local_size_y = 5) in; | ||
layout(local_size_z = 7) in; | ||
|
||
const int total = gl_MaxComputeWorkGroupCount.x | ||
+ gl_MaxComputeWorkGroupCount.y | ||
+ gl_MaxComputeWorkGroupCount.z | ||
+ gl_MaxComputeUniformComponents | ||
+ gl_MaxComputeTextureImageUnits; | ||
|
||
shared vec4 s[total]; | ||
|
||
int arrX[gl_WorkGroupSize.x]; | ||
int arrY[gl_WorkGroupSize.y]; | ||
int arrZ[gl_WorkGroupSize.z]; | ||
|
||
layout(binding = 0, set = 0) buffer bName { | ||
int size; | ||
uvec3 count; | ||
vec4 data[]; | ||
} bInst; | ||
|
||
void main() | ||
{ | ||
barrier(); | ||
|
||
bInst.data[bInst.size / 2] *= vec4(7.0); | ||
|
||
memoryBarrier(); | ||
groupMemoryBarrier(); | ||
memoryBarrierShared(); | ||
memoryBarrierBuffer(); | ||
|
||
s[3] = vec4(0, arrX[0], arrY[0], arrZ[0]); | ||
bInst.count = gl_NumWorkGroups + gl_WorkGroupSize + gl_WorkGroupID + gl_LocalInvocationID + | ||
gl_GlobalInvocationID * gl_LocalInvocationIndex; | ||
|
||
atomicAdd(bInst.size, 2); | ||
atomicMin(bInst.size, 2); | ||
atomicMax(bInst.size, 2); | ||
atomicAnd(bInst.size, 2); | ||
atomicOr(bInst.size, 2); | ||
atomicXor(bInst.size, 2); | ||
atomicExchange(bInst.size, 2); | ||
atomicCompSwap(bInst.size, 5, 2); | ||
} |
Oops, something went wrong.