diff options
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_state_upload.c | 4 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vs_surface_state.c | 10 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 16 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 109 |
4 files changed, 13 insertions, 126 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index 79d9188f32f..2f16891395b 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@ -204,8 +204,8 @@ const struct brw_tracked_state *gen7_atoms[] = &gen6_wm_constants, /* Before wm_surfaces and constant_buffer */ &brw_vs_surfaces, /* must do before unit */ - &gen7_wm_constant_surface, /* must do before wm surfaces/bind bo */ - &gen7_wm_surfaces, /* must do before samplers and unit */ + &brw_wm_constant_surface, /* must do before wm surfaces/bind bo */ + &brw_wm_surfaces, /* must do before samplers and unit */ &brw_wm_binding_table, &gen7_samplers, 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 f838daa2b07..8c63db8a89b 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c @@ -129,13 +129,9 @@ brw_update_vs_constant_surface( struct gl_context *ctx, return; } - if (intel->gen >= 7) { - gen7_create_constant_surface(brw, brw->vs.const_bo, params->NumParameters, - &brw->vs.surf_offset[surf]); - } else { - brw_create_constant_surface(brw, brw->vs.const_bo, params->NumParameters, - &brw->vs.surf_offset[surf]); - } + intel->vtbl.create_constant_surface(brw, brw->vs.const_bo, + params->NumParameters, + &brw->vs.surf_offset[surf]); } /** diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index def3ddc5bf5..5d04de6af8f 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -429,8 +429,9 @@ static void upload_wm_constant_surface(struct brw_context *brw ) return; } - brw_create_constant_surface(brw, brw->wm.const_bo, params->NumParameters, - &brw->wm.surf_offset[surf]); + brw->intel.vtbl.create_constant_surface(brw, brw->wm.const_bo, + params->NumParameters, + &brw->wm.surf_offset[surf]); brw->state.dirty.brw |= BRW_NEW_WM_SURFACES; } @@ -582,6 +583,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw, static void brw_upload_wm_surfaces(struct brw_context *brw) { + struct intel_context *intel = &brw->intel; struct gl_context *ctx = &brw->intel.ctx; GLuint i; int nr_surfaces = 0; @@ -591,16 +593,14 @@ brw_upload_wm_surfaces(struct brw_context *brw) if (ctx->DrawBuffer->_NumColorDrawBuffers >= 1) { for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { if (intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[i])) { - brw_update_renderbuffer_surface(brw, - ctx->DrawBuffer->_ColorDrawBuffers[i], - i); + intel->vtbl.update_renderbuffer_surface(brw, ctx->DrawBuffer->_ColorDrawBuffers[i], i); } else { - brw_update_null_renderbuffer_surface(brw, i); + intel->vtbl.update_null_renderbuffer_surface(brw, i); } } nr_surfaces = SURF_INDEX_DRAW(ctx->DrawBuffer->_NumColorDrawBuffers); } else { - brw_update_null_renderbuffer_surface(brw, 0); + intel->vtbl.update_null_renderbuffer_surface(brw, 0); nr_surfaces = SURF_INDEX_DRAW(0) + 1; } @@ -616,7 +616,7 @@ brw_upload_wm_surfaces(struct brw_context *brw) /* _NEW_TEXTURE */ if (texUnit->_ReallyEnabled) { - brw_update_texture_surface(ctx, i); + intel->vtbl.update_texture_surface(ctx, i); nr_surfaces = SURF_INDEX_TEXTURE(i) + 1; } else { brw->wm.surf_offset[surf] = 0; diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c index 3ae9236a141..b4730c4582c 100644 --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c @@ -166,48 +166,6 @@ gen7_create_constant_surface(struct brw_context *brw, I915_GEM_DOMAIN_SAMPLER, 0); } -/** - * Updates surface / buffer for fragment shader constant buffer, if - * one is required. - * - * This consumes the state updates for the constant buffer, and produces - * BRW_NEW_WM_SURFACES to get picked up by brw_prepare_wm_surfaces for - * inclusion in the binding table. - */ -static void upload_wm_constant_surface(struct brw_context *brw) -{ - GLuint surf = SURF_INDEX_FRAG_CONST_BUFFER; - struct brw_fragment_program *fp = - (struct brw_fragment_program *) brw->fragment_program; - const struct gl_program_parameter_list *params = - fp->program.Base.Parameters; - - /* If there's no constant buffer, then no surface BO is needed to point at - * it. - */ - if (brw->wm.const_bo == 0) { - if (brw->wm.surf_offset[surf]) { - brw->state.dirty.brw |= BRW_NEW_WM_SURFACES; - brw->wm.surf_offset[surf] = 0; - } - return; - } - - gen7_create_constant_surface(brw, brw->wm.const_bo, params->NumParameters, - &brw->wm.surf_offset[surf]); - brw->state.dirty.brw |= BRW_NEW_WM_SURFACES; -} - -const struct brw_tracked_state gen7_wm_constant_surface = { - .dirty = { - .mesa = 0, - .brw = (BRW_NEW_WM_CONSTBUF | - BRW_NEW_BATCH), - .cache = 0 - }, - .emit = upload_wm_constant_surface, -}; - static void gen7_update_null_renderbuffer_surface(struct brw_context *brw, unsigned unit) { @@ -302,73 +260,6 @@ gen7_update_renderbuffer_surface(struct brw_context *brw, I915_GEM_DOMAIN_RENDER); } -/** - * Constructs the set of surface state objects pointed to by the - * binding table. - */ -static void -gen7_upload_wm_surfaces(struct brw_context *brw) -{ - struct gl_context *ctx = &brw->intel.ctx; - GLuint i; - int nr_surfaces = 0; - - /* _NEW_BUFFERS | _NEW_COLOR */ - /* Update surfaces for drawing buffers */ - if (ctx->DrawBuffer->_NumColorDrawBuffers >= 1) { - for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { - if (intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[i])) { - gen7_update_renderbuffer_surface(brw, - ctx->DrawBuffer->_ColorDrawBuffers[i], i); - } else { - gen7_update_null_renderbuffer_surface(brw, i); - } - } - nr_surfaces = SURF_INDEX_DRAW(ctx->DrawBuffer->_NumColorDrawBuffers); - } else { - gen7_update_null_renderbuffer_surface(brw, 0); - nr_surfaces = SURF_INDEX_DRAW(0) + 1; - } - - /* BRW_NEW_WM_CONSTBUF */ - if (brw->wm.const_bo) { - nr_surfaces = SURF_INDEX_FRAG_CONST_BUFFER + 1; - } - - /* Update surfaces for textures */ - for (i = 0; i < BRW_MAX_TEX_UNIT; i++) { - const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i]; - const GLuint surf = SURF_INDEX_TEXTURE(i); - - /* _NEW_TEXTURE */ - if (texUnit->_ReallyEnabled) { - gen7_update_texture_surface(ctx, i); - nr_surfaces = SURF_INDEX_TEXTURE(i) + 1; - } else { - brw->wm.surf_offset[surf] = 0; - } - } - - if (brw->wm.nr_surfaces != nr_surfaces) { - brw->wm.nr_surfaces = nr_surfaces; - brw->state.dirty.brw |= BRW_NEW_NR_WM_SURFACES; - } - - brw->state.dirty.brw |= BRW_NEW_WM_SURFACES; -} - -const struct brw_tracked_state gen7_wm_surfaces = { - .dirty = { - .mesa = (_NEW_COLOR | - _NEW_TEXTURE | - _NEW_BUFFERS), - .brw = (BRW_NEW_BATCH | - BRW_NEW_WM_CONSTBUF), - .cache = 0 - }, - .emit = gen7_upload_wm_surfaces, -}; - void gen7_init_vtable_surface_functions(struct brw_context *brw) { |