mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-14 00:56:05 +00:00
Update validation error for invalid uniform array element alignment. Update tests to either remove the @stride attribute or use a different element type. Bug: tint:1381 Change-Id: I50b52cd78a34d9cd162fa5f2171a5fd35dcf3b79 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/77560 Reviewed-by: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com>
49 lines
1.7 KiB
WebGPU Shading Language
49 lines
1.7 KiB
WebGPU Shading Language
struct Uniforms {
|
|
dstTextureFlipY : u32;
|
|
isFloat16 : u32;
|
|
isRGB10A2Unorm : u32;
|
|
channelCount : u32;
|
|
};
|
|
struct OutputBuf {
|
|
result : array<u32>;
|
|
};
|
|
@group(0) @binding(0) var src : texture_2d<f32>;
|
|
@group(0) @binding(1) var dst : texture_2d<f32>;
|
|
@group(0) @binding(2) var<storage_buffer, read_write> output : OutputBuf;
|
|
@group(0) @binding(3) var<uniform> uniforms : Uniforms;
|
|
//@builtin(global_invocation_id) var<in> GlobalInvocationID : vec3<u32>;
|
|
// Fp16 logic
|
|
// Infinity and NaN won't happen in this test case.
|
|
fn ConvertToFp16FloatValue(fp32 : f32) -> u32 {
|
|
return 1u;
|
|
}
|
|
|
|
@stage(compute) @workgroup_size(1, 1, 1)
|
|
fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
|
|
var size : vec2<i32> = textureDimensions(src);
|
|
var dstTexCoord : vec2<i32> = vec2<i32>(GlobalInvocationID.xy);
|
|
var srcTexCoord : vec2<i32> = dstTexCoord;
|
|
if (uniforms.dstTextureFlipY == 1u) {
|
|
srcTexCoord.y = size.y - dstTexCoord.y - 1;
|
|
}
|
|
|
|
var srcColor : vec4<f32> = textureLoad(src, srcTexCoord, 0);
|
|
var dstColor : vec4<f32> = textureLoad(dst, dstTexCoord, 0);
|
|
var success : bool = true;
|
|
|
|
var srcColorBits : vec4<u32>;
|
|
var dstColorBits : vec4<u32> = vec4<u32>(dstColor);
|
|
|
|
for (var i : u32 = 0u; i < uniforms.channelCount; i = i + 1u) {
|
|
srcColorBits[i] = ConvertToFp16FloatValue(srcColor[i]);
|
|
success = success && (srcColorBits[i] == dstColorBits[i]);
|
|
}
|
|
|
|
var outputIndex : u32 = GlobalInvocationID.y * u32(size.x) + GlobalInvocationID.x;
|
|
if (success) {
|
|
output.result[outputIndex] = u32(1);
|
|
} else {
|
|
output.result[outputIndex] = u32(0);
|
|
}
|
|
}
|