mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-24 00:40:36 +02:00
nir/spirv: Better handle constant offsets in texture lookups
This commit is contained in:
parent
209820739b
commit
1d65abfa58
1 changed files with 13 additions and 2 deletions
|
|
@ -1287,6 +1287,8 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
|||
unreachable("Unhandled opcode");
|
||||
}
|
||||
|
||||
nir_constant *const_offset = NULL;
|
||||
|
||||
/* Now we need to handle some number of optional arguments */
|
||||
if (idx < count) {
|
||||
uint32_t operands = w[idx++];
|
||||
|
|
@ -1310,8 +1312,12 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
|||
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_ddy);
|
||||
}
|
||||
|
||||
if (operands & SpvImageOperandsOffsetMask ||
|
||||
operands & SpvImageOperandsConstOffsetMask)
|
||||
if (operands & SpvImageOperandsConstOffsetMask) {
|
||||
const_offset =
|
||||
vtn_value(b, w[idx++], vtn_value_type_constant)->constant;
|
||||
}
|
||||
|
||||
if (operands & SpvImageOperandsOffsetMask)
|
||||
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_offset);
|
||||
|
||||
if (operands & SpvImageOperandsConstOffsetsMask)
|
||||
|
|
@ -1343,6 +1349,11 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
|||
instr->is_shadow = glsl_sampler_type_is_shadow(image_type);
|
||||
instr->is_new_style_shadow = instr->is_shadow;
|
||||
|
||||
if (const_offset) {
|
||||
for (unsigned i = 0; i < 4; i++)
|
||||
instr->const_offset[i] = const_offset->value.u[i];
|
||||
}
|
||||
|
||||
if (has_coord) {
|
||||
switch (instr->sampler_dim) {
|
||||
case GLSL_SAMPLER_DIM_1D:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue