1
0
Fork 0

cogl: Move has_feature to Context namespace

That is where it belongs anyways..

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3895>
This commit is contained in:
Bilal Elmoussaoui 2024-07-22 10:58:51 +02:00
parent 21bc7432dc
commit 6da869d575
23 changed files with 53 additions and 51 deletions

View file

@ -766,7 +766,7 @@ driver_can_convert (CoglContext *ctx,
/* Same for red-green textures. If red-green textures aren't
* supported then the internal format should never be RG_88 but we
* should still be able to convert from an RG source image */
if (!cogl_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_RG) &&
if (!cogl_context_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_RG) &&
src_format == COGL_PIXEL_FORMAT_RG_88)
return FALSE;

View file

@ -158,7 +158,7 @@ _cogl_blit_framebuffer_begin (CoglBlitData *data)
supported. */
if ((_cogl_texture_get_format (data->src_tex) & COGL_PREMULT_BIT) !=
(_cogl_texture_get_format (data->dst_tex) & COGL_PREMULT_BIT) ||
!cogl_has_feature (ctx, COGL_FEATURE_ID_BLIT_FRAMEBUFFER))
!cogl_context_has_feature (ctx, COGL_FEATURE_ID_BLIT_FRAMEBUFFER))
return FALSE;
dst_offscreen = _cogl_offscreen_new_with_texture_full

View file

@ -509,8 +509,8 @@ cogl_context_timestamp_query_get_time_ns (CoglContext *context,
int64_t
cogl_context_get_gpu_time_ns (CoglContext *context)
{
g_return_val_if_fail (cogl_has_feature (context,
COGL_FEATURE_ID_TIMESTAMP_QUERY),
g_return_val_if_fail (cogl_context_has_feature (context,
COGL_FEATURE_ID_TIMESTAMP_QUERY),
0);
return context->driver_vtable->get_gpu_time_ns (context);
@ -524,6 +524,13 @@ cogl_context_has_winsys_feature (CoglContext *context,
return COGL_FLAGS_GET (context->winsys_features, feature);
}
gboolean
cogl_context_has_feature (CoglContext *context,
CoglFeatureID feature)
{
return COGL_FLAGS_GET (context->features, feature);
}
void
cogl_context_flush (CoglContext *context)
{

View file

@ -178,7 +178,7 @@ cogl_context_get_renderer (CoglContext *context);
*
* All the capabilities that can vary between different GPUs supported
* by Cogl. Applications that depend on any of these features should explicitly
* check for them using cogl_has_feature() or cogl_has_features().
* check for them using [method@Cogl.Context.has_feature].
*/
typedef enum _CoglFeatureID
{
@ -202,7 +202,7 @@ typedef enum _CoglFeatureID
/**
* cogl_has_feature:
* cogl_context_has_feature:
* @context: A #CoglContext pointer
* @feature: A #CoglFeatureID
*
@ -217,7 +217,8 @@ typedef enum _CoglFeatureID
* not.
*/
COGL_EXPORT gboolean
cogl_has_feature (CoglContext *context, CoglFeatureID feature);
cogl_context_has_feature (CoglContext *context,
CoglFeatureID feature);
/**
* CoglGraphicsResetStatus:

View file

@ -1431,7 +1431,7 @@ cogl_blit_framebuffer (CoglFramebuffer *framebuffer,
int src_x1, src_y1, src_x2, src_y2;
int dst_x1, dst_y1, dst_x2, dst_y2;
if (!cogl_has_feature (ctx, COGL_FEATURE_ID_BLIT_FRAMEBUFFER))
if (!cogl_context_has_feature (ctx, COGL_FEATURE_ID_BLIT_FRAMEBUFFER))
{
g_set_error_literal (error, COGL_SYSTEM_ERROR,
COGL_SYSTEM_ERROR_UNSUPPORTED,
@ -2393,8 +2393,8 @@ cogl_framebuffer_create_timestamp_query (CoglFramebuffer *framebuffer)
cogl_framebuffer_get_instance_private (framebuffer);
const CoglDriverVtable *driver_vtable = priv->context->driver_vtable;
g_return_val_if_fail (cogl_has_feature (priv->context,
COGL_FEATURE_ID_TIMESTAMP_QUERY),
g_return_val_if_fail (cogl_context_has_feature (priv->context,
COGL_FEATURE_ID_TIMESTAMP_QUERY),
NULL);
/* The timestamp query completes upon completion of all previously submitted

View file

@ -639,7 +639,7 @@ _cogl_journal_flush_vbo_offsets_and_entries (CoglJournalEntry *batch_start,
state->current_vertex = 0;
if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_JOURNAL)) &&
cogl_has_feature (ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_READ))
cogl_context_has_feature (ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_READ))
{
uint8_t *verts;

View file

@ -1104,7 +1104,7 @@ cogl_texture_allocate (CoglTexture *texture,
return TRUE;
if (texture->components == COGL_TEXTURE_COMPONENTS_RG &&
!cogl_has_feature (texture->context, COGL_FEATURE_ID_TEXTURE_RG))
!cogl_context_has_feature (texture->context, COGL_FEATURE_ID_TEXTURE_RG))
g_set_error (error,
COGL_TEXTURE_ERROR,
COGL_TEXTURE_ERROR_FORMAT,

View file

@ -165,7 +165,7 @@ cogl_blend_string_error_quark (void);
* variety of reasons. For example:
*
* - You've tried to use a feature that is not advertised by
* [func@Cogl.has_feature].
* [method@Cogl.Context.has_feature].
* - The GPU can not handle the configuration you have requested.
* An example might be if you try to use too many texture
* layers in a single #CoglPipeline

View file

@ -66,12 +66,6 @@ _cogl_check_extension (const char *name, char * const *ext)
return FALSE;
}
gboolean
cogl_has_feature (CoglContext *ctx, CoglFeatureID feature)
{
return COGL_FLAGS_GET (ctx->features, feature);
}
uint32_t
_cogl_driver_error_quark (void)
{

View file

@ -207,9 +207,9 @@ _cogl_buffer_gl_map_range (CoglBuffer *buffer,
CoglContext *ctx = buffer->context;
if (((access & COGL_BUFFER_ACCESS_READ) &&
!cogl_has_feature (ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_READ)) ||
!cogl_context_has_feature (ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_READ)) ||
((access & COGL_BUFFER_ACCESS_WRITE) &&
!cogl_has_feature (ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_WRITE)))
!cogl_context_has_feature (ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_WRITE)))
{
g_set_error_literal (error,
COGL_SYSTEM_ERROR,

View file

@ -215,7 +215,7 @@ _cogl_glsl_shader_set_source_with_boilerplate (CoglContext *ctx,
strings[count] = version_string;
lengths[count++] = -1;
if (cogl_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_EGL_IMAGE_EXTERNAL))
if (cogl_context_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_EGL_IMAGE_EXTERNAL))
{
static const char image_external_extension[] =
"#extension GL_OES_EGL_image_external : require\n";

View file

@ -394,8 +394,8 @@ cogl_texture_2d_new_from_egl_image_external (CoglContext *ctx,
COGL_RENDERER_CONSTRAINT_USES_EGL,
NULL);
g_return_val_if_fail (cogl_has_feature (ctx,
COGL_FEATURE_ID_TEXTURE_EGL_IMAGE_EXTERNAL),
g_return_val_if_fail (cogl_context_has_feature (ctx,
COGL_FEATURE_ID_TEXTURE_EGL_IMAGE_EXTERNAL),
NULL);
loader = _cogl_texture_create_loader ();

View file

@ -254,7 +254,7 @@ _cogl_driver_gl_flush_framebuffer_state (CoglContext *ctx,
{
/* NB: Currently we only take advantage of binding separate
* read/write buffers for framebuffer blit purposes. */
g_return_if_fail (cogl_has_feature
g_return_if_fail (cogl_context_has_feature
(ctx, COGL_FEATURE_ID_BLIT_FRAMEBUFFER));
cogl_gl_framebuffer_bind (draw_gl_framebuffer, GL_DRAW_FRAMEBUFFER);
@ -516,8 +516,8 @@ cogl_gl_create_timestamp_query (CoglContext *context)
{
CoglTimestampQuery *query;
g_return_val_if_fail (cogl_has_feature (context,
COGL_FEATURE_ID_TIMESTAMP_QUERY),
g_return_val_if_fail (cogl_context_has_feature (context,
COGL_FEATURE_ID_TIMESTAMP_QUERY),
NULL);
query = g_new0 (CoglTimestampQuery, 1);
@ -563,8 +563,8 @@ cogl_gl_get_gpu_time_ns (CoglContext *context)
{
int64_t gpu_time_ns;
g_return_val_if_fail (cogl_has_feature (context,
COGL_FEATURE_ID_TIMESTAMP_QUERY),
g_return_val_if_fail (cogl_context_has_feature (context,
COGL_FEATURE_ID_TIMESTAMP_QUERY),
0);
GE (context, glGetInteger64v (GL_TIMESTAMP, &gpu_time_ns));

View file

@ -163,7 +163,7 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
break;
case COGL_PIXEL_FORMAT_RG_88:
if (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_RG))
if (cogl_context_has_feature (context, COGL_FEATURE_ID_TEXTURE_RG))
{
glintformat = GL_RG8_EXT;
glformat = GL_RG;
@ -196,7 +196,7 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
break;
case COGL_PIXEL_FORMAT_R_16:
if (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_NORM16))
if (cogl_context_has_feature (context, COGL_FEATURE_ID_TEXTURE_NORM16))
{
glintformat = GL_R16;
glformat = GL_RED;
@ -210,10 +210,10 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
break;
case COGL_PIXEL_FORMAT_RG_1616:
if (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_NORM16))
if (cogl_context_has_feature (context, COGL_FEATURE_ID_TEXTURE_NORM16))
{
/* NORM16 implies RG for GLES */
g_assert (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_RG));
g_assert (cogl_context_has_feature (context, COGL_FEATURE_ID_TEXTURE_RG));
glintformat = GL_RG16;
glformat = GL_RG;
gltype = GL_UNSIGNED_SHORT;
@ -227,7 +227,7 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
case COGL_PIXEL_FORMAT_RGBA_16161616:
case COGL_PIXEL_FORMAT_RGBA_16161616_PRE:
if (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_NORM16))
if (cogl_context_has_feature (context, COGL_FEATURE_ID_TEXTURE_NORM16))
{
glintformat = GL_RGBA16;
glformat = GL_RGBA;
@ -318,7 +318,7 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
case COGL_PIXEL_FORMAT_ABGR_2101010:
case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
if (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_RGBA1010102))
if (cogl_context_has_feature (context, COGL_FEATURE_ID_TEXTURE_RGBA1010102))
{
glintformat = GL_RGB10_A2;
glformat = GL_RGBA;
@ -352,7 +352,7 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
case COGL_PIXEL_FORMAT_RGBX_FP_16161616:
case COGL_PIXEL_FORMAT_RGBA_FP_16161616:
case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
if (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
if (cogl_context_has_feature (context, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
{
glintformat = GL_RGBA16F;
glformat = GL_RGBA;
@ -384,7 +384,7 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
case COGL_PIXEL_FORMAT_RGBA_FP_32323232:
case COGL_PIXEL_FORMAT_RGBA_FP_32323232_PRE:
if (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
if (cogl_context_has_feature (context, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
{
glintformat = GL_RGBA32F;
glformat = GL_RGBA;

View file

@ -465,7 +465,7 @@ _cogl_texture_driver_upload_supported (CoglContext *ctx,
case COGL_PIXEL_FORMAT_ARGB_2101010:
case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
if (cogl_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_RGBA1010102))
if (cogl_context_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_RGBA1010102))
return TRUE;
else
return FALSE;
@ -502,7 +502,7 @@ _cogl_texture_driver_upload_supported (CoglContext *ctx,
case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
case COGL_PIXEL_FORMAT_RGBA_FP_32323232:
case COGL_PIXEL_FORMAT_RGBA_FP_32323232_PRE:
if (cogl_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
if (cogl_context_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
return TRUE;
else
return FALSE;
@ -510,7 +510,7 @@ _cogl_texture_driver_upload_supported (CoglContext *ctx,
case COGL_PIXEL_FORMAT_RG_1616:
case COGL_PIXEL_FORMAT_RGBA_16161616:
case COGL_PIXEL_FORMAT_RGBA_16161616_PRE:
if (cogl_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_NORM16))
if (cogl_context_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_NORM16))
return TRUE;
else
return FALSE;

View file

@ -288,7 +288,7 @@ cogl_onscreen_egl_maybe_create_timestamp_query (CoglOnscreen *onscreen,
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
if (!cogl_has_feature (context, COGL_FEATURE_ID_TIMESTAMP_QUERY))
if (!cogl_context_has_feature (context, COGL_FEATURE_ID_TIMESTAMP_QUERY))
return;
info->gpu_time_before_buffer_swap_ns =

View file

@ -501,7 +501,7 @@ set_color_space_and_hdr_metadata (MetaMonitorManager *manager,
CoglContext *cogl_context = clutter_backend_get_cogl_context (clutter_backend);
if (enable &&
!cogl_has_feature (cogl_context, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
!cogl_context_has_feature (cogl_context, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
{
g_warning ("Tried to enable HDR without half float rendering support, ignoring");
enable = FALSE;

View file

@ -1634,7 +1634,7 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen,
frame_info->cpu_time_before_buffer_swap_us = g_get_monotonic_time ();
if (cogl_has_feature (cogl_context, COGL_FEATURE_ID_TIMESTAMP_QUERY))
if (cogl_context_has_feature (cogl_context, COGL_FEATURE_ID_TIMESTAMP_QUERY))
frame_info->has_valid_gpu_rendering_duration = TRUE;
kms_crtc = meta_crtc_kms_get_kms_crtc (META_CRTC_KMS (onscreen_native->crtc));

View file

@ -1373,7 +1373,7 @@ should_force_shadow_fb (MetaRendererNative *renderer_native,
if (meta_renderer_is_hardware_accelerated (renderer))
return FALSE;
if (!cogl_has_feature (cogl_context, COGL_FEATURE_ID_BLIT_FRAMEBUFFER))
if (!cogl_context_has_feature (cogl_context, COGL_FEATURE_ID_BLIT_FRAMEBUFFER))
return FALSE;
return meta_kms_device_prefers_shadow_buffer (kms_device);

View file

@ -34,7 +34,7 @@ test_map_buffer_range (void)
CoglAttribute *tex_coord_attribute;
CoglPrimitive *primitive;
if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_WRITE))
if (!cogl_context_has_feature (test_ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_WRITE))
{
g_test_skip ("Missing map buffer for write capability");
return;

View file

@ -156,7 +156,7 @@ test_offscreen_texture_formats_store_fp16 (void)
};
int i;
if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
if (!cogl_context_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
{
g_test_skip ("Driver does not support fp formats");
return;
@ -301,7 +301,7 @@ test_offscreen_texture_formats_store_rgb10 (void)
};
int i;
if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_RGBA1010102))
if (!cogl_context_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_RGBA1010102))
{
g_test_skip ("Driver does not support 10bpc formats");
return;
@ -540,7 +540,7 @@ test_offscreen_texture_formats_paint_fp16 (void)
};
int i;
if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
if (!cogl_context_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_HALF_FLOAT))
{
g_test_skip ("Driver does not support fp formats");
return;
@ -670,7 +670,7 @@ test_offscreen_texture_formats_paint_rgb10 (void)
};
int i;
if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_RGBA1010102))
if (!cogl_context_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_RGBA1010102))
{
g_test_skip ("Driver does not support 10bpc formats");
return;

View file

@ -36,7 +36,7 @@ test_texture_rg (void)
int fb_width, fb_height;
int x, y;
if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_RG))
if (!cogl_context_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_RG))
{
g_test_skip ("Missing TEXTURE_RG feature");
return;

View file

@ -465,7 +465,7 @@ meta_wayland_drm_syncobj_manager_new (MetaWaylandCompositor *compositor,
g_assert (backend && egl && clutter_backend && cogl_context && egl_display);
if (!cogl_has_feature (cogl_context, COGL_FEATURE_ID_SYNC_FD))
if (!cogl_context_has_feature (cogl_context, COGL_FEATURE_ID_SYNC_FD))
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
"Missing 'EGL_ANDROID_native_fence_sync'");