mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-05-31 11:41:35 +00:00
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>
39 lines
612 B
GLSL
39 lines
612 B
GLSL
#version 310 es
|
|
|
|
struct S {
|
|
int before;
|
|
mat4x2 m;
|
|
int after;
|
|
};
|
|
|
|
struct S_std140 {
|
|
int before;
|
|
uint pad;
|
|
vec2 m_0;
|
|
vec2 m_1;
|
|
vec2 m_2;
|
|
vec2 m_3;
|
|
int after;
|
|
uint pad_1;
|
|
};
|
|
|
|
layout(binding = 0, std140) uniform u_block_ubo {
|
|
S_std140 inner[4];
|
|
} u;
|
|
|
|
mat4x2 load_u_2_m() {
|
|
return mat4x2(u.inner[2u].m_0, u.inner[2u].m_1, u.inner[2u].m_2, u.inner[2u].m_3);
|
|
}
|
|
|
|
void f() {
|
|
mat2x4 t = transpose(load_u_2_m());
|
|
float l = length(u.inner[0u].m_1.yx);
|
|
float a = abs(u.inner[0u].m_1.yx[0u]);
|
|
}
|
|
|
|
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
|
void main() {
|
|
f();
|
|
return;
|
|
}
|