diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2020-10-14 16:51:49 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2020-10-27 14:07:09 +0300 |
commit | e47561a28b388361b71f71b3c33dae2da9505f28 (patch) | |
tree | df17a5feccc0a83c524a8400872931bb9a16b0b5 /shaders | |
parent | 5ae9153a782698e26a39660cb4fcb02ac424c859 (diff) |
GLSL: Support a workaround for loading row-major matrices.
On AMD Windows OpenGL, it has been reported that we need to load
matrices via a wrapper function.
Diffstat (limited to 'shaders')
-rw-r--r-- | shaders/frag/ubo-load-row-major-workaround.frag | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/shaders/frag/ubo-load-row-major-workaround.frag b/shaders/frag/ubo-load-row-major-workaround.frag new file mode 100644 index 00000000..03205ee8 --- /dev/null +++ b/shaders/frag/ubo-load-row-major-workaround.frag @@ -0,0 +1,44 @@ +#version 450 + +struct RowMajor +{ + mat4 B; +}; + +struct NestedRowMajor +{ + RowMajor rm; +}; + +layout(set = 0, binding = 0, row_major) uniform UBO +{ + mat4 A; + layout(column_major) mat4 C; // This should also be worked around. +}; + + +layout(set = 0, binding = 1, row_major) uniform UBO2 +{ + RowMajor rm; +}; + +layout(set = 0, binding = 2, row_major) uniform UBO3 +{ + NestedRowMajor rm2; +}; + +layout(set = 0, binding = 3) uniform UBONoWorkaround +{ + mat4 D; +}; + +layout(location = 0) in vec4 Clip; +layout(location = 0) out vec4 FragColor; + +void main() +{ + NestedRowMajor rm2_loaded = rm2; + FragColor = rm2_loaded.rm.B * rm.B * A * C * Clip; + FragColor += D * Clip; + FragColor += A[1] * Clip; +} |