radv: adjust CB_SHADER_MASK for dual-source blending in the shader info pass

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/5434>
This commit is contained in:
Samuel Pitoiset
2020-06-11 17:14:27 +02:00
committed by Marge Bot
parent 26a48d8d35
commit 76ee45d3a8
4 changed files with 9 additions and 3 deletions

View File

@@ -2340,6 +2340,7 @@ radv_generate_graphics_pipeline_key(struct radv_pipeline *pipeline,
} }
key.col_format = blend->spi_shader_col_format; key.col_format = blend->spi_shader_col_format;
key.is_dual_src = blend->mrt0_is_dual_src;
if (pipeline->device->physical_device->rad_info.chip_class < GFX8) if (pipeline->device->physical_device->rad_info.chip_class < GFX8)
radv_pipeline_compute_get_int_clamp(pCreateInfo, &key.is_int8, &key.is_int10); radv_pipeline_compute_get_int_clamp(pCreateInfo, &key.is_int8, &key.is_int10);
@@ -2462,6 +2463,7 @@ radv_fill_shader_keys(struct radv_device *device,
keys[MESA_SHADER_FRAGMENT].fs.is_int10 = key->is_int10; keys[MESA_SHADER_FRAGMENT].fs.is_int10 = key->is_int10;
keys[MESA_SHADER_FRAGMENT].fs.log2_ps_iter_samples = key->log2_ps_iter_samples; keys[MESA_SHADER_FRAGMENT].fs.log2_ps_iter_samples = key->log2_ps_iter_samples;
keys[MESA_SHADER_FRAGMENT].fs.num_samples = key->num_samples; keys[MESA_SHADER_FRAGMENT].fs.num_samples = key->num_samples;
keys[MESA_SHADER_FRAGMENT].fs.is_dual_src = key->is_dual_src;
if (nir[MESA_SHADER_COMPUTE]) { if (nir[MESA_SHADER_COMPUTE]) {
keys[MESA_SHADER_COMPUTE].cs.subgroup_size = key->compute_subgroup_size; keys[MESA_SHADER_COMPUTE].cs.subgroup_size = key->compute_subgroup_size;
@@ -5128,9 +5130,6 @@ radv_pipeline_init(struct radv_pipeline *pipeline,
} }
blend.cb_shader_mask = ps->info.ps.cb_shader_mask; blend.cb_shader_mask = ps->info.ps.cb_shader_mask;
if (blend.mrt0_is_dual_src) {
blend.cb_shader_mask |= (blend.cb_shader_mask & 0xf) << 4;
}
if (extra && if (extra &&
(extra->custom_blend_mode == V_028808_CB_ELIMINATE_FAST_CLEAR || (extra->custom_blend_mode == V_028808_CB_ELIMINATE_FAST_CLEAR ||

View File

@@ -404,6 +404,7 @@ struct radv_pipeline_key {
uint32_t is_int10; uint32_t is_int10;
uint8_t log2_ps_iter_samples; uint8_t log2_ps_iter_samples;
uint8_t num_samples; uint8_t num_samples;
bool is_dual_src;
uint32_t has_multiview_view_index : 1; uint32_t has_multiview_view_index : 1;
uint32_t optimisations_disabled : 1; uint32_t optimisations_disabled : 1;
uint8_t topology; uint8_t topology;
@@ -1688,6 +1689,7 @@ struct radv_pipeline {
/* Used for rbplus */ /* Used for rbplus */
uint32_t col_format; uint32_t col_format;
uint32_t cb_target_mask; uint32_t cb_target_mask;
bool is_dual_src;
} graphics; } graphics;
}; };

View File

@@ -106,6 +106,7 @@ struct radv_fs_variant_key {
uint8_t num_samples; uint8_t num_samples;
uint32_t is_int8; uint32_t is_int8;
uint32_t is_int10; uint32_t is_int10;
bool is_dual_src;
}; };
struct radv_cs_variant_key { struct radv_cs_variant_key {

View File

@@ -857,5 +857,9 @@ radv_nir_shader_info_pass(const struct nir_shader *nir,
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;
}
} }
} }