summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Software/SWRenderer.cpp
diff options
context:
space:
mode:
authorPokechu22 <Pokechu022@gmail.com>2022-01-29 13:53:54 -0800
committerPokechu22 <Pokechu022@gmail.com>2022-03-29 15:34:43 -0700
commitaf316f7bfe7bd6470204abf4a98ef2430467e589 (patch)
treec4fa17da4daf910bad9da0fb7c1021b361b3a047 /Source/Core/VideoBackends/Software/SWRenderer.cpp
parent8882eb040a5e4121d0fb19026862bd456b492b6c (diff)
Software: Implement pixel engine alpha read mode
Diffstat (limited to 'Source/Core/VideoBackends/Software/SWRenderer.cpp')
-rw-r--r--Source/Core/VideoBackends/Software/SWRenderer.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/Software/SWRenderer.cpp b/Source/Core/VideoBackends/Software/SWRenderer.cpp
index 84fe951fcd..e5b0f08987 100644
--- a/Source/Core/VideoBackends/Software/SWRenderer.cpp
+++ b/Source/Core/VideoBackends/Software/SWRenderer.cpp
@@ -20,6 +20,7 @@
#include "VideoCommon/AbstractShader.h"
#include "VideoCommon/AbstractTexture.h"
#include "VideoCommon/NativeVertexFormat.h"
+#include "VideoCommon/PixelEngine.h"
#include "VideoCommon/VideoBackendBase.h"
#include "VideoCommon/VideoCommon.h"
@@ -132,6 +133,27 @@ u32 SWRenderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputData)
// rgba to argb
value = (color >> 8) | (color & 0xff) << 24;
+
+ // check what to do with the alpha channel (GX_PokeAlphaRead)
+ PixelEngine::AlphaReadMode alpha_read_mode = PixelEngine::GetAlphaReadMode();
+
+ if (alpha_read_mode == PixelEngine::AlphaReadMode::ReadNone)
+ {
+ // value is OK as it is
+ }
+ else if (alpha_read_mode == PixelEngine::AlphaReadMode::ReadFF)
+ {
+ value |= 0xFF000000;
+ }
+ else
+ {
+ if (alpha_read_mode != PixelEngine::AlphaReadMode::Read00)
+ {
+ PanicAlertFmt("Invalid PE alpha read mode: {}", static_cast<u16>(alpha_read_mode));
+ }
+ value &= 0x00FFFFFF;
+ }
+
break;
}
default: