d3d12: Generate a pipe format -> typeless mapping table too

Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13054>
This commit is contained in:
Jesse Natalie 2021-11-17 15:41:39 -08:00 committed by Marge Bot
parent ca7d4fcb3f
commit 9740141b2e
2 changed files with 49 additions and 11 deletions

View File

@ -28,12 +28,20 @@
#include "util/u_math.h"
#include "util/compiler.h"
#define MAP_FORMAT(BITS, TYPE) \
#define MAP_FORMAT_NO_TYPELESS(BITS, TYPE) \
[PIPE_FORMAT_ ## BITS ## _ ## TYPE] = DXGI_FORMAT_ ## BITS ## _ ## TYPE,
#define MAP_FORMAT2(BITS1, TYPE1, BITS2, TYPE2) \
#define MAP_FORMAT2_NO_TYPELESS(BITS1, TYPE1, BITS2, TYPE2) \
[PIPE_FORMAT_ ## BITS1 ## _ ## TYPE1] = DXGI_FORMAT_ ## BITS2 ## _ ## TYPE2,
#define MAP_FORMAT(BITS, TYPE) MAP_FORMAT_NO_TYPELESS(BITS, TYPE)
#define MAP_FORMAT2(BITS1, TYPE1, BITS2, TYPE2) \
MAP_FORMAT2_NO_TYPELESS(BITS1, TYPE1, BITS2, TYPE2)
#define MAP_FORMAT_CUSTOM_TYPELESS(BITS, TYPE, TYPELESS_BITS) \
MAP_FORMAT(BITS, TYPE)
#define MAP_FORMAT2_CUSTOM_TYPELESS(BITS1, TYPE1, BITS2, TYPE2) \
MAP_FORMAT2(BITS1, TYPE1, BITS2, TYPE2)
#define MAP_FORMAT_NORM(FMT) \
MAP_FORMAT(FMT, UNORM) \
MAP_FORMAT(FMT, SNORM)
@ -107,7 +115,7 @@
MAP_FORMAT_INT(R16G16B16A16) \
MAP_FORMAT_FLOAT(R16G16B16A16) \
\
MAP_FORMAT(A8, UNORM) \
MAP_FORMAT_CUSTOM_TYPELESS(A8, UNORM, R8) \
MAP_EMU_FORMAT_NO_ALPHA(8, UNORM) \
MAP_EMU_FORMAT(8, SNORM) \
MAP_EMU_FORMAT(8, SINT) \
@ -121,14 +129,14 @@
MAP_EMU_FORMAT(32, UINT) \
MAP_EMU_FORMAT(32, FLOAT) \
\
MAP_FORMAT2(R9G9B9E5, FLOAT, R9G9B9E5, SHAREDEXP) \
MAP_FORMAT(R11G11B10, FLOAT) \
MAP_FORMAT(R10G10B10A2, UINT) \
MAP_FORMAT(R10G10B10A2, UNORM) \
MAP_FORMAT2_NO_TYPELESS(R9G9B9E5, FLOAT, R9G9B9E5, SHAREDEXP) \
MAP_FORMAT_NO_TYPELESS(R11G11B10, FLOAT) \
MAP_FORMAT_NO_TYPELESS(R10G10B10A2, UINT) \
MAP_FORMAT_NO_TYPELESS(R10G10B10A2, UNORM) \
\
MAP_FORMAT(B5G6R5, UNORM) \
MAP_FORMAT(B5G5R5A1, UNORM) \
MAP_FORMAT2(B5G5R5X1, UNORM, B5G5R5A1, UNORM) \
MAP_FORMAT_NO_TYPELESS(B5G6R5, UNORM) \
MAP_FORMAT_NO_TYPELESS(B5G5R5A1, UNORM) \
MAP_FORMAT2_NO_TYPELESS(B5G5R5X1, UNORM, B5G5R5A1, UNORM) \
\
MAP_FORMAT2(DXT1, RGB, BC1, UNORM) \
MAP_FORMAT2(DXT1, RGBA, BC1, UNORM) \
@ -158,12 +166,39 @@ static const DXGI_FORMAT formats[PIPE_FORMAT_COUNT] = {
FORMAT_TABLE()
};
#undef MAP_FORMAT
#undef MAP_FORMAT2
#undef MAP_FORMAT_CUSTOM_TYPELESS
#undef MAP_FORMAT2_CUSTOM_TYPELESS
#define MAP_FORMAT(BITS, TYPE) \
[PIPE_FORMAT_ ## BITS ## _ ## TYPE] = DXGI_FORMAT_ ## BITS ## _TYPELESS,
#define MAP_FORMAT2(BITS1, TYPE1, BITS2, TYPE2) \
[PIPE_FORMAT_ ## BITS1 ## _ ## TYPE1] = DXGI_FORMAT_ ## BITS2 ## _TYPELESS,
#define MAP_FORMAT_CUSTOM_TYPELESS(BITS1, TYPE, BITS2) \
MAP_FORMAT2(BITS1, TYPE, BITS2, TYPELESS)
#define MAP_FORMAT2_CUSTOM_TYPELESS(BITS1, TYPE1, BITS2, TYPE2) \
MAP_FORMAT2(BITS1, TYPE1, BITS2, TYPELESS)
static const DXGI_FORMAT typeless_formats[PIPE_FORMAT_COUNT] = {
FORMAT_TABLE()
};
DXGI_FORMAT
d3d12_get_format(enum pipe_format format)
{
return formats[format];
}
DXGI_FORMAT
d3d12_get_typeless_format(enum pipe_format format)
{
return typeless_formats[format];
}
DXGI_FORMAT
d3d12_get_resource_rt_format(enum pipe_format f)
{

View File

@ -36,6 +36,9 @@ extern "C" {
DXGI_FORMAT
d3d12_get_format(enum pipe_format format);
DXGI_FORMAT
d3d12_get_typeless_format(enum pipe_format format);
DXGI_FORMAT
d3d12_get_resource_srv_format(enum pipe_format f, enum pipe_texture_target target);