i965: Push computation for sampler state batch offsets up a level.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 26 Jul 2014 18:20:02 +0000 (11:20 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 2 Aug 2014 12:14:42 +0000 (05:14 -0700)
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 <kenneth@whitecape.org>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/brw_sampler_state.c

index 89336728adccd9afd78b45b3e0f03a791d9e3a87..587da1a36708285d429479c58a326444f7de0d93 100644 (file)
@@ -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);
+         }
       }
    }