cogl/renderer: Add API to query DRM format modifiers
Will be used to do explicit modifier buffer allocation via the Cogl API. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3900>
This commit is contained in:
parent
78cfbb57eb
commit
e3f743facc
@ -594,6 +594,28 @@ cogl_renderer_get_driver (CoglRenderer *renderer)
|
||||
return renderer->driver;
|
||||
}
|
||||
|
||||
GArray *
|
||||
cogl_renderer_query_drm_modifiers (CoglRenderer *renderer,
|
||||
CoglPixelFormat format,
|
||||
CoglDrmModifierFilter filter,
|
||||
GError **error)
|
||||
{
|
||||
const CoglWinsysVtable *winsys = _cogl_renderer_get_winsys (renderer);
|
||||
|
||||
if (winsys->renderer_query_drm_modifiers)
|
||||
{
|
||||
return winsys->renderer_query_drm_modifiers (renderer,
|
||||
format,
|
||||
filter,
|
||||
error);
|
||||
}
|
||||
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
||||
"CoglRenderer doesn't support querying drm modifiers");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CoglDmaBufHandle *
|
||||
cogl_renderer_create_dma_buf (CoglRenderer *renderer,
|
||||
CoglPixelFormat format,
|
||||
|
@ -225,6 +225,18 @@ COGL_EXPORT CoglDriver
|
||||
cogl_renderer_get_driver (CoglRenderer *renderer);
|
||||
|
||||
|
||||
/**
|
||||
* cogl_renderer_query_drm_modifiers: (skip)
|
||||
* @renderer: A #CoglRenderer
|
||||
* @format: The #CoglPixelFormat
|
||||
* @error: (nullable): return location for a #GError
|
||||
*/
|
||||
COGL_EXPORT GArray *
|
||||
cogl_renderer_query_drm_modifiers (CoglRenderer *renderer,
|
||||
CoglPixelFormat format,
|
||||
CoglDrmModifierFilter filter,
|
||||
GError **error);
|
||||
|
||||
/**
|
||||
* cogl_renderer_create_dma_buf: (skip)
|
||||
* @renderer: A #CoglRenderer
|
||||
|
@ -107,6 +107,12 @@ typedef struct _CoglWinsysVtable
|
||||
void
|
||||
(*display_destroy) (CoglDisplay *display);
|
||||
|
||||
GArray *
|
||||
(* renderer_query_drm_modifiers) (CoglRenderer *renderer,
|
||||
CoglPixelFormat format,
|
||||
CoglDrmModifierFilter filter,
|
||||
GError **error);
|
||||
|
||||
CoglDmaBufHandle *
|
||||
(*renderer_create_dma_buf) (CoglRenderer *renderer,
|
||||
CoglPixelFormat format,
|
||||
|
@ -954,6 +954,34 @@ meta_renderer_native_queue_mode_set_update (MetaRendererNative *renderer_native,
|
||||
meta_kms_update_free (new_kms_update);
|
||||
}
|
||||
|
||||
static GArray *
|
||||
meta_renderer_native_query_drm_modifiers (CoglRenderer *cogl_renderer,
|
||||
CoglPixelFormat format,
|
||||
CoglDrmModifierFilter filter,
|
||||
GError **error)
|
||||
{
|
||||
CoglRendererEGL *cogl_renderer_egl = cogl_renderer->winsys;
|
||||
MetaRendererNativeGpuData *renderer_gpu_data = cogl_renderer_egl->platform;
|
||||
const MetaFormatInfo *format_info;
|
||||
uint32_t drm_format;
|
||||
MetaRenderDevice *render_device;
|
||||
|
||||
format_info = meta_format_info_from_cogl_format (format);
|
||||
if (!format_info)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
|
||||
"Format %s not supported",
|
||||
cogl_pixel_format_to_string (format));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
drm_format = format_info->drm_format;
|
||||
|
||||
render_device = renderer_gpu_data->render_device;
|
||||
return meta_render_device_query_drm_modifiers (render_device, drm_format,
|
||||
filter, error);
|
||||
}
|
||||
|
||||
static void
|
||||
close_fds (int *fds,
|
||||
int n_fds)
|
||||
@ -1304,6 +1332,7 @@ get_native_cogl_winsys_vtable (CoglRenderer *cogl_renderer)
|
||||
|
||||
vtable.renderer_connect = meta_renderer_native_connect;
|
||||
vtable.renderer_disconnect = meta_renderer_native_disconnect;
|
||||
vtable.renderer_query_drm_modifiers = meta_renderer_native_query_drm_modifiers;
|
||||
vtable.renderer_create_dma_buf = meta_renderer_native_create_dma_buf;
|
||||
vtable.renderer_is_dma_buf_supported =
|
||||
meta_renderer_native_is_dma_buf_supported;
|
||||
|
Loading…
x
Reference in New Issue
Block a user