Mesa (master): gallivm: use common code to select texel type

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Aug 31 03:35:23 UTC 2020


Module: Mesa
Branch: master
Commit: 727bb217be680ba7de4e8821fbe409921952cd93
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=727bb217be680ba7de4e8821fbe409921952cd93

Author: Dave Airlie <airlied at redhat.com>
Date:   Mon Aug 31 10:22:35 2020 +1000

gallivm: use common code to select texel type

This was suggested by Roland, and fixes stencil images.

Fixes:
dEQP-VK.renderpass.dedicated_allocation.formats.d24_unorm_s8_uint.*
dEQP-VK.renderpass.dedicated_allocation.formats.d32_sfloat_s8_uint.*

Reviewed-by: Roland Scheidegger <sroland at vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6381>

---

 src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c | 60 ++++++++++-------------
 1 file changed, 25 insertions(+), 35 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
index 0f0c2fade21..f3ec99139db 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
@@ -2770,6 +2770,29 @@ lp_build_sample_nop(struct gallivm_state *gallivm,
    }  
 }
 
+static struct lp_type
+lp_build_texel_type(struct lp_type texel_type,
+                    const struct util_format_description *format_desc)
+{
+   /* always using the first channel hopefully should be safe,
+    * if not things WILL break in other places anyway.
+    */
+   if (format_desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB &&
+       format_desc->channel[0].pure_integer) {
+      if (format_desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
+         texel_type = lp_type_int_vec(texel_type.width, texel_type.width * texel_type.length);
+      } else if (format_desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {
+         texel_type = lp_type_uint_vec(texel_type.width, texel_type.width * texel_type.length);
+      }
+   }
+   else if (util_format_has_stencil(format_desc) &&
+       !util_format_has_depth(format_desc)) {
+      /* for stencil only formats, sample stencil (uint) */
+      texel_type = lp_type_uint_vec(texel_type.width, texel_type.width * texel_type.length);
+   }
+   return texel_type;
+}
+
 
 /**
  * Build the actual texture sampling code.
@@ -2893,25 +2916,8 @@ lp_build_sample_soa_code(struct gallivm_state *gallivm,
    bld.float_size_in_type = lp_type_float(32);
    bld.float_size_in_type.length = dims > 1 ? 4 : 1;
    bld.int_size_in_type = lp_int_type(bld.float_size_in_type);
-   bld.texel_type = type;
 
-   /* always using the first channel hopefully should be safe,
-    * if not things WILL break in other places anyway.
-    */
-   if (bld.format_desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB &&
-       bld.format_desc->channel[0].pure_integer) {
-      if (bld.format_desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
-         bld.texel_type = lp_type_int_vec(type.width, type.width * type.length);
-      }
-      else if (bld.format_desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {
-         bld.texel_type = lp_type_uint_vec(type.width, type.width * type.length);
-      }
-   }
-   else if (util_format_has_stencil(bld.format_desc) &&
-       !util_format_has_depth(bld.format_desc)) {
-      /* for stencil only formats, sample stencil (uint) */
-      bld.texel_type = lp_type_uint_vec(type.width, type.width * type.length);
-   }
+   bld.texel_type = lp_build_texel_type(type, bld.format_desc);
 
    if (!static_texture_state->level_zero_only ||
        !static_sampler_state->max_lod_pos || op_is_lodq) {
@@ -4126,22 +4132,6 @@ lp_build_img_op_no_format(struct gallivm_state *gallivm,
    }
 }
 
-static struct lp_type
-lp_build_img_texel_type(struct gallivm_state *gallivm,
-                        struct lp_type texel_type,
-                        const struct util_format_description *format_desc)
-{
-   if (format_desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB &&
-       format_desc->channel[0].pure_integer) {
-      if (format_desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
-         texel_type = lp_type_int_vec(texel_type.width, texel_type.width * texel_type.length);
-      } else if (format_desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {
-         texel_type = lp_type_uint_vec(texel_type.width, texel_type.width * texel_type.length);
-      }
-   }
-   return texel_type;
-}
-
 void
 lp_build_img_op_soa(const struct lp_static_texture_state *static_texture_state,
                     struct lp_sampler_dynamic_state *dynamic_state,
@@ -4228,7 +4218,7 @@ lp_build_img_op_soa(const struct lp_static_texture_state *static_texture_state,
                                          ms_index));
    }
    if (params->img_op == LP_IMG_LOAD) {
-      struct lp_type texel_type = lp_build_img_texel_type(gallivm, params->type, format_desc);
+      struct lp_type texel_type = lp_build_texel_type(params->type, format_desc);
 
       offset = lp_build_andnot(&int_coord_bld, offset, out_of_bounds);
       struct lp_build_context texel_bld;



More information about the mesa-commit mailing list