st/dri: track if image is created by a dmabuf
authorGurchetan Singh <gurchetansingh@chromium.org>
Tue, 14 Jan 2020 00:07:38 +0000 (16:07 -0800)
committerMarge Bot <eric+marge@anholt.net>
Wed, 15 Jan 2020 01:18:54 +0000 (01:18 +0000)
Will be used by EXT_EGL_image_storage later.

Acked-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3375>

src/gallium/include/state_tracker/st_api.h
src/gallium/state_trackers/dri/dri2.c
src/gallium/state_trackers/dri/dri_screen.c
src/gallium/state_trackers/dri/dri_screen.h

index 258da8fdeaffd4b07a7793f81d715b3e28bb122f..0b953d6fb388cb629c1dcd9f7a732bbf9304681e 100644 (file)
@@ -182,6 +182,8 @@ struct st_egl_image
 
    unsigned level;
    unsigned layer;
+   /* GL internal format. */
+   unsigned internalformat;
 };
 
 /**
index 490c4b16f031c94fb210efc5fb81313452ebc563..54a05c916f1ce4b6ce21a262f5dd6133e4970815 100644 (file)
@@ -938,6 +938,7 @@ dri2_create_image_from_fd(__DRIscreen *_screen,
    img->dri_components = map->dri_components;
    img->dri_fourcc = fourcc;
    img->dri_format = map->dri_format;
+   img->imported_dmabuf = TRUE;
 
 exit:
    if (error)
index 8600ce029f028625da042346ae0509971309583d..5a9acd818d05e2f2c97a72d1aa4e970bc2f5a8fb 100644 (file)
@@ -473,6 +473,14 @@ dri_get_egl_image(struct st_manager *smapi,
    stimg->level = img->level;
    stimg->layer = img->layer;
 
+   if (img->imported_dmabuf && map) {
+      /* Guess sized internal format for dma-bufs. Could be used
+       * by EXT_EGL_image_storage.
+       */
+      mesa_format mesa_format = driImageFormatToGLFormat(map->dri_format);
+      stimg->internalformat = driGLFormatToSizedInternalGLFormat(mesa_format);
+   }
+
    return TRUE;
 }
 
index 4a80d96df9582335fbb6f31d9e24fb6ed35da477..1586439bba36f4578b1149422b21b373fd2b8467 100644 (file)
@@ -109,6 +109,7 @@ struct __DRIimageRec {
 
    void *loader_private;
 
+   boolean imported_dmabuf;
    /**
     * Provided by EGL_EXT_image_dma_buf_import.
     */