From 6736bcefa6f1bf5f72efb7622f3500515e17661c Mon Sep 17 00:00:00 2001 From: Gordon-F Date: Wed, 17 Mar 2021 15:37:18 +0300 Subject: [PATCH] [glsl-out] Explicitly set location bindings --- src/back/glsl/mod.rs | 18 ++++++++++++++++-- tests/out/quad-Fragment.glsl.snap | 4 ++-- tests/out/quad-Vertex.glsl.snap | 6 +++--- tests/out/shadow-Fragment.glsl.snap | 6 +++--- tests/out/skybox-Fragment.glsl.snap | 4 ++-- tests/out/skybox-Vertex.glsl.snap | 2 +- 6 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/back/glsl/mod.rs b/src/back/glsl/mod.rs index d9ae2848d7..25a883e90b 100644 --- a/src/back/glsl/mod.rs +++ b/src/back/glsl/mod.rs @@ -811,8 +811,22 @@ impl<'a, W: Write> Writer<'a, W> { } // Write the storage class - write!(self.out, "{} ", if output { "out" } else { "in" })?; - + if self.options.version >= Version::Embedded(310) + || self.options.version >= Version::Desktop(410) + { + if let Binding::Location(index, ..) = *binding { + write!( + self.out, + "layout(location = {}) {} ", + index, + if output { "out" } else { "in" } + )?; + } else { + write!(self.out, "{} ", if output { "out" } else { "in" })?; + } + } else { + write!(self.out, "{} ", if output { "out" } else { "in" })?; + } // Write the type // `write_type` adds no leading or trailing spaces self.write_type(ty)?; diff --git a/tests/out/quad-Fragment.glsl.snap b/tests/out/quad-Fragment.glsl.snap index 8773ca4ccf..28e2a75f1d 100644 --- a/tests/out/quad-Fragment.glsl.snap +++ b/tests/out/quad-Fragment.glsl.snap @@ -13,8 +13,8 @@ struct VertexOutput { uniform highp sampler2D _group_0_binding_0; -in vec2 _in_location_0; -out vec4 _out_location_0; +layout(location = 0) in vec2 _in_location_0; +layout(location = 0) out vec4 _out_location_0; void main() { vec2 uv2 = _in_location_0; diff --git a/tests/out/quad-Vertex.glsl.snap b/tests/out/quad-Vertex.glsl.snap index c4d67cef93..51a1aa2b03 100644 --- a/tests/out/quad-Vertex.glsl.snap +++ b/tests/out/quad-Vertex.glsl.snap @@ -11,9 +11,9 @@ struct VertexOutput { vec4 position; }; -in vec2 _in_location_0; -in vec2 _in_location_1; -out vec2 _out_location_0; +layout(location = 0) in vec2 _in_location_0; +layout(location = 1) in vec2 _in_location_1; +layout(location = 0) out vec2 _out_location_0; void main() { vec2 pos = _in_location_0; diff --git a/tests/out/shadow-Fragment.glsl.snap b/tests/out/shadow-Fragment.glsl.snap index fa07395965..ff052ae0f8 100644 --- a/tests/out/shadow-Fragment.glsl.snap +++ b/tests/out/shadow-Fragment.glsl.snap @@ -22,9 +22,9 @@ readonly buffer Lights_block_1 { uniform highp sampler2DArrayShadow _group_0_binding_2; -in vec3 _in_location_0; -in vec4 _in_location_1; -out vec4 _out_location_0; +layout(location = 0) in vec3 _in_location_0; +layout(location = 1) in vec4 _in_location_1; +layout(location = 0) out vec4 _out_location_0; float fetch_shadow(uint light_id, vec4 homogeneous_coords) { if((homogeneous_coords[3] <= 0.0)) { diff --git a/tests/out/skybox-Fragment.glsl.snap b/tests/out/skybox-Fragment.glsl.snap index e08e83c480..532203d3dc 100644 --- a/tests/out/skybox-Fragment.glsl.snap +++ b/tests/out/skybox-Fragment.glsl.snap @@ -13,8 +13,8 @@ struct VertexOutput { uniform highp samplerCube _group_0_binding_1; -in vec3 _in_location_0; -out vec4 _out_location_0; +layout(location = 0) in vec3 _in_location_0; +layout(location = 0) out vec4 _out_location_0; void main() { vec3 uv1 = _in_location_0; diff --git a/tests/out/skybox-Vertex.glsl.snap b/tests/out/skybox-Vertex.glsl.snap index 4b71a76fad..3f7c221d58 100644 --- a/tests/out/skybox-Vertex.glsl.snap +++ b/tests/out/skybox-Vertex.glsl.snap @@ -16,7 +16,7 @@ uniform Data_block_0 { mat4x4 view; } _group_0_binding_0; -out vec3 _out_location_0; +layout(location = 0) out vec3 _out_location_0; void main() { uint vertex_index = uint(gl_VertexID);