From 498fc2e8bcc6f56bc73bb7059cc771b8b6012afb Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Thu, 21 Dec 2017 20:48:15 +0100 Subject: [PATCH] Remove legacy BGRA path again to avoid conflicts with new code. This revision will crash/bug out using OGL on AMD in some games:] --- GPU/GLES/DepalettizeShaderGLES.cpp | 5 --- GPU/GLES/FramebufferManagerGLES.cpp | 48 ++++++++--------------------- GPU/GLES/TextureCacheGLES.cpp | 24 +++++---------- GPU/GLES/TextureCacheGLES.h | 8 ----- 4 files changed, 19 insertions(+), 66 deletions(-) diff --git a/GPU/GLES/DepalettizeShaderGLES.cpp b/GPU/GLES/DepalettizeShaderGLES.cpp index 627062b276..71ef33d4c2 100644 --- a/GPU/GLES/DepalettizeShaderGLES.cpp +++ b/GPU/GLES/DepalettizeShaderGLES.cpp @@ -132,17 +132,12 @@ GLuint DepalShaderCacheGLES::GetClutTexture(GEPaletteFormat clutFormat, const u3 GLuint dstFmt = getClutDestFormat(clutFormat); int texturePixels = clutFormat == GE_CMODE_32BIT_ABGR8888 ? 256 : 512; - bool useBGRA = UseBGRA8888() && dstFmt == GL_UNSIGNED_BYTE; - DepalTexture *tex = new DepalTexture(); glGenTextures(1, &tex->texture); glBindTexture(GL_TEXTURE_2D, tex->texture); GLuint components = dstFmt == GL_UNSIGNED_SHORT_5_6_5 ? GL_RGB : GL_RGBA; GLuint components2 = components; - if (useBGRA) { - components2 = GL_BGRA_EXT; - } glTexImage2D(GL_TEXTURE_2D, 0, components, texturePixels, 1, 0, components2, dstFmt, (void *)rawClut); diff --git a/GPU/GLES/FramebufferManagerGLES.cpp b/GPU/GLES/FramebufferManagerGLES.cpp index 322d31dd81..bc889a6461 100644 --- a/GPU/GLES/FramebufferManagerGLES.cpp +++ b/GPU/GLES/FramebufferManagerGLES.cpp @@ -759,12 +759,6 @@ void ConvertFromRGBA8888(u8 *dst, const u8 *src, u32 dstStride, u32 srcStride, u u32 *dst32 = (u32 *)dst; if (src == dst) { return; - } else if (UseBGRA8888()) { - for (u32 y = 0; y < height; ++y) { - ConvertBGRA8888ToRGBA8888(dst32, src32, width); - src32 += srcStride; - dst32 += dstStride; - } } else { // Here let's assume they don't intersect for (u32 y = 0; y < height; ++y) { @@ -778,13 +772,7 @@ void ConvertFromRGBA8888(u8 *dst, const u8 *src, u32 dstStride, u32 srcStride, u u16 *dst16 = (u16 *)dst; switch (format) { case GE_FORMAT_565: // BGR 565 - if (UseBGRA8888()) { - for (u32 y = 0; y < height; ++y) { - ConvertBGRA8888ToRGB565(dst16, src32, width); - src32 += srcStride; - dst16 += dstStride; - } - } else { + { for (u32 y = 0; y < height; ++y) { ConvertRGBA8888ToRGB565(dst16, src32, width); src32 += srcStride; @@ -793,13 +781,7 @@ void ConvertFromRGBA8888(u8 *dst, const u8 *src, u32 dstStride, u32 srcStride, u } break; case GE_FORMAT_5551: // ABGR 1555 - if (UseBGRA8888()) { - for (u32 y = 0; y < height; ++y) { - ConvertBGRA8888ToRGBA5551(dst16, src32, width); - src32 += srcStride; - dst16 += dstStride; - } - } else { + { for (u32 y = 0; y < height; ++y) { ConvertRGBA8888ToRGBA5551(dst16, src32, width); src32 += srcStride; @@ -808,13 +790,7 @@ void ConvertFromRGBA8888(u8 *dst, const u8 *src, u32 dstStride, u32 srcStride, u } break; case GE_FORMAT_4444: // ABGR 4444 - if (UseBGRA8888()) { - for (u32 y = 0; y < height; ++y) { - ConvertBGRA8888ToRGBA4444(dst16, src32, width); - src32 += srcStride; - dst16 += dstStride; - } - } else { + { for (u32 y = 0; y < height; ++y) { ConvertRGBA8888ToRGBA4444(dst16, src32, width); src32 += srcStride; @@ -871,7 +847,7 @@ void FramebufferManagerGLES::PackFramebufferAsync_(VirtualFramebuffer *vfb) { DEBUG_LOG(FRAMEBUF, "Reading PBO to memory , bufSize = %u, packed = %p, fb_address = %08x, stride = %u, pbo = %u", pbo.size, packed, pbo.fb_address, pbo.stride, nextPBO); - if (useCPU || (UseBGRA8888() && pbo.format == GE_FORMAT_8888)) { + if (useCPU) { u8 *dst = Memory::GetPointer(pbo.fb_address); ConvertFromRGBA8888(dst, packed, pbo.stride, pbo.stride, pbo.stride, pbo.height, pbo.format); } else { @@ -891,22 +867,22 @@ void FramebufferManagerGLES::PackFramebufferAsync_(VirtualFramebuffer *vfb) { bool reverseOrder = gstate_c.Supports(GPU_PREFER_REVERSE_COLOR_ORDER); Draw::DataFormat dataFmt = Draw::DataFormat::UNDEFINED; switch (vfb->format) { - case GE_FORMAT_4444: // 16 bit RGBA + case GE_FORMAT_4444: dataFmt = (reverseOrder ? Draw::DataFormat::A4R4G4B4_UNORM_PACK16 : Draw::DataFormat::B4G4R4A4_UNORM_PACK16); break; - case GE_FORMAT_5551: // 16 bit RGBA + case GE_FORMAT_5551: dataFmt = (reverseOrder ? Draw::DataFormat::A1R5G5B5_UNORM_PACK16 : Draw::DataFormat::B5G5R5A1_UNORM_PACK16); break; - case GE_FORMAT_565: // 16 bit RGB + case GE_FORMAT_565: dataFmt = (reverseOrder ? Draw::DataFormat::R5G6B5_UNORM_PACK16 : Draw::DataFormat::B5G6R5_UNORM_PACK16); break; - case GE_FORMAT_8888: // 32 bit RGBA - dataFmt = UseBGRA8888() ? Draw::DataFormat::B8G8R8A8_UNORM : Draw::DataFormat::R8G8B8A8_UNORM; + case GE_FORMAT_8888: + dataFmt = Draw::DataFormat::R8G8B8A8_UNORM; break; }; if (useCPU) { - dataFmt = UseBGRA8888() ? Draw::DataFormat::B8G8R8A8_UNORM : Draw::DataFormat::R8G8B8A8_UNORM; + dataFmt = Draw::DataFormat::R8G8B8A8_UNORM; } @@ -966,7 +942,7 @@ void FramebufferManagerGLES::PackFramebufferSync_(VirtualFramebuffer *vfb, int x u32 bufSize = vfb->fb_stride * h * 4; u32 fb_address = 0x04000000 | vfb->fb_address; - bool convert = vfb->format != GE_FORMAT_8888 || UseBGRA8888(); + bool convert = vfb->format != GE_FORMAT_8888; const int dstBpp = vfb->format == GE_FORMAT_8888 ? 4 : 2; const int packWidth = std::min(vfb->fb_stride, std::min(x + w, (int)vfb->width)); @@ -990,7 +966,7 @@ void FramebufferManagerGLES::PackFramebufferSync_(VirtualFramebuffer *vfb, int x DEBUG_LOG(FRAMEBUF, "Reading framebuffer to mem, bufSize = %u, fb_address = %08x", bufSize, fb_address); int packW = h == 1 ? packWidth : vfb->fb_stride; // TODO: What's this about? - draw_->CopyFramebufferToMemorySync(vfb->fbo, Draw::FB_COLOR_BIT, 0, y, packW, h, UseBGRA8888() ? Draw::DataFormat::B8G8R8A8_UNORM : Draw::DataFormat::R8G8B8A8_UNORM, packed, packW); + draw_->CopyFramebufferToMemorySync(vfb->fbo, Draw::FB_COLOR_BIT, 0, y, packW, h, Draw::DataFormat::R8G8B8A8_UNORM, packed, packW); if (convert) { ConvertFromRGBA8888(dst, packed, vfb->fb_stride, vfb->fb_stride, packWidth, h, vfb->format); diff --git a/GPU/GLES/TextureCacheGLES.cpp b/GPU/GLES/TextureCacheGLES.cpp index b5e888fb3a..278bb66b35 100644 --- a/GPU/GLES/TextureCacheGLES.cpp +++ b/GPU/GLES/TextureCacheGLES.cpp @@ -229,13 +229,9 @@ static void ConvertColors(void *dstBuf, const void *srcBuf, GLuint dstFmt, int n ConvertRGB565ToBGR565((u16 *)dst, (const u16 *)src, numPixels); break; default: - if (UseBGRA8888()) { - ConvertRGBA8888ToBGRA8888(dst, src, numPixels); - } else { - // No need to convert RGBA8888, right order already - if (dst != src) + // No need to convert RGBA8888, right order already + if (dst != src) memcpy(dst, src, numPixels * sizeof(u32)); - } break; } } @@ -270,7 +266,7 @@ void TextureCacheGLES::UpdateCurrentClut(GEPaletteFormat clutFormat, u32 clutBas clutHash_ = DoReliableHash32((const char *)clutBufRaw_, clutExtendedBytes, 0xC0108888); // Avoid a copy when we don't need to convert colors. - if (UseBGRA8888() || clutFormat != GE_CMODE_32BIT_ABGR8888) { + if (clutFormat != GE_CMODE_32BIT_ABGR8888) { const int numColors = clutFormat == GE_CMODE_32BIT_ABGR8888 ? (clutMaxBytes_ / sizeof(u32)) : (clutMaxBytes_ / sizeof(u16)); ConvertColors(clutBufConverted_, clutBufRaw_, getClutDestFormat(clutFormat), numColors); clutBuf_ = clutBufConverted_; @@ -537,13 +533,13 @@ void TextureCacheGLES::ApplyTextureFramebuffer(TexCacheEntry *entry, VirtualFram InvalidateLastTexture(); } -ReplacedTextureFormat FromGLESFormat(GLenum fmt, bool useBGRA = false) { +ReplacedTextureFormat FromGLESFormat(GLenum fmt) { // TODO: 16-bit formats are incorrect, since swizzled. switch (fmt) { case GL_UNSIGNED_SHORT_5_6_5: return ReplacedTextureFormat::F_0565_ABGR; case GL_UNSIGNED_SHORT_5_5_5_1: return ReplacedTextureFormat::F_1555_ABGR; case GL_UNSIGNED_SHORT_4_4_4_4: return ReplacedTextureFormat::F_4444_ABGR; - case GL_UNSIGNED_BYTE: default: return useBGRA ? ReplacedTextureFormat::F_8888_BGRA : ReplacedTextureFormat::F_8888; + case GL_UNSIGNED_BYTE: default: return ReplacedTextureFormat::F_8888; } } @@ -820,7 +816,7 @@ void *TextureCacheGLES::DecodeTextureLevelOld(GETextureFormat format, GEPaletteF } tmpTexBufRearrange_.resize(std::max(w, bufw) * h); - DecodeTextureLevel((u8 *)tmpTexBufRearrange_.data(), decPitch, format, clutformat, texaddr, level, bufw, true, UseBGRA8888(), false); + DecodeTextureLevel((u8 *)tmpTexBufRearrange_.data(), decPitch, format, clutformat, texaddr, level, bufw, true, false, false); return tmpTexBufRearrange_.data(); } @@ -849,7 +845,6 @@ void TextureCacheGLES::LoadTextureLevel(TexCacheEntry &entry, ReplacedTexture &r int w = gstate.getTextureWidth(level); int h = gstate.getTextureHeight(level); bool useUnpack = false; - bool useBGRA; u32 *pixelData; CHECK_GL_ERROR_IF_DEBUG(); @@ -870,7 +865,6 @@ void TextureCacheGLES::LoadTextureLevel(TexCacheEntry &entry, ReplacedTexture &r dstFmt = ToGLESFormat(replaced.Format(level)); texByteAlign = bpp; - useBGRA = false; } else { PROFILE_THIS_SCOPE("decodetex"); @@ -889,7 +883,6 @@ void TextureCacheGLES::LoadTextureLevel(TexCacheEntry &entry, ReplacedTexture &r // Textures are always aligned to 16 bytes bufw, so this could safely be 4 always. texByteAlign = dstFmt == GL_UNSIGNED_BYTE ? 4 : 2; - useBGRA = UseBGRA8888() && dstFmt == GL_UNSIGNED_BYTE; pixelData = (u32 *)finalBuf; @@ -912,7 +905,7 @@ void TextureCacheGLES::LoadTextureLevel(TexCacheEntry &entry, ReplacedTexture &r replacedInfo.isVideo = videos_.find(entry.addr & 0x3FFFFFFF) != videos_.end(); replacedInfo.isFinal = (entry.status & TexCacheEntry::STATUS_TO_SCALE) == 0; replacedInfo.scaleFactor = scaleFactor; - replacedInfo.fmt = FromGLESFormat(dstFmt, useBGRA); + replacedInfo.fmt = FromGLESFormat(dstFmt); int bpp = dstFmt == GL_UNSIGNED_BYTE ? 4 : 2; replacer_.NotifyTextureDecoded(replacedInfo, pixelData, (useUnpack ? bufw : w) * bpp, level, w, h); @@ -926,9 +919,6 @@ void TextureCacheGLES::LoadTextureLevel(TexCacheEntry &entry, ReplacedTexture &r GLuint components = dstFmt == GL_UNSIGNED_SHORT_5_6_5 ? GL_RGB : GL_RGBA; GLuint components2 = components; - if (useBGRA) { - components2 = GL_BGRA_EXT; - } if (replaceImages) { PROFILE_THIS_SCOPE("repltex"); diff --git a/GPU/GLES/TextureCacheGLES.h b/GPU/GLES/TextureCacheGLES.h index 94aa87822d..9e894e2476 100644 --- a/GPU/GLES/TextureCacheGLES.h +++ b/GPU/GLES/TextureCacheGLES.h @@ -32,14 +32,6 @@ class DepalShaderCacheGLES; class ShaderManagerGLES; class DrawEngineGLES; -inline bool UseBGRA8888() { - // TODO: Other platforms? May depend on vendor which is faster? -#ifdef _WIN32 - return gl_extensions.EXT_bgra; -#endif - return false; -} - class TextureCacheGLES : public TextureCacheCommon { public: TextureCacheGLES(Draw::DrawContext *draw);