Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2020-10-14 16:51:49 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2020-10-27 14:07:09 +0300
commite47561a28b388361b71f71b3c33dae2da9505f28 (patch)
treedf17a5feccc0a83c524a8400872931bb9a16b0b5 /shaders
parent5ae9153a782698e26a39660cb4fcb02ac424c859 (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.frag44
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;
+}