Mesa (main): d3d12: Generate a pipe format -> typeless mapping table too

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Nov 19 23:20:52 UTC 2021


Module: Mesa
Branch: main
Commit: 9740141b2ef196c17719666fc402e361ae62af73
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9740141b2ef196c17719666fc402e361ae62af73

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Wed Nov 17 15:41:39 2021 -0800

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

Reviewed-by: Bill Kristiansen <billkris at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13054>

---

 src/gallium/drivers/d3d12/d3d12_format.c | 55 ++++++++++++++++++++++++++------
 src/gallium/drivers/d3d12/d3d12_format.h |  3 ++
 2 files changed, 48 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_format.c b/src/gallium/drivers/d3d12/d3d12_format.c
index 60a47215b14..ff11cab1b49 100644
--- a/src/gallium/drivers/d3d12/d3d12_format.c
+++ b/src/gallium/drivers/d3d12/d3d12_format.c
@@ -28,11 +28,19 @@
 #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) \
@@ -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)
 {
diff --git a/src/gallium/drivers/d3d12/d3d12_format.h b/src/gallium/drivers/d3d12/d3d12_format.h
index 962335731a5..ace42ad914d 100644
--- a/src/gallium/drivers/d3d12/d3d12_format.h
+++ b/src/gallium/drivers/d3d12/d3d12_format.h
@@ -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);
 



More information about the mesa-commit mailing list