Add helper uniforms to Runtime Effect tests.
This lets us use descriptive names like `colorRed` and `colorGreen` instead of `half4(1,0,0,1)` and `half4(0,1,0,1)`. It also lets us use actual unknown values instead of synthesizing sorta-kinda-unknowns by calling sqrt. Change-Id: I61481c33b7ff42182955777b05cfa5fcc13e0efc Reviewed-on: https://skia-review.googlesource.com/c/skia/+/359567 Reviewed-by: Ethan Nicholas <ethannicholas@google.com> Commit-Queue: John Stiles <johnstiles@google.com> Auto-Submit: John Stiles <johnstiles@google.com>
This commit is contained in:
parent
d8fc95dc02
commit
b41d5bb3a7
@ -1,3 +1,5 @@
|
||||
uniform half4 colorRed, colorGreen;
|
||||
|
||||
bool test() {
|
||||
bool a = 1 == 1 || 2 == 8;
|
||||
bool b = 1 > 1 || 2 == 8;
|
||||
@ -14,6 +16,6 @@ bool test() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test() ? colorGreen : colorRed;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
uniform half4 colorRed, colorGreen;
|
||||
|
||||
bool test() {
|
||||
bool ok = true;
|
||||
half x = 32.0 + 2.0;
|
||||
@ -74,5 +76,5 @@ bool test() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test() ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
uniform half4 colorRed, colorGreen;
|
||||
uniform half unknownInput;
|
||||
|
||||
bool test() {
|
||||
int unknown = int(sqrt(1));
|
||||
int unknown = int(unknownInput);
|
||||
|
||||
bool ok = true;
|
||||
int x = 32 + 2;
|
||||
@ -72,5 +75,5 @@ bool test() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test() ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
uniform half4 colorRed, colorGreen;
|
||||
|
||||
bool test() {
|
||||
bool ok = true;
|
||||
int x = 12 | 6;
|
||||
@ -16,5 +18,5 @@ bool test() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test() ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
uniform half4 colorRed, colorGreen;
|
||||
|
||||
bool test() {
|
||||
bool ok = true;
|
||||
ok = ok && (float2x2(float2(1.0, 0.0), float2(0.0, 1.0)) ==
|
||||
@ -23,5 +25,5 @@ bool test() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test() ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
uniform half4 colorRed, colorGreen;
|
||||
|
||||
bool test() {
|
||||
bool ok = true;
|
||||
ok = ok && (float3x2(2) == float3x2(float2(2.0, 0.0), float2(0.0, 2.0), float2(0.0)));
|
||||
@ -5,5 +7,5 @@ bool test() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test() ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
uniform half4 colorRed, colorGreen;
|
||||
uniform half unknownInput;
|
||||
|
||||
bool test() {
|
||||
bool expr = sqrt(1) > 0;
|
||||
bool expr = unknownInput > 0;
|
||||
|
||||
int ok = 0, bad = 0;
|
||||
|
||||
@ -40,5 +43,5 @@ bool test() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test() ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -1,3 +1,6 @@
|
||||
uniform half4 colorRed, colorGreen;
|
||||
uniform half unknownInput;
|
||||
|
||||
bool test_half() {
|
||||
bool ok = true;
|
||||
|
||||
@ -36,7 +39,7 @@ bool test_half() {
|
||||
ok = ok && (x == half4(6));
|
||||
|
||||
// Vector op unknown scalar
|
||||
half unknown = half(sqrt(2));
|
||||
half unknown = unknownInput;
|
||||
x = half4(0) + unknown;
|
||||
ok = ok && (x == half4(unknown));
|
||||
x = half4(0) * unknown;
|
||||
@ -117,7 +120,7 @@ bool test_int() {
|
||||
ok = ok && (x == int4(6));
|
||||
|
||||
// Vector op unknown scalar
|
||||
int unknown = int(sqrt(2));
|
||||
int unknown = int(unknownInput);
|
||||
x = int4(0) + unknown;
|
||||
ok = ok && (x == int4(unknown));
|
||||
x = int4(0) * unknown;
|
||||
@ -161,5 +164,5 @@ bool test_int() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test_half() && test_int() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test_half() && test_int() ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
uniform half unknownInput;
|
||||
uniform half4 colorRed, colorGreen;
|
||||
|
||||
bool test_half() {
|
||||
half unknown = half(sqrt(1));
|
||||
half unknown = unknownInput;
|
||||
|
||||
bool ok = true;
|
||||
ok = ok && (half4(half2(1), half2(2, 3)) + half4(5, 6, 7, 8)) == half4(6, 7, 9, 11);
|
||||
@ -54,7 +57,7 @@ bool test_half() {
|
||||
}
|
||||
|
||||
bool test_int() {
|
||||
int unknown = int(sqrt(1));
|
||||
int unknown = int(unknownInput);
|
||||
|
||||
bool ok = true;
|
||||
ok = ok && (int4(int2(1), int2(2, 3)) + int4(5, 6, 7, 8)) == int4(6, 7, 9, 11);
|
||||
@ -109,5 +112,5 @@ bool test_int() {
|
||||
}
|
||||
|
||||
half4 main() {
|
||||
return test_half() && test_int() ? half4(0,1,0,1) : half4(1,0,0,1);
|
||||
return test_half() && test_int() ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
uniform half4 colorWhite;
|
||||
|
||||
half4 main() {
|
||||
half4 x = half4(1, 1, 1, 1);
|
||||
half4 x = colorWhite;
|
||||
|
||||
// Verify that break is allowed in a for loop.
|
||||
for (half r = -5; r < 5; r += 1) {
|
||||
|
@ -1476,7 +1476,7 @@ bool MetalCodeGenerator::writeFunctionDeclaration(const FunctionDeclaration& f)
|
||||
if (var.var().type().typeKind() == Type::TypeKind::kSampler) {
|
||||
if (var.var().modifiers().fLayout.fBinding < 0) {
|
||||
fErrors.error(decls.fOffset,
|
||||
"Metal samplers must have 'layout(binding=...)'");
|
||||
"Metal samplers must have 'layout(binding=...)'");
|
||||
return false;
|
||||
}
|
||||
if (var.var().type().dimensions() != SpvDim2D) {
|
||||
|
@ -24,6 +24,14 @@
|
||||
|
||||
static const SkRect kRect = SkRect::MakeWH(1, 1);
|
||||
|
||||
template <typename T>
|
||||
static void set_uniform(SkRuntimeShaderBuilder* builder, const char* name, const T& value) {
|
||||
SkRuntimeShaderBuilder::BuilderUniform uniform = builder->uniform(name);
|
||||
if (uniform.fVar) {
|
||||
uniform = value;
|
||||
}
|
||||
}
|
||||
|
||||
static void test(skiatest::Reporter* r, SkSurface* surface, const char* testFile) {
|
||||
SkString resourcePath = SkStringPrintf("sksl/%s", testFile);
|
||||
sk_sp<SkData> shaderData = GetResourceAsData(resourcePath.c_str());
|
||||
@ -40,6 +48,13 @@ static void test(skiatest::Reporter* r, SkSurface* surface, const char* testFile
|
||||
}
|
||||
|
||||
SkRuntimeShaderBuilder builder(effect);
|
||||
set_uniform(&builder, "colorBlack", SkV4{0, 0, 0, 1});
|
||||
set_uniform(&builder, "colorRed", SkV4{1, 0, 0, 1});
|
||||
set_uniform(&builder, "colorGreen", SkV4{0, 1, 0, 1});
|
||||
set_uniform(&builder, "colorBlue", SkV4{0, 0, 1, 1});
|
||||
set_uniform(&builder, "colorWhite", SkV4{1, 1, 1, 1});
|
||||
set_uniform(&builder, "unknownInput", 1.0f);
|
||||
|
||||
sk_sp<SkShader> shader = builder.makeShader(/*localMatrix=*/nullptr, /*isOpaque=*/true);
|
||||
if (!shader) {
|
||||
ERRORF(r, "%s: Unable to build shader", testFile);
|
||||
|
@ -1,5 +1,7 @@
|
||||
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
return vec4(0.0, 1.0, 0.0, 1.0);
|
||||
return colorGreen;
|
||||
|
||||
}
|
||||
|
@ -1,4 +1,6 @@
|
||||
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
bool _1_ok = true;
|
||||
float _2_x = 34.0;
|
||||
@ -66,6 +68,6 @@ vec4 main() {
|
||||
_1_ok = _1_ok && _2_x == -2.0;
|
||||
_2_x /= 2.0;
|
||||
_1_ok = _1_ok && _2_x == -1.0;
|
||||
return _1_ok ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
|
||||
return _1_ok ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
uniform float unknownInput;
|
||||
vec4 main() {
|
||||
int _1_unknown = int(sqrt(1.0));
|
||||
int _1_unknown = int(unknownInput);
|
||||
bool _2_ok = true;
|
||||
int _3_x = 34;
|
||||
_2_ok = true;
|
||||
@ -64,6 +67,6 @@ vec4 main() {
|
||||
_2_ok = _2_ok && _3_x == -2;
|
||||
_3_x /= 2;
|
||||
_2_ok = _2_ok && _3_x == -1;
|
||||
return _2_ok ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
|
||||
return _2_ok ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
return vec4(0.0, 1.0, 0.0, 1.0);
|
||||
return colorGreen;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
return vec4(0.0, 1.0, 0.0, 1.0);
|
||||
return colorGreen;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
return vec4(0.0, 1.0, 0.0, 1.0);
|
||||
return colorGreen;
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
uniform float unknownInput;
|
||||
vec4 main() {
|
||||
bool _1_expr = sqrt(1.0) > 0.0;
|
||||
bool _1_expr = unknownInput > 0.0;
|
||||
int _2_ok = 0;
|
||||
int _3_bad = 0;
|
||||
|
||||
@ -110,6 +113,6 @@ vec4 main() {
|
||||
} else {
|
||||
++_3_bad;
|
||||
}
|
||||
return _2_ok == 22 && _3_bad == 0 ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
|
||||
return _2_ok == 22 && _3_bad == 0 ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -1,4 +1,7 @@
|
||||
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
uniform float unknownInput;
|
||||
bool test_int() {
|
||||
bool ok = true;
|
||||
ivec4 x = ivec4(6, 6, 7, 8);
|
||||
@ -27,7 +30,7 @@ bool test_int() {
|
||||
ok = ok;
|
||||
x = ivec4(6, 6, 6, 6);
|
||||
ok = ok;
|
||||
int unknown = int(sqrt(2.0));
|
||||
int unknown = int(unknownInput);
|
||||
x = ivec4(unknown);
|
||||
ok = ok && x == ivec4(unknown);
|
||||
x = ivec4(0);
|
||||
@ -90,7 +93,7 @@ vec4 main() {
|
||||
_1_ok = _1_ok;
|
||||
_2_x = vec4(6.0, 6.0, 6.0, 6.0);
|
||||
_1_ok = _1_ok;
|
||||
float _3_unknown = sqrt(2.0);
|
||||
float _3_unknown = unknownInput;
|
||||
_2_x = vec4(_3_unknown);
|
||||
_1_ok = _1_ok && _2_x == vec4(_3_unknown);
|
||||
_2_x = vec4(0.0);
|
||||
@ -123,6 +126,6 @@ vec4 main() {
|
||||
_1_ok = _1_ok && _2_x == vec4(_3_unknown);
|
||||
_2_x = vec4(_3_unknown);
|
||||
_1_ok = _1_ok && _2_x == vec4(_3_unknown);
|
||||
return _1_ok && test_int() ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
|
||||
return _1_ok && test_int() ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
|
||||
uniform float unknownInput;
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
bool test_int() {
|
||||
int unknown = int(sqrt(1.0));
|
||||
int unknown = int(unknownInput);
|
||||
bool ok = true;
|
||||
ok = true;
|
||||
ok = true;
|
||||
@ -47,7 +50,7 @@ bool test_int() {
|
||||
return ok;
|
||||
}
|
||||
vec4 main() {
|
||||
float _1_unknown = sqrt(1.0);
|
||||
float _1_unknown = unknownInput;
|
||||
bool _2_ok = true;
|
||||
_2_ok = true;
|
||||
_2_ok = true;
|
||||
@ -91,6 +94,6 @@ vec4 main() {
|
||||
_3_val *= vec4(2.0);
|
||||
_3_val /= vec4(2.0);
|
||||
_2_ok = _2_ok && _3_val == vec4(_1_unknown);
|
||||
return _2_ok && test_int() ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
|
||||
return _2_ok && test_int() ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -9,107 +9,113 @@ OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Fragment %main "main" %sk_Clockwise
|
||||
OpExecutionMode %main OriginUpperLeft
|
||||
OpName %sk_Clockwise "sk_Clockwise"
|
||||
OpName %colorWhite "colorWhite"
|
||||
OpName %main "main"
|
||||
OpName %x "x"
|
||||
OpName %r "r"
|
||||
OpName %b "b"
|
||||
OpDecorate %sk_Clockwise RelaxedPrecision
|
||||
OpDecorate %sk_Clockwise BuiltIn FrontFacing
|
||||
OpDecorate %22 RelaxedPrecision
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %30 RelaxedPrecision
|
||||
OpDecorate %36 RelaxedPrecision
|
||||
OpDecorate %colorWhite RelaxedPrecision
|
||||
OpDecorate %colorWhite DescriptorSet 0
|
||||
OpDecorate %14 RelaxedPrecision
|
||||
OpDecorate %23 RelaxedPrecision
|
||||
OpDecorate %27 RelaxedPrecision
|
||||
OpDecorate %31 RelaxedPrecision
|
||||
OpDecorate %37 RelaxedPrecision
|
||||
OpDecorate %44 RelaxedPrecision
|
||||
OpDecorate %39 RelaxedPrecision
|
||||
OpDecorate %46 RelaxedPrecision
|
||||
OpDecorate %49 RelaxedPrecision
|
||||
OpDecorate %56 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %48 RelaxedPrecision
|
||||
OpDecorate %51 RelaxedPrecision
|
||||
OpDecorate %58 RelaxedPrecision
|
||||
OpDecorate %59 RelaxedPrecision
|
||||
OpDecorate %60 RelaxedPrecision
|
||||
%bool = OpTypeBool
|
||||
%_ptr_Input_bool = OpTypePointer Input %bool
|
||||
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%8 = OpTypeFunction %v4float
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%colorWhite = OpVariable %_ptr_Uniform_v4float Uniform
|
||||
%10 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%13 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%float_n5 = OpConstant %float -5
|
||||
%float_5 = OpConstant %float 5
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_1 = OpConstant %float 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_1 = OpConstant %int 1
|
||||
%main = OpFunction %v4float None %8
|
||||
%9 = OpLabel
|
||||
%main = OpFunction %v4float None %10
|
||||
%11 = OpLabel
|
||||
%x = OpVariable %_ptr_Function_v4float Function
|
||||
%r = OpVariable %_ptr_Function_float Function
|
||||
%b = OpVariable %_ptr_Function_float Function
|
||||
OpStore %x %13
|
||||
%14 = OpLoad %v4float %colorWhite
|
||||
OpStore %x %14
|
||||
OpStore %r %float_n5
|
||||
OpBranch %17
|
||||
%17 = OpLabel
|
||||
OpLoopMerge %21 %20 None
|
||||
OpBranch %18
|
||||
%18 = OpLabel
|
||||
%22 = OpLoad %float %r
|
||||
%24 = OpFOrdLessThan %bool %22 %float_5
|
||||
OpBranchConditional %24 %19 %21
|
||||
OpLoopMerge %22 %21 None
|
||||
OpBranch %19
|
||||
%19 = OpLabel
|
||||
%26 = OpLoad %float %r
|
||||
%25 = OpExtInst %float %1 FAbs %26
|
||||
%27 = OpAccessChain %_ptr_Function_float %x %int_0
|
||||
OpStore %27 %25
|
||||
%30 = OpLoad %v4float %x
|
||||
%31 = OpCompositeExtract %float %30 0
|
||||
%33 = OpFOrdEqual %bool %31 %float_0
|
||||
OpSelectionMerge %35 None
|
||||
OpBranchConditional %33 %34 %35
|
||||
%34 = OpLabel
|
||||
OpBranch %21
|
||||
%35 = OpLabel
|
||||
OpBranch %20
|
||||
%23 = OpLoad %float %r
|
||||
%25 = OpFOrdLessThan %bool %23 %float_5
|
||||
OpBranchConditional %25 %20 %22
|
||||
%20 = OpLabel
|
||||
%36 = OpLoad %float %r
|
||||
%37 = OpFAdd %float %36 %float_1
|
||||
OpStore %r %37
|
||||
OpBranch %17
|
||||
%27 = OpLoad %float %r
|
||||
%26 = OpExtInst %float %1 FAbs %27
|
||||
%28 = OpAccessChain %_ptr_Function_float %x %int_0
|
||||
OpStore %28 %26
|
||||
%31 = OpLoad %v4float %x
|
||||
%32 = OpCompositeExtract %float %31 0
|
||||
%34 = OpFOrdEqual %bool %32 %float_0
|
||||
OpSelectionMerge %36 None
|
||||
OpBranchConditional %34 %35 %36
|
||||
%35 = OpLabel
|
||||
OpBranch %22
|
||||
%36 = OpLabel
|
||||
OpBranch %21
|
||||
%21 = OpLabel
|
||||
%37 = OpLoad %float %r
|
||||
%39 = OpFAdd %float %37 %float_1
|
||||
OpStore %r %39
|
||||
OpBranch %18
|
||||
%22 = OpLabel
|
||||
OpStore %b %float_5
|
||||
OpBranch %39
|
||||
%39 = OpLabel
|
||||
OpLoopMerge %43 %42 None
|
||||
OpBranch %40
|
||||
%40 = OpLabel
|
||||
%44 = OpLoad %float %b
|
||||
%45 = OpFOrdGreaterThanEqual %bool %44 %float_0
|
||||
OpBranchConditional %45 %41 %43
|
||||
OpBranch %41
|
||||
%41 = OpLabel
|
||||
%46 = OpLoad %float %b
|
||||
%47 = OpAccessChain %_ptr_Function_float %x %int_2
|
||||
OpStore %47 %46
|
||||
%49 = OpLoad %v4float %x
|
||||
%50 = OpCompositeExtract %float %49 3
|
||||
%51 = OpFOrdEqual %bool %50 %float_1
|
||||
OpSelectionMerge %53 None
|
||||
OpBranchConditional %51 %52 %53
|
||||
%52 = OpLabel
|
||||
OpBranch %42
|
||||
%53 = OpLabel
|
||||
%54 = OpAccessChain %_ptr_Function_float %x %int_1
|
||||
OpStore %54 %float_0
|
||||
OpLoopMerge %45 %44 None
|
||||
OpBranch %42
|
||||
%42 = OpLabel
|
||||
%56 = OpLoad %float %b
|
||||
%57 = OpFSub %float %56 %float_1
|
||||
OpStore %b %57
|
||||
OpBranch %39
|
||||
%46 = OpLoad %float %b
|
||||
%47 = OpFOrdGreaterThanEqual %bool %46 %float_0
|
||||
OpBranchConditional %47 %43 %45
|
||||
%43 = OpLabel
|
||||
%58 = OpLoad %v4float %x
|
||||
OpReturnValue %58
|
||||
%48 = OpLoad %float %b
|
||||
%49 = OpAccessChain %_ptr_Function_float %x %int_2
|
||||
OpStore %49 %48
|
||||
%51 = OpLoad %v4float %x
|
||||
%52 = OpCompositeExtract %float %51 3
|
||||
%53 = OpFOrdEqual %bool %52 %float_1
|
||||
OpSelectionMerge %55 None
|
||||
OpBranchConditional %53 %54 %55
|
||||
%54 = OpLabel
|
||||
OpBranch %44
|
||||
%55 = OpLabel
|
||||
%56 = OpAccessChain %_ptr_Function_float %x %int_1
|
||||
OpStore %56 %float_0
|
||||
OpBranch %44
|
||||
%44 = OpLabel
|
||||
%58 = OpLoad %float %b
|
||||
%59 = OpFSub %float %58 %float_1
|
||||
OpStore %b %59
|
||||
OpBranch %41
|
||||
%45 = OpLabel
|
||||
%60 = OpLoad %v4float %x
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
|
||||
1 error
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
uniform vec4 colorWhite;
|
||||
vec4 main() {
|
||||
vec4 x = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
vec4 x = colorWhite;
|
||||
for (float r = -5.0;r < 5.0; r += 1.0) {
|
||||
x.x = abs(r);
|
||||
if (x.x == 0.0) break;
|
||||
|
@ -1,15 +1,19 @@
|
||||
#include <metal_stdlib>
|
||||
#include <simd/simd.h>
|
||||
using namespace metal;
|
||||
struct Uniforms {
|
||||
float4 colorWhite;
|
||||
};
|
||||
struct Inputs {
|
||||
};
|
||||
struct Outputs {
|
||||
float4 sk_FragColor [[color(0)]];
|
||||
};
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
float4 x = float4(1.0, 1.0, 1.0, 1.0);
|
||||
float4 x = _uniforms.colorWhite;
|
||||
for (float r = -5.0;r < 5.0; r += 1.0) {
|
||||
x.x = abs(r);
|
||||
if (x.x == 0.0) break;
|
||||
|
Loading…
Reference in New Issue
Block a user