//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -cpu -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -wgpu -shaderobj -output-using-type -render-features half //TEST:SIMPLE(filecheck=CHECK): -target glsl // CHECK-NOT: NullDifferential //TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer RWStructuredBuffer outputBuffer; struct S { T v; __init(T x) { v = x; } } S makeS(T x) { return S(x); } bool cmp(T a, int b) { return a > T(b); } void accept(expand each T value) {} T writeSingle(inout int offset, T value) { outputBuffer[offset++] = __realCast(value); return value; } void write(expand S value) { int offset = 0; accept(expand writeSingle(offset, cmp((each value).v, 0) ? (each value).v : __realCast(0.0))); } [numthreads(1,1,1)] void computeMain() { // CHECK: 1.0 // CHECK: 2.0 // CHECK: 3.0 // CHECK: 4.0 write(); write(makeS(1.0), makeS(2.0h), makeS(3.0), makeS(4.0)); }