From ca7d4fcb3fccda9d01b8843f98afb397f75dcf11 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Wed, 17 Nov 2021 15:29:03 -0800 Subject: [PATCH] d3d12: Generate format table using a macro list Reviewed-by: Bill Kristiansen Part-of: --- src/gallium/drivers/d3d12/d3d12_format.c | 187 ++++++++++++----------- 1 file changed, 95 insertions(+), 92 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_format.c b/src/gallium/drivers/d3d12/d3d12_format.c index 1bcc57bb211..60a47215b14 100644 --- a/src/gallium/drivers/d3d12/d3d12_format.c +++ b/src/gallium/drivers/d3d12/d3d12_format.c @@ -60,99 +60,102 @@ #define MAP_FORMAT_X8(BITS, TYPE) \ MAP_FORMAT2(BITS ## X8, TYPE, BITS ## A8, TYPE) \ -static const DXGI_FORMAT formats[PIPE_FORMAT_COUNT] = { - MAP_FORMAT_NORM(R8) - MAP_FORMAT_INT(R8) - - MAP_FORMAT_NORM(R8G8) - MAP_FORMAT_INT(R8G8) - - MAP_FORMAT_NORM(R8G8B8A8) - MAP_FORMAT_INT(R8G8B8A8) - MAP_FORMAT_SRGB(R8G8B8A8) - - /* Since we report PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND and other caps, - * we can rely on st/mesa to force the alpha to 1 for these, so we can - * just use RGBA. This is needed to support RGB configs, since some apps - * will only choose RGB (not RGBA) configs. - */ - MAP_FORMAT_X8(R8G8B8, UNORM) - MAP_FORMAT_X8(R8G8B8, SNORM) - MAP_FORMAT_X8(R8G8B8, UINT) - MAP_FORMAT_X8(R8G8B8, SINT) - - MAP_FORMAT(B8G8R8X8, UNORM) - MAP_FORMAT(B8G8R8A8, UNORM) - - MAP_FORMAT_SRGB(B8G8R8A8) - - MAP_FORMAT_INT(R32) - MAP_FORMAT_FLOAT(R32) - MAP_FORMAT_INT(R32G32) - MAP_FORMAT_FLOAT(R32G32) - MAP_FORMAT_INT(R32G32B32) - MAP_FORMAT_FLOAT(R32G32B32) - MAP_FORMAT_INT(R32G32B32A32) - MAP_FORMAT_FLOAT(R32G32B32A32) - - MAP_FORMAT_NORM(R16) - MAP_FORMAT_INT(R16) - MAP_FORMAT_FLOAT(R16) - - MAP_FORMAT_NORM(R16G16) - MAP_FORMAT_INT(R16G16) - MAP_FORMAT_FLOAT(R16G16) - - MAP_FORMAT_NORM(R16G16B16A16) - MAP_FORMAT_INT(R16G16B16A16) - MAP_FORMAT_FLOAT(R16G16B16A16) - - MAP_FORMAT(A8, UNORM) - MAP_EMU_FORMAT_NO_ALPHA(8, UNORM) - MAP_EMU_FORMAT(8, SNORM) - MAP_EMU_FORMAT(8, SINT) - MAP_EMU_FORMAT(8, UINT) - MAP_EMU_FORMAT(16, UNORM) - MAP_EMU_FORMAT(16, SNORM) - MAP_EMU_FORMAT(16, SINT) - MAP_EMU_FORMAT(16, UINT) - MAP_EMU_FORMAT(16, FLOAT) - MAP_EMU_FORMAT(32, 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_FORMAT(B5G6R5, UNORM) - MAP_FORMAT(B5G5R5A1, UNORM) - MAP_FORMAT2(B5G5R5X1, UNORM, B5G5R5A1, UNORM) - - MAP_FORMAT2(DXT1, RGB, BC1, UNORM) - MAP_FORMAT2(DXT1, RGBA, BC1, UNORM) - MAP_FORMAT2(DXT3, RGBA, BC2, UNORM) - MAP_FORMAT2(DXT5, RGBA, BC3, UNORM) - - MAP_FORMAT2(DXT1, SRGB, BC1, UNORM_SRGB) - MAP_FORMAT2(DXT1, SRGBA, BC1, UNORM_SRGB) - MAP_FORMAT2(DXT3, SRGBA, BC2, UNORM_SRGB) - MAP_FORMAT2(DXT5, SRGBA, BC3, UNORM_SRGB) - - MAP_FORMAT2(RGTC1, UNORM, BC4, UNORM) - MAP_FORMAT2(RGTC1, SNORM, BC4, SNORM) - MAP_FORMAT2(RGTC2, UNORM, BC5, UNORM) - MAP_FORMAT2(RGTC2, SNORM, BC5, SNORM) - - MAP_FORMAT2(Z32, FLOAT, R32, TYPELESS) - MAP_FORMAT2(Z16, UNORM, R16, TYPELESS) - MAP_FORMAT2(Z24X8, UNORM, R24G8, TYPELESS) - MAP_FORMAT2(X24S8, UINT, R24G8, TYPELESS) - - MAP_FORMAT2(Z24_UNORM_S8, UINT, R24G8, TYPELESS) - MAP_FORMAT2(Z32_FLOAT_S8X24, UINT, R32G8X24, TYPELESS) +#define FORMAT_TABLE() \ + MAP_FORMAT_NORM(R8) \ + MAP_FORMAT_INT(R8) \ +\ + MAP_FORMAT_NORM(R8G8) \ + MAP_FORMAT_INT(R8G8) \ +\ + MAP_FORMAT_NORM(R8G8B8A8) \ + MAP_FORMAT_INT(R8G8B8A8) \ + MAP_FORMAT_SRGB(R8G8B8A8) \ +\ + /* Since we report PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND and other caps, \ + * we can rely on st/mesa to force the alpha to 1 for these, so we can \ + * just use RGBA. This is needed to support RGB configs, since some apps \ + * will only choose RGB (not RGBA) configs. \ + */ \ + MAP_FORMAT_X8(R8G8B8, UNORM) \ + MAP_FORMAT_X8(R8G8B8, SNORM) \ + MAP_FORMAT_X8(R8G8B8, UINT) \ + MAP_FORMAT_X8(R8G8B8, SINT) \ +\ + MAP_FORMAT(B8G8R8X8, UNORM) \ + MAP_FORMAT(B8G8R8A8, UNORM) \ +\ + MAP_FORMAT_SRGB(B8G8R8A8) \ +\ + MAP_FORMAT_INT(R32) \ + MAP_FORMAT_FLOAT(R32) \ + MAP_FORMAT_INT(R32G32) \ + MAP_FORMAT_FLOAT(R32G32) \ + MAP_FORMAT_INT(R32G32B32) \ + MAP_FORMAT_FLOAT(R32G32B32) \ + MAP_FORMAT_INT(R32G32B32A32) \ + MAP_FORMAT_FLOAT(R32G32B32A32) \ +\ + MAP_FORMAT_NORM(R16) \ + MAP_FORMAT_INT(R16) \ + MAP_FORMAT_FLOAT(R16) \ +\ + MAP_FORMAT_NORM(R16G16) \ + MAP_FORMAT_INT(R16G16) \ + MAP_FORMAT_FLOAT(R16G16) \ +\ + MAP_FORMAT_NORM(R16G16B16A16) \ + MAP_FORMAT_INT(R16G16B16A16) \ + MAP_FORMAT_FLOAT(R16G16B16A16) \ +\ + MAP_FORMAT(A8, UNORM) \ + MAP_EMU_FORMAT_NO_ALPHA(8, UNORM) \ + MAP_EMU_FORMAT(8, SNORM) \ + MAP_EMU_FORMAT(8, SINT) \ + MAP_EMU_FORMAT(8, UINT) \ + MAP_EMU_FORMAT(16, UNORM) \ + MAP_EMU_FORMAT(16, SNORM) \ + MAP_EMU_FORMAT(16, SINT) \ + MAP_EMU_FORMAT(16, UINT) \ + MAP_EMU_FORMAT(16, FLOAT) \ + MAP_EMU_FORMAT(32, 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_FORMAT(B5G6R5, UNORM) \ + MAP_FORMAT(B5G5R5A1, UNORM) \ + MAP_FORMAT2(B5G5R5X1, UNORM, B5G5R5A1, UNORM) \ +\ + MAP_FORMAT2(DXT1, RGB, BC1, UNORM) \ + MAP_FORMAT2(DXT1, RGBA, BC1, UNORM) \ + MAP_FORMAT2(DXT3, RGBA, BC2, UNORM) \ + MAP_FORMAT2(DXT5, RGBA, BC3, UNORM) \ +\ + MAP_FORMAT2(DXT1, SRGB, BC1, UNORM_SRGB) \ + MAP_FORMAT2(DXT1, SRGBA, BC1, UNORM_SRGB) \ + MAP_FORMAT2(DXT3, SRGBA, BC2, UNORM_SRGB) \ + MAP_FORMAT2(DXT5, SRGBA, BC3, UNORM_SRGB) \ +\ + MAP_FORMAT2(RGTC1, UNORM, BC4, UNORM) \ + MAP_FORMAT2(RGTC1, SNORM, BC4, SNORM) \ + MAP_FORMAT2(RGTC2, UNORM, BC5, UNORM) \ + MAP_FORMAT2(RGTC2, SNORM, BC5, SNORM) \ +\ + MAP_FORMAT2(Z32, FLOAT, R32, TYPELESS) \ + MAP_FORMAT2(Z16, UNORM, R16, TYPELESS) \ + MAP_FORMAT2(Z24X8, UNORM, R24G8, TYPELESS) \ + MAP_FORMAT2(X24S8, UINT, R24G8, TYPELESS) \ +\ + MAP_FORMAT2(Z24_UNORM_S8, UINT, R24G8, TYPELESS) \ + MAP_FORMAT2(Z32_FLOAT_S8X24, UINT, R32G8X24, TYPELESS) \ MAP_FORMAT2(X32_S8X24, UINT, R32G8X24, TYPELESS) + +static const DXGI_FORMAT formats[PIPE_FORMAT_COUNT] = { + FORMAT_TABLE() }; DXGI_FORMAT