i965: Generalize computation of VUE map in preparation for GS.
authorPaul Berry <stereotype441@gmail.com>
Fri, 22 Mar 2013 19:39:40 +0000 (12:39 -0700)
committerPaul Berry <stereotype441@gmail.com>
Thu, 11 Apr 2013 16:25:24 +0000 (09:25 -0700)
This patch modifies the arguments to brw_compute_vue_map() so that
they no longer bake in the assumption that we are generating a VUE map
for vertex shader outputs.  It also makes the function non-static so
that we can re-use it for geometry shader outputs.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_vs.c

index ab3ae1c10817051578dac4c23cd7d73908a524c8..10e738d309006b11bc8eed2ce2045ed9fa970b8c 100644 (file)
@@ -400,6 +400,9 @@ static inline GLuint brw_varying_to_offset(struct brw_vue_map *vue_map,
    return brw_vue_slot_to_offset(vue_map->varying_to_slot[varying]);
 }
 
+void brw_compute_vue_map(struct brw_context *brw, struct brw_vue_map *vue_map,
+                         GLbitfield64 slots_valid, bool userclip_active);
+
 
 struct brw_sf_prog_data {
    GLuint urb_read_length;
index 6d2c0fd87e8252f5b4a7ad96cb6dc725ea7f781d..13971ab60432e28f4e4fda5c912a75e2e034a5da 100644 (file)
@@ -57,12 +57,11 @@ static inline void assign_vue_slot(struct brw_vue_map *vue_map,
  * prog_data->userclip and prog_data->outputs_written in their key
  * (generated by CACHE_NEW_VS_PROG).
  */
-static void
-brw_compute_vue_map(struct brw_context *brw, struct brw_vs_compile *c,
-                    GLbitfield64 slots_valid)
+void
+brw_compute_vue_map(struct brw_context *brw, struct brw_vue_map *vue_map,
+                    GLbitfield64 slots_valid, bool userclip_active)
 {
    const struct intel_context *intel = &brw->intel;
-   struct brw_vue_map *vue_map = &c->prog_data.vue_map;
 
    /* Prior to Gen6, don't assign a slot for VARYING_SLOT_CLIP_VERTEX, since
     * it is unsupported.
@@ -133,7 +132,7 @@ brw_compute_vue_map(struct brw_context *brw, struct brw_vs_compile *c,
        */
       assign_vue_slot(vue_map, VARYING_SLOT_PSIZ);
       assign_vue_slot(vue_map, VARYING_SLOT_POS);
-      if (c->key.userclip_active) {
+      if (userclip_active) {
          assign_vue_slot(vue_map, VARYING_SLOT_CLIP_DIST0);
          assign_vue_slot(vue_map, VARYING_SLOT_CLIP_DIST1);
       }
@@ -284,7 +283,8 @@ do_vs_prog(struct brw_context *brw,
       }
    }
 
-   brw_compute_vue_map(brw, &c, outputs_written);
+   brw_compute_vue_map(brw, &c.prog_data.vue_map, outputs_written,
+                       c.key.userclip_active);
 
    if (0) {
       _mesa_fprint_program_opt(stdout, &c.vp->program.Base, PROG_PRINT_DEBUG,