blob: 5861f54ad05b65689ebae602e52fe206a86cb215 [file]
;
; vertex_main
;
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 1
; Bound: 517
; Schema: 0
OpCapability Shader
%44 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %vertex_main_position_Output %vertex_main___point_size_Output
OpMemberName %arg_0_params_block_tint_explicit_layout 0 "inner"
OpName %arg_0_params_block_tint_explicit_layout "arg_0_params_block_tint_explicit_layout"
OpName %arg_0_plane0 "arg_0_plane0"
OpName %arg_0_plane1 "arg_0_plane1"
OpName %vertex_main_position_Output "vertex_main_position_Output"
OpName %vertex_main___point_size_Output "vertex_main___point_size_Output"
OpName %textureLoad2d "textureLoad2d"
OpName %coords "coords"
OpMemberName %tint_ExternalTextureParams 0 "numPlanes"
OpMemberName %tint_ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %tint_ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %tint_TransferFunctionParams 0 "mode"
OpMemberName %tint_TransferFunctionParams 1 "A"
OpMemberName %tint_TransferFunctionParams 2 "B"
OpMemberName %tint_TransferFunctionParams 3 "C"
OpMemberName %tint_TransferFunctionParams 4 "D"
OpMemberName %tint_TransferFunctionParams 5 "E"
OpMemberName %tint_TransferFunctionParams 6 "F"
OpMemberName %tint_TransferFunctionParams 7 "G"
OpName %tint_TransferFunctionParams "tint_TransferFunctionParams"
OpMemberName %tint_ExternalTextureParams 3 "srcTransferFunction"
OpMemberName %tint_ExternalTextureParams 4 "dstTransferFunction"
OpMemberName %tint_ExternalTextureParams 5 "gamutConversionMatrix"
OpMemberName %tint_ExternalTextureParams 6 "sampleTransform"
OpMemberName %tint_ExternalTextureParams 7 "loadTransform"
OpMemberName %tint_ExternalTextureParams 8 "samplePlane0RectMin"
OpMemberName %tint_ExternalTextureParams 9 "samplePlane0RectMax"
OpMemberName %tint_ExternalTextureParams 10 "samplePlane1RectMin"
OpMemberName %tint_ExternalTextureParams 11 "samplePlane1RectMax"
OpMemberName %tint_ExternalTextureParams 12 "apparentSize"
OpMemberName %tint_ExternalTextureParams 13 "plane1CoordFactor"
OpMemberName %tint_ExternalTextureParams 14 "ootfParam"
OpName %tint_ExternalTextureParams "tint_ExternalTextureParams"
OpName %doTextureLoad "doTextureLoad"
OpName %res "res"
OpName %vertex_main_inner "vertex_main_inner"
OpName %tint_TextureLoadMultiplanarExternal "tint_TextureLoadMultiplanarExternal"
OpName %plane_0 "plane_0"
OpName %plane_1 "plane_1"
OpName %params "params"
OpName %coords_0 "coords"
OpName %tint_ApplySrcTransferFunction "tint_ApplySrcTransferFunction"
OpName %v "v"
OpName %params_0 "params"
OpName %return_value "return_value"
OpName %mode "mode"
OpName %tint_ApplyGammaTransferFunction "tint_ApplyGammaTransferFunction"
OpName %v_0 "v"
OpName %params_1 "params"
OpName %A "A"
OpName %B "B"
OpName %C "C"
OpName %D "D"
OpName %E "E"
OpName %F "F"
OpName %G "G"
OpName %tint_ApplyHLGSingleChannel "tint_ApplyHLGSingleChannel"
OpName %v_1 "v"
OpName %params_2 "params"
OpName %return_value_0 "return_value"
OpName %A_0 "A"
OpName %B_0 "B"
OpName %C_0 "C"
OpName %cutoff "cutoff"
OpName %lower_scale "lower_scale"
OpName %upper_scale "upper_scale"
OpName %tint_ApplyHLGTransferFunction "tint_ApplyHLGTransferFunction"
OpName %v_2 "v"
OpName %params_3 "params"
OpName %tint_ApplyPQTransferFunction "tint_ApplyPQTransferFunction"
OpName %v_3 "v"
OpName %params_4 "params"
OpName %m1 "m1"
OpName %m2 "m2"
OpName %c1 "c1"
OpName %c2 "c2"
OpName %c3 "c3"
OpName %start_byte_offset "start_byte_offset"
OpName %start_byte_offset_0 "start_byte_offset"
OpName %start_byte_offset_1 "start_byte_offset"
OpName %start_byte_offset_2 "start_byte_offset"
OpName %start_byte_offset_3 "start_byte_offset"
OpName %vertex_main "vertex_main"
OpDecorate %_arr_v4uint_uint_18 ArrayStride 16
OpMemberDecorate %arg_0_params_block_tint_explicit_layout 0 Offset 0
OpDecorate %arg_0_params_block_tint_explicit_layout Block
OpDecorate %1 DescriptorSet 1
OpDecorate %1 Binding 2
OpDecorate %1 NonWritable
OpDecorate %arg_0_plane0 DescriptorSet 1
OpDecorate %arg_0_plane0 Binding 0
OpDecorate %arg_0_plane1 DescriptorSet 1
OpDecorate %arg_0_plane1 Binding 1
OpDecorate %vertex_main_position_Output BuiltIn Position
OpDecorate %vertex_main___point_size_Output BuiltIn PointSize
%uint = OpTypeInt 32 0
%v4uint = OpTypeVector %uint 4
%uint_18 = OpConstant %uint 18
%_arr_v4uint_uint_18 = OpTypeArray %v4uint %uint_18
%arg_0_params_block_tint_explicit_layout = OpTypeStruct %_arr_v4uint_uint_18
%_ptr_Uniform_arg_0_params_block_tint_explicit_layout = OpTypePointer Uniform %arg_0_params_block_tint_explicit_layout
%1 = OpVariable %_ptr_Uniform_arg_0_params_block_tint_explicit_layout Uniform
%float = OpTypeFloat 32
%10 = OpTypeImage %float 2D 0 0 0 1 Unknown
%_ptr_UniformConstant_10 = OpTypePointer UniformConstant %10
%arg_0_plane0 = OpVariable %_ptr_UniformConstant_10 UniformConstant
%arg_0_plane1 = OpVariable %_ptr_UniformConstant_10 UniformConstant
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%vertex_main_position_Output = OpVariable %_ptr_Output_v4float Output
%_ptr_Output_float = OpTypePointer Output %float
%vertex_main___point_size_Output = OpVariable %_ptr_Output_float Output
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%22 = OpTypeFunction %v4float %v2int
%mat3v4float = OpTypeMatrix %v4float 3
%tint_TransferFunctionParams = OpTypeStruct %uint %float %float %float %float %float %float %float
%v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3
%v2float = OpTypeVector %float 2
%mat3v2float = OpTypeMatrix %v2float 3
%v2uint = OpTypeVector %uint 2
%tint_ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %tint_TransferFunctionParams %tint_TransferFunctionParams %mat3v3float %mat3v2float %mat3v2float %v2float %v2float %v2float %v2float %v2uint %v2float %v4float
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%39 = OpConstantComposite %v2uint %uint_1 %uint_1
%void = OpTypeVoid
%49 = OpTypeFunction %void
%52 = OpConstantNull %v2int
%_ptr_Function_v4float = OpTypePointer Function %v4float
%56 = OpTypeFunction %v4float
%59 = OpConstantNull %v4float
%64 = OpTypeFunction %v4float %10 %10 %tint_ExternalTextureParams %v2uint
%float_1 = OpConstant %float 1
%bool = OpTypeBool
%float_0 = OpConstant %float 0
%128 = OpTypeFunction %v3float %v3float %tint_TransferFunctionParams
%_ptr_Function_v3float = OpTypePointer Function %v3float
%132 = OpConstantNull %v3float
%v3bool = OpTypeVector %bool 3
%179 = OpTypeFunction %float %float %tint_TransferFunctionParams
%_ptr_Function_float = OpTypePointer Function %float
%183 = OpConstantNull %float
%226 = OpConstantComposite %v3float %float_1 %float_1 %float_1
%237 = OpTypeFunction %tint_ExternalTextureParams %uint
%uint_16 = OpConstant %uint 16
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
%uint_15 = OpConstant %uint 15
%uint_2 = OpConstant %uint 2
%uint_4 = OpConstant %uint 4
%uint_64 = OpConstant %uint 64
%uint_96 = OpConstant %uint 96
%uint_128 = OpConstant %uint 128
%uint_176 = OpConstant %uint 176
%uint_200 = OpConstant %uint 200
%uint_224 = OpConstant %uint 224
%v2bool = OpTypeVector %bool 2
%uint_232 = OpConstant %uint 232
%uint_240 = OpConstant %uint 240
%uint_248 = OpConstant %uint 248
%uint_256 = OpConstant %uint 256
%uint_264 = OpConstant %uint 264
%uint_272 = OpConstant %uint 272
%364 = OpTypeFunction %mat3v4float %uint
%uint_32 = OpConstant %uint 32
%383 = OpTypeFunction %tint_TransferFunctionParams %uint
%uint_8 = OpConstant %uint 8
%uint_12 = OpConstant %uint 12
%uint_20 = OpConstant %uint 20
%uint_24 = OpConstant %uint 24
%uint_28 = OpConstant %uint 28
%454 = OpTypeFunction %mat3v3float %uint
%v3uint = OpTypeVector %uint 3
%476 = OpTypeFunction %mat3v2float %uint
%textureLoad2d = OpFunction %v4float None %22
%coords = OpFunctionParameter %v2int
%23 = OpLabel
%24 = OpLoad %10 %arg_0_plane0 None
%25 = OpLoad %10 %arg_0_plane1 None
%26 = OpFunctionCall %tint_ExternalTextureParams %35 %uint_0
%37 = OpCompositeExtract %v2uint %26 12
%38 = OpIAdd %v2uint %37 %39
%41 = OpISub %v2uint %38 %39
%42 = OpBitcast %v2uint %coords
%43 = OpExtInst %v2uint %44 UMin %42 %41
%45 = OpFunctionCall %v4float %tint_TextureLoadMultiplanarExternal %24 %25 %26 %43
OpReturnValue %45
OpFunctionEnd
%doTextureLoad = OpFunction %void None %49
%50 = OpLabel
%res = OpVariable %_ptr_Function_v4float Function
%51 = OpFunctionCall %v4float %textureLoad2d %52
OpStore %res %51
OpReturn
OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %56
%57 = OpLabel
%58 = OpFunctionCall %void %doTextureLoad
OpReturnValue %59
OpFunctionEnd
%tint_TextureLoadMultiplanarExternal = OpFunction %v4float None %64
%plane_0 = OpFunctionParameter %10
%plane_1 = OpFunctionParameter %10
%params = OpFunctionParameter %tint_ExternalTextureParams
%coords_0 = OpFunctionParameter %v2uint
%65 = OpLabel
%66 = OpCompositeExtract %mat3v4float %params 2
%67 = OpCompositeExtract %mat3v2float %params 7
%68 = OpCompositeExtract %v2uint %params 12
%69 = OpCompositeExtract %v2float %params 13
%70 = OpExtInst %v2uint %44 UMin %coords_0 %68
%71 = OpConvertUToF %v2float %70
%72 = OpCompositeConstruct %v3float %71 %float_1
%74 = OpMatrixTimesVector %v2float %67 %72
%75 = OpExtInst %v2float %44 RoundEven %74
%76 = OpConvertFToU %v2uint %75
%77 = OpCompositeExtract %uint %params 0
%78 = OpIEqual %bool %77 %uint_1
OpSelectionMerge %80 None
OpBranchConditional %78 %81 %82
%81 = OpLabel
%97 = OpImageFetch %v4float %plane_0 %76 Lod %uint_0
%84 = OpVectorShuffle %v3float %97 %97 0 1 2
%87 = OpCompositeExtract %float %97 3
OpBranch %80
%82 = OpLabel
%98 = OpImageFetch %v4float %plane_0 %76 Lod %uint_0
%99 = OpCompositeExtract %float %98 0
%100 = OpFMul %v2float %75 %69
%101 = OpConvertFToU %v2uint %100
%102 = OpImageFetch %v4float %plane_1 %101 Lod %uint_0
%103 = OpVectorShuffle %v2float %102 %102 0 1
%104 = OpCompositeConstruct %v4float %99 %103 %float_1
%85 = OpVectorTimesMatrix %v3float %104 %66
OpBranch %80
%80 = OpLabel
%83 = OpPhi %v3float %84 %81 %85 %82
%86 = OpPhi %float %87 %81 %float_1 %82
%88 = OpCompositeExtract %uint %params 1
%89 = OpIEqual %bool %88 %uint_0
OpSelectionMerge %90 None
OpBranchConditional %89 %91 %92
%91 = OpLabel
%105 = OpCompositeExtract %tint_TransferFunctionParams %params 3
%106 = OpCompositeExtract %tint_TransferFunctionParams %params 4
%107 = OpCompositeExtract %mat3v3float %params 5
%108 = OpCompositeExtract %v4float %params 14
%109 = OpFunctionCall %v3float %tint_ApplySrcTransferFunction %83 %105
%111 = OpCompositeExtract %float %108 3
%112 = OpFOrdNotEqual %bool %111 %float_0
OpSelectionMerge %93 None
OpBranchConditional %112 %114 %115
%114 = OpLabel
%120 = OpVectorShuffle %v3float %108 %108 0 1 2
%121 = OpDot %float %120 %109
%122 = OpExtInst %float %44 FAbs %121
%123 = OpExtInst %float %44 Pow %122 %111
%124 = OpExtInst %float %44 FSign %121
%125 = OpFMul %float %124 %123
%117 = OpVectorTimesScalar %v3float %109 %125
OpBranch %93
%115 = OpLabel
OpBranch %93
%93 = OpLabel
%116 = OpPhi %v3float %117 %114 %109 %115
%118 = OpMatrixTimesVector %v3float %107 %116
%95 = OpFunctionCall %v3float %tint_ApplyGammaTransferFunction %118 %106
OpBranch %90
%92 = OpLabel
OpBranch %90
%90 = OpLabel
%94 = OpPhi %v3float %83 %92 %95 %93
%96 = OpCompositeConstruct %v4float %94 %86
OpReturnValue %96
OpFunctionEnd
%tint_ApplySrcTransferFunction = OpFunction %v3float None %128
%v = OpFunctionParameter %v3float
%params_0 = OpFunctionParameter %tint_TransferFunctionParams
%129 = OpLabel
%return_value = OpVariable %_ptr_Function_v3float Function %132
%mode = OpCompositeExtract %uint %params_0 0
%134 = OpIEqual %bool %mode %uint_0
OpSelectionMerge %135 None
OpBranchConditional %134 %136 %137
%136 = OpLabel
%139 = OpFunctionCall %v3float %tint_ApplyGammaTransferFunction %v %params_0
OpStore %return_value %139 None
OpBranch %135
%137 = OpLabel
%140 = OpIEqual %bool %mode %uint_1
OpSelectionMerge %141 None
OpBranchConditional %140 %142 %143
%142 = OpLabel
%144 = OpFunctionCall %v3float %tint_ApplyHLGTransferFunction %v %params_0
OpStore %return_value %144 None
OpBranch %141
%143 = OpLabel
%146 = OpFunctionCall %v3float %tint_ApplyPQTransferFunction %v %params_0
OpStore %return_value %146 None
OpBranch %141
%141 = OpLabel
OpBranch %135
%135 = OpLabel
%138 = OpLoad %v3float %return_value None
OpReturnValue %138
OpFunctionEnd
%tint_ApplyGammaTransferFunction = OpFunction %v3float None %128
%v_0 = OpFunctionParameter %v3float
%params_1 = OpFunctionParameter %tint_TransferFunctionParams
%150 = OpLabel
%A = OpCompositeExtract %float %params_1 1
%B = OpCompositeExtract %float %params_1 2
%C = OpCompositeExtract %float %params_1 3
%D = OpCompositeExtract %float %params_1 4
%E = OpCompositeExtract %float %params_1 5
%F = OpCompositeExtract %float %params_1 6
%G = OpCompositeExtract %float %params_1 7
%158 = OpCompositeConstruct %v3float %G %G %G
%159 = OpCompositeConstruct %v3float %D %D %D
%160 = OpExtInst %v3float %44 FAbs %v_0
%161 = OpExtInst %v3float %44 FSign %v_0
%162 = OpFOrdLessThan %v3bool %160 %159
%164 = OpVectorTimesScalar %v3float %160 %C
%165 = OpCompositeConstruct %v3float %F %F %F
%166 = OpFAdd %v3float %164 %165
%167 = OpFMul %v3float %161 %166
%168 = OpVectorTimesScalar %v3float %160 %A
%169 = OpCompositeConstruct %v3float %B %B %B
%170 = OpFAdd %v3float %168 %169
%171 = OpExtInst %v3float %44 Pow %170 %158
%172 = OpCompositeConstruct %v3float %E %E %E
%173 = OpFAdd %v3float %171 %172
%174 = OpFMul %v3float %161 %173
%175 = OpSelect %v3float %162 %167 %174
OpReturnValue %175
OpFunctionEnd
%tint_ApplyHLGSingleChannel = OpFunction %float None %179
%v_1 = OpFunctionParameter %float
%params_2 = OpFunctionParameter %tint_TransferFunctionParams
%180 = OpLabel
%return_value_0 = OpVariable %_ptr_Function_float Function %183
%A_0 = OpCompositeExtract %float %params_2 1
%B_0 = OpCompositeExtract %float %params_2 2
%C_0 = OpCompositeExtract %float %params_2 3
%cutoff = OpCompositeExtract %float %params_2 4
%lower_scale = OpCompositeExtract %float %params_2 5
%upper_scale = OpCompositeExtract %float %params_2 6
%190 = OpFOrdLessThanEqual %bool %v_1 %cutoff
OpSelectionMerge %191 None
OpBranchConditional %190 %192 %193
%192 = OpLabel
%195 = OpFMul %float %v_1 %v_1
%196 = OpFDiv %float %195 %lower_scale
OpStore %return_value_0 %196 None
OpBranch %191
%193 = OpLabel
%197 = OpFSub %float %v_1 %C_0
%198 = OpFDiv %float %197 %A_0
%199 = OpExtInst %float %44 Exp %198
%200 = OpFAdd %float %B_0 %199
%201 = OpFDiv %float %200 %upper_scale
OpStore %return_value_0 %201 None
OpBranch %191
%191 = OpLabel
%194 = OpLoad %float %return_value_0 None
OpReturnValue %194
OpFunctionEnd
%tint_ApplyHLGTransferFunction = OpFunction %v3float None %128
%v_2 = OpFunctionParameter %v3float
%params_3 = OpFunctionParameter %tint_TransferFunctionParams
%204 = OpLabel
%205 = OpCompositeExtract %float %v_2 0
%206 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %205 %params_3
%207 = OpCompositeExtract %float %v_2 1
%208 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %207 %params_3
%209 = OpCompositeExtract %float %v_2 2
%210 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %209 %params_3
%211 = OpCompositeConstruct %v3float %206 %208 %210
OpReturnValue %211
OpFunctionEnd
%tint_ApplyPQTransferFunction = OpFunction %v3float None %128
%v_3 = OpFunctionParameter %v3float
%params_4 = OpFunctionParameter %tint_TransferFunctionParams
%214 = OpLabel
%m1 = OpCompositeExtract %float %params_4 1
%m2 = OpCompositeExtract %float %params_4 2
%c1 = OpCompositeExtract %float %params_4 3
%c2 = OpCompositeExtract %float %params_4 4
%c3 = OpCompositeExtract %float %params_4 5
%220 = OpCompositeConstruct %v3float %c1 %c1 %c1
%221 = OpCompositeConstruct %v3float %c2 %c2 %c2
%222 = OpCompositeConstruct %v3float %c3 %c3 %c3
%223 = OpCompositeConstruct %v3float %m1 %m1 %m1
%224 = OpCompositeConstruct %v3float %m2 %m2 %m2
%225 = OpExtInst %v3float %44 NClamp %v_3 %132 %226
%227 = OpFDiv %v3float %226 %224
%228 = OpExtInst %v3float %44 Pow %225 %227
%229 = OpFSub %v3float %228 %220
%230 = OpExtInst %v3float %44 NMax %229 %132
%231 = OpFMul %v3float %222 %228
%232 = OpFSub %v3float %221 %231
%233 = OpFDiv %v3float %230 %232
%234 = OpFDiv %v3float %226 %223
%235 = OpExtInst %v3float %44 Pow %233 %234
OpReturnValue %235
OpFunctionEnd
%35 = OpFunction %tint_ExternalTextureParams None %237
%start_byte_offset = OpFunctionParameter %uint
%238 = OpLabel
%239 = OpUDiv %uint %start_byte_offset %uint_16
%241 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %239
%243 = OpBitwiseAnd %uint %start_byte_offset %uint_15
%245 = OpShiftRightLogical %uint %243 %uint_2
%247 = OpLoad %v4uint %241 None
%248 = OpVectorExtractDynamic %uint %247 %245
%249 = OpIAdd %uint %uint_4 %start_byte_offset
%251 = OpUDiv %uint %249 %uint_16
%252 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %251
%253 = OpBitwiseAnd %uint %249 %uint_15
%254 = OpShiftRightLogical %uint %253 %uint_2
%255 = OpLoad %v4uint %252 None
%256 = OpVectorExtractDynamic %uint %255 %254
%257 = OpIAdd %uint %uint_16 %start_byte_offset
%258 = OpFunctionCall %mat3v4float %259 %257
%260 = OpIAdd %uint %uint_64 %start_byte_offset
%262 = OpFunctionCall %tint_TransferFunctionParams %263 %260
%264 = OpIAdd %uint %uint_96 %start_byte_offset
%266 = OpFunctionCall %tint_TransferFunctionParams %263 %264
%267 = OpIAdd %uint %uint_128 %start_byte_offset
%269 = OpFunctionCall %mat3v3float %270 %267
%271 = OpIAdd %uint %uint_176 %start_byte_offset
%273 = OpFunctionCall %mat3v2float %274 %271
%275 = OpIAdd %uint %uint_200 %start_byte_offset
%277 = OpFunctionCall %mat3v2float %274 %275
%278 = OpIAdd %uint %uint_224 %start_byte_offset
%280 = OpUDiv %uint %278 %uint_16
%281 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %280
%282 = OpLoad %v4uint %281 None
%283 = OpBitwiseAnd %uint %278 %uint_15
%284 = OpShiftRightLogical %uint %283 %uint_2
%285 = OpVectorShuffle %v2uint %282 %282 2 3
%286 = OpVectorShuffle %v2uint %282 %282 0 1
%287 = OpIEqual %bool %284 %uint_2
%289 = OpCompositeConstruct %v2bool %287 %287
%290 = OpSelect %v2uint %289 %285 %286
%291 = OpBitcast %v2float %290
%292 = OpIAdd %uint %uint_232 %start_byte_offset
%294 = OpUDiv %uint %292 %uint_16
%295 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %294
%296 = OpLoad %v4uint %295 None
%297 = OpBitwiseAnd %uint %292 %uint_15
%298 = OpShiftRightLogical %uint %297 %uint_2
%299 = OpVectorShuffle %v2uint %296 %296 2 3
%300 = OpVectorShuffle %v2uint %296 %296 0 1
%301 = OpIEqual %bool %298 %uint_2
%302 = OpCompositeConstruct %v2bool %301 %301
%303 = OpSelect %v2uint %302 %299 %300
%304 = OpBitcast %v2float %303
%305 = OpIAdd %uint %uint_240 %start_byte_offset
%307 = OpUDiv %uint %305 %uint_16
%308 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %307
%309 = OpLoad %v4uint %308 None
%310 = OpBitwiseAnd %uint %305 %uint_15
%311 = OpShiftRightLogical %uint %310 %uint_2
%312 = OpVectorShuffle %v2uint %309 %309 2 3
%313 = OpVectorShuffle %v2uint %309 %309 0 1
%314 = OpIEqual %bool %311 %uint_2
%315 = OpCompositeConstruct %v2bool %314 %314
%316 = OpSelect %v2uint %315 %312 %313
%317 = OpBitcast %v2float %316
%318 = OpIAdd %uint %uint_248 %start_byte_offset
%320 = OpUDiv %uint %318 %uint_16
%321 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %320
%322 = OpLoad %v4uint %321 None
%323 = OpBitwiseAnd %uint %318 %uint_15
%324 = OpShiftRightLogical %uint %323 %uint_2
%325 = OpVectorShuffle %v2uint %322 %322 2 3
%326 = OpVectorShuffle %v2uint %322 %322 0 1
%327 = OpIEqual %bool %324 %uint_2
%328 = OpCompositeConstruct %v2bool %327 %327
%329 = OpSelect %v2uint %328 %325 %326
%330 = OpBitcast %v2float %329
%331 = OpIAdd %uint %uint_256 %start_byte_offset
%333 = OpUDiv %uint %331 %uint_16
%334 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %333
%335 = OpLoad %v4uint %334 None
%336 = OpBitwiseAnd %uint %331 %uint_15
%337 = OpShiftRightLogical %uint %336 %uint_2
%338 = OpVectorShuffle %v2uint %335 %335 2 3
%339 = OpVectorShuffle %v2uint %335 %335 0 1
%340 = OpIEqual %bool %337 %uint_2
%341 = OpCompositeConstruct %v2bool %340 %340
%342 = OpSelect %v2uint %341 %338 %339
%343 = OpIAdd %uint %uint_264 %start_byte_offset
%345 = OpUDiv %uint %343 %uint_16
%346 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %345
%347 = OpLoad %v4uint %346 None
%348 = OpBitwiseAnd %uint %343 %uint_15
%349 = OpShiftRightLogical %uint %348 %uint_2
%350 = OpVectorShuffle %v2uint %347 %347 2 3
%351 = OpVectorShuffle %v2uint %347 %347 0 1
%352 = OpIEqual %bool %349 %uint_2
%353 = OpCompositeConstruct %v2bool %352 %352
%354 = OpSelect %v2uint %353 %350 %351
%355 = OpBitcast %v2float %354
%356 = OpIAdd %uint %uint_272 %start_byte_offset
%358 = OpUDiv %uint %356 %uint_16
%359 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %358
%360 = OpLoad %v4uint %359 None
%361 = OpBitcast %v4float %360
%362 = OpCompositeConstruct %tint_ExternalTextureParams %248 %256 %258 %262 %266 %269 %273 %277 %291 %304 %317 %330 %342 %355 %361
OpReturnValue %362
OpFunctionEnd
%259 = OpFunction %mat3v4float None %364
%start_byte_offset_0 = OpFunctionParameter %uint
%365 = OpLabel
%366 = OpUDiv %uint %start_byte_offset_0 %uint_16
%367 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %366
%368 = OpLoad %v4uint %367 None
%369 = OpBitcast %v4float %368
%370 = OpIAdd %uint %uint_16 %start_byte_offset_0
%371 = OpUDiv %uint %370 %uint_16
%372 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %371
%373 = OpLoad %v4uint %372 None
%374 = OpBitcast %v4float %373
%375 = OpIAdd %uint %uint_32 %start_byte_offset_0
%377 = OpUDiv %uint %375 %uint_16
%378 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %377
%379 = OpLoad %v4uint %378 None
%380 = OpBitcast %v4float %379
%381 = OpCompositeConstruct %mat3v4float %369 %374 %380
OpReturnValue %381
OpFunctionEnd
%263 = OpFunction %tint_TransferFunctionParams None %383
%start_byte_offset_1 = OpFunctionParameter %uint
%384 = OpLabel
%385 = OpUDiv %uint %start_byte_offset_1 %uint_16
%386 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %385
%387 = OpBitwiseAnd %uint %start_byte_offset_1 %uint_15
%388 = OpShiftRightLogical %uint %387 %uint_2
%389 = OpLoad %v4uint %386 None
%390 = OpVectorExtractDynamic %uint %389 %388
%391 = OpIAdd %uint %uint_4 %start_byte_offset_1
%392 = OpUDiv %uint %391 %uint_16
%393 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %392
%394 = OpBitwiseAnd %uint %391 %uint_15
%395 = OpShiftRightLogical %uint %394 %uint_2
%396 = OpLoad %v4uint %393 None
%397 = OpVectorExtractDynamic %uint %396 %395
%398 = OpBitcast %float %397
%399 = OpIAdd %uint %uint_8 %start_byte_offset_1
%401 = OpUDiv %uint %399 %uint_16
%402 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %401
%403 = OpBitwiseAnd %uint %399 %uint_15
%404 = OpShiftRightLogical %uint %403 %uint_2
%405 = OpLoad %v4uint %402 None
%406 = OpVectorExtractDynamic %uint %405 %404
%407 = OpBitcast %float %406
%408 = OpIAdd %uint %uint_12 %start_byte_offset_1
%410 = OpUDiv %uint %408 %uint_16
%411 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %410
%412 = OpBitwiseAnd %uint %408 %uint_15
%413 = OpShiftRightLogical %uint %412 %uint_2
%414 = OpLoad %v4uint %411 None
%415 = OpVectorExtractDynamic %uint %414 %413
%416 = OpBitcast %float %415
%417 = OpIAdd %uint %uint_16 %start_byte_offset_1
%418 = OpUDiv %uint %417 %uint_16
%419 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %418
%420 = OpBitwiseAnd %uint %417 %uint_15
%421 = OpShiftRightLogical %uint %420 %uint_2
%422 = OpLoad %v4uint %419 None
%423 = OpVectorExtractDynamic %uint %422 %421
%424 = OpBitcast %float %423
%425 = OpIAdd %uint %uint_20 %start_byte_offset_1
%427 = OpUDiv %uint %425 %uint_16
%428 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %427
%429 = OpBitwiseAnd %uint %425 %uint_15
%430 = OpShiftRightLogical %uint %429 %uint_2
%431 = OpLoad %v4uint %428 None
%432 = OpVectorExtractDynamic %uint %431 %430
%433 = OpBitcast %float %432
%434 = OpIAdd %uint %uint_24 %start_byte_offset_1
%436 = OpUDiv %uint %434 %uint_16
%437 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %436
%438 = OpBitwiseAnd %uint %434 %uint_15
%439 = OpShiftRightLogical %uint %438 %uint_2
%440 = OpLoad %v4uint %437 None
%441 = OpVectorExtractDynamic %uint %440 %439
%442 = OpBitcast %float %441
%443 = OpIAdd %uint %uint_28 %start_byte_offset_1
%445 = OpUDiv %uint %443 %uint_16
%446 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %445
%447 = OpBitwiseAnd %uint %443 %uint_15
%448 = OpShiftRightLogical %uint %447 %uint_2
%449 = OpLoad %v4uint %446 None
%450 = OpVectorExtractDynamic %uint %449 %448
%451 = OpBitcast %float %450
%452 = OpCompositeConstruct %tint_TransferFunctionParams %390 %398 %407 %416 %424 %433 %442 %451
OpReturnValue %452
OpFunctionEnd
%270 = OpFunction %mat3v3float None %454
%start_byte_offset_2 = OpFunctionParameter %uint
%455 = OpLabel
%456 = OpUDiv %uint %start_byte_offset_2 %uint_16
%457 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %456
%458 = OpLoad %v4uint %457 None
%459 = OpVectorShuffle %v3uint %458 %458 0 1 2
%461 = OpBitcast %v3float %459
%462 = OpIAdd %uint %uint_16 %start_byte_offset_2
%463 = OpUDiv %uint %462 %uint_16
%464 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %463
%465 = OpLoad %v4uint %464 None
%466 = OpVectorShuffle %v3uint %465 %465 0 1 2
%467 = OpBitcast %v3float %466
%468 = OpIAdd %uint %uint_32 %start_byte_offset_2
%469 = OpUDiv %uint %468 %uint_16
%470 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %469
%471 = OpLoad %v4uint %470 None
%472 = OpVectorShuffle %v3uint %471 %471 0 1 2
%473 = OpBitcast %v3float %472
%474 = OpCompositeConstruct %mat3v3float %461 %467 %473
OpReturnValue %474
OpFunctionEnd
%274 = OpFunction %mat3v2float None %476
%start_byte_offset_3 = OpFunctionParameter %uint
%477 = OpLabel
%478 = OpUDiv %uint %start_byte_offset_3 %uint_16
%479 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %478
%480 = OpLoad %v4uint %479 None
%481 = OpBitwiseAnd %uint %start_byte_offset_3 %uint_15
%482 = OpShiftRightLogical %uint %481 %uint_2
%483 = OpVectorShuffle %v2uint %480 %480 2 3
%484 = OpVectorShuffle %v2uint %480 %480 0 1
%485 = OpIEqual %bool %482 %uint_2
%486 = OpCompositeConstruct %v2bool %485 %485
%487 = OpSelect %v2uint %486 %483 %484
%488 = OpBitcast %v2float %487
%489 = OpIAdd %uint %uint_8 %start_byte_offset_3
%490 = OpUDiv %uint %489 %uint_16
%491 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %490
%492 = OpLoad %v4uint %491 None
%493 = OpBitwiseAnd %uint %489 %uint_15
%494 = OpShiftRightLogical %uint %493 %uint_2
%495 = OpVectorShuffle %v2uint %492 %492 2 3
%496 = OpVectorShuffle %v2uint %492 %492 0 1
%497 = OpIEqual %bool %494 %uint_2
%498 = OpCompositeConstruct %v2bool %497 %497
%499 = OpSelect %v2uint %498 %495 %496
%500 = OpBitcast %v2float %499
%501 = OpIAdd %uint %uint_16 %start_byte_offset_3
%502 = OpUDiv %uint %501 %uint_16
%503 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %502
%504 = OpLoad %v4uint %503 None
%505 = OpBitwiseAnd %uint %501 %uint_15
%506 = OpShiftRightLogical %uint %505 %uint_2
%507 = OpVectorShuffle %v2uint %504 %504 2 3
%508 = OpVectorShuffle %v2uint %504 %504 0 1
%509 = OpIEqual %bool %506 %uint_2
%510 = OpCompositeConstruct %v2bool %509 %509
%511 = OpSelect %v2uint %510 %507 %508
%512 = OpBitcast %v2float %511
%513 = OpCompositeConstruct %mat3v2float %488 %500 %512
OpReturnValue %513
OpFunctionEnd
%vertex_main = OpFunction %void None %49
%515 = OpLabel
%516 = OpFunctionCall %v4float %vertex_main_inner
OpStore %vertex_main_position_Output %516 None
OpStore %vertex_main___point_size_Output %float_1 None
OpReturn
OpFunctionEnd
;
; fragment_main
;
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 1
; Bound: 508
; Schema: 0
OpCapability Shader
%40 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %fragment_main "fragment_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpMemberName %arg_0_params_block_tint_explicit_layout 0 "inner"
OpName %arg_0_params_block_tint_explicit_layout "arg_0_params_block_tint_explicit_layout"
OpName %arg_0_plane0 "arg_0_plane0"
OpName %arg_0_plane1 "arg_0_plane1"
OpName %textureLoad2d "textureLoad2d"
OpName %coords "coords"
OpMemberName %tint_ExternalTextureParams 0 "numPlanes"
OpMemberName %tint_ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %tint_ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %tint_TransferFunctionParams 0 "mode"
OpMemberName %tint_TransferFunctionParams 1 "A"
OpMemberName %tint_TransferFunctionParams 2 "B"
OpMemberName %tint_TransferFunctionParams 3 "C"
OpMemberName %tint_TransferFunctionParams 4 "D"
OpMemberName %tint_TransferFunctionParams 5 "E"
OpMemberName %tint_TransferFunctionParams 6 "F"
OpMemberName %tint_TransferFunctionParams 7 "G"
OpName %tint_TransferFunctionParams "tint_TransferFunctionParams"
OpMemberName %tint_ExternalTextureParams 3 "srcTransferFunction"
OpMemberName %tint_ExternalTextureParams 4 "dstTransferFunction"
OpMemberName %tint_ExternalTextureParams 5 "gamutConversionMatrix"
OpMemberName %tint_ExternalTextureParams 6 "sampleTransform"
OpMemberName %tint_ExternalTextureParams 7 "loadTransform"
OpMemberName %tint_ExternalTextureParams 8 "samplePlane0RectMin"
OpMemberName %tint_ExternalTextureParams 9 "samplePlane0RectMax"
OpMemberName %tint_ExternalTextureParams 10 "samplePlane1RectMin"
OpMemberName %tint_ExternalTextureParams 11 "samplePlane1RectMax"
OpMemberName %tint_ExternalTextureParams 12 "apparentSize"
OpMemberName %tint_ExternalTextureParams 13 "plane1CoordFactor"
OpMemberName %tint_ExternalTextureParams 14 "ootfParam"
OpName %tint_ExternalTextureParams "tint_ExternalTextureParams"
OpName %doTextureLoad "doTextureLoad"
OpName %res "res"
OpName %fragment_main "fragment_main"
OpName %tint_TextureLoadMultiplanarExternal "tint_TextureLoadMultiplanarExternal"
OpName %plane_0 "plane_0"
OpName %plane_1 "plane_1"
OpName %params "params"
OpName %coords_0 "coords"
OpName %tint_ApplySrcTransferFunction "tint_ApplySrcTransferFunction"
OpName %v "v"
OpName %params_0 "params"
OpName %return_value "return_value"
OpName %mode "mode"
OpName %tint_ApplyGammaTransferFunction "tint_ApplyGammaTransferFunction"
OpName %v_0 "v"
OpName %params_1 "params"
OpName %A "A"
OpName %B "B"
OpName %C "C"
OpName %D "D"
OpName %E "E"
OpName %F "F"
OpName %G "G"
OpName %tint_ApplyHLGSingleChannel "tint_ApplyHLGSingleChannel"
OpName %v_1 "v"
OpName %params_2 "params"
OpName %return_value_0 "return_value"
OpName %A_0 "A"
OpName %B_0 "B"
OpName %C_0 "C"
OpName %cutoff "cutoff"
OpName %lower_scale "lower_scale"
OpName %upper_scale "upper_scale"
OpName %tint_ApplyHLGTransferFunction "tint_ApplyHLGTransferFunction"
OpName %v_2 "v"
OpName %params_3 "params"
OpName %tint_ApplyPQTransferFunction "tint_ApplyPQTransferFunction"
OpName %v_3 "v"
OpName %params_4 "params"
OpName %m1 "m1"
OpName %m2 "m2"
OpName %c1 "c1"
OpName %c2 "c2"
OpName %c3 "c3"
OpName %start_byte_offset "start_byte_offset"
OpName %start_byte_offset_0 "start_byte_offset"
OpName %start_byte_offset_1 "start_byte_offset"
OpName %start_byte_offset_2 "start_byte_offset"
OpName %start_byte_offset_3 "start_byte_offset"
OpDecorate %_arr_v4uint_uint_18 ArrayStride 16
OpMemberDecorate %arg_0_params_block_tint_explicit_layout 0 Offset 0
OpDecorate %arg_0_params_block_tint_explicit_layout Block
OpDecorate %1 DescriptorSet 1
OpDecorate %1 Binding 2
OpDecorate %1 NonWritable
OpDecorate %arg_0_plane0 DescriptorSet 1
OpDecorate %arg_0_plane0 Binding 0
OpDecorate %arg_0_plane1 DescriptorSet 1
OpDecorate %arg_0_plane1 Binding 1
%uint = OpTypeInt 32 0
%v4uint = OpTypeVector %uint 4
%uint_18 = OpConstant %uint 18
%_arr_v4uint_uint_18 = OpTypeArray %v4uint %uint_18
%arg_0_params_block_tint_explicit_layout = OpTypeStruct %_arr_v4uint_uint_18
%_ptr_Uniform_arg_0_params_block_tint_explicit_layout = OpTypePointer Uniform %arg_0_params_block_tint_explicit_layout
%1 = OpVariable %_ptr_Uniform_arg_0_params_block_tint_explicit_layout Uniform
%float = OpTypeFloat 32
%10 = OpTypeImage %float 2D 0 0 0 1 Unknown
%_ptr_UniformConstant_10 = OpTypePointer UniformConstant %10
%arg_0_plane0 = OpVariable %_ptr_UniformConstant_10 UniformConstant
%arg_0_plane1 = OpVariable %_ptr_UniformConstant_10 UniformConstant
%v4float = OpTypeVector %float 4
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%18 = OpTypeFunction %v4float %v2int
%mat3v4float = OpTypeMatrix %v4float 3
%tint_TransferFunctionParams = OpTypeStruct %uint %float %float %float %float %float %float %float
%v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3
%v2float = OpTypeVector %float 2
%mat3v2float = OpTypeMatrix %v2float 3
%v2uint = OpTypeVector %uint 2
%tint_ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %tint_TransferFunctionParams %tint_TransferFunctionParams %mat3v3float %mat3v2float %mat3v2float %v2float %v2float %v2float %v2float %v2uint %v2float %v4float
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%35 = OpConstantComposite %v2uint %uint_1 %uint_1
%void = OpTypeVoid
%45 = OpTypeFunction %void
%48 = OpConstantNull %v2int
%_ptr_Function_v4float = OpTypePointer Function %v4float
%58 = OpTypeFunction %v4float %10 %10 %tint_ExternalTextureParams %v2uint
%float_1 = OpConstant %float 1
%bool = OpTypeBool
%float_0 = OpConstant %float 0
%122 = OpTypeFunction %v3float %v3float %tint_TransferFunctionParams
%_ptr_Function_v3float = OpTypePointer Function %v3float
%126 = OpConstantNull %v3float
%v3bool = OpTypeVector %bool 3
%173 = OpTypeFunction %float %float %tint_TransferFunctionParams
%_ptr_Function_float = OpTypePointer Function %float
%177 = OpConstantNull %float
%220 = OpConstantComposite %v3float %float_1 %float_1 %float_1
%231 = OpTypeFunction %tint_ExternalTextureParams %uint
%uint_16 = OpConstant %uint 16
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
%uint_15 = OpConstant %uint 15
%uint_2 = OpConstant %uint 2
%uint_4 = OpConstant %uint 4
%uint_64 = OpConstant %uint 64
%uint_96 = OpConstant %uint 96
%uint_128 = OpConstant %uint 128
%uint_176 = OpConstant %uint 176
%uint_200 = OpConstant %uint 200
%uint_224 = OpConstant %uint 224
%v2bool = OpTypeVector %bool 2
%uint_232 = OpConstant %uint 232
%uint_240 = OpConstant %uint 240
%uint_248 = OpConstant %uint 248
%uint_256 = OpConstant %uint 256
%uint_264 = OpConstant %uint 264
%uint_272 = OpConstant %uint 272
%358 = OpTypeFunction %mat3v4float %uint
%uint_32 = OpConstant %uint 32
%377 = OpTypeFunction %tint_TransferFunctionParams %uint
%uint_8 = OpConstant %uint 8
%uint_12 = OpConstant %uint 12
%uint_20 = OpConstant %uint 20
%uint_24 = OpConstant %uint 24
%uint_28 = OpConstant %uint 28
%448 = OpTypeFunction %mat3v3float %uint
%v3uint = OpTypeVector %uint 3
%470 = OpTypeFunction %mat3v2float %uint
%textureLoad2d = OpFunction %v4float None %18
%coords = OpFunctionParameter %v2int
%19 = OpLabel
%20 = OpLoad %10 %arg_0_plane0 None
%21 = OpLoad %10 %arg_0_plane1 None
%22 = OpFunctionCall %tint_ExternalTextureParams %31 %uint_0
%33 = OpCompositeExtract %v2uint %22 12
%34 = OpIAdd %v2uint %33 %35
%37 = OpISub %v2uint %34 %35
%38 = OpBitcast %v2uint %coords
%39 = OpExtInst %v2uint %40 UMin %38 %37
%41 = OpFunctionCall %v4float %tint_TextureLoadMultiplanarExternal %20 %21 %22 %39
OpReturnValue %41
OpFunctionEnd
%doTextureLoad = OpFunction %void None %45
%46 = OpLabel
%res = OpVariable %_ptr_Function_v4float Function
%47 = OpFunctionCall %v4float %textureLoad2d %48
OpStore %res %47
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %45
%52 = OpLabel
%53 = OpFunctionCall %void %doTextureLoad
OpReturn
OpFunctionEnd
%tint_TextureLoadMultiplanarExternal = OpFunction %v4float None %58
%plane_0 = OpFunctionParameter %10
%plane_1 = OpFunctionParameter %10
%params = OpFunctionParameter %tint_ExternalTextureParams
%coords_0 = OpFunctionParameter %v2uint
%59 = OpLabel
%60 = OpCompositeExtract %mat3v4float %params 2
%61 = OpCompositeExtract %mat3v2float %params 7
%62 = OpCompositeExtract %v2uint %params 12
%63 = OpCompositeExtract %v2float %params 13
%64 = OpExtInst %v2uint %40 UMin %coords_0 %62
%65 = OpConvertUToF %v2float %64
%66 = OpCompositeConstruct %v3float %65 %float_1
%68 = OpMatrixTimesVector %v2float %61 %66
%69 = OpExtInst %v2float %40 RoundEven %68
%70 = OpConvertFToU %v2uint %69
%71 = OpCompositeExtract %uint %params 0
%72 = OpIEqual %bool %71 %uint_1
OpSelectionMerge %74 None
OpBranchConditional %72 %75 %76
%75 = OpLabel
%91 = OpImageFetch %v4float %plane_0 %70 Lod %uint_0
%78 = OpVectorShuffle %v3float %91 %91 0 1 2
%81 = OpCompositeExtract %float %91 3
OpBranch %74
%76 = OpLabel
%92 = OpImageFetch %v4float %plane_0 %70 Lod %uint_0
%93 = OpCompositeExtract %float %92 0
%94 = OpFMul %v2float %69 %63
%95 = OpConvertFToU %v2uint %94
%96 = OpImageFetch %v4float %plane_1 %95 Lod %uint_0
%97 = OpVectorShuffle %v2float %96 %96 0 1
%98 = OpCompositeConstruct %v4float %93 %97 %float_1
%79 = OpVectorTimesMatrix %v3float %98 %60
OpBranch %74
%74 = OpLabel
%77 = OpPhi %v3float %78 %75 %79 %76
%80 = OpPhi %float %81 %75 %float_1 %76
%82 = OpCompositeExtract %uint %params 1
%83 = OpIEqual %bool %82 %uint_0
OpSelectionMerge %84 None
OpBranchConditional %83 %85 %86
%85 = OpLabel
%99 = OpCompositeExtract %tint_TransferFunctionParams %params 3
%100 = OpCompositeExtract %tint_TransferFunctionParams %params 4
%101 = OpCompositeExtract %mat3v3float %params 5
%102 = OpCompositeExtract %v4float %params 14
%103 = OpFunctionCall %v3float %tint_ApplySrcTransferFunction %77 %99
%105 = OpCompositeExtract %float %102 3
%106 = OpFOrdNotEqual %bool %105 %float_0
OpSelectionMerge %87 None
OpBranchConditional %106 %108 %109
%108 = OpLabel
%114 = OpVectorShuffle %v3float %102 %102 0 1 2
%115 = OpDot %float %114 %103
%116 = OpExtInst %float %40 FAbs %115
%117 = OpExtInst %float %40 Pow %116 %105
%118 = OpExtInst %float %40 FSign %115
%119 = OpFMul %float %118 %117
%111 = OpVectorTimesScalar %v3float %103 %119
OpBranch %87
%109 = OpLabel
OpBranch %87
%87 = OpLabel
%110 = OpPhi %v3float %111 %108 %103 %109
%112 = OpMatrixTimesVector %v3float %101 %110
%89 = OpFunctionCall %v3float %tint_ApplyGammaTransferFunction %112 %100
OpBranch %84
%86 = OpLabel
OpBranch %84
%84 = OpLabel
%88 = OpPhi %v3float %77 %86 %89 %87
%90 = OpCompositeConstruct %v4float %88 %80
OpReturnValue %90
OpFunctionEnd
%tint_ApplySrcTransferFunction = OpFunction %v3float None %122
%v = OpFunctionParameter %v3float
%params_0 = OpFunctionParameter %tint_TransferFunctionParams
%123 = OpLabel
%return_value = OpVariable %_ptr_Function_v3float Function %126
%mode = OpCompositeExtract %uint %params_0 0
%128 = OpIEqual %bool %mode %uint_0
OpSelectionMerge %129 None
OpBranchConditional %128 %130 %131
%130 = OpLabel
%133 = OpFunctionCall %v3float %tint_ApplyGammaTransferFunction %v %params_0
OpStore %return_value %133 None
OpBranch %129
%131 = OpLabel
%134 = OpIEqual %bool %mode %uint_1
OpSelectionMerge %135 None
OpBranchConditional %134 %136 %137
%136 = OpLabel
%138 = OpFunctionCall %v3float %tint_ApplyHLGTransferFunction %v %params_0
OpStore %return_value %138 None
OpBranch %135
%137 = OpLabel
%140 = OpFunctionCall %v3float %tint_ApplyPQTransferFunction %v %params_0
OpStore %return_value %140 None
OpBranch %135
%135 = OpLabel
OpBranch %129
%129 = OpLabel
%132 = OpLoad %v3float %return_value None
OpReturnValue %132
OpFunctionEnd
%tint_ApplyGammaTransferFunction = OpFunction %v3float None %122
%v_0 = OpFunctionParameter %v3float
%params_1 = OpFunctionParameter %tint_TransferFunctionParams
%144 = OpLabel
%A = OpCompositeExtract %float %params_1 1
%B = OpCompositeExtract %float %params_1 2
%C = OpCompositeExtract %float %params_1 3
%D = OpCompositeExtract %float %params_1 4
%E = OpCompositeExtract %float %params_1 5
%F = OpCompositeExtract %float %params_1 6
%G = OpCompositeExtract %float %params_1 7
%152 = OpCompositeConstruct %v3float %G %G %G
%153 = OpCompositeConstruct %v3float %D %D %D
%154 = OpExtInst %v3float %40 FAbs %v_0
%155 = OpExtInst %v3float %40 FSign %v_0
%156 = OpFOrdLessThan %v3bool %154 %153
%158 = OpVectorTimesScalar %v3float %154 %C
%159 = OpCompositeConstruct %v3float %F %F %F
%160 = OpFAdd %v3float %158 %159
%161 = OpFMul %v3float %155 %160
%162 = OpVectorTimesScalar %v3float %154 %A
%163 = OpCompositeConstruct %v3float %B %B %B
%164 = OpFAdd %v3float %162 %163
%165 = OpExtInst %v3float %40 Pow %164 %152
%166 = OpCompositeConstruct %v3float %E %E %E
%167 = OpFAdd %v3float %165 %166
%168 = OpFMul %v3float %155 %167
%169 = OpSelect %v3float %156 %161 %168
OpReturnValue %169
OpFunctionEnd
%tint_ApplyHLGSingleChannel = OpFunction %float None %173
%v_1 = OpFunctionParameter %float
%params_2 = OpFunctionParameter %tint_TransferFunctionParams
%174 = OpLabel
%return_value_0 = OpVariable %_ptr_Function_float Function %177
%A_0 = OpCompositeExtract %float %params_2 1
%B_0 = OpCompositeExtract %float %params_2 2
%C_0 = OpCompositeExtract %float %params_2 3
%cutoff = OpCompositeExtract %float %params_2 4
%lower_scale = OpCompositeExtract %float %params_2 5
%upper_scale = OpCompositeExtract %float %params_2 6
%184 = OpFOrdLessThanEqual %bool %v_1 %cutoff
OpSelectionMerge %185 None
OpBranchConditional %184 %186 %187
%186 = OpLabel
%189 = OpFMul %float %v_1 %v_1
%190 = OpFDiv %float %189 %lower_scale
OpStore %return_value_0 %190 None
OpBranch %185
%187 = OpLabel
%191 = OpFSub %float %v_1 %C_0
%192 = OpFDiv %float %191 %A_0
%193 = OpExtInst %float %40 Exp %192
%194 = OpFAdd %float %B_0 %193
%195 = OpFDiv %float %194 %upper_scale
OpStore %return_value_0 %195 None
OpBranch %185
%185 = OpLabel
%188 = OpLoad %float %return_value_0 None
OpReturnValue %188
OpFunctionEnd
%tint_ApplyHLGTransferFunction = OpFunction %v3float None %122
%v_2 = OpFunctionParameter %v3float
%params_3 = OpFunctionParameter %tint_TransferFunctionParams
%198 = OpLabel
%199 = OpCompositeExtract %float %v_2 0
%200 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %199 %params_3
%201 = OpCompositeExtract %float %v_2 1
%202 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %201 %params_3
%203 = OpCompositeExtract %float %v_2 2
%204 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %203 %params_3
%205 = OpCompositeConstruct %v3float %200 %202 %204
OpReturnValue %205
OpFunctionEnd
%tint_ApplyPQTransferFunction = OpFunction %v3float None %122
%v_3 = OpFunctionParameter %v3float
%params_4 = OpFunctionParameter %tint_TransferFunctionParams
%208 = OpLabel
%m1 = OpCompositeExtract %float %params_4 1
%m2 = OpCompositeExtract %float %params_4 2
%c1 = OpCompositeExtract %float %params_4 3
%c2 = OpCompositeExtract %float %params_4 4
%c3 = OpCompositeExtract %float %params_4 5
%214 = OpCompositeConstruct %v3float %c1 %c1 %c1
%215 = OpCompositeConstruct %v3float %c2 %c2 %c2
%216 = OpCompositeConstruct %v3float %c3 %c3 %c3
%217 = OpCompositeConstruct %v3float %m1 %m1 %m1
%218 = OpCompositeConstruct %v3float %m2 %m2 %m2
%219 = OpExtInst %v3float %40 NClamp %v_3 %126 %220
%221 = OpFDiv %v3float %220 %218
%222 = OpExtInst %v3float %40 Pow %219 %221
%223 = OpFSub %v3float %222 %214
%224 = OpExtInst %v3float %40 NMax %223 %126
%225 = OpFMul %v3float %216 %222
%226 = OpFSub %v3float %215 %225
%227 = OpFDiv %v3float %224 %226
%228 = OpFDiv %v3float %220 %217
%229 = OpExtInst %v3float %40 Pow %227 %228
OpReturnValue %229
OpFunctionEnd
%31 = OpFunction %tint_ExternalTextureParams None %231
%start_byte_offset = OpFunctionParameter %uint
%232 = OpLabel
%233 = OpUDiv %uint %start_byte_offset %uint_16
%235 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %233
%237 = OpBitwiseAnd %uint %start_byte_offset %uint_15
%239 = OpShiftRightLogical %uint %237 %uint_2
%241 = OpLoad %v4uint %235 None
%242 = OpVectorExtractDynamic %uint %241 %239
%243 = OpIAdd %uint %uint_4 %start_byte_offset
%245 = OpUDiv %uint %243 %uint_16
%246 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %245
%247 = OpBitwiseAnd %uint %243 %uint_15
%248 = OpShiftRightLogical %uint %247 %uint_2
%249 = OpLoad %v4uint %246 None
%250 = OpVectorExtractDynamic %uint %249 %248
%251 = OpIAdd %uint %uint_16 %start_byte_offset
%252 = OpFunctionCall %mat3v4float %253 %251
%254 = OpIAdd %uint %uint_64 %start_byte_offset
%256 = OpFunctionCall %tint_TransferFunctionParams %257 %254
%258 = OpIAdd %uint %uint_96 %start_byte_offset
%260 = OpFunctionCall %tint_TransferFunctionParams %257 %258
%261 = OpIAdd %uint %uint_128 %start_byte_offset
%263 = OpFunctionCall %mat3v3float %264 %261
%265 = OpIAdd %uint %uint_176 %start_byte_offset
%267 = OpFunctionCall %mat3v2float %268 %265
%269 = OpIAdd %uint %uint_200 %start_byte_offset
%271 = OpFunctionCall %mat3v2float %268 %269
%272 = OpIAdd %uint %uint_224 %start_byte_offset
%274 = OpUDiv %uint %272 %uint_16
%275 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %274
%276 = OpLoad %v4uint %275 None
%277 = OpBitwiseAnd %uint %272 %uint_15
%278 = OpShiftRightLogical %uint %277 %uint_2
%279 = OpVectorShuffle %v2uint %276 %276 2 3
%280 = OpVectorShuffle %v2uint %276 %276 0 1
%281 = OpIEqual %bool %278 %uint_2
%283 = OpCompositeConstruct %v2bool %281 %281
%284 = OpSelect %v2uint %283 %279 %280
%285 = OpBitcast %v2float %284
%286 = OpIAdd %uint %uint_232 %start_byte_offset
%288 = OpUDiv %uint %286 %uint_16
%289 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %288
%290 = OpLoad %v4uint %289 None
%291 = OpBitwiseAnd %uint %286 %uint_15
%292 = OpShiftRightLogical %uint %291 %uint_2
%293 = OpVectorShuffle %v2uint %290 %290 2 3
%294 = OpVectorShuffle %v2uint %290 %290 0 1
%295 = OpIEqual %bool %292 %uint_2
%296 = OpCompositeConstruct %v2bool %295 %295
%297 = OpSelect %v2uint %296 %293 %294
%298 = OpBitcast %v2float %297
%299 = OpIAdd %uint %uint_240 %start_byte_offset
%301 = OpUDiv %uint %299 %uint_16
%302 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %301
%303 = OpLoad %v4uint %302 None
%304 = OpBitwiseAnd %uint %299 %uint_15
%305 = OpShiftRightLogical %uint %304 %uint_2
%306 = OpVectorShuffle %v2uint %303 %303 2 3
%307 = OpVectorShuffle %v2uint %303 %303 0 1
%308 = OpIEqual %bool %305 %uint_2
%309 = OpCompositeConstruct %v2bool %308 %308
%310 = OpSelect %v2uint %309 %306 %307
%311 = OpBitcast %v2float %310
%312 = OpIAdd %uint %uint_248 %start_byte_offset
%314 = OpUDiv %uint %312 %uint_16
%315 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %314
%316 = OpLoad %v4uint %315 None
%317 = OpBitwiseAnd %uint %312 %uint_15
%318 = OpShiftRightLogical %uint %317 %uint_2
%319 = OpVectorShuffle %v2uint %316 %316 2 3
%320 = OpVectorShuffle %v2uint %316 %316 0 1
%321 = OpIEqual %bool %318 %uint_2
%322 = OpCompositeConstruct %v2bool %321 %321
%323 = OpSelect %v2uint %322 %319 %320
%324 = OpBitcast %v2float %323
%325 = OpIAdd %uint %uint_256 %start_byte_offset
%327 = OpUDiv %uint %325 %uint_16
%328 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %327
%329 = OpLoad %v4uint %328 None
%330 = OpBitwiseAnd %uint %325 %uint_15
%331 = OpShiftRightLogical %uint %330 %uint_2
%332 = OpVectorShuffle %v2uint %329 %329 2 3
%333 = OpVectorShuffle %v2uint %329 %329 0 1
%334 = OpIEqual %bool %331 %uint_2
%335 = OpCompositeConstruct %v2bool %334 %334
%336 = OpSelect %v2uint %335 %332 %333
%337 = OpIAdd %uint %uint_264 %start_byte_offset
%339 = OpUDiv %uint %337 %uint_16
%340 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %339
%341 = OpLoad %v4uint %340 None
%342 = OpBitwiseAnd %uint %337 %uint_15
%343 = OpShiftRightLogical %uint %342 %uint_2
%344 = OpVectorShuffle %v2uint %341 %341 2 3
%345 = OpVectorShuffle %v2uint %341 %341 0 1
%346 = OpIEqual %bool %343 %uint_2
%347 = OpCompositeConstruct %v2bool %346 %346
%348 = OpSelect %v2uint %347 %344 %345
%349 = OpBitcast %v2float %348
%350 = OpIAdd %uint %uint_272 %start_byte_offset
%352 = OpUDiv %uint %350 %uint_16
%353 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %352
%354 = OpLoad %v4uint %353 None
%355 = OpBitcast %v4float %354
%356 = OpCompositeConstruct %tint_ExternalTextureParams %242 %250 %252 %256 %260 %263 %267 %271 %285 %298 %311 %324 %336 %349 %355
OpReturnValue %356
OpFunctionEnd
%253 = OpFunction %mat3v4float None %358
%start_byte_offset_0 = OpFunctionParameter %uint
%359 = OpLabel
%360 = OpUDiv %uint %start_byte_offset_0 %uint_16
%361 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %360
%362 = OpLoad %v4uint %361 None
%363 = OpBitcast %v4float %362
%364 = OpIAdd %uint %uint_16 %start_byte_offset_0
%365 = OpUDiv %uint %364 %uint_16
%366 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %365
%367 = OpLoad %v4uint %366 None
%368 = OpBitcast %v4float %367
%369 = OpIAdd %uint %uint_32 %start_byte_offset_0
%371 = OpUDiv %uint %369 %uint_16
%372 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %371
%373 = OpLoad %v4uint %372 None
%374 = OpBitcast %v4float %373
%375 = OpCompositeConstruct %mat3v4float %363 %368 %374
OpReturnValue %375
OpFunctionEnd
%257 = OpFunction %tint_TransferFunctionParams None %377
%start_byte_offset_1 = OpFunctionParameter %uint
%378 = OpLabel
%379 = OpUDiv %uint %start_byte_offset_1 %uint_16
%380 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %379
%381 = OpBitwiseAnd %uint %start_byte_offset_1 %uint_15
%382 = OpShiftRightLogical %uint %381 %uint_2
%383 = OpLoad %v4uint %380 None
%384 = OpVectorExtractDynamic %uint %383 %382
%385 = OpIAdd %uint %uint_4 %start_byte_offset_1
%386 = OpUDiv %uint %385 %uint_16
%387 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %386
%388 = OpBitwiseAnd %uint %385 %uint_15
%389 = OpShiftRightLogical %uint %388 %uint_2
%390 = OpLoad %v4uint %387 None
%391 = OpVectorExtractDynamic %uint %390 %389
%392 = OpBitcast %float %391
%393 = OpIAdd %uint %uint_8 %start_byte_offset_1
%395 = OpUDiv %uint %393 %uint_16
%396 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %395
%397 = OpBitwiseAnd %uint %393 %uint_15
%398 = OpShiftRightLogical %uint %397 %uint_2
%399 = OpLoad %v4uint %396 None
%400 = OpVectorExtractDynamic %uint %399 %398
%401 = OpBitcast %float %400
%402 = OpIAdd %uint %uint_12 %start_byte_offset_1
%404 = OpUDiv %uint %402 %uint_16
%405 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %404
%406 = OpBitwiseAnd %uint %402 %uint_15
%407 = OpShiftRightLogical %uint %406 %uint_2
%408 = OpLoad %v4uint %405 None
%409 = OpVectorExtractDynamic %uint %408 %407
%410 = OpBitcast %float %409
%411 = OpIAdd %uint %uint_16 %start_byte_offset_1
%412 = OpUDiv %uint %411 %uint_16
%413 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %412
%414 = OpBitwiseAnd %uint %411 %uint_15
%415 = OpShiftRightLogical %uint %414 %uint_2
%416 = OpLoad %v4uint %413 None
%417 = OpVectorExtractDynamic %uint %416 %415
%418 = OpBitcast %float %417
%419 = OpIAdd %uint %uint_20 %start_byte_offset_1
%421 = OpUDiv %uint %419 %uint_16
%422 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %421
%423 = OpBitwiseAnd %uint %419 %uint_15
%424 = OpShiftRightLogical %uint %423 %uint_2
%425 = OpLoad %v4uint %422 None
%426 = OpVectorExtractDynamic %uint %425 %424
%427 = OpBitcast %float %426
%428 = OpIAdd %uint %uint_24 %start_byte_offset_1
%430 = OpUDiv %uint %428 %uint_16
%431 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %430
%432 = OpBitwiseAnd %uint %428 %uint_15
%433 = OpShiftRightLogical %uint %432 %uint_2
%434 = OpLoad %v4uint %431 None
%435 = OpVectorExtractDynamic %uint %434 %433
%436 = OpBitcast %float %435
%437 = OpIAdd %uint %uint_28 %start_byte_offset_1
%439 = OpUDiv %uint %437 %uint_16
%440 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %439
%441 = OpBitwiseAnd %uint %437 %uint_15
%442 = OpShiftRightLogical %uint %441 %uint_2
%443 = OpLoad %v4uint %440 None
%444 = OpVectorExtractDynamic %uint %443 %442
%445 = OpBitcast %float %444
%446 = OpCompositeConstruct %tint_TransferFunctionParams %384 %392 %401 %410 %418 %427 %436 %445
OpReturnValue %446
OpFunctionEnd
%264 = OpFunction %mat3v3float None %448
%start_byte_offset_2 = OpFunctionParameter %uint
%449 = OpLabel
%450 = OpUDiv %uint %start_byte_offset_2 %uint_16
%451 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %450
%452 = OpLoad %v4uint %451 None
%453 = OpVectorShuffle %v3uint %452 %452 0 1 2
%455 = OpBitcast %v3float %453
%456 = OpIAdd %uint %uint_16 %start_byte_offset_2
%457 = OpUDiv %uint %456 %uint_16
%458 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %457
%459 = OpLoad %v4uint %458 None
%460 = OpVectorShuffle %v3uint %459 %459 0 1 2
%461 = OpBitcast %v3float %460
%462 = OpIAdd %uint %uint_32 %start_byte_offset_2
%463 = OpUDiv %uint %462 %uint_16
%464 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %463
%465 = OpLoad %v4uint %464 None
%466 = OpVectorShuffle %v3uint %465 %465 0 1 2
%467 = OpBitcast %v3float %466
%468 = OpCompositeConstruct %mat3v3float %455 %461 %467
OpReturnValue %468
OpFunctionEnd
%268 = OpFunction %mat3v2float None %470
%start_byte_offset_3 = OpFunctionParameter %uint
%471 = OpLabel
%472 = OpUDiv %uint %start_byte_offset_3 %uint_16
%473 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %472
%474 = OpLoad %v4uint %473 None
%475 = OpBitwiseAnd %uint %start_byte_offset_3 %uint_15
%476 = OpShiftRightLogical %uint %475 %uint_2
%477 = OpVectorShuffle %v2uint %474 %474 2 3
%478 = OpVectorShuffle %v2uint %474 %474 0 1
%479 = OpIEqual %bool %476 %uint_2
%480 = OpCompositeConstruct %v2bool %479 %479
%481 = OpSelect %v2uint %480 %477 %478
%482 = OpBitcast %v2float %481
%483 = OpIAdd %uint %uint_8 %start_byte_offset_3
%484 = OpUDiv %uint %483 %uint_16
%485 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %484
%486 = OpLoad %v4uint %485 None
%487 = OpBitwiseAnd %uint %483 %uint_15
%488 = OpShiftRightLogical %uint %487 %uint_2
%489 = OpVectorShuffle %v2uint %486 %486 2 3
%490 = OpVectorShuffle %v2uint %486 %486 0 1
%491 = OpIEqual %bool %488 %uint_2
%492 = OpCompositeConstruct %v2bool %491 %491
%493 = OpSelect %v2uint %492 %489 %490
%494 = OpBitcast %v2float %493
%495 = OpIAdd %uint %uint_16 %start_byte_offset_3
%496 = OpUDiv %uint %495 %uint_16
%497 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %496
%498 = OpLoad %v4uint %497 None
%499 = OpBitwiseAnd %uint %495 %uint_15
%500 = OpShiftRightLogical %uint %499 %uint_2
%501 = OpVectorShuffle %v2uint %498 %498 2 3
%502 = OpVectorShuffle %v2uint %498 %498 0 1
%503 = OpIEqual %bool %500 %uint_2
%504 = OpCompositeConstruct %v2bool %503 %503
%505 = OpSelect %v2uint %504 %501 %502
%506 = OpBitcast %v2float %505
%507 = OpCompositeConstruct %mat3v2float %482 %494 %506
OpReturnValue %507
OpFunctionEnd
;
; compute_main
;
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 1
; Bound: 508
; Schema: 0
OpCapability Shader
%40 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %compute_main LocalSize 1 1 1
OpMemberName %arg_0_params_block_tint_explicit_layout 0 "inner"
OpName %arg_0_params_block_tint_explicit_layout "arg_0_params_block_tint_explicit_layout"
OpName %arg_0_plane0 "arg_0_plane0"
OpName %arg_0_plane1 "arg_0_plane1"
OpName %textureLoad2d "textureLoad2d"
OpName %coords "coords"
OpMemberName %tint_ExternalTextureParams 0 "numPlanes"
OpMemberName %tint_ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %tint_ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %tint_TransferFunctionParams 0 "mode"
OpMemberName %tint_TransferFunctionParams 1 "A"
OpMemberName %tint_TransferFunctionParams 2 "B"
OpMemberName %tint_TransferFunctionParams 3 "C"
OpMemberName %tint_TransferFunctionParams 4 "D"
OpMemberName %tint_TransferFunctionParams 5 "E"
OpMemberName %tint_TransferFunctionParams 6 "F"
OpMemberName %tint_TransferFunctionParams 7 "G"
OpName %tint_TransferFunctionParams "tint_TransferFunctionParams"
OpMemberName %tint_ExternalTextureParams 3 "srcTransferFunction"
OpMemberName %tint_ExternalTextureParams 4 "dstTransferFunction"
OpMemberName %tint_ExternalTextureParams 5 "gamutConversionMatrix"
OpMemberName %tint_ExternalTextureParams 6 "sampleTransform"
OpMemberName %tint_ExternalTextureParams 7 "loadTransform"
OpMemberName %tint_ExternalTextureParams 8 "samplePlane0RectMin"
OpMemberName %tint_ExternalTextureParams 9 "samplePlane0RectMax"
OpMemberName %tint_ExternalTextureParams 10 "samplePlane1RectMin"
OpMemberName %tint_ExternalTextureParams 11 "samplePlane1RectMax"
OpMemberName %tint_ExternalTextureParams 12 "apparentSize"
OpMemberName %tint_ExternalTextureParams 13 "plane1CoordFactor"
OpMemberName %tint_ExternalTextureParams 14 "ootfParam"
OpName %tint_ExternalTextureParams "tint_ExternalTextureParams"
OpName %doTextureLoad "doTextureLoad"
OpName %res "res"
OpName %compute_main "compute_main"
OpName %tint_TextureLoadMultiplanarExternal "tint_TextureLoadMultiplanarExternal"
OpName %plane_0 "plane_0"
OpName %plane_1 "plane_1"
OpName %params "params"
OpName %coords_0 "coords"
OpName %tint_ApplySrcTransferFunction "tint_ApplySrcTransferFunction"
OpName %v "v"
OpName %params_0 "params"
OpName %return_value "return_value"
OpName %mode "mode"
OpName %tint_ApplyGammaTransferFunction "tint_ApplyGammaTransferFunction"
OpName %v_0 "v"
OpName %params_1 "params"
OpName %A "A"
OpName %B "B"
OpName %C "C"
OpName %D "D"
OpName %E "E"
OpName %F "F"
OpName %G "G"
OpName %tint_ApplyHLGSingleChannel "tint_ApplyHLGSingleChannel"
OpName %v_1 "v"
OpName %params_2 "params"
OpName %return_value_0 "return_value"
OpName %A_0 "A"
OpName %B_0 "B"
OpName %C_0 "C"
OpName %cutoff "cutoff"
OpName %lower_scale "lower_scale"
OpName %upper_scale "upper_scale"
OpName %tint_ApplyHLGTransferFunction "tint_ApplyHLGTransferFunction"
OpName %v_2 "v"
OpName %params_3 "params"
OpName %tint_ApplyPQTransferFunction "tint_ApplyPQTransferFunction"
OpName %v_3 "v"
OpName %params_4 "params"
OpName %m1 "m1"
OpName %m2 "m2"
OpName %c1 "c1"
OpName %c2 "c2"
OpName %c3 "c3"
OpName %start_byte_offset "start_byte_offset"
OpName %start_byte_offset_0 "start_byte_offset"
OpName %start_byte_offset_1 "start_byte_offset"
OpName %start_byte_offset_2 "start_byte_offset"
OpName %start_byte_offset_3 "start_byte_offset"
OpDecorate %_arr_v4uint_uint_18 ArrayStride 16
OpMemberDecorate %arg_0_params_block_tint_explicit_layout 0 Offset 0
OpDecorate %arg_0_params_block_tint_explicit_layout Block
OpDecorate %1 DescriptorSet 1
OpDecorate %1 Binding 2
OpDecorate %1 NonWritable
OpDecorate %arg_0_plane0 DescriptorSet 1
OpDecorate %arg_0_plane0 Binding 0
OpDecorate %arg_0_plane1 DescriptorSet 1
OpDecorate %arg_0_plane1 Binding 1
%uint = OpTypeInt 32 0
%v4uint = OpTypeVector %uint 4
%uint_18 = OpConstant %uint 18
%_arr_v4uint_uint_18 = OpTypeArray %v4uint %uint_18
%arg_0_params_block_tint_explicit_layout = OpTypeStruct %_arr_v4uint_uint_18
%_ptr_Uniform_arg_0_params_block_tint_explicit_layout = OpTypePointer Uniform %arg_0_params_block_tint_explicit_layout
%1 = OpVariable %_ptr_Uniform_arg_0_params_block_tint_explicit_layout Uniform
%float = OpTypeFloat 32
%10 = OpTypeImage %float 2D 0 0 0 1 Unknown
%_ptr_UniformConstant_10 = OpTypePointer UniformConstant %10
%arg_0_plane0 = OpVariable %_ptr_UniformConstant_10 UniformConstant
%arg_0_plane1 = OpVariable %_ptr_UniformConstant_10 UniformConstant
%v4float = OpTypeVector %float 4
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%18 = OpTypeFunction %v4float %v2int
%mat3v4float = OpTypeMatrix %v4float 3
%tint_TransferFunctionParams = OpTypeStruct %uint %float %float %float %float %float %float %float
%v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3
%v2float = OpTypeVector %float 2
%mat3v2float = OpTypeMatrix %v2float 3
%v2uint = OpTypeVector %uint 2
%tint_ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %tint_TransferFunctionParams %tint_TransferFunctionParams %mat3v3float %mat3v2float %mat3v2float %v2float %v2float %v2float %v2float %v2uint %v2float %v4float
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%35 = OpConstantComposite %v2uint %uint_1 %uint_1
%void = OpTypeVoid
%45 = OpTypeFunction %void
%48 = OpConstantNull %v2int
%_ptr_Function_v4float = OpTypePointer Function %v4float
%58 = OpTypeFunction %v4float %10 %10 %tint_ExternalTextureParams %v2uint
%float_1 = OpConstant %float 1
%bool = OpTypeBool
%float_0 = OpConstant %float 0
%122 = OpTypeFunction %v3float %v3float %tint_TransferFunctionParams
%_ptr_Function_v3float = OpTypePointer Function %v3float
%126 = OpConstantNull %v3float
%v3bool = OpTypeVector %bool 3
%173 = OpTypeFunction %float %float %tint_TransferFunctionParams
%_ptr_Function_float = OpTypePointer Function %float
%177 = OpConstantNull %float
%220 = OpConstantComposite %v3float %float_1 %float_1 %float_1
%231 = OpTypeFunction %tint_ExternalTextureParams %uint
%uint_16 = OpConstant %uint 16
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
%uint_15 = OpConstant %uint 15
%uint_2 = OpConstant %uint 2
%uint_4 = OpConstant %uint 4
%uint_64 = OpConstant %uint 64
%uint_96 = OpConstant %uint 96
%uint_128 = OpConstant %uint 128
%uint_176 = OpConstant %uint 176
%uint_200 = OpConstant %uint 200
%uint_224 = OpConstant %uint 224
%v2bool = OpTypeVector %bool 2
%uint_232 = OpConstant %uint 232
%uint_240 = OpConstant %uint 240
%uint_248 = OpConstant %uint 248
%uint_256 = OpConstant %uint 256
%uint_264 = OpConstant %uint 264
%uint_272 = OpConstant %uint 272
%358 = OpTypeFunction %mat3v4float %uint
%uint_32 = OpConstant %uint 32
%377 = OpTypeFunction %tint_TransferFunctionParams %uint
%uint_8 = OpConstant %uint 8
%uint_12 = OpConstant %uint 12
%uint_20 = OpConstant %uint 20
%uint_24 = OpConstant %uint 24
%uint_28 = OpConstant %uint 28
%448 = OpTypeFunction %mat3v3float %uint
%v3uint = OpTypeVector %uint 3
%470 = OpTypeFunction %mat3v2float %uint
%textureLoad2d = OpFunction %v4float None %18
%coords = OpFunctionParameter %v2int
%19 = OpLabel
%20 = OpLoad %10 %arg_0_plane0 None
%21 = OpLoad %10 %arg_0_plane1 None
%22 = OpFunctionCall %tint_ExternalTextureParams %31 %uint_0
%33 = OpCompositeExtract %v2uint %22 12
%34 = OpIAdd %v2uint %33 %35
%37 = OpISub %v2uint %34 %35
%38 = OpBitcast %v2uint %coords
%39 = OpExtInst %v2uint %40 UMin %38 %37
%41 = OpFunctionCall %v4float %tint_TextureLoadMultiplanarExternal %20 %21 %22 %39
OpReturnValue %41
OpFunctionEnd
%doTextureLoad = OpFunction %void None %45
%46 = OpLabel
%res = OpVariable %_ptr_Function_v4float Function
%47 = OpFunctionCall %v4float %textureLoad2d %48
OpStore %res %47
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %45
%52 = OpLabel
%53 = OpFunctionCall %void %doTextureLoad
OpReturn
OpFunctionEnd
%tint_TextureLoadMultiplanarExternal = OpFunction %v4float None %58
%plane_0 = OpFunctionParameter %10
%plane_1 = OpFunctionParameter %10
%params = OpFunctionParameter %tint_ExternalTextureParams
%coords_0 = OpFunctionParameter %v2uint
%59 = OpLabel
%60 = OpCompositeExtract %mat3v4float %params 2
%61 = OpCompositeExtract %mat3v2float %params 7
%62 = OpCompositeExtract %v2uint %params 12
%63 = OpCompositeExtract %v2float %params 13
%64 = OpExtInst %v2uint %40 UMin %coords_0 %62
%65 = OpConvertUToF %v2float %64
%66 = OpCompositeConstruct %v3float %65 %float_1
%68 = OpMatrixTimesVector %v2float %61 %66
%69 = OpExtInst %v2float %40 RoundEven %68
%70 = OpConvertFToU %v2uint %69
%71 = OpCompositeExtract %uint %params 0
%72 = OpIEqual %bool %71 %uint_1
OpSelectionMerge %74 None
OpBranchConditional %72 %75 %76
%75 = OpLabel
%91 = OpImageFetch %v4float %plane_0 %70 Lod %uint_0
%78 = OpVectorShuffle %v3float %91 %91 0 1 2
%81 = OpCompositeExtract %float %91 3
OpBranch %74
%76 = OpLabel
%92 = OpImageFetch %v4float %plane_0 %70 Lod %uint_0
%93 = OpCompositeExtract %float %92 0
%94 = OpFMul %v2float %69 %63
%95 = OpConvertFToU %v2uint %94
%96 = OpImageFetch %v4float %plane_1 %95 Lod %uint_0
%97 = OpVectorShuffle %v2float %96 %96 0 1
%98 = OpCompositeConstruct %v4float %93 %97 %float_1
%79 = OpVectorTimesMatrix %v3float %98 %60
OpBranch %74
%74 = OpLabel
%77 = OpPhi %v3float %78 %75 %79 %76
%80 = OpPhi %float %81 %75 %float_1 %76
%82 = OpCompositeExtract %uint %params 1
%83 = OpIEqual %bool %82 %uint_0
OpSelectionMerge %84 None
OpBranchConditional %83 %85 %86
%85 = OpLabel
%99 = OpCompositeExtract %tint_TransferFunctionParams %params 3
%100 = OpCompositeExtract %tint_TransferFunctionParams %params 4
%101 = OpCompositeExtract %mat3v3float %params 5
%102 = OpCompositeExtract %v4float %params 14
%103 = OpFunctionCall %v3float %tint_ApplySrcTransferFunction %77 %99
%105 = OpCompositeExtract %float %102 3
%106 = OpFOrdNotEqual %bool %105 %float_0
OpSelectionMerge %87 None
OpBranchConditional %106 %108 %109
%108 = OpLabel
%114 = OpVectorShuffle %v3float %102 %102 0 1 2
%115 = OpDot %float %114 %103
%116 = OpExtInst %float %40 FAbs %115
%117 = OpExtInst %float %40 Pow %116 %105
%118 = OpExtInst %float %40 FSign %115
%119 = OpFMul %float %118 %117
%111 = OpVectorTimesScalar %v3float %103 %119
OpBranch %87
%109 = OpLabel
OpBranch %87
%87 = OpLabel
%110 = OpPhi %v3float %111 %108 %103 %109
%112 = OpMatrixTimesVector %v3float %101 %110
%89 = OpFunctionCall %v3float %tint_ApplyGammaTransferFunction %112 %100
OpBranch %84
%86 = OpLabel
OpBranch %84
%84 = OpLabel
%88 = OpPhi %v3float %77 %86 %89 %87
%90 = OpCompositeConstruct %v4float %88 %80
OpReturnValue %90
OpFunctionEnd
%tint_ApplySrcTransferFunction = OpFunction %v3float None %122
%v = OpFunctionParameter %v3float
%params_0 = OpFunctionParameter %tint_TransferFunctionParams
%123 = OpLabel
%return_value = OpVariable %_ptr_Function_v3float Function %126
%mode = OpCompositeExtract %uint %params_0 0
%128 = OpIEqual %bool %mode %uint_0
OpSelectionMerge %129 None
OpBranchConditional %128 %130 %131
%130 = OpLabel
%133 = OpFunctionCall %v3float %tint_ApplyGammaTransferFunction %v %params_0
OpStore %return_value %133 None
OpBranch %129
%131 = OpLabel
%134 = OpIEqual %bool %mode %uint_1
OpSelectionMerge %135 None
OpBranchConditional %134 %136 %137
%136 = OpLabel
%138 = OpFunctionCall %v3float %tint_ApplyHLGTransferFunction %v %params_0
OpStore %return_value %138 None
OpBranch %135
%137 = OpLabel
%140 = OpFunctionCall %v3float %tint_ApplyPQTransferFunction %v %params_0
OpStore %return_value %140 None
OpBranch %135
%135 = OpLabel
OpBranch %129
%129 = OpLabel
%132 = OpLoad %v3float %return_value None
OpReturnValue %132
OpFunctionEnd
%tint_ApplyGammaTransferFunction = OpFunction %v3float None %122
%v_0 = OpFunctionParameter %v3float
%params_1 = OpFunctionParameter %tint_TransferFunctionParams
%144 = OpLabel
%A = OpCompositeExtract %float %params_1 1
%B = OpCompositeExtract %float %params_1 2
%C = OpCompositeExtract %float %params_1 3
%D = OpCompositeExtract %float %params_1 4
%E = OpCompositeExtract %float %params_1 5
%F = OpCompositeExtract %float %params_1 6
%G = OpCompositeExtract %float %params_1 7
%152 = OpCompositeConstruct %v3float %G %G %G
%153 = OpCompositeConstruct %v3float %D %D %D
%154 = OpExtInst %v3float %40 FAbs %v_0
%155 = OpExtInst %v3float %40 FSign %v_0
%156 = OpFOrdLessThan %v3bool %154 %153
%158 = OpVectorTimesScalar %v3float %154 %C
%159 = OpCompositeConstruct %v3float %F %F %F
%160 = OpFAdd %v3float %158 %159
%161 = OpFMul %v3float %155 %160
%162 = OpVectorTimesScalar %v3float %154 %A
%163 = OpCompositeConstruct %v3float %B %B %B
%164 = OpFAdd %v3float %162 %163
%165 = OpExtInst %v3float %40 Pow %164 %152
%166 = OpCompositeConstruct %v3float %E %E %E
%167 = OpFAdd %v3float %165 %166
%168 = OpFMul %v3float %155 %167
%169 = OpSelect %v3float %156 %161 %168
OpReturnValue %169
OpFunctionEnd
%tint_ApplyHLGSingleChannel = OpFunction %float None %173
%v_1 = OpFunctionParameter %float
%params_2 = OpFunctionParameter %tint_TransferFunctionParams
%174 = OpLabel
%return_value_0 = OpVariable %_ptr_Function_float Function %177
%A_0 = OpCompositeExtract %float %params_2 1
%B_0 = OpCompositeExtract %float %params_2 2
%C_0 = OpCompositeExtract %float %params_2 3
%cutoff = OpCompositeExtract %float %params_2 4
%lower_scale = OpCompositeExtract %float %params_2 5
%upper_scale = OpCompositeExtract %float %params_2 6
%184 = OpFOrdLessThanEqual %bool %v_1 %cutoff
OpSelectionMerge %185 None
OpBranchConditional %184 %186 %187
%186 = OpLabel
%189 = OpFMul %float %v_1 %v_1
%190 = OpFDiv %float %189 %lower_scale
OpStore %return_value_0 %190 None
OpBranch %185
%187 = OpLabel
%191 = OpFSub %float %v_1 %C_0
%192 = OpFDiv %float %191 %A_0
%193 = OpExtInst %float %40 Exp %192
%194 = OpFAdd %float %B_0 %193
%195 = OpFDiv %float %194 %upper_scale
OpStore %return_value_0 %195 None
OpBranch %185
%185 = OpLabel
%188 = OpLoad %float %return_value_0 None
OpReturnValue %188
OpFunctionEnd
%tint_ApplyHLGTransferFunction = OpFunction %v3float None %122
%v_2 = OpFunctionParameter %v3float
%params_3 = OpFunctionParameter %tint_TransferFunctionParams
%198 = OpLabel
%199 = OpCompositeExtract %float %v_2 0
%200 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %199 %params_3
%201 = OpCompositeExtract %float %v_2 1
%202 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %201 %params_3
%203 = OpCompositeExtract %float %v_2 2
%204 = OpFunctionCall %float %tint_ApplyHLGSingleChannel %203 %params_3
%205 = OpCompositeConstruct %v3float %200 %202 %204
OpReturnValue %205
OpFunctionEnd
%tint_ApplyPQTransferFunction = OpFunction %v3float None %122
%v_3 = OpFunctionParameter %v3float
%params_4 = OpFunctionParameter %tint_TransferFunctionParams
%208 = OpLabel
%m1 = OpCompositeExtract %float %params_4 1
%m2 = OpCompositeExtract %float %params_4 2
%c1 = OpCompositeExtract %float %params_4 3
%c2 = OpCompositeExtract %float %params_4 4
%c3 = OpCompositeExtract %float %params_4 5
%214 = OpCompositeConstruct %v3float %c1 %c1 %c1
%215 = OpCompositeConstruct %v3float %c2 %c2 %c2
%216 = OpCompositeConstruct %v3float %c3 %c3 %c3
%217 = OpCompositeConstruct %v3float %m1 %m1 %m1
%218 = OpCompositeConstruct %v3float %m2 %m2 %m2
%219 = OpExtInst %v3float %40 NClamp %v_3 %126 %220
%221 = OpFDiv %v3float %220 %218
%222 = OpExtInst %v3float %40 Pow %219 %221
%223 = OpFSub %v3float %222 %214
%224 = OpExtInst %v3float %40 NMax %223 %126
%225 = OpFMul %v3float %216 %222
%226 = OpFSub %v3float %215 %225
%227 = OpFDiv %v3float %224 %226
%228 = OpFDiv %v3float %220 %217
%229 = OpExtInst %v3float %40 Pow %227 %228
OpReturnValue %229
OpFunctionEnd
%31 = OpFunction %tint_ExternalTextureParams None %231
%start_byte_offset = OpFunctionParameter %uint
%232 = OpLabel
%233 = OpUDiv %uint %start_byte_offset %uint_16
%235 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %233
%237 = OpBitwiseAnd %uint %start_byte_offset %uint_15
%239 = OpShiftRightLogical %uint %237 %uint_2
%241 = OpLoad %v4uint %235 None
%242 = OpVectorExtractDynamic %uint %241 %239
%243 = OpIAdd %uint %uint_4 %start_byte_offset
%245 = OpUDiv %uint %243 %uint_16
%246 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %245
%247 = OpBitwiseAnd %uint %243 %uint_15
%248 = OpShiftRightLogical %uint %247 %uint_2
%249 = OpLoad %v4uint %246 None
%250 = OpVectorExtractDynamic %uint %249 %248
%251 = OpIAdd %uint %uint_16 %start_byte_offset
%252 = OpFunctionCall %mat3v4float %253 %251
%254 = OpIAdd %uint %uint_64 %start_byte_offset
%256 = OpFunctionCall %tint_TransferFunctionParams %257 %254
%258 = OpIAdd %uint %uint_96 %start_byte_offset
%260 = OpFunctionCall %tint_TransferFunctionParams %257 %258
%261 = OpIAdd %uint %uint_128 %start_byte_offset
%263 = OpFunctionCall %mat3v3float %264 %261
%265 = OpIAdd %uint %uint_176 %start_byte_offset
%267 = OpFunctionCall %mat3v2float %268 %265
%269 = OpIAdd %uint %uint_200 %start_byte_offset
%271 = OpFunctionCall %mat3v2float %268 %269
%272 = OpIAdd %uint %uint_224 %start_byte_offset
%274 = OpUDiv %uint %272 %uint_16
%275 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %274
%276 = OpLoad %v4uint %275 None
%277 = OpBitwiseAnd %uint %272 %uint_15
%278 = OpShiftRightLogical %uint %277 %uint_2
%279 = OpVectorShuffle %v2uint %276 %276 2 3
%280 = OpVectorShuffle %v2uint %276 %276 0 1
%281 = OpIEqual %bool %278 %uint_2
%283 = OpCompositeConstruct %v2bool %281 %281
%284 = OpSelect %v2uint %283 %279 %280
%285 = OpBitcast %v2float %284
%286 = OpIAdd %uint %uint_232 %start_byte_offset
%288 = OpUDiv %uint %286 %uint_16
%289 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %288
%290 = OpLoad %v4uint %289 None
%291 = OpBitwiseAnd %uint %286 %uint_15
%292 = OpShiftRightLogical %uint %291 %uint_2
%293 = OpVectorShuffle %v2uint %290 %290 2 3
%294 = OpVectorShuffle %v2uint %290 %290 0 1
%295 = OpIEqual %bool %292 %uint_2
%296 = OpCompositeConstruct %v2bool %295 %295
%297 = OpSelect %v2uint %296 %293 %294
%298 = OpBitcast %v2float %297
%299 = OpIAdd %uint %uint_240 %start_byte_offset
%301 = OpUDiv %uint %299 %uint_16
%302 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %301
%303 = OpLoad %v4uint %302 None
%304 = OpBitwiseAnd %uint %299 %uint_15
%305 = OpShiftRightLogical %uint %304 %uint_2
%306 = OpVectorShuffle %v2uint %303 %303 2 3
%307 = OpVectorShuffle %v2uint %303 %303 0 1
%308 = OpIEqual %bool %305 %uint_2
%309 = OpCompositeConstruct %v2bool %308 %308
%310 = OpSelect %v2uint %309 %306 %307
%311 = OpBitcast %v2float %310
%312 = OpIAdd %uint %uint_248 %start_byte_offset
%314 = OpUDiv %uint %312 %uint_16
%315 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %314
%316 = OpLoad %v4uint %315 None
%317 = OpBitwiseAnd %uint %312 %uint_15
%318 = OpShiftRightLogical %uint %317 %uint_2
%319 = OpVectorShuffle %v2uint %316 %316 2 3
%320 = OpVectorShuffle %v2uint %316 %316 0 1
%321 = OpIEqual %bool %318 %uint_2
%322 = OpCompositeConstruct %v2bool %321 %321
%323 = OpSelect %v2uint %322 %319 %320
%324 = OpBitcast %v2float %323
%325 = OpIAdd %uint %uint_256 %start_byte_offset
%327 = OpUDiv %uint %325 %uint_16
%328 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %327
%329 = OpLoad %v4uint %328 None
%330 = OpBitwiseAnd %uint %325 %uint_15
%331 = OpShiftRightLogical %uint %330 %uint_2
%332 = OpVectorShuffle %v2uint %329 %329 2 3
%333 = OpVectorShuffle %v2uint %329 %329 0 1
%334 = OpIEqual %bool %331 %uint_2
%335 = OpCompositeConstruct %v2bool %334 %334
%336 = OpSelect %v2uint %335 %332 %333
%337 = OpIAdd %uint %uint_264 %start_byte_offset
%339 = OpUDiv %uint %337 %uint_16
%340 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %339
%341 = OpLoad %v4uint %340 None
%342 = OpBitwiseAnd %uint %337 %uint_15
%343 = OpShiftRightLogical %uint %342 %uint_2
%344 = OpVectorShuffle %v2uint %341 %341 2 3
%345 = OpVectorShuffle %v2uint %341 %341 0 1
%346 = OpIEqual %bool %343 %uint_2
%347 = OpCompositeConstruct %v2bool %346 %346
%348 = OpSelect %v2uint %347 %344 %345
%349 = OpBitcast %v2float %348
%350 = OpIAdd %uint %uint_272 %start_byte_offset
%352 = OpUDiv %uint %350 %uint_16
%353 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %352
%354 = OpLoad %v4uint %353 None
%355 = OpBitcast %v4float %354
%356 = OpCompositeConstruct %tint_ExternalTextureParams %242 %250 %252 %256 %260 %263 %267 %271 %285 %298 %311 %324 %336 %349 %355
OpReturnValue %356
OpFunctionEnd
%253 = OpFunction %mat3v4float None %358
%start_byte_offset_0 = OpFunctionParameter %uint
%359 = OpLabel
%360 = OpUDiv %uint %start_byte_offset_0 %uint_16
%361 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %360
%362 = OpLoad %v4uint %361 None
%363 = OpBitcast %v4float %362
%364 = OpIAdd %uint %uint_16 %start_byte_offset_0
%365 = OpUDiv %uint %364 %uint_16
%366 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %365
%367 = OpLoad %v4uint %366 None
%368 = OpBitcast %v4float %367
%369 = OpIAdd %uint %uint_32 %start_byte_offset_0
%371 = OpUDiv %uint %369 %uint_16
%372 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %371
%373 = OpLoad %v4uint %372 None
%374 = OpBitcast %v4float %373
%375 = OpCompositeConstruct %mat3v4float %363 %368 %374
OpReturnValue %375
OpFunctionEnd
%257 = OpFunction %tint_TransferFunctionParams None %377
%start_byte_offset_1 = OpFunctionParameter %uint
%378 = OpLabel
%379 = OpUDiv %uint %start_byte_offset_1 %uint_16
%380 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %379
%381 = OpBitwiseAnd %uint %start_byte_offset_1 %uint_15
%382 = OpShiftRightLogical %uint %381 %uint_2
%383 = OpLoad %v4uint %380 None
%384 = OpVectorExtractDynamic %uint %383 %382
%385 = OpIAdd %uint %uint_4 %start_byte_offset_1
%386 = OpUDiv %uint %385 %uint_16
%387 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %386
%388 = OpBitwiseAnd %uint %385 %uint_15
%389 = OpShiftRightLogical %uint %388 %uint_2
%390 = OpLoad %v4uint %387 None
%391 = OpVectorExtractDynamic %uint %390 %389
%392 = OpBitcast %float %391
%393 = OpIAdd %uint %uint_8 %start_byte_offset_1
%395 = OpUDiv %uint %393 %uint_16
%396 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %395
%397 = OpBitwiseAnd %uint %393 %uint_15
%398 = OpShiftRightLogical %uint %397 %uint_2
%399 = OpLoad %v4uint %396 None
%400 = OpVectorExtractDynamic %uint %399 %398
%401 = OpBitcast %float %400
%402 = OpIAdd %uint %uint_12 %start_byte_offset_1
%404 = OpUDiv %uint %402 %uint_16
%405 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %404
%406 = OpBitwiseAnd %uint %402 %uint_15
%407 = OpShiftRightLogical %uint %406 %uint_2
%408 = OpLoad %v4uint %405 None
%409 = OpVectorExtractDynamic %uint %408 %407
%410 = OpBitcast %float %409
%411 = OpIAdd %uint %uint_16 %start_byte_offset_1
%412 = OpUDiv %uint %411 %uint_16
%413 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %412
%414 = OpBitwiseAnd %uint %411 %uint_15
%415 = OpShiftRightLogical %uint %414 %uint_2
%416 = OpLoad %v4uint %413 None
%417 = OpVectorExtractDynamic %uint %416 %415
%418 = OpBitcast %float %417
%419 = OpIAdd %uint %uint_20 %start_byte_offset_1
%421 = OpUDiv %uint %419 %uint_16
%422 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %421
%423 = OpBitwiseAnd %uint %419 %uint_15
%424 = OpShiftRightLogical %uint %423 %uint_2
%425 = OpLoad %v4uint %422 None
%426 = OpVectorExtractDynamic %uint %425 %424
%427 = OpBitcast %float %426
%428 = OpIAdd %uint %uint_24 %start_byte_offset_1
%430 = OpUDiv %uint %428 %uint_16
%431 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %430
%432 = OpBitwiseAnd %uint %428 %uint_15
%433 = OpShiftRightLogical %uint %432 %uint_2
%434 = OpLoad %v4uint %431 None
%435 = OpVectorExtractDynamic %uint %434 %433
%436 = OpBitcast %float %435
%437 = OpIAdd %uint %uint_28 %start_byte_offset_1
%439 = OpUDiv %uint %437 %uint_16
%440 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %439
%441 = OpBitwiseAnd %uint %437 %uint_15
%442 = OpShiftRightLogical %uint %441 %uint_2
%443 = OpLoad %v4uint %440 None
%444 = OpVectorExtractDynamic %uint %443 %442
%445 = OpBitcast %float %444
%446 = OpCompositeConstruct %tint_TransferFunctionParams %384 %392 %401 %410 %418 %427 %436 %445
OpReturnValue %446
OpFunctionEnd
%264 = OpFunction %mat3v3float None %448
%start_byte_offset_2 = OpFunctionParameter %uint
%449 = OpLabel
%450 = OpUDiv %uint %start_byte_offset_2 %uint_16
%451 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %450
%452 = OpLoad %v4uint %451 None
%453 = OpVectorShuffle %v3uint %452 %452 0 1 2
%455 = OpBitcast %v3float %453
%456 = OpIAdd %uint %uint_16 %start_byte_offset_2
%457 = OpUDiv %uint %456 %uint_16
%458 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %457
%459 = OpLoad %v4uint %458 None
%460 = OpVectorShuffle %v3uint %459 %459 0 1 2
%461 = OpBitcast %v3float %460
%462 = OpIAdd %uint %uint_32 %start_byte_offset_2
%463 = OpUDiv %uint %462 %uint_16
%464 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %463
%465 = OpLoad %v4uint %464 None
%466 = OpVectorShuffle %v3uint %465 %465 0 1 2
%467 = OpBitcast %v3float %466
%468 = OpCompositeConstruct %mat3v3float %455 %461 %467
OpReturnValue %468
OpFunctionEnd
%268 = OpFunction %mat3v2float None %470
%start_byte_offset_3 = OpFunctionParameter %uint
%471 = OpLabel
%472 = OpUDiv %uint %start_byte_offset_3 %uint_16
%473 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %472
%474 = OpLoad %v4uint %473 None
%475 = OpBitwiseAnd %uint %start_byte_offset_3 %uint_15
%476 = OpShiftRightLogical %uint %475 %uint_2
%477 = OpVectorShuffle %v2uint %474 %474 2 3
%478 = OpVectorShuffle %v2uint %474 %474 0 1
%479 = OpIEqual %bool %476 %uint_2
%480 = OpCompositeConstruct %v2bool %479 %479
%481 = OpSelect %v2uint %480 %477 %478
%482 = OpBitcast %v2float %481
%483 = OpIAdd %uint %uint_8 %start_byte_offset_3
%484 = OpUDiv %uint %483 %uint_16
%485 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %484
%486 = OpLoad %v4uint %485 None
%487 = OpBitwiseAnd %uint %483 %uint_15
%488 = OpShiftRightLogical %uint %487 %uint_2
%489 = OpVectorShuffle %v2uint %486 %486 2 3
%490 = OpVectorShuffle %v2uint %486 %486 0 1
%491 = OpIEqual %bool %488 %uint_2
%492 = OpCompositeConstruct %v2bool %491 %491
%493 = OpSelect %v2uint %492 %489 %490
%494 = OpBitcast %v2float %493
%495 = OpIAdd %uint %uint_16 %start_byte_offset_3
%496 = OpUDiv %uint %495 %uint_16
%497 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %496
%498 = OpLoad %v4uint %497 None
%499 = OpBitwiseAnd %uint %495 %uint_15
%500 = OpShiftRightLogical %uint %499 %uint_2
%501 = OpVectorShuffle %v2uint %498 %498 2 3
%502 = OpVectorShuffle %v2uint %498 %498 0 1
%503 = OpIEqual %bool %500 %uint_2
%504 = OpCompositeConstruct %v2bool %503 %503
%505 = OpSelect %v2uint %504 %501 %502
%506 = OpBitcast %v2float %505
%507 = OpCompositeConstruct %mat3v2float %482 %494 %506
OpReturnValue %507
OpFunctionEnd