aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-07-21 11:47:44 -0700
committerJason Ekstrand <[email protected]>2016-07-22 16:48:54 -0700
commit561be50a1ac63cd2f157cf6d305569e5a33f12da (patch)
tree7a7104fc9be2c6c8d60ab16e0131e33287743416 /src/compiler
parentc8da91aa243dd5dcb4b529ce5be15b45384a50d2 (diff)
spirv/nir: Move opcode selection higher up in handle_texture
Signed-off-by: Jason Ekstrand <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Cc: "12.0" <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/spirv/spirv_to_nir.c96
1 files changed, 48 insertions, 48 deletions
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 6654f5f7c6d..a0aeadfc7a1 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -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++];