#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_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) \
- [PIPE_FORMAT_ ## BITS1 ## _ ## TYPE1] = DXGI_FORMAT_ ## 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_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) \
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) \
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)
{
}
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)
{
switch (f) {