Mesa (main): zink: add support for string-markers

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat May 29 09:12:16 UTC 2021


Module: Mesa
Branch: main
Commit: 1dfad514ea31522eaa04afe6873a72f0c6fcb5ab
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1dfad514ea31522eaa04afe6873a72f0c6fcb5ab

Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date:   Wed May 26 14:03:58 2021 +0200

zink: add support for string-markers

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11004>

---

 src/gallium/drivers/zink/zink_context.c | 28 ++++++++++++++++++++++++++++
 src/gallium/drivers/zink/zink_screen.c  |  4 ++++
 src/gallium/drivers/zink/zink_screen.h  |  1 +
 3 files changed, 33 insertions(+)

diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index a2ebf7c1054..70f297c51ba 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -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);
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index ab1c4e590b0..385a9551f89 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -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,
diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h
index 52b65a2d3b7..802fc9a94e2 100644
--- a/src/gallium/drivers/zink/zink_screen.h
+++ b/src/gallium/drivers/zink/zink_screen.h
@@ -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;



More information about the mesa-commit mailing list