freedreno: Reuse glsl_get_sampler_coordinate_components().
authorEric Anholt <eric@anholt.net>
Wed, 15 May 2019 00:18:40 +0000 (17:18 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 4 Jun 2019 23:44:24 +0000 (16:44 -0700)
We have the GLSL type, so we can just ask it how many coordinates there
are.  The GLSL function already has Vulkan cases that we'd probably want
eventually.

Reviewed-by: Rob Clark <robdclark@gmail.com>
src/freedreno/ir3/ir3_image.c

index 835b5381d233ff9b9d323fe05f16cc8f61e100b9..bb852dc25f5bbf295090d46d85b3b91ec324e57e 100644 (file)
@@ -120,34 +120,14 @@ unsigned
 ir3_get_image_coords(const nir_variable *var, unsigned *flagsp)
 {
        const struct glsl_type *type = glsl_without_array(var->type);
-       unsigned coords, flags = 0;
-
-       switch (glsl_get_sampler_dim(type)) {
-       case GLSL_SAMPLER_DIM_1D:
-       case GLSL_SAMPLER_DIM_BUF:
-               coords = 1;
-               break;
-       case GLSL_SAMPLER_DIM_2D:
-       case GLSL_SAMPLER_DIM_RECT:
-       case GLSL_SAMPLER_DIM_EXTERNAL:
-       case GLSL_SAMPLER_DIM_MS:
-               coords = 2;
-               break;
-       case GLSL_SAMPLER_DIM_3D:
-       case GLSL_SAMPLER_DIM_CUBE:
+       unsigned coords = glsl_get_sampler_coordinate_components(type);
+       unsigned flags = 0;
+
+       if (coords == 3)
                flags |= IR3_INSTR_3D;
-               coords = 3;
-               break;
-       default:
-               unreachable("bad sampler dim");
-               return 0;
-       }
 
-       if (glsl_sampler_type_is_array(type)) {
-               /* note: unlike tex_info(), adjust # of coords to include array idx: */
-               coords++;
+       if (glsl_sampler_type_is_array(type))
                flags |= IR3_INSTR_A;
-       }
 
        if (flagsp)
                *flagsp = flags;