zink: add support for string-markers
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11004>
This commit is contained in:
committed by
Marge Bot
parent
6c03a85094
commit
1dfad514ea
@@ -3018,6 +3018,31 @@ zink_context_is_resource_busy(struct pipe_screen *pscreen, struct pipe_resource
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
zink_emit_string_marker(struct pipe_context *pctx,
|
||||
const char *string, int len)
|
||||
{
|
||||
struct zink_screen *screen = zink_screen(pctx->screen);
|
||||
struct zink_batch *batch = &zink_context(pctx)->batch;
|
||||
|
||||
/* make sure string is nul-terminated */
|
||||
char buf[512], *temp = NULL;
|
||||
if (len < ARRAY_SIZE(buf)) {
|
||||
memcpy(buf, string, len);
|
||||
buf[len] = '\0';
|
||||
string = buf;
|
||||
} else
|
||||
string = temp = strndup(string, len);
|
||||
|
||||
VkDebugUtilsLabelEXT label = {
|
||||
VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, NULL,
|
||||
string,
|
||||
{ 0 }
|
||||
};
|
||||
screen->vk_CmdInsertDebugUtilsLabelEXT(batch->state->cmdbuf, &label);
|
||||
free(temp);
|
||||
}
|
||||
|
||||
struct pipe_context *
|
||||
zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
|
||||
{
|
||||
@@ -3086,6 +3111,9 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
|
||||
|
||||
ctx->base.set_stream_output_targets = zink_set_stream_output_targets;
|
||||
ctx->base.flush_resource = zink_flush_resource;
|
||||
|
||||
ctx->base.emit_string_marker = zink_emit_string_marker;
|
||||
|
||||
zink_context_surface_init(&ctx->base);
|
||||
zink_context_resource_init(&ctx->base);
|
||||
zink_context_query_init(&ctx->base);
|
||||
|
||||
@@ -552,6 +552,9 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_POST_DEPTH_COVERAGE:
|
||||
return screen->info.have_EXT_post_depth_coverage;
|
||||
|
||||
case PIPE_CAP_STRING_MARKER:
|
||||
return screen->instance_info.have_EXT_debug_utils;
|
||||
|
||||
default:
|
||||
return u_pipe_screen_get_param_defaults(pscreen, param);
|
||||
}
|
||||
@@ -1308,6 +1311,7 @@ create_debug(struct zink_screen *screen)
|
||||
{
|
||||
GET_PROC_ADDR_INSTANCE(CreateDebugUtilsMessengerEXT);
|
||||
GET_PROC_ADDR_INSTANCE(DestroyDebugUtilsMessengerEXT);
|
||||
GET_PROC_ADDR_INSTANCE(CmdInsertDebugUtilsLabelEXT);
|
||||
|
||||
VkDebugUtilsMessengerCreateInfoEXT vkDebugUtilsMessengerCreateInfoEXT = {
|
||||
VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
|
||||
|
||||
@@ -171,6 +171,7 @@ struct zink_screen {
|
||||
|
||||
PFN_vkCreateDebugUtilsMessengerEXT vk_CreateDebugUtilsMessengerEXT;
|
||||
PFN_vkDestroyDebugUtilsMessengerEXT vk_DestroyDebugUtilsMessengerEXT;
|
||||
PFN_vkCmdInsertDebugUtilsLabelEXT vk_CmdInsertDebugUtilsLabelEXT;
|
||||
|
||||
#if defined(MVK_VERSION)
|
||||
PFN_vkGetMoltenVKConfigurationMVK vk_GetMoltenVKConfigurationMVK;
|
||||
|
||||
Reference in New Issue
Block a user