SPIRV-Cross/shaders-ue4/asm/tesc/tess-factor-must-be-threadgroup.asm.tesc
Hans-Kristian Arntzen 1d5eba67f8 MSL: Remove hacky workaround for patch constant passing.
There was a hack to workaround a bug in DXC where control point -> patch
constant phase was passed in Function storage, but we have to use
Workgroup here. We will not support these kinds of hacks for invalid
SPIR-V, so hack the reference files to use the "proper" fix and remove
the hack for time being.
2019-10-28 12:52:28 +01:00

353 lines
22 KiB
GLSL

; SPIR-V
; Version: 1.0
; Generator: Google spiregg; 0
; Bound: 179
; Schema: 0
OpCapability Tessellation
OpCapability SampledBuffer
OpExtension "SPV_GOOGLE_hlsl_functionality1"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint TessellationControl %MainHull "main" %in_var_TEXCOORD10_centroid %in_var_TEXCOORD11_centroid %in_var_VS_To_DS_Position %gl_InvocationID %out_var_TEXCOORD10_centroid %out_var_TEXCOORD11_centroid %out_var_VS_To_DS_Position %out_var_Flat_DisplacementScales %out_var_Flat_TessellationMultiplier %out_var_Flat_WorldDisplacementMultiplier %gl_TessLevelOuter %gl_TessLevelInner
OpExecutionMode %MainHull Triangles
OpExecutionMode %MainHull SpacingFractionalOdd
OpExecutionMode %MainHull VertexOrderCw
OpExecutionMode %MainHull OutputVertices 3
OpSource HLSL 600
OpName %FFlatTessellationHSToDS "FFlatTessellationHSToDS"
OpMemberName %FFlatTessellationHSToDS 0 "PassSpecificData"
OpMemberName %FFlatTessellationHSToDS 1 "DisplacementScale"
OpMemberName %FFlatTessellationHSToDS 2 "TessellationMultiplier"
OpMemberName %FFlatTessellationHSToDS 3 "WorldDisplacementMultiplier"
OpName %FBasePassVSToDS "FBasePassVSToDS"
OpMemberName %FBasePassVSToDS 0 "FactoryInterpolants"
OpMemberName %FBasePassVSToDS 1 "BasePassInterpolants"
OpMemberName %FBasePassVSToDS 2 "Position"
OpName %FVertexFactoryInterpolantsVSToDS "FVertexFactoryInterpolantsVSToDS"
OpMemberName %FVertexFactoryInterpolantsVSToDS 0 "InterpolantsVSToPS"
OpName %FVertexFactoryInterpolantsVSToPS "FVertexFactoryInterpolantsVSToPS"
OpMemberName %FVertexFactoryInterpolantsVSToPS 0 "TangentToWorld0"
OpMemberName %FVertexFactoryInterpolantsVSToPS 1 "TangentToWorld2"
OpName %FBasePassInterpolantsVSToDS "FBasePassInterpolantsVSToDS"
OpName %FSharedBasePassInterpolants "FSharedBasePassInterpolants"
OpName %type_Primitive "type.Primitive"
OpMemberName %type_Primitive 0 "Primitive_LocalToWorld"
OpMemberName %type_Primitive 1 "Primitive_InvNonUniformScaleAndDeterminantSign"
OpMemberName %type_Primitive 2 "Primitive_ObjectWorldPositionAndRadius"
OpMemberName %type_Primitive 3 "Primitive_WorldToLocal"
OpMemberName %type_Primitive 4 "Primitive_PreviousLocalToWorld"
OpMemberName %type_Primitive 5 "Primitive_PreviousWorldToLocal"
OpMemberName %type_Primitive 6 "Primitive_ActorWorldPosition"
OpMemberName %type_Primitive 7 "Primitive_UseSingleSampleShadowFromStationaryLights"
OpMemberName %type_Primitive 8 "Primitive_ObjectBounds"
OpMemberName %type_Primitive 9 "Primitive_LpvBiasMultiplier"
OpMemberName %type_Primitive 10 "Primitive_DecalReceiverMask"
OpMemberName %type_Primitive 11 "Primitive_PerObjectGBufferData"
OpMemberName %type_Primitive 12 "Primitive_UseVolumetricLightmapShadowFromStationaryLights"
OpMemberName %type_Primitive 13 "Primitive_DrawsVelocity"
OpMemberName %type_Primitive 14 "Primitive_ObjectOrientation"
OpMemberName %type_Primitive 15 "Primitive_NonUniformScale"
OpMemberName %type_Primitive 16 "Primitive_LocalObjectBoundsMin"
OpMemberName %type_Primitive 17 "Primitive_LightingChannelMask"
OpMemberName %type_Primitive 18 "Primitive_LocalObjectBoundsMax"
OpMemberName %type_Primitive 19 "Primitive_LightmapDataIndex"
OpMemberName %type_Primitive 20 "Primitive_PreSkinnedLocalBounds"
OpMemberName %type_Primitive 21 "Primitive_SingleCaptureIndex"
OpMemberName %type_Primitive 22 "Primitive_OutputVelocity"
OpMemberName %type_Primitive 23 "PrePadding_Primitive_420"
OpMemberName %type_Primitive 24 "PrePadding_Primitive_424"
OpMemberName %type_Primitive 25 "PrePadding_Primitive_428"
OpMemberName %type_Primitive 26 "Primitive_CustomPrimitiveData"
OpName %Primitive "Primitive"
OpName %type_Material "type.Material"
OpMemberName %type_Material 0 "Material_VectorExpressions"
OpMemberName %type_Material 1 "Material_ScalarExpressions"
OpName %Material "Material"
OpName %in_var_TEXCOORD10_centroid "in.var.TEXCOORD10_centroid"
OpName %in_var_TEXCOORD11_centroid "in.var.TEXCOORD11_centroid"
OpName %in_var_VS_To_DS_Position "in.var.VS_To_DS_Position"
OpName %out_var_TEXCOORD10_centroid "out.var.TEXCOORD10_centroid"
OpName %out_var_TEXCOORD11_centroid "out.var.TEXCOORD11_centroid"
OpName %out_var_VS_To_DS_Position "out.var.VS_To_DS_Position"
OpName %out_var_Flat_DisplacementScales "out.var.Flat_DisplacementScales"
OpName %out_var_Flat_TessellationMultiplier "out.var.Flat_TessellationMultiplier"
OpName %out_var_Flat_WorldDisplacementMultiplier "out.var.Flat_WorldDisplacementMultiplier"
OpName %MainHull "MainHull"
OpName %param_var_I "param.var.I"
OpName %temp_var_hullMainRetVal "temp.var.hullMainRetVal"
OpName %if_merge "if.merge"
OpDecorateString %in_var_TEXCOORD10_centroid UserSemantic "TEXCOORD10_centroid"
OpDecorateString %in_var_TEXCOORD11_centroid UserSemantic "TEXCOORD11_centroid"
OpDecorateString %in_var_VS_To_DS_Position UserSemantic "VS_To_DS_Position"
OpDecorate %gl_InvocationID BuiltIn InvocationId
OpDecorateString %gl_InvocationID UserSemantic "SV_OutputControlPointID"
OpDecorateString %out_var_TEXCOORD10_centroid UserSemantic "TEXCOORD10_centroid"
OpDecorateString %out_var_TEXCOORD11_centroid UserSemantic "TEXCOORD11_centroid"
OpDecorateString %out_var_VS_To_DS_Position UserSemantic "VS_To_DS_Position"
OpDecorateString %out_var_Flat_DisplacementScales UserSemantic "Flat_DisplacementScales"
OpDecorateString %out_var_Flat_TessellationMultiplier UserSemantic "Flat_TessellationMultiplier"
OpDecorateString %out_var_Flat_WorldDisplacementMultiplier UserSemantic "Flat_WorldDisplacementMultiplier"
OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
OpDecorateString %gl_TessLevelOuter UserSemantic "SV_TessFactor"
OpDecorate %gl_TessLevelOuter Patch
OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
OpDecorateString %gl_TessLevelInner UserSemantic "SV_InsideTessFactor"
OpDecorate %gl_TessLevelInner Patch
OpDecorate %in_var_TEXCOORD10_centroid Location 0
OpDecorate %in_var_TEXCOORD11_centroid Location 1
OpDecorate %in_var_VS_To_DS_Position Location 2
OpDecorate %out_var_Flat_DisplacementScales Location 0
OpDecorate %out_var_Flat_TessellationMultiplier Location 1
OpDecorate %out_var_Flat_WorldDisplacementMultiplier Location 2
OpDecorate %out_var_TEXCOORD10_centroid Location 3
OpDecorate %out_var_TEXCOORD11_centroid Location 4
OpDecorate %out_var_VS_To_DS_Position Location 5
OpDecorate %Primitive DescriptorSet 0
OpDecorate %Primitive Binding 0
OpDecorate %Material DescriptorSet 0
OpDecorate %Material Binding 1
OpDecorate %_arr_v4float_uint_4 ArrayStride 16
OpMemberDecorate %type_Primitive 0 Offset 0
OpMemberDecorate %type_Primitive 0 MatrixStride 16
OpMemberDecorate %type_Primitive 0 ColMajor
OpMemberDecorate %type_Primitive 1 Offset 64
OpMemberDecorate %type_Primitive 2 Offset 80
OpMemberDecorate %type_Primitive 3 Offset 96
OpMemberDecorate %type_Primitive 3 MatrixStride 16
OpMemberDecorate %type_Primitive 3 ColMajor
OpMemberDecorate %type_Primitive 4 Offset 160
OpMemberDecorate %type_Primitive 4 MatrixStride 16
OpMemberDecorate %type_Primitive 4 ColMajor
OpMemberDecorate %type_Primitive 5 Offset 224
OpMemberDecorate %type_Primitive 5 MatrixStride 16
OpMemberDecorate %type_Primitive 5 ColMajor
OpMemberDecorate %type_Primitive 6 Offset 288
OpMemberDecorate %type_Primitive 7 Offset 300
OpMemberDecorate %type_Primitive 8 Offset 304
OpMemberDecorate %type_Primitive 9 Offset 316
OpMemberDecorate %type_Primitive 10 Offset 320
OpMemberDecorate %type_Primitive 11 Offset 324
OpMemberDecorate %type_Primitive 12 Offset 328
OpMemberDecorate %type_Primitive 13 Offset 332
OpMemberDecorate %type_Primitive 14 Offset 336
OpMemberDecorate %type_Primitive 15 Offset 352
OpMemberDecorate %type_Primitive 16 Offset 368
OpMemberDecorate %type_Primitive 17 Offset 380
OpMemberDecorate %type_Primitive 18 Offset 384
OpMemberDecorate %type_Primitive 19 Offset 396
OpMemberDecorate %type_Primitive 20 Offset 400
OpMemberDecorate %type_Primitive 21 Offset 412
OpMemberDecorate %type_Primitive 22 Offset 416
OpMemberDecorate %type_Primitive 23 Offset 420
OpMemberDecorate %type_Primitive 24 Offset 424
OpMemberDecorate %type_Primitive 25 Offset 428
OpMemberDecorate %type_Primitive 26 Offset 432
OpDecorate %type_Primitive Block
OpDecorate %_arr_v4float_uint_3 ArrayStride 16
OpDecorate %_arr_v4float_uint_1 ArrayStride 16
OpMemberDecorate %type_Material 0 Offset 0
OpMemberDecorate %type_Material 1 Offset 48
OpDecorate %type_Material Block
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%mat4v4float = OpTypeMatrix %v4float 4
%v3float = OpTypeVector %float 3
%int = OpTypeInt 32 1
%uint = OpTypeInt 32 0
%uint_2 = OpConstant %uint 2
%uint_4 = OpConstant %uint 4
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%uint_3 = OpConstant %uint 3
%_arr_float_uint_3 = OpTypeArray %float %uint_3
%int_0 = OpConstant %int 0
%int_2 = OpConstant %int 2
%float_0_5 = OpConstant %float 0.5
%int_1 = OpConstant %int 1
%float_0_333000004 = OpConstant %float 0.333000004
%float_1 = OpConstant %float 1
%49 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%float_15 = OpConstant %float 15
%51 = OpConstantComposite %v4float %float_15 %float_15 %float_15 %float_15
%FVertexFactoryInterpolantsVSToPS = OpTypeStruct %v4float %v4float
%FVertexFactoryInterpolantsVSToDS = OpTypeStruct %FVertexFactoryInterpolantsVSToPS
%FSharedBasePassInterpolants = OpTypeStruct
%FBasePassInterpolantsVSToDS = OpTypeStruct %FSharedBasePassInterpolants
%FBasePassVSToDS = OpTypeStruct %FVertexFactoryInterpolantsVSToDS %FBasePassInterpolantsVSToDS %v4float
%FFlatTessellationHSToDS = OpTypeStruct %FBasePassVSToDS %v3float %float %float
%int_15 = OpConstant %int 15
%_arr_v4float_uint_4 = OpTypeArray %v4float %uint_4
%type_Primitive = OpTypeStruct %mat4v4float %v4float %v4float %mat4v4float %mat4v4float %mat4v4float %v3float %float %v3float %float %float %float %float %float %v4float %v4float %v3float %uint %v3float %uint %v3float %int %uint %uint %uint %uint %_arr_v4float_uint_4
%_ptr_Uniform_type_Primitive = OpTypePointer Uniform %type_Primitive
%_arr_v4float_uint_3 = OpTypeArray %v4float %uint_3
%_arr_v4float_uint_1 = OpTypeArray %v4float %uint_1
%type_Material = OpTypeStruct %_arr_v4float_uint_3 %_arr_v4float_uint_1
%_ptr_Uniform_type_Material = OpTypePointer Uniform %type_Material
%_arr_v4float_uint_3_0 = OpTypeArray %v4float %uint_3
%_ptr_Input__arr_v4float_uint_3_0 = OpTypePointer Input %_arr_v4float_uint_3_0
%_ptr_Input_uint = OpTypePointer Input %uint
%_ptr_Output__arr_v4float_uint_3_0 = OpTypePointer Output %_arr_v4float_uint_3_0
%_arr_v3float_uint_3 = OpTypeArray %v3float %uint_3
%_ptr_Output__arr_v3float_uint_3 = OpTypePointer Output %_arr_v3float_uint_3
%_ptr_Output__arr_float_uint_3 = OpTypePointer Output %_arr_float_uint_3
%_arr_float_uint_4 = OpTypeArray %float %uint_4
%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
%_arr_float_uint_2 = OpTypeArray %float %uint_2
%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
%void = OpTypeVoid
%67 = OpTypeFunction %void
%_arr_FBasePassVSToDS_uint_3 = OpTypeArray %FBasePassVSToDS %uint_3
%_ptr_Function__arr_FBasePassVSToDS_uint_3 = OpTypePointer Function %_arr_FBasePassVSToDS_uint_3
%_arr_FFlatTessellationHSToDS_uint_3 = OpTypeArray %FFlatTessellationHSToDS %uint_3
%_ptr_Function__arr_FFlatTessellationHSToDS_uint_3 = OpTypePointer Function %_arr_FFlatTessellationHSToDS_uint_3
%_ptr_Workgroup__arr_FFlatTessellationHSToDS_uint_3 = OpTypePointer Workgroup %_arr_FFlatTessellationHSToDS_uint_3
%_ptr_Output_v4float = OpTypePointer Output %v4float
%_ptr_Output_v3float = OpTypePointer Output %v3float
%_ptr_Output_float = OpTypePointer Output %float
%_ptr_Function_FFlatTessellationHSToDS = OpTypePointer Function %FFlatTessellationHSToDS
%_ptr_Workgroup_FFlatTessellationHSToDS = OpTypePointer Workgroup %FFlatTessellationHSToDS
%bool = OpTypeBool
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%mat3v3float = OpTypeMatrix %v3float 3
%_ptr_Function_FVertexFactoryInterpolantsVSToDS = OpTypePointer Function %FVertexFactoryInterpolantsVSToDS
%_ptr_Function_FBasePassVSToDS = OpTypePointer Function %FBasePassVSToDS
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%_ptr_Uniform_float = OpTypePointer Uniform %float
%Primitive = OpVariable %_ptr_Uniform_type_Primitive Uniform
%Material = OpVariable %_ptr_Uniform_type_Material Uniform
%in_var_TEXCOORD10_centroid = OpVariable %_ptr_Input__arr_v4float_uint_3_0 Input
%in_var_TEXCOORD11_centroid = OpVariable %_ptr_Input__arr_v4float_uint_3_0 Input
%in_var_VS_To_DS_Position = OpVariable %_ptr_Input__arr_v4float_uint_3_0 Input
%gl_InvocationID = OpVariable %_ptr_Input_uint Input
%out_var_TEXCOORD10_centroid = OpVariable %_ptr_Output__arr_v4float_uint_3_0 Output
%out_var_TEXCOORD11_centroid = OpVariable %_ptr_Output__arr_v4float_uint_3_0 Output
%out_var_VS_To_DS_Position = OpVariable %_ptr_Output__arr_v4float_uint_3_0 Output
%out_var_Flat_DisplacementScales = OpVariable %_ptr_Output__arr_v3float_uint_3 Output
%out_var_Flat_TessellationMultiplier = OpVariable %_ptr_Output__arr_float_uint_3 Output
%out_var_Flat_WorldDisplacementMultiplier = OpVariable %_ptr_Output__arr_float_uint_3 Output
%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
%83 = OpConstantNull %FSharedBasePassInterpolants
%84 = OpConstantComposite %FBasePassInterpolantsVSToDS %83
%85 = OpUndef %v4float
; XXX: Original asm used Function here, which is wrong.
; This patches the SPIR-V to be correct.
%temp_var_hullMainRetVal = OpVariable %_ptr_Workgroup__arr_FFlatTessellationHSToDS_uint_3 Workgroup
%MainHull = OpFunction %void None %67
%86 = OpLabel
%param_var_I = OpVariable %_ptr_Function__arr_FBasePassVSToDS_uint_3 Function
%87 = OpLoad %_arr_v4float_uint_3_0 %in_var_TEXCOORD10_centroid
%88 = OpLoad %_arr_v4float_uint_3_0 %in_var_TEXCOORD11_centroid
%89 = OpCompositeExtract %v4float %87 0
%90 = OpCompositeExtract %v4float %88 0
%91 = OpCompositeConstruct %FVertexFactoryInterpolantsVSToPS %89 %90
%92 = OpCompositeExtract %v4float %87 1
%93 = OpCompositeExtract %v4float %88 1
%94 = OpCompositeConstruct %FVertexFactoryInterpolantsVSToPS %92 %93
%95 = OpCompositeExtract %v4float %87 2
%96 = OpCompositeExtract %v4float %88 2
%97 = OpCompositeConstruct %FVertexFactoryInterpolantsVSToPS %95 %96
%98 = OpCompositeConstruct %FVertexFactoryInterpolantsVSToDS %91
%99 = OpCompositeConstruct %FVertexFactoryInterpolantsVSToDS %94
%100 = OpCompositeConstruct %FVertexFactoryInterpolantsVSToDS %97
%101 = OpLoad %_arr_v4float_uint_3_0 %in_var_VS_To_DS_Position
%102 = OpCompositeExtract %v4float %101 0
%103 = OpCompositeConstruct %FBasePassVSToDS %98 %84 %102
%104 = OpCompositeExtract %v4float %101 1
%105 = OpCompositeConstruct %FBasePassVSToDS %99 %84 %104
%106 = OpCompositeExtract %v4float %101 2
%107 = OpCompositeConstruct %FBasePassVSToDS %100 %84 %106
%108 = OpCompositeConstruct %_arr_FBasePassVSToDS_uint_3 %103 %105 %107
OpStore %param_var_I %108
%109 = OpLoad %uint %gl_InvocationID
%110 = OpAccessChain %_ptr_Function_FVertexFactoryInterpolantsVSToDS %param_var_I %109 %int_0
%111 = OpLoad %FVertexFactoryInterpolantsVSToDS %110
%112 = OpCompositeExtract %FVertexFactoryInterpolantsVSToPS %111 0
%113 = OpCompositeExtract %v4float %112 0
%114 = OpCompositeExtract %v4float %112 1
%115 = OpVectorShuffle %v3float %113 %113 0 1 2
%116 = OpVectorShuffle %v3float %114 %114 0 1 2
%117 = OpExtInst %v3float %1 Cross %116 %115
%118 = OpCompositeExtract %float %114 3
%119 = OpCompositeConstruct %v3float %118 %118 %118
%120 = OpFMul %v3float %117 %119
%121 = OpCompositeConstruct %mat3v3float %115 %120 %116
%122 = OpAccessChain %_ptr_Uniform_v4float %Primitive %int_15
%123 = OpLoad %v4float %122
%124 = OpVectorShuffle %v3float %123 %123 0 1 2
%125 = OpVectorTimesMatrix %v3float %124 %121
%126 = OpAccessChain %_ptr_Function_FBasePassVSToDS %param_var_I %109
%127 = OpLoad %FBasePassVSToDS %126
%128 = OpAccessChain %_ptr_Uniform_float %Material %int_1 %int_0 %int_0
%129 = OpLoad %float %128
%130 = OpCompositeConstruct %FFlatTessellationHSToDS %127 %125 %129 %float_1
%131 = OpCompositeExtract %FVertexFactoryInterpolantsVSToDS %127 0
%132 = OpCompositeExtract %FVertexFactoryInterpolantsVSToPS %131 0
%133 = OpCompositeExtract %v4float %132 0
%134 = OpAccessChain %_ptr_Output_v4float %out_var_TEXCOORD10_centroid %109
OpStore %134 %133
%135 = OpCompositeExtract %v4float %132 1
%136 = OpAccessChain %_ptr_Output_v4float %out_var_TEXCOORD11_centroid %109
OpStore %136 %135
%137 = OpCompositeExtract %v4float %127 2
%138 = OpAccessChain %_ptr_Output_v4float %out_var_VS_To_DS_Position %109
OpStore %138 %137
%139 = OpAccessChain %_ptr_Output_v3float %out_var_Flat_DisplacementScales %109
OpStore %139 %125
%140 = OpAccessChain %_ptr_Output_float %out_var_Flat_TessellationMultiplier %109
OpStore %140 %129
%141 = OpAccessChain %_ptr_Output_float %out_var_Flat_WorldDisplacementMultiplier %109
OpStore %141 %float_1
%142 = OpAccessChain %_ptr_Workgroup_FFlatTessellationHSToDS %temp_var_hullMainRetVal %109
OpStore %142 %130
OpControlBarrier %uint_2 %uint_4 %uint_0
%143 = OpIEqual %bool %109 %uint_0
OpSelectionMerge %if_merge None
OpBranchConditional %143 %144 %if_merge
%144 = OpLabel
%145 = OpAccessChain %_ptr_Workgroup_float %temp_var_hullMainRetVal %uint_1 %int_2
%146 = OpLoad %float %145
%147 = OpAccessChain %_ptr_Workgroup_float %temp_var_hullMainRetVal %uint_2 %int_2
%148 = OpLoad %float %147
%149 = OpFAdd %float %146 %148
%150 = OpFMul %float %float_0_5 %149
%151 = OpCompositeInsert %v4float %150 %85 0
%152 = OpLoad %float %147
%153 = OpAccessChain %_ptr_Workgroup_float %temp_var_hullMainRetVal %uint_0 %int_2
%154 = OpLoad %float %153
%155 = OpFAdd %float %152 %154
%156 = OpFMul %float %float_0_5 %155
%157 = OpCompositeInsert %v4float %156 %151 1
%158 = OpLoad %float %153
%159 = OpLoad %float %145
%160 = OpFAdd %float %158 %159
%161 = OpFMul %float %float_0_5 %160
%162 = OpCompositeInsert %v4float %161 %157 2
%163 = OpLoad %float %153
%164 = OpLoad %float %145
%165 = OpFAdd %float %163 %164
%166 = OpLoad %float %147
%167 = OpFAdd %float %165 %166
%168 = OpFMul %float %float_0_333000004 %167
%169 = OpCompositeInsert %v4float %168 %162 3
%170 = OpExtInst %v4float %1 FClamp %169 %49 %51
%171 = OpCompositeExtract %float %170 0
%172 = OpCompositeExtract %float %170 1
%173 = OpCompositeExtract %float %170 2
%174 = OpCompositeExtract %float %170 3
%175 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %uint_0
OpStore %175 %171
%176 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %uint_1
OpStore %176 %172
%177 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %uint_2
OpStore %177 %173
%178 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %uint_0
OpStore %178 %174
OpBranch %if_merge
%if_merge = OpLabel
OpReturn
OpFunctionEnd