llvmpipe: Allow comparison sampling for float formats
authorKonstantin Seurer <konstantin.seurer@gmail.com>
Tue, 4 Jul 2023 16:24:30 +0000 (18:24 +0200)
committerMarge Bot <emma+marge@anholt.net>
Wed, 5 Jul 2023 20:52:06 +0000 (20:52 +0000)
Fixes test_gather_c (vkd3d-proton).

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23996>

src/gallium/drivers/llvmpipe/lp_texture_handle.c

index 7977e3f..7c96666 100644 (file)
@@ -343,8 +343,15 @@ compile_sample_function(struct llvmpipe_context *ctx, struct lp_static_texture_s
          if ((sampler->compare_mode == PIPE_TEX_COMPARE_NONE) == !!(sample_key & LP_SAMPLER_SHADOW))
             return NULL;
 
+      /* Skip integer formats which would cause a type mismatch in the compare function. */
       const struct util_format_description *desc = util_format_description(texture->format);
-      if ((sample_key & LP_SAMPLER_SHADOW) && !util_format_has_depth(desc))
+      struct lp_type texel_type = {
+         .floating = true,
+         .width = 32,
+         .length = 1,
+      };
+      texel_type = lp_build_texel_type(texel_type, desc);
+      if ((sample_key & LP_SAMPLER_SHADOW) && !texel_type.floating)
          return NULL;
 
       if (texture_dims(texture->target) != 2 && op_type == LP_SAMPLER_OP_GATHER)