Mesa (master): shader_info: convert textures_used to a bitset.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Mar 9 21:04:32 UTC 2021
Module: Mesa
Branch: master
Commit: 8027a7ba8adbd9fb4fff584d2e4098cf38100650
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8027a7ba8adbd9fb4fff584d2e4098cf38100650
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Mar 8 15:23:31 2021 +1000
shader_info: convert textures_used to a bitset.
For now keep it a bitset of 1 32-bit dword.
Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9456>
---
src/compiler/glsl/gl_nir_lower_samplers_as_deref.c | 5 ++---
src/compiler/shader_info.h | 4 ++--
src/freedreno/ir3/ir3_compiler_nir.c | 2 +-
src/freedreno/vulkan/tu_shader.c | 3 +--
src/gallium/auxiliary/nir/nir_draw_helpers.c | 2 +-
src/gallium/auxiliary/nir/nir_to_tgsi.c | 2 +-
src/gallium/auxiliary/nir/nir_to_tgsi_info.c | 4 ++--
src/gallium/auxiliary/nir/tgsi_to_nir.c | 5 ++---
src/gallium/drivers/iris/iris_program.c | 8 ++++----
src/gallium/drivers/iris/iris_resolve.c | 2 +-
src/gallium/drivers/iris/iris_state.c | 2 +-
src/gallium/drivers/radeonsi/si_blit.c | 2 +-
src/gallium/drivers/radeonsi/si_compute.c | 2 +-
src/gallium/drivers/radeonsi/si_debug.c | 2 +-
src/gallium/drivers/radeonsi/si_descriptors.c | 4 ++--
src/gallium/drivers/radeonsi/si_shader_llvm.c | 2 +-
src/gallium/drivers/radeonsi/si_state_draw.cpp | 4 ++--
src/gallium/drivers/radeonsi/si_state_shaders.c | 2 +-
src/gallium/frontends/clover/nir/invocation.cpp | 4 +++-
.../frontends/lavapipe/lvp_lower_vulkan_resource.c | 2 +-
src/mesa/drivers/common/meta.c | 4 ++--
src/mesa/drivers/dri/i965/brw_draw.c | 16 +++++++---------
src/mesa/drivers/dri/i965/brw_program.c | 4 ++--
src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 6 +++---
src/mesa/state_tracker/st_atom_texture.c | 2 +-
src/mesa/state_tracker/st_glsl_to_nir.cpp | 4 ++--
src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 4 ++--
src/mesa/state_tracker/st_nir_lower_tex_src_plane.c | 2 +-
28 files changed, 51 insertions(+), 54 deletions(-)
diff --git a/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c b/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c
index 384f4a4d284..0174c25642a 100644
--- a/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c
+++ b/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c
@@ -230,14 +230,13 @@ record_textures_used(struct shader_info *info,
/* Structs have been lowered already, so get_aoa_size is sufficient. */
const unsigned size =
glsl_type_is_array(var->type) ? glsl_get_aoa_size(var->type) : 1;
- unsigned mask = ((1ull << MAX2(size, 1)) - 1) << var->data.binding;
- info->textures_used |= mask;
+ BITSET_SET_RANGE(info->textures_used, var->data.binding, var->data.binding + (MAX2(size, 1) - 1));
if (op == nir_texop_txf ||
op == nir_texop_txf_ms ||
op == nir_texop_txf_ms_mcs)
- info->textures_used_by_txf |= mask;
+ BITSET_SET_RANGE(info->textures_used_by_txf, var->data.binding, var->data.binding + (MAX2(size, 1) - 1));
}
static bool
diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
index 0d7183f96e8..8e92f1972e3 100644
--- a/src/compiler/shader_info.h
+++ b/src/compiler/shader_info.h
@@ -165,10 +165,10 @@ typedef struct shader_info {
uint64_t patch_outputs_accessed_indirectly;
/** Bitfield of which textures are used */
- uint32_t textures_used;
+ BITSET_DECLARE(textures_used, 32);
/** Bitfield of which textures are used by texelFetch() */
- uint32_t textures_used_by_txf;
+ BITSET_DECLARE(textures_used_by_txf, 32);
/** Bitfield of which images are used */
uint32_t images_used;
diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c
index 9718f148c64..5178313d803 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -3405,7 +3405,7 @@ emit_instructions(struct ir3_context *ctx)
* it is write-only we don't have to count it, but after lowering derefs
* is too late to compact indices for that.
*/
- ctx->so->num_samp = util_last_bit(ctx->s->info.textures_used) + ctx->s->info.num_images;
+ ctx->so->num_samp = BITSET_LAST_BIT(ctx->s->info.textures_used) + ctx->s->info.num_images;
/* Save off clip+cull information. Note that in OpenGL clip planes may
* be individually enabled/disabled, so we can't use the
diff --git a/src/freedreno/vulkan/tu_shader.c b/src/freedreno/vulkan/tu_shader.c
index 460c66fbdb3..7a286e9f6d6 100644
--- a/src/freedreno/vulkan/tu_shader.c
+++ b/src/freedreno/vulkan/tu_shader.c
@@ -340,8 +340,7 @@ build_bindless(nir_builder *b, nir_deref_instr *deref, bool is_sampler,
const struct glsl_type *glsl_type = glsl_without_array(var->type);
uint32_t idx = var->data.index * 2;
- b->shader->info.textures_used |=
- ((1ull << (bind_layout->array_size * 2)) - 1) << (idx * 2);
+ BITSET_SET_RANGE(b->shader->info.textures_used, idx * 2, ((idx * 2) + (bind_layout->array_size * 2)) - 1);
/* D24S8 workaround: stencil of D24S8 will be sampled as uint */
if (glsl_get_sampler_result_type(glsl_type) == GLSL_TYPE_UINT)
diff --git a/src/gallium/auxiliary/nir/nir_draw_helpers.c b/src/gallium/auxiliary/nir/nir_draw_helpers.c
index bc1437f0830..b5706631fb4 100644
--- a/src/gallium/auxiliary/nir/nir_draw_helpers.c
+++ b/src/gallium/auxiliary/nir/nir_draw_helpers.c
@@ -134,7 +134,7 @@ nir_lower_pstipple_fs(struct nir_shader *shader,
tex_var->data.explicit_binding = true;
tex_var->data.how_declared = nir_var_hidden;
- shader->info.textures_used |= (1 << binding);
+ BITSET_SET(shader->info.textures_used, binding);
state.stip_tex = tex_var;
nir_foreach_function(function, shader) {
diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi.c b/src/gallium/auxiliary/nir/nir_to_tgsi.c
index b8060d60f8a..e6e5c3c67e8 100644
--- a/src/gallium/auxiliary/nir/nir_to_tgsi.c
+++ b/src/gallium/auxiliary/nir/nir_to_tgsi.c
@@ -403,7 +403,7 @@ ntt_setup_uniforms(struct ntt_compile *c)
}
for (int i = 0; i < PIPE_MAX_SAMPLERS; i++) {
- if (c->s->info.textures_used & (1 << i))
+ if (BITSET_TEST(c->s->info.textures_used, i))
ureg_DECL_sampler(c->ureg, i);
}
}
diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi_info.c b/src/gallium/auxiliary/nir/nir_to_tgsi_info.c
index d54860315ec..ded0ff6af37 100644
--- a/src/gallium/auxiliary/nir/nir_to_tgsi_info.c
+++ b/src/gallium/auxiliary/nir/nir_to_tgsi_info.c
@@ -801,9 +801,9 @@ void nir_tgsi_scan_shader(const struct nir_shader *nir,
info->samplers_declared = sampler_mask;
info->file_max[TGSI_FILE_SAMPLER] = util_last_bit(info->samplers_declared) - 1;
- info->file_max[TGSI_FILE_SAMPLER_VIEW] = util_last_bit(nir->info.textures_used) - 1;
+ info->file_max[TGSI_FILE_SAMPLER_VIEW] = BITSET_LAST_BIT(nir->info.textures_used) - 1;
info->file_mask[TGSI_FILE_SAMPLER] = info->samplers_declared;
- info->file_mask[TGSI_FILE_SAMPLER_VIEW] = nir->info.textures_used;
+ info->file_mask[TGSI_FILE_SAMPLER_VIEW] = nir->info.textures_used[0];
info->file_max[TGSI_FILE_IMAGE] = util_last_bit(info->images_declared) - 1;
info->file_mask[TGSI_FILE_IMAGE] = info->images_declared;
diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c
index 74a94545c2a..a39309a6ac7 100644
--- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
+++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
@@ -1274,12 +1274,11 @@ get_sampler_var(struct ttn_compile *c, int binding,
c->num_samplers = MAX2(c->num_samplers, binding + 1);
/* Record textures used */
- unsigned mask = 1 << binding;
- c->build.shader->info.textures_used |= mask;
+ BITSET_SET(c->build.shader->info.textures_used, binding);
if (op == nir_texop_txf ||
op == nir_texop_txf_ms ||
op == nir_texop_txf_ms_mcs)
- c->build.shader->info.textures_used_by_txf |= mask;
+ BITSET_SET(c->build.shader->info.textures_used_by_txf, binding);
}
return var;
diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c
index 10fb67b8d5a..deca44a783a 100644
--- a/src/gallium/drivers/iris/iris_program.c
+++ b/src/gallium/drivers/iris/iris_program.c
@@ -822,8 +822,8 @@ iris_setup_binding_table(const struct gen_device_info *devinfo,
bt->sizes[IRIS_SURFACE_GROUP_CS_WORK_GROUPS] = 1;
}
- bt->sizes[IRIS_SURFACE_GROUP_TEXTURE] = util_last_bit(info->textures_used);
- bt->used_mask[IRIS_SURFACE_GROUP_TEXTURE] = info->textures_used;
+ bt->sizes[IRIS_SURFACE_GROUP_TEXTURE] = BITSET_LAST_BIT(info->textures_used);
+ bt->used_mask[IRIS_SURFACE_GROUP_TEXTURE] = info->textures_used[0];
bt->sizes[IRIS_SURFACE_GROUP_IMAGE] = info->num_images;
@@ -2570,8 +2570,8 @@ bind_shader_state(struct iris_context *ice,
const struct shader_info *old_info = iris_get_shader_info(ice, stage);
const struct shader_info *new_info = ish ? &ish->nir->info : NULL;
- if ((old_info ? util_last_bit(old_info->textures_used) : 0) !=
- (new_info ? util_last_bit(new_info->textures_used) : 0)) {
+ if ((old_info ? BITSET_LAST_BIT(old_info->textures_used) : 0) !=
+ (new_info ? BITSET_LAST_BIT(new_info->textures_used) : 0)) {
ice->state.stage_dirty |= IRIS_STAGE_DIRTY_SAMPLER_STATES_VS << stage;
}
diff --git a/src/gallium/drivers/iris/iris_resolve.c b/src/gallium/drivers/iris/iris_resolve.c
index 335fda0ac90..1d9f920ba51 100644
--- a/src/gallium/drivers/iris/iris_resolve.c
+++ b/src/gallium/drivers/iris/iris_resolve.c
@@ -89,7 +89,7 @@ resolve_sampler_views(struct iris_context *ice,
bool *draw_aux_buffer_disabled,
bool consider_framebuffer)
{
- uint32_t views = info ? (shs->bound_sampler_views & info->textures_used) : 0;
+ uint32_t views = info ? (shs->bound_sampler_views & info->textures_used[0]) : 0;
while (views) {
const int i = u_bit_scan(&views);
diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c
index 8a06b50fcf6..376cd5a43a8 100644
--- a/src/gallium/drivers/iris/iris_state.c
+++ b/src/gallium/drivers/iris/iris_state.c
@@ -2100,7 +2100,7 @@ iris_upload_sampler_states(struct iris_context *ice, gl_shader_stage stage)
/* We assume gallium frontends will call pipe->bind_sampler_states()
* if the program's number of textures changes.
*/
- unsigned count = info ? util_last_bit(info->textures_used) : 0;
+ unsigned count = info ? BITSET_LAST_BIT(info->textures_used) : 0;
if (!count)
return;
diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c
index ab133f6880b..f34ecc1a0bb 100644
--- a/src/gallium/drivers/radeonsi/si_blit.c
+++ b/src/gallium/drivers/radeonsi/si_blit.c
@@ -690,7 +690,7 @@ static void si_check_render_feedback(struct si_context *sctx)
si_check_render_feedback_images(sctx, &sctx->images[i],
u_bit_consecutive(0, info->base.num_images));
si_check_render_feedback_textures(sctx, &sctx->samplers[i],
- info->base.textures_used);
+ info->base.textures_used[0]);
}
si_check_render_feedback_resident_images(sctx);
diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c
index 82ee4a09cca..45dc52631ee 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -837,7 +837,7 @@ static bool si_check_needs_implicit_sync(struct si_context *sctx)
*/
struct si_shader_info *info = &sctx->cs_shader_state.program->sel.info;
struct si_samplers *samplers = &sctx->samplers[PIPE_SHADER_COMPUTE];
- unsigned mask = samplers->enabled_mask & info->base.textures_used;
+ unsigned mask = samplers->enabled_mask & info->base.textures_used[0];
while (mask) {
int i = u_bit_scan(&mask);
diff --git a/src/gallium/drivers/radeonsi/si_debug.c b/src/gallium/drivers/radeonsi/si_debug.c
index 241ad8977e7..99f30198ab8 100644
--- a/src/gallium/drivers/radeonsi/si_debug.c
+++ b/src/gallium/drivers/radeonsi/si_debug.c
@@ -791,7 +791,7 @@ static void si_dump_descriptors(struct si_context *sctx, gl_shader_stage stage,
if (info) {
enabled_constbuf = u_bit_consecutive(0, info->base.num_ubos);
enabled_shaderbuf = u_bit_consecutive(0, info->base.num_ssbos);
- enabled_samplers = info->base.textures_used;
+ enabled_samplers = info->base.textures_used[0];
enabled_images = u_bit_consecutive(0, info->base.num_images);
} else {
enabled_constbuf =
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
index 0c071f2c75d..de14de145ea 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -2663,7 +2663,7 @@ bool si_gfx_resources_check_encrypted(struct si_context *sctx)
si_buffer_resources_check_encrypted(sctx, &sctx->const_and_shader_buffers[i]);
use_encrypted_bo |=
si_sampler_views_check_encrypted(sctx, &sctx->samplers[i],
- current_shader->cso->info.base.textures_used);
+ current_shader->cso->info.base.textures_used[0]);
use_encrypted_bo |= si_image_views_check_encrypted(sctx, &sctx->images[i],
u_bit_consecutive(0, current_shader->cso->info.base.num_images));
}
@@ -2743,7 +2743,7 @@ bool si_compute_resources_check_encrypted(struct si_context *sctx)
* or all writable buffers are encrypted.
*/
return si_buffer_resources_check_encrypted(sctx, &sctx->const_and_shader_buffers[sh]) ||
- si_sampler_views_check_encrypted(sctx, &sctx->samplers[sh], info->base.textures_used) ||
+ si_sampler_views_check_encrypted(sctx, &sctx->samplers[sh], info->base.textures_used[0]) ||
si_image_views_check_encrypted(sctx, &sctx->images[sh], u_bit_consecutive(0, info->base.num_images)) ||
si_buffer_resources_check_encrypted(sctx, &sctx->internal_bindings);
}
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c
index c558ca3872d..1592de128fe 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c
@@ -820,7 +820,7 @@ bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shader *shad
ctx->num_const_buffers = info->base.num_ubos;
ctx->num_shader_buffers = info->base.num_ssbos;
- ctx->num_samplers = util_last_bit(info->base.textures_used);
+ ctx->num_samplers = BITSET_LAST_BIT(info->base.textures_used);
ctx->num_images = info->base.num_images;
si_llvm_init_resource_callbacks(ctx);
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp
index 0f5d62006a9..2bf3aa500eb 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.cpp
+++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp
@@ -1612,8 +1612,8 @@ static bool si_all_vs_resources_read_only(struct si_context *sctx, struct pipe_r
}
/* Samplers. */
- if (vs->info.base.textures_used) {
- unsigned num_samplers = util_last_bit(vs->info.base.textures_used);
+ if (vs->info.base.textures_used[0]) {
+ unsigned num_samplers = BITSET_LAST_BIT(vs->info.base.textures_used);
for (unsigned i = 0; i < num_samplers; i++) {
struct pipe_sampler_view *view = sctx->samplers[PIPE_SHADER_VERTEX].views[i];
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index c0fe177f08b..b6baf283d14 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -2621,7 +2621,7 @@ void si_get_active_slot_masks(const struct si_shader_info *info, uint64_t *const
/* two 8-byte images share one 16-byte slot */
num_images = align(info->base.num_images, 2);
num_msaa_images = align(util_last_bit(info->base.msaa_images), 2);
- num_samplers = util_last_bit(info->base.textures_used);
+ num_samplers = BITSET_LAST_BIT(info->base.textures_used);
/* The layout is: sb[last] ... sb[0], cb[0] ... cb[last] */
start = si_get_shaderbuf_slot(num_shaderbufs - 1);
diff --git a/src/gallium/frontends/clover/nir/invocation.cpp b/src/gallium/frontends/clover/nir/invocation.cpp
index b7f520b4f90..197eda8b976 100644
--- a/src/gallium/frontends/clover/nir/invocation.cpp
+++ b/src/gallium/frontends/clover/nir/invocation.cpp
@@ -111,7 +111,9 @@ clover_nir_lower_images(nir_shader *shader)
}
}
shader->info.num_textures = num_rd_images;
- shader->info.textures_used = (1 << num_rd_images) - 1;
+ BITSET_ZERO(shader->info.textures_used);
+ if (num_rd_images)
+ BITSET_SET_RANGE(shader->info.textures_used, 0, num_rd_images - 1);
shader->info.num_images = num_wr_images;
nir_builder b;
diff --git a/src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c b/src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c
index 221e84135a3..4cfc68ead99 100644
--- a/src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c
+++ b/src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c
@@ -154,7 +154,7 @@ static void lower_vri_instr_tex(struct nir_builder *b,
lower_vri_instr_tex_deref(tex, nir_tex_src_sampler_deref, b->shader->info.stage, layout);
tex_value = lower_vri_instr_tex_deref(tex, nir_tex_src_texture_deref, b->shader->info.stage, layout);
if (tex_value >= 0)
- b->shader->info.textures_used |= (1 << tex_value);
+ BITSET_SET(b->shader->info.textures_used, tex_value);
}
static nir_ssa_def *lower_vri_instr(struct nir_builder *b,
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 1496b722a86..5ebe7c5fa9b 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -214,9 +214,9 @@ _mesa_meta_compile_and_link_program(struct gl_context *ctx,
* around this bad interaction. This is a bit fragile as it may break
* if you re-run the pass that gathers this info, but we probably won't...
*/
- fp->info.textures_used_by_txf = 0;
+ BITSET_ZERO(fp->info.textures_used_by_txf);
if (fp->nir)
- fp->nir->info.textures_used_by_txf = 0;
+ BITSET_ZERO(fp->nir->info.textures_used_by_txf);
_mesa_meta_use_program(ctx, sh_prog);
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
index 732b803c686..7de4e0b6ac3 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -478,11 +478,9 @@ mark_textures_used_for_txf(BITSET_WORD *used_for_txf,
if (!prog)
return;
- uint32_t mask = prog->info.textures_used_by_txf;
- while (mask) {
- int s = u_bit_scan(&mask);
+ unsigned s;
+ BITSET_FOREACH_SET(s, prog->info.textures_used_by_txf, 32)
BITSET_SET(used_for_txf, prog->SamplerUnits[s]);
- }
}
/**
@@ -851,15 +849,15 @@ brw_prepare_drawing(struct gl_context *ctx,
* index.
*/
brw->wm.base.sampler_count =
- util_last_bit(ctx->FragmentProgram._Current->info.textures_used);
+ BITSET_LAST_BIT(ctx->FragmentProgram._Current->info.textures_used);
brw->gs.base.sampler_count = ctx->GeometryProgram._Current ?
- util_last_bit(ctx->GeometryProgram._Current->info.textures_used) : 0;
+ BITSET_LAST_BIT(ctx->GeometryProgram._Current->info.textures_used) : 0;
brw->tes.base.sampler_count = ctx->TessEvalProgram._Current ?
- util_last_bit(ctx->TessEvalProgram._Current->info.textures_used) : 0;
+ BITSET_LAST_BIT(ctx->TessEvalProgram._Current->info.textures_used) : 0;
brw->tcs.base.sampler_count = ctx->TessCtrlProgram._Current ?
- util_last_bit(ctx->TessCtrlProgram._Current->info.textures_used) : 0;
+ BITSET_LAST_BIT(ctx->TessCtrlProgram._Current->info.textures_used) : 0;
brw->vs.base.sampler_count =
- util_last_bit(ctx->VertexProgram._Current->info.textures_used);
+ BITSET_LAST_BIT(ctx->VertexProgram._Current->info.textures_used);
brw_prepare_render(brw);
diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c
index d923d0d6215..6a8cf7aef5e 100644
--- a/src/mesa/drivers/dri/i965/brw_program.c
+++ b/src/mesa/drivers/dri/i965/brw_program.c
@@ -183,8 +183,8 @@ brw_nir_lower_resources(nir_shader *nir, struct gl_shader_program *shader_prog,
{
NIR_PASS_V(nir, brw_nir_lower_uniforms, nir->options->lower_to_scalar);
NIR_PASS_V(prog->nir, gl_nir_lower_samplers, shader_prog);
- prog->info.textures_used = prog->nir->info.textures_used;
- prog->info.textures_used_by_txf = prog->nir->info.textures_used_by_txf;
+ BITSET_COPY(prog->info.textures_used, prog->nir->info.textures_used);
+ BITSET_COPY(prog->info.textures_used_by_txf, prog->nir->info.textures_used_by_txf);
NIR_PASS_V(prog->nir, brw_nir_lower_image_load_store, devinfo, NULL);
diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index 86bc51e7d0b..fd020f22df9 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -1173,13 +1173,13 @@ update_stage_texture_surfaces(struct brw_context *brw,
else
surf_offset += stage_state->prog_data->binding_table.plane_start[plane];
- unsigned num_samplers = util_last_bit(prog->info.textures_used);
+ unsigned num_samplers = BITSET_LAST_BIT(prog->info.textures_used);
for (unsigned s = 0; s < num_samplers; s++) {
surf_offset[s] = 0;
- if (prog->info.textures_used & (1 << s)) {
+ if (BITSET_TEST(prog->info.textures_used, s)) {
const unsigned unit = prog->SamplerUnits[s];
- const bool used_by_txf = prog->info.textures_used_by_txf & (1 << s);
+ const bool used_by_txf = BITSET_TEST(prog->info.textures_used_by_txf, s);
struct gl_texture_object *obj = ctx->Texture.Unit[unit]._Current;
struct brw_texture_object *iobj = brw_texture_object(obj);
diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
index 117c5b5a481..f42cac58856 100644
--- a/src/mesa/state_tracker/st_atom_texture.c
+++ b/src/mesa/state_tracker/st_atom_texture.c
@@ -106,7 +106,7 @@ update_textures(struct st_context *st,
struct pipe_context *pipe = st->pipe;
const GLuint old_max = st->state.num_sampler_views[shader_stage];
GLbitfield samplers_used = prog->SamplersUsed;
- GLbitfield texel_fetch_samplers = prog->info.textures_used_by_txf;
+ GLbitfield texel_fetch_samplers = prog->info.textures_used_by_txf[0];
GLbitfield free_slots = ~prog->SamplersUsed;
GLbitfield external_samplers_used = prog->ExternalSamplersUsed;
GLuint unit;
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 2af4e70d63a..384738cb3bf 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -968,8 +968,8 @@ st_nir_lower_samplers(struct pipe_screen *screen, nir_shader *nir,
NIR_PASS_V(nir, gl_nir_lower_samplers, shader_program);
if (prog) {
- prog->info.textures_used = nir->info.textures_used;
- prog->info.textures_used_by_txf = nir->info.textures_used_by_txf;
+ BITSET_COPY(prog->info.textures_used, nir->info.textures_used);
+ BITSET_COPY(prog->info.textures_used_by_txf, nir->info.textures_used_by_txf);
prog->info.images_used = nir->info.images_used;
}
}
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index b3fa53cb141..96c1f93c474 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -4868,7 +4868,7 @@ count_resources(glsl_to_tgsi_visitor *v, gl_program *prog)
{
v->samplers_used = 0;
v->images_used = 0;
- prog->info.textures_used_by_txf = 0;
+ BITSET_ZERO(prog->info.textures_used_by_txf);
foreach_in_list(glsl_to_tgsi_instruction, inst, &v->instructions) {
if (inst->info->is_tex) {
@@ -4882,7 +4882,7 @@ count_resources(glsl_to_tgsi_visitor *v, gl_program *prog)
st_translate_texture_target(inst->tex_target, inst->tex_shadow);
if (inst->op == TGSI_OPCODE_TXF || inst->op == TGSI_OPCODE_TXF_LZ) {
- prog->info.textures_used_by_txf |= 1u << idx;
+ BITSET_SET(prog->info.textures_used_by_txf, idx);
}
}
}
diff --git a/src/mesa/state_tracker/st_nir_lower_tex_src_plane.c b/src/mesa/state_tracker/st_nir_lower_tex_src_plane.c
index 2697c1460b2..1701a646cf5 100644
--- a/src/mesa/state_tracker/st_nir_lower_tex_src_plane.c
+++ b/src/mesa/state_tracker/st_nir_lower_tex_src_plane.c
@@ -129,7 +129,7 @@ lower_tex_src_plane_block(nir_builder *b, lower_tex_src_state *state, nir_block
tex->texture_index = tex->sampler_index =
state->sampler_map[y_samp][plane[0].i32 - 1];
- state->shader->info.textures_used |= 1u << tex->texture_index;
+ BITSET_SET(state->shader->info.textures_used, tex->texture_index);
/* For drivers using PIPE_CAP_NIR_SAMPLERS_AS_DEREF, we need
* to reference the correct sampler nir variable.
More information about the mesa-commit
mailing list