diff options
author | James Jones <jajones@nvidia.com> | 2020-10-15 14:30:32 -0700 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-01-05 16:11:11 +0000 |
commit | 7d4c184ff926a9f9c8d54b25a0dcf4fa293bf2d8 (patch) | |
tree | 4ad81642f7bbdb2fb2b100bb3341c3dfa1f39f50 | |
parent | b77f43f2539ddac6e334feefaa69a43720f1d2bf (diff) |
gallium/dri: Factor out DRI extension setup code
Share the DRI extension setup code between
dri2_init_screen and dri_kms_init_screen. There's
currently very little difference, and the sharing
will make a subsequent change to refactor this
code to use per-screen extension lists easier.
Signed-off-by: James Jones <jajones@nvidia.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7175>
-rw-r--r-- | src/gallium/frontends/dri/dri2.c | 93 |
1 files changed, 47 insertions, 46 deletions
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c index 5c16f91422d..d365b851cbd 100644 --- a/src/gallium/frontends/dri/dri2.c +++ b/src/gallium/frontends/dri/dri2.c @@ -2161,6 +2161,51 @@ static const __DRIextension *dri_robust_screen_extensions[] = { }; /** + * Set up the DRI extension list for this screen based on its underlying + * gallium screen's capabilities. + */ +static void +dri2_init_screen_extensions(struct dri_screen *screen, + struct pipe_screen *pscreen, + bool is_kms_screen) +{ + if (pscreen->resource_create_with_modifiers) + dri2ImageExtension.createImageWithModifiers = + dri2_create_image_with_modifiers; + + if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF)) { + uint64_t cap; + + if (drmGetCap(screen->sPriv->fd, DRM_CAP_PRIME, &cap) == 0 && + (cap & DRM_PRIME_CAP_IMPORT)) { + dri2ImageExtension.createImageFromFds = dri2_from_fds; + dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs; + dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2; + dri2ImageExtension.createImageFromDmaBufs3 = dri2_from_dma_bufs3; + dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats; + dri2ImageExtension.queryDmaBufModifiers = + dri2_query_dma_buf_modifiers; + if (!is_kms_screen) { + dri2ImageExtension.queryDmaBufFormatModifierAttribs = + dri2_query_dma_buf_format_modifier_attribs; + } + } + } + + screen->sPriv->extensions = dri_screen_extensions; + + if (!is_kms_screen) { + if (pscreen->set_damage_region) + dri2BufferDamageExtension.set_damage_region = dri2_set_damage_region; + + if (pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY)) { + screen->sPriv->extensions = dri_robust_screen_extensions; + screen->has_reset_status_query = true; + } + } +} + +/** * This is the driver specific part of the createNewScreen entry point. * * Returns the struct gl_config supported by this driver. @@ -2193,36 +2238,7 @@ dri2_init_screen(__DRIscreen * sPriv) screen->throttle = pscreen->get_param(pscreen, PIPE_CAP_THROTTLE); - if (pscreen->resource_create_with_modifiers) - dri2ImageExtension.createImageWithModifiers = - dri2_create_image_with_modifiers; - - if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF)) { - uint64_t cap; - - if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 && - (cap & DRM_PRIME_CAP_IMPORT)) { - dri2ImageExtension.createImageFromFds = dri2_from_fds; - dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs; - dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2; - dri2ImageExtension.createImageFromDmaBufs3 = dri2_from_dma_bufs3; - dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats; - dri2ImageExtension.queryDmaBufModifiers = - dri2_query_dma_buf_modifiers; - dri2ImageExtension.queryDmaBufFormatModifierAttribs = - dri2_query_dma_buf_format_modifier_attribs; - } - } - - if (pscreen->set_damage_region) - dri2BufferDamageExtension.set_damage_region = dri2_set_damage_region; - - if (pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY)) { - sPriv->extensions = dri_robust_screen_extensions; - screen->has_reset_status_query = true; - } - else - sPriv->extensions = dri_screen_extensions; + dri2_init_screen_extensions(screen, pscreen, false); configs = dri_init_screen_helper(screen, pscreen); if (!configs) @@ -2258,7 +2274,6 @@ dri_kms_init_screen(__DRIscreen * sPriv) const __DRIconfig **configs; struct dri_screen *screen; struct pipe_screen *pscreen = NULL; - uint64_t cap; screen = CALLOC_STRUCT(dri_screen); if (!screen) @@ -2277,21 +2292,7 @@ dri_kms_init_screen(__DRIscreen * sPriv) if (!pscreen) goto release_pipe; - if (pscreen->resource_create_with_modifiers) - dri2ImageExtension.createImageWithModifiers = - dri2_create_image_with_modifiers; - - if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 && - (cap & DRM_PRIME_CAP_IMPORT)) { - dri2ImageExtension.createImageFromFds = dri2_from_fds; - dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs; - dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2; - dri2ImageExtension.createImageFromDmaBufs3 = dri2_from_dma_bufs3; - dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats; - dri2ImageExtension.queryDmaBufModifiers = dri2_query_dma_buf_modifiers; - } - - sPriv->extensions = dri_screen_extensions; + dri2_init_screen_extensions(screen, pscreen, true); configs = dri_init_screen_helper(screen, pscreen); if (!configs) |