From 378eea970824821ffb0d38c27e214af94ec0aca9 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Sat, 26 Jul 2014 11:20:02 -0700 Subject: [PATCH] i965: Push computation for sampler state batch offsets up a level. Other than this, brw_update_sampler_state only deals with a single SAMPLER_STATE structure, and doesn't need to know which position it is in the table. The caller takes care of dealing with multiple surface states. Pushing this up a level allows us to drop the ss_index parameter. Signed-off-by: Kenneth Graunke Reviewed-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_sampler_state.c | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_sampler_state.c b/src/mesa/drivers/dri/i965/brw_sampler_state.c index 89336728adc..587da1a3670 100644 --- a/src/mesa/drivers/dri/i965/brw_sampler_state.c +++ b/src/mesa/drivers/dri/i965/brw_sampler_state.c @@ -207,11 +207,11 @@ upload_default_color(struct brw_context *brw, * Sets the sampler state for a single unit based off of the sampler key * entry. */ -static void brw_update_sampler_state(struct brw_context *brw, - int unit, - int ss_index, - struct brw_sampler_state *sampler, - uint32_t sampler_state_table_offset) +static void +brw_update_sampler_state(struct brw_context *brw, + int unit, + struct brw_sampler_state *sampler, + uint32_t batch_offset_for_sampler_state) { struct gl_context *ctx = &brw->ctx; struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; @@ -357,8 +357,7 @@ static void brw_update_sampler_state(struct brw_context *brw, (brw->batch.bo->offset64 + sdc_offset) >> 5; drm_intel_bo_emit_reloc(brw->batch.bo, - sampler_state_table_offset + - ss_index * sizeof(struct brw_sampler_state) + + batch_offset_for_sampler_state + offsetof(struct brw_sampler_state, ss2), brw->batch.bo, sdc_offset, I915_GEM_DOMAIN_SAMPLER, 0); @@ -397,9 +396,12 @@ brw_upload_sampler_state_table(struct brw_context *brw, for (unsigned s = 0; s < sampler_count; s++) { if (SamplersUsed & (1 << s)) { const unsigned unit = prog->SamplerUnits[s]; - if (ctx->Texture.Unit[unit]._Current) - brw_update_sampler_state(brw, unit, s, &samplers[s], - stage_state->sampler_offset); + if (ctx->Texture.Unit[unit]._Current) { + uint32_t batch_offset_for_sampler_state = + stage_state->sampler_offset + s * sizeof(*samplers); + brw_update_sampler_state(brw, unit, &samplers[s], + batch_offset_for_sampler_state); + } } } -- 2.30.2