summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/texstate.c
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-05-10 14:15:33 +0200
committerSamuel Pitoiset <[email protected]>2017-06-14 10:04:36 +0200
commit9eaad42c58590498a692677d1932a5a83c7b2a05 (patch)
treee44e0ecac0d5858c644197f0a470b3b5676514fb /src/mesa/main/texstate.c
parentbf60db5a4ba3893d57e59c8a69516b6519ac0972 (diff)
mesa: add update_single_program_texture_state() helper
This will also be used for looping over bindless samplers bound to texture units. Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/mesa/main/texstate.c')
-rw-r--r--src/mesa/main/texstate.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 1949ec2a849..59b96481663 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -626,15 +626,13 @@ update_texgen(struct gl_context *ctx)
static struct gl_texture_object *
update_single_program_texture(struct gl_context *ctx, struct gl_program *prog,
- int s)
+ int unit)
{
gl_texture_index target_index;
struct gl_texture_unit *texUnit;
struct gl_texture_object *texObj;
struct gl_sampler_object *sampler;
- int unit;
- unit = prog->SamplerUnits[s];
texUnit = &ctx->Texture.Unit[unit];
/* Note: If more than one bit was set in TexturesUsed[unit], then we should
@@ -680,6 +678,24 @@ update_single_program_texture(struct gl_context *ctx, struct gl_program *prog,
return texObj;
}
+static inline void
+update_single_program_texture_state(struct gl_context *ctx,
+ struct gl_program *prog,
+ int unit,
+ BITSET_WORD *enabled_texture_units)
+{
+ struct gl_texture_object *texObj;
+
+ texObj = update_single_program_texture(ctx, prog, unit);
+ if (!texObj)
+ return;
+
+ _mesa_reference_texobj(&ctx->Texture.Unit[unit]._Current, texObj);
+ BITSET_SET(enabled_texture_units, unit);
+ ctx->Texture._MaxEnabledTexImageUnit =
+ MAX2(ctx->Texture._MaxEnabledTexImageUnit, (int)unit);
+}
+
static void
update_program_texture_state(struct gl_context *ctx, struct gl_program **prog,
BITSET_WORD *enabled_texture_units)
@@ -696,16 +712,10 @@ update_program_texture_state(struct gl_context *ctx, struct gl_program **prog,
while (mask) {
const int s = u_bit_scan(&mask);
- struct gl_texture_object *texObj;
-
- texObj = update_single_program_texture(ctx, prog[i], s);
- if (texObj) {
- int unit = prog[i]->SamplerUnits[s];
- _mesa_reference_texobj(&ctx->Texture.Unit[unit]._Current, texObj);
- BITSET_SET(enabled_texture_units, unit);
- ctx->Texture._MaxEnabledTexImageUnit =
- MAX2(ctx->Texture._MaxEnabledTexImageUnit, (int)unit);
- }
+
+ update_single_program_texture_state(ctx, prog[i],
+ prog[i]->SamplerUnits[s],
+ enabled_texture_units);
}
}