From 0b121cb89ab86ee2c0cf23584a3660b2f05a3764 Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Wed, 31 Jul 2019 21:17:05 -0400 Subject: tgsi_to_nir: make setup_texture_info reusable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-By: Timur Kristóf Reviewed-by: Eric Anholt --- src/gallium/auxiliary/nir/tgsi_to_nir.c | 84 +++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index 9e93f84855e..5f5acde30ba 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -1155,76 +1155,85 @@ ttn_endloop(struct ttn_compile *c) } static void -setup_texture_info(nir_tex_instr *instr, unsigned texture) +get_texture_info(unsigned texture, + enum glsl_sampler_dim *dim, + bool *is_shadow, + bool *is_array) { + assert(is_array); + *is_array = false; + + if (is_shadow) + *is_shadow = false; + switch (texture) { case TGSI_TEXTURE_BUFFER: - instr->sampler_dim = GLSL_SAMPLER_DIM_BUF; + *dim = GLSL_SAMPLER_DIM_BUF; break; case TGSI_TEXTURE_1D: - instr->sampler_dim = GLSL_SAMPLER_DIM_1D; + *dim = GLSL_SAMPLER_DIM_1D; break; case TGSI_TEXTURE_1D_ARRAY: - instr->sampler_dim = GLSL_SAMPLER_DIM_1D; - instr->is_array = true; + *dim = GLSL_SAMPLER_DIM_1D; + *is_array = true; break; case TGSI_TEXTURE_SHADOW1D: - instr->sampler_dim = GLSL_SAMPLER_DIM_1D; - instr->is_shadow = true; + *dim = GLSL_SAMPLER_DIM_1D; + *is_shadow = true; break; case TGSI_TEXTURE_SHADOW1D_ARRAY: - instr->sampler_dim = GLSL_SAMPLER_DIM_1D; - instr->is_shadow = true; - instr->is_array = true; + *dim = GLSL_SAMPLER_DIM_1D; + *is_shadow = true; + *is_array = true; break; case TGSI_TEXTURE_2D: - instr->sampler_dim = GLSL_SAMPLER_DIM_2D; + *dim = GLSL_SAMPLER_DIM_2D; break; case TGSI_TEXTURE_2D_ARRAY: - instr->sampler_dim = GLSL_SAMPLER_DIM_2D; - instr->is_array = true; + *dim = GLSL_SAMPLER_DIM_2D; + *is_array = true; break; case TGSI_TEXTURE_2D_MSAA: - instr->sampler_dim = GLSL_SAMPLER_DIM_MS; + *dim = GLSL_SAMPLER_DIM_MS; break; case TGSI_TEXTURE_2D_ARRAY_MSAA: - instr->sampler_dim = GLSL_SAMPLER_DIM_MS; - instr->is_array = true; + *dim = GLSL_SAMPLER_DIM_MS; + *is_array = true; break; case TGSI_TEXTURE_SHADOW2D: - instr->sampler_dim = GLSL_SAMPLER_DIM_2D; - instr->is_shadow = true; + *dim = GLSL_SAMPLER_DIM_2D; + *is_shadow = true; break; case TGSI_TEXTURE_SHADOW2D_ARRAY: - instr->sampler_dim = GLSL_SAMPLER_DIM_2D; - instr->is_shadow = true; - instr->is_array = true; + *dim = GLSL_SAMPLER_DIM_2D; + *is_shadow = true; + *is_array = true; break; case TGSI_TEXTURE_3D: - instr->sampler_dim = GLSL_SAMPLER_DIM_3D; + *dim = GLSL_SAMPLER_DIM_3D; break; case TGSI_TEXTURE_CUBE: - instr->sampler_dim = GLSL_SAMPLER_DIM_CUBE; + *dim = GLSL_SAMPLER_DIM_CUBE; break; case TGSI_TEXTURE_CUBE_ARRAY: - instr->sampler_dim = GLSL_SAMPLER_DIM_CUBE; - instr->is_array = true; + *dim = GLSL_SAMPLER_DIM_CUBE; + *is_array = true; break; case TGSI_TEXTURE_SHADOWCUBE: - instr->sampler_dim = GLSL_SAMPLER_DIM_CUBE; - instr->is_shadow = true; + *dim = GLSL_SAMPLER_DIM_CUBE; + *is_shadow = true; break; case TGSI_TEXTURE_SHADOWCUBE_ARRAY: - instr->sampler_dim = GLSL_SAMPLER_DIM_CUBE; - instr->is_shadow = true; - instr->is_array = true; + *dim = GLSL_SAMPLER_DIM_CUBE; + *is_shadow = true; + *is_array = true; break; case TGSI_TEXTURE_RECT: - instr->sampler_dim = GLSL_SAMPLER_DIM_RECT; + *dim = GLSL_SAMPLER_DIM_RECT; break; case TGSI_TEXTURE_SHADOWRECT: - instr->sampler_dim = GLSL_SAMPLER_DIM_RECT; - instr->is_shadow = true; + *dim = GLSL_SAMPLER_DIM_RECT; + *is_shadow = true; break; default: fprintf(stderr, "Unknown TGSI texture target %d\n", texture); @@ -1354,7 +1363,8 @@ ttn_tex(struct ttn_compile *c, nir_alu_dest dest, nir_ssa_def **src) instr = nir_tex_instr_create(b->shader, num_srcs); instr->op = op; - setup_texture_info(instr, tgsi_inst->Texture.Texture); + get_texture_info(tgsi_inst->Texture.Texture, + &instr->sampler_dim, &instr->is_shadow, &instr->is_array); switch (instr->sampler_dim) { case GLSL_SAMPLER_DIM_1D: @@ -1544,11 +1554,13 @@ ttn_txq(struct ttn_compile *c, nir_alu_dest dest, nir_ssa_def **src) txs = nir_tex_instr_create(b->shader, 2); txs->op = nir_texop_txs; - setup_texture_info(txs, tgsi_inst->Texture.Texture); + get_texture_info(tgsi_inst->Texture.Texture, + &txs->sampler_dim, &txs->is_shadow, &txs->is_array); qlv = nir_tex_instr_create(b->shader, 1); qlv->op = nir_texop_query_levels; - setup_texture_info(qlv, tgsi_inst->Texture.Texture); + get_texture_info(tgsi_inst->Texture.Texture, + &qlv->sampler_dim, &qlv->is_shadow, &qlv->is_array); assert(tgsi_inst->Src[1].Register.File == TGSI_FILE_SAMPLER); int tex_index = tgsi_inst->Src[1].Register.Index; -- cgit v1.2.3