[Mesa-dev] [PATCH] i965: make more effective use of SamplersUsed
Timothy Arceri
timothy.arceri at collabora.com
Tue Jul 5 07:10:53 UTC 2016
---
src/mesa/drivers/dri/i965/brw_cs.c | 3 +--
src/mesa/drivers/dri/i965/brw_gs.c | 4 +---
src/mesa/drivers/dri/i965/brw_program.h | 1 -
src/mesa/drivers/dri/i965/brw_tcs.c | 5 +----
src/mesa/drivers/dri/i965/brw_tes.c | 5 +----
src/mesa/drivers/dri/i965/brw_vs.c | 3 +--
src/mesa/drivers/dri/i965/brw_wm.c | 12 +++++-------
7 files changed, 10 insertions(+), 23 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_cs.c b/src/mesa/drivers/dri/i965/brw_cs.c
index d33b260..32c56c2 100644
--- a/src/mesa/drivers/dri/i965/brw_cs.c
+++ b/src/mesa/drivers/dri/i965/brw_cs.c
@@ -198,8 +198,7 @@ brw_cs_populate_key(struct brw_context *brw, struct brw_cs_prog_key *key)
memset(key, 0, sizeof(*key));
/* _NEW_TEXTURE */
- brw_populate_sampler_prog_key_data(ctx, prog, brw->cs.base.sampler_count,
- &key->tex);
+ brw_populate_sampler_prog_key_data(ctx, prog, &key->tex);
/* The unique compute program ID */
key->program_string_id = cp->id;
diff --git a/src/mesa/drivers/dri/i965/brw_gs.c b/src/mesa/drivers/dri/i965/brw_gs.c
index cea9dda..df0b972 100644
--- a/src/mesa/drivers/dri/i965/brw_gs.c
+++ b/src/mesa/drivers/dri/i965/brw_gs.c
@@ -209,7 +209,6 @@ brw_gs_populate_key(struct brw_context *brw,
struct brw_gs_prog_key *key)
{
struct gl_context *ctx = &brw->ctx;
- struct brw_stage_state *stage_state = &brw->gs.base;
struct brw_geometry_program *gp =
(struct brw_geometry_program *) brw->geometry_program;
struct gl_program *prog = &gp->program.Base;
@@ -219,8 +218,7 @@ brw_gs_populate_key(struct brw_context *brw,
key->program_string_id = gp->id;
/* _NEW_TEXTURE */
- brw_populate_sampler_prog_key_data(ctx, prog, stage_state->sampler_count,
- &key->tex);
+ brw_populate_sampler_prog_key_data(ctx, prog, &key->tex);
}
void
diff --git a/src/mesa/drivers/dri/i965/brw_program.h b/src/mesa/drivers/dri/i965/brw_program.h
index 620ac3e..eed07a2 100644
--- a/src/mesa/drivers/dri/i965/brw_program.h
+++ b/src/mesa/drivers/dri/i965/brw_program.h
@@ -44,7 +44,6 @@ void brw_setup_tex_for_precompile(struct brw_context *brw,
void brw_populate_sampler_prog_key_data(struct gl_context *ctx,
const struct gl_program *prog,
- unsigned sampler_count,
struct brw_sampler_prog_key_data *key);
bool brw_debug_recompile_sampler_key(struct brw_context *brw,
const struct brw_sampler_prog_key_data *old_key,
diff --git a/src/mesa/drivers/dri/i965/brw_tcs.c b/src/mesa/drivers/dri/i965/brw_tcs.c
index 15265c0..19b36e5 100644
--- a/src/mesa/drivers/dri/i965/brw_tcs.c
+++ b/src/mesa/drivers/dri/i965/brw_tcs.c
@@ -324,7 +324,6 @@ brw_tcs_populate_key(struct brw_context *brw,
struct brw_tess_eval_program *tep =
(struct brw_tess_eval_program *) brw->tess_eval_program;
struct gl_program *prog = &tcp->program.Base;
- struct brw_stage_state *stage_state = &brw->tcs.base;
memset(key, 0, sizeof(*key));
@@ -347,9 +346,7 @@ brw_tcs_populate_key(struct brw_context *brw,
key->program_string_id = tcp->id;
/* _NEW_TEXTURE */
- brw_populate_sampler_prog_key_data(&brw->ctx, prog,
- stage_state->sampler_count,
- &key->tex);
+ brw_populate_sampler_prog_key_data(&brw->ctx, prog, &key->tex);
} else {
key->outputs_written = tep->program.Base.InputsRead;
}
diff --git a/src/mesa/drivers/dri/i965/brw_tes.c b/src/mesa/drivers/dri/i965/brw_tes.c
index 1abc7cb..8105d31 100644
--- a/src/mesa/drivers/dri/i965/brw_tes.c
+++ b/src/mesa/drivers/dri/i965/brw_tes.c
@@ -242,7 +242,6 @@ brw_tes_populate_key(struct brw_context *brw,
struct brw_tess_eval_program *tep =
(struct brw_tess_eval_program *) brw->tess_eval_program;
struct gl_program *prog = &tep->program.Base;
- struct brw_stage_state *stage_state = &brw->tes.base;
memset(key, 0, sizeof(*key));
@@ -266,9 +265,7 @@ brw_tes_populate_key(struct brw_context *brw,
key->patch_inputs_read = per_patch_slots;
/* _NEW_TEXTURE */
- brw_populate_sampler_prog_key_data(&brw->ctx, prog,
- stage_state->sampler_count,
- &key->tex);
+ brw_populate_sampler_prog_key_data(&brw->ctx, prog, &key->tex);
}
void
diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
index 273fe3c..280e625 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -347,8 +347,7 @@ brw_vs_populate_key(struct brw_context *brw,
}
/* _NEW_TEXTURE */
- brw_populate_sampler_prog_key_data(ctx, prog, brw->vs.base.sampler_count,
- &key->tex);
+ brw_populate_sampler_prog_key_data(ctx, prog, &key->tex);
/* BRW_NEW_VS_ATTRIB_WORKAROUNDS */
memcpy(key->gl_attrib_wa_flags, brw->vb.attrib_wa_flags,
diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
index 03335f0..29b027d 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -308,16 +308,15 @@ gen6_gather_workaround(GLenum internalformat)
void
brw_populate_sampler_prog_key_data(struct gl_context *ctx,
const struct gl_program *prog,
- unsigned sampler_count,
struct brw_sampler_prog_key_data *key)
{
struct brw_context *brw = brw_context(ctx);
+ GLbitfield mask = prog->SamplersUsed;
- for (int s = 0; s < sampler_count; s++) {
- key->swizzles[s] = SWIZZLE_NOOP;
+ while (mask) {
+ const int s = u_bit_scan(&mask);
- if (!(prog->SamplersUsed & (1 << s)))
- continue;
+ key->swizzles[s] = SWIZZLE_NOOP;
int unit_id = prog->SamplerUnits[s];
const struct gl_texture_unit *unit = &ctx->Texture.Unit[unit_id];
@@ -508,8 +507,7 @@ brw_wm_populate_key(struct brw_context *brw, struct brw_wm_prog_key *key)
key->clamp_fragment_color = ctx->Color._ClampFragmentColor;
/* _NEW_TEXTURE */
- brw_populate_sampler_prog_key_data(ctx, prog, brw->wm.base.sampler_count,
- &key->tex);
+ brw_populate_sampler_prog_key_data(ctx, prog, &key->tex);
/* _NEW_BUFFERS */
key->nr_color_regions = ctx->DrawBuffer->_NumColorDrawBuffers;
--
2.7.4
More information about the mesa-dev
mailing list