diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index bf4a64750da..d3c9b1e23e0 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -555,8 +555,10 @@ radv_pipeline_compute_spi_color_formats(struct radv_pipeline *pipeline, /* The output for dual source blending should have the same format as * the first output. */ - if (blend->mrt0_is_dual_src) + if (blend->mrt0_is_dual_src) { + assert(!(col_format >> 4)); col_format |= (col_format & 0xf) << 4; + } blend->spi_shader_col_format = col_format; blend->col_format_is_int8 = is_int8; @@ -684,6 +686,12 @@ radv_pipeline_init_blend_state(struct radv_pipeline *pipeline, if (!att->colorWriteMask) continue; + /* Ignore other blend targets if dual-source blending + * is enabled to prevent wrong behaviour. + */ + if (blend.mrt0_is_dual_src) + continue; + blend.cb_target_mask |= (unsigned)att->colorWriteMask << (4 * i); blend.cb_target_enabled_4bit |= 0xfu << (4 * i); if (!att->blendEnable) {