diff --git a/src/video_core/pica.h b/src/video_core/pica.h index a19f4190c..78603ebdf 100644 --- a/src/video_core/pica.h +++ b/src/video_core/pica.h @@ -370,6 +370,10 @@ struct Regs { union { BitField< 0, 1, u32> depth_test_enable; BitField< 4, 3, CompareFunc> depth_test_func; + BitField< 8, 1, u32> red_enable; + BitField< 9, 1, u32> green_enable; + BitField<10, 1, u32> blue_enable; + BitField<11, 1, u32> alpha_enable; BitField<12, 1, u32> depth_write_enable; }; diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp index 15715c43d..7f66c6d42 100644 --- a/src/video_core/rasterizer.cpp +++ b/src/video_core/rasterizer.cpp @@ -594,7 +594,14 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, exit(0); } - DrawPixel(x >> 4, y >> 4, combiner_output); + const Math::Vec4 result = { + registers.output_merger.red_enable ? combiner_output.r() : dest.r(), + registers.output_merger.green_enable ? combiner_output.g() : dest.g(), + registers.output_merger.blue_enable ? combiner_output.b() : dest.b(), + registers.output_merger.alpha_enable ? combiner_output.a() : dest.a() + }; + + DrawPixel(x >> 4, y >> 4, result); } } }