summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2021-07-21 16:52:35 -0500
committerJason Ekstrand <jason@jlekstrand.net>2021-07-22 14:22:35 -0500
commit17f7b4b83e1f6573f7d261aae299c133f3bed7c7 (patch)
treea09ecca9327cad5b1ef2b9c88d2a388d8cc77282
parente83fe65cd8aa503f567bb13500058130fad856af (diff)
turnip: Replace tu_lower_image_size with nir_lower_image
Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12005>
-rw-r--r--src/freedreno/vulkan/tu_shader.c49
1 files changed, 4 insertions, 45 deletions
diff --git a/src/freedreno/vulkan/tu_shader.c b/src/freedreno/vulkan/tu_shader.c
index 25d720b3574..1530d07c296 100644
--- a/src/freedreno/vulkan/tu_shader.c
+++ b/src/freedreno/vulkan/tu_shader.c
@@ -684,50 +684,6 @@ tu_lower_io(nir_shader *shader, struct tu_shader *tu_shader,
return progress;
}
-static bool
-lower_image_size_filter(const nir_instr *instr, UNUSED const void *data)
-{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
- if(intrin->intrinsic != nir_intrinsic_bindless_image_size)
- return false;
-
- return (intrin->num_components == 3 && nir_intrinsic_image_dim(intrin) == GLSL_SAMPLER_DIM_CUBE);
-}
-
-/* imageSize() expects the last component of the return value to be the
- * number of layers in the texture array. In the case of cube map array,
- * it will return a ivec3, with the third component being the number of
- * layer-faces. Therefore, we need to divide it by 6 (# faces of the
- * cube map).
- */
-static nir_ssa_def *
-lower_image_size_lower(nir_builder *b, nir_instr *instr, UNUSED void *data)
-{
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
- b->cursor = nir_after_instr(&intrin->instr);
- nir_ssa_def *channels[NIR_MAX_VEC_COMPONENTS];
- for (unsigned i = 0; i < intrin->num_components; i++) {
- channels[i] = nir_vector_extract(b, &intrin->dest.ssa, nir_imm_int(b, i));
- }
-
- channels[2] = nir_idiv(b, channels[2], nir_imm_int(b, 6u));
- nir_ssa_def *result = nir_vec(b, channels, intrin->num_components);
-
- return result;
-}
-
-static bool
-tu_lower_image_size(nir_shader *shader)
-{
- return nir_shader_lower_instructions(shader,
- lower_image_size_filter,
- lower_image_size_lower,
- NULL);
-}
-
static void
shared_type_info(const struct glsl_type *type, unsigned *size, unsigned *align)
{
@@ -856,7 +812,10 @@ tu_shader_create(struct tu_device *dev,
NIR_PASS_V(nir, tu_lower_io, shader, layout);
- NIR_PASS_V(nir, tu_lower_image_size);
+ nir_lower_image_options lower_image_opts = {
+ .lower_cube_size = true,
+ };
+ NIR_PASS_V(nir, nir_lower_image, &lower_image_opts);
nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));