radv: fix invalid conversion warnings in vk_format.h
[mesa.git] / src / amd / vulkan / radv_shader_info.c
index 62a5f170f7cf4e68f660882bb65561576fa5da86..eca46c811578c44fa102fced0c278fd26190832c 100644 (file)
@@ -846,6 +846,18 @@ radv_nir_shader_info_pass(const struct nir_shader *nir,
        info->float_controls_mode = nir->info.float_controls_execution_mode;
 
        if (nir->info.stage == MESA_SHADER_FRAGMENT) {
+               /* If the i-th output is used, all previous outputs must be
+                * non-zero to match the target format.
+                * TODO: compact MRT to avoid holes and to remove this
+                * workaround.
+                */
+               unsigned num_targets = (util_last_bit(info->ps.cb_shader_mask) + 3) / 4;
+               for (unsigned i = 0; i < num_targets; i++) {
+                       if (!(info->ps.cb_shader_mask & (0xf << (i * 4)))) {
+                               info->ps.cb_shader_mask |= 0xf << (i * 4);
+                       }
+               }
+
                if (key->fs.is_dual_src) {
                        info->ps.cb_shader_mask |= (info->ps.cb_shader_mask & 0xf) << 4;
                }