Mesa (master): nir/linker: Fix TRANSFORM_FEEDBACK_BUFFER_INDEX
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Mar 8 14:01:27 UTC 2019
Module: Mesa
Branch: master
Commit: de31fb2f4f75b253e7d9e4617da6c1d04ae18df9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=de31fb2f4f75b253e7d9e4617da6c1d04ae18df9
Author: Antia Puentes <apuentes at igalia.com>
Date: Sat Dec 22 18:40:29 2018 +0100
nir/linker: Fix TRANSFORM_FEEDBACK_BUFFER_INDEX
>From the ARB_enhanced_layouts specification:
"For the property TRANSFORM_FEEDBACK_BUFFER_INDEX, a single integer
identifying the index of the active transform feedback buffer
associated with an active variable is written to <params>. For
variables corresponding to the special names "gl_NextBuffer",
"gl_SkipComponents1", "gl_SkipComponents2", "gl_SkipComponents3",
and "gl_SkipComponents4", -1 is written to <params>."
We were storing the xfb_buffer value, instead of the value
corresponding to GL_TRANSFORM_FEEDBACK_BUFFER_INDEX.
Note that the implementation assumes that varyings would be sorted by
offset and buffer.
Signed-off-by: Antia Puentes <apuentes at igalia.com>
Signed-off-by: Alejandro Piñeiro <apinheiro at igalia.com>
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
---
src/compiler/glsl/gl_nir_link_xfb.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/compiler/glsl/gl_nir_link_xfb.c b/src/compiler/glsl/gl_nir_link_xfb.c
index bd40ce0efdd..587d65bfb37 100644
--- a/src/compiler/glsl/gl_nir_link_xfb.c
+++ b/src/compiler/glsl/gl_nir_link_xfb.c
@@ -110,6 +110,11 @@ gl_nir_link_assign_xfb_resources(struct gl_context *ctx,
xfb_info->varying_count);
linked_xfb->NumVarying = xfb_info->varying_count;
+ int buffer_index = 0; /* Corresponds to GL_TRANSFORM_FEEDBACK_BUFFER_INDEX */
+ int xfb_buffer =
+ (xfb_info->varying_count > 0) ?
+ xfb_info->outputs[0].buffer : 0;
+
for (unsigned i = 0; i < xfb_info->varying_count; i++) {
nir_xfb_varying_info *xfb_varying = &xfb_info->varyings[i];
@@ -139,13 +144,18 @@ gl_nir_link_assign_xfb_resources(struct gl_context *ctx,
*/
prog->TransformFeedback.VaryingNames[i] = NULL;
+ if (xfb_buffer != xfb_varying->buffer) {
+ buffer_index++;
+ xfb_buffer = xfb_varying->buffer;
+ }
+
struct gl_transform_feedback_varying_info *varying =
linked_xfb->Varyings + i;
/* ARB_gl_spirv: see above. */
varying->Name = NULL;
varying->Type = glsl_get_gl_type(xfb_varying->type);
- varying->BufferIndex = xfb_varying->buffer;
+ varying->BufferIndex = buffer_index;
varying->Size = glsl_get_length(xfb_varying->type);
varying->Offset = xfb_varying->offset;
}
More information about the mesa-commit
mailing list