diff options
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_state.h | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_state_upload.c | 20 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vs_surface_state.c | 61 |
3 files changed, 20 insertions, 64 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index c27399678b2..44f5fe1626d 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -41,7 +41,7 @@ extern const struct brw_tracked_state brw_cc_unit; extern const struct brw_tracked_state brw_check_fallback; extern const struct brw_tracked_state brw_clip_prog; extern const struct brw_tracked_state brw_clip_unit; -extern const struct brw_tracked_state brw_vs_constants; +extern const struct brw_tracked_state brw_vs_pull_constants; extern const struct brw_tracked_state brw_wm_pull_constants; extern const struct brw_tracked_state brw_constant_buffer; extern const struct brw_tracked_state brw_curbe_offsets; @@ -63,7 +63,6 @@ extern const struct brw_tracked_state brw_sf_vp; extern const struct brw_tracked_state brw_state_base_address; extern const struct brw_tracked_state brw_urb_fence; extern const struct brw_tracked_state brw_vertex_state; -extern const struct brw_tracked_state brw_vs_surfaces; extern const struct brw_tracked_state brw_vs_prog; extern const struct brw_tracked_state brw_vs_unit; extern const struct brw_tracked_state brw_wm_input_sizes; diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index c94b0ebbd72..fe4aed0db09 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@ -63,10 +63,10 @@ static const struct brw_tracked_state *gen4_atoms[] = &brw_cc_vp, &brw_cc_unit, - &brw_vs_constants, /* Before vs_surfaces and constant_buffer */ - &brw_wm_pull_constants, /* Before brw_wm_binding_table */ + /* Must be before brw_binding_table */ + &brw_vs_pull_constants, + &brw_wm_pull_constants, - &brw_vs_surfaces, /* must do before unit */ &brw_renderbuffer_surfaces, /* must do before unit */ &brw_texture_surfaces, /* must do before unit */ &brw_binding_table, @@ -133,12 +133,13 @@ static const struct brw_tracked_state *gen6_atoms[] = &gen6_depth_stencil_state, /* must do before cc unit */ &gen6_cc_state_pointers, - &brw_vs_constants, /* Before vs_surfaces and constant_buffer */ - &brw_wm_pull_constants, /* Before brw_wm_binding_table */ + /* Pull constants must be before brw_binding_table */ + &brw_vs_pull_constants, + &brw_wm_pull_constants, + &gen6_vs_push_constants, /* Before vs_state */ &gen6_wm_push_constants, /* Before wm_state */ - &brw_vs_surfaces, /* must do before unit */ &brw_renderbuffer_surfaces, /* must do before unit */ &brw_texture_surfaces, /* must do before unit */ &brw_binding_table, @@ -198,12 +199,13 @@ const struct brw_tracked_state *gen7_atoms[] = &gen7_cc_state_pointer, &gen7_depth_stencil_state_pointer, - &brw_vs_constants, /* Before vs_surfaces and constant_buffer */ - &brw_wm_pull_constants, /* Before brw_wm_binding_table */ + /* Pull constants must be before brw_binding_table */ + &brw_vs_pull_constants, + &brw_wm_pull_constants, + &gen6_vs_push_constants, /* Before vs_state */ &gen6_wm_push_constants, /* Before wm_surfaces and constant_buffer */ - &brw_vs_surfaces, /* must do before unit */ &brw_renderbuffer_surfaces, /* must do before unit */ &brw_texture_surfaces, /* must do before unit */ &brw_binding_table, 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 66d5545b7a9..2f7b211d5ec 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c @@ -65,6 +65,7 @@ brw_upload_vs_pull_constants(struct brw_context *brw) if (brw->vs.const_bo) { drm_intel_bo_unreference(brw->vs.const_bo); brw->vs.const_bo = NULL; + brw->bind.surf_offset[SURF_INDEX_VERT_CONST_BUFFER] = 0; brw->state.dirty.brw |= BRW_NEW_VS_CONSTBUF; } return; @@ -92,66 +93,20 @@ brw_upload_vs_pull_constants(struct brw_context *brw) } drm_intel_gem_bo_unmap_gtt(brw->vs.const_bo); - brw->state.dirty.brw |= BRW_NEW_VS_CONSTBUF; -} - -const struct brw_tracked_state brw_vs_constants = { - .dirty = { - .mesa = (_NEW_PROGRAM_CONSTANTS), - .brw = (BRW_NEW_VERTEX_PROGRAM), - .cache = CACHE_NEW_VS_PROG, - }, - .emit = brw_upload_vs_pull_constants, -}; - -/** - * Update the surface state for a VS constant buffer. - * - * Sets brw->vs.surf_bo[surf] and brw->vp->const_buffer. - */ -static void -brw_update_vs_constant_surface( struct gl_context *ctx, - GLuint surf) -{ - struct brw_context *brw = brw_context(ctx); - struct intel_context *intel = &brw->intel; - struct brw_vertex_program *vp = - (struct brw_vertex_program *) brw->vertex_program; - const struct gl_program_parameter_list *params = vp->program.Base.Parameters; - - /* If there's no constant buffer, then no surface BO is needed to point at - * it. - */ - if (brw->vs.const_bo == NULL) { - brw->bind.surf_offset[surf] = 0; - return; - } + const int surf = SURF_INDEX_VERT_CONST_BUFFER; intel->vtbl.create_constant_surface(brw, brw->vs.const_bo, params->NumParameters, &brw->bind.surf_offset[surf]); -} - -/** - * Vertex shader surfaces (constant buffer). - */ -static void -brw_upload_vs_surfaces(struct brw_context *brw) -{ - struct gl_context *ctx = &brw->intel.ctx; - /* BRW_NEW_VS_CONSTBUF */ - if (brw->vs.const_bo) { - brw_update_vs_constant_surface(ctx, SURF_INDEX_VERT_CONST_BUFFER); - } + brw->state.dirty.brw |= BRW_NEW_VS_CONSTBUF; } -const struct brw_tracked_state brw_vs_surfaces = { +const struct brw_tracked_state brw_vs_pull_constants = { .dirty = { - .mesa = 0, - .brw = (BRW_NEW_VS_CONSTBUF | - BRW_NEW_BATCH), - .cache = 0 + .mesa = (_NEW_PROGRAM_CONSTANTS), + .brw = (BRW_NEW_BATCH | BRW_NEW_VERTEX_PROGRAM), + .cache = CACHE_NEW_VS_PROG, }, - .emit = brw_upload_vs_surfaces, + .emit = brw_upload_vs_pull_constants, }; |