egl: add render_gpu tag to dri2_dpy->fd and dri2_dpy->dri_screen variable
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>
This commit is contained in:

committed by
Marge Bot

parent
967b9ad084
commit
c712419c1a
@@ -819,7 +819,7 @@ static int
|
||||
get_screen_param(_EGLDisplay *disp, enum pipe_cap param)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct dri_screen *screen = dri_screen(dri2_dpy->dri_screen);
|
||||
struct dri_screen *screen = dri_screen(dri2_dpy->dri_screen_render_gpu);
|
||||
return screen->base.screen->get_param(screen->base.screen, param);
|
||||
}
|
||||
|
||||
@@ -827,7 +827,7 @@ void
|
||||
dri2_setup_screen(_EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct dri_screen *screen = dri_screen(dri2_dpy->dri_screen);
|
||||
struct dri_screen *screen = dri_screen(dri2_dpy->dri_screen_render_gpu);
|
||||
struct pipe_screen *pscreen = screen->base.screen;
|
||||
unsigned int api_mask = screen->api_mask;
|
||||
|
||||
@@ -883,7 +883,7 @@ dri2_setup_screen(_EGLDisplay *disp)
|
||||
if (dri2_dpy->fence->get_fence_from_cl_event)
|
||||
disp->Extensions.KHR_cl_event2 = EGL_TRUE;
|
||||
unsigned capabilities =
|
||||
dri2_dpy->fence->get_capabilities(dri2_dpy->dri_screen);
|
||||
dri2_dpy->fence->get_capabilities(dri2_dpy->dri_screen_render_gpu);
|
||||
disp->Extensions.ANDROID_native_fence_sync =
|
||||
(capabilities & __DRI_FENCE_CAP_NATIVE_FD) != 0;
|
||||
}
|
||||
@@ -898,7 +898,7 @@ dri2_setup_screen(_EGLDisplay *disp)
|
||||
dri2_dpy->image->getCapabilities != NULL) {
|
||||
int capabilities;
|
||||
|
||||
capabilities = dri2_dpy->image->getCapabilities(dri2_dpy->dri_screen);
|
||||
capabilities = dri2_dpy->image->getCapabilities(dri2_dpy->dri_screen_render_gpu);
|
||||
disp->Extensions.MESA_drm_image = (capabilities & __DRI_IMAGE_CAP_GLOBAL_NAMES) != 0;
|
||||
|
||||
if (dri2_dpy->image->base.version >= 11)
|
||||
@@ -946,7 +946,7 @@ dri2_setup_swap_interval(_EGLDisplay *disp, int max_swap_interval)
|
||||
|
||||
/* Allow driconf to override applications.*/
|
||||
if (dri2_dpy->config)
|
||||
dri2_dpy->config->configQueryi(dri2_dpy->dri_screen,
|
||||
dri2_dpy->config->configQueryi(dri2_dpy->dri_screen_render_gpu,
|
||||
"vblank_mode", &vblank_mode);
|
||||
switch (vblank_mode) {
|
||||
case DRI_CONF_VBLANK_NEVER:
|
||||
@@ -1000,14 +1000,15 @@ dri2_create_screen(_EGLDisplay *disp)
|
||||
}
|
||||
}
|
||||
|
||||
int screen_fd = dri2_dpy->swrast ? -1 : dri2_dpy->fd;
|
||||
dri2_dpy->dri_screen = dri2_dpy->mesa->createNewScreen(0, screen_fd,
|
||||
dri2_dpy->loader_extensions,
|
||||
dri2_dpy->driver_extensions,
|
||||
&dri2_dpy->driver_configs,
|
||||
disp);
|
||||
int screen_fd = dri2_dpy->swrast ? -1 : dri2_dpy->fd_render_gpu;
|
||||
dri2_dpy->dri_screen_render_gpu =
|
||||
dri2_dpy->mesa->createNewScreen(0, screen_fd,
|
||||
dri2_dpy->loader_extensions,
|
||||
dri2_dpy->driver_extensions,
|
||||
&dri2_dpy->driver_configs,
|
||||
disp);
|
||||
|
||||
if (dri2_dpy->dri_screen == NULL) {
|
||||
if (dri2_dpy->dri_screen_render_gpu == NULL) {
|
||||
_eglLog(_EGL_WARNING, "egl: failed to create dri2 screen");
|
||||
return EGL_FALSE;
|
||||
}
|
||||
@@ -1022,7 +1023,7 @@ dri2_setup_extensions(_EGLDisplay *disp)
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
const __DRIextension **extensions;
|
||||
|
||||
extensions = dri2_dpy->core->getExtensions(dri2_dpy->dri_screen);
|
||||
extensions = dri2_dpy->core->getExtensions(dri2_dpy->dri_screen_render_gpu);
|
||||
|
||||
if (dri2_dpy->image_driver || dri2_dpy->dri2) {
|
||||
if (!loader_bind_extensions(dri2_dpy, dri2_core_extensions, ARRAY_SIZE(dri2_core_extensions), extensions))
|
||||
@@ -1143,13 +1144,13 @@ dri2_display_destroy(_EGLDisplay *disp)
|
||||
if (dri2_dpy->vtbl && dri2_dpy->vtbl->close_screen_notify)
|
||||
dri2_dpy->vtbl->close_screen_notify(disp);
|
||||
|
||||
dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen);
|
||||
dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen_render_gpu);
|
||||
|
||||
if (dri2_dpy->dri_screen_display_gpu)
|
||||
dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen_display_gpu);
|
||||
}
|
||||
if (dri2_dpy->fd >= 0)
|
||||
close(dri2_dpy->fd);
|
||||
if (dri2_dpy->fd_render_gpu >= 0)
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
if (dri2_dpy->fd_display_gpu >= 0)
|
||||
close(dri2_dpy->fd_display_gpu);
|
||||
|
||||
@@ -1207,7 +1208,7 @@ dri2_egl_surface_alloc_local_buffer(struct dri2_egl_surface *dri2_surf,
|
||||
|
||||
if (!dri2_surf->local_buffers[att]) {
|
||||
dri2_surf->local_buffers[att] =
|
||||
dri2_dpy->dri2->allocateBuffer(dri2_dpy->dri_screen, att, format,
|
||||
dri2_dpy->dri2->allocateBuffer(dri2_dpy->dri_screen_render_gpu, att, format,
|
||||
dri2_surf->base.Width, dri2_surf->base.Height);
|
||||
}
|
||||
|
||||
@@ -1222,7 +1223,7 @@ dri2_egl_surface_free_local_buffers(struct dri2_egl_surface *dri2_surf)
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(dri2_surf->local_buffers); i++) {
|
||||
if (dri2_surf->local_buffers[i]) {
|
||||
dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
|
||||
dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_surf->local_buffers[i]);
|
||||
dri2_surf->local_buffers[i] = NULL;
|
||||
}
|
||||
@@ -1460,7 +1461,7 @@ dri2_create_context(_EGLDisplay *disp, _EGLConfig *conf,
|
||||
goto cleanup;
|
||||
|
||||
dri2_ctx->dri_context =
|
||||
dri2_dpy->mesa->createContext(dri2_dpy->dri_screen,
|
||||
dri2_dpy->mesa->createContext(dri2_dpy->dri_screen_render_gpu,
|
||||
api,
|
||||
dri_config,
|
||||
shared,
|
||||
@@ -1511,7 +1512,7 @@ dri2_init_surface(_EGLSurface *surf, _EGLDisplay *disp, EGLint type,
|
||||
dri2_surf->out_fence_fd = -1;
|
||||
dri2_surf->enable_out_fence = false;
|
||||
if (dri2_dpy->fence &&
|
||||
(dri2_dpy->fence->get_capabilities(dri2_dpy->dri_screen) &
|
||||
(dri2_dpy->fence->get_capabilities(dri2_dpy->dri_screen_render_gpu) &
|
||||
__DRI_FENCE_CAP_NATIVE_FD)) {
|
||||
dri2_surf->enable_out_fence = enable_out_fence;
|
||||
}
|
||||
@@ -1566,9 +1567,9 @@ dri2_surf_update_fence_fd(_EGLContext *ctx,
|
||||
|
||||
fence = dri2_dpy->fence->create_fence_fd(dri_ctx, -1);
|
||||
if (fence) {
|
||||
fence_fd = dri2_dpy->fence->get_fence_fd(dri2_dpy->dri_screen,
|
||||
fence_fd = dri2_dpy->fence->get_fence_fd(dri2_dpy->dri_screen_render_gpu,
|
||||
fence);
|
||||
dri2_dpy->fence->destroy_fence(dri2_dpy->dri_screen, fence);
|
||||
dri2_dpy->fence->destroy_fence(dri2_dpy->dri_screen_render_gpu, fence);
|
||||
}
|
||||
dri2_surface_set_out_fence_fd(surf, fence_fd);
|
||||
}
|
||||
@@ -1581,7 +1582,8 @@ dri2_create_drawable(struct dri2_egl_display *dri2_dpy,
|
||||
{
|
||||
if (dri2_dpy->kopper) {
|
||||
dri2_surf->dri_drawable =
|
||||
dri2_dpy->kopper->createNewDrawable(dri2_dpy->dri_screen, config, loaderPrivate,
|
||||
dri2_dpy->kopper->createNewDrawable(dri2_dpy->dri_screen_render_gpu,
|
||||
config, loaderPrivate,
|
||||
dri2_surf->base.Type == EGL_PBUFFER_BIT ||
|
||||
dri2_surf->base.Type == EGL_PIXMAP_BIT);
|
||||
} else {
|
||||
@@ -1595,7 +1597,7 @@ dri2_create_drawable(struct dri2_egl_display *dri2_dpy,
|
||||
else
|
||||
return _eglError(EGL_BAD_ALLOC, "no createNewDrawable");
|
||||
|
||||
dri2_surf->dri_drawable = createNewDrawable(dri2_dpy->dri_screen,
|
||||
dri2_surf->dri_drawable = createNewDrawable(dri2_dpy->dri_screen_render_gpu,
|
||||
config, loaderPrivate);
|
||||
}
|
||||
if (dri2_surf->dri_drawable == NULL)
|
||||
@@ -2434,7 +2436,7 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
}
|
||||
|
||||
dri_image =
|
||||
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen_render_gpu,
|
||||
attrs.Width,
|
||||
attrs.Height,
|
||||
format,
|
||||
@@ -2683,7 +2685,7 @@ dri2_query_dma_buf_formats(_EGLDisplay *disp, EGLint max,
|
||||
dri2_dpy->image->queryDmaBufFormats == NULL)
|
||||
goto fail;
|
||||
|
||||
if (!dri2_dpy->image->queryDmaBufFormats(dri2_dpy->dri_screen, max,
|
||||
if (!dri2_dpy->image->queryDmaBufFormats(dri2_dpy->dri_screen_render_gpu, max,
|
||||
formats, count))
|
||||
goto fail;
|
||||
|
||||
@@ -2730,7 +2732,7 @@ dri2_query_dma_buf_modifiers(_EGLDisplay *disp, EGLint format,
|
||||
return EGL_FALSE;
|
||||
}
|
||||
|
||||
if (dri2_dpy->image->queryDmaBufModifiers(dri2_dpy->dri_screen, format,
|
||||
if (dri2_dpy->image->queryDmaBufModifiers(dri2_dpy->dri_screen_render_gpu, format,
|
||||
max, modifiers,
|
||||
(unsigned int *) external_only,
|
||||
count) == false)
|
||||
@@ -2814,7 +2816,7 @@ dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
modifier = DRM_FORMAT_MOD_INVALID;
|
||||
|
||||
dri_image =
|
||||
dri2_dpy->image->createImageFromDmaBufs3(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImageFromDmaBufs3(dri2_dpy->dri_screen_render_gpu,
|
||||
attrs.Width, attrs.Height, attrs.DMABufFourCC.Value,
|
||||
modifier, fds, num_fds, pitches, offsets,
|
||||
attrs.DMABufYuvColorSpaceHint.Value,
|
||||
@@ -2832,7 +2834,7 @@ dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
return EGL_NO_IMAGE_KHR;
|
||||
}
|
||||
dri_image =
|
||||
dri2_dpy->image->createImageFromDmaBufs2(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImageFromDmaBufs2(dri2_dpy->dri_screen_render_gpu,
|
||||
attrs.Width, attrs.Height, attrs.DMABufFourCC.Value,
|
||||
modifier, fds, num_fds, pitches, offsets,
|
||||
attrs.DMABufYuvColorSpaceHint.Value,
|
||||
@@ -2844,7 +2846,7 @@ dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
}
|
||||
else {
|
||||
dri_image =
|
||||
dri2_dpy->image->createImageFromDmaBufs(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImageFromDmaBufs(dri2_dpy->dri_screen_render_gpu,
|
||||
attrs.Width, attrs.Height, attrs.DMABufFourCC.Value,
|
||||
fds, num_fds, pitches, offsets,
|
||||
attrs.DMABufYuvColorSpaceHint.Value,
|
||||
@@ -2923,7 +2925,7 @@ dri2_create_drm_image_mesa(_EGLDisplay *disp, const EGLint *attr_list)
|
||||
_eglInitImage(&dri2_img->base, disp);
|
||||
|
||||
dri2_img->dri_image =
|
||||
dri2_dpy->image->createImage(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImage(dri2_dpy->dri_screen_render_gpu,
|
||||
attrs.Width, attrs.Height,
|
||||
format, dri_use, dri2_img);
|
||||
if (dri2_img->dri_image == NULL) {
|
||||
@@ -3139,7 +3141,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd,
|
||||
int dri_components = 0;
|
||||
|
||||
if (fd == -1)
|
||||
img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen,
|
||||
img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen_render_gpu,
|
||||
buffer->width,
|
||||
buffer->height,
|
||||
buffer->format,
|
||||
@@ -3148,7 +3150,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd,
|
||||
buffer->offset,
|
||||
NULL);
|
||||
else
|
||||
img = dri2_dpy->image->createImageFromFds(dri2_dpy->dri_screen,
|
||||
img = dri2_dpy->image->createImageFromFds(dri2_dpy->dri_screen_render_gpu,
|
||||
buffer->width,
|
||||
buffer->height,
|
||||
buffer->format,
|
||||
@@ -3199,13 +3201,13 @@ dri2_bind_wayland_display_wl(_EGLDisplay *disp, struct wl_display *wl_dpy)
|
||||
if (dri2_dpy->wl_server_drm)
|
||||
goto fail;
|
||||
|
||||
device_name = drmGetRenderDeviceNameFromFd(dri2_dpy->fd);
|
||||
device_name = drmGetRenderDeviceNameFromFd(dri2_dpy->fd_render_gpu);
|
||||
if (!device_name)
|
||||
device_name = strdup(dri2_dpy->device_name);
|
||||
if (!device_name)
|
||||
goto fail;
|
||||
|
||||
if (drmGetCap(dri2_dpy->fd, DRM_CAP_PRIME, &cap) == 0 &&
|
||||
if (drmGetCap(dri2_dpy->fd_render_gpu, DRM_CAP_PRIME, &cap) == 0 &&
|
||||
cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT) &&
|
||||
dri2_dpy->image->base.version >= 7 &&
|
||||
dri2_dpy->image->createImageFromFds != NULL)
|
||||
@@ -3302,7 +3304,7 @@ dri2_egl_unref_sync(struct dri2_egl_display *dri2_dpy,
|
||||
}
|
||||
|
||||
if (dri2_sync->fence)
|
||||
dri2_dpy->fence->destroy_fence(dri2_dpy->dri_screen, dri2_sync->fence);
|
||||
dri2_dpy->fence->destroy_fence(dri2_dpy->dri_screen_render_gpu, dri2_sync->fence);
|
||||
|
||||
free(dri2_sync);
|
||||
}
|
||||
@@ -3342,7 +3344,7 @@ dri2_create_sync(_EGLDisplay *disp, EGLenum type, const EGLAttrib *attrib_list)
|
||||
|
||||
case EGL_SYNC_CL_EVENT_KHR:
|
||||
dri2_sync->fence = dri2_dpy->fence->get_fence_from_cl_event(
|
||||
dri2_dpy->dri_screen,
|
||||
dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_sync->base.CLEvent);
|
||||
/* this can only happen if the cl_event passed in is invalid. */
|
||||
if (!dri2_sync->fence) {
|
||||
@@ -3451,7 +3453,7 @@ dri2_dup_native_fence_fd(_EGLDisplay *disp, _EGLSync *sync)
|
||||
/* try to retrieve the actual native fence fd.. if rendering is
|
||||
* not flushed this will just return -1, aka NO_NATIVE_FENCE_FD:
|
||||
*/
|
||||
sync->SyncFd = dri2_dpy->fence->get_fence_fd(dri2_dpy->dri_screen,
|
||||
sync->SyncFd = dri2_dpy->fence->get_fence_fd(dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_sync->fence);
|
||||
}
|
||||
|
||||
@@ -3474,7 +3476,7 @@ dri2_set_blob_cache_funcs(_EGLDisplay *disp,
|
||||
EGLGetBlobFuncANDROID get)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display_lock(disp);
|
||||
dri2_dpy->blob->set_cache_funcs(dri2_dpy->dri_screen, set, get);
|
||||
dri2_dpy->blob->set_cache_funcs(dri2_dpy->dri_screen_render_gpu, set, get);
|
||||
mtx_unlock(&dri2_dpy->lock);
|
||||
}
|
||||
|
||||
|
@@ -222,7 +222,7 @@ struct dri2_egl_display
|
||||
|
||||
int dri2_major;
|
||||
int dri2_minor;
|
||||
__DRIscreen *dri_screen;
|
||||
__DRIscreen *dri_screen_render_gpu;
|
||||
__DRIscreen *dri_screen_display_gpu;
|
||||
bool own_dri_screen;
|
||||
const __DRIconfig **driver_configs;
|
||||
@@ -244,7 +244,7 @@ struct dri2_egl_display
|
||||
const __DRI2interopExtension *interop;
|
||||
const __DRIconfigOptionsExtension *configOptions;
|
||||
const __DRImutableRenderBufferDriverExtension *mutable_render_buffer;
|
||||
int fd;
|
||||
int fd_render_gpu;
|
||||
int fd_display_gpu;
|
||||
|
||||
/* dri2_initialize/dri2_terminate increment/decrement this count, so does
|
||||
@@ -613,7 +613,7 @@ dri2_set_WL_bind_wayland_display(_EGLDisplay *disp)
|
||||
int capabilities;
|
||||
|
||||
capabilities =
|
||||
dri2_dpy->image->getCapabilities(dri2_dpy->dri_screen);
|
||||
dri2_dpy->image->getCapabilities(dri2_dpy->dri_screen_render_gpu);
|
||||
disp->Extensions.WL_bind_wayland_display =
|
||||
(capabilities & __DRI_IMAGE_CAP_GLOBAL_NAMES) != 0;
|
||||
} else {
|
||||
|
@@ -419,7 +419,7 @@ droid_create_image_from_buffer_info(struct dri2_egl_display *dri2_dpy,
|
||||
if (dri2_dpy->image->base.version >= 15 &&
|
||||
dri2_dpy->image->createImageFromDmaBufs2 != NULL) {
|
||||
return dri2_dpy->image->createImageFromDmaBufs2(
|
||||
dri2_dpy->dri_screen, buf_info->width, buf_info->height,
|
||||
dri2_dpy->dri_screen_render_gpu, buf_info->width, buf_info->height,
|
||||
buf_info->drm_fourcc, buf_info->modifier, buf_info->fds,
|
||||
buf_info->num_planes, buf_info->pitches, buf_info->offsets,
|
||||
buf_info->yuv_color_space, buf_info->sample_range,
|
||||
@@ -428,7 +428,7 @@ droid_create_image_from_buffer_info(struct dri2_egl_display *dri2_dpy,
|
||||
}
|
||||
|
||||
return dri2_dpy->image->createImageFromDmaBufs(
|
||||
dri2_dpy->dri_screen, buf_info->width, buf_info->height,
|
||||
dri2_dpy->dri_screen_render_gpu, buf_info->width, buf_info->height,
|
||||
buf_info->drm_fourcc, buf_info->fds, buf_info->num_planes,
|
||||
buf_info->pitches, buf_info->offsets, buf_info->yuv_color_space,
|
||||
buf_info->sample_range, buf_info->horizontal_siting,
|
||||
@@ -835,7 +835,7 @@ get_front_bo(struct dri2_egl_surface *dri2_surf, unsigned int format)
|
||||
_eglLog(_EGL_DEBUG, "DRI driver requested unsupported front buffer for window surface");
|
||||
} else if (dri2_surf->base.Type == EGL_PBUFFER_BIT) {
|
||||
dri2_surf->dri_image_front =
|
||||
dri2_dpy->image->createImage(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImage(dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_surf->base.Width,
|
||||
dri2_surf->base.Height,
|
||||
format,
|
||||
@@ -1066,7 +1066,7 @@ droid_create_image_from_name(_EGLDisplay *disp,
|
||||
return NULL;
|
||||
|
||||
return
|
||||
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen_render_gpu,
|
||||
buf->width,
|
||||
buf->height,
|
||||
format,
|
||||
@@ -1469,7 +1469,7 @@ droid_load_driver(_EGLDisplay *disp, bool swrast)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd);
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd_render_gpu);
|
||||
if (dri2_dpy->driver_name == NULL)
|
||||
return false;
|
||||
|
||||
@@ -1574,11 +1574,11 @@ droid_open_device(_EGLDisplay *disp, bool swrast)
|
||||
return EGL_FALSE;
|
||||
}
|
||||
|
||||
dri2_dpy->fd = os_dupfd_cloexec(fd);
|
||||
if (dri2_dpy->fd < 0)
|
||||
dri2_dpy->fd_render_gpu = os_dupfd_cloexec(fd);
|
||||
if (dri2_dpy->fd_render_gpu < 0)
|
||||
return EGL_FALSE;
|
||||
|
||||
if (drmGetNodeTypeFromFd(dri2_dpy->fd) == DRM_NODE_RENDER)
|
||||
if (drmGetNodeTypeFromFd(dri2_dpy->fd_render_gpu) == DRM_NODE_RENDER)
|
||||
return EGL_FALSE;
|
||||
|
||||
return droid_probe_device(disp, swrast);
|
||||
@@ -1614,8 +1614,8 @@ droid_open_device(_EGLDisplay *disp, bool swrast)
|
||||
if (!(device->available_nodes & (1 << node_type)))
|
||||
continue;
|
||||
|
||||
dri2_dpy->fd = loader_open_device(device->nodes[node_type]);
|
||||
if (dri2_dpy->fd < 0) {
|
||||
dri2_dpy->fd_render_gpu = loader_open_device(device->nodes[node_type]);
|
||||
if (dri2_dpy->fd_render_gpu < 0) {
|
||||
_eglLog(_EGL_WARNING, "%s() Failed to open DRM device %s",
|
||||
__func__, device->nodes[node_type]);
|
||||
continue;
|
||||
@@ -1625,18 +1625,18 @@ droid_open_device(_EGLDisplay *disp, bool swrast)
|
||||
* Otherwise we fall-back the first device that is supported.
|
||||
*/
|
||||
if (vendor_name) {
|
||||
if (droid_filter_device(disp, dri2_dpy->fd, vendor_name)) {
|
||||
if (droid_filter_device(disp, dri2_dpy->fd_render_gpu, vendor_name)) {
|
||||
/* Device does not match - try next device */
|
||||
close(dri2_dpy->fd);
|
||||
dri2_dpy->fd = -1;
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
continue;
|
||||
}
|
||||
/* If the requested device matches - use it. Regardless if
|
||||
* init fails, do not fall-back to any other device.
|
||||
*/
|
||||
if (!droid_probe_device(disp, false)) {
|
||||
close(dri2_dpy->fd);
|
||||
dri2_dpy->fd = -1;
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -1645,12 +1645,12 @@ droid_open_device(_EGLDisplay *disp, bool swrast)
|
||||
break;
|
||||
|
||||
/* No explicit request - attempt the next device */
|
||||
close(dri2_dpy->fd);
|
||||
dri2_dpy->fd = -1;
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
}
|
||||
drmFreeDevices(devices, num_devices);
|
||||
|
||||
if (dri2_dpy->fd < 0) {
|
||||
if (dri2_dpy->fd_render_gpu < 0) {
|
||||
_eglLog(_EGL_WARNING, "Failed to open %s DRM device",
|
||||
vendor_name ? "desired": "any");
|
||||
return EGL_FALSE;
|
||||
@@ -1675,7 +1675,7 @@ dri2_initialize_android(_EGLDisplay *disp)
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
ret = hw_get_module(GRALLOC_HARDWARE_MODULE_ID,
|
||||
(const hw_module_t **)&dri2_dpy->gralloc);
|
||||
@@ -1692,7 +1692,7 @@ dri2_initialize_android(_EGLDisplay *disp)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
dev = _eglAddDevice(dri2_dpy->fd, false);
|
||||
dev = _eglAddDevice(dri2_dpy->fd_render_gpu, false);
|
||||
if (!dev) {
|
||||
err = "DRI2: failed to find EGLDevice";
|
||||
goto cleanup;
|
||||
|
@@ -49,7 +49,7 @@ device_alloc_image(struct dri2_egl_display *dri2_dpy,
|
||||
struct dri2_egl_surface *dri2_surf)
|
||||
{
|
||||
return dri2_dpy->image->createImage(
|
||||
dri2_dpy->dri_screen,
|
||||
dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_surf->base.Width,
|
||||
dri2_surf->base.Height,
|
||||
dri2_surf->visual,
|
||||
@@ -279,11 +279,11 @@ device_probe_device(_EGLDisplay *disp)
|
||||
if (request_software)
|
||||
_eglLog(_EGL_WARNING, "Not allowed to force software rendering when "
|
||||
"API explicitly selects a hardware device.");
|
||||
dri2_dpy->fd = device_get_fd(disp, disp->Device);
|
||||
if (dri2_dpy->fd < 0)
|
||||
dri2_dpy->fd_render_gpu = device_get_fd(disp, disp->Device);
|
||||
if (dri2_dpy->fd_render_gpu < 0)
|
||||
return false;
|
||||
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd);
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd_render_gpu);
|
||||
if (!dri2_dpy->driver_name)
|
||||
goto err_name;
|
||||
|
||||
@@ -310,8 +310,8 @@ err_load:
|
||||
dri2_dpy->driver_name = NULL;
|
||||
|
||||
err_name:
|
||||
close(dri2_dpy->fd);
|
||||
dri2_dpy->fd = -1;
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
return false;
|
||||
|
||||
}
|
||||
@@ -321,7 +321,7 @@ device_probe_device_sw(_EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->driver_name = strdup(disp->Options.Zink ? "zink" : "swrast");
|
||||
if (!dri2_dpy->driver_name)
|
||||
return false;
|
||||
@@ -351,7 +351,7 @@ dri2_initialize_device(_EGLDisplay *disp)
|
||||
/* Extension requires a PlatformDisplay - the EGLDevice. */
|
||||
dev = disp->PlatformDisplay;
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
disp->Device = dev;
|
||||
disp->DriverData = (void *) dri2_dpy;
|
||||
@@ -379,7 +379,7 @@ dri2_initialize_device(_EGLDisplay *disp)
|
||||
|
||||
dri2_setup_screen(disp);
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd);
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd_render_gpu);
|
||||
#endif
|
||||
dri2_set_WL_bind_wayland_display(disp);
|
||||
|
||||
|
@@ -507,7 +507,7 @@ dri2_drm_authenticate(_EGLDisplay *disp, uint32_t id)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
|
||||
return drmAuthMagic(dri2_dpy->fd, id);
|
||||
return drmAuthMagic(dri2_dpy->fd_render_gpu, id);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -691,7 +691,7 @@ dri2_initialize_drm(_EGLDisplay *disp)
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
disp->DriverData = (void *) dri2_dpy;
|
||||
|
||||
@@ -700,16 +700,16 @@ dri2_initialize_drm(_EGLDisplay *disp)
|
||||
char buf[64];
|
||||
int n = snprintf(buf, sizeof(buf), DRM_DEV_NAME, DRM_DIR_NAME, 0);
|
||||
if (n != -1 && n < sizeof(buf))
|
||||
dri2_dpy->fd = loader_open_device(buf);
|
||||
gbm = gbm_create_device(dri2_dpy->fd);
|
||||
dri2_dpy->fd_render_gpu = loader_open_device(buf);
|
||||
gbm = gbm_create_device(dri2_dpy->fd_render_gpu);
|
||||
if (gbm == NULL) {
|
||||
err = "DRI2: failed to create gbm device";
|
||||
goto cleanup;
|
||||
}
|
||||
dri2_dpy->own_device = true;
|
||||
} else {
|
||||
dri2_dpy->fd = os_dupfd_cloexec(gbm_device_get_fd(gbm));
|
||||
if (dri2_dpy->fd < 0) {
|
||||
dri2_dpy->fd_render_gpu = os_dupfd_cloexec(gbm_device_get_fd(gbm));
|
||||
if (dri2_dpy->fd_render_gpu < 0) {
|
||||
err = "DRI2: failed to fcntl() existing gbm device";
|
||||
goto cleanup;
|
||||
}
|
||||
@@ -721,7 +721,7 @@ dri2_initialize_drm(_EGLDisplay *disp)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
dev = _eglAddDevice(dri2_dpy->fd, dri2_dpy->gbm_dri->software);
|
||||
dev = _eglAddDevice(dri2_dpy->fd_render_gpu, dri2_dpy->gbm_dri->software);
|
||||
if (!dev) {
|
||||
err = "DRI2: failed to find EGLDevice";
|
||||
goto cleanup;
|
||||
@@ -730,7 +730,7 @@ dri2_initialize_drm(_EGLDisplay *disp)
|
||||
disp->Device = dev;
|
||||
|
||||
dri2_dpy->driver_name = strdup(dri2_dpy->gbm_dri->driver_name);
|
||||
dri2_dpy->is_render_node = drmGetNodeTypeFromFd(dri2_dpy->fd) == DRM_NODE_RENDER;
|
||||
dri2_dpy->is_render_node = drmGetNodeTypeFromFd(dri2_dpy->fd_render_gpu) == DRM_NODE_RENDER;
|
||||
|
||||
/* render nodes cannot use Gem names, and thus do not support
|
||||
* the __DRI_DRI2_LOADER extension */
|
||||
@@ -746,7 +746,7 @@ dri2_initialize_drm(_EGLDisplay *disp)
|
||||
}
|
||||
}
|
||||
|
||||
dri2_dpy->dri_screen = dri2_dpy->gbm_dri->screen;
|
||||
dri2_dpy->dri_screen_render_gpu = dri2_dpy->gbm_dri->screen;
|
||||
dri2_dpy->core = dri2_dpy->gbm_dri->core;
|
||||
dri2_dpy->dri2 = dri2_dpy->gbm_dri->dri2;
|
||||
dri2_dpy->swrast = dri2_dpy->gbm_dri->swrast;
|
||||
@@ -786,7 +786,7 @@ dri2_initialize_drm(_EGLDisplay *disp)
|
||||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd);
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd_render_gpu);
|
||||
#endif
|
||||
dri2_set_WL_bind_wayland_display(disp);
|
||||
|
||||
|
@@ -42,7 +42,7 @@ surfaceless_alloc_image(struct dri2_egl_display *dri2_dpy,
|
||||
struct dri2_egl_surface *dri2_surf)
|
||||
{
|
||||
return dri2_dpy->image->createImage(
|
||||
dri2_dpy->dri_screen,
|
||||
dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_surf->base.Width,
|
||||
dri2_surf->base.Height,
|
||||
dri2_surf->visual,
|
||||
@@ -250,18 +250,18 @@ surfaceless_probe_device(_EGLDisplay *disp, bool swrast)
|
||||
if (!(device->available_nodes & (1 << node_type)))
|
||||
continue;
|
||||
|
||||
dri2_dpy->fd = loader_open_device(device->nodes[node_type]);
|
||||
if (dri2_dpy->fd < 0)
|
||||
dri2_dpy->fd_render_gpu = loader_open_device(device->nodes[node_type]);
|
||||
if (dri2_dpy->fd_render_gpu < 0)
|
||||
continue;
|
||||
|
||||
disp->Device = _eglAddDevice(dri2_dpy->fd, swrast);
|
||||
disp->Device = _eglAddDevice(dri2_dpy->fd_render_gpu, swrast);
|
||||
if (!disp->Device) {
|
||||
close(dri2_dpy->fd);
|
||||
dri2_dpy->fd = -1;
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
continue;
|
||||
}
|
||||
|
||||
char *driver_name = loader_get_driver_for_fd(dri2_dpy->fd);
|
||||
char *driver_name = loader_get_driver_for_fd(dri2_dpy->fd_render_gpu);
|
||||
if (swrast) {
|
||||
/* Use kms swrast only with vgem / virtio_gpu.
|
||||
* virtio-gpu fallbacks to software rendering when 3D features
|
||||
@@ -283,8 +283,8 @@ surfaceless_probe_device(_EGLDisplay *disp, bool swrast)
|
||||
|
||||
free(dri2_dpy->driver_name);
|
||||
dri2_dpy->driver_name = NULL;
|
||||
close(dri2_dpy->fd);
|
||||
dri2_dpy->fd = -1;
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
}
|
||||
drmFreeDevices(devices, num_devices);
|
||||
|
||||
@@ -304,8 +304,8 @@ surfaceless_probe_device_sw(_EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
disp->Device = _eglAddDevice(dri2_dpy->fd, true);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
disp->Device = _eglAddDevice(dri2_dpy->fd_render_gpu, true);
|
||||
assert(disp->Device);
|
||||
|
||||
dri2_dpy->driver_name = strdup(disp->Options.Zink ? "zink" : "swrast");
|
||||
@@ -333,7 +333,7 @@ dri2_initialize_surfaceless(_EGLDisplay *disp)
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
disp->DriverData = (void *) dri2_dpy;
|
||||
|
||||
@@ -363,7 +363,7 @@ dri2_initialize_surfaceless(_EGLDisplay *disp)
|
||||
|
||||
dri2_setup_screen(disp);
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd);
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd_render_gpu);
|
||||
#endif
|
||||
dri2_set_WL_bind_wayland_display(disp);
|
||||
|
||||
|
@@ -934,7 +934,7 @@ create_dri_image_from_dmabuf_feedback(struct dri2_egl_surface *dri2_surf,
|
||||
flags |= __DRI_IMAGE_USE_SCANOUT;
|
||||
|
||||
dri2_surf->back->dri_image =
|
||||
loader_dri_create_image(dri2_dpy->dri_screen, dri2_dpy->image,
|
||||
loader_dri_create_image(dri2_dpy->dri_screen_render_gpu, dri2_dpy->image,
|
||||
dri2_surf->base.Width,
|
||||
dri2_surf->base.Height,
|
||||
dri_image_format,
|
||||
@@ -972,7 +972,7 @@ create_dri_image(struct dri2_egl_surface *dri2_surf,
|
||||
* then fall back to the old createImage, and hope it allocates an image
|
||||
* which is acceptable to the winsys. */
|
||||
dri2_surf->back->dri_image =
|
||||
loader_dri_create_image(dri2_dpy->dri_screen, dri2_dpy->image,
|
||||
loader_dri_create_image(dri2_dpy->dri_screen_render_gpu, dri2_dpy->image,
|
||||
dri2_surf->base.Width,
|
||||
dri2_surf->base.Height,
|
||||
dri_image_format,
|
||||
@@ -1110,7 +1110,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
||||
* need to make it visible to render GPU
|
||||
*/
|
||||
dri2_surf->back->linear_copy =
|
||||
dri2_dpy->image->createImageFromFds(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImageFromFds(dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_surf->base.Width,
|
||||
dri2_surf->base.Height,
|
||||
loader_image_format_to_fourcc(
|
||||
@@ -1129,7 +1129,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
||||
|
||||
if (!dri2_surf->back->linear_copy) {
|
||||
dri2_surf->back->linear_copy =
|
||||
loader_dri_create_image(dri2_dpy->dri_screen, dri2_dpy->image,
|
||||
loader_dri_create_image(dri2_dpy->dri_screen_render_gpu, dri2_dpy->image,
|
||||
dri2_surf->base.Width,
|
||||
dri2_surf->base.Height,
|
||||
linear_dri_image_format,
|
||||
@@ -1776,8 +1776,8 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device)
|
||||
if (!dri2_dpy->device_name)
|
||||
return;
|
||||
|
||||
dri2_dpy->fd = loader_open_device(dri2_dpy->device_name);
|
||||
if (dri2_dpy->fd == -1) {
|
||||
dri2_dpy->fd_render_gpu = loader_open_device(dri2_dpy->device_name);
|
||||
if (dri2_dpy->fd_render_gpu == -1) {
|
||||
_eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)",
|
||||
dri2_dpy->device_name, strerror(errno));
|
||||
free(dri2_dpy->device_name);
|
||||
@@ -1785,12 +1785,12 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device)
|
||||
return;
|
||||
}
|
||||
|
||||
if (drmGetNodeTypeFromFd(dri2_dpy->fd) == DRM_NODE_RENDER) {
|
||||
if (drmGetNodeTypeFromFd(dri2_dpy->fd_render_gpu) == DRM_NODE_RENDER) {
|
||||
dri2_dpy->authenticated = true;
|
||||
} else {
|
||||
if (drmGetMagic(dri2_dpy->fd, &magic)) {
|
||||
close(dri2_dpy->fd);
|
||||
dri2_dpy->fd = -1;
|
||||
if (drmGetMagic(dri2_dpy->fd_render_gpu, &magic)) {
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
free(dri2_dpy->device_name);
|
||||
dri2_dpy->device_name = NULL;
|
||||
_eglLog(_EGL_WARNING, "wayland-egl: drmGetMagic failed");
|
||||
@@ -1915,7 +1915,7 @@ default_dmabuf_feedback_main_device(void *data,
|
||||
}
|
||||
|
||||
dri2_dpy->device_name = node;
|
||||
dri2_dpy->fd = fd;
|
||||
dri2_dpy->fd_render_gpu = fd;
|
||||
dri2_dpy->authenticated = true;
|
||||
}
|
||||
|
||||
@@ -2156,7 +2156,7 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
disp->DriverData = (void *) dri2_dpy;
|
||||
|
||||
@@ -2213,7 +2213,7 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||
|
||||
/* We couldn't retrieve a render node from the dma-buf feedback (or the
|
||||
* feedback was not advertised at all), so we must fallback to wl_drm. */
|
||||
if (dri2_dpy->fd == -1) {
|
||||
if (dri2_dpy->fd_render_gpu == -1) {
|
||||
/* wl_drm not advertised by compositor, so can't continue */
|
||||
if (dri2_dpy->wl_drm_name == 0)
|
||||
goto cleanup;
|
||||
@@ -2221,7 +2221,7 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||
|
||||
if (dri2_dpy->wl_drm == NULL)
|
||||
goto cleanup;
|
||||
if (roundtrip(dri2_dpy) < 0 || dri2_dpy->fd == -1)
|
||||
if (roundtrip(dri2_dpy) < 0 || dri2_dpy->fd_render_gpu == -1)
|
||||
goto cleanup;
|
||||
|
||||
if (!dri2_dpy->authenticated &&
|
||||
@@ -2229,15 +2229,15 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
dri2_dpy->fd_display_gpu = fcntl(dri2_dpy->fd, F_DUPFD_CLOEXEC, 3);
|
||||
dri2_dpy->fd = loader_get_user_preferred_fd(dri2_dpy->fd,
|
||||
&dri2_dpy->is_different_gpu);
|
||||
dri2_dpy->fd_display_gpu = fcntl(dri2_dpy->fd_render_gpu, F_DUPFD_CLOEXEC, 3);
|
||||
dri2_dpy->fd_render_gpu = loader_get_user_preferred_fd(dri2_dpy->fd_render_gpu,
|
||||
&dri2_dpy->is_different_gpu);
|
||||
if (!dri2_dpy->is_different_gpu) {
|
||||
close(dri2_dpy->fd_display_gpu);
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
}
|
||||
|
||||
dev = _eglAddDevice(dri2_dpy->fd, false);
|
||||
dev = _eglAddDevice(dri2_dpy->fd_render_gpu, false);
|
||||
if (!dev) {
|
||||
_eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice");
|
||||
goto cleanup;
|
||||
@@ -2247,7 +2247,7 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||
|
||||
if (dri2_dpy->is_different_gpu) {
|
||||
free(dri2_dpy->device_name);
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd);
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd_render_gpu);
|
||||
if (!dri2_dpy->device_name) {
|
||||
_eglError(EGL_BAD_ALLOC, "wayland-egl: failed to get device name "
|
||||
"for requested GPU");
|
||||
@@ -2259,9 +2259,9 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||
* will return a render-node when the requested gpu is different
|
||||
* to the server, but also if the client asks for the same gpu than
|
||||
* the server by requesting its pci-id */
|
||||
dri2_dpy->is_render_node = drmGetNodeTypeFromFd(dri2_dpy->fd) == DRM_NODE_RENDER;
|
||||
dri2_dpy->is_render_node = drmGetNodeTypeFromFd(dri2_dpy->fd_render_gpu) == DRM_NODE_RENDER;
|
||||
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd);
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd_render_gpu);
|
||||
if (dri2_dpy->driver_name == NULL) {
|
||||
_eglError(EGL_BAD_ALLOC, "DRI2: failed to get driver name");
|
||||
goto cleanup;
|
||||
@@ -2769,7 +2769,7 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp)
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
disp->DriverData = (void *) dri2_dpy;
|
||||
|
||||
if (dri2_wl_formats_init(&dri2_dpy->formats) < 0)
|
||||
@@ -2784,7 +2784,7 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp)
|
||||
dri2_dpy->wl_dpy = disp->PlatformDisplay;
|
||||
}
|
||||
|
||||
dev = _eglAddDevice(dri2_dpy->fd, true);
|
||||
dev = _eglAddDevice(dri2_dpy->fd_render_gpu, true);
|
||||
if (!dev) {
|
||||
_eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice");
|
||||
goto cleanup;
|
||||
|
@@ -634,7 +634,7 @@ dri2_x11_local_authenticate(struct dri2_egl_display *dri2_dpy)
|
||||
#ifdef HAVE_LIBDRM
|
||||
drm_magic_t magic;
|
||||
|
||||
if (drmGetMagic(dri2_dpy->fd, &magic)) {
|
||||
if (drmGetMagic(dri2_dpy->fd_render_gpu, &magic)) {
|
||||
_eglLog(_EGL_WARNING, "DRI2: failed to get drm magic");
|
||||
return EGL_FALSE;
|
||||
}
|
||||
@@ -716,8 +716,8 @@ dri2_x11_connect(struct dri2_egl_display *dri2_dpy)
|
||||
|
||||
device_name = xcb_dri2_connect_device_name (connect);
|
||||
|
||||
dri2_dpy->fd = loader_open_device(device_name);
|
||||
if (dri2_dpy->fd == -1) {
|
||||
dri2_dpy->fd_render_gpu = loader_open_device(device_name);
|
||||
if (dri2_dpy->fd_render_gpu == -1) {
|
||||
_eglLog(_EGL_WARNING,
|
||||
"DRI2: could not open %s (%s)", device_name, strerror(errno));
|
||||
free(connect);
|
||||
@@ -725,7 +725,7 @@ dri2_x11_connect(struct dri2_egl_display *dri2_dpy)
|
||||
}
|
||||
|
||||
if (!dri2_x11_local_authenticate(dri2_dpy)) {
|
||||
close(dri2_dpy->fd);
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
free(connect);
|
||||
return EGL_FALSE;
|
||||
}
|
||||
@@ -735,7 +735,7 @@ dri2_x11_connect(struct dri2_egl_display *dri2_dpy)
|
||||
/* If Mesa knows about the appropriate driver for this fd, then trust it.
|
||||
* Otherwise, default to the server's value.
|
||||
*/
|
||||
loader_driver_name = loader_get_driver_for_fd(dri2_dpy->fd);
|
||||
loader_driver_name = loader_get_driver_for_fd(dri2_dpy->fd_render_gpu);
|
||||
if (loader_driver_name) {
|
||||
dri2_dpy->driver_name = loader_driver_name;
|
||||
} else {
|
||||
@@ -745,7 +745,7 @@ dri2_x11_connect(struct dri2_egl_display *dri2_dpy)
|
||||
}
|
||||
|
||||
if (dri2_dpy->driver_name == NULL) {
|
||||
close(dri2_dpy->fd);
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
free(connect);
|
||||
return EGL_FALSE;
|
||||
}
|
||||
@@ -1142,7 +1142,7 @@ dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
|
||||
stride = buffers[0].pitch / buffers[0].cpp;
|
||||
dri2_img->dri_image =
|
||||
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
|
||||
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen_render_gpu,
|
||||
buffers_reply->width,
|
||||
buffers_reply->height,
|
||||
format,
|
||||
@@ -1451,12 +1451,12 @@ dri2_initialize_x11_swrast(_EGLDisplay *disp)
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
if (!dri2_get_xcb_connection(disp, dri2_dpy))
|
||||
goto cleanup;
|
||||
|
||||
dev = _eglAddDevice(dri2_dpy->fd, true);
|
||||
dev = _eglAddDevice(dri2_dpy->fd_render_gpu, true);
|
||||
if (!dev) {
|
||||
_eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice");
|
||||
goto cleanup;
|
||||
@@ -1541,7 +1541,7 @@ dri2_initialize_x11_dri3(_EGLDisplay *disp)
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
if (!dri2_get_xcb_connection(disp, dri2_dpy))
|
||||
goto cleanup;
|
||||
@@ -1549,7 +1549,7 @@ dri2_initialize_x11_dri3(_EGLDisplay *disp)
|
||||
if (!dri3_x11_connect(dri2_dpy))
|
||||
goto cleanup;
|
||||
|
||||
dev = _eglAddDevice(dri2_dpy->fd, false);
|
||||
dev = _eglAddDevice(dri2_dpy->fd_render_gpu, false);
|
||||
if (!dev) {
|
||||
_eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice");
|
||||
goto cleanup;
|
||||
@@ -1651,7 +1651,7 @@ dri2_initialize_x11_dri2(_EGLDisplay *disp)
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dri2_dpy->fd = -1;
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
if (!dri2_get_xcb_connection(disp, dri2_dpy))
|
||||
goto cleanup;
|
||||
@@ -1659,7 +1659,7 @@ dri2_initialize_x11_dri2(_EGLDisplay *disp)
|
||||
if (!dri2_x11_connect(dri2_dpy))
|
||||
goto cleanup;
|
||||
|
||||
dev = _eglAddDevice(dri2_dpy->fd, false);
|
||||
dev = _eglAddDevice(dri2_dpy->fd_render_gpu, false);
|
||||
if (!dev) {
|
||||
_eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice");
|
||||
goto cleanup;
|
||||
|
@@ -84,7 +84,7 @@ egl_dri3_get_dri_screen(void)
|
||||
if (!ctx)
|
||||
return NULL;
|
||||
dri2_ctx = dri2_egl_context(ctx);
|
||||
return dri2_egl_display(dri2_ctx->base.Resource.Display)->dri_screen;
|
||||
return dri2_egl_display(dri2_ctx->base.Resource.Display)->dri_screen_render_gpu;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -188,7 +188,7 @@ dri3_create_surface(_EGLDisplay *disp, EGLint type, _EGLConfig *conf,
|
||||
|
||||
if (loader_dri3_drawable_init(dri2_dpy->conn, drawable,
|
||||
egl_to_loader_dri3_drawable_type(type),
|
||||
dri2_dpy->dri_screen,
|
||||
dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_dpy->dri_screen_display_gpu,
|
||||
dri2_dpy->is_different_gpu,
|
||||
dri2_dpy->multibuffers_available,
|
||||
@@ -326,7 +326,7 @@ dri3_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
dri2_img->dri_image = loader_dri3_create_image(dri2_dpy->conn,
|
||||
bp_reply,
|
||||
format,
|
||||
dri2_dpy->dri_screen,
|
||||
dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_dpy->image,
|
||||
dri2_img);
|
||||
|
||||
@@ -378,7 +378,7 @@ dri3_create_image_khr_pixmap_from_buffers(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
dri2_img->dri_image = loader_dri3_create_image_from_buffers(dri2_dpy->conn,
|
||||
bp_reply,
|
||||
format,
|
||||
dri2_dpy->dri_screen,
|
||||
dri2_dpy->dri_screen_render_gpu,
|
||||
dri2_dpy->image,
|
||||
dri2_img);
|
||||
free(bp_reply);
|
||||
@@ -511,7 +511,7 @@ dri3_close_screen_notify(_EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
|
||||
loader_dri3_close_screen(dri2_dpy->dri_screen);
|
||||
loader_dri3_close_screen(dri2_dpy->dri_screen_render_gpu);
|
||||
}
|
||||
|
||||
struct dri2_egl_display_vtbl dri3_x11_display_vtbl = {
|
||||
@@ -624,8 +624,8 @@ dri3_x11_connect(struct dri2_egl_display *dri2_dpy)
|
||||
}
|
||||
free(xfixes_query);
|
||||
|
||||
dri2_dpy->fd = loader_dri3_open(dri2_dpy->conn, dri2_dpy->screen->root, 0);
|
||||
if (dri2_dpy->fd < 0) {
|
||||
dri2_dpy->fd_render_gpu = loader_dri3_open(dri2_dpy->conn, dri2_dpy->screen->root, 0);
|
||||
if (dri2_dpy->fd_render_gpu < 0) {
|
||||
int conn_error = xcb_connection_has_error(dri2_dpy->conn);
|
||||
_eglLog(_EGL_WARNING, "DRI3: Screen seems not DRI3 capable");
|
||||
|
||||
@@ -635,17 +635,18 @@ dri3_x11_connect(struct dri2_egl_display *dri2_dpy)
|
||||
return EGL_FALSE;
|
||||
}
|
||||
|
||||
dri2_dpy->fd_display_gpu = fcntl(dri2_dpy->fd, F_DUPFD_CLOEXEC, 3);
|
||||
dri2_dpy->fd = loader_get_user_preferred_fd(dri2_dpy->fd, &dri2_dpy->is_different_gpu);
|
||||
dri2_dpy->fd_display_gpu = fcntl(dri2_dpy->fd_render_gpu, F_DUPFD_CLOEXEC, 3);
|
||||
dri2_dpy->fd_render_gpu = loader_get_user_preferred_fd(dri2_dpy->fd_render_gpu,
|
||||
&dri2_dpy->is_different_gpu);
|
||||
if (!dri2_dpy->is_different_gpu) {
|
||||
close(dri2_dpy->fd_display_gpu);
|
||||
dri2_dpy->fd_display_gpu = -1;
|
||||
}
|
||||
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd);
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd_render_gpu);
|
||||
if (!dri2_dpy->driver_name) {
|
||||
_eglLog(_EGL_WARNING, "DRI3: No driver found");
|
||||
close(dri2_dpy->fd);
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
return EGL_FALSE;
|
||||
}
|
||||
|
||||
@@ -653,7 +654,7 @@ dri3_x11_connect(struct dri2_egl_display *dri2_dpy)
|
||||
/* Only try to get a render device name since dri3 doesn't provide a
|
||||
* mechanism for authenticating client opened device node fds. If this
|
||||
* fails then don't advertise the extension. */
|
||||
dri2_dpy->device_name = drmGetRenderDeviceNameFromFd(dri2_dpy->fd);
|
||||
dri2_dpy->device_name = drmGetRenderDeviceNameFromFd(dri2_dpy->fd_render_gpu);
|
||||
#endif
|
||||
|
||||
return EGL_TRUE;
|
||||
|
Reference in New Issue
Block a user