Add interlock test for split functions doing begin/end.
This commit is contained in:
Родитель
261b46982a
Коммит
65e48ca5ea
|
@ -0,0 +1,42 @@
|
||||||
|
RasterizerOrderedByteAddressBuffer _7 : register(u1, space0);
|
||||||
|
RasterizerOrderedByteAddressBuffer _9 : register(u0, space0);
|
||||||
|
|
||||||
|
static float4 gl_FragCoord;
|
||||||
|
struct SPIRV_Cross_Input
|
||||||
|
{
|
||||||
|
float4 gl_FragCoord : SV_Position;
|
||||||
|
};
|
||||||
|
|
||||||
|
void callee2()
|
||||||
|
{
|
||||||
|
int _37 = int(gl_FragCoord.x);
|
||||||
|
_7.Store(_37 * 4 + 0, _7.Load(_37 * 4 + 0) + 1u);
|
||||||
|
}
|
||||||
|
|
||||||
|
void callee()
|
||||||
|
{
|
||||||
|
int _45 = int(gl_FragCoord.x);
|
||||||
|
_9.Store(_45 * 4 + 0, _9.Load(_45 * 4 + 0) + 1u);
|
||||||
|
callee2();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _29()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void _31()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void frag_main()
|
||||||
|
{
|
||||||
|
callee();
|
||||||
|
_29();
|
||||||
|
_31();
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(SPIRV_Cross_Input stage_input)
|
||||||
|
{
|
||||||
|
gl_FragCoord = stage_input.gl_FragCoord;
|
||||||
|
frag_main();
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
#pragma clang diagnostic ignored "-Wmissing-prototypes"
|
||||||
|
|
||||||
|
#include <metal_stdlib>
|
||||||
|
#include <simd/simd.h>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
|
||||||
|
struct SSBO1
|
||||||
|
{
|
||||||
|
uint values1[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SSBO0
|
||||||
|
{
|
||||||
|
uint values0[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void callee2(thread float4& gl_FragCoord, device SSBO1& v_7)
|
||||||
|
{
|
||||||
|
int _37 = int(gl_FragCoord.x);
|
||||||
|
v_7.values1[_37]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void callee(thread float4& gl_FragCoord, device SSBO1& v_7, device SSBO0& v_9)
|
||||||
|
{
|
||||||
|
int _45 = int(gl_FragCoord.x);
|
||||||
|
v_9.values0[_45]++;
|
||||||
|
callee2(gl_FragCoord, v_7);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void _29()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void _31()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
fragment void main0(device SSBO1& v_7 [[buffer(0), raster_order_group(0)]], device SSBO0& v_9 [[buffer(1), raster_order_group(0)]], float4 gl_FragCoord [[position]])
|
||||||
|
{
|
||||||
|
callee(gl_FragCoord, v_7, v_9);
|
||||||
|
_29();
|
||||||
|
_31();
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
#version 450
|
||||||
|
#extension GL_ARB_fragment_shader_interlock : require
|
||||||
|
layout(pixel_interlock_ordered) in;
|
||||||
|
|
||||||
|
layout(binding = 1, std430) buffer SSBO1
|
||||||
|
{
|
||||||
|
uint values1[];
|
||||||
|
} _7;
|
||||||
|
|
||||||
|
layout(binding = 0, std430) buffer SSBO0
|
||||||
|
{
|
||||||
|
uint values0[];
|
||||||
|
} _9;
|
||||||
|
|
||||||
|
void callee2()
|
||||||
|
{
|
||||||
|
int _37 = int(gl_FragCoord.x);
|
||||||
|
_7.values1[_37]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void callee()
|
||||||
|
{
|
||||||
|
int _45 = int(gl_FragCoord.x);
|
||||||
|
_9.values0[_45]++;
|
||||||
|
callee2();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _29()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void _31()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void spvMainInterlockedBody()
|
||||||
|
{
|
||||||
|
callee();
|
||||||
|
_29();
|
||||||
|
_31();
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// Interlocks were used in a way not compatible with GLSL, this is very slow.
|
||||||
|
beginInvocationInterlockARB();
|
||||||
|
spvMainInterlockedBody();
|
||||||
|
endInvocationInterlockARB();
|
||||||
|
}
|
|
@ -0,0 +1,102 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.0
|
||||||
|
; Generator: Khronos Glslang Reference Front End; 7
|
||||||
|
; Bound: 45
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpCapability FragmentShaderPixelInterlockEXT
|
||||||
|
OpExtension "SPV_EXT_fragment_shader_interlock"
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %gl_FragCoord
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpExecutionMode %main PixelInterlockOrderedEXT
|
||||||
|
OpSource GLSL 450
|
||||||
|
OpSourceExtension "GL_ARB_fragment_shader_interlock"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %callee2_ "callee2("
|
||||||
|
OpName %callee_ "callee("
|
||||||
|
OpName %SSBO1 "SSBO1"
|
||||||
|
OpMemberName %SSBO1 0 "values1"
|
||||||
|
OpName %_ ""
|
||||||
|
OpName %gl_FragCoord "gl_FragCoord"
|
||||||
|
OpName %SSBO0 "SSBO0"
|
||||||
|
OpMemberName %SSBO0 0 "values0"
|
||||||
|
OpName %__0 ""
|
||||||
|
OpDecorate %_runtimearr_uint ArrayStride 4
|
||||||
|
OpMemberDecorate %SSBO1 0 Offset 0
|
||||||
|
OpDecorate %SSBO1 BufferBlock
|
||||||
|
OpDecorate %_ DescriptorSet 0
|
||||||
|
OpDecorate %_ Binding 1
|
||||||
|
OpDecorate %gl_FragCoord BuiltIn FragCoord
|
||||||
|
OpDecorate %_runtimearr_uint_0 ArrayStride 4
|
||||||
|
OpMemberDecorate %SSBO0 0 Offset 0
|
||||||
|
OpDecorate %SSBO0 BufferBlock
|
||||||
|
OpDecorate %__0 DescriptorSet 0
|
||||||
|
OpDecorate %__0 Binding 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%3 = OpTypeFunction %void
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_runtimearr_uint = OpTypeRuntimeArray %uint
|
||||||
|
%SSBO1 = OpTypeStruct %_runtimearr_uint
|
||||||
|
%_ptr_Uniform_SSBO1 = OpTypePointer Uniform %SSBO1
|
||||||
|
%_ = OpVariable %_ptr_Uniform_SSBO1 Uniform
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Input_v4float = OpTypePointer Input %v4float
|
||||||
|
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Input_float = OpTypePointer Input %float
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%_runtimearr_uint_0 = OpTypeRuntimeArray %uint
|
||||||
|
%SSBO0 = OpTypeStruct %_runtimearr_uint_0
|
||||||
|
%_ptr_Uniform_SSBO0 = OpTypePointer Uniform %SSBO0
|
||||||
|
%__0 = OpVariable %_ptr_Uniform_SSBO0 Uniform
|
||||||
|
%main = OpFunction %void None %3
|
||||||
|
%5 = OpLabel
|
||||||
|
%44 = OpFunctionCall %void %callee_
|
||||||
|
%call3res = OpFunctionCall %void %callee3_
|
||||||
|
%call4res = OpFunctionCall %void %callee4_
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee3_ = OpFunction %void None %3
|
||||||
|
%begin3 = OpLabel
|
||||||
|
OpBeginInvocationInterlockEXT
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee4_ = OpFunction %void None %3
|
||||||
|
%begin4 = OpLabel
|
||||||
|
OpEndInvocationInterlockEXT
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee2_ = OpFunction %void None %3
|
||||||
|
%7 = OpLabel
|
||||||
|
%23 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
|
||||||
|
%24 = OpLoad %float %23
|
||||||
|
%25 = OpConvertFToS %int %24
|
||||||
|
%28 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %25
|
||||||
|
%29 = OpLoad %uint %28
|
||||||
|
%30 = OpIAdd %uint %29 %uint_1
|
||||||
|
%31 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %25
|
||||||
|
OpStore %31 %30
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%callee_ = OpFunction %void None %3
|
||||||
|
%9 = OpLabel
|
||||||
|
%36 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
|
||||||
|
%37 = OpLoad %float %36
|
||||||
|
%38 = OpConvertFToS %int %37
|
||||||
|
%39 = OpAccessChain %_ptr_Uniform_uint %__0 %int_0 %38
|
||||||
|
%40 = OpLoad %uint %39
|
||||||
|
%41 = OpIAdd %uint %40 %uint_1
|
||||||
|
%42 = OpAccessChain %_ptr_Uniform_uint %__0 %int_0 %38
|
||||||
|
OpStore %42 %41
|
||||||
|
%43 = OpFunctionCall %void %callee2_
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,102 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.0
|
||||||
|
; Generator: Khronos Glslang Reference Front End; 7
|
||||||
|
; Bound: 45
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpCapability FragmentShaderPixelInterlockEXT
|
||||||
|
OpExtension "SPV_EXT_fragment_shader_interlock"
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %gl_FragCoord
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpExecutionMode %main PixelInterlockOrderedEXT
|
||||||
|
OpSource GLSL 450
|
||||||
|
OpSourceExtension "GL_ARB_fragment_shader_interlock"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %callee2_ "callee2("
|
||||||
|
OpName %callee_ "callee("
|
||||||
|
OpName %SSBO1 "SSBO1"
|
||||||
|
OpMemberName %SSBO1 0 "values1"
|
||||||
|
OpName %_ ""
|
||||||
|
OpName %gl_FragCoord "gl_FragCoord"
|
||||||
|
OpName %SSBO0 "SSBO0"
|
||||||
|
OpMemberName %SSBO0 0 "values0"
|
||||||
|
OpName %__0 ""
|
||||||
|
OpDecorate %_runtimearr_uint ArrayStride 4
|
||||||
|
OpMemberDecorate %SSBO1 0 Offset 0
|
||||||
|
OpDecorate %SSBO1 BufferBlock
|
||||||
|
OpDecorate %_ DescriptorSet 0
|
||||||
|
OpDecorate %_ Binding 1
|
||||||
|
OpDecorate %gl_FragCoord BuiltIn FragCoord
|
||||||
|
OpDecorate %_runtimearr_uint_0 ArrayStride 4
|
||||||
|
OpMemberDecorate %SSBO0 0 Offset 0
|
||||||
|
OpDecorate %SSBO0 BufferBlock
|
||||||
|
OpDecorate %__0 DescriptorSet 0
|
||||||
|
OpDecorate %__0 Binding 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%3 = OpTypeFunction %void
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_runtimearr_uint = OpTypeRuntimeArray %uint
|
||||||
|
%SSBO1 = OpTypeStruct %_runtimearr_uint
|
||||||
|
%_ptr_Uniform_SSBO1 = OpTypePointer Uniform %SSBO1
|
||||||
|
%_ = OpVariable %_ptr_Uniform_SSBO1 Uniform
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Input_v4float = OpTypePointer Input %v4float
|
||||||
|
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Input_float = OpTypePointer Input %float
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%_runtimearr_uint_0 = OpTypeRuntimeArray %uint
|
||||||
|
%SSBO0 = OpTypeStruct %_runtimearr_uint_0
|
||||||
|
%_ptr_Uniform_SSBO0 = OpTypePointer Uniform %SSBO0
|
||||||
|
%__0 = OpVariable %_ptr_Uniform_SSBO0 Uniform
|
||||||
|
%main = OpFunction %void None %3
|
||||||
|
%5 = OpLabel
|
||||||
|
%44 = OpFunctionCall %void %callee_
|
||||||
|
%call3res = OpFunctionCall %void %callee3_
|
||||||
|
%call4res = OpFunctionCall %void %callee4_
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee3_ = OpFunction %void None %3
|
||||||
|
%begin3 = OpLabel
|
||||||
|
OpBeginInvocationInterlockEXT
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee4_ = OpFunction %void None %3
|
||||||
|
%begin4 = OpLabel
|
||||||
|
OpEndInvocationInterlockEXT
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee2_ = OpFunction %void None %3
|
||||||
|
%7 = OpLabel
|
||||||
|
%23 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
|
||||||
|
%24 = OpLoad %float %23
|
||||||
|
%25 = OpConvertFToS %int %24
|
||||||
|
%28 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %25
|
||||||
|
%29 = OpLoad %uint %28
|
||||||
|
%30 = OpIAdd %uint %29 %uint_1
|
||||||
|
%31 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %25
|
||||||
|
OpStore %31 %30
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%callee_ = OpFunction %void None %3
|
||||||
|
%9 = OpLabel
|
||||||
|
%36 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
|
||||||
|
%37 = OpLoad %float %36
|
||||||
|
%38 = OpConvertFToS %int %37
|
||||||
|
%39 = OpAccessChain %_ptr_Uniform_uint %__0 %int_0 %38
|
||||||
|
%40 = OpLoad %uint %39
|
||||||
|
%41 = OpIAdd %uint %40 %uint_1
|
||||||
|
%42 = OpAccessChain %_ptr_Uniform_uint %__0 %int_0 %38
|
||||||
|
OpStore %42 %41
|
||||||
|
%43 = OpFunctionCall %void %callee2_
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,102 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.0
|
||||||
|
; Generator: Khronos Glslang Reference Front End; 7
|
||||||
|
; Bound: 45
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpCapability FragmentShaderPixelInterlockEXT
|
||||||
|
OpExtension "SPV_EXT_fragment_shader_interlock"
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %gl_FragCoord
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpExecutionMode %main PixelInterlockOrderedEXT
|
||||||
|
OpSource GLSL 450
|
||||||
|
OpSourceExtension "GL_ARB_fragment_shader_interlock"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %callee2_ "callee2("
|
||||||
|
OpName %callee_ "callee("
|
||||||
|
OpName %SSBO1 "SSBO1"
|
||||||
|
OpMemberName %SSBO1 0 "values1"
|
||||||
|
OpName %_ ""
|
||||||
|
OpName %gl_FragCoord "gl_FragCoord"
|
||||||
|
OpName %SSBO0 "SSBO0"
|
||||||
|
OpMemberName %SSBO0 0 "values0"
|
||||||
|
OpName %__0 ""
|
||||||
|
OpDecorate %_runtimearr_uint ArrayStride 4
|
||||||
|
OpMemberDecorate %SSBO1 0 Offset 0
|
||||||
|
OpDecorate %SSBO1 BufferBlock
|
||||||
|
OpDecorate %_ DescriptorSet 0
|
||||||
|
OpDecorate %_ Binding 1
|
||||||
|
OpDecorate %gl_FragCoord BuiltIn FragCoord
|
||||||
|
OpDecorate %_runtimearr_uint_0 ArrayStride 4
|
||||||
|
OpMemberDecorate %SSBO0 0 Offset 0
|
||||||
|
OpDecorate %SSBO0 BufferBlock
|
||||||
|
OpDecorate %__0 DescriptorSet 0
|
||||||
|
OpDecorate %__0 Binding 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%3 = OpTypeFunction %void
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_runtimearr_uint = OpTypeRuntimeArray %uint
|
||||||
|
%SSBO1 = OpTypeStruct %_runtimearr_uint
|
||||||
|
%_ptr_Uniform_SSBO1 = OpTypePointer Uniform %SSBO1
|
||||||
|
%_ = OpVariable %_ptr_Uniform_SSBO1 Uniform
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Input_v4float = OpTypePointer Input %v4float
|
||||||
|
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Input_float = OpTypePointer Input %float
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%_runtimearr_uint_0 = OpTypeRuntimeArray %uint
|
||||||
|
%SSBO0 = OpTypeStruct %_runtimearr_uint_0
|
||||||
|
%_ptr_Uniform_SSBO0 = OpTypePointer Uniform %SSBO0
|
||||||
|
%__0 = OpVariable %_ptr_Uniform_SSBO0 Uniform
|
||||||
|
%main = OpFunction %void None %3
|
||||||
|
%5 = OpLabel
|
||||||
|
%44 = OpFunctionCall %void %callee_
|
||||||
|
%call3res = OpFunctionCall %void %callee3_
|
||||||
|
%call4res = OpFunctionCall %void %callee4_
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee3_ = OpFunction %void None %3
|
||||||
|
%begin3 = OpLabel
|
||||||
|
OpBeginInvocationInterlockEXT
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee4_ = OpFunction %void None %3
|
||||||
|
%begin4 = OpLabel
|
||||||
|
OpEndInvocationInterlockEXT
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
||||||
|
%callee2_ = OpFunction %void None %3
|
||||||
|
%7 = OpLabel
|
||||||
|
%23 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
|
||||||
|
%24 = OpLoad %float %23
|
||||||
|
%25 = OpConvertFToS %int %24
|
||||||
|
%28 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %25
|
||||||
|
%29 = OpLoad %uint %28
|
||||||
|
%30 = OpIAdd %uint %29 %uint_1
|
||||||
|
%31 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %25
|
||||||
|
OpStore %31 %30
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%callee_ = OpFunction %void None %3
|
||||||
|
%9 = OpLabel
|
||||||
|
%36 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
|
||||||
|
%37 = OpLoad %float %36
|
||||||
|
%38 = OpConvertFToS %int %37
|
||||||
|
%39 = OpAccessChain %_ptr_Uniform_uint %__0 %int_0 %38
|
||||||
|
%40 = OpLoad %uint %39
|
||||||
|
%41 = OpIAdd %uint %40 %uint_1
|
||||||
|
%42 = OpAccessChain %_ptr_Uniform_uint %__0 %int_0 %38
|
||||||
|
OpStore %42 %41
|
||||||
|
%43 = OpFunctionCall %void %callee2_
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
Загрузка…
Ссылка в новой задаче