dri: Add fp16 formats
authorKevin Strasser <kevin.strasser@intel.com>
Fri, 25 Jan 2019 01:10:02 +0000 (17:10 -0800)
committerAdam Jackson <ajax@nwnk.net>
Wed, 21 Aug 2019 18:36:57 +0000 (18:36 +0000)
Add dri formats for RGBA ordered 64 bpp IEEE 754 half precision floating
point. Leverage existing offscreen render support for
MESA_FORMAT_RGBA_FLOAT16 and MESA_FORMAT_RGBX_FLOAT16.

Signed-off-by: Kevin Strasser <kevin.strasser@intel.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
include/GL/internal/dri_interface.h
src/loader/loader_dri3_helper.c
src/mesa/drivers/dri/common/dri_util.c
src/mesa/drivers/dri/common/utils.c

index c5d2238996948c66ae8c3c10a4f4f56977d24653..60bb9f84ffccf87358d67d7bbb9d0028a0dd997f 100644 (file)
@@ -1340,6 +1340,8 @@ struct __DRIdri2ExtensionRec {
 #define __DRI_IMAGE_FORMAT_ABGR2101010  0x1011
 #define __DRI_IMAGE_FORMAT_SABGR8       0x1012
 #define __DRI_IMAGE_FORMAT_UYVY         0x1013
+#define __DRI_IMAGE_FORMAT_XBGR16161616F 0x1014
+#define __DRI_IMAGE_FORMAT_ABGR16161616F 0x1015
 
 #define __DRI_IMAGE_USE_SHARE          0x0001
 #define __DRI_IMAGE_USE_SCANOUT                0x0002
@@ -1385,6 +1387,8 @@ struct __DRIdri2ExtensionRec {
 #define __DRI_IMAGE_FOURCC_RGBX1010102 0x30335852
 #define __DRI_IMAGE_FOURCC_BGRA1010102 0x30334142
 #define __DRI_IMAGE_FOURCC_BGRX1010102 0x30335842
+#define __DRI_IMAGE_FOURCC_ABGR16161616F 0x48344241
+#define __DRI_IMAGE_FOURCC_XBGR16161616F 0x48344258
 #define __DRI_IMAGE_FOURCC_YUV410      0x39565559
 #define __DRI_IMAGE_FOURCC_YUV411      0x31315559
 #define __DRI_IMAGE_FOURCC_YUV420      0x32315559
index 7ef59f0477be02251e0a36fb3797eaac13867257..6b611e18ae9321f0cd98baffc3eab71e86b888f8 100644 (file)
@@ -1120,6 +1120,9 @@ dri3_cpp_for_format(uint32_t format) {
    case  __DRI_IMAGE_FORMAT_SARGB8:
    case  __DRI_IMAGE_FORMAT_SABGR8:
       return 4;
+   case __DRI_IMAGE_FORMAT_XBGR16161616F:
+   case __DRI_IMAGE_FORMAT_ABGR16161616F:
+      return 8;
    case  __DRI_IMAGE_FORMAT_NONE:
    default:
       return 0;
@@ -1178,6 +1181,8 @@ image_format_to_fourcc(int format)
    case __DRI_IMAGE_FORMAT_ARGB2101010: return __DRI_IMAGE_FOURCC_ARGB2101010;
    case __DRI_IMAGE_FORMAT_XBGR2101010: return __DRI_IMAGE_FOURCC_XBGR2101010;
    case __DRI_IMAGE_FORMAT_ABGR2101010: return __DRI_IMAGE_FOURCC_ABGR2101010;
+   case __DRI_IMAGE_FORMAT_XBGR16161616F: return __DRI_IMAGE_FOURCC_XBGR16161616F;
+   case __DRI_IMAGE_FORMAT_ABGR16161616F: return __DRI_IMAGE_FOURCC_ABGR16161616F;
    }
    return 0;
 }
index ac3a04bceff8b7f522ae4457a0a5c74e83e20e05..a384cadd55752f1d9dd5b1a808f4a8181fea8e00 100644 (file)
@@ -886,6 +886,14 @@ static const struct {
       .image_format = __DRI_IMAGE_FORMAT_XRGB8888,
       .mesa_format  =        MESA_FORMAT_B8G8R8X8_UNORM,
    },
+   {
+      .image_format = __DRI_IMAGE_FORMAT_ABGR16161616F,
+      .mesa_format  =        MESA_FORMAT_RGBA_FLOAT16,
+   },
+   {
+      .image_format = __DRI_IMAGE_FORMAT_XBGR16161616F,
+      .mesa_format  =        MESA_FORMAT_RGBX_FLOAT16,
+   },
    {
       .image_format = __DRI_IMAGE_FORMAT_ARGB2101010,
       .mesa_format  =        MESA_FORMAT_B10G10R10A2_UNORM,
index 86ccfd637be58ea9f8460d95a508f5e5d79713de..44e4e0f3720621418c5faf872a7ba5df0d9508cf 100644 (file)
@@ -212,6 +212,12 @@ driCreateConfigs(mesa_format format,
       /* MESA_FORMAT_R10G10B10A2_UNORM */
       {{ 0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000 },
        { 0, 10, 20, 30 }},
+      /* MESA_FORMAT_RGBX_FLOAT16 */
+      {{ 0, 0, 0, 0},
+       { 0, 16, 32, -1 }},
+      /* MESA_FORMAT_RGBA_FLOAT16 */
+      {{ 0, 0, 0, 0},
+       { 0, 16, 32, 48 }},
    };
 
    const uint32_t * masks;
@@ -260,6 +266,14 @@ driCreateConfigs(mesa_format format,
       masks = format_table[4].masks;
       shifts = format_table[4].shifts;
       break;
+   case MESA_FORMAT_RGBX_FLOAT16:
+      masks = format_table[9].masks;
+      shifts = format_table[9].shifts;
+      break;
+   case MESA_FORMAT_RGBA_FLOAT16:
+      masks = format_table[10].masks;
+      shifts = format_table[10].shifts;
+      break;
    case MESA_FORMAT_R10G10B10X2_UNORM:
       masks = format_table[7].masks;
       shifts = format_table[7].shifts;