f10eff363b
A global variable should be considered "dead" if it's never written and never read. The previous code checked if it was never written OR never read, which is not the same. This would generate GLSL/Metal that didn't compile. In SPIR-V, it would SkASSERT, then crash, during codegen. The fuzzer was able to detect the SPIR-V issue, but it was wrong in all three cases. Change-Id: Id59a2499eb5baa3839b93826bfbc24191bfd490b Bug: oss-fuzz:32005 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/385280 Commit-Queue: John Stiles <johnstiles@google.com> Commit-Queue: Brian Osman <brianosman@google.com> Auto-Submit: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
48 lines
1.7 KiB
Plaintext
48 lines
1.7 KiB
Plaintext
uniform half4 colorGreen;
|
|
|
|
struct S {
|
|
float f;
|
|
float af[5];
|
|
half4 h4;
|
|
half4 ah4[5];
|
|
};
|
|
|
|
half4 globalVar;
|
|
S globalStruct;
|
|
|
|
half4 main() {
|
|
/* assign to scalar */ int i; i = 0;
|
|
/* assign to vector */ int4 i4; i4 = int4(1,2,3,4);
|
|
/* assign to matrix */ float3x3 f3x3; f3x3 = float3x3(1,2,3,4,5,6,7,8,9);
|
|
/* assign to swizzle */ half4 x; x.w = 0; x.yx = half2(0);
|
|
/* assign to array of scalar */ int ai[1]; ai[0] = 0;
|
|
/* assign to array of vector */ int4 ai4[1]; ai4[0] = int4(1,2,3,4);
|
|
/* assign to array of matrix */ half3x3 ah2x4[1]; ah2x4[0] = half3x3(1,2,3,4,5,6,7,8,9);
|
|
/* assign to array swizzle */ float4 af4[1]; af4[0].x = 0; af4[0].ywxz = float4(1);
|
|
|
|
/* assign to struct variable */ S s; s.f = 0;
|
|
/* assign to struct array */ s.af[1] = 0;
|
|
/* assign to struct swizzle */ s.h4.zxy = half3(9);
|
|
/* assign to struct array swizzle */ s.ah4[2].yw = half2(5);
|
|
|
|
/* assign to global var */ globalVar = half4(0);
|
|
/* assign to global struct */ globalStruct.f = 0;
|
|
|
|
// Not allowed in ES2
|
|
// /* assign to array idx by lookup */ ai[0] = 0; ai[ai[0]] = 0;
|
|
|
|
// Not allowed natively in GLSL, but SkSL will turn these into valid GLSL expressions.
|
|
/* assign to folded ternary */ half l, r; (true ? l : r) = 0;
|
|
/* assign to unary plus */ +ai[0] += +ai4[0][0];
|
|
/* assign to struct unary plus */ +s.f = 1; +s.af[0] = 2;
|
|
+s.h4 = half4(1); +s.ah4[0] = half4(2);
|
|
|
|
// Keep these variables alive
|
|
af4[0] *= float(ah2x4[0][0][0]);
|
|
i4.y *= i;
|
|
x.y *= l;
|
|
s.f *= l;
|
|
|
|
return colorGreen;
|
|
}
|