diff options
author | Samuel Pitoiset <[email protected]> | 2017-05-10 14:15:33 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2017-06-14 10:04:36 +0200 |
commit | 9eaad42c58590498a692677d1932a5a83c7b2a05 (patch) | |
tree | e44e0ecac0d5858c644197f0a470b3b5676514fb /src | |
parent | bf60db5a4ba3893d57e59c8a69516b6519ac0972 (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')
-rw-r--r-- | src/mesa/main/texstate.c | 36 |
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); } } |