diff --git a/Source/Core/VideoBackends/D3D/DXTexture.cpp b/Source/Core/VideoBackends/D3D/DXTexture.cpp index 5f7a4e39eb..30f664b5b4 100644 --- a/Source/Core/VideoBackends/D3D/DXTexture.cpp +++ b/Source/Core/VideoBackends/D3D/DXTexture.cpp @@ -40,7 +40,11 @@ DXGI_FORMAT GetDXGIFormatForHostFormat(AbstractTextureFormat format) case AbstractTextureFormat::BPTC: return DXGI_FORMAT_BC7_UNORM; case AbstractTextureFormat::RGBA8: + return DXGI_FORMAT_R8G8B8A8_UNORM; + case AbstractTextureFormat::BGRA8: + return DXGI_FORMAT_B8G8R8A8_UNORM; default: + PanicAlert("Unhandled texture format."); return DXGI_FORMAT_R8G8B8A8_UNORM; } } diff --git a/Source/Core/VideoBackends/OGL/OGLTexture.cpp b/Source/Core/VideoBackends/OGL/OGLTexture.cpp index 40295f6f28..272a879090 100644 --- a/Source/Core/VideoBackends/OGL/OGLTexture.cpp +++ b/Source/Core/VideoBackends/OGL/OGLTexture.cpp @@ -35,7 +35,11 @@ GLenum GetGLInternalFormatForTextureFormat(AbstractTextureFormat format, bool st case AbstractTextureFormat::BPTC: return GL_COMPRESSED_RGBA_BPTC_UNORM_ARB; case AbstractTextureFormat::RGBA8: + return storage ? GL_RGBA8 : GL_RGBA; + case AbstractTextureFormat::BGRA8: + return GL_BGRA; default: + PanicAlert("Unhandled texture format."); return storage ? GL_RGBA8 : GL_RGBA; } } @@ -46,6 +50,8 @@ GLenum GetGLFormatForTextureFormat(AbstractTextureFormat format) { case AbstractTextureFormat::RGBA8: return GL_RGBA; + case AbstractTextureFormat::BGRA8: + return GL_BGRA; // Compressed texture formats don't use this parameter. default: return GL_UNSIGNED_BYTE; @@ -57,6 +63,7 @@ GLenum GetGLTypeForTextureFormat(AbstractTextureFormat format) switch (format) { case AbstractTextureFormat::RGBA8: + case AbstractTextureFormat::BGRA8: return GL_UNSIGNED_BYTE; // Compressed texture formats don't use this parameter. default: diff --git a/Source/Core/VideoBackends/Vulkan/Util.cpp b/Source/Core/VideoBackends/Vulkan/Util.cpp index 221fa97cda..e74435e6d6 100644 --- a/Source/Core/VideoBackends/Vulkan/Util.cpp +++ b/Source/Core/VideoBackends/Vulkan/Util.cpp @@ -107,7 +107,13 @@ VkFormat GetVkFormatForHostTextureFormat(AbstractTextureFormat format) return VK_FORMAT_BC7_UNORM_BLOCK; case AbstractTextureFormat::RGBA8: + return VK_FORMAT_R8G8B8A8_UNORM; + + case AbstractTextureFormat::BGRA8: + return VK_FORMAT_B8G8R8A8_UNORM; + default: + PanicAlert("Unhandled texture format."); return VK_FORMAT_R8G8B8A8_UNORM; } } diff --git a/Source/Core/VideoCommon/AbstractTexture.cpp b/Source/Core/VideoCommon/AbstractTexture.cpp index 7e4f493601..9fa099e602 100644 --- a/Source/Core/VideoCommon/AbstractTexture.cpp +++ b/Source/Core/VideoCommon/AbstractTexture.cpp @@ -5,7 +5,7 @@ #include #include "Common/Assert.h" - +#include "Common/MsgHandler.h" #include "VideoCommon/AbstractTexture.h" #include "VideoCommon/ImageWrite.h" @@ -102,8 +102,17 @@ AbstractTexture::MapRegionImpl(u32 level, u32 x, u32 y, u32 width, u32 height) bool AbstractTexture::IsCompressedHostTextureFormat(AbstractTextureFormat format) { - // This will need to be changed if we add any other uncompressed formats. - return format != AbstractTextureFormat::RGBA8; + switch (format) + { + case AbstractTextureFormat::DXT1: + case AbstractTextureFormat::DXT3: + case AbstractTextureFormat::DXT5: + case AbstractTextureFormat::BPTC: + return true; + + default: + return false; + } } size_t AbstractTexture::CalculateHostTextureLevelPitch(AbstractTextureFormat format, u32 row_length) @@ -117,8 +126,11 @@ size_t AbstractTexture::CalculateHostTextureLevelPitch(AbstractTextureFormat for case AbstractTextureFormat::BPTC: return static_cast(std::max(1u, row_length / 4)) * 16; case AbstractTextureFormat::RGBA8: - default: + case AbstractTextureFormat::BGRA8: return static_cast(row_length) * 4; + default: + PanicAlert("Unhandled texture format."); + return 0; } } diff --git a/Source/Core/VideoCommon/TextureConfig.h b/Source/Core/VideoCommon/TextureConfig.h index fa2d60c494..ae6e54de5e 100644 --- a/Source/Core/VideoCommon/TextureConfig.h +++ b/Source/Core/VideoCommon/TextureConfig.h @@ -13,10 +13,12 @@ enum class AbstractTextureFormat : u32 { RGBA8, + BGRA8, DXT1, DXT3, DXT5, - BPTC + BPTC, + Undefined }; struct TextureConfig