File 0001-egl-gbm-add-FP16-DRM-format.patch of Package libnvidia-egl-gbm

From 4e0d15931611de7b4d4cb95a52b8661a6d5a0540 Mon Sep 17 00:00:00 2001
From: Austin Shafer <ashafer@badland.io>
Date: Fri, 21 Nov 2025 11:04:45 -0500
Subject: [PATCH] egl-gbm: add FP16 DRM format

---
 src/gbm-display.c | 47 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 33 insertions(+), 14 deletions(-)

diff --git a/src/gbm-display.c b/src/gbm-display.c
index 28f33e9..f3cc607 100644
--- a/src/gbm-display.c
+++ b/src/gbm-display.c
@@ -378,7 +378,7 @@ done:
 static uint32_t ConfigToDrmFourCC(GbmDisplay* display, EGLConfig config)
 {
     EGLDisplay dpy = display->devDpy;
-    EGLint r, g, b, a;
+    EGLint r, g, b, a, componentType;
     EGLBoolean ret = EGL_TRUE;
 
     ret &= display->data->egl.GetConfigAttrib(dpy,
@@ -397,6 +397,10 @@ static uint32_t ConfigToDrmFourCC(GbmDisplay* display, EGLConfig config)
                                               config,
                                               EGL_ALPHA_SIZE,
                                               &a);
+    ret &= display->data->egl.GetConfigAttrib(dpy,
+                                              config,
+                                              EGL_COLOR_COMPONENT_TYPE_EXT,
+                                              &componentType);
 
     if (!ret) {
         /*
@@ -414,19 +418,34 @@ static uint32_t ConfigToDrmFourCC(GbmDisplay* display, EGLConfig config)
 #define PACK_CONFIG(r_, g_, b_, a_) \
     (((r_) << 24ULL) | ((g_) << 16ULL) | ((b_) << 8ULL) | (a_))
 
-    switch (PACK_CONFIG(r, g, b, a)) {
-    case PACK_CONFIG(8, 8, 8, 0):
-        return DRM_FORMAT_XRGB8888;
-    case PACK_CONFIG(8, 8, 8, 8):
-        return DRM_FORMAT_ARGB8888;
-    case PACK_CONFIG(5, 6, 5, 0):
-        return DRM_FORMAT_RGB565;
-    case PACK_CONFIG(10, 10, 10, 0):
-        return DRM_FORMAT_XRGB2101010;
-    case PACK_CONFIG(10, 10, 10, 2):
-        return DRM_FORMAT_ARGB2101010;
-    default:
-        return 0; /* DRM_FORMAT_INVALID */
+    if (componentType == EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT) {
+        switch (PACK_CONFIG(r, g, b, a)) {
+        case PACK_CONFIG(16, 16, 16, 0):
+            return DRM_FORMAT_XBGR16161616F;
+        case PACK_CONFIG(16, 16, 16, 16):
+            return DRM_FORMAT_ABGR16161616F;
+        default:
+            return 0; /* DRM_FORMAT_INVALID */
+        }
+    } else {
+        switch (PACK_CONFIG(r, g, b, a)) {
+        case PACK_CONFIG(8, 8, 8, 0):
+            return DRM_FORMAT_XRGB8888;
+        case PACK_CONFIG(8, 8, 8, 8):
+            return DRM_FORMAT_ARGB8888;
+        case PACK_CONFIG(5, 6, 5, 0):
+            return DRM_FORMAT_RGB565;
+        case PACK_CONFIG(10, 10, 10, 0):
+            return DRM_FORMAT_XRGB2101010;
+        case PACK_CONFIG(10, 10, 10, 2):
+            return DRM_FORMAT_ARGB2101010;
+        case PACK_CONFIG(16, 16, 16, 0):
+            return DRM_FORMAT_XBGR16161616;
+        case PACK_CONFIG(16, 16, 16, 16):
+            return DRM_FORMAT_ABGR16161616;
+        default:
+            return 0; /* DRM_FORMAT_INVALID */
+        }
     }
 }
 
-- 
2.51.0

openSUSE Build Service is sponsored by