dawn-cmake/test/tint/bug/dawn/947.wgsl.expected.msl
James Price 35f0fcaac0 tint/uniformity: Use non-recursive graph traversal
Fixes a stack overflow when traversing particularly deep graphs.

This changes the iteration order which changes some of the diagnostic
notes, but the diagnostics are still correct and deterministic so it
does not matter.

Fixed: chromium:47418
Change-Id: I2def633b6d96d1525027f7929b0fa0a6fba0efeb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/90140
Auto-Submit: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
2022-05-16 11:53:25 +00:00

91 lines
3.1 KiB
Plaintext

bug/dawn/947.wgsl:59:20 warning: 'textureSample' must only be called from uniform control flow
var srcColor = textureSample(myTexture, mySampler, texcoord);
^^^^^^^^^^^^^
bug/dawn/947.wgsl:55:5 note: control flow depends on non-uniform value
if (!all(clampedTexcoord == texcoord)) {
^^
bug/dawn/947.wgsl:55:33 note: reading from user-defined input 'texcoord' may result in a non-uniform value
if (!all(clampedTexcoord == texcoord)) {
^^^^^^^^
#include <metal_stdlib>
using namespace metal;
struct Uniforms {
/* 0x0000 */ float2 u_scale;
/* 0x0008 */ float2 u_offset;
};
struct VertexOutputs {
float2 texcoords;
float4 position;
};
struct tint_symbol {
float2 texcoords [[user(locn0)]];
float4 position [[position]];
};
struct tint_array_wrapper {
float2 arr[3];
};
VertexOutputs vs_main_inner(uint VertexIndex, const constant Uniforms* const tint_symbol_5) {
tint_array_wrapper texcoord = {.arr={float2(-0.5f, 0.0f), float2(1.5f, 0.0f), float2(0.5f, 2.0f)}};
VertexOutputs output = {};
output.position = float4(((texcoord.arr[VertexIndex] * 2.0f) - float2(1.0f, 1.0f)), 0.0f, 1.0f);
bool flipY = ((*(tint_symbol_5)).u_scale[1] < 0.0f);
if (flipY) {
output.texcoords = ((((texcoord.arr[VertexIndex] * (*(tint_symbol_5)).u_scale) + (*(tint_symbol_5)).u_offset) * float2(1.0f, -1.0f)) + float2(0.0f, 1.0f));
} else {
output.texcoords = ((((texcoord.arr[VertexIndex] * float2(1.0f, -1.0f)) + float2(0.0f, 1.0f)) * (*(tint_symbol_5)).u_scale) + (*(tint_symbol_5)).u_offset);
}
return output;
}
vertex tint_symbol vs_main(const constant Uniforms* tint_symbol_6 [[buffer(0)]], uint VertexIndex [[vertex_id]]) {
VertexOutputs const inner_result = vs_main_inner(VertexIndex, tint_symbol_6);
tint_symbol wrapper_result = {};
wrapper_result.texcoords = inner_result.texcoords;
wrapper_result.position = inner_result.position;
return wrapper_result;
}
struct tint_symbol_2 {
float2 texcoord [[user(locn0)]];
};
struct tint_symbol_3 {
float4 value [[color(0)]];
};
float4 fs_main_inner(float2 texcoord, thread bool* const tint_symbol_7, texture2d<float, access::sample> tint_symbol_8, sampler tint_symbol_9) {
float2 clampedTexcoord = clamp(texcoord, float2(0.0f, 0.0f), float2(1.0f, 1.0f));
if (!(all((clampedTexcoord == texcoord)))) {
*(tint_symbol_7) = true;
return float4();
}
float4 srcColor = tint_symbol_8.sample(tint_symbol_9, texcoord);
return srcColor;
}
void tint_discard_func() {
discard_fragment();
}
fragment tint_symbol_3 fs_main(texture2d<float, access::sample> tint_symbol_11 [[texture(0)]], sampler tint_symbol_12 [[sampler(0)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
thread bool tint_symbol_10 = false;
float4 const inner_result_1 = fs_main_inner(tint_symbol_1.texcoord, &(tint_symbol_10), tint_symbol_11, tint_symbol_12);
if (tint_symbol_10) {
tint_discard_func();
tint_symbol_3 const tint_symbol_4 = {};
return tint_symbol_4;
}
tint_symbol_3 wrapper_result_1 = {};
wrapper_result_1.value = inner_result_1;
return wrapper_result_1;
}