mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
cogl: Add new option COGL_DEBUG=stencilling to disable optimizations
This means stencilling every clip stack entry even when stencilling could be skipped. This visibly reveals some bugs in the stencilling logic. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1873>
This commit is contained in:
parent
f390340da5
commit
c3d64cc05b
@ -189,3 +189,9 @@ OPT (TEXTURES,
|
|||||||
"textures",
|
"textures",
|
||||||
N_("Debug texture management"),
|
N_("Debug texture management"),
|
||||||
N_("Logs information about texture management"))
|
N_("Logs information about texture management"))
|
||||||
|
OPT (STENCILLING,
|
||||||
|
N_("Root Cause"),
|
||||||
|
"stencilling",
|
||||||
|
N_("Stencil every clip entry"),
|
||||||
|
N_("Disables optimizations that usually avoid stencilling when it's not "
|
||||||
|
"needed. This exercises more of the stencilling logic than usual."))
|
||||||
|
@ -85,6 +85,7 @@ static const GDebugKey cogl_behavioural_debug_keys[] = {
|
|||||||
{ "disable-fast-read-pixel", COGL_DEBUG_DISABLE_FAST_READ_PIXEL},
|
{ "disable-fast-read-pixel", COGL_DEBUG_DISABLE_FAST_READ_PIXEL},
|
||||||
{ "sync-primitive", COGL_DEBUG_SYNC_PRIMITIVE },
|
{ "sync-primitive", COGL_DEBUG_SYNC_PRIMITIVE },
|
||||||
{ "sync-frame", COGL_DEBUG_SYNC_FRAME},
|
{ "sync-frame", COGL_DEBUG_SYNC_FRAME},
|
||||||
|
{ "stencilling", COGL_DEBUG_STENCILLING },
|
||||||
};
|
};
|
||||||
static const int n_cogl_behavioural_debug_keys =
|
static const int n_cogl_behavioural_debug_keys =
|
||||||
G_N_ELEMENTS (cogl_behavioural_debug_keys);
|
G_N_ELEMENTS (cogl_behavioural_debug_keys);
|
||||||
|
@ -75,6 +75,7 @@ typedef enum
|
|||||||
COGL_DEBUG_SYNC_PRIMITIVE,
|
COGL_DEBUG_SYNC_PRIMITIVE,
|
||||||
COGL_DEBUG_SYNC_FRAME,
|
COGL_DEBUG_SYNC_FRAME,
|
||||||
COGL_DEBUG_TEXTURES,
|
COGL_DEBUG_TEXTURES,
|
||||||
|
COGL_DEBUG_STENCILLING,
|
||||||
|
|
||||||
COGL_DEBUG_N_FLAGS
|
COGL_DEBUG_N_FLAGS
|
||||||
} CoglDebugFlags;
|
} CoglDebugFlags;
|
||||||
|
@ -500,7 +500,8 @@ _cogl_clip_stack_gl_flush (CoglClipStack *stack,
|
|||||||
|
|
||||||
/* We don't need to do anything extra if the clip for this
|
/* We don't need to do anything extra if the clip for this
|
||||||
rectangle was entirely described by its scissor bounds */
|
rectangle was entirely described by its scissor bounds */
|
||||||
if (!rect->can_be_scissor)
|
if (!rect->can_be_scissor ||
|
||||||
|
G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_STENCILLING)))
|
||||||
{
|
{
|
||||||
COGL_NOTE (CLIPPING, "Adding stencil clip for rectangle");
|
COGL_NOTE (CLIPPING, "Adding stencil clip for rectangle");
|
||||||
|
|
||||||
@ -522,7 +523,8 @@ _cogl_clip_stack_gl_flush (CoglClipStack *stack,
|
|||||||
/* If nrectangles <= 1, it can be fully represented with the
|
/* If nrectangles <= 1, it can be fully represented with the
|
||||||
* scissor clip.
|
* scissor clip.
|
||||||
*/
|
*/
|
||||||
if (cairo_region_num_rectangles (region->region) > 1)
|
if (cairo_region_num_rectangles (region->region) > 1 ||
|
||||||
|
G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_STENCILLING)))
|
||||||
{
|
{
|
||||||
COGL_NOTE (CLIPPING, "Adding stencil clip for region");
|
COGL_NOTE (CLIPPING, "Adding stencil clip for region");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user