aca9b6879a
New in MSL 2.3 is a template that can be used in the place of a scalar type in a stage-in struct. This template has methods which interpolate the varying at the given points. Curiously, you can't set interpolation attributes on such a varying; perspective-correctness is encoded in the type, while interpolation must be done using one of the methods. This makes using this somewhat awkward from SPIRV-Cross, requiring us to jump through a bunch of hoops to make this all work. Using varyings from functions in particular is a pain point, requiring us to pass the stage-in struct itself around. An alternative is to pass references to the interpolants; except this will fall over badly with composite types, which naturally must be flattened. As with tessellation, dynamic indexing isn't supported with pull-model interpolation. This is because of the need to reference the original struct member in order to call one of the pull-model interpolation methods on it. Also, this is done at the variable level; this means that if one varying in a struct is used with the pull-model functions, then the entire struct is emitted as pull-model interpolants. For some reason, this was not documented in the MSL spec, though there is a property on `MTLDevice`, `supportsPullModelInterpolation`, indicating support for this, which *is* documented. This does not appear to be implemented yet for AMD: it returns `NO` from `supportsPullModelInterpolation`, and pipelines with shaders using the templates fail to compile. It *is* implemeted for Intel. It's probably also implemented for Apple GPUs: on Apple Silicon, OpenGL calls down to Metal, and it wouldn't be possible to use the interpolation functions without this implemented in Metal. Based on my testing, where SPIR-V and GLSL have the offset relative to the pixel center, in Metal it appears to be relative to the pixel's upper-left corner, as in HLSL. Therefore, I've added an offset 0.4375, i.e. one half minus one sixteenth, to all arguments to `interpolate_at_offset()`. This also fixes a long-standing bug: if a pull-model interpolation function is used on a varying, make sure that varying is declared. We were already doing this only for the AMD pull-model function, `interpolateAtVertexAMD()`; for reasons which are completely beyond me, we weren't doing this for the base interpolation functions. I also note that there are no tests for the interpolation functions for GLSL or HLSL.
426 lines
20 KiB
JavaScript
426 lines
20 KiB
JavaScript
; SPIR-V
|
|
; Version: 1.3
|
|
; Generator: Khronos SPIR-V Tools Assembler; 0
|
|
; Bound: 325
|
|
; Schema: 0
|
|
OpCapability Shader
|
|
OpCapability SampleRateShading
|
|
OpCapability InterpolationFunction
|
|
%1 = OpExtInstImport "GLSL.std.450"
|
|
OpMemoryModel Logical GLSL450
|
|
OpEntryPoint Fragment %main "main" %FragColor %baz %a %s %foo %sid %bar %b %c
|
|
OpExecutionMode %main OriginUpperLeft
|
|
OpSource GLSL 450
|
|
OpName %main "main"
|
|
OpName %func_ "func("
|
|
OpName %FragColor "FragColor"
|
|
OpName %baz "baz"
|
|
OpName %a "a"
|
|
OpName %_ ""
|
|
OpMemberName %_ 0 "x"
|
|
OpMemberName %_ 1 "y"
|
|
OpMemberName %_ 2 "z"
|
|
OpMemberName %_ 3 "u"
|
|
OpMemberName %_ 4 "v"
|
|
OpMemberName %_ 5 "w"
|
|
OpName %s "s"
|
|
OpName %foo "foo"
|
|
OpName %sid "sid"
|
|
OpName %bar "bar"
|
|
OpName %b "b"
|
|
OpName %c "c"
|
|
OpDecorate %FragColor Location 0
|
|
OpDecorate %baz Sample
|
|
OpDecorate %baz Location 2
|
|
OpDecorate %a Location 4
|
|
OpDecorate %s Location 10
|
|
OpDecorate %foo NoPerspective
|
|
OpDecorate %foo Location 0
|
|
OpDecorate %sid Flat
|
|
OpDecorate %sid Location 3
|
|
OpDecorate %bar Centroid
|
|
OpDecorate %bar Location 1
|
|
OpDecorate %b Centroid
|
|
OpDecorate %b Location 6
|
|
OpDecorate %c Sample
|
|
OpDecorate %c Location 8
|
|
OpMemberDecorate %_ 1 Centroid
|
|
OpMemberDecorate %_ 1 NoPerspective
|
|
OpMemberDecorate %_ 2 Sample
|
|
OpMemberDecorate %_ 3 Centroid
|
|
OpMemberDecorate %_ 4 Sample
|
|
OpMemberDecorate %_ 4 NoPerspective
|
|
%void = OpTypeVoid
|
|
%15 = OpTypeFunction %void
|
|
%float = OpTypeFloat 32
|
|
%v4float = OpTypeVector %float 4
|
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
|
%FragColor = OpVariable %_ptr_Output_v4float Output
|
|
%v2float = OpTypeVector %float 2
|
|
%_ptr_Input_v2float = OpTypePointer Input %v2float
|
|
%baz = OpVariable %_ptr_Input_v2float Input
|
|
%uint = OpTypeInt 32 0
|
|
%uint_0 = OpConstant %uint 0
|
|
%_ptr_Input_float = OpTypePointer Input %float
|
|
%_ptr_Output_float = OpTypePointer Output %float
|
|
%uint_1 = OpConstant %uint 1
|
|
%int = OpTypeInt 32 1
|
|
%int_3 = OpConstant %int 3
|
|
%float_n0_100000001 = OpConstant %float -0.100000001
|
|
%float_0_100000001 = OpConstant %float 0.100000001
|
|
%30 = OpConstantComposite %v2float %float_n0_100000001 %float_0_100000001
|
|
%uint_2 = OpConstant %uint 2
|
|
%_arr_v2float_uint_2 = OpTypeArray %v2float %uint_2
|
|
%_ptr_Input__arr_v2float_uint_2 = OpTypePointer Input %_arr_v2float_uint_2
|
|
%a = OpVariable %_ptr_Input__arr_v2float_uint_2 Input
|
|
%int_1 = OpConstant %int 1
|
|
%int_0 = OpConstant %int 0
|
|
%int_2 = OpConstant %int 2
|
|
%_arr_v4float_uint_2 = OpTypeArray %v4float %uint_2
|
|
%_ptr_Input__arr_v4float_uint_2 = OpTypePointer Input %_arr_v4float_uint_2
|
|
%uint_3 = OpConstant %uint 3
|
|
%_arr_float_uint_3 = OpTypeArray %float %uint_3
|
|
%_ = OpTypeStruct %v4float %v4float %v4float %_arr_v4float_uint_2 %_arr_v2float_uint_2 %_arr_float_uint_3
|
|
%_ptr_Input__ = OpTypePointer Input %_
|
|
%s = OpVariable %_ptr_Input__ Input
|
|
%_ptr_Input_v4float = OpTypePointer Input %v4float
|
|
%foo = OpVariable %_ptr_Input_v4float Input
|
|
%_ptr_Input_int = OpTypePointer Input %int
|
|
%sid = OpVariable %_ptr_Input_int Input
|
|
%44 = OpConstantComposite %v2float %float_0_100000001 %float_0_100000001
|
|
%v3float = OpTypeVector %float 3
|
|
%_ptr_Input_v3float = OpTypePointer Input %v3float
|
|
%bar = OpVariable %_ptr_Input_v3float Input
|
|
%47 = OpConstantComposite %v2float %float_n0_100000001 %float_n0_100000001
|
|
%b = OpVariable %_ptr_Input__arr_v2float_uint_2 Input
|
|
%c = OpVariable %_ptr_Input__arr_v2float_uint_2 Input
|
|
%int_4 = OpConstant %int 4
|
|
%int_5 = OpConstant %int 5
|
|
%main = OpFunction %void None %15
|
|
%50 = OpLabel
|
|
%51 = OpLoad %v4float %foo
|
|
OpStore %FragColor %51
|
|
%52 = OpExtInst %v4float %1 InterpolateAtCentroid %foo
|
|
%53 = OpLoad %v4float %FragColor
|
|
%54 = OpFAdd %v4float %53 %52
|
|
OpStore %FragColor %54
|
|
%55 = OpLoad %int %sid
|
|
%56 = OpExtInst %v4float %1 InterpolateAtSample %foo %55
|
|
%57 = OpLoad %v4float %FragColor
|
|
%58 = OpFAdd %v4float %57 %56
|
|
OpStore %FragColor %58
|
|
%59 = OpExtInst %v4float %1 InterpolateAtOffset %foo %44
|
|
%60 = OpLoad %v4float %FragColor
|
|
%61 = OpFAdd %v4float %60 %59
|
|
OpStore %FragColor %61
|
|
%62 = OpLoad %v3float %bar
|
|
%63 = OpLoad %v4float %FragColor
|
|
%64 = OpVectorShuffle %v3float %63 %63 0 1 2
|
|
%65 = OpFAdd %v3float %64 %62
|
|
%66 = OpLoad %v4float %FragColor
|
|
%67 = OpVectorShuffle %v4float %66 %65 4 5 6 3
|
|
OpStore %FragColor %67
|
|
%68 = OpExtInst %v3float %1 InterpolateAtCentroid %bar
|
|
%69 = OpLoad %v4float %FragColor
|
|
%70 = OpVectorShuffle %v3float %69 %69 0 1 2
|
|
%71 = OpFAdd %v3float %70 %68
|
|
%72 = OpLoad %v4float %FragColor
|
|
%73 = OpVectorShuffle %v4float %72 %71 4 5 6 3
|
|
OpStore %FragColor %73
|
|
%74 = OpLoad %int %sid
|
|
%75 = OpExtInst %v3float %1 InterpolateAtSample %bar %74
|
|
%76 = OpLoad %v4float %FragColor
|
|
%77 = OpVectorShuffle %v3float %76 %76 0 1 2
|
|
%78 = OpFAdd %v3float %77 %75
|
|
%79 = OpLoad %v4float %FragColor
|
|
%80 = OpVectorShuffle %v4float %79 %78 4 5 6 3
|
|
OpStore %FragColor %80
|
|
%81 = OpExtInst %v3float %1 InterpolateAtOffset %bar %47
|
|
%82 = OpLoad %v4float %FragColor
|
|
%83 = OpVectorShuffle %v3float %82 %82 0 1 2
|
|
%84 = OpFAdd %v3float %83 %81
|
|
%85 = OpLoad %v4float %FragColor
|
|
%86 = OpVectorShuffle %v4float %85 %84 4 5 6 3
|
|
OpStore %FragColor %86
|
|
%87 = OpAccessChain %_ptr_Input_v2float %b %int_0
|
|
%88 = OpLoad %v2float %87
|
|
%89 = OpLoad %v4float %FragColor
|
|
%90 = OpVectorShuffle %v2float %89 %89 0 1
|
|
%91 = OpFAdd %v2float %90 %88
|
|
%92 = OpLoad %v4float %FragColor
|
|
%93 = OpVectorShuffle %v4float %92 %91 4 5 2 3
|
|
OpStore %FragColor %93
|
|
%94 = OpAccessChain %_ptr_Input_v2float %b %int_1
|
|
%95 = OpExtInst %v2float %1 InterpolateAtCentroid %94
|
|
%96 = OpLoad %v4float %FragColor
|
|
%97 = OpVectorShuffle %v2float %96 %96 0 1
|
|
%98 = OpFAdd %v2float %97 %95
|
|
%99 = OpLoad %v4float %FragColor
|
|
%100 = OpVectorShuffle %v4float %99 %98 4 5 2 3
|
|
OpStore %FragColor %100
|
|
%101 = OpAccessChain %_ptr_Input_v2float %b %int_0
|
|
%102 = OpExtInst %v2float %1 InterpolateAtSample %101 %int_2
|
|
%103 = OpLoad %v4float %FragColor
|
|
%104 = OpVectorShuffle %v2float %103 %103 0 1
|
|
%105 = OpFAdd %v2float %104 %102
|
|
%106 = OpLoad %v4float %FragColor
|
|
%107 = OpVectorShuffle %v4float %106 %105 4 5 2 3
|
|
OpStore %FragColor %107
|
|
%108 = OpAccessChain %_ptr_Input_v2float %b %int_1
|
|
%109 = OpExtInst %v2float %1 InterpolateAtOffset %108 %30
|
|
%110 = OpLoad %v4float %FragColor
|
|
%111 = OpVectorShuffle %v2float %110 %110 0 1
|
|
%112 = OpFAdd %v2float %111 %109
|
|
%113 = OpLoad %v4float %FragColor
|
|
%114 = OpVectorShuffle %v4float %113 %112 4 5 2 3
|
|
OpStore %FragColor %114
|
|
%115 = OpAccessChain %_ptr_Input_v2float %c %int_0
|
|
%116 = OpLoad %v2float %115
|
|
%117 = OpLoad %v4float %FragColor
|
|
%118 = OpVectorShuffle %v2float %117 %117 0 1
|
|
%119 = OpFAdd %v2float %118 %116
|
|
%120 = OpLoad %v4float %FragColor
|
|
%121 = OpVectorShuffle %v4float %120 %119 4 5 2 3
|
|
OpStore %FragColor %121
|
|
%122 = OpAccessChain %_ptr_Input_v2float %c %int_1
|
|
%123 = OpExtInst %v2float %1 InterpolateAtCentroid %122
|
|
%124 = OpVectorShuffle %v2float %123 %123 0 1
|
|
%125 = OpLoad %v4float %FragColor
|
|
%126 = OpVectorShuffle %v2float %125 %125 0 1
|
|
%127 = OpFAdd %v2float %126 %124
|
|
%128 = OpLoad %v4float %FragColor
|
|
%129 = OpVectorShuffle %v4float %128 %127 4 5 2 3
|
|
OpStore %FragColor %129
|
|
%130 = OpAccessChain %_ptr_Input_v2float %c %int_0
|
|
%131 = OpExtInst %v2float %1 InterpolateAtSample %130 %int_2
|
|
%132 = OpVectorShuffle %v2float %131 %131 1 0
|
|
%133 = OpLoad %v4float %FragColor
|
|
%134 = OpVectorShuffle %v2float %133 %133 0 1
|
|
%135 = OpFAdd %v2float %134 %132
|
|
%136 = OpLoad %v4float %FragColor
|
|
%137 = OpVectorShuffle %v4float %136 %135 4 5 2 3
|
|
OpStore %FragColor %137
|
|
%138 = OpAccessChain %_ptr_Input_v2float %c %int_1
|
|
%139 = OpExtInst %v2float %1 InterpolateAtOffset %138 %30
|
|
%140 = OpVectorShuffle %v2float %139 %139 0 0
|
|
%141 = OpLoad %v4float %FragColor
|
|
%142 = OpVectorShuffle %v2float %141 %141 0 1
|
|
%143 = OpFAdd %v2float %142 %140
|
|
%144 = OpLoad %v4float %FragColor
|
|
%145 = OpVectorShuffle %v4float %144 %143 4 5 2 3
|
|
OpStore %FragColor %145
|
|
%146 = OpAccessChain %_ptr_Input_v4float %s %int_0
|
|
%147 = OpLoad %v4float %146
|
|
%148 = OpLoad %v4float %FragColor
|
|
%149 = OpFAdd %v4float %148 %147
|
|
OpStore %FragColor %149
|
|
%150 = OpAccessChain %_ptr_Input_v4float %s %int_0
|
|
%151 = OpExtInst %v4float %1 InterpolateAtCentroid %150
|
|
%152 = OpLoad %v4float %FragColor
|
|
%153 = OpFAdd %v4float %152 %151
|
|
OpStore %FragColor %153
|
|
%154 = OpAccessChain %_ptr_Input_v4float %s %int_0
|
|
%155 = OpLoad %int %sid
|
|
%156 = OpExtInst %v4float %1 InterpolateAtSample %154 %155
|
|
%157 = OpLoad %v4float %FragColor
|
|
%158 = OpFAdd %v4float %157 %156
|
|
OpStore %FragColor %158
|
|
%159 = OpAccessChain %_ptr_Input_v4float %s %int_0
|
|
%160 = OpExtInst %v4float %1 InterpolateAtOffset %159 %44
|
|
%161 = OpLoad %v4float %FragColor
|
|
%162 = OpFAdd %v4float %161 %160
|
|
OpStore %FragColor %162
|
|
%163 = OpAccessChain %_ptr_Input_v4float %s %int_1
|
|
%164 = OpLoad %v4float %163
|
|
%165 = OpLoad %v4float %FragColor
|
|
%166 = OpFAdd %v4float %165 %164
|
|
OpStore %FragColor %166
|
|
%167 = OpAccessChain %_ptr_Input_v4float %s %int_1
|
|
%168 = OpExtInst %v4float %1 InterpolateAtCentroid %167
|
|
%169 = OpLoad %v4float %FragColor
|
|
%170 = OpFAdd %v4float %169 %168
|
|
OpStore %FragColor %170
|
|
%171 = OpAccessChain %_ptr_Input_v4float %s %int_1
|
|
%172 = OpLoad %int %sid
|
|
%173 = OpExtInst %v4float %1 InterpolateAtSample %171 %172
|
|
%174 = OpLoad %v4float %FragColor
|
|
%175 = OpFAdd %v4float %174 %173
|
|
OpStore %FragColor %175
|
|
%176 = OpAccessChain %_ptr_Input_v4float %s %int_1
|
|
%177 = OpExtInst %v4float %1 InterpolateAtOffset %176 %47
|
|
%178 = OpLoad %v4float %FragColor
|
|
%179 = OpFAdd %v4float %178 %177
|
|
OpStore %FragColor %179
|
|
%180 = OpAccessChain %_ptr_Input_v2float %s %int_4 %int_0
|
|
%181 = OpLoad %v2float %180
|
|
%182 = OpLoad %v4float %FragColor
|
|
%183 = OpVectorShuffle %v2float %182 %182 0 1
|
|
%184 = OpFAdd %v2float %183 %181
|
|
%185 = OpLoad %v4float %FragColor
|
|
%186 = OpVectorShuffle %v4float %185 %184 4 5 2 3
|
|
OpStore %FragColor %186
|
|
%187 = OpAccessChain %_ptr_Input_v2float %s %int_4 %int_1
|
|
%188 = OpExtInst %v2float %1 InterpolateAtCentroid %187
|
|
%189 = OpLoad %v4float %FragColor
|
|
%190 = OpVectorShuffle %v2float %189 %189 0 1
|
|
%191 = OpFAdd %v2float %190 %188
|
|
%192 = OpLoad %v4float %FragColor
|
|
%193 = OpVectorShuffle %v4float %192 %191 4 5 2 3
|
|
OpStore %FragColor %193
|
|
%194 = OpAccessChain %_ptr_Input_v2float %s %int_4 %int_0
|
|
%195 = OpExtInst %v2float %1 InterpolateAtSample %194 %int_2
|
|
%196 = OpLoad %v4float %FragColor
|
|
%197 = OpVectorShuffle %v2float %196 %196 0 1
|
|
%198 = OpFAdd %v2float %197 %195
|
|
%199 = OpLoad %v4float %FragColor
|
|
%200 = OpVectorShuffle %v4float %199 %198 4 5 2 3
|
|
OpStore %FragColor %200
|
|
%201 = OpAccessChain %_ptr_Input_v2float %s %int_4 %int_1
|
|
%202 = OpExtInst %v2float %1 InterpolateAtOffset %201 %30
|
|
%203 = OpLoad %v4float %FragColor
|
|
%204 = OpVectorShuffle %v2float %203 %203 0 1
|
|
%205 = OpFAdd %v2float %204 %202
|
|
%206 = OpLoad %v4float %FragColor
|
|
%207 = OpVectorShuffle %v4float %206 %205 4 5 2 3
|
|
OpStore %FragColor %207
|
|
%208 = OpAccessChain %_ptr_Input_float %s %int_5 %int_0
|
|
%209 = OpLoad %float %208
|
|
%210 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
%211 = OpLoad %float %210
|
|
%212 = OpFAdd %float %211 %209
|
|
%213 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
OpStore %213 %212
|
|
%214 = OpAccessChain %_ptr_Input_float %s %int_5 %int_1
|
|
%215 = OpExtInst %float %1 InterpolateAtCentroid %214
|
|
%216 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
%217 = OpLoad %float %216
|
|
%218 = OpFAdd %float %217 %215
|
|
%219 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
OpStore %219 %218
|
|
%220 = OpAccessChain %_ptr_Input_float %s %int_5 %int_0
|
|
%221 = OpExtInst %float %1 InterpolateAtSample %220 %int_2
|
|
%222 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
%223 = OpLoad %float %222
|
|
%224 = OpFAdd %float %223 %221
|
|
%225 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
OpStore %225 %224
|
|
%226 = OpAccessChain %_ptr_Input_float %s %int_5 %int_1
|
|
%227 = OpExtInst %float %1 InterpolateAtOffset %226 %30
|
|
%228 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
%229 = OpLoad %float %228
|
|
%230 = OpFAdd %float %229 %227
|
|
%231 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
OpStore %231 %230
|
|
%232 = OpFunctionCall %void %func_
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%func_ = OpFunction %void None %15
|
|
%233 = OpLabel
|
|
%234 = OpLoad %v2float %baz
|
|
%235 = OpLoad %v4float %FragColor
|
|
%236 = OpVectorShuffle %v2float %235 %235 0 1
|
|
%237 = OpFAdd %v2float %236 %234
|
|
%238 = OpLoad %v4float %FragColor
|
|
%239 = OpVectorShuffle %v4float %238 %237 4 5 2 3
|
|
OpStore %FragColor %239
|
|
%240 = OpAccessChain %_ptr_Input_float %baz %uint_0
|
|
%241 = OpExtInst %float %1 InterpolateAtCentroid %240
|
|
%242 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
%243 = OpLoad %float %242
|
|
%244 = OpFAdd %float %243 %241
|
|
%245 = OpAccessChain %_ptr_Output_float %FragColor %uint_0
|
|
OpStore %245 %244
|
|
%246 = OpAccessChain %_ptr_Input_float %baz %uint_1
|
|
%247 = OpExtInst %float %1 InterpolateAtSample %246 %int_3
|
|
%248 = OpAccessChain %_ptr_Output_float %FragColor %uint_1
|
|
%249 = OpLoad %float %248
|
|
%250 = OpFAdd %float %249 %247
|
|
%251 = OpAccessChain %_ptr_Output_float %FragColor %uint_1
|
|
OpStore %251 %250
|
|
%252 = OpAccessChain %_ptr_Input_float %baz %uint_1
|
|
%253 = OpExtInst %float %1 InterpolateAtOffset %252 %30
|
|
%254 = OpAccessChain %_ptr_Output_float %FragColor %uint_2
|
|
%255 = OpLoad %float %254
|
|
%256 = OpFAdd %float %255 %253
|
|
%257 = OpAccessChain %_ptr_Output_float %FragColor %uint_2
|
|
OpStore %257 %256
|
|
%258 = OpAccessChain %_ptr_Input_v2float %a %int_1
|
|
%259 = OpExtInst %v2float %1 InterpolateAtCentroid %258
|
|
%260 = OpLoad %v4float %FragColor
|
|
%261 = OpVectorShuffle %v2float %260 %260 0 1
|
|
%262 = OpFAdd %v2float %261 %259
|
|
%263 = OpLoad %v4float %FragColor
|
|
%264 = OpVectorShuffle %v4float %263 %262 4 5 2 3
|
|
OpStore %FragColor %264
|
|
%265 = OpAccessChain %_ptr_Input_v2float %a %int_0
|
|
%266 = OpExtInst %v2float %1 InterpolateAtSample %265 %int_2
|
|
%267 = OpLoad %v4float %FragColor
|
|
%268 = OpVectorShuffle %v2float %267 %267 0 1
|
|
%269 = OpFAdd %v2float %268 %266
|
|
%270 = OpLoad %v4float %FragColor
|
|
%271 = OpVectorShuffle %v4float %270 %269 4 5 2 3
|
|
OpStore %FragColor %271
|
|
%272 = OpAccessChain %_ptr_Input_v2float %a %int_1
|
|
%273 = OpExtInst %v2float %1 InterpolateAtOffset %272 %30
|
|
%274 = OpLoad %v4float %FragColor
|
|
%275 = OpVectorShuffle %v2float %274 %274 0 1
|
|
%276 = OpFAdd %v2float %275 %273
|
|
%277 = OpLoad %v4float %FragColor
|
|
%278 = OpVectorShuffle %v4float %277 %276 4 5 2 3
|
|
OpStore %FragColor %278
|
|
%279 = OpAccessChain %_ptr_Input_v4float %s %int_2
|
|
%280 = OpLoad %v4float %279
|
|
%281 = OpLoad %v4float %FragColor
|
|
%282 = OpFAdd %v4float %281 %280
|
|
OpStore %FragColor %282
|
|
%283 = OpAccessChain %_ptr_Input_v4float %s %int_2
|
|
%284 = OpExtInst %v4float %1 InterpolateAtCentroid %283
|
|
%285 = OpVectorShuffle %v2float %284 %284 1 1
|
|
%286 = OpLoad %v4float %FragColor
|
|
%287 = OpVectorShuffle %v2float %286 %286 0 1
|
|
%288 = OpFAdd %v2float %287 %285
|
|
%289 = OpLoad %v4float %FragColor
|
|
%290 = OpVectorShuffle %v4float %289 %288 4 5 2 3
|
|
OpStore %FragColor %290
|
|
%291 = OpAccessChain %_ptr_Input_v4float %s %int_2
|
|
%292 = OpExtInst %v4float %1 InterpolateAtSample %291 %int_3
|
|
%293 = OpVectorShuffle %v2float %292 %292 0 1
|
|
%294 = OpLoad %v4float %FragColor
|
|
%295 = OpVectorShuffle %v2float %294 %294 1 2
|
|
%296 = OpFAdd %v2float %295 %293
|
|
%297 = OpLoad %v4float %FragColor
|
|
%298 = OpVectorShuffle %v4float %297 %296 0 4 5 3
|
|
OpStore %FragColor %298
|
|
%299 = OpAccessChain %_ptr_Input_v4float %s %int_2
|
|
%300 = OpExtInst %v4float %1 InterpolateAtOffset %299 %30
|
|
%301 = OpVectorShuffle %v2float %300 %300 3 0
|
|
%302 = OpLoad %v4float %FragColor
|
|
%303 = OpVectorShuffle %v2float %302 %302 2 3
|
|
%304 = OpFAdd %v2float %303 %301
|
|
%305 = OpLoad %v4float %FragColor
|
|
%306 = OpVectorShuffle %v4float %305 %304 0 1 4 5
|
|
OpStore %FragColor %306
|
|
%308 = OpAccessChain %_ptr_Input_v4float %s %int_3 %int_0
|
|
%309 = OpLoad %v4float %308
|
|
%310 = OpLoad %v4float %FragColor
|
|
%311 = OpFAdd %v4float %310 %309
|
|
OpStore %FragColor %311
|
|
%312 = OpAccessChain %_ptr_Input__arr_v4float_uint_2 %s %int_3
|
|
%313 = OpAccessChain %_ptr_Input_v4float %312 %int_1
|
|
%314 = OpExtInst %v4float %1 InterpolateAtCentroid %313
|
|
%315 = OpLoad %v4float %FragColor
|
|
%316 = OpFAdd %v4float %315 %314
|
|
OpStore %FragColor %316
|
|
%317 = OpAccessChain %_ptr_Input_v4float %s %int_3 %int_0
|
|
%318 = OpExtInst %v4float %1 InterpolateAtSample %317 %int_2
|
|
%319 = OpLoad %v4float %FragColor
|
|
%320 = OpFAdd %v4float %319 %318
|
|
OpStore %FragColor %320
|
|
%321 = OpAccessChain %_ptr_Input_v4float %s %int_3 %int_1
|
|
%322 = OpExtInst %v4float %1 InterpolateAtOffset %321 %30
|
|
%323 = OpLoad %v4float %FragColor
|
|
%324 = OpFAdd %v4float %323 %322
|
|
OpStore %FragColor %324
|
|
OpReturn
|
|
OpFunctionEnd
|