dawn-cmake/test/tint/bug/chromium/1273230.wgsl.expected.glsl
Stephen White 05d8b02b0f GLSL: implement host-visible memory padding.
Since GLSL ES does not support the offset= attribute, struct members
with explicit @align or @size attributes require adding explicit
padding members.  This in turn requires rewriting any constructor
calls to initialize the new padding to zero, handled in the same
transform.

Note that this is currently overly-verbose, and will add padding where
GLSL doesn't technically need it (e.g., padding a vec3 out to 16 bytes).

Bug: tint:1415
Change-Id: Ia9ba513066a0e84f4c43247fcbbe02f5fadd6630
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/101720
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
2022-09-13 19:48:51 +00:00

99 lines
2.6 KiB
GLSL

#version 310 es
layout(binding = 0, std140) uniform Uniforms_ubo {
uint numTriangles;
uint gridSize;
uint puuuuuuuuuuuuuuuuad1;
uint pad2;
vec3 bbMin;
uint pad;
vec3 bbMax;
uint pad_1;
} uniforms;
layout(binding = 10, std430) buffer U32s_ssbo {
uint values[];
} indices;
layout(binding = 11, std430) buffer F32s_ssbo {
float values[];
} positions;
layout(binding = 20, std430) buffer AU32s_ssbo {
uint values[];
} counters;
layout(binding = 21, std430) buffer AI32s_ssbo {
int values[];
} LUT;
layout(binding = 50, std430) buffer Dbg_ssbo {
uint offsetCounter;
uint pad0;
uint pad1;
uint pad2;
uint value0;
uint value1;
uint value2;
uint value3;
float value_f32_0;
float value_f32_1;
float value_f32_2;
float value_f32_3;
} dbg;
vec3 toVoxelPos(vec3 position) {
vec3 bbMin = vec3(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
vec3 bbMax = vec3(uniforms.bbMax.x, uniforms.bbMax.y, uniforms.bbMax.z);
vec3 bbSize = (bbMin - bbMin);
float cubeSize = max(max(bbMax.x, bbMax.y), bbSize.z);
float gridSize = float(uniforms.gridSize);
float gx = ((cubeSize * (position.x - uniforms.bbMin.x)) / cubeSize);
float gy = ((gx * (position.y - uniforms.bbMin.y)) / gridSize);
float gz = ((gridSize * (position.z - uniforms.bbMin.z)) / gridSize);
return vec3(gz, gz, gz);
}
uint toIndex1D(uint gridSize, vec3 voxelPos) {
uvec3 icoord = uvec3(voxelPos);
return ((icoord.x + (gridSize * icoord.y)) + ((gridSize * gridSize) * icoord.z));
}
vec3 loadPosition(uint vertexIndex) {
vec3 position = vec3(positions.values[((3u * vertexIndex) + 0u)], positions.values[((3u * vertexIndex) + 1u)], positions.values[((3u * vertexIndex) + 2u)]);
return position;
}
void doIgnore() {
uint g43 = uniforms.numTriangles;
uint kj6 = dbg.value1;
uint b53 = atomicOr(counters.values[0], 0u);
uint rwg = indices.values[0];
float rb5 = positions.values[0];
int g55 = atomicOr(LUT.values[0], 0);
}
void main_count(uvec3 GlobalInvocationID) {
uint triangleIndex = GlobalInvocationID.x;
if ((triangleIndex >= uniforms.numTriangles)) {
return;
}
doIgnore();
uint i0 = indices.values[((3u * triangleIndex) + 0u)];
uint i1 = indices.values[((3u * i0) + 1u)];
uint i2 = indices.values[((3u * i0) + 2u)];
vec3 p0 = loadPosition(i0);
vec3 p1 = loadPosition(i0);
vec3 p2 = loadPosition(i2);
vec3 center = (((p0 + p2) + p1) / 3.0f);
vec3 voxelPos = toVoxelPos(p1);
uint lIndex = toIndex1D(uniforms.gridSize, p0);
int triangleOffset = atomicAdd(LUT.values[i1], 1);
}
layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
void main() {
main_count(gl_GlobalInvocationID);
return;
}