pan/bi: Extend bi_emit_texc() to support wider direct tex/sampler idx
The current code was doing some assumptions on the maximum texture/sampler sizes which no longer stand with panvk. Add explicit range checks on the direct texture/sampler_index. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28417>
This commit is contained in:
committed by
Marge Bot
parent
feffe7fd2a
commit
f1d8a65d7f
@@ -3460,7 +3460,8 @@ bi_emit_texc(bi_builder *b, nir_tex_instr *instr)
|
||||
bool direct_samp = bi_is_null(dregs[BIFROST_TEX_DREG_SAMPLER]);
|
||||
bool direct = direct_tex && direct_samp;
|
||||
|
||||
desc.immediate_indices = direct && (instr->sampler_index < 16);
|
||||
desc.immediate_indices =
|
||||
direct && (instr->sampler_index < 16 && instr->texture_index < 128);
|
||||
|
||||
if (desc.immediate_indices) {
|
||||
desc.sampler_index_or_mode = instr->sampler_index;
|
||||
@@ -3468,24 +3469,43 @@ bi_emit_texc(bi_builder *b, nir_tex_instr *instr)
|
||||
} else {
|
||||
unsigned mode = 0;
|
||||
|
||||
if (direct && instr->sampler_index == instr->texture_index) {
|
||||
if (direct && instr->sampler_index == instr->texture_index &&
|
||||
instr->sampler_index < 128) {
|
||||
mode = BIFROST_INDEX_IMMEDIATE_SHARED;
|
||||
desc.index = instr->texture_index;
|
||||
} else if (direct) {
|
||||
} else if (direct && instr->sampler_index < 128) {
|
||||
mode = BIFROST_INDEX_IMMEDIATE_SAMPLER;
|
||||
desc.index = instr->sampler_index;
|
||||
dregs[BIFROST_TEX_DREG_TEXTURE] =
|
||||
bi_mov_i32(b, bi_imm_u32(instr->texture_index));
|
||||
} else if (direct_tex) {
|
||||
assert(!direct_samp);
|
||||
} else if (direct_tex && instr->texture_index < 128) {
|
||||
mode = BIFROST_INDEX_IMMEDIATE_TEXTURE;
|
||||
desc.index = instr->texture_index;
|
||||
} else if (direct_samp) {
|
||||
assert(!direct_tex);
|
||||
|
||||
if (direct_samp) {
|
||||
dregs[BIFROST_TEX_DREG_SAMPLER] =
|
||||
bi_mov_i32(b, bi_imm_u32(instr->sampler_index));
|
||||
}
|
||||
} else if (direct_samp && instr->sampler_index < 128) {
|
||||
mode = BIFROST_INDEX_IMMEDIATE_SAMPLER;
|
||||
desc.index = instr->sampler_index;
|
||||
|
||||
if (direct_tex) {
|
||||
dregs[BIFROST_TEX_DREG_TEXTURE] =
|
||||
bi_mov_i32(b, bi_imm_u32(instr->texture_index));
|
||||
}
|
||||
} else {
|
||||
mode = BIFROST_INDEX_REGISTER;
|
||||
|
||||
if (direct_tex) {
|
||||
dregs[BIFROST_TEX_DREG_TEXTURE] =
|
||||
bi_mov_i32(b, bi_imm_u32(instr->texture_index));
|
||||
}
|
||||
|
||||
if (direct_samp) {
|
||||
dregs[BIFROST_TEX_DREG_SAMPLER] =
|
||||
bi_mov_i32(b, bi_imm_u32(instr->sampler_index));
|
||||
}
|
||||
}
|
||||
|
||||
mode |= (BIFROST_TEXTURE_OPERATION_SINGLE << 2);
|
||||
|
||||
Reference in New Issue
Block a user