summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2017-01-23 02:51:46 -0500
committerLioncash <mathew1800@gmail.com>2017-01-23 03:53:38 -0500
commit5b461f50af74c2e89e2a2c92a4dfc2bb766fc52f (patch)
tree2e362149a7491d117d6d653799490c8e8087b093 /Source/Core/VideoBackends
parenta2caa0d7336c8fd9ffad4fabc5a8d9c60129fdbc (diff)
VideoBackendBase: Convert EFBAccessType into an enum class
Diffstat (limited to 'Source/Core/VideoBackends')
-rw-r--r--Source/Core/VideoBackends/D3D/D3DUtil.cpp16
-rw-r--r--Source/Core/VideoBackends/D3D/Render.cpp16
-rw-r--r--Source/Core/VideoBackends/D3D12/D3DUtil.cpp20
-rw-r--r--Source/Core/VideoBackends/D3D12/Render.cpp8
-rw-r--r--Source/Core/VideoBackends/OGL/FramebufferManager.cpp2
-rw-r--r--Source/Core/VideoBackends/OGL/Render.cpp12
-rw-r--r--Source/Core/VideoBackends/Software/SWRenderer.cpp4
-rw-r--r--Source/Core/VideoBackends/Vulkan/Renderer.cpp8
8 files changed, 53 insertions, 33 deletions
diff --git a/Source/Core/VideoBackends/D3D/D3DUtil.cpp b/Source/Core/VideoBackends/D3D/D3DUtil.cpp
index 6e73bea9a8..ac0db36880 100644
--- a/Source/Core/VideoBackends/D3D/D3DUtil.cpp
+++ b/Source/Core/VideoBackends/D3D/D3DUtil.cpp
@@ -735,9 +735,19 @@ void DrawEFBPokeQuads(EFBAccessType type, const EfbPokeData* points, size_t num_
float y1 = -float(point->y) * 2.0f / EFB_HEIGHT + 1.0f;
float x2 = float(point->x + 1) * 2.0f / EFB_WIDTH - 1.0f;
float y2 = -float(point->y + 1) * 2.0f / EFB_HEIGHT + 1.0f;
- float z = (type == POKE_Z) ? (1.0f - float(point->data & 0xFFFFFF) / 16777216.0f) : 0.0f;
- u32 col = (type == POKE_Z) ? 0 : ((point->data & 0xFF00FF00) | ((point->data >> 16) & 0xFF) |
- ((point->data << 16) & 0xFF0000));
+ float z = 0.0f;
+ u32 col = 0;
+
+ if (type == EFBAccessType::PokeZ)
+ {
+ z = 1.0f - static_cast<float>(point->data & 0xFFFFFF) / 16777216.0f;
+ }
+ else
+ {
+ col = ((point->data & 0xFF00FF00) | ((point->data >> 16) & 0xFF) |
+ ((point->data << 16) & 0xFF0000));
+ }
+
current_point_index++;
// quad -> triangles
diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp
index 150f51c14c..182a7bbad9 100644
--- a/Source/Core/VideoBackends/D3D/Render.cpp
+++ b/Source/Core/VideoBackends/D3D/Render.cpp
@@ -380,7 +380,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
// Take the mean of the resulting dimensions; TODO: Don't use the center pixel, compute the
// average color instead
D3D11_RECT RectToLock;
- if (type == PEEK_COLOR || type == PEEK_Z)
+ if (type == EFBAccessType::PeekColor || type == EFBAccessType::PeekZ)
{
RectToLock.left = (targetPixelRc.left + targetPixelRc.right) / 2;
RectToLock.top = (targetPixelRc.top + targetPixelRc.bottom) / 2;
@@ -406,7 +406,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
D3DTexture2D* source_tex;
D3DTexture2D* read_tex;
ID3D11Texture2D* staging_tex;
- if (type == PEEK_COLOR)
+ if (type == EFBAccessType::PeekColor)
{
source_tex = FramebufferManager::GetEFBColorTexture();
read_tex = FramebufferManager::GetEFBColorReadTexture();
@@ -421,7 +421,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
// Select pixel shader (we don't want to average depth samples, instead select the minimum).
ID3D11PixelShader* copy_pixel_shader;
- if (type == PEEK_Z && g_ActiveConfig.iMultisamples > 1)
+ if (type == EFBAccessType::PeekZ && g_ActiveConfig.iMultisamples > 1)
copy_pixel_shader = PixelShaderCache::GetDepthResolveProgram();
else
copy_pixel_shader = PixelShaderCache::GetColorCopyProgram(true);
@@ -447,7 +447,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
// Convert the framebuffer data to the format the game is expecting to receive.
u32 ret;
- if (type == PEEK_COLOR)
+ if (type == EFBAccessType::PeekColor)
{
u32 val;
memcpy(&val, map.pData, sizeof(val));
@@ -478,7 +478,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
else /*if(alpha_read_mode.ReadMode == 0)*/
ret = (val & 0x00FFFFFF); // GX_READ_00
}
- else // type == PEEK_Z
+ else // type == EFBAccessType::PeekZ
{
float val;
memcpy(&val, map.pData, sizeof(val));
@@ -505,7 +505,7 @@ void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num
{
ResetAPIState();
- if (type == POKE_COLOR)
+ if (type == EFBAccessType::PokeColor)
{
D3D11_VIEWPORT vp =
CD3D11_VIEWPORT(0.0f, 0.0f, (float)GetTargetWidth(), (float)GetTargetHeight());
@@ -513,7 +513,7 @@ void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num
D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(),
nullptr);
}
- else // if (type == POKE_Z)
+ else // if (type == EFBAccessType::PokeZ)
{
D3D::stateman->PushBlendState(clearblendstates[3]);
D3D::stateman->PushDepthState(cleardepthstates[1]);
@@ -529,7 +529,7 @@ void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num
D3D::DrawEFBPokeQuads(type, points, num_points);
- if (type == POKE_Z)
+ if (type == EFBAccessType::PokeZ)
{
D3D::stateman->PopDepthState();
D3D::stateman->PopBlendState();
diff --git a/Source/Core/VideoBackends/D3D12/D3DUtil.cpp b/Source/Core/VideoBackends/D3D12/D3DUtil.cpp
index 4b7e4767c3..7febd5a603 100644
--- a/Source/Core/VideoBackends/D3D12/D3DUtil.cpp
+++ b/Source/Core/VideoBackends/D3D12/D3DUtil.cpp
@@ -860,9 +860,19 @@ void DrawEFBPokeQuads(EFBAccessType type, const EfbPokeData* points, size_t num_
float y1 = -float(point->y) * 2.0f / EFB_HEIGHT + 1.0f;
float x2 = float(point->x + 1) * 2.0f / EFB_WIDTH - 1.0f;
float y2 = -float(point->y + 1) * 2.0f / EFB_HEIGHT + 1.0f;
- float z = (type == POKE_Z) ? (1.0f - float(point->data & 0xFFFFFF) / 16777216.0f) : 0.0f;
- u32 col = (type == POKE_Z) ? 0 : ((point->data & 0xFF00FF00) | ((point->data >> 16) & 0xFF) |
- ((point->data << 16) & 0xFF0000));
+ float z = 0.0f;
+ u32 col = 0;
+
+ if (type == EFBAccessType::PokeZ)
+ {
+ z = 1.0f - static_cast<float>(point->data & 0xFFFFFF) / 16777216.0f;
+ }
+ else
+ {
+ col = ((point->data & 0xFF00FF00) | ((point->data >> 16) & 0xFF) |
+ ((point->data << 16) & 0xFF0000));
+ }
+
current_point_index++;
// quad -> triangles
@@ -874,9 +884,9 @@ void DrawEFBPokeQuads(EFBAccessType type, const EfbPokeData* points, size_t num_
InitColVertex(&vertex[4], x2, y1, z, col);
InitColVertex(&vertex[5], x2, y2, z, col);
- if (type == POKE_COLOR)
+ if (type == EFBAccessType::PokeColor)
FramebufferManager::UpdateEFBColorAccessCopy(point->x, point->y, col);
- else if (type == POKE_Z)
+ else if (type == EFBAccessType::PokeZ)
FramebufferManager::UpdateEFBDepthAccessCopy(point->x, point->y, z);
}
diff --git a/Source/Core/VideoBackends/D3D12/Render.cpp b/Source/Core/VideoBackends/D3D12/Render.cpp
index 9fbf8ade33..f73e65c9e7 100644
--- a/Source/Core/VideoBackends/D3D12/Render.cpp
+++ b/Source/Core/VideoBackends/D3D12/Render.cpp
@@ -363,7 +363,7 @@ void Renderer::SetColorMask()
// - GX_PokeZMode (TODO)
u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
{
- if (type == PEEK_COLOR)
+ if (type == EFBAccessType::PeekColor)
{
u32 color = FramebufferManager::ReadEFBColorAccessCopy(x, y);
@@ -399,7 +399,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
return (color & 0x00FFFFFF); // GX_READ_00
}
}
- else // if (type == PEEK_Z)
+ else // if (type == EFBAccessType::PeekZ)
{
// depth buffer is inverted in the d3d backend
float depth = 1.0f - FramebufferManager::ReadEFBDepthAccessCopy(x, y);
@@ -423,14 +423,14 @@ void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num
{
D3D::SetViewportAndScissor(0, 0, GetTargetWidth(), GetTargetHeight());
- if (type == POKE_COLOR)
+ if (type == EFBAccessType::PokeColor)
{
// In the D3D12 backend, the rt/db/viewport is passed into DrawEFBPokeQuads, and set there.
D3D::DrawEFBPokeQuads(type, points, num_points, &g_reset_blend_desc, &g_reset_depth_desc,
&FramebufferManager::GetEFBColorTexture()->GetRTV12(), nullptr,
FramebufferManager::GetEFBColorTexture()->GetMultisampled());
}
- else // if (type == POKE_Z)
+ else // if (type == EFBAccessType::PokeZ)
{
D3D::DrawEFBPokeQuads(type, points, num_points,
&s_clear_blend_descs[CLEAR_BLEND_DESC_ALL_CHANNELS_DISABLED],
diff --git a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
index b4a8f0f024..34c29f8183 100644
--- a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
+++ b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
@@ -674,7 +674,7 @@ void FramebufferManager::PokeEFB(EFBAccessType type, const EfbPokeData* points,
{
g_renderer->ResetAPIState();
- if (type == POKE_Z)
+ if (type == EFBAccessType::PokeZ)
{
glDepthMask(GL_TRUE);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp
index 8ca1a7d833..ebbbe23be7 100644
--- a/Source/Core/VideoBackends/OGL/Render.cpp
+++ b/Source/Core/VideoBackends/OGL/Render.cpp
@@ -74,7 +74,7 @@ static const u32 EFB_CACHE_HEIGHT = (EFB_HEIGHT + EFB_CACHE_RECT_SIZE - 1) / EFB
static bool s_efbCacheValid[2][EFB_CACHE_WIDTH * EFB_CACHE_HEIGHT];
static bool s_efbCacheIsCleared = false;
static std::vector<u32>
- s_efbCache[2][EFB_CACHE_WIDTH * EFB_CACHE_HEIGHT]; // 2 for PEEK_Z and PEEK_COLOR
+ s_efbCache[2][EFB_CACHE_WIDTH * EFB_CACHE_HEIGHT]; // 2 for PeekZ and PeekColor
static void APIENTRY ErrorCallback(GLenum source, GLenum type, GLuint id, GLenum severity,
GLsizei length, const char* message, const void* userParam)
@@ -841,7 +841,7 @@ void ClearEFBCache()
void Renderer::UpdateEFBCache(EFBAccessType type, u32 cacheRectIdx, const EFBRectangle& efbPixelRc,
const TargetRectangle& targetPixelRc, const void* data)
{
- u32 cacheType = (type == PEEK_Z ? 0 : 1);
+ const u32 cacheType = (type == EFBAccessType::PeekZ ? 0 : 1);
if (!s_efbCache[cacheType][cacheRectIdx].size())
s_efbCache[cacheType][cacheRectIdx].resize(EFB_CACHE_RECT_SIZE * EFB_CACHE_RECT_SIZE);
@@ -862,7 +862,7 @@ void Renderer::UpdateEFBCache(EFBAccessType type, u32 cacheRectIdx, const EFBRec
u32 xPixel = (EFBToScaledX(xEFB) + EFBToScaledX(xEFB + 1)) / 2;
u32 xData = xPixel - targetPixelRc.left;
u32 value;
- if (type == PEEK_Z)
+ if (type == EFBAccessType::PeekZ)
{
float* ptr = (float*)data;
value = MathUtil::Clamp<u32>((u32)(ptr[yData * targetPixelRcWidth + xData] * 16777216.0f),
@@ -901,7 +901,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
EFBRectangle efbPixelRc;
- if (type == PEEK_COLOR || type == PEEK_Z)
+ if (type == EFBAccessType::PeekColor || type == EFBAccessType::PeekZ)
{
// Get the rectangular target region containing the EFB pixel
efbPixelRc.left = (x / EFB_CACHE_RECT_SIZE) * EFB_CACHE_RECT_SIZE;
@@ -924,7 +924,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
// TODO (FIX) : currently, AA path is broken/offset and doesn't return the correct pixel
switch (type)
{
- case PEEK_Z:
+ case EFBAccessType::PeekZ:
{
if (!s_efbCacheValid[0][cacheRectIdx])
{
@@ -958,7 +958,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
return z;
}
- case PEEK_COLOR: // GXPeekARGB
+ case EFBAccessType::PeekColor: // GXPeekARGB
{
// Although it may sound strange, this really is A8R8G8B8 and not RGBA or 24-bit...
diff --git a/Source/Core/VideoBackends/Software/SWRenderer.cpp b/Source/Core/VideoBackends/Software/SWRenderer.cpp
index d0ecbd7347..ba3c800ee4 100644
--- a/Source/Core/VideoBackends/Software/SWRenderer.cpp
+++ b/Source/Core/VideoBackends/Software/SWRenderer.cpp
@@ -148,12 +148,12 @@ u32 SWRenderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputData)
switch (type)
{
- case PEEK_Z:
+ case EFBAccessType::PeekZ:
{
value = EfbInterface::GetDepth(x, y);
break;
}
- case PEEK_COLOR:
+ case EFBAccessType::PeekColor:
{
const u32 color = EfbInterface::GetColor(x, y);
diff --git a/Source/Core/VideoBackends/Vulkan/Renderer.cpp b/Source/Core/VideoBackends/Vulkan/Renderer.cpp
index d87b8c6519..2c180fd70b 100644
--- a/Source/Core/VideoBackends/Vulkan/Renderer.cpp
+++ b/Source/Core/VideoBackends/Vulkan/Renderer.cpp
@@ -179,7 +179,7 @@ void Renderer::RenderText(const std::string& text, int left, int top, u32 color)
u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
{
- if (type == PEEK_COLOR)
+ if (type == EFBAccessType::PeekColor)
{
u32 color = FramebufferManager::GetInstance()->PeekEFBColor(x, y);
@@ -215,7 +215,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
return color & 0x00FFFFFF; // GX_READ_00
}
}
- else // if (type == PEEK_Z)
+ else // if (type == EFBAccessType::PeekZ)
{
// Depth buffer is inverted for improved precision near far plane
float depth = 1.0f - FramebufferManager::GetInstance()->PeekEFBDepth(x, y);
@@ -237,7 +237,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num_points)
{
- if (type == POKE_COLOR)
+ if (type == EFBAccessType::PokeColor)
{
for (size_t i = 0; i < num_points; i++)
{
@@ -249,7 +249,7 @@ void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num
FramebufferManager::GetInstance()->PokeEFBColor(point.x, point.y, color);
}
}
- else // if (type == POKE_Z)
+ else // if (type == EFBAccessType::PokeZ)
{
for (size_t i = 0; i < num_points; i++)
{