summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIago Toral Quiroga <itoral@igalia.com>2020-02-10 09:42:29 +0100
committerMarge Bot <eric+marge@anholt.net>2020-10-13 21:21:27 +0000
commitc7404f4e2d63e952fb97649291743b1d6eda1bce (patch)
tree3a38fbdc8a502c73823191a2e388948dfa40aec6
parent83e83257f801f156ed21296e4b25c4f1ba38dda7 (diff)
v3dv: Add more supported formats to our format table
Some of these may need additional work to work for real, but we should be able to support them. We also include some formats that are not supported for images, but that we want to support for buffers, such as R32G32B32 for a vertex buffer. In the future we might want to expand the format table to specify which formats are supported for buffers. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
-rw-r--r--src/broadcom/vulkan/v3dv_formats.c60
-rw-r--r--src/broadcom/vulkan/v3dv_private.h1
2 files changed, 57 insertions, 4 deletions
diff --git a/src/broadcom/vulkan/v3dv_formats.c b/src/broadcom/vulkan/v3dv_formats.c
index 2720272de20..f6fcafa63d1 100644
--- a/src/broadcom/vulkan/v3dv_formats.c
+++ b/src/broadcom/vulkan/v3dv_formats.c
@@ -59,14 +59,66 @@
#define SWIZ_XXXX SWIZ(X, X, X, X)
#define SWIZ_000X SWIZ(0, 0, 0, X)
+/* FIXME: expand format table to describe whether the format is supported
+ * for buffer surfaces (texel buffers, vertex buffers, etc).
+ */
static const struct v3dv_format format_table[] = {
- /* Color */
- FORMAT(R8G8B8A8_SRGB, SRGB8_ALPHA8, RGBA8, SWIZ_XYZW, 16),
+ /* Color, 4 channels */
FORMAT(B8G8R8A8_SRGB, SRGB8_ALPHA8, RGBA8, SWIZ_ZYXW, 16),
- FORMAT(R8G8B8A8_UNORM, RGBA8, RGBA8, SWIZ_XYZW, 16),
FORMAT(B8G8R8A8_UNORM, RGBA8, RGBA8, SWIZ_ZYXW, 16),
+
+ FORMAT(R8G8B8A8_SRGB, SRGB8_ALPHA8, RGBA8, SWIZ_XYZW, 16),
+ FORMAT(R8G8B8A8_UNORM, RGBA8, RGBA8, SWIZ_XYZW, 16),
+ FORMAT(R8G8B8A8_SNORM, NO, RGBA8_SNORM, SWIZ_XYZW, 16),
+ FORMAT(R8G8B8A8_SINT, RGBA8I, RGBA8I, SWIZ_XYZW, 16),
+ FORMAT(R8G8B8A8_UINT, RGBA8UI, RGBA8UI, SWIZ_XYZW, 16),
+
+ FORMAT(R16G16B16A16_SFLOAT, RGBA16F, RGBA16F, SWIZ_XYZW, 16),
+ FORMAT(R16G16B16A16_UNORM, NO, RGBA16, SWIZ_XYZW, 32),
+ FORMAT(R16G16B16A16_SNORM, NO, RGBA16_SNORM, SWIZ_XYZW, 32),
+ FORMAT(R16G16B16A16_SINT, RGBA16I, RGBA16I, SWIZ_XYZW, 16),
+ FORMAT(R16G16B16A16_UINT, RGBA16UI, RGBA16UI, SWIZ_XYZW, 16),
+
FORMAT(R32G32B32A32_SFLOAT, RGBA32F, RGBA32F, SWIZ_XYZW, 32),
- FORMAT(R32G32B32A32_SFLOAT, RGBA32F, RGBA32F, SWIZ_XYZW, 32),
+ FORMAT(R32G32B32A32_SINT, RGBA32I, RGBA32I, SWIZ_XYZW, 32),
+ FORMAT(R32G32B32A32_UINT, RGBA32UI, RGBA32UI, SWIZ_XYZW, 32),
+
+ /* Color, 3 channels */
+ FORMAT(R32G32B32_SFLOAT, NO, NO, SWIZ_XYZ1, 0),
+ FORMAT(R32G32B32_UINT, NO, NO, SWIZ_XYZ1, 0),
+ FORMAT(R32G32B32_SINT, NO, NO, SWIZ_XYZ1, 0),
+
+ /* Color, 2 channels */
+ FORMAT(R8G8_UNORM, RG8, RG8, SWIZ_XY01, 16),
+ FORMAT(R8G8_SNORM, NO, RG8_SNORM, SWIZ_XY01, 16),
+ FORMAT(R8G8_SINT, RG8I, RG8I, SWIZ_XY01, 16),
+ FORMAT(R8G8_UINT, RG8UI, RG8UI, SWIZ_XY01, 16),
+
+ FORMAT(R16G16_UNORM, NO, RG16, SWIZ_XY01, 32),
+ FORMAT(R16G16_SNORM, NO, RG16_SNORM, SWIZ_XY01, 32),
+ FORMAT(R16G16_SFLOAT, RG16F, RG16F, SWIZ_XY01, 16),
+ FORMAT(R16G16_SINT, RG16I, RG16I, SWIZ_XY01, 16),
+ FORMAT(R16G16_UINT, RG16UI, RG16UI, SWIZ_XY01, 16),
+
+ FORMAT(R32G32_SFLOAT, RG32F, RG32F, SWIZ_XY01, 32),
+ FORMAT(R32G32_SINT, RG32I, RG32I, SWIZ_XY01, 32),
+ FORMAT(R32G32_UINT, RG32UI, RG32UI, SWIZ_XY01, 32),
+
+ /* Color, 1 channel */
+ FORMAT(R8_UNORM, R8, R8, SWIZ_X001, 16),
+ FORMAT(R8_SNORM, NO, R8_SNORM, SWIZ_X001, 16),
+ FORMAT(R8_SINT, R8I, R8I, SWIZ_X001, 16),
+ FORMAT(R8_UINT, R8UI, R8UI, SWIZ_X001, 16),
+
+ FORMAT(R16_UNORM, NO, R16, SWIZ_X001, 32),
+ FORMAT(R16_SNORM, NO, R16_SNORM, SWIZ_X001, 32),
+ FORMAT(R16_SFLOAT, R16F, R16F, SWIZ_X001, 16),
+ FORMAT(R16_SINT, R16I, R16I, SWIZ_X001, 16),
+ FORMAT(R16_UINT, R16UI, R16UI, SWIZ_X001, 16),
+
+ FORMAT(R32_SFLOAT, R32F, R32F, SWIZ_X001, 32),
+ FORMAT(R32_SINT, R32I, R32I, SWIZ_X001, 32),
+ FORMAT(R32_UINT, R32UI, R32UI, SWIZ_X001, 32),
/* Depth */
FORMAT(D16_UNORM, D16, DEPTH_COMP16, SWIZ_XXXX, 32),
diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h
index c5f3247d6cb..da059c89226 100644
--- a/src/broadcom/vulkan/v3dv_private.h
+++ b/src/broadcom/vulkan/v3dv_private.h
@@ -225,6 +225,7 @@ struct v3dv_device_memory {
};
#define V3D_OUTPUT_IMAGE_FORMAT_NO 255
+#define TEXTURE_DATA_FORMAT_NO 255
struct v3dv_format {
bool supported;