fce87a43e6
Previously, every expression/statement type was responsible for pruning or clearing the store-cache when branches were involved. This was difficult to reason about and easy to get wrong, particularly if the details are not fresh in your mind. Now, `writeLabel` takes care of the details for you. Pass in the location of the branch(es) which use the label, and the proper cache updating behavior will occur automatically. Some of the label enum types are not strictly necessary and exist for the benefit of a reader. Specifically: - `kBranchlessBlock` and `kBranchIsOnPreviousLine` are synonyms - `kBranchIsBelow` and `kBranchesOnBothSides` are also synonyms The hope is that extra enum names will be easier for a reader to follow, versus fewer but very-verbose enum names (like `kBranchIsBelowOrOnBothSides`). This change earned some very minor switch-related dividends. Previously, every label in a switch was treated as a forward-branch, but in fact, the very first label in a switch is privileged. This is because we are branching from the previous line, and the store cache is trustworthy in this case. (Versus "branching from above," where the store cache needs to be pruned before it can be trusted.) Change-Id: I38b539069c22be9f0777b632f60f0eab2409d687 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/531540 Auto-Submit: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: John Stiles <johnstiles@google.com>
414 lines
14 KiB
JavaScript
414 lines
14 KiB
JavaScript
OpCapability Shader
|
|
%1 = OpExtInstImport "GLSL.std.450"
|
|
OpMemoryModel Logical GLSL450
|
|
OpEntryPoint Fragment %_entrypoint_v "_entrypoint" %sk_FragColor %sk_Clockwise
|
|
OpExecutionMode %_entrypoint_v OriginUpperLeft
|
|
OpName %sk_FragColor "sk_FragColor"
|
|
OpName %sk_Clockwise "sk_Clockwise"
|
|
OpName %minus "minus"
|
|
OpName %star "star"
|
|
OpName %slash "slash"
|
|
OpName %_UniformBuffer "_UniformBuffer"
|
|
OpMemberName %_UniformBuffer 0 "colorGreen"
|
|
OpMemberName %_UniformBuffer 1 "colorRed"
|
|
OpName %_entrypoint_v "_entrypoint_v"
|
|
OpName %test_bifffff22 "test_bifffff22"
|
|
OpName %one "one"
|
|
OpName %m2 "m2"
|
|
OpName %main "main"
|
|
OpName %f1 "f1"
|
|
OpName %f2 "f2"
|
|
OpName %f3 "f3"
|
|
OpName %f4 "f4"
|
|
OpName %_0_expected "_0_expected"
|
|
OpName %_1_one "_1_one"
|
|
OpName %_2_m2 "_2_m2"
|
|
OpDecorate %sk_FragColor RelaxedPrecision
|
|
OpDecorate %sk_FragColor Location 0
|
|
OpDecorate %sk_FragColor Index 0
|
|
OpDecorate %sk_Clockwise BuiltIn FrontFacing
|
|
OpMemberDecorate %_UniformBuffer 0 Offset 0
|
|
OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
|
|
OpMemberDecorate %_UniformBuffer 1 Offset 16
|
|
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
|
|
OpDecorate %_UniformBuffer Block
|
|
OpDecorate %19 Binding 0
|
|
OpDecorate %19 DescriptorSet 0
|
|
OpDecorate %48 RelaxedPrecision
|
|
OpDecorate %49 RelaxedPrecision
|
|
OpDecorate %135 RelaxedPrecision
|
|
OpDecorate %136 RelaxedPrecision
|
|
OpDecorate %139 RelaxedPrecision
|
|
OpDecorate %140 RelaxedPrecision
|
|
OpDecorate %141 RelaxedPrecision
|
|
OpDecorate %145 RelaxedPrecision
|
|
OpDecorate %146 RelaxedPrecision
|
|
OpDecorate %147 RelaxedPrecision
|
|
OpDecorate %151 RelaxedPrecision
|
|
OpDecorate %152 RelaxedPrecision
|
|
OpDecorate %153 RelaxedPrecision
|
|
OpDecorate %164 RelaxedPrecision
|
|
OpDecorate %165 RelaxedPrecision
|
|
OpDecorate %275 RelaxedPrecision
|
|
OpDecorate %277 RelaxedPrecision
|
|
OpDecorate %278 RelaxedPrecision
|
|
%float = OpTypeFloat 32
|
|
%v4float = OpTypeVector %float 4
|
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
|
%sk_FragColor = OpVariable %_ptr_Output_v4float Output
|
|
%bool = OpTypeBool
|
|
%_ptr_Input_bool = OpTypePointer Input %bool
|
|
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
|
|
%int = OpTypeInt 32 1
|
|
%_ptr_Private_int = OpTypePointer Private %int
|
|
%minus = OpVariable %_ptr_Private_int Private
|
|
%int_2 = OpConstant %int 2
|
|
%star = OpVariable %_ptr_Private_int Private
|
|
%int_3 = OpConstant %int 3
|
|
%slash = OpVariable %_ptr_Private_int Private
|
|
%int_4 = OpConstant %int 4
|
|
%_UniformBuffer = OpTypeStruct %v4float %v4float
|
|
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
|
|
%19 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
|
|
%void = OpTypeVoid
|
|
%24 = OpTypeFunction %void
|
|
%float_0 = OpConstant %float 0
|
|
%v2float = OpTypeVector %float 2
|
|
%28 = OpConstantComposite %v2float %float_0 %float_0
|
|
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
|
%_ptr_Function_int = OpTypePointer Function %int
|
|
%_ptr_Function_float = OpTypePointer Function %float
|
|
%mat2v2float = OpTypeMatrix %v2float 2
|
|
%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
|
|
%36 = OpTypeFunction %bool %_ptr_Function_int %_ptr_Function_float %_ptr_Function_float %_ptr_Function_float %_ptr_Function_float %_ptr_Function_mat2v2float
|
|
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
|
%int_1 = OpConstant %int 1
|
|
%float_1 = OpConstant %float 1
|
|
%69 = OpConstantComposite %v2float %float_1 %float_1
|
|
%70 = OpConstantComposite %mat2v2float %69 %69
|
|
%float_2 = OpConstant %float 2
|
|
%84 = OpConstantComposite %v2float %float_2 %float_2
|
|
%85 = OpConstantComposite %mat2v2float %84 %84
|
|
%false = OpConstantFalse %bool
|
|
%int_0 = OpConstant %int 0
|
|
%130 = OpTypeFunction %v4float %_ptr_Function_v2float
|
|
%float_3 = OpConstant %float 3
|
|
%float_4 = OpConstant %float 4
|
|
%float_0_5 = OpConstant %float 0.5
|
|
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
|
%_entrypoint_v = OpFunction %void None %24
|
|
%25 = OpLabel
|
|
%29 = OpVariable %_ptr_Function_v2float Function
|
|
OpStore %29 %28
|
|
%31 = OpFunctionCall %v4float %main %29
|
|
OpStore %sk_FragColor %31
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%test_bifffff22 = OpFunction %bool None %36
|
|
%37 = OpFunctionParameter %_ptr_Function_int
|
|
%38 = OpFunctionParameter %_ptr_Function_float
|
|
%39 = OpFunctionParameter %_ptr_Function_float
|
|
%40 = OpFunctionParameter %_ptr_Function_float
|
|
%41 = OpFunctionParameter %_ptr_Function_float
|
|
%42 = OpFunctionParameter %_ptr_Function_mat2v2float
|
|
%43 = OpLabel
|
|
%one = OpVariable %_ptr_Function_float Function
|
|
%m2 = OpVariable %_ptr_Function_mat2v2float Function
|
|
%45 = OpAccessChain %_ptr_Uniform_v4float %19 %int_1
|
|
%48 = OpLoad %v4float %45
|
|
%49 = OpCompositeExtract %float %48 0
|
|
OpStore %one %49
|
|
%51 = OpLoad %float %38
|
|
%52 = OpFMul %float %51 %49
|
|
%53 = OpLoad %float %39
|
|
%54 = OpFMul %float %53 %49
|
|
%55 = OpLoad %float %40
|
|
%56 = OpFMul %float %55 %49
|
|
%57 = OpLoad %float %41
|
|
%58 = OpFMul %float %57 %49
|
|
%59 = OpCompositeConstruct %v2float %52 %54
|
|
%60 = OpCompositeConstruct %v2float %56 %58
|
|
%61 = OpCompositeConstruct %mat2v2float %59 %60
|
|
OpStore %m2 %61
|
|
%62 = OpLoad %int %37
|
|
OpSelectionMerge %63 None
|
|
OpSwitch %62 %63 1 %64 2 %65 3 %66 4 %67
|
|
%64 = OpLabel
|
|
%71 = OpFAdd %v2float %59 %69
|
|
%72 = OpFAdd %v2float %60 %69
|
|
%73 = OpCompositeConstruct %mat2v2float %71 %72
|
|
OpStore %m2 %73
|
|
OpBranch %63
|
|
%65 = OpLabel
|
|
%74 = OpLoad %mat2v2float %m2
|
|
%75 = OpCompositeExtract %v2float %74 0
|
|
%76 = OpFSub %v2float %75 %69
|
|
%77 = OpCompositeExtract %v2float %74 1
|
|
%78 = OpFSub %v2float %77 %69
|
|
%79 = OpCompositeConstruct %mat2v2float %76 %78
|
|
OpStore %m2 %79
|
|
OpBranch %63
|
|
%66 = OpLabel
|
|
%80 = OpLoad %mat2v2float %m2
|
|
%82 = OpMatrixTimesScalar %mat2v2float %80 %float_2
|
|
OpStore %m2 %82
|
|
OpBranch %63
|
|
%67 = OpLabel
|
|
%83 = OpLoad %mat2v2float %m2
|
|
%86 = OpCompositeExtract %v2float %83 0
|
|
%87 = OpFDiv %v2float %86 %84
|
|
%88 = OpCompositeExtract %v2float %83 1
|
|
%89 = OpFDiv %v2float %88 %84
|
|
%90 = OpCompositeConstruct %mat2v2float %87 %89
|
|
OpStore %m2 %90
|
|
OpBranch %63
|
|
%63 = OpLabel
|
|
%93 = OpAccessChain %_ptr_Function_v2float %m2 %int_0
|
|
%94 = OpLoad %v2float %93
|
|
%95 = OpCompositeExtract %float %94 0
|
|
%96 = OpAccessChain %_ptr_Function_v2float %42 %int_0
|
|
%97 = OpLoad %v2float %96
|
|
%98 = OpCompositeExtract %float %97 0
|
|
%99 = OpFOrdEqual %bool %95 %98
|
|
OpSelectionMerge %101 None
|
|
OpBranchConditional %99 %100 %101
|
|
%100 = OpLabel
|
|
%102 = OpAccessChain %_ptr_Function_v2float %m2 %int_0
|
|
%103 = OpLoad %v2float %102
|
|
%104 = OpCompositeExtract %float %103 1
|
|
%105 = OpAccessChain %_ptr_Function_v2float %42 %int_0
|
|
%106 = OpLoad %v2float %105
|
|
%107 = OpCompositeExtract %float %106 1
|
|
%108 = OpFOrdEqual %bool %104 %107
|
|
OpBranch %101
|
|
%101 = OpLabel
|
|
%109 = OpPhi %bool %false %63 %108 %100
|
|
OpSelectionMerge %111 None
|
|
OpBranchConditional %109 %110 %111
|
|
%110 = OpLabel
|
|
%112 = OpAccessChain %_ptr_Function_v2float %m2 %int_1
|
|
%113 = OpLoad %v2float %112
|
|
%114 = OpCompositeExtract %float %113 0
|
|
%115 = OpAccessChain %_ptr_Function_v2float %42 %int_1
|
|
%116 = OpLoad %v2float %115
|
|
%117 = OpCompositeExtract %float %116 0
|
|
%118 = OpFOrdEqual %bool %114 %117
|
|
OpBranch %111
|
|
%111 = OpLabel
|
|
%119 = OpPhi %bool %false %101 %118 %110
|
|
OpSelectionMerge %121 None
|
|
OpBranchConditional %119 %120 %121
|
|
%120 = OpLabel
|
|
%122 = OpAccessChain %_ptr_Function_v2float %m2 %int_1
|
|
%123 = OpLoad %v2float %122
|
|
%124 = OpCompositeExtract %float %123 1
|
|
%125 = OpAccessChain %_ptr_Function_v2float %42 %int_1
|
|
%126 = OpLoad %v2float %125
|
|
%127 = OpCompositeExtract %float %126 1
|
|
%128 = OpFOrdEqual %bool %124 %127
|
|
OpBranch %121
|
|
%121 = OpLabel
|
|
%129 = OpPhi %bool %false %111 %128 %120
|
|
OpReturnValue %129
|
|
OpFunctionEnd
|
|
%main = OpFunction %v4float None %130
|
|
%131 = OpFunctionParameter %_ptr_Function_v2float
|
|
%132 = OpLabel
|
|
%f1 = OpVariable %_ptr_Function_float Function
|
|
%f2 = OpVariable %_ptr_Function_float Function
|
|
%f3 = OpVariable %_ptr_Function_float Function
|
|
%f4 = OpVariable %_ptr_Function_float Function
|
|
%_0_expected = OpVariable %_ptr_Function_mat2v2float Function
|
|
%_1_one = OpVariable %_ptr_Function_float Function
|
|
%_2_m2 = OpVariable %_ptr_Function_mat2v2float Function
|
|
%217 = OpVariable %_ptr_Function_int Function
|
|
%218 = OpVariable %_ptr_Function_float Function
|
|
%219 = OpVariable %_ptr_Function_float Function
|
|
%220 = OpVariable %_ptr_Function_float Function
|
|
%221 = OpVariable %_ptr_Function_float Function
|
|
%229 = OpVariable %_ptr_Function_mat2v2float Function
|
|
%235 = OpVariable %_ptr_Function_int Function
|
|
%236 = OpVariable %_ptr_Function_float Function
|
|
%237 = OpVariable %_ptr_Function_float Function
|
|
%238 = OpVariable %_ptr_Function_float Function
|
|
%239 = OpVariable %_ptr_Function_float Function
|
|
%247 = OpVariable %_ptr_Function_mat2v2float Function
|
|
%253 = OpVariable %_ptr_Function_int Function
|
|
%254 = OpVariable %_ptr_Function_float Function
|
|
%255 = OpVariable %_ptr_Function_float Function
|
|
%256 = OpVariable %_ptr_Function_float Function
|
|
%257 = OpVariable %_ptr_Function_float Function
|
|
%266 = OpVariable %_ptr_Function_mat2v2float Function
|
|
%269 = OpVariable %_ptr_Function_v4float Function
|
|
OpStore %minus %int_2
|
|
OpStore %star %int_3
|
|
OpStore %slash %int_4
|
|
%134 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
|
|
%135 = OpLoad %v4float %134
|
|
%136 = OpCompositeExtract %float %135 1
|
|
OpStore %f1 %136
|
|
%138 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
|
|
%139 = OpLoad %v4float %138
|
|
%140 = OpCompositeExtract %float %139 1
|
|
%141 = OpFMul %float %float_2 %140
|
|
OpStore %f2 %141
|
|
%144 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
|
|
%145 = OpLoad %v4float %144
|
|
%146 = OpCompositeExtract %float %145 1
|
|
%147 = OpFMul %float %float_3 %146
|
|
OpStore %f3 %147
|
|
%150 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
|
|
%151 = OpLoad %v4float %150
|
|
%152 = OpCompositeExtract %float %151 1
|
|
%153 = OpFMul %float %float_4 %152
|
|
OpStore %f4 %153
|
|
%155 = OpFAdd %float %136 %float_1
|
|
%156 = OpFAdd %float %141 %float_1
|
|
%157 = OpFAdd %float %147 %float_1
|
|
%158 = OpFAdd %float %153 %float_1
|
|
%159 = OpCompositeConstruct %v2float %155 %156
|
|
%160 = OpCompositeConstruct %v2float %157 %158
|
|
%161 = OpCompositeConstruct %mat2v2float %159 %160
|
|
OpStore %_0_expected %161
|
|
%163 = OpAccessChain %_ptr_Uniform_v4float %19 %int_1
|
|
%164 = OpLoad %v4float %163
|
|
%165 = OpCompositeExtract %float %164 0
|
|
OpStore %_1_one %165
|
|
%167 = OpFMul %float %136 %165
|
|
%168 = OpFMul %float %141 %165
|
|
%169 = OpFMul %float %147 %165
|
|
%170 = OpFMul %float %153 %165
|
|
%171 = OpCompositeConstruct %v2float %167 %168
|
|
%172 = OpCompositeConstruct %v2float %169 %170
|
|
%173 = OpCompositeConstruct %mat2v2float %171 %172
|
|
OpStore %_2_m2 %173
|
|
%174 = OpFAdd %v2float %171 %69
|
|
%175 = OpFAdd %v2float %172 %69
|
|
%176 = OpCompositeConstruct %mat2v2float %174 %175
|
|
OpStore %_2_m2 %176
|
|
%177 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_0
|
|
%178 = OpLoad %v2float %177
|
|
%179 = OpCompositeExtract %float %178 0
|
|
%180 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_0
|
|
%181 = OpLoad %v2float %180
|
|
%182 = OpCompositeExtract %float %181 0
|
|
%183 = OpFOrdEqual %bool %179 %182
|
|
OpSelectionMerge %185 None
|
|
OpBranchConditional %183 %184 %185
|
|
%184 = OpLabel
|
|
%186 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_0
|
|
%187 = OpLoad %v2float %186
|
|
%188 = OpCompositeExtract %float %187 1
|
|
%189 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_0
|
|
%190 = OpLoad %v2float %189
|
|
%191 = OpCompositeExtract %float %190 1
|
|
%192 = OpFOrdEqual %bool %188 %191
|
|
OpBranch %185
|
|
%185 = OpLabel
|
|
%193 = OpPhi %bool %false %132 %192 %184
|
|
OpSelectionMerge %195 None
|
|
OpBranchConditional %193 %194 %195
|
|
%194 = OpLabel
|
|
%196 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_1
|
|
%197 = OpLoad %v2float %196
|
|
%198 = OpCompositeExtract %float %197 0
|
|
%199 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_1
|
|
%200 = OpLoad %v2float %199
|
|
%201 = OpCompositeExtract %float %200 0
|
|
%202 = OpFOrdEqual %bool %198 %201
|
|
OpBranch %195
|
|
%195 = OpLabel
|
|
%203 = OpPhi %bool %false %185 %202 %194
|
|
OpSelectionMerge %205 None
|
|
OpBranchConditional %203 %204 %205
|
|
%204 = OpLabel
|
|
%206 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_1
|
|
%207 = OpLoad %v2float %206
|
|
%208 = OpCompositeExtract %float %207 1
|
|
%209 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_1
|
|
%210 = OpLoad %v2float %209
|
|
%211 = OpCompositeExtract %float %210 1
|
|
%212 = OpFOrdEqual %bool %208 %211
|
|
OpBranch %205
|
|
%205 = OpLabel
|
|
%213 = OpPhi %bool %false %195 %212 %204
|
|
OpSelectionMerge %215 None
|
|
OpBranchConditional %213 %214 %215
|
|
%214 = OpLabel
|
|
%216 = OpLoad %int %minus
|
|
OpStore %217 %216
|
|
OpStore %218 %136
|
|
OpStore %219 %141
|
|
OpStore %220 %147
|
|
OpStore %221 %153
|
|
%222 = OpFSub %float %136 %float_1
|
|
%223 = OpFSub %float %141 %float_1
|
|
%224 = OpFSub %float %147 %float_1
|
|
%225 = OpFSub %float %153 %float_1
|
|
%226 = OpCompositeConstruct %v2float %222 %223
|
|
%227 = OpCompositeConstruct %v2float %224 %225
|
|
%228 = OpCompositeConstruct %mat2v2float %226 %227
|
|
OpStore %229 %228
|
|
%230 = OpFunctionCall %bool %test_bifffff22 %217 %218 %219 %220 %221 %229
|
|
OpBranch %215
|
|
%215 = OpLabel
|
|
%231 = OpPhi %bool %false %205 %230 %214
|
|
OpSelectionMerge %233 None
|
|
OpBranchConditional %231 %232 %233
|
|
%232 = OpLabel
|
|
%234 = OpLoad %int %star
|
|
OpStore %235 %234
|
|
OpStore %236 %136
|
|
OpStore %237 %141
|
|
OpStore %238 %147
|
|
OpStore %239 %153
|
|
%240 = OpFMul %float %136 %float_2
|
|
%241 = OpFMul %float %141 %float_2
|
|
%242 = OpFMul %float %147 %float_2
|
|
%243 = OpFMul %float %153 %float_2
|
|
%244 = OpCompositeConstruct %v2float %240 %241
|
|
%245 = OpCompositeConstruct %v2float %242 %243
|
|
%246 = OpCompositeConstruct %mat2v2float %244 %245
|
|
OpStore %247 %246
|
|
%248 = OpFunctionCall %bool %test_bifffff22 %235 %236 %237 %238 %239 %247
|
|
OpBranch %233
|
|
%233 = OpLabel
|
|
%249 = OpPhi %bool %false %215 %248 %232
|
|
OpSelectionMerge %251 None
|
|
OpBranchConditional %249 %250 %251
|
|
%250 = OpLabel
|
|
%252 = OpLoad %int %slash
|
|
OpStore %253 %252
|
|
OpStore %254 %136
|
|
OpStore %255 %141
|
|
OpStore %256 %147
|
|
OpStore %257 %153
|
|
%259 = OpFMul %float %136 %float_0_5
|
|
%260 = OpFMul %float %141 %float_0_5
|
|
%261 = OpFMul %float %147 %float_0_5
|
|
%262 = OpFMul %float %153 %float_0_5
|
|
%263 = OpCompositeConstruct %v2float %259 %260
|
|
%264 = OpCompositeConstruct %v2float %261 %262
|
|
%265 = OpCompositeConstruct %mat2v2float %263 %264
|
|
OpStore %266 %265
|
|
%267 = OpFunctionCall %bool %test_bifffff22 %253 %254 %255 %256 %257 %266
|
|
OpBranch %251
|
|
%251 = OpLabel
|
|
%268 = OpPhi %bool %false %233 %267 %250
|
|
OpSelectionMerge %273 None
|
|
OpBranchConditional %268 %271 %272
|
|
%271 = OpLabel
|
|
%274 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
|
|
%275 = OpLoad %v4float %274
|
|
OpStore %269 %275
|
|
OpBranch %273
|
|
%272 = OpLabel
|
|
%276 = OpAccessChain %_ptr_Uniform_v4float %19 %int_1
|
|
%277 = OpLoad %v4float %276
|
|
OpStore %269 %277
|
|
OpBranch %273
|
|
%273 = OpLabel
|
|
%278 = OpLoad %v4float %269
|
|
OpReturnValue %278
|
|
OpFunctionEnd
|