Skip to content

Commit 49fe73a

Browse files
committed
onscreen/native: Add API to check whether buffer is scanout compatible
While this is fairly incomplete, as to check things fully we need to use TEST_ONLY in atomic to try out a complete assignment on the device, but this works well enough for legacy non-modifier cases. Original Mutter commit: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/798/diffs?commit_id=b9fe9c736a3b7ef298bda5f785938275805a47f0
1 parent 2f387ba commit 49fe73a

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

src/backends/native/meta-renderer-native.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2260,6 +2260,48 @@ meta_renderer_native_create_dma_buf (CoglRenderer *cogl_renderer,
22602260
return NULL;
22612261
}
22622262

2263+
gboolean
2264+
meta_onscreen_native_is_buffer_scanout_compatible (CoglOnscreen *onscreen,
2265+
uint32_t drm_format,
2266+
uint64_t drm_modifier,
2267+
uint32_t stride)
2268+
{
2269+
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
2270+
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
2271+
MetaDrmBuffer *fb;
2272+
struct gbm_bo *gbm_bo;
2273+
2274+
if (onscreen_native->crtc->config->transform != META_MONITOR_TRANSFORM_NORMAL)
2275+
return FALSE;
2276+
2277+
if (onscreen_native->secondary_gpu_state)
2278+
return FALSE;
2279+
2280+
if (!onscreen_native->gbm.surface)
2281+
return FALSE;
2282+
2283+
fb = onscreen_native->gbm.current_fb ? onscreen_native->gbm.current_fb
2284+
: onscreen_native->gbm.next_fb;
2285+
if (!fb)
2286+
return FALSE;
2287+
2288+
if (!META_IS_DRM_BUFFER_GBM (fb))
2289+
return FALSE;
2290+
2291+
gbm_bo = meta_drm_buffer_gbm_get_bo (META_DRM_BUFFER_GBM (fb));
2292+
2293+
if (gbm_bo_get_format (gbm_bo) != drm_format)
2294+
return FALSE;
2295+
2296+
if (gbm_bo_get_modifier (gbm_bo) != drm_modifier)
2297+
return FALSE;
2298+
2299+
if (gbm_bo_get_stride (gbm_bo) != stride)
2300+
return FALSE;
2301+
2302+
return TRUE;
2303+
}
2304+
22632305
static void
22642306
meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen,
22652307
CoglScanout *scanout)

src/backends/native/meta-renderer-native.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,9 @@ int64_t meta_renderer_native_get_frame_counter (MetaRendererNative *renderer_nat
5959

6060
void meta_renderer_native_reset_modes (MetaRendererNative *renderer_native);
6161

62+
gboolean meta_onscreen_native_is_buffer_scanout_compatible (CoglOnscreen *onscreen,
63+
uint32_t drm_format,
64+
uint64_t drm_modifier,
65+
uint32_t stride);
66+
6267
#endif /* META_RENDERER_NATIVE_H */

0 commit comments

Comments
 (0)