mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-05 06:03:34 +00:00
FXC fails to compile code that assigns to dynamically-indexed fixed-size arrays in structs on internal shader variables with: error X3500: array reference cannot be used as an l-value; not natively addressable This CL detects this case, and transforms such assignments into copying out the array to a local variable, assigning to that local, and then copying the array back. Also manually regenerate SKIPs for HLSL/FXC after this change, which fixes 30 tests. Also exposes some "compilation aborted unexpectedly" now that "array reference cannot be used as an l-value" has been fixed. For tests that fail for both DXC and FXC, updating SKIPs to the DXC one to help distinguish actual FXC bugs from valid errors. Bug: tint:998 Bug: tint:1206 Change-Id: I09204d8d81ab27d1c257538ad702414ccc386543 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/71620 Reviewed-by: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Antonio Maiorano <amaiorano@google.com>
54 lines
1.2 KiB
HLSL
Executable File
54 lines
1.2 KiB
HLSL
Executable File
SKIP: FAILED
|
|
|
|
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
cbuffer cbuffer_x_6 : register(b0, space0) {
|
|
uint4 x_6[1];
|
|
};
|
|
|
|
void main_1() {
|
|
int GLF_dead6index = 0;
|
|
int GLF_dead6currentNode = 0;
|
|
int donor_replacementGLF_dead6tree[1] = (int[1])0;
|
|
x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
|
|
GLF_dead6index = 0;
|
|
const float x_34 = asfloat(x_6[0].y);
|
|
if ((x_34 < 0.0f)) {
|
|
[loop] while (true) {
|
|
if (true) {
|
|
} else {
|
|
break;
|
|
}
|
|
const int x_10 = donor_replacementGLF_dead6tree[GLF_dead6index];
|
|
GLF_dead6currentNode = x_10;
|
|
GLF_dead6index = GLF_dead6currentNode;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
struct main_out {
|
|
float4 x_GLF_color_1;
|
|
};
|
|
struct tint_symbol {
|
|
float4 x_GLF_color_1 : SV_Target0;
|
|
};
|
|
|
|
main_out main_inner() {
|
|
main_1();
|
|
const main_out tint_symbol_2 = {x_GLF_color};
|
|
return tint_symbol_2;
|
|
}
|
|
|
|
tint_symbol main() {
|
|
const main_out inner_result = main_inner();
|
|
tint_symbol wrapper_result = (tint_symbol)0;
|
|
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
|
|
return wrapper_result;
|
|
}
|
|
error: validation errors
|
|
|
|
C:\src\temp\u11r8.0:40: error: Loop must have break.
|
|
Validation failed.
|
|
|
|
|
|
|