nir/linker: Add XFB resources to the program resource list
authorAntia Puentes <apuentes@igalia.com>
Sat, 15 Dec 2018 17:33:18 +0000 (18:33 +0100)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Fri, 12 Jul 2019 21:42:41 +0000 (23:42 +0200)
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/compiler/glsl/gl_nir_linker.c

index 4bf94c05a1504a8911b3731628d37c30578f6673..57ee435fa272225946cfb4b7a9b3616c78d80d6f 100644 (file)
@@ -154,6 +154,33 @@ nir_build_program_resource_list(struct gl_context *ctx,
       return;
    }
 
+   /* Add transform feedback varyings and buffers. */
+   if (prog->last_vert_prog) {
+      struct gl_transform_feedback_info *linked_xfb =
+         prog->last_vert_prog->sh.LinkedTransformFeedback;
+
+      /* Add varyings. */
+      if (linked_xfb->NumVarying > 0) {
+         for (int i = 0; i < linked_xfb->NumVarying; i++) {
+            if (!link_util_add_program_resource(prog, resource_set,
+                                                GL_TRANSFORM_FEEDBACK_VARYING,
+                                                &linked_xfb->Varyings[i], 0))
+            return;
+         }
+      }
+
+      /* Add buffers. */
+      for (unsigned i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) {
+         if ((linked_xfb->ActiveBuffers >> i) & 1) {
+            linked_xfb->Buffers[i].Binding = i;
+            if (!link_util_add_program_resource(prog, resource_set,
+                                                GL_TRANSFORM_FEEDBACK_BUFFER,
+                                                &linked_xfb->Buffers[i], 0))
+            return;
+         }
+      }
+   }
+
    /* Add uniforms
     *
     * Here, it is expected that nir_link_uniforms() has already been