freedreno: Enable GL_EXT_memory_object and GL_EXT_memory_object_fd
[mesa.git] / src / gallium / drivers / freedreno / freedreno_screen.c
index 25da1ae6c34106cd356e35663f5c65993d92d481..9f0867ba83af6119a950515d9f70e9ee984b2d39 100644 (file)
@@ -57,6 +57,8 @@
 #include "a5xx/fd5_screen.h"
 #include "a6xx/fd6_screen.h"
 
+/* for fd_get_driver/device_uuid() */
+#include "common/freedreno_uuid.h"
 
 #include "ir3/ir3_nir.h"
 #include "ir3/ir3_compiler.h"
@@ -451,6 +453,8 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
                return 10;
        case PIPE_CAP_UMA:
                return 1;
+       case PIPE_CAP_MEMOBJ:
+               return fd_device_version(screen->dev) >= FD_VERSION_MEMORY_FD;
        case PIPE_CAP_NATIVE_FENCE_FD:
                return fd_device_version(screen->dev) >= FD_VERSION_FENCE_FD;
        default:
@@ -574,7 +578,7 @@ fd_screen_get_shader_param(struct pipe_screen *pscreen,
        case PIPE_SHADER_CAP_INT64_ATOMICS:
        case PIPE_SHADER_CAP_FP16_DERIVATIVES:
        case PIPE_SHADER_CAP_INT16:
-       case PIPE_SHADER_CAP_GLSL_16BIT_TEMPS:
+       case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
                return 0;
        case PIPE_SHADER_CAP_FP16:
                return ((is_a5xx(screen) || is_a6xx(screen)) &&
@@ -820,6 +824,20 @@ static void _fd_fence_ref(struct pipe_screen *pscreen,
        fd_fence_ref(ptr, pfence);
 }
 
+static void
+fd_screen_get_device_uuid(struct pipe_screen *pscreen, char *uuid)
+{
+       struct fd_screen *screen = fd_screen(pscreen);
+
+       fd_get_device_uuid(uuid, screen->gpu_id);
+}
+
+static void
+fd_screen_get_driver_uuid(struct pipe_screen *pscreen, char *uuid)
+{
+       fd_get_driver_uuid(uuid);
+}
+
 struct pipe_screen *
 fd_screen_create(struct fd_device *dev, struct renderonly *ro)
 {
@@ -1027,6 +1045,9 @@ fd_screen_create(struct fd_device *dev, struct renderonly *ro)
 
        pscreen->query_dmabuf_modifiers = fd_screen_query_dmabuf_modifiers;
 
+       pscreen->get_device_uuid = fd_screen_get_device_uuid;
+       pscreen->get_driver_uuid = fd_screen_get_driver_uuid;
+
        slab_create_parent(&screen->transfer_pool, sizeof(struct fd_transfer), 16);
 
        return pscreen;