dawn-cmake/test/tint/bug/tint/1081.wgsl.expected.hlsl
Antonio Maiorano 66d6668372 Implement discard semantics
Implement new transform UnwindDiscardFunctions that replaces discard
statements with setting a module-level bool, adds a check and return for
this bool after every function call that may discard, and finally
invokes a single function that executes a discard from top-level
functions.

Regenerated tests and remove HLSL ones that used to fail FXC because it
had difficulty with discard.

Bug: tint:1478
Bug: chromium:1118
Change-Id: I09d680f59e2d5d0cad907bfbbdd426aae76d4bf3
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/84221
Reviewed-by: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
2022-03-28 20:51:32 +00:00

47 lines
831 B
HLSL

static bool tint_discard = false;
int f(int x) {
if ((x == 10)) {
tint_discard = true;
return 0;
}
return x;
}
struct tint_symbol_1 {
nointerpolation int3 x : TEXCOORD1;
};
struct tint_symbol_2 {
int value : SV_Target2;
};
int main_inner(int3 x) {
int y = x.x;
[loop] while (true) {
const int r = f(y);
if (tint_discard) {
return 0;
}
if ((r == 0)) {
break;
}
}
return y;
}
void tint_discard_func() {
discard;
}
tint_symbol_2 main(tint_symbol_1 tint_symbol) {
const int inner_result = main_inner(tint_symbol.x);
if (tint_discard) {
tint_discard_func();
const tint_symbol_2 tint_symbol_3 = (tint_symbol_2)0;
return tint_symbol_3;
}
tint_symbol_2 wrapper_result = (tint_symbol_2)0;
wrapper_result.value = inner_result;
return wrapper_result;
}