mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-21 16:30:29 +01:00
spirv/nir: Move opcode selection higher up in handle_texture
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Cc: "12.0" <mesa-dev@lists.freedesktop.org>
This commit is contained in:
parent
c8da91aa24
commit
561be50a1a
1 changed files with 48 additions and 48 deletions
|
|
@ -1336,6 +1336,54 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
|||
image_type = sampled.sampler->var->var->interface_type;
|
||||
}
|
||||
|
||||
/* Figure out the base texture operation */
|
||||
nir_texop texop;
|
||||
switch (opcode) {
|
||||
case SpvOpImageSampleImplicitLod:
|
||||
case SpvOpImageSampleDrefImplicitLod:
|
||||
case SpvOpImageSampleProjImplicitLod:
|
||||
case SpvOpImageSampleProjDrefImplicitLod:
|
||||
texop = nir_texop_tex;
|
||||
break;
|
||||
|
||||
case SpvOpImageSampleExplicitLod:
|
||||
case SpvOpImageSampleDrefExplicitLod:
|
||||
case SpvOpImageSampleProjExplicitLod:
|
||||
case SpvOpImageSampleProjDrefExplicitLod:
|
||||
texop = nir_texop_txl;
|
||||
break;
|
||||
|
||||
case SpvOpImageFetch:
|
||||
if (glsl_get_sampler_dim(image_type) == GLSL_SAMPLER_DIM_MS) {
|
||||
texop = nir_texop_txf_ms;
|
||||
} else {
|
||||
texop = nir_texop_txf;
|
||||
}
|
||||
break;
|
||||
|
||||
case SpvOpImageGather:
|
||||
case SpvOpImageDrefGather:
|
||||
texop = nir_texop_tg4;
|
||||
break;
|
||||
|
||||
case SpvOpImageQuerySizeLod:
|
||||
case SpvOpImageQuerySize:
|
||||
texop = nir_texop_txs;
|
||||
break;
|
||||
|
||||
case SpvOpImageQueryLod:
|
||||
texop = nir_texop_lod;
|
||||
break;
|
||||
|
||||
case SpvOpImageQueryLevels:
|
||||
texop = nir_texop_query_levels;
|
||||
break;
|
||||
|
||||
case SpvOpImageQuerySamples:
|
||||
default:
|
||||
unreachable("Unhandled opcode");
|
||||
}
|
||||
|
||||
nir_tex_src srcs[8]; /* 8 should be enough */
|
||||
nir_tex_src *p = srcs;
|
||||
|
||||
|
|
@ -1393,54 +1441,6 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
|||
if (opcode == SpvOpImageQuerySizeLod)
|
||||
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_lod);
|
||||
|
||||
/* Figure out the base texture operation */
|
||||
nir_texop texop;
|
||||
switch (opcode) {
|
||||
case SpvOpImageSampleImplicitLod:
|
||||
case SpvOpImageSampleDrefImplicitLod:
|
||||
case SpvOpImageSampleProjImplicitLod:
|
||||
case SpvOpImageSampleProjDrefImplicitLod:
|
||||
texop = nir_texop_tex;
|
||||
break;
|
||||
|
||||
case SpvOpImageSampleExplicitLod:
|
||||
case SpvOpImageSampleDrefExplicitLod:
|
||||
case SpvOpImageSampleProjExplicitLod:
|
||||
case SpvOpImageSampleProjDrefExplicitLod:
|
||||
texop = nir_texop_txl;
|
||||
break;
|
||||
|
||||
case SpvOpImageFetch:
|
||||
if (glsl_get_sampler_dim(image_type) == GLSL_SAMPLER_DIM_MS) {
|
||||
texop = nir_texop_txf_ms;
|
||||
} else {
|
||||
texop = nir_texop_txf;
|
||||
}
|
||||
break;
|
||||
|
||||
case SpvOpImageGather:
|
||||
case SpvOpImageDrefGather:
|
||||
texop = nir_texop_tg4;
|
||||
break;
|
||||
|
||||
case SpvOpImageQuerySizeLod:
|
||||
case SpvOpImageQuerySize:
|
||||
texop = nir_texop_txs;
|
||||
break;
|
||||
|
||||
case SpvOpImageQueryLod:
|
||||
texop = nir_texop_lod;
|
||||
break;
|
||||
|
||||
case SpvOpImageQueryLevels:
|
||||
texop = nir_texop_query_levels;
|
||||
break;
|
||||
|
||||
case SpvOpImageQuerySamples:
|
||||
default:
|
||||
unreachable("Unhandled opcode");
|
||||
}
|
||||
|
||||
/* Now we need to handle some number of optional arguments */
|
||||
if (idx < count) {
|
||||
uint32_t operands = w[idx++];
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue