mirror of
https://github.com/libretro/RetroArch
synced 2025-04-16 08:43:10 +00:00
(DXGI) Untangle macros
This commit is contained in:
parent
937ad8bfc6
commit
7c2d033b83
@ -57,21 +57,14 @@ typedef enum hdr_root_constants
|
|||||||
HRESULT WINAPI CreateDXGIFactory1(REFIID riid, void** ppFactory)
|
HRESULT WINAPI CreateDXGIFactory1(REFIID riid, void** ppFactory)
|
||||||
{
|
{
|
||||||
static HRESULT(WINAPI * fp)(REFIID, void**);
|
static HRESULT(WINAPI * fp)(REFIID, void**);
|
||||||
|
|
||||||
static dylib_t dxgi_dll;
|
static dylib_t dxgi_dll;
|
||||||
|
|
||||||
if (!dxgi_dll)
|
if (!dxgi_dll)
|
||||||
dxgi_dll = dylib_load("dxgi.dll");
|
if (!(dxgi_dll = dylib_load("dxgi.dll")))
|
||||||
|
return TYPE_E_CANTLOADLIBRARY;
|
||||||
if (!dxgi_dll)
|
|
||||||
return TYPE_E_CANTLOADLIBRARY;
|
|
||||||
|
|
||||||
if (!fp)
|
if (!fp)
|
||||||
fp = (HRESULT(WINAPI*)(REFIID, void**))dylib_proc(dxgi_dll, "CreateDXGIFactory1");
|
if (!(fp = (HRESULT(WINAPI*)(REFIID, void**))dylib_proc(dxgi_dll,
|
||||||
|
"CreateDXGIFactory1")))
|
||||||
if (!fp)
|
return TYPE_E_DLLFUNCTIONNOTFOUND;
|
||||||
return TYPE_E_DLLFUNCTIONNOTFOUND;
|
|
||||||
|
|
||||||
return fp(riid, ppFactory);
|
return fp(riid, ppFactory);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -155,6 +148,19 @@ DXGI_FORMAT* dxgi_get_format_fallback_list(DXGI_FORMAT format)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
/* r, g, b, a, r, g, b, a */
|
||||||
|
|
||||||
|
#define DXGI_FORMAT_R8G8B8A8_UNORM_DESCS UINT32, 8, 8, 8, 8, 0, 8, 16, 24
|
||||||
|
#define DXGI_FORMAT_B8G8R8X8_UNORM_DESCS UINT32, 8, 8, 8, 0, 16, 8, 0, 0
|
||||||
|
#define DXGI_FORMAT_B8G8R8A8_UNORM_DESCS UINT32, 8, 8, 8, 8, 16, 8, 0, 24
|
||||||
|
#define DXGI_FORMAT_A8_UNORM_DESCS UINT8, 0, 0, 0, 8, 0, 0, 0, 0
|
||||||
|
#define DXGI_FORMAT_R8_UNORM_DESCS UINT8, 8, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
#define DXGI_FORMAT_B5G6R5_UNORM_DESCS UINT16, 5, 6, 5, 0, 11, 5, 0, 0
|
||||||
|
#define DXGI_FORMAT_B5G5R5A1_UNORM_DESCS UINT16, 5, 5, 5, 1, 10, 5, 0, 11
|
||||||
|
#define DXGI_FORMAT_B4G4R4A4_UNORM_DESCS UINT16, 4, 4, 4, 4, 8, 4, 0, 12
|
||||||
|
#define DXGI_FORMAT_EX_A4R4G4B4_UNORM_DESCS UINT16, 4, 4, 4, 4, 4, 8, 12, 0
|
||||||
|
|
||||||
#define FORMAT_PROCESS_( \
|
#define FORMAT_PROCESS_( \
|
||||||
src_type, src_rb, src_gb, src_bb, src_ab, src_rs, src_gs, src_bs, src_as, dst_type, dst_rb, \
|
src_type, src_rb, src_gb, src_bb, src_ab, src_rs, src_gs, src_bs, src_as, dst_type, dst_rb, \
|
||||||
dst_gb, dst_bb, dst_ab, dst_rs, dst_gs, dst_bs, dst_as) \
|
dst_gb, dst_bb, dst_ab, dst_rs, dst_gs, dst_bs, dst_as) \
|
||||||
@ -233,19 +239,56 @@ DXGI_FORMAT* dxgi_get_format_fallback_list(DXGI_FORMAT format)
|
|||||||
|
|
||||||
#define FORMAT_PROCESS(args) FORMAT_PROCESS_ args
|
#define FORMAT_PROCESS(args) FORMAT_PROCESS_ args
|
||||||
|
|
||||||
#define FORMAT_DST(st, dt) \
|
|
||||||
case dt: \
|
|
||||||
{ \
|
|
||||||
FORMAT_PROCESS((st##_DESCS, dt##_DESCS)); \
|
|
||||||
break; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define FORMAT_SRC(st) \
|
#define FORMAT_SRC(st) \
|
||||||
case st: \
|
case st: \
|
||||||
{ \
|
{ \
|
||||||
switch ((unsigned)dst_format) \
|
switch ((unsigned)dst_format) \
|
||||||
{ \
|
{ \
|
||||||
FORMAT_DST_LIST(st); \
|
case DXGI_FORMAT_R8G8B8A8_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_R8G8B8A8_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case DXGI_FORMAT_B8G8R8X8_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_B8G8R8X8_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case DXGI_FORMAT_A8_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_A8_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case DXGI_FORMAT_R8_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_R8_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case DXGI_FORMAT_B5G6R5_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_B5G6R5_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case DXGI_FORMAT_B5G5R5A1_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_B5G5R5A1_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case DXGI_FORMAT_B4G4R4A4_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_B4G4R4A4_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case DXGI_FORMAT_B8G8R8A8_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_B8G8R8A8_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case DXGI_FORMAT_EX_A4R4G4B4_UNORM: \
|
||||||
|
{ \
|
||||||
|
FORMAT_PROCESS((st##_DESCS, DXGI_FORMAT_EX_A4R4G4B4_UNORM_DESCS)); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
default: \
|
default: \
|
||||||
assert(0); \
|
assert(0); \
|
||||||
break; \
|
break; \
|
||||||
@ -253,40 +296,7 @@ DXGI_FORMAT* dxgi_get_format_fallback_list(DXGI_FORMAT format)
|
|||||||
break; \
|
break; \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clang-format off */
|
/* clang-format on */
|
||||||
/* r, g, b, a, r, g, b, a */
|
|
||||||
#define DXGI_FORMAT_R8G8B8A8_UNORM_DESCS UINT32, 8, 8, 8, 8, 0, 8, 16, 24
|
|
||||||
#define DXGI_FORMAT_B8G8R8X8_UNORM_DESCS UINT32, 8, 8, 8, 0, 16, 8, 0, 0
|
|
||||||
#define DXGI_FORMAT_B8G8R8A8_UNORM_DESCS UINT32, 8, 8, 8, 8, 16, 8, 0, 24
|
|
||||||
#define DXGI_FORMAT_A8_UNORM_DESCS UINT8, 0, 0, 0, 8, 0, 0, 0, 0
|
|
||||||
#define DXGI_FORMAT_R8_UNORM_DESCS UINT8, 8, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
#define DXGI_FORMAT_B5G6R5_UNORM_DESCS UINT16, 5, 6, 5, 0, 11, 5, 0, 0
|
|
||||||
#define DXGI_FORMAT_B5G5R5A1_UNORM_DESCS UINT16, 5, 5, 5, 1, 10, 5, 0, 11
|
|
||||||
#define DXGI_FORMAT_B4G4R4A4_UNORM_DESCS UINT16, 4, 4, 4, 4, 8, 4, 0, 12
|
|
||||||
#define DXGI_FORMAT_EX_A4R4G4B4_UNORM_DESCS UINT16, 4, 4, 4, 4, 4, 8, 12, 0
|
|
||||||
|
|
||||||
#define FORMAT_SRC_LIST() \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_R8G8B8A8_UNORM); \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_B8G8R8X8_UNORM); \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_A8_UNORM); \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_R8_UNORM); \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_B5G6R5_UNORM); \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_B5G5R5A1_UNORM); \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_B4G4R4A4_UNORM); \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_B8G8R8A8_UNORM); \
|
|
||||||
FORMAT_SRC(DXGI_FORMAT_EX_A4R4G4B4_UNORM)
|
|
||||||
|
|
||||||
#define FORMAT_DST_LIST(srcfmt) \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_R8G8B8A8_UNORM); \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_B8G8R8X8_UNORM); \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_A8_UNORM); \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_R8_UNORM); \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_B5G6R5_UNORM); \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_B5G5R5A1_UNORM); \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_B4G4R4A4_UNORM); \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_B8G8R8A8_UNORM); \
|
|
||||||
FORMAT_DST(srcfmt, DXGI_FORMAT_EX_A4R4G4B4_UNORM)
|
|
||||||
/* clang-format on */
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning(disable : 4293)
|
#pragma warning(disable : 4293)
|
||||||
@ -305,11 +315,19 @@ void dxgi_copy(
|
|||||||
|
|
||||||
switch ((unsigned)src_format)
|
switch ((unsigned)src_format)
|
||||||
{
|
{
|
||||||
FORMAT_SRC_LIST();
|
FORMAT_SRC(DXGI_FORMAT_R8G8B8A8_UNORM);
|
||||||
|
FORMAT_SRC(DXGI_FORMAT_B8G8R8X8_UNORM);
|
||||||
|
FORMAT_SRC(DXGI_FORMAT_A8_UNORM);
|
||||||
|
FORMAT_SRC(DXGI_FORMAT_R8_UNORM);
|
||||||
|
FORMAT_SRC(DXGI_FORMAT_B5G6R5_UNORM);
|
||||||
|
FORMAT_SRC(DXGI_FORMAT_B5G5R5A1_UNORM);
|
||||||
|
FORMAT_SRC(DXGI_FORMAT_B4G4R4A4_UNORM);
|
||||||
|
FORMAT_SRC(DXGI_FORMAT_B8G8R8A8_UNORM);
|
||||||
|
FORMAT_SRC(DXGI_FORMAT_EX_A4R4G4B4_UNORM);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,50 +337,71 @@ void dxgi_copy(
|
|||||||
|
|
||||||
DXGI_FORMAT glslang_format_to_dxgi(glslang_format fmt)
|
DXGI_FORMAT glslang_format_to_dxgi(glslang_format fmt)
|
||||||
{
|
{
|
||||||
#undef FMT_
|
|
||||||
#define FMT_(x) case SLANG_FORMAT_##x: return DXGI_FORMAT_##x
|
|
||||||
#undef FMT2
|
|
||||||
#define FMT2(x,y) case SLANG_FORMAT_##x: return y
|
|
||||||
|
|
||||||
switch (fmt)
|
switch (fmt)
|
||||||
{
|
{
|
||||||
FMT_(R8_UNORM);
|
case SLANG_FORMAT_R8_UNORM:
|
||||||
FMT_(R8_SINT);
|
return DXGI_FORMAT_R8_UNORM;
|
||||||
FMT_(R8_UINT);
|
case SLANG_FORMAT_R8_SINT:
|
||||||
FMT_(R8G8_UNORM);
|
return DXGI_FORMAT_R8_SINT;
|
||||||
FMT_(R8G8_SINT);
|
case SLANG_FORMAT_R8_UINT:
|
||||||
FMT_(R8G8_UINT);
|
return DXGI_FORMAT_R8_UINT;
|
||||||
FMT_(R8G8B8A8_UNORM);
|
case SLANG_FORMAT_R8G8_UNORM:
|
||||||
FMT_(R8G8B8A8_SINT);
|
return DXGI_FORMAT_R8G8_UNORM;
|
||||||
FMT_(R8G8B8A8_UINT);
|
case SLANG_FORMAT_R8G8_SINT:
|
||||||
FMT2(R8G8B8A8_SRGB, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB);
|
return DXGI_FORMAT_R8G8_SINT;
|
||||||
|
case SLANG_FORMAT_R8G8_UINT:
|
||||||
FMT2(A2B10G10R10_UNORM_PACK32, DXGI_FORMAT_R10G10B10A2_UNORM);
|
return DXGI_FORMAT_R8G8_UINT;
|
||||||
FMT2(A2B10G10R10_UINT_PACK32, DXGI_FORMAT_R10G10B10A2_UNORM);
|
case SLANG_FORMAT_R8G8B8A8_UNORM:
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||||
FMT_(R16_UINT);
|
case SLANG_FORMAT_R8G8B8A8_SINT:
|
||||||
FMT_(R16_SINT);
|
return DXGI_FORMAT_R8G8B8A8_SINT;
|
||||||
FMT2(R16_SFLOAT, DXGI_FORMAT_R16_FLOAT);
|
case SLANG_FORMAT_R8G8B8A8_UINT:
|
||||||
FMT_(R16G16_UINT);
|
return DXGI_FORMAT_R8G8B8A8_UINT;
|
||||||
FMT_(R16G16_SINT);
|
case SLANG_FORMAT_R8G8B8A8_SRGB:
|
||||||
FMT2(R16G16_SFLOAT, DXGI_FORMAT_R16G16_FLOAT);
|
return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
|
||||||
FMT_(R16G16B16A16_UINT);
|
case SLANG_FORMAT_A2B10G10R10_UNORM_PACK32:
|
||||||
FMT_(R16G16B16A16_SINT);
|
return DXGI_FORMAT_R10G10B10A2_UNORM;
|
||||||
FMT2(R16G16B16A16_SFLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT);
|
case SLANG_FORMAT_A2B10G10R10_UINT_PACK32:
|
||||||
|
return DXGI_FORMAT_R10G10B10A2_UNORM;
|
||||||
FMT_(R32_UINT);
|
case SLANG_FORMAT_R16_UINT:
|
||||||
FMT_(R32_SINT);
|
return DXGI_FORMAT_R16_UINT;
|
||||||
FMT2(R32_SFLOAT, DXGI_FORMAT_R32_FLOAT);
|
case SLANG_FORMAT_R16_SINT:
|
||||||
FMT_(R32G32_UINT);
|
return DXGI_FORMAT_R16_SINT;
|
||||||
FMT_(R32G32_SINT);
|
case SLANG_FORMAT_R16_SFLOAT:
|
||||||
FMT2(R32G32_SFLOAT, DXGI_FORMAT_R32G32_FLOAT);
|
return DXGI_FORMAT_R16_FLOAT;
|
||||||
FMT_(R32G32B32A32_UINT);
|
case SLANG_FORMAT_R16G16_UINT:
|
||||||
FMT_(R32G32B32A32_SINT);
|
return DXGI_FORMAT_R16G16_UINT;
|
||||||
FMT2(R32G32B32A32_SFLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT);
|
case SLANG_FORMAT_R16G16_SINT:
|
||||||
|
return DXGI_FORMAT_R16G16_SINT;
|
||||||
case SLANG_FORMAT_UNKNOWN:
|
case SLANG_FORMAT_R16G16_SFLOAT:
|
||||||
default:
|
return DXGI_FORMAT_R16G16_FLOAT;
|
||||||
break;
|
case SLANG_FORMAT_R16G16B16A16_UINT:
|
||||||
|
return DXGI_FORMAT_R16G16B16A16_UINT;
|
||||||
|
case SLANG_FORMAT_R16G16B16A16_SINT:
|
||||||
|
return DXGI_FORMAT_R16G16B16A16_SINT;
|
||||||
|
case SLANG_FORMAT_R16G16B16A16_SFLOAT:
|
||||||
|
return DXGI_FORMAT_R16G16B16A16_FLOAT;
|
||||||
|
case SLANG_FORMAT_R32_UINT:
|
||||||
|
return DXGI_FORMAT_R32_UINT;
|
||||||
|
case SLANG_FORMAT_R32_SINT:
|
||||||
|
return DXGI_FORMAT_R32_SINT;
|
||||||
|
case SLANG_FORMAT_R32_SFLOAT:
|
||||||
|
return DXGI_FORMAT_R32_FLOAT;
|
||||||
|
case SLANG_FORMAT_R32G32_UINT:
|
||||||
|
return DXGI_FORMAT_R32G32_UINT;
|
||||||
|
case SLANG_FORMAT_R32G32_SINT:
|
||||||
|
return DXGI_FORMAT_R32G32_SINT;
|
||||||
|
case SLANG_FORMAT_R32G32_SFLOAT:
|
||||||
|
return DXGI_FORMAT_R32G32_FLOAT;
|
||||||
|
case SLANG_FORMAT_R32G32B32A32_UINT:
|
||||||
|
return DXGI_FORMAT_R32G32B32A32_UINT;
|
||||||
|
case SLANG_FORMAT_R32G32B32A32_SINT:
|
||||||
|
return DXGI_FORMAT_R32G32B32A32_SINT;
|
||||||
|
case SLANG_FORMAT_R32G32B32A32_SFLOAT:
|
||||||
|
return DXGI_FORMAT_R32G32B32A32_FLOAT;
|
||||||
|
case SLANG_FORMAT_UNKNOWN:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DXGI_FORMAT_UNKNOWN;
|
return DXGI_FORMAT_UNKNOWN;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user