gallium: add PIPE_CAP_PERFORMANCE_MONITOR for GL_AMD_performance_monitor

Use a CAP instead of guessing it. radeonsi won't expose it.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26262>
This commit is contained in:
Marek Olšák
2023-11-17 16:01:46 -05:00
committed by Marge Bot
parent 6073a149b9
commit 7a7285bc69
5 changed files with 8 additions and 15 deletions

View File

@@ -647,6 +647,8 @@ The integer capabilities:
* ``PIPE_CAP_ASTC_VOID_EXTENTS_NEED_DENORM_FLUSH`` : True if the driver/hardware needs denormalized values in ASTC void extent blocks flushed to zero.
* ``PIPE_CAP_VALIDATE_ALL_DIRTY_STATES`` : Whether state validation must also validate the state changes for resources types used in the previous shader but not in the current shader.
* ``PIPE_CAP_HAS_CONST_BW``: Whether the driver only supports non-data-dependent layouts (ie. not bandwidth compressed formats like AFBC, UBWC, etc), or supports ``PIPE_BIND_CONST_BW`` to disable data-dependent layouts on requested resources.
* ``PIPE_CAP_PERFORMANCE_MONITOR``: Whether GL_AMD_performance_monitor should be exposed.
.. _pipe_capf:

View File

@@ -550,6 +550,10 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
case PIPE_CAP_HAS_CONST_BW:
return 0;
case PIPE_CAP_PERFORMANCE_MONITOR:
return pscreen->get_driver_query_info && pscreen->get_driver_query_group_info &&
pscreen->get_driver_query_group_info(pscreen, 0, NULL) != 0;
default:
unreachable("bad PIPE_CAP_*");
}

View File

@@ -934,6 +934,7 @@ enum pipe_cap
PIPE_CAP_ASTC_VOID_EXTENTS_NEED_DENORM_FLUSH,
PIPE_CAP_VALIDATE_ALL_DIRTY_STATES,
PIPE_CAP_HAS_CONST_BW,
PIPE_CAP_PERFORMANCE_MONITOR,
PIPE_CAP_LAST,
/* XXX do not add caps after PIPE_CAP_LAST! */
};

View File

@@ -431,17 +431,6 @@ st_init_driver_flags(struct st_context *st)
f->NewAtomicBuffer |= ST_NEW_CONSTANTS;
}
static bool
st_have_perfmon(struct st_context *st)
{
struct pipe_screen *screen = st->screen;
if (!screen->get_driver_query_info || !screen->get_driver_query_group_info)
return false;
return screen->get_driver_query_group_info(screen, 0, NULL) != 0;
}
static bool
st_have_perfquery(struct st_context *ctx)
{
@@ -663,10 +652,6 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
st_init_extensions(screen, &ctx->Const,
&ctx->Extensions, &st->options, ctx->API);
if (st_have_perfmon(st)) {
ctx->Extensions.AMD_performance_monitor = GL_TRUE;
}
if (st_have_perfquery(st)) {
ctx->Extensions.INTEL_performance_query = GL_TRUE;
}

View File

@@ -846,6 +846,7 @@ void st_init_extensions(struct pipe_screen *screen,
{ o(AMD_depth_clamp_separate), PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE },
{ o(AMD_framebuffer_multisample_advanced), PIPE_CAP_FRAMEBUFFER_MSAA_CONSTRAINTS },
{ o(AMD_performance_monitor), PIPE_CAP_PERFORMANCE_MONITOR },
{ o(AMD_pinned_memory), PIPE_CAP_RESOURCE_FROM_USER_MEMORY },
{ o(ATI_meminfo), PIPE_CAP_QUERY_MEMORY_INFO },
{ o(AMD_seamless_cubemap_per_texture), PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE },