mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-08-06 04:05:40 +00:00
When building a vector via tint::writer::AppendVector, and the vector argument is already a vector constructor, expand that vector constructor into its components only when those components are all scalars. This avoids a type breakage which can occur with cases like this: vector argument is: vec2<i32>(vec2<u32>(0u,1u)) scalar argument is: 2 Before this fix, the result was: vec2<i32>(0u, 1u, 2); But should be this instead: vec3<i32>(vec2<u32>(0u,1u),2) This was noticed in SPIR-V writer output when forming a coordinate vector from a an unsigned WGSL coordinate vector with a signed array vector. Fixed: tint:1048 Change-Id: Id46665739cc23da0ca58b9baabf7b4531b86350b Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/60040 Auto-Submit: David Neto <dneto@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: David Neto <dneto@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
25 lines
749 B
HLSL
25 lines
749 B
HLSL
cbuffer cbuffer_constants : register(b0, space0) {
|
|
uint4 constants[1];
|
|
};
|
|
Texture2DArray<float4> myTexture : register(t1, space0);
|
|
|
|
RWByteAddressBuffer result : register(u3, space0);
|
|
|
|
struct tint_symbol_1 {
|
|
uint3 GlobalInvocationID : SV_DispatchThreadID;
|
|
};
|
|
|
|
[numthreads(1, 1, 1)]
|
|
void main(tint_symbol_1 tint_symbol) {
|
|
const uint3 GlobalInvocationID = tint_symbol.GlobalInvocationID;
|
|
uint flatIndex = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
|
|
flatIndex = (flatIndex * 1u);
|
|
float4 texel = myTexture.Load(int4(int3(int2(GlobalInvocationID.xy), 0), 0));
|
|
{
|
|
for(uint i = 0u; (i < 1u); i = (i + 1u)) {
|
|
result.Store((4u * (flatIndex + i)), asuint(texel.r));
|
|
}
|
|
}
|
|
return;
|
|
}
|