Mesa (main): clover/format: Full rework on how we declare supported images.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Oct 18 21:29:03 UTC 2021
Module: Mesa
Branch: main
Commit: f09e6c1c5fcdfa0e16d09b30cc5deb1a4fedd728
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f09e6c1c5fcdfa0e16d09b30cc5deb1a4fedd728
Author: Karol Herbst <kherbst at redhat.com>
Date: Wed Oct 21 03:40:48 2020 +0200
clover/format: Full rework on how we declare supported images.
While at it also remove CL_LUMINANCE and CL_INTENSITY, which are optional
but also quite broken.
Also advertize all formats we can already support and make the list easier
to read. Also adds support for newer formats.
v2: fixup packing for non-8 bits (airlied)
Signed-off-by: Karol Herbst <kherbst at redhat.com>
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13424>
---
src/gallium/frontends/clover/core/format.cpp | 152 +++++++++++----------------
1 file changed, 64 insertions(+), 88 deletions(-)
diff --git a/src/gallium/frontends/clover/core/format.cpp b/src/gallium/frontends/clover/core/format.cpp
index 16a5767b934..64ceba7dedf 100644
--- a/src/gallium/frontends/clover/core/format.cpp
+++ b/src/gallium/frontends/clover/core/format.cpp
@@ -26,97 +26,73 @@
#include "pipe/p_context.h"
namespace clover {
+ // see table 16 and 17 in the 3.0 CL spec under "5.3.1.1. Image Format Descriptor"
+ // TODO optional channel orders:
+ // * CL_Rx
+ // * CL_RGx
+ // * CL_RGBx
+ // * CL_sRGBx
+ #define _FF(c, b, g) \
+ { { CL_R, c }, PIPE_FORMAT_R##b##_##g }, \
+ { { CL_A, c }, PIPE_FORMAT_A##b##_##g }, \
+ { { CL_RG, c }, PIPE_FORMAT_R##b##G##b##_##g }, \
+ { { CL_RA, c }, PIPE_FORMAT_R##b##A##b##_##g }, \
+ { { CL_RGB, c }, PIPE_FORMAT_R##b##G##b##B##b##_##g }, \
+ { { CL_RGBA, c }, PIPE_FORMAT_R##b##G##b##B##b##A##b##_##g }
+ // broken but also optional
+ //{ { CL_LUMINANCE, c }, PIPE_FORMAT_L##b##_##g },
+ //{ { CL_INTENSITY, c }, PIPE_FORMAT_I##b##_##g },
+
+ #define _FI(c, b, g) \
+ _FF(c##b, b, g)
+
static const std::map<cl_image_format, pipe_format> formats {
- { { CL_BGRA, CL_UNORM_INT8 }, PIPE_FORMAT_B8G8R8A8_UNORM },
- { { CL_ARGB, CL_UNORM_INT8 }, PIPE_FORMAT_A8R8G8B8_UNORM },
+ //required in CL 2.0 but broken
+ //_FI(CL_SNORM_INT, 8, SNORM),
+ //_FI(CL_SNORM_INT, 16, SNORM),
+ _FI(CL_UNORM_INT, 8, UNORM),
+ _FI(CL_UNORM_INT, 16, UNORM),
+ _FI(CL_SIGNED_INT, 8, SINT),
+ _FI(CL_SIGNED_INT, 16, SINT),
+ _FI(CL_SIGNED_INT, 32, SINT),
+ _FI(CL_UNSIGNED_INT, 8, UINT),
+ _FI(CL_UNSIGNED_INT, 16, UINT),
+ _FI(CL_UNSIGNED_INT, 32, UINT),
+ _FF(CL_HALF_FLOAT, 16, FLOAT),
+ _FF(CL_FLOAT, 32, FLOAT),
+
+ // TODO: next three can be CL_RGBx as well
{ { CL_RGB, CL_UNORM_SHORT_565 }, PIPE_FORMAT_B5G6R5_UNORM },
- { { CL_LUMINANCE, CL_UNORM_INT8 }, PIPE_FORMAT_L8_UNORM },
- { { CL_A, CL_UNORM_INT8 }, PIPE_FORMAT_A8_UNORM },
- { { CL_INTENSITY, CL_UNORM_INT8 }, PIPE_FORMAT_I8_UNORM },
- { { CL_LUMINANCE, CL_UNORM_INT16 }, PIPE_FORMAT_L16_UNORM },
- { { CL_R, CL_FLOAT }, PIPE_FORMAT_R32_FLOAT },
- { { CL_RG, CL_FLOAT }, PIPE_FORMAT_R32G32_FLOAT },
- { { CL_RGB, CL_FLOAT }, PIPE_FORMAT_R32G32B32_FLOAT },
- { { CL_RGBA, CL_FLOAT }, PIPE_FORMAT_R32G32B32A32_FLOAT },
- { { CL_R, CL_UNORM_INT16 }, PIPE_FORMAT_R16_UNORM },
- { { CL_RG, CL_UNORM_INT16 }, PIPE_FORMAT_R16G16_UNORM },
- { { CL_RGB, CL_UNORM_INT16 }, PIPE_FORMAT_R16G16B16_UNORM },
- { { CL_RGBA, CL_UNORM_INT16 }, PIPE_FORMAT_R16G16B16A16_UNORM },
- { { CL_R, CL_SNORM_INT16 }, PIPE_FORMAT_R16_SNORM },
- { { CL_RG, CL_SNORM_INT16 }, PIPE_FORMAT_R16G16_SNORM },
- { { CL_RGB, CL_SNORM_INT16 }, PIPE_FORMAT_R16G16B16_SNORM },
- { { CL_RGBA, CL_SNORM_INT16 }, PIPE_FORMAT_R16G16B16A16_SNORM },
- { { CL_R, CL_UNORM_INT8 }, PIPE_FORMAT_R8_UNORM },
- { { CL_RG, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8_UNORM },
- { { CL_RGB, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8B8_UNORM },
- { { CL_RGBA, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8B8A8_UNORM },
- { { CL_R, CL_SNORM_INT8 }, PIPE_FORMAT_R8_SNORM },
- { { CL_RG, CL_SNORM_INT8 }, PIPE_FORMAT_R8G8_SNORM },
- { { CL_RGB, CL_SNORM_INT8 }, PIPE_FORMAT_R8G8B8_SNORM },
- { { CL_RGBA, CL_SNORM_INT8 }, PIPE_FORMAT_R8G8B8A8_SNORM },
- { { CL_R, CL_HALF_FLOAT }, PIPE_FORMAT_R16_FLOAT },
- { { CL_RG, CL_HALF_FLOAT }, PIPE_FORMAT_R16G16_FLOAT },
- { { CL_RGB, CL_HALF_FLOAT }, PIPE_FORMAT_R16G16B16_FLOAT },
- { { CL_RGBA, CL_HALF_FLOAT }, PIPE_FORMAT_R16G16B16A16_FLOAT },
- { { CL_RGBx, CL_UNORM_SHORT_555 }, PIPE_FORMAT_B5G5R5X1_UNORM },
- { { CL_RGBx, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8B8X8_UNORM },
- { { CL_A, CL_UNORM_INT16 }, PIPE_FORMAT_A16_UNORM },
- { { CL_INTENSITY, CL_UNORM_INT16 }, PIPE_FORMAT_I16_UNORM },
- { { CL_LUMINANCE, CL_SNORM_INT8 }, PIPE_FORMAT_L8_SNORM },
- { { CL_INTENSITY, CL_SNORM_INT8 }, PIPE_FORMAT_I8_SNORM },
- { { CL_A, CL_SNORM_INT16 }, PIPE_FORMAT_A16_SNORM },
- { { CL_LUMINANCE, CL_SNORM_INT16 }, PIPE_FORMAT_L16_SNORM },
- { { CL_INTENSITY, CL_SNORM_INT16 }, PIPE_FORMAT_I16_SNORM },
- { { CL_A, CL_HALF_FLOAT }, PIPE_FORMAT_A16_FLOAT },
- { { CL_LUMINANCE, CL_HALF_FLOAT }, PIPE_FORMAT_L16_FLOAT },
- { { CL_INTENSITY, CL_HALF_FLOAT }, PIPE_FORMAT_I16_FLOAT },
- { { CL_A, CL_FLOAT }, PIPE_FORMAT_A32_FLOAT },
- { { CL_LUMINANCE, CL_FLOAT }, PIPE_FORMAT_L32_FLOAT },
- { { CL_INTENSITY, CL_FLOAT }, PIPE_FORMAT_I32_FLOAT },
- { { CL_RA, CL_UNORM_INT8 }, PIPE_FORMAT_R8A8_UNORM },
- { { CL_R, CL_UNSIGNED_INT8 }, PIPE_FORMAT_R8_UINT },
- { { CL_RG, CL_UNSIGNED_INT8 }, PIPE_FORMAT_R8G8_UINT },
- { { CL_RGB, CL_UNSIGNED_INT8 }, PIPE_FORMAT_R8G8B8_UINT },
- { { CL_RGBA, CL_UNSIGNED_INT8 }, PIPE_FORMAT_R8G8B8A8_UINT },
- { { CL_R, CL_SIGNED_INT8 }, PIPE_FORMAT_R8_SINT },
- { { CL_RG, CL_SIGNED_INT8 }, PIPE_FORMAT_R8G8_SINT },
- { { CL_RGB, CL_SIGNED_INT8 }, PIPE_FORMAT_R8G8B8_SINT },
- { { CL_RGBA, CL_SIGNED_INT8 }, PIPE_FORMAT_R8G8B8A8_SINT },
- { { CL_R, CL_UNSIGNED_INT16 }, PIPE_FORMAT_R16_UINT },
- { { CL_RG, CL_UNSIGNED_INT16 }, PIPE_FORMAT_R16G16_UINT },
- { { CL_RGB, CL_UNSIGNED_INT16 }, PIPE_FORMAT_R16G16B16_UINT },
- { { CL_RGBA, CL_UNSIGNED_INT16 }, PIPE_FORMAT_R16G16B16A16_UINT },
- { { CL_R, CL_SIGNED_INT16 }, PIPE_FORMAT_R16_SINT },
- { { CL_RG, CL_SIGNED_INT16 }, PIPE_FORMAT_R16G16_SINT },
- { { CL_RGB, CL_SIGNED_INT16 }, PIPE_FORMAT_R16G16B16_SINT },
- { { CL_RGBA, CL_SIGNED_INT16 }, PIPE_FORMAT_R16G16B16A16_SINT },
- { { CL_R, CL_UNSIGNED_INT32 }, PIPE_FORMAT_R32_UINT },
- { { CL_RG, CL_UNSIGNED_INT32 }, PIPE_FORMAT_R32G32_UINT },
- { { CL_RGB, CL_UNSIGNED_INT32 }, PIPE_FORMAT_R32G32B32_UINT },
- { { CL_RGBA, CL_UNSIGNED_INT32 }, PIPE_FORMAT_R32G32B32A32_UINT },
- { { CL_R, CL_SIGNED_INT32 }, PIPE_FORMAT_R32_SINT },
- { { CL_RG, CL_SIGNED_INT32 }, PIPE_FORMAT_R32G32_SINT },
- { { CL_RGB, CL_SIGNED_INT32 }, PIPE_FORMAT_R32G32B32_SINT },
- { { CL_RGBA, CL_SIGNED_INT32 }, PIPE_FORMAT_R32G32B32A32_SINT },
- { { CL_A, CL_UNSIGNED_INT8 }, PIPE_FORMAT_A8_UINT },
- { { CL_INTENSITY, CL_UNSIGNED_INT8 }, PIPE_FORMAT_I8_UINT },
- { { CL_LUMINANCE, CL_UNSIGNED_INT8 }, PIPE_FORMAT_L8_UINT },
- { { CL_A, CL_SIGNED_INT8 }, PIPE_FORMAT_A8_SINT },
- { { CL_INTENSITY, CL_SIGNED_INT8 }, PIPE_FORMAT_I8_SINT },
- { { CL_LUMINANCE, CL_SIGNED_INT8 }, PIPE_FORMAT_L8_SINT },
- { { CL_A, CL_UNSIGNED_INT16 }, PIPE_FORMAT_A16_UINT },
- { { CL_INTENSITY, CL_UNSIGNED_INT16 }, PIPE_FORMAT_I16_UINT },
- { { CL_LUMINANCE, CL_UNSIGNED_INT16 }, PIPE_FORMAT_L16_UINT },
- { { CL_A, CL_SIGNED_INT16 }, PIPE_FORMAT_A16_SINT },
- { { CL_INTENSITY, CL_SIGNED_INT16 }, PIPE_FORMAT_I16_SINT },
- { { CL_LUMINANCE, CL_SIGNED_INT16 }, PIPE_FORMAT_L16_SINT },
- { { CL_A, CL_UNSIGNED_INT32 }, PIPE_FORMAT_A32_UINT },
- { { CL_INTENSITY, CL_UNSIGNED_INT32 }, PIPE_FORMAT_I32_UINT },
- { { CL_LUMINANCE, CL_UNSIGNED_INT32 }, PIPE_FORMAT_L32_UINT },
- { { CL_A, CL_SIGNED_INT32 }, PIPE_FORMAT_A32_SINT },
- { { CL_INTENSITY, CL_SIGNED_INT32 }, PIPE_FORMAT_I32_SINT },
- { { CL_LUMINANCE, CL_SIGNED_INT32 }, PIPE_FORMAT_L32_SINT }
+ { { CL_RGB, CL_UNORM_SHORT_555 }, PIPE_FORMAT_B5G5R5A1_UNORM },
+ { { CL_RGB, CL_UNORM_INT_101010 }, PIPE_FORMAT_B10G10R10X2_UNORM },
+
+ { { CL_RGBA, CL_UNORM_INT_101010_2 }, PIPE_FORMAT_B10G10R10A2_UNORM },
+
+ { { CL_ARGB, CL_UNORM_INT8 }, PIPE_FORMAT_A8R8G8B8_UNORM },
+ { { CL_ARGB, CL_UNSIGNED_INT8 }, PIPE_FORMAT_A8R8G8B8_UINT },
+
+ { { CL_BGRA, CL_SNORM_INT8 }, PIPE_FORMAT_B8G8R8A8_SNORM },
+ { { CL_BGRA, CL_UNORM_INT8 }, PIPE_FORMAT_B8G8R8A8_UNORM },
+ { { CL_BGRA, CL_SIGNED_INT8 }, PIPE_FORMAT_B8G8R8A8_SINT },
+ { { CL_BGRA, CL_UNSIGNED_INT8 }, PIPE_FORMAT_B8G8R8A8_UINT },
+
+ { { CL_ABGR, CL_SNORM_INT8 }, PIPE_FORMAT_A8B8G8R8_SNORM },
+ { { CL_ABGR, CL_UNORM_INT8 }, PIPE_FORMAT_A8B8G8R8_UNORM },
+ { { CL_ABGR, CL_SIGNED_INT8 }, PIPE_FORMAT_A8B8G8R8_SINT },
+ { { CL_ABGR, CL_UNSIGNED_INT8 }, PIPE_FORMAT_A8B8G8R8_UINT },
+
+ // disable for now as it needs CL C 2.0 support
+ //{ { CL_DEPTH, CL_UNORM_INT16 }, PIPE_FORMAT_Z16_UNORM },
+ //{ { CL_DEPTH, CL_FLOAT }, PIPE_FORMAT_Z32_FLOAT },
+
+ // required in CL 2.0 but broken
+ //{ { CL_sRGBA, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8B8A8_SRGB },
+ // optional but broken
+ //{ { CL_sRGB, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8B8_SRGB },
+ //{ { CL_sBGRA, CL_UNORM_INT8 }, PIPE_FORMAT_B8G8R8A8_SRGB },
};
+ #undef _FF
+ #undef _FI
pipe_texture_target
translate_target(cl_mem_object_type type) {
More information about the mesa-commit
mailing list