llvmpipe: enable stencil only formats. (v2)
authorDave Airlie <airlied@redhat.com>
Tue, 3 Dec 2019 06:01:37 +0000 (16:01 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 27 Apr 2020 02:35:24 +0000 (12:35 +1000)
This fixes two bugs, one in clearing and one in sign extensions
for S8 only types, and enables it for use.

These are useful for vulkan support later.

v2: move casting to same place as Z casting.

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

src/gallium/drivers/llvmpipe/lp_bld_depth.c
src/gallium/drivers/llvmpipe/lp_rast.c
src/gallium/drivers/llvmpipe/lp_screen.c

index 63c2fb5d891757c073e8fa4ca8f1e9c28bca8b80..3e8b6936b01a8312480a4a0974b1888754cd04f2 100644 (file)
@@ -599,6 +599,12 @@ lp_build_depth_stencil_load_swizzled(struct gallivm_state *gallivm,
                                   LLVMConstVector(shuffles, zs_type.length), "");
    *s_fb = *z_fb;
 
+   if (format_desc->block.bits == 8) {
+      /* Extend stencil-only 8 bit values (S8_UINT) */
+      *s_fb = LLVMBuildZExt(builder, *s_fb,
+                            lp_build_int_vec_type(gallivm, z_src_type), "");
+   }
+
    if (format_desc->block.bits < z_src_type.width) {
       /* Extend destination ZS values (e.g., when reading from Z16_UNORM) */
       *z_fb = LLVMBuildZExt(builder, *z_fb,
index ad55ed7be79e0d21448d86c00119f741a47fbfcf..3d335e2ad383e9c0d4dc94f7abd9fcd45c64ebab 100644 (file)
@@ -211,7 +211,11 @@ lp_rast_clear_zstencil(struct lp_rasterizer_task *task,
          switch (block_size) {
          case 1:
             assert(clear_mask == 0xff);
-            memset(dst, (uint8_t) clear_value, height * width);
+            for (i = 0; i < height; i++) {
+               uint8_t *row = (uint8_t *)dst;
+               memset(row, (uint8_t) clear_value, width);
+               dst += dst_stride;
+            }
             break;
          case 2:
             if (clear_mask == 0xffff) {
index 9b691e819b1b257b55e0cd0b70c74616aa81996b..d6ba3e32852ebf35f36ce38f6f22f090dc394e48 100644 (file)
@@ -733,11 +733,6 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
 
       if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
          return false;
-
-      /* TODO: Support stencil-only formats */
-      if (format_desc->swizzle[0] == PIPE_SWIZZLE_NONE) {
-         return false;
-      }
    }
 
    if (format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC ||