Skip to content

Commit fcc0e24

Browse files
Enabled GetNativeTextureFormat/GetTextureFormatFromNative on Metal
1 parent 96917d5 commit fcc0e24

File tree

4 files changed

+56
-2
lines changed

4 files changed

+56
-2
lines changed

Graphics/GraphicsTools/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ endif()
127127

128128
if(METAL_SUPPORTED)
129129
list(APPEND SOURCE src/GraphicsUtilitiesMtl.mm)
130-
list(APPEND DEPENDENCIES Diligent-GraphicsEngineMetalInterface)
130+
list(APPEND DEPENDENCIES Diligent-GraphicsEngineMetal-static)
131131
endif()
132132

133133
add_library(Diligent-GraphicsTools STATIC ${SOURCE} ${INCLUDE} ${INTERFACE})

Graphics/GraphicsTools/src/GraphicsUtilities.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ int64_t GetNativeTextureFormatVk(TEXTURE_FORMAT TexFormat);
6060
TEXTURE_FORMAT GetTextureFormatFromNativeVk(int64_t NativeFormat);
6161
#endif
6262

63+
#if METAL_SUPPORTED
64+
int64_t GetNativeTextureFormatMtl(TEXTURE_FORMAT TexFormat);
65+
TEXTURE_FORMAT GetTextureFormatFromNativeMtl(int64_t NativeFormat);
66+
#endif
67+
6368
#if WEBGPU_SUPPORTED
6469
int64_t GetNativeTextureFormatWebGPU(TEXTURE_FORMAT TexFormat);
6570
TEXTURE_FORMAT GetTextureFormatFromNativeWebGPU(int64_t NativeFormat);
@@ -597,6 +602,11 @@ int64_t GetNativeTextureFormat(TEXTURE_FORMAT TexFormat, RENDER_DEVICE_TYPE Devi
597602
return GetNativeTextureFormatVk(TexFormat);
598603
#endif
599604

605+
#if METAL_SUPPORTED
606+
case RENDER_DEVICE_TYPE_METAL:
607+
return GetNativeTextureFormatMtl(TexFormat);
608+
#endif
609+
600610
#if WEBGPU_SUPPORTED
601611
case RENDER_DEVICE_TYPE_WEBGPU:
602612
return GetNativeTextureFormatWebGPU(TexFormat);
@@ -628,6 +638,11 @@ TEXTURE_FORMAT GetTextureFormatFromNative(int64_t NativeFormat, RENDER_DEVICE_TY
628638
return GetTextureFormatFromNativeGL(NativeFormat);
629639
#endif
630640

641+
#if METAL_SUPPORTED
642+
case RENDER_DEVICE_TYPE_METAL:
643+
return GetTextureFormatFromNativeMtl(NativeFormat);
644+
#endif
645+
631646
#if VULKAN_SUPPORTED
632647
case RENDER_DEVICE_TYPE_VULKAN:
633648
return GetTextureFormatFromNativeVk(NativeFormat);

Graphics/GraphicsTools/src/GraphicsUtilitiesMtl.mm

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2023 Diligent Graphics LLC
2+
* Copyright 2019-2024 Diligent Graphics LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -34,6 +34,9 @@
3434
namespace Diligent
3535
{
3636

37+
MTLPixelFormat TextureFormatToMTLPixelFormat(TEXTURE_FORMAT TexFormat);
38+
TEXTURE_FORMAT MTLPixelFormatToTextureFormat(MTLPixelFormat mtlPixelFormat);
39+
3740
void CreateSparseTextureMtl(IRenderDevice* pDevice,
3841
const TextureDesc& TexDesc,
3942
IDeviceMemory* pMemory,
@@ -54,4 +57,14 @@ void CreateSparseTextureMtl(IRenderDevice* pDevice,
5457
pDeviceMtl->CreateSparseTexture(TexDesc, pMemory, ppTexture);
5558
}
5659

60+
int64_t GetNativeTextureFormatMtl(TEXTURE_FORMAT TexFormat)
61+
{
62+
return static_cast<int64_t>(TextureFormatToMTLPixelFormat(TexFormat));
63+
}
64+
65+
TEXTURE_FORMAT GetTextureFormatFromNativeMtl(int64_t NativeFormat)
66+
{
67+
return MTLPixelFormatToTextureFormat(static_cast<MTLPixelFormat>(NativeFormat));
68+
}
69+
5770
} // namespace Diligent

Tests/DiligentCoreTest/src/GraphicsTools/GraphicsUtilitiesTest.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,25 @@ TEST(GraphicsUtilitiesTest, GetNativeTextureFormat_GetTextureFormatFromNative)
8181
TEX_FORMAT_BGRX8_UNORM_SRGB,
8282
};
8383

84+
const std::unordered_set<TEXTURE_FORMAT> SkipFormatsMtl{
85+
TEX_FORMAT_RGB32_FLOAT,
86+
TEX_FORMAT_RGB32_UINT,
87+
TEX_FORMAT_RGB32_SINT,
88+
TEX_FORMAT_R32_FLOAT_X8X24_TYPELESS,
89+
TEX_FORMAT_X32_TYPELESS_G8X24_UINT,
90+
TEX_FORMAT_R24_UNORM_X8_TYPELESS,
91+
TEX_FORMAT_X24_TYPELESS_G8_UINT,
92+
TEX_FORMAT_A8_UNORM,
93+
TEX_FORMAT_R1_UNORM,
94+
TEX_FORMAT_RG8_B8G8_UNORM,
95+
TEX_FORMAT_G8R8_G8B8_UNORM,
96+
TEX_FORMAT_B5G6R5_UNORM,
97+
TEX_FORMAT_B5G5R5A1_UNORM,
98+
TEX_FORMAT_BGRX8_UNORM,
99+
TEX_FORMAT_R10G10B10_XR_BIAS_A2_UNORM,
100+
TEX_FORMAT_BGRX8_UNORM_SRGB,
101+
};
102+
84103
const std::unordered_set<TEXTURE_FORMAT> SkipFormatsWebGPU{
85104
TEX_FORMAT_RGB32_FLOAT,
86105
TEX_FORMAT_RGB32_UINT,
@@ -142,6 +161,13 @@ TEST(GraphicsUtilitiesTest, GetNativeTextureFormat_GetTextureFormatFromNative)
142161
}
143162
#endif
144163

164+
#if METAL_SUPPORTED
165+
if (SkipFormatsMtl.find(Fmt) == SkipFormatsMtl.end())
166+
{
167+
Test(RENDER_DEVICE_TYPE_METAL);
168+
}
169+
#endif
170+
145171
#if WEBGPU_SUPPORTED
146172
if (SkipFormatsWebGPU.find(Fmt) == SkipFormatsWebGPU.end())
147173
{

0 commit comments

Comments
 (0)