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;
|
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 *
|
CoglDmaBufHandle *
|
||||||
cogl_renderer_create_dma_buf (CoglRenderer *renderer,
|
cogl_renderer_create_dma_buf (CoglRenderer *renderer,
|
||||||
CoglPixelFormat format,
|
CoglPixelFormat format,
|
||||||
|
@ -225,6 +225,18 @@ COGL_EXPORT CoglDriver
|
|||||||
cogl_renderer_get_driver (CoglRenderer *renderer);
|
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)
|
* cogl_renderer_create_dma_buf: (skip)
|
||||||
* @renderer: A #CoglRenderer
|
* @renderer: A #CoglRenderer
|
||||||
|
@ -107,6 +107,12 @@ typedef struct _CoglWinsysVtable
|
|||||||
void
|
void
|
||||||
(*display_destroy) (CoglDisplay *display);
|
(*display_destroy) (CoglDisplay *display);
|
||||||
|
|
||||||
|
GArray *
|
||||||
|
(* renderer_query_drm_modifiers) (CoglRenderer *renderer,
|
||||||
|
CoglPixelFormat format,
|
||||||
|
CoglDrmModifierFilter filter,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
CoglDmaBufHandle *
|
CoglDmaBufHandle *
|
||||||
(*renderer_create_dma_buf) (CoglRenderer *renderer,
|
(*renderer_create_dma_buf) (CoglRenderer *renderer,
|
||||||
CoglPixelFormat format,
|
CoglPixelFormat format,
|
||||||
|
@ -954,6 +954,34 @@ meta_renderer_native_queue_mode_set_update (MetaRendererNative *renderer_native,
|
|||||||
meta_kms_update_free (new_kms_update);
|
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
|
static void
|
||||||
close_fds (int *fds,
|
close_fds (int *fds,
|
||||||
int n_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_connect = meta_renderer_native_connect;
|
||||||
vtable.renderer_disconnect = meta_renderer_native_disconnect;
|
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_create_dma_buf = meta_renderer_native_create_dma_buf;
|
||||||
vtable.renderer_is_dma_buf_supported =
|
vtable.renderer_is_dma_buf_supported =
|
||||||
meta_renderer_native_is_dma_buf_supported;
|
meta_renderer_native_is_dma_buf_supported;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user