mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 08:50:09 +01:00
kopper: add a dmabuf-free image interface for use with sw drivers
sw drivers don't support modifiers or dmabufs or any of that, so separate interfaces are needed to avoid advertising extensions that will only lead to crashes Reviewed-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15802>
This commit is contained in:
parent
31824d4213
commit
d09ee469f0
3 changed files with 39 additions and 2 deletions
|
|
@ -14,7 +14,6 @@ spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_ust_test,Fai
|
|||
spec@egl_khr_gl_colorspace@srgb,Crash
|
||||
spec@ext_framebuffer_blit@fbo-sys-blit,Fail
|
||||
spec@ext_framebuffer_blit@fbo-sys-sub-blit,Fail
|
||||
spec@ext_image_dma_buf_import@ext_image_dma_buf_import-export-tex,Crash
|
||||
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip,Fail
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center,Fail
|
||||
|
|
|
|||
|
|
@ -1899,6 +1899,28 @@ const __DRIimageExtension driVkImageExtension = {
|
|||
.createImageWithModifiers2 = dri2_create_image_with_modifiers2,
|
||||
};
|
||||
|
||||
const __DRIimageExtension driVkImageExtensionSw = {
|
||||
.base = { __DRI_IMAGE, 20 },
|
||||
|
||||
.createImageFromName = dri2_create_image_from_name,
|
||||
.createImageFromRenderbuffer = dri2_create_image_from_renderbuffer,
|
||||
.destroyImage = dri2_destroy_image,
|
||||
.createImage = dri2_create_image,
|
||||
.queryImage = dri2_query_image,
|
||||
.dupImage = dri2_dup_image,
|
||||
.validateUsage = dri2_validate_usage,
|
||||
.createImageFromNames = dri2_from_names,
|
||||
.fromPlanar = dri2_from_planar,
|
||||
.createImageFromTexture = dri2_create_from_texture,
|
||||
.createImageFromFds = dri2_from_fds,
|
||||
.createImageFromFds2 = dri2_from_fds2,
|
||||
.blitImage = dri2_blit_image,
|
||||
.getCapabilities = dri2_get_capabilities,
|
||||
.mapImage = dri2_map_image,
|
||||
.unmapImage = dri2_unmap_image,
|
||||
.createImageFromRenderbuffer2 = dri2_create_image_from_renderbuffer2,
|
||||
};
|
||||
|
||||
static const __DRIrobustnessExtension dri2Robustness = {
|
||||
.base = { __DRI2_ROBUSTNESS, 1 }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ struct kopper_screen {
|
|||
};
|
||||
|
||||
extern const __DRIimageExtension driVkImageExtension;
|
||||
extern const __DRIimageExtension driVkImageExtensionSw;
|
||||
|
||||
static void
|
||||
kopper_flush_drawable(__DRIdrawable *dPriv)
|
||||
|
|
@ -95,6 +96,18 @@ static const __DRIextension *drivk_screen_extensions[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static const __DRIextension *drivk_sw_screen_extensions[] = {
|
||||
&driTexBufferExtension.base,
|
||||
&dri2RendererQueryExtension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
&dri2FenceExtension.base,
|
||||
&dri2Robustness.base,
|
||||
&driVkImageExtensionSw.base,
|
||||
&dri2FlushControlExtension.base,
|
||||
&driVkFlushExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const __DRIconfig **
|
||||
kopper_init_screen(__DRIscreen * sPriv)
|
||||
{
|
||||
|
|
@ -137,7 +150,10 @@ kopper_init_screen(__DRIscreen * sPriv)
|
|||
assert(pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY));
|
||||
screen->has_reset_status_query = true;
|
||||
screen->lookup_egl_image = dri2_lookup_egl_image;
|
||||
sPriv->extensions = drivk_screen_extensions;
|
||||
if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF))
|
||||
sPriv->extensions = drivk_screen_extensions;
|
||||
else
|
||||
sPriv->extensions = drivk_sw_screen_extensions;
|
||||
|
||||
const __DRIimageLookupExtension *image = sPriv->dri2.image;
|
||||
if (image &&
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue