From 1c5b61eefb9be69256552cfde1caf3b7e1d29614 Mon Sep 17 00:00:00 2001 From: Yogesh Mohan Marimuthu Date: Mon, 23 Jan 2023 16:34:40 +0530 Subject: [PATCH] loader,glx: add render_gpu tag psc->driScreen and psc->fd v1: add render_gpu_tag (Pierre-Eric) Signed-off-by: Yogesh Mohan Marimuthu Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/glx/dri3_glx.c | 76 ++++++++++++++++++------------------- src/glx/dri3_priv.h | 9 ++--- src/glx/dri_common_query_renderer.c | 4 +- src/loader/loader_dri3_helper.c | 34 ++++++++--------- src/loader/loader_dri3_helper.h | 7 ++-- 5 files changed, 64 insertions(+), 66 deletions(-) diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c index b3c82dc..5a9ec95 100644 --- a/src/glx/dri3_glx.c +++ b/src/glx/dri3_glx.c @@ -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) diff --git a/src/glx/dri3_priv.h b/src/glx/dri3_priv.h index 862ce32..0da2af9 100644 --- a/src/glx/dri3_priv.h +++ b/src/glx/dri3_priv.h @@ -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; }; diff --git a/src/glx/dri_common_query_renderer.c b/src/glx/dri_common_query_renderer.c index 672e3bf..6d2a066 100644 --- a/src/glx/dri_common_query_renderer.c +++ b/src/glx/dri_common_query_renderer.c @@ -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 */ diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index 8d79e31..78176ad 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -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, diff --git a/src/loader/loader_dri3_helper.h b/src/loader/loader_dri3_helper.h index 8fe6c73..fac09e4 100644 --- a/src/loader/loader_dri3_helper.h +++ b/src/loader/loader_dri3_helper.h @@ -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, -- 2.7.4