summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends
diff options
context:
space:
mode:
authorFiloppi <filippotarpini@hotmail.it>2023-06-08 03:17:20 +0300
committerFiloppi <filippotarpini@hotmail.it>2023-06-08 03:17:20 +0300
commitcdc53c046b47e8aaef70637dfdc8dffc22b5e4ac (patch)
tree7da2d93aed8fe255ff13edb632599676bce590b7 /Source/Core/VideoBackends
parent6743ca8e098268e7a11f26d626a15a09bd342577 (diff)
Video: add R10B10G10A2 and R16G16B16A16F texture types (needed by PR 11850)
Diffstat (limited to 'Source/Core/VideoBackends')
-rw-r--r--Source/Core/VideoBackends/D3DCommon/D3DCommon.cpp20
-rw-r--r--Source/Core/VideoBackends/Metal/MTLUtil.mm4
-rw-r--r--Source/Core/VideoBackends/OGL/OGLTexture.cpp12
-rw-r--r--Source/Core/VideoBackends/Vulkan/VKTexture.cpp6
4 files changed, 42 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/D3DCommon/D3DCommon.cpp b/Source/Core/VideoBackends/D3DCommon/D3DCommon.cpp
index 69014d8f2e..18406c2142 100644
--- a/Source/Core/VideoBackends/D3DCommon/D3DCommon.cpp
+++ b/Source/Core/VideoBackends/D3DCommon/D3DCommon.cpp
@@ -136,6 +136,10 @@ DXGI_FORMAT GetDXGIFormatForAbstractFormat(AbstractTextureFormat format, bool ty
return typeless ? DXGI_FORMAT_R8G8B8A8_TYPELESS : DXGI_FORMAT_R8G8B8A8_UNORM;
case AbstractTextureFormat::BGRA8:
return typeless ? DXGI_FORMAT_B8G8R8A8_TYPELESS : DXGI_FORMAT_B8G8R8A8_UNORM;
+ case AbstractTextureFormat::RGB10_A2:
+ return typeless ? DXGI_FORMAT_R10G10B10A2_TYPELESS : DXGI_FORMAT_R10G10B10A2_UNORM;
+ case AbstractTextureFormat::RGBA16F:
+ return typeless ? DXGI_FORMAT_R16G16B16A16_TYPELESS : DXGI_FORMAT_R16G16B16A16_FLOAT;
case AbstractTextureFormat::R16:
return typeless ? DXGI_FORMAT_R16_TYPELESS : DXGI_FORMAT_R16_UNORM;
case AbstractTextureFormat::R32F:
@@ -169,6 +173,10 @@ DXGI_FORMAT GetSRVFormatForAbstractFormat(AbstractTextureFormat format)
return DXGI_FORMAT_R8G8B8A8_UNORM;
case AbstractTextureFormat::BGRA8:
return DXGI_FORMAT_B8G8R8A8_UNORM;
+ case AbstractTextureFormat::RGB10_A2:
+ return DXGI_FORMAT_R10G10B10A2_UNORM;
+ case AbstractTextureFormat::RGBA16F:
+ return DXGI_FORMAT_R16G16B16A16_FLOAT;
case AbstractTextureFormat::R16:
return DXGI_FORMAT_R16_UNORM;
case AbstractTextureFormat::R32F:
@@ -195,6 +203,10 @@ DXGI_FORMAT GetRTVFormatForAbstractFormat(AbstractTextureFormat format, bool int
return integer ? DXGI_FORMAT_R8G8B8A8_UINT : DXGI_FORMAT_R8G8B8A8_UNORM;
case AbstractTextureFormat::BGRA8:
return DXGI_FORMAT_B8G8R8A8_UNORM;
+ case AbstractTextureFormat::RGB10_A2:
+ return DXGI_FORMAT_R10G10B10A2_UNORM;
+ case AbstractTextureFormat::RGBA16F:
+ return DXGI_FORMAT_R16G16B16A16_FLOAT;
case AbstractTextureFormat::R16:
return integer ? DXGI_FORMAT_R16_UINT : DXGI_FORMAT_R16_UNORM;
case AbstractTextureFormat::R32F:
@@ -235,6 +247,14 @@ AbstractTextureFormat GetAbstractFormatForDXGIFormat(DXGI_FORMAT format)
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
return AbstractTextureFormat::BGRA8;
+ case DXGI_FORMAT_R10G10B10A2_UNORM:
+ case DXGI_FORMAT_R10G10B10A2_TYPELESS:
+ return AbstractTextureFormat::RGB10_A2;
+
+ case DXGI_FORMAT_R16G16B16A16_FLOAT:
+ case DXGI_FORMAT_R16G16B16A16_TYPELESS:
+ return AbstractTextureFormat::RGBA16F;
+
case DXGI_FORMAT_R16_UINT:
case DXGI_FORMAT_R16_UNORM:
case DXGI_FORMAT_R16_TYPELESS:
diff --git a/Source/Core/VideoBackends/Metal/MTLUtil.mm b/Source/Core/VideoBackends/Metal/MTLUtil.mm
index c6b95d674f..d10aa4b5f0 100644
--- a/Source/Core/VideoBackends/Metal/MTLUtil.mm
+++ b/Source/Core/VideoBackends/Metal/MTLUtil.mm
@@ -263,6 +263,8 @@ AbstractTextureFormat Metal::Util::ToAbstract(MTLPixelFormat format)
{
case MTLPixelFormatRGBA8Unorm: return AbstractTextureFormat::RGBA8;
case MTLPixelFormatBGRA8Unorm: return AbstractTextureFormat::BGRA8;
+ case MTLPixelFormatRGB10A2Unorm: return AbstractTextureFormat::RGB10_A2;
+ case MTLPixelFormatRGBA16Float: return AbstractTextureFormat::RGBA16F;
case MTLPixelFormatBC1_RGBA: return AbstractTextureFormat::DXT1;
case MTLPixelFormatBC2_RGBA: return AbstractTextureFormat::DXT3;
case MTLPixelFormatBC3_RGBA: return AbstractTextureFormat::DXT5;
@@ -289,6 +291,8 @@ MTLPixelFormat Metal::Util::FromAbstract(AbstractTextureFormat format)
{
case AbstractTextureFormat::RGBA8: return MTLPixelFormatRGBA8Unorm;
case AbstractTextureFormat::BGRA8: return MTLPixelFormatBGRA8Unorm;
+ case AbstractTextureFormat::RGB10_A2: return MTLPixelFormatRGB10A2Unorm;
+ case AbstractTextureFormat::RGBA16F: return MTLPixelFormatRGBA16Float;
case AbstractTextureFormat::DXT1: return MTLPixelFormatBC1_RGBA;
case AbstractTextureFormat::DXT3: return MTLPixelFormatBC2_RGBA;
case AbstractTextureFormat::DXT5: return MTLPixelFormatBC3_RGBA;
diff --git a/Source/Core/VideoBackends/OGL/OGLTexture.cpp b/Source/Core/VideoBackends/OGL/OGLTexture.cpp
index d3274a3528..f356e52d32 100644
--- a/Source/Core/VideoBackends/OGL/OGLTexture.cpp
+++ b/Source/Core/VideoBackends/OGL/OGLTexture.cpp
@@ -33,6 +33,10 @@ GLenum GetGLInternalFormatForTextureFormat(AbstractTextureFormat format, bool st
return storage ? GL_RGBA8 : GL_RGBA;
case AbstractTextureFormat::BGRA8:
return storage ? GL_RGBA8 : GL_BGRA;
+ case AbstractTextureFormat::RGB10_A2:
+ return GL_RGB10_A2;
+ case AbstractTextureFormat::RGBA16F:
+ return GL_RGBA16F;
case AbstractTextureFormat::R16:
return GL_R16;
case AbstractTextureFormat::R32F:
@@ -59,6 +63,10 @@ GLenum GetGLFormatForTextureFormat(AbstractTextureFormat format)
return GL_RGBA;
case AbstractTextureFormat::BGRA8:
return GL_BGRA;
+ case AbstractTextureFormat::RGB10_A2:
+ return GL_RGB10_A2;
+ case AbstractTextureFormat::RGBA16F:
+ return GL_RGBA16F;
case AbstractTextureFormat::R16:
case AbstractTextureFormat::R32F:
return GL_RED;
@@ -81,6 +89,10 @@ GLenum GetGLTypeForTextureFormat(AbstractTextureFormat format)
case AbstractTextureFormat::RGBA8:
case AbstractTextureFormat::BGRA8:
return GL_UNSIGNED_BYTE;
+ case AbstractTextureFormat::RGB10_A2:
+ return GL_UNSIGNED_INT_2_10_10_10_REV;
+ case AbstractTextureFormat::RGBA16F:
+ return GL_HALF_FLOAT;
case AbstractTextureFormat::R16:
return GL_UNSIGNED_SHORT;
case AbstractTextureFormat::R32F:
diff --git a/Source/Core/VideoBackends/Vulkan/VKTexture.cpp b/Source/Core/VideoBackends/Vulkan/VKTexture.cpp
index 14b33d2376..201ee5f84f 100644
--- a/Source/Core/VideoBackends/Vulkan/VKTexture.cpp
+++ b/Source/Core/VideoBackends/Vulkan/VKTexture.cpp
@@ -189,6 +189,12 @@ VkFormat VKTexture::GetVkFormatForHostTextureFormat(AbstractTextureFormat format
case AbstractTextureFormat::BGRA8:
return VK_FORMAT_B8G8R8A8_UNORM;
+ case AbstractTextureFormat::RGB10_A2:
+ return VK_FORMAT_A2R10G10B10_UNORM_PACK32;
+
+ case AbstractTextureFormat::RGBA16F:
+ return VK_FORMAT_R16G16B16A16_SFLOAT;
+
case AbstractTextureFormat::R16:
return VK_FORMAT_R16_UNORM;