aco: ensure MRT0 is written with dual source blending
Fixes crucible test func.shader.dualsrc_mrt0_undef on polaris10. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Cc: 22.3 mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19806>
This commit is contained in:
@@ -11495,6 +11495,19 @@ create_fs_exports(isel_context* ctx)
|
||||
struct aco_export_mrt mrts[8];
|
||||
unsigned compacted_mrt_index = 0;
|
||||
|
||||
/* MRT compaction doesn't work with dual-source blending. Dual-source blending seems to
|
||||
* require MRT0 to be written. Just copy MRT1 into MRT0. Skipping MRT1 exports seems to be
|
||||
* fine.
|
||||
*/
|
||||
if (ctx->options->key.ps.mrt0_is_dual_src && !ctx->outputs.mask[FRAG_RESULT_DATA0] &&
|
||||
ctx->outputs.mask[FRAG_RESULT_DATA1]) {
|
||||
u_foreach_bit (j, ctx->outputs.mask[FRAG_RESULT_DATA1]) {
|
||||
ctx->outputs.temps[FRAG_RESULT_DATA0 * 4u + j] =
|
||||
ctx->outputs.temps[FRAG_RESULT_DATA1 * 4u + j];
|
||||
}
|
||||
ctx->outputs.mask[FRAG_RESULT_DATA0] = ctx->outputs.mask[FRAG_RESULT_DATA1];
|
||||
}
|
||||
|
||||
/* Export all color render targets. */
|
||||
for (unsigned i = FRAG_RESULT_DATA0; i < FRAG_RESULT_DATA7 + 1; ++i) {
|
||||
unsigned idx = i - FRAG_RESULT_DATA0;
|
||||
|
Reference in New Issue
Block a user