radv: Add noatocdithering option to RADV_DEBUG
authorJoshua Ashton <joshua@froggi.es>
Mon, 27 Sep 2021 21:41:23 +0000 (22:41 +0100)
committerMarge Bot <eric+marge@anholt.net>
Tue, 28 Sep 2021 17:06:36 +0000 (17:06 +0000)
Was useful in testing a difference between D3D and VK ATOC rendering earlier today, would be nice to check this more easily in future.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13069>

docs/envvars.rst
src/amd/vulkan/radv_debug.h
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_pipeline.c

index 16a83d2..04b4e63 100644 (file)
@@ -581,6 +581,8 @@ RADV driver environment variables
       class of application bugs appearing as flickering.
    ``metashaders``
       dump internal meta shaders
+   ``noatocdithering``
+      disable dithering for alpha to coverage
    ``nobinning``
       disable primitive binning
    ``nocache``
index 5a0f295..df50965 100644 (file)
@@ -62,6 +62,7 @@ enum {
    RADV_DEBUG_NO_DISPLAY_DCC = 1ull << 31,
    RADV_DEBUG_NO_TC_COMPAT_CMASK = 1ull << 32,
    RADV_DEBUG_NO_VRS_FLAT_SHADING = 1ull << 33,
+   RADV_DEBUG_NO_ATOC_DITHERING = 1ull << 34,
 };
 
 enum {
index aee372a..f62379b 100644 (file)
@@ -823,6 +823,7 @@ static const struct debug_control radv_debug_options[] = {
    {"nodisplaydcc", RADV_DEBUG_NO_DISPLAY_DCC},
    {"notccompatcmask", RADV_DEBUG_NO_TC_COMPAT_CMASK},
    {"novrsflatshading", RADV_DEBUG_NO_VRS_FLAT_SHADING},
+   {"noatocdithering", RADV_DEBUG_NO_ATOC_DITHERING},
    {NULL, 0}};
 
 const char *
index 9e2f610..29e23bb 100644 (file)
@@ -639,9 +639,18 @@ radv_pipeline_init_blend_state(struct radv_pipeline *pipeline,
          cb_color_control |= S_028808_ROP3(V_028808_ROP3_COPY);
    }
 
-   blend.db_alpha_to_mask = S_028B70_ALPHA_TO_MASK_OFFSET0(3) | S_028B70_ALPHA_TO_MASK_OFFSET1(1) |
-                            S_028B70_ALPHA_TO_MASK_OFFSET2(0) | S_028B70_ALPHA_TO_MASK_OFFSET3(2) |
-                            S_028B70_OFFSET_ROUND(1);
+   if (pipeline->device->instance->debug_flags & RADV_DEBUG_NO_ATOC_DITHERING)
+   {
+      blend.db_alpha_to_mask = S_028B70_ALPHA_TO_MASK_OFFSET0(2) | S_028B70_ALPHA_TO_MASK_OFFSET1(2) |
+                               S_028B70_ALPHA_TO_MASK_OFFSET2(2) | S_028B70_ALPHA_TO_MASK_OFFSET3(2) |
+                               S_028B70_OFFSET_ROUND(0);
+   }
+   else
+   {
+      blend.db_alpha_to_mask = S_028B70_ALPHA_TO_MASK_OFFSET0(3) | S_028B70_ALPHA_TO_MASK_OFFSET1(1) |
+                               S_028B70_ALPHA_TO_MASK_OFFSET2(0) | S_028B70_ALPHA_TO_MASK_OFFSET3(2) |
+                               S_028B70_OFFSET_ROUND(1);
+   }
 
    if (vkms && vkms->alphaToCoverageEnable) {
       blend.db_alpha_to_mask |= S_028B70_ALPHA_TO_MASK_ENABLE(1);