dawn-cmake/test/buffer/uniform/dynamic_index/read.wgsl.expected.hlsl
Ben Clayton 51cfe26bb7 writer/hlsl: Simplify UBO accesses for static indexing
Use the new semantic constant value information to significantly reduce the complex indexing logic emitted for UBO accesses.
This will dramatically reduce the number of `for` loops that are decayed to `while` loops.

Change-Id: I1b0adb5edde2b4ed39c6beafc2e28106b86e0edd
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57701
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
2021-07-13 12:18:13 +00:00

39 lines
1.6 KiB
HLSL

float2x3 tint_symbol_9(uint4 buffer[96], uint offset) {
const uint scalar_offset = ((offset + 0u)) / 4;
const uint scalar_offset_1 = ((offset + 16u)) / 4;
return float2x3(asfloat(buffer[scalar_offset / 4].xyz), asfloat(buffer[scalar_offset_1 / 4].xyz));
}
cbuffer cbuffer_s : register(b0, space0) {
uint4 s[96];
};
struct tint_symbol_1 {
uint idx : SV_GroupIndex;
};
[numthreads(1, 1, 1)]
void main(tint_symbol_1 tint_symbol) {
const uint idx = tint_symbol.idx;
const uint scalar_offset_2 = ((192u * idx)) / 4;
const int3 a = asint(s[scalar_offset_2 / 4].xyz);
const uint scalar_offset_3 = (((192u * idx) + 12u)) / 4;
const int b = asint(s[scalar_offset_3 / 4][scalar_offset_3 % 4]);
const uint scalar_offset_4 = (((192u * idx) + 16u)) / 4;
const uint3 c = s[scalar_offset_4 / 4].xyz;
const uint scalar_offset_5 = (((192u * idx) + 28u)) / 4;
const uint d = s[scalar_offset_5 / 4][scalar_offset_5 % 4];
const uint scalar_offset_6 = (((192u * idx) + 32u)) / 4;
const float3 e = asfloat(s[scalar_offset_6 / 4].xyz);
const uint scalar_offset_7 = (((192u * idx) + 44u)) / 4;
const float f = asfloat(s[scalar_offset_7 / 4][scalar_offset_7 % 4]);
const uint scalar_offset_8 = (((192u * idx) + 48u)) / 4;
uint4 ubo_load = s[scalar_offset_8 / 4];
const int2 g = asint(((scalar_offset_8 & 2) ? ubo_load.zw : ubo_load.xy));
const uint scalar_offset_9 = (((192u * idx) + 56u)) / 4;
uint4 ubo_load_1 = s[scalar_offset_9 / 4];
const int2 h = asint(((scalar_offset_9 & 2) ? ubo_load_1.zw : ubo_load_1.xy));
const float2x3 i = tint_symbol_9(s, ((192u * idx) + 64u));
return;
}