mirror of
https://github.com/citra-emu/citra.git
synced 2024-11-25 08:20:16 +00:00
Rasterizer: Respect buffer-read allow registers
This commit is contained in:
parent
441ddda923
commit
eb77c1ed3b
@ -591,13 +591,19 @@ struct Regs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
INSERT_PADDING_WORDS(0x3);
|
INSERT_PADDING_WORDS(0x2);
|
||||||
|
|
||||||
|
union {
|
||||||
|
BitField<0, 4, u32> allow_color_read; // 0 = disable, else enable
|
||||||
|
};
|
||||||
|
|
||||||
union {
|
union {
|
||||||
BitField<0, 4, u32> allow_color_write; // 0 = disable, else enable
|
BitField<0, 4, u32> allow_color_write; // 0 = disable, else enable
|
||||||
};
|
};
|
||||||
|
|
||||||
INSERT_PADDING_WORDS(0x1);
|
union {
|
||||||
|
BitField<0, 2, u32> allow_depth_stencil_read; // 0 = disable, else enable
|
||||||
|
};
|
||||||
|
|
||||||
union {
|
union {
|
||||||
BitField<0, 2, u32> allow_depth_stencil_write; // 0 = disable, else enable
|
BitField<0, 2, u32> allow_depth_stencil_write; // 0 = disable, else enable
|
||||||
|
@ -814,7 +814,7 @@ static void ProcessTriangleInternal(const Shader::OutputVertex& v0,
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (stencil_action_enable) {
|
if (stencil_action_enable) {
|
||||||
old_stencil = GetStencil(x >> 4, y >> 4);
|
old_stencil = (regs.framebuffer.allow_depth_stencil_read != 0) ? GetStencil(x >> 4, y >> 4) : 0;
|
||||||
u8 dest = old_stencil & stencil_test.input_mask;
|
u8 dest = old_stencil & stencil_test.input_mask;
|
||||||
u8 ref = stencil_test.reference_value & stencil_test.input_mask;
|
u8 ref = stencil_test.reference_value & stencil_test.input_mask;
|
||||||
|
|
||||||
@ -886,7 +886,7 @@ static void ProcessTriangleInternal(const Shader::OutputVertex& v0,
|
|||||||
u32 z = (u32)(depth * ((1 << num_bits) - 1));
|
u32 z = (u32)(depth * ((1 << num_bits) - 1));
|
||||||
|
|
||||||
if (output_merger.depth_test_enable) {
|
if (output_merger.depth_test_enable) {
|
||||||
u32 ref_z = GetDepth(x >> 4, y >> 4);
|
u32 ref_z = (regs.framebuffer.allow_depth_stencil_read != 0) ? GetDepth(x >> 4, y >> 4) : 0;
|
||||||
|
|
||||||
bool pass = false;
|
bool pass = false;
|
||||||
|
|
||||||
@ -938,7 +938,7 @@ static void ProcessTriangleInternal(const Shader::OutputVertex& v0,
|
|||||||
if (stencil_action_enable)
|
if (stencil_action_enable)
|
||||||
UpdateStencil(stencil_test.action_depth_pass);
|
UpdateStencil(stencil_test.action_depth_pass);
|
||||||
|
|
||||||
auto dest = GetPixel(x >> 4, y >> 4);
|
auto dest = (regs.framebuffer.allow_color_read != 0) ? GetPixel(x >> 4, y >> 4) : Math::Vec4<u8>(0,0,0,0);
|
||||||
Math::Vec4<u8> blend_output = combiner_output;
|
Math::Vec4<u8> blend_output = combiner_output;
|
||||||
|
|
||||||
if (output_merger.alphablend_enable) {
|
if (output_merger.alphablend_enable) {
|
||||||
|
Loading…
Reference in New Issue
Block a user