[Mesa-dev] [PATCH 11/16] i965/gen7.5: Update surface entries for pull constants and VS UBO surfaces.

Abdiel Janulgue abdiel.janulgue at linux.intel.com
Thu Oct 10 14:20:04 PDT 2013


When surface_state pointing to pull constant surfaces are changed, update
on-chip binding table. Same with VS ubo surface states.

v3: Include support for geometry shaders constant buffers in
    brw_upload_vec4_pull_constants. The previous patch failed to
    address this.

Cc: Paul Berry <stereotype441 at gmail.com>
Cc: Kenneth Graunke <kenneth at whitecape.org>
Cc: Chad Versace <chad.versace at linux.intel.com>
Cc: Eric Anholt <eric at anholt.net>
Signed-off-by: Abdiel Janulgue <abdiel.janulgue at linux.intel.com>
---
 src/mesa/drivers/dri/i965/brw_vs_surface_state.c |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
index 2c5d06f..cf06e0e 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
@@ -87,6 +87,21 @@ brw_upload_vec4_pull_constants(struct brw_context *brw,
    const int surf = SURF_INDEX_VEC4_CONST_BUFFER;
    brw->vtbl.create_constant_surface(brw, stage_state->const_bo, 0, size,
                                      &stage_state->surf_offset[surf], false);
+   if (brw->has_resource_streamer) {
+      switch(brw_new_constbuf) {
+      case BRW_NEW_VS_CONSTBUF:
+         gen7_update_binding_table(brw, STAGE_VERTEX_SHADER,
+                                   surf, stage_state->surf_offset[surf]);
+         break;
+      case BRW_NEW_GS_CONSTBUF:
+         gen7_update_binding_table(brw, STAGE_GEOMETRY_SHADER,
+                                   surf, stage_state->surf_offset[surf]);
+         break;
+      default:
+         assert(!"unrecognized new constant buffer");
+         break;
+      }
+   }
 
    brw->state.dirty.brw |= brw_new_constbuf;
 }
@@ -138,6 +153,11 @@ brw_upload_vs_ubo_surfaces(struct brw_context *brw)
 
    brw_upload_ubo_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_VERTEX],
 			   &stage_state->surf_offset[SURF_INDEX_VEC4_UBO(0)]);
+   if (brw->has_resource_streamer) {
+      gen7_update_binding_table(brw, STAGE_VERTEX_SHADER,
+                                SURF_INDEX_VEC4_UBO(0),
+                                stage_state->surf_offset[SURF_INDEX_VEC4_UBO(0)]);
+   }
 }
 
 const struct brw_tracked_state brw_vs_ubo_surfaces = {
-- 
1.7.9.5



More information about the mesa-dev mailing list