rusticl/format: enable all trivial to support optional image formats
authorKarol Herbst <git@karolherbst.de>
Sun, 18 Jun 2023 14:53:08 +0000 (16:53 +0200)
committerKarol Herbst <git@karolherbst.de>
Mon, 19 Jun 2023 12:07:07 +0000 (14:07 +0200)
Signed-off-by: Karol Herbst <git@karolherbst.de>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Nora Allen <blackcatgames@protonmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23714>

docs/features.txt
src/gallium/frontends/rusticl/core/device.rs
src/gallium/frontends/rusticl/core/format.rs

index ee68411..66f11f6 100644 (file)
@@ -799,7 +799,7 @@ Clover extensions that are not part of any OpenCL version:
 Rusticl OpenCL 1.0 -- all DONE:
 
   Image support                                         DONE
-  - Optional image formats                              not started
+  - Optional image formats                              in progress
 
 
 Rusticl OpenCL 1.1 -- all DONE:
@@ -859,10 +859,10 @@ Rusticl OpenCL 2.0 -- all DONE:
   - Additional queries for clGetDeviceInfo              DONE
   Pipes                                                 not started
   Extended 2D images creation                           in progress
-  - CL_ABGR                                             not started
+  - CL_ABGR                                             DONE
   - cl_khr_image2d_from_buffer                          DONE (iris, llvmpipe)
   - cl_khr_depth_images                                 not started
-  - from sRGB images                                    not started
+  - from sRGB images                                    in progress
   clCreateSamplerWithProperties                         DONE
   Non-uniform work-group sizes                          not started
   cl_khr_3d_image_writes                                DONE
index 5eb2fc8..bc82500 100644 (file)
@@ -232,22 +232,31 @@ impl Device {
                 ) {
                     flags |= CL_MEM_READ_ONLY;
                 }
-                if self.screen.is_format_supported(
-                    f.pipe,
-                    cl_mem_type_to_texture_target(t),
-                    PIPE_BIND_SHADER_IMAGE,
-                ) {
+
+                // TODO: cl_khr_srgb_image_writes
+                if !f.is_srgb
+                    && self.screen.is_format_supported(
+                        f.pipe,
+                        cl_mem_type_to_texture_target(t),
+                        PIPE_BIND_SHADER_IMAGE,
+                    )
+                {
                     flags |= CL_MEM_WRITE_ONLY;
                     // TODO: enable once we support it
                     // flags |= CL_MEM_KERNEL_READ_AND_WRITE;
                 }
-                if self.screen.is_format_supported(
-                    f.pipe,
-                    cl_mem_type_to_texture_target(t),
-                    PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_SHADER_IMAGE,
-                ) {
+
+                // TODO: cl_khr_srgb_image_writes
+                if !f.is_srgb
+                    && self.screen.is_format_supported(
+                        f.pipe,
+                        cl_mem_type_to_texture_target(t),
+                        PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_SHADER_IMAGE,
+                    )
+                {
                     flags |= CL_MEM_READ_WRITE;
                 }
+
                 fs.insert(t, flags as cl_mem_flags);
             }
             self.formats.insert(f.cl_image_format, fs);
index 3081565..2a0ff23 100644 (file)
@@ -7,6 +7,7 @@ pub struct RusticlImageFormat {
     pub req_for_embeded_read_or_write: bool,
     pub req_for_full_read_and_write: bool,
     pub req_for_full_cl2: bool,
+    pub is_srgb: bool,
     pub pipe: pipe_format,
 }
 
@@ -42,6 +43,7 @@ pub struct RusticlImageFormat {
 // FLOAT        => 32 FLOAT
 macro_rules! cl_format_table {
     ([$(($order: ident, $type: ident) => $pipe: expr,)+]) => {
+        #[allow(non_upper_case_globals)]
         const fn cl_format_to_pipe(
             ch_order: cl_channel_order,
             ch_type: cl_channel_type
@@ -59,30 +61,157 @@ macro_rules! cl_format_table {
 }
 
 cl_format_table!([
-    (CL_R,    CL_HALF_FLOAT)     => pipe_format::PIPE_FORMAT_R16_FLOAT,
-    (CL_RGBA, CL_HALF_FLOAT)     => pipe_format::PIPE_FORMAT_R16G16B16A16_FLOAT,
-
-    (CL_R,    CL_FLOAT)          => pipe_format::PIPE_FORMAT_R32_FLOAT,
-    (CL_RGBA, CL_FLOAT)          => pipe_format::PIPE_FORMAT_R32G32B32A32_FLOAT,
-
-    (CL_R,    CL_SIGNED_INT8)    => pipe_format::PIPE_FORMAT_R8_SINT,
-    (CL_RGBA, CL_SIGNED_INT8)    => pipe_format::PIPE_FORMAT_R8G8B8A8_SINT,
-    (CL_R,    CL_SIGNED_INT16)   => pipe_format::PIPE_FORMAT_R16_SINT,
-    (CL_RGBA, CL_SIGNED_INT16)   => pipe_format::PIPE_FORMAT_R16G16B16A16_SINT,
-    (CL_R,    CL_SIGNED_INT32)   => pipe_format::PIPE_FORMAT_R32_SINT,
-    (CL_RGBA, CL_SIGNED_INT32)   => pipe_format::PIPE_FORMAT_R32G32B32A32_SINT,
-    (CL_R,    CL_UNSIGNED_INT8)  => pipe_format::PIPE_FORMAT_R8_UINT,
-    (CL_RGBA, CL_UNSIGNED_INT8)  => pipe_format::PIPE_FORMAT_R8G8B8A8_UINT,
-    (CL_R,    CL_UNSIGNED_INT16) => pipe_format::PIPE_FORMAT_R16_UINT,
-    (CL_RGBA, CL_UNSIGNED_INT16) => pipe_format::PIPE_FORMAT_R16G16B16A16_UINT,
-    (CL_R,    CL_UNSIGNED_INT32) => pipe_format::PIPE_FORMAT_R32_UINT,
-    (CL_RGBA, CL_UNSIGNED_INT32) => pipe_format::PIPE_FORMAT_R32G32B32A32_UINT,
-
-    (CL_R,    CL_UNORM_INT8)     => pipe_format::PIPE_FORMAT_R8_UNORM,
-    (CL_RGBA, CL_UNORM_INT8)     => pipe_format::PIPE_FORMAT_R8G8B8A8_UNORM,
-    (CL_BGRA, CL_UNORM_INT8)     => pipe_format::PIPE_FORMAT_B8G8R8A8_UNORM,
-    (CL_R,    CL_UNORM_INT16)    => pipe_format::PIPE_FORMAT_R16_UNORM,
-    (CL_RGBA, CL_UNORM_INT16)    => pipe_format::PIPE_FORMAT_R16G16B16A16_UNORM,
+// broken on iris/gen12
+//  (CL_A,         CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_A16_FLOAT,
+//  (CL_A,         CL_FLOAT)              => pipe_format::PIPE_FORMAT_A32_FLOAT,
+//  (CL_A,         CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_A8_SINT,
+//  (CL_A,         CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_A16_SINT,
+    (CL_A,         CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_A32_SINT,
+// broken on iris/gen12
+//  (CL_A,         CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_A8_UINT,
+//  (CL_A,         CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_A16_UINT,
+    (CL_A,         CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_A32_UINT,
+    (CL_A,         CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_A8_SNORM,
+    (CL_A,         CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_A16_SNORM,
+    (CL_A,         CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_A8_UNORM,
+    (CL_A,         CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_A16_UNORM,
+
+    (CL_R,         CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_R16_FLOAT,
+    (CL_R,         CL_FLOAT)              => pipe_format::PIPE_FORMAT_R32_FLOAT,
+    (CL_R,         CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_R8_SINT,
+    (CL_R,         CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_R16_SINT,
+    (CL_R,         CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_R32_SINT,
+    (CL_R,         CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_R8_UINT,
+    (CL_R,         CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_R16_UINT,
+    (CL_R,         CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_R32_UINT,
+    (CL_R,         CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_R8_SNORM,
+    (CL_R,         CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_R16_SNORM,
+    (CL_R,         CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8_UNORM,
+    (CL_R,         CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_R16_UNORM,
+
+    (CL_RA,        CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_R16A16_FLOAT,
+    (CL_RA,        CL_FLOAT)              => pipe_format::PIPE_FORMAT_R32A32_FLOAT,
+    (CL_RA,        CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_R8A8_SINT,
+    (CL_RA,        CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_R16A16_SINT,
+    (CL_RA,        CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_R32A32_SINT,
+    (CL_RA,        CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_R8A8_UINT,
+    (CL_RA,        CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_R16A16_UINT,
+    (CL_RA,        CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_R32A32_UINT,
+    (CL_RA,        CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_R8A8_SNORM,
+    (CL_RA,        CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_R16A16_SNORM,
+    (CL_RA,        CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8A8_UNORM,
+    (CL_RA,        CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_R16A16_UNORM,
+
+    (CL_RG,        CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_R16G16_FLOAT,
+    (CL_RG,        CL_FLOAT)              => pipe_format::PIPE_FORMAT_R32G32_FLOAT,
+    (CL_RG,        CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_R8G8_SINT,
+    (CL_RG,        CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_R16G16_SINT,
+    (CL_RG,        CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_R32G32_SINT,
+    (CL_RG,        CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_R8G8_UINT,
+    (CL_RG,        CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_R16G16_UINT,
+    (CL_RG,        CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_R32G32_UINT,
+    (CL_RG,        CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8_SNORM,
+    (CL_RG,        CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_R16G16_SNORM,
+    (CL_RG,        CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8_UNORM,
+    (CL_RG,        CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_R16G16_UNORM,
+
+    (CL_RGB,       CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_R16G16B16_FLOAT,
+    (CL_RGB,       CL_FLOAT)              => pipe_format::PIPE_FORMAT_R32G32B32_FLOAT,
+    (CL_RGB,       CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_R8G8B8_SINT,
+    (CL_RGB,       CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_R16G16B16_SINT,
+    (CL_RGB,       CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_R32G32B32_SINT,
+    (CL_RGB,       CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_R8G8B8_UINT,
+    (CL_RGB,       CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_R16G16B16_UINT,
+    (CL_RGB,       CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_R32G32B32_UINT,
+    (CL_RGB,       CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8_SNORM,
+    (CL_RGB,       CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_R16G16B16_SNORM,
+    (CL_RGB,       CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8_UNORM,
+    (CL_RGB,       CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_R16G16B16_UNORM,
+// broken
+//  (CL_RGB,       CL_UNORM_SHORT_565)    => pipe_format::PIPE_FORMAT_R5G6B5_UNORM,
+
+    (CL_ABGR,      CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_A8B8G8R8_SINT,
+    (CL_ABGR,      CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_A8B8G8R8_UINT,
+    (CL_ABGR,      CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_A8B8G8R8_SNORM,
+    (CL_ABGR,      CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_A8B8G8R8_UNORM,
+
+    (CL_ARGB,      CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_A8R8G8B8_SINT,
+    (CL_ARGB,      CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_A8R8G8B8_UINT,
+    (CL_ARGB,      CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_A8R8G8B8_SNORM,
+    (CL_ARGB,      CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_A8R8G8B8_UNORM,
+
+    (CL_BGRA,      CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_B8G8R8A8_SINT,
+    (CL_BGRA,      CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_B8G8R8A8_UINT,
+    (CL_BGRA,      CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_B8G8R8A8_SNORM,
+    (CL_BGRA,      CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_B8G8R8A8_UNORM,
+
+    (CL_RGBA,      CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_R16G16B16A16_FLOAT,
+    (CL_RGBA,      CL_FLOAT)              => pipe_format::PIPE_FORMAT_R32G32B32A32_FLOAT,
+    (CL_RGBA,      CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_R8G8B8A8_SINT,
+    (CL_RGBA,      CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_R16G16B16A16_SINT,
+    (CL_RGBA,      CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_R32G32B32A32_SINT,
+    (CL_RGBA,      CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_R8G8B8A8_UINT,
+    (CL_RGBA,      CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_R16G16B16A16_UINT,
+    (CL_RGBA,      CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_R32G32B32A32_UINT,
+    (CL_RGBA,      CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8A8_SNORM,
+    (CL_RGBA,      CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_R16G16B16A16_SNORM,
+    (CL_RGBA,      CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8A8_UNORM,
+    (CL_RGBA,      CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_R16G16B16A16_UNORM,
+// broken
+//  (CL_RGBA,      CL_UNORM_INT_101010_2) => pipe_format::PIPE_FORMAT_R10G10B10A2_UNORM,
+
+// broken
+//  (CL_RGBx,      CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_R16G16B16X16_FLOAT,
+//  (CL_RGBx,      CL_FLOAT)              => pipe_format::PIPE_FORMAT_R32G32B32X32_FLOAT,
+//  (CL_RGBx,      CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_R8G8B8X8_SINT,
+//  (CL_RGBx,      CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_R16G16B16X16_SINT,
+//  (CL_RGBx,      CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_R32G32B32X32_SINT,
+//  (CL_RGBx,      CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_R8G8B8X8_UINT,
+//  (CL_RGBx,      CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_R16G16B16X16_UINT,
+//  (CL_RGBx,      CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_R32G32B32X32_UINT,
+//  (CL_RGBx,      CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8X8_SNORM,
+//  (CL_RGBx,      CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_R16G16B16X16_SNORM,
+//  (CL_RGBx,      CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8X8_UNORM,
+//  (CL_RGBx,      CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_R16G16B16X16_UNORM,
+//  (CL_RGBx,      CL_UNORM_SHORT_555)    => pipe_format::PIPE_FORMAT_R5G5B5X1_UNORM,
+//  (CL_RGBx,      CL_UNORM_INT_101010)   => pipe_format::PIPE_FORMAT_R10G10B10X2_UNORM,
+
+    (CL_sRGB,      CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8_SRGB,
+// broken on iris and radeonsi
+//  (CL_sRGBA,     CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8A8_SRGB,
+//  (CL_sBGRA,     CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_B8G8R8A8_SRGB,
+// broken
+//  (CL_sRGBx,     CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_R8G8B8X8_SRGB,
+
+// broken
+//  (CL_DEPTH,     CL_FLOAT)              => pipe_format::PIPE_FORMAT_Z32_FLOAT,
+//  (CL_DEPTH,     CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_Z16_UNORM,
+
+    (CL_LUMINANCE, CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_L16_FLOAT,
+    (CL_LUMINANCE, CL_FLOAT)              => pipe_format::PIPE_FORMAT_L32_FLOAT,
+    (CL_LUMINANCE, CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_L8_SINT,
+    (CL_LUMINANCE, CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_L16_SINT,
+    (CL_LUMINANCE, CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_L32_SINT,
+    (CL_LUMINANCE, CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_L8_UINT,
+    (CL_LUMINANCE, CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_L16_UINT,
+    (CL_LUMINANCE, CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_L32_UINT,
+    (CL_LUMINANCE, CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_L8_SNORM,
+    (CL_LUMINANCE, CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_L16_SNORM,
+    (CL_LUMINANCE, CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_L8_UNORM,
+    (CL_LUMINANCE, CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_L16_UNORM,
+
+    (CL_INTENSITY, CL_HALF_FLOAT)         => pipe_format::PIPE_FORMAT_I16_FLOAT,
+    (CL_INTENSITY, CL_FLOAT)              => pipe_format::PIPE_FORMAT_I32_FLOAT,
+    (CL_INTENSITY, CL_SIGNED_INT8)        => pipe_format::PIPE_FORMAT_I8_SINT,
+    (CL_INTENSITY, CL_SIGNED_INT16)       => pipe_format::PIPE_FORMAT_I16_SINT,
+    (CL_INTENSITY, CL_SIGNED_INT32)       => pipe_format::PIPE_FORMAT_I32_SINT,
+    (CL_INTENSITY, CL_UNSIGNED_INT8)      => pipe_format::PIPE_FORMAT_I8_UINT,
+    (CL_INTENSITY, CL_UNSIGNED_INT16)     => pipe_format::PIPE_FORMAT_I16_UINT,
+    (CL_INTENSITY, CL_UNSIGNED_INT32)     => pipe_format::PIPE_FORMAT_I32_UINT,
+    (CL_INTENSITY, CL_SNORM_INT8)         => pipe_format::PIPE_FORMAT_I8_SNORM,
+    (CL_INTENSITY, CL_SNORM_INT16)        => pipe_format::PIPE_FORMAT_I16_SNORM,
+    (CL_INTENSITY, CL_UNORM_INT8)         => pipe_format::PIPE_FORMAT_I8_UNORM,
+    (CL_INTENSITY, CL_UNORM_INT16)        => pipe_format::PIPE_FORMAT_I16_UNORM,
 ]);
 
 #[rustfmt::skip]
@@ -197,6 +326,11 @@ const fn req_for_full_cl2(
         | (CL_sRGBA, CL_UNORM_INT8))
 }
 
+#[allow(non_upper_case_globals)]
+const fn is_srgb(ch_order: cl_channel_order) -> bool {
+    matches!(ch_order, CL_sBGRA | CL_sRGB | CL_sRGBA | CL_sRGBx)
+}
+
 const fn rusticl_image_format(
     ch_order: cl_channel_order,
     ch_type: cl_channel_type,
@@ -215,6 +349,7 @@ const fn rusticl_image_format(
         req_for_embeded_read_or_write: req_for_embedded_r_or_w(ch_order, ch_type),
         req_for_full_read_and_write: req_for_full_rw(ch_order, ch_type),
         req_for_full_cl2: req_for_full_cl2(ch_order, ch_type),
+        is_srgb: is_srgb(ch_order),
         pipe: pipe,
     }
 }