mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-12 16:15:55 +00:00
Emit the "[loop]" attribute on "for" and "while" so that FXC does not attempt to unroll them. This is to work around an FXC bug where it fails to unroll loops with gradient operations. FXC ostensibly unrolls such loops because gradient operations require uniform control flow, and loops that have varying iterations may possibly not be uniform. Tint will eventually validate that control flow is indeed uniform, so forcing FXC to avoid unrolling in these cases should be fine. Bug: tint:1112 Change-Id: I10077f8b62fbbb230a0003f3864c75a8fe0e1d18 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/69880 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Ben Clayton <bclayton@google.com> Commit-Queue: Antonio Maiorano <amaiorano@google.com>
48 lines
1.4 KiB
HLSL
48 lines
1.4 KiB
HLSL
struct Inner {
|
|
int x;
|
|
};
|
|
struct tint_padded_array_element {
|
|
Inner el;
|
|
};
|
|
|
|
ByteAddressBuffer s : register(t0, space0);
|
|
|
|
float2x3 tint_symbol_6(ByteAddressBuffer buffer, uint offset) {
|
|
return float2x3(asfloat(buffer.Load3((offset + 0u))), asfloat(buffer.Load3((offset + 16u))));
|
|
}
|
|
|
|
float3x2 tint_symbol_7(ByteAddressBuffer buffer, uint offset) {
|
|
return float3x2(asfloat(buffer.Load2((offset + 0u))), asfloat(buffer.Load2((offset + 8u))), asfloat(buffer.Load2((offset + 16u))));
|
|
}
|
|
|
|
Inner tint_symbol_9(ByteAddressBuffer buffer, uint offset) {
|
|
const Inner tint_symbol_11 = {asint(buffer.Load((offset + 0u)))};
|
|
return tint_symbol_11;
|
|
}
|
|
|
|
typedef tint_padded_array_element tint_symbol_10_ret[4];
|
|
tint_symbol_10_ret tint_symbol_10(ByteAddressBuffer buffer, uint offset) {
|
|
tint_padded_array_element arr[4] = (tint_padded_array_element[4])0;
|
|
{
|
|
[loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
|
|
arr[i_1].el = tint_symbol_9(buffer, (offset + (i_1 * 16u)));
|
|
}
|
|
}
|
|
return arr;
|
|
}
|
|
|
|
[numthreads(1, 1, 1)]
|
|
void main() {
|
|
const int3 a = asint(s.Load3(0u));
|
|
const int b = asint(s.Load(12u));
|
|
const uint3 c = s.Load3(16u);
|
|
const uint d = s.Load(28u);
|
|
const float3 e = asfloat(s.Load3(32u));
|
|
const float f = asfloat(s.Load(44u));
|
|
const float2x3 g = tint_symbol_6(s, 48u);
|
|
const float3x2 h = tint_symbol_7(s, 80u);
|
|
const Inner i = tint_symbol_9(s, 104u);
|
|
const tint_padded_array_element j[4] = tint_symbol_10(s, 108u);
|
|
return;
|
|
}
|