[Mesa-dev] [PATCH v2] glsl: reset BufferStride with explicit xfb_stride

Juan A. Suarez Romero jasuarez at igalia.com
Wed Jun 21 16:41:41 UTC 2017


link_xfb_stride_layout_qualifiers() can be called multiple times, and
each time we call prog->TransformFeedback.BufferStride is reset to 0.

But we should only reset it if the shaders provide an explicit stride.

Fixes:
KHR-GL45.enhanced_layouts.xfb_stride_of_empty_list
KHR-GL45.enhanced_layouts.xfb_stride_of_empty_list_and_api

v2: do reset only if shaders provide an explicit stride

Signed-off-by: Juan A. Suarez Romero <jasuarez at igalia.com>
---
 src/compiler/glsl/linker.cpp | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index adfa3b7b1d..5a261a64f5 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -1623,8 +1623,14 @@ link_xfb_stride_layout_qualifiers(struct gl_context *ctx,
                                   struct gl_shader **shader_list,
                                   unsigned num_shaders)
 {
-   for (unsigned i = 0; i < MAX_FEEDBACK_BUFFERS; i++) {
-      prog->TransformFeedback.BufferStride[i] = 0;
+   for (unsigned s = 0; s < num_shaders; s++) {
+      struct gl_shader *shader = shader_list[s];
+
+      for (unsigned i = 0; i < MAX_FEEDBACK_BUFFERS; i++) {
+         if (shader->TransformFeedbackBufferStride[i]) {
+            prog->TransformFeedback.BufferStride[i] = 0;
+         }
+      }
    }
 
    for (unsigned i = 0; i < num_shaders; i++) {
-- 
2.11.0



More information about the mesa-dev mailing list