loader,glx: add render_gpu tag psc->driScreen and psc->fd
authorYogesh Mohan Marimuthu <yogesh.mohanmarimuthu@amd.com>
Mon, 23 Jan 2023 11:04:40 +0000 (16:34 +0530)
committerMarge Bot <emma+marge@anholt.net>
Tue, 24 Jan 2023 12:51:35 +0000 (12:51 +0000)
v1: add render_gpu_tag (Pierre-Eric)

Signed-off-by: Yogesh Mohan Marimuthu <yogesh.mohanmarimuthu@amd.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13422>

src/glx/dri3_glx.c
src/glx/dri3_priv.h
src/glx/dri_common_query_renderer.c
src/loader/loader_dri3_helper.c
src/loader/loader_dri3_helper.h

index b3c82dc..5a9ec95 100644 (file)
@@ -122,7 +122,7 @@ glx_dri3_get_dri_screen(void)
    struct glx_context *gc = __glXGetCurrentContext();
    struct dri3_screen *psc = (struct dri3_screen *) gc->psc;
 
-   return (gc != &dummyContext && psc) ? psc->driScreen : NULL;
+   return (gc != &dummyContext && psc) ? psc->driScreenRenderGPU : NULL;
 }
 
 static void
@@ -283,15 +283,15 @@ dri3_create_context_attribs(struct glx_screen *base,
    pcp->renderType = dca.render_type;
 
    pcp->driContext =
-      psc->image_driver->createContextAttribs(psc->driScreen,
-                                                  dca.api,
-                                                  config ? config->driConfig
-                                                         : NULL,
-                                                  shared,
-                                                  num_ctx_attribs / 2,
-                                                  ctx_attribs,
-                                                  error,
-                                                  pcp);
+      psc->image_driver->createContextAttribs(psc->driScreenRenderGPU,
+                                              dca.api,
+                                              config ? config->driConfig
+                                              : NULL,
+                                              shared,
+                                              num_ctx_attribs / 2,
+                                              ctx_attribs,
+                                              error,
+                                              pcp);
 
    if (pcp->driContext == NULL)
       goto error_exit;
@@ -364,7 +364,7 @@ dri3_create_drawable(struct glx_screen *base, XID xDrawable,
    if (loader_dri3_drawable_init(XGetXCBConnection(base->dpy),
                                  xDrawable,
                                  glx_to_loader_dri3_drawable_type(type),
-                                 psc->driScreen, psc->driScreenDisplayGPU,
+                                 psc->driScreenRenderGPU, psc->driScreenDisplayGPU,
                                  psc->is_different_gpu, has_multibuffer,
                                  psc->prefer_back_buffer_reuse,
                                  config->driConfig,
@@ -592,10 +592,10 @@ dri3_destroy_screen(struct glx_screen *base)
       }
       close(psc->fd_display_gpu);
    }
-   loader_dri3_close_screen(psc->driScreen);
-   psc->core->destroyScreen(psc->driScreen);
+   loader_dri3_close_screen(psc->driScreenRenderGPU);
+   psc->core->destroyScreen(psc->driScreenRenderGPU);
    driDestroyConfigs(psc->driver_configs);
-   close(psc->fd);
+   close(psc->fd_render_gpu);
    free(psc);
 }
 
@@ -611,7 +611,7 @@ dri3_set_swap_interval(__GLXDRIdrawable *pdraw, int interval)
    struct dri3_drawable *priv =  (struct dri3_drawable *) pdraw;
    struct dri3_screen *psc = (struct dri3_screen *) priv->base.psc;
 
-   if (!dri_valid_swap_interval(psc->driScreen, psc->config, interval))
+   if (!dri_valid_swap_interval(psc->driScreenRenderGPU, psc->config, interval))
       return GLX_BAD_VALUE;
 
    loader_dri3_set_swap_interval(&priv->loader_drawable, interval);
@@ -696,7 +696,7 @@ dri3_bind_extensions(struct dri3_screen *psc, struct glx_display * priv,
    unsigned mask;
    int i;
 
-   extensions = psc->core->getExtensions(psc->driScreen);
+   extensions = psc->core->getExtensions(psc->driScreenRenderGPU);
 
    __glXEnableDirectExtension(&psc->base, "GLX_EXT_swap_control");
    __glXEnableDirectExtension(&psc->base, "GLX_EXT_swap_control_tear");
@@ -705,7 +705,7 @@ dri3_bind_extensions(struct dri3_screen *psc, struct glx_display * priv,
    __glXEnableDirectExtension(&psc->base, "GLX_SGI_make_current_read");
    __glXEnableDirectExtension(&psc->base, "GLX_INTEL_swap_event");
 
-   mask = psc->image_driver->getAPIMask(psc->driScreen);
+   mask = psc->image_driver->getAPIMask(psc->driScreenRenderGPU);
 
    __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context");
    __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile");
@@ -759,7 +759,7 @@ dri3_get_driver_name(struct glx_screen *glx_screen)
 {
     struct dri3_screen *psc = (struct dri3_screen *)glx_screen;
 
-    return loader_get_driver_for_fd(psc->fd);
+    return loader_get_driver_for_fd(psc->fd_render_gpu);
 }
 
 static const struct glx_screen_vtable dri3_screen_vtable = {
@@ -799,7 +799,7 @@ dri3_create_screen(int screen, struct glx_display * priv)
    if (psc == NULL)
       return NULL;
 
-   psc->fd = -1;
+   psc->fd_render_gpu = -1;
    psc->fd_display_gpu = -1;
 
    if (!glx_screen_init(&psc->base, screen, priv)) {
@@ -807,8 +807,8 @@ dri3_create_screen(int screen, struct glx_display * priv)
       return NULL;
    }
 
-   psc->fd = loader_dri3_open(c, RootWindow(priv->dpy, screen), None);
-   if (psc->fd < 0) {
+   psc->fd_render_gpu = loader_dri3_open(c, RootWindow(priv->dpy, screen), None);
+   if (psc->fd_render_gpu < 0) {
       int conn_error = xcb_connection_has_error(c);
 
       glx_screen_cleanup(&psc->base);
@@ -821,14 +821,14 @@ dri3_create_screen(int screen, struct glx_display * priv)
       return NULL;
    }
 
-   psc->fd_display_gpu = fcntl(psc->fd, F_DUPFD_CLOEXEC, 3);
-   psc->fd = loader_get_user_preferred_fd(psc->fd, &psc->is_different_gpu);
+   psc->fd_display_gpu = fcntl(psc->fd_render_gpu, F_DUPFD_CLOEXEC, 3);
+   psc->fd_render_gpu = loader_get_user_preferred_fd(psc->fd_render_gpu, &psc->is_different_gpu);
    if (!psc->is_different_gpu) {
       close(psc->fd_display_gpu);
       psc->fd_display_gpu = -1;
    }
 
-   driverName = loader_get_driver_for_fd(psc->fd);
+   driverName = loader_get_driver_for_fd(psc->fd_render_gpu);
    if (!driverName) {
       ErrorMessageF("No driver found\n");
       goto handle_error;
@@ -867,13 +867,13 @@ dri3_create_screen(int screen, struct glx_display * priv)
       }
    }
 
-   psc->driScreen =
-      psc->image_driver->createNewScreen2(screen, psc->fd,
+   psc->driScreenRenderGPU =
+      psc->image_driver->createNewScreen2(screen, psc->fd_render_gpu,
                                           pdp->loader_extensions,
                                           extensions,
                                           &driver_configs, psc);
 
-   if (psc->driScreen == NULL) {
+   if (psc->driScreenRenderGPU == NULL) {
       ErrorMessageF("glx: failed to create dri3 screen\n");
       goto handle_error;
    }
@@ -957,32 +957,32 @@ dri3_create_screen(int screen, struct glx_display * priv)
    __glXEnableDirectExtension(&psc->base, "GLX_EXT_buffer_age");
 
    if (psc->config->base.version > 1 &&
-          psc->config->configQuerys(psc->driScreen, "glx_extension_override",
+          psc->config->configQuerys(psc->driScreenRenderGPU, "glx_extension_override",
                                     &tmp) == 0)
       __glXParseExtensionOverride(&psc->base, tmp);
 
    if (psc->config->base.version > 1 &&
-          psc->config->configQuerys(psc->driScreen,
+          psc->config->configQuerys(psc->driScreenRenderGPU,
                                     "indirect_gl_extension_override",
                                     &tmp) == 0)
       __IndirectGlParseExtensionOverride(&psc->base, tmp);
 
    if (psc->config->base.version > 1) {
       uint8_t force = false;
-      if (psc->config->configQueryb(psc->driScreen, "force_direct_glx_context",
+      if (psc->config->configQueryb(psc->driScreenRenderGPU, "force_direct_glx_context",
                                     &force) == 0) {
          psc->base.force_direct_context = force;
       }
 
       uint8_t invalid_glx_destroy_window = false;
-      if (psc->config->configQueryb(psc->driScreen,
+      if (psc->config->configQueryb(psc->driScreenRenderGPU,
                                     "allow_invalid_glx_destroy_window",
                                     &invalid_glx_destroy_window) == 0) {
          psc->base.allow_invalid_glx_destroy_window = invalid_glx_destroy_window;
       }
 
       uint8_t keep_native_window_glx_drawable = false;
-      if (psc->config->configQueryb(psc->driScreen,
+      if (psc->config->configQueryb(psc->driScreenRenderGPU,
                                     "keep_native_window_glx_drawable",
                                     &keep_native_window_glx_drawable) == 0) {
          psc->base.keep_native_window_glx_drawable = keep_native_window_glx_drawable;
@@ -996,7 +996,7 @@ dri3_create_screen(int screen, struct glx_display * priv)
    psc->prefer_back_buffer_reuse = 1;
    if (psc->is_different_gpu && psc->rendererQuery) {
       unsigned value;
-      if (psc->rendererQuery->queryInteger(psc->driScreen,
+      if (psc->rendererQuery->queryInteger(psc->driScreenRenderGPU,
                                            __DRI2_RENDERER_PREFER_BACK_BUFFER_REUSE,
                                            &value) == 0)
          psc->prefer_back_buffer_reuse = value;
@@ -1011,14 +1011,14 @@ handle_error:
        glx_config_destroy_list(configs);
    if (visuals)
        glx_config_destroy_list(visuals);
-   if (psc->driScreen)
-       psc->core->destroyScreen(psc->driScreen);
-   psc->driScreen = NULL;
+   if (psc->driScreenRenderGPU)
+       psc->core->destroyScreen(psc->driScreenRenderGPU);
+   psc->driScreenRenderGPU = NULL;
    if (psc->driScreenDisplayGPU)
        psc->core->destroyScreen(psc->driScreenDisplayGPU);
    psc->driScreenDisplayGPU = NULL;
-   if (psc->fd >= 0)
-      close(psc->fd);
+   if (psc->fd_render_gpu >= 0)
+      close(psc->fd_render_gpu);
    if (psc->fd_display_gpu >= 0)
       close(psc->fd_display_gpu);
    if (psc->driver)
index 862ce32..0da2af9 100644 (file)
@@ -73,7 +73,7 @@ struct dri3_display
 struct dri3_screen {
    struct glx_screen base;
 
-   __DRIscreen *driScreen;
+   __DRIscreen *driScreenRenderGPU;
    __GLXDRIscreen vtable;
 
    /* DRI screen is created for display GPU in case of prime.
@@ -94,12 +94,11 @@ struct dri3_screen {
    const __DRIconfig **driver_configs;
 
    void *driver;
-   int fd;
-   bool is_different_gpu;
-   bool prefer_back_buffer_reuse;
-
+   int fd_render_gpu;
    /* fd for display GPU in case of prime */
    int fd_display_gpu;
+   bool is_different_gpu;
+   bool prefer_back_buffer_reuse;
 
    struct loader_dri3_extensions loader_dri3_ext;
 };
index 672e3bf..6d2a066 100644 (file)
@@ -137,7 +137,7 @@ dri3_query_renderer_integer(struct glx_screen *base, int attribute,
    if (psc->rendererQuery == NULL)
       return -1;
 
-   ret = psc->rendererQuery->queryInteger(psc->driScreen, dri_attribute,
+   ret = psc->rendererQuery->queryInteger(psc->driScreenRenderGPU, dri_attribute,
                                           value);
    dri_convert_context_profile_bits(attribute, value);
 
@@ -159,7 +159,7 @@ dri3_query_renderer_string(struct glx_screen *base, int attribute,
    if (psc->rendererQuery == NULL)
       return -1;
 
-   return psc->rendererQuery->queryString(psc->driScreen, dri_attribute, value);
+   return psc->rendererQuery->queryString(psc->driScreenRenderGPU, dri_attribute, value);
 }
 #endif /* HAVE_DRI3 */
 
index 8d79e31..78176ad 100644 (file)
@@ -164,15 +164,15 @@ loader_dri3_blit_context_get(struct loader_dri3_drawable *draw)
 {
    mtx_lock(&blit_context.mtx);
 
-   if (blit_context.ctx && blit_context.cur_screen != draw->dri_screen) {
+   if (blit_context.ctx && blit_context.cur_screen != draw->dri_screen_render_gpu) {
       blit_context.core->destroyContext(blit_context.ctx);
       blit_context.ctx = NULL;
    }
 
    if (!blit_context.ctx) {
-      blit_context.ctx = draw->ext->core->createNewContext(draw->dri_screen,
+      blit_context.ctx = draw->ext->core->createNewContext(draw->dri_screen_render_gpu,
                                                            NULL, NULL, NULL);
-      blit_context.cur_screen = draw->dri_screen;
+      blit_context.cur_screen = draw->dri_screen_render_gpu;
       blit_context.core = draw->ext->core;
    }
 
@@ -377,7 +377,7 @@ int
 loader_dri3_drawable_init(xcb_connection_t *conn,
                           xcb_drawable_t drawable,
                           enum loader_dri3_drawable_type type,
-                          __DRIscreen *dri_screen,
+                          __DRIscreen *dri_screen_render_gpu,
                           __DRIscreen *dri_screen_display_gpu,
                           bool is_different_gpu,
                           bool multiplanes_available,
@@ -397,7 +397,7 @@ loader_dri3_drawable_init(xcb_connection_t *conn,
    draw->drawable = drawable;
    draw->type = type;
    draw->region = 0;
-   draw->dri_screen = dri_screen;
+   draw->dri_screen_render_gpu = dri_screen_render_gpu;
    draw->dri_screen_display_gpu = dri_screen_display_gpu;
    draw->is_different_gpu = is_different_gpu;
    draw->multiplanes_available = multiplanes_available;
@@ -420,13 +420,13 @@ loader_dri3_drawable_init(xcb_connection_t *conn,
       unsigned char adaptive_sync = 0;
       unsigned char block_on_depleted_buffers = 0;
 
-      draw->ext->config->configQueryb(draw->dri_screen,
+      draw->ext->config->configQueryb(draw->dri_screen_render_gpu,
                                       "adaptive_sync",
                                       &adaptive_sync);
 
       draw->adaptive_sync = adaptive_sync;
 
-      draw->ext->config->configQueryb(draw->dri_screen,
+      draw->ext->config->configQueryb(draw->dri_screen_render_gpu,
                                       "block_on_depleted_buffers",
                                       &block_on_depleted_buffers);
 
@@ -436,14 +436,14 @@ loader_dri3_drawable_init(xcb_connection_t *conn,
    if (!draw->adaptive_sync)
       set_adaptive_sync_property(conn, draw->drawable, false);
 
-   draw->swap_interval = dri_get_initial_swap_interval(draw->dri_screen,
+   draw->swap_interval = dri_get_initial_swap_interval(draw->dri_screen_render_gpu,
                                                        draw->ext->config);
 
    dri3_update_max_num_back(draw);
 
    /* Create a new drawable */
    draw->dri_drawable =
-      draw->ext->image_driver->createNewDrawable(dri_screen,
+      draw->ext->image_driver->createNewDrawable(dri_screen_render_gpu,
                                                  dri_config,
                                                  draw);
 
@@ -1381,7 +1381,7 @@ has_supported_modifier(struct loader_dri3_drawable *draw, unsigned int format,
    bool found = false;
    int i, j;
 
-   if (!draw->ext->image->queryDmaBufModifiers(draw->dri_screen,
+   if (!draw->ext->image->queryDmaBufModifiers(draw->dri_screen_render_gpu,
                                                format, 0, NULL, NULL,
                                                &supported_modifiers_count) ||
        supported_modifiers_count == 0)
@@ -1391,7 +1391,7 @@ has_supported_modifier(struct loader_dri3_drawable *draw, unsigned int format,
    if (!supported_modifiers)
       return false;
 
-   draw->ext->image->queryDmaBufModifiers(draw->dri_screen, format,
+   draw->ext->image->queryDmaBufModifiers(draw->dri_screen_render_gpu, format,
                                           supported_modifiers_count,
                                           supported_modifiers, NULL,
                                           &supported_modifiers_count);
@@ -1508,7 +1508,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
          free(mod_reply);
       }
 #endif
-      buffer->image = loader_dri_create_image(draw->dri_screen, draw->ext->image,
+      buffer->image = loader_dri_create_image(draw->dri_screen_render_gpu, draw->ext->image,
                                               width, height, format,
                                               __DRI_IMAGE_USE_SHARE |
                                               __DRI_IMAGE_USE_SCANOUT |
@@ -1523,7 +1523,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
       if (!buffer->image)
          goto no_image;
    } else {
-      buffer->image = draw->ext->image->createImage(draw->dri_screen,
+      buffer->image = draw->ext->image->createImage(draw->dri_screen_render_gpu,
                                                     width, height,
                                                     format,
                                                     0,
@@ -1551,7 +1551,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
 
       if (!pixmap_buffer) {
          buffer->linear_buffer =
-           draw->ext->image->createImage(draw->dri_screen,
+           draw->ext->image->createImage(draw->dri_screen_render_gpu,
                                          width, height,
                                          dri3_linear_format_for_format(draw, format),
                                          __DRI_IMAGE_USE_SHARE |
@@ -1614,7 +1614,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
        */
       if (draw->ext->image->base.version >= 20)
          buffer->linear_buffer =
-            draw->ext->image->createImageFromFds2(draw->dri_screen,
+            draw->ext->image->createImageFromFds2(draw->dri_screen_render_gpu,
                                                   width,
                                                   height,
                                                   loader_image_format_to_fourcc(format),
@@ -1625,7 +1625,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
                                                   buffer);
       else
          buffer->linear_buffer =
-            draw->ext->image->createImageFromFds(draw->dri_screen,
+            draw->ext->image->createImageFromFds(draw->dri_screen_render_gpu,
                                                  width,
                                                  height,
                                                  loader_image_format_to_fourcc(format),
@@ -1958,7 +1958,7 @@ dri3_get_pixmap_buffer(__DRIdrawable *driDrawable, unsigned int format,
     */
    cur_screen = draw->vtable->get_dri_screen();
    if (!cur_screen) {
-       cur_screen = draw->dri_screen;
+       cur_screen = draw->dri_screen_render_gpu;
    }
 
    xcb_dri3_fence_from_fd(draw->conn,
index 8fe6c73..fac09e4 100644 (file)
@@ -137,13 +137,12 @@ struct loader_dri3_drawable {
    enum loader_dri3_drawable_type type;
 
    /* Information about the GPU owning the buffer */
-   __DRIscreen *dri_screen;
-   bool is_different_gpu;
    bool multiplanes_available;
    bool prefer_back_buffer_reuse;
-
+   __DRIscreen *dri_screen_render_gpu;
    /* DRI screen created for display GPU in case of prime */
    __DRIscreen *dri_screen_display_gpu;
+   bool is_different_gpu;
 
    /* SBC numbers are tracked by using the serial numbers
     * in the present request and complete events
@@ -207,7 +206,7 @@ int
 loader_dri3_drawable_init(xcb_connection_t *conn,
                           xcb_drawable_t drawable,
                           enum loader_dri3_drawable_type type,
-                          __DRIscreen *dri_screen,
+                          __DRIscreen *dri_screen_render_gpu,
                           __DRIscreen *dri_screen_display_gpu,
                           bool is_different_gpu,
                           bool is_multiplanes_available,