radv: make sure to set CB_SHADER_MASK correctly for internal CB operations
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 11 Jun 2020 13:39:46 +0000 (15:39 +0200)
committerMarge Bot <eric+marge@anholt.net>
Thu, 18 Jun 2020 09:16:04 +0000 (09:16 +0000)
It should be always set to 0xf.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5427>

src/amd/vulkan/radv_pipeline.c

index f636529..76244ec 100644 (file)
@@ -5119,6 +5119,17 @@ radv_pipeline_init(struct radv_pipeline *pipeline,
                        blend.spi_shader_col_format = V_028714_SPI_SHADER_32_R;
        }
 
+       if (extra &&
+           (extra->custom_blend_mode == V_028808_CB_ELIMINATE_FAST_CLEAR ||
+            extra->custom_blend_mode == V_028808_CB_FMASK_DECOMPRESS ||
+            extra->custom_blend_mode == V_028808_CB_DCC_DECOMPRESS ||
+            extra->custom_blend_mode == V_028808_CB_RESOLVE)) {
+               /* According to the CB spec states, CB_SHADER_MASK should be
+                * set to enable writes to all four channels of MRT0.
+                */
+               blend.cb_shader_mask = 0xf;
+       }
+
        for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
                if (pipeline->shaders[i]) {
                        pipeline->need_indirect_descriptor_sets |= pipeline->shaders[i]->info.need_indirect_descriptor_sets;