mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
radv: add support for user event markers with SQTT
This enables VK_EXT_debug_marker only if SQTT is enabled, otherwise it's just useless. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9099>
This commit is contained in:
parent
7c63be7ffc
commit
7a377708fd
2 changed files with 102 additions and 28 deletions
|
|
@ -105,6 +105,37 @@ radv_write_event_with_dims_marker(struct radv_cmd_buffer *cmd_buffer,
|
|||
radv_emit_thread_trace_userdata(cmd_buffer->device, cs, &marker, sizeof(marker) / 4);
|
||||
}
|
||||
|
||||
static void
|
||||
radv_write_user_event_marker(struct radv_cmd_buffer *cmd_buffer,
|
||||
enum rgp_sqtt_marker_user_event_type type,
|
||||
const char *str)
|
||||
{
|
||||
struct radeon_cmdbuf *cs = cmd_buffer->cs;
|
||||
|
||||
if (type == UserEventPop) {
|
||||
assert (str == NULL);
|
||||
struct rgp_sqtt_marker_user_event marker = { 0 };
|
||||
marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_USER_EVENT;
|
||||
marker.data_type = type;
|
||||
|
||||
radv_emit_thread_trace_userdata(cmd_buffer->device, cs, &marker, sizeof(marker) / 4);
|
||||
} else {
|
||||
assert (str != NULL);
|
||||
unsigned len = strlen(str);
|
||||
struct rgp_sqtt_marker_user_event_with_length marker = { 0 };
|
||||
marker.user_event.identifier = RGP_SQTT_MARKER_IDENTIFIER_USER_EVENT;
|
||||
marker.user_event.data_type = type;
|
||||
marker.length = align(len, 4);
|
||||
|
||||
uint8_t *buffer = alloca(sizeof(marker) + marker.length);
|
||||
memset(buffer, 0, sizeof(marker) + marker.length);
|
||||
memcpy(buffer, &marker, sizeof(marker));
|
||||
memcpy(buffer + sizeof(marker), str, len);
|
||||
|
||||
radv_emit_thread_trace_userdata(cmd_buffer->device, cs, buffer, sizeof(marker) / 4 + marker.length / 4);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
radv_describe_begin_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
|
|
@ -864,4 +895,46 @@ void sqtt_CmdSetStencilReference(
|
|||
API_MARKER(SetStencilReference, commandBuffer, faceMask, reference);
|
||||
}
|
||||
|
||||
/* VK_EXT_debug_marker */
|
||||
void sqtt_CmdDebugMarkerBeginEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
|
||||
{
|
||||
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
radv_write_user_event_marker(cmd_buffer, UserEventPush,
|
||||
pMarkerInfo->pMarkerName);
|
||||
}
|
||||
|
||||
void sqtt_CmdDebugMarkerEndEXT(
|
||||
VkCommandBuffer commandBuffer)
|
||||
{
|
||||
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
radv_write_user_event_marker(cmd_buffer, UserEventPop, NULL);
|
||||
}
|
||||
|
||||
void sqtt_CmdDebugMarkerInsertEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
|
||||
{
|
||||
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
radv_write_user_event_marker(cmd_buffer, UserEventTrigger,
|
||||
pMarkerInfo->pMarkerName);
|
||||
}
|
||||
|
||||
VkResult sqtt_DebugMarkerSetObjectNameEXT(
|
||||
VkDevice device,
|
||||
const VkDebugMarkerObjectNameInfoEXT* pNameInfo)
|
||||
{
|
||||
/* no-op */
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VkResult sqtt_DebugMarkerSetObjectTagEXT(
|
||||
VkDevice device,
|
||||
const VkDebugMarkerObjectTagInfoEXT* pTagInfo)
|
||||
{
|
||||
/* no-op */
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
#undef API_MARKER
|
||||
|
|
|
|||
|
|
@ -288,6 +288,34 @@ radv_get_compiler_string(struct radv_physical_device *pdevice)
|
|||
return "LLVM " MESA_LLVM_VERSION_STRING;
|
||||
}
|
||||
|
||||
int
|
||||
radv_get_int_debug_option(const char *name, int default_value)
|
||||
{
|
||||
const char *str;
|
||||
int result;
|
||||
|
||||
str = getenv(name);
|
||||
if (!str) {
|
||||
result = default_value;
|
||||
} else {
|
||||
char *endptr;
|
||||
|
||||
result = strtol(str, &endptr, 0);
|
||||
if (str == endptr) {
|
||||
/* No digits founs. */
|
||||
result = default_value;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static bool radv_thread_trace_enabled()
|
||||
{
|
||||
return radv_get_int_debug_option("RADV_THREAD_TRACE", -1) >= 0 ||
|
||||
getenv("RADV_THREAD_TRACE_TRIGGER");
|
||||
}
|
||||
|
||||
#if defined(VK_USE_PLATFORM_WAYLAND_KHR) || \
|
||||
defined(VK_USE_PLATFORM_XCB_KHR) || \
|
||||
defined(VK_USE_PLATFORM_XLIB_KHR) || \
|
||||
|
|
@ -407,6 +435,7 @@ radv_physical_device_get_supported_extensions(const struct radv_physical_device
|
|||
.EXT_conditional_rendering = true,
|
||||
.EXT_conservative_rasterization = device->rad_info.chip_class >= GFX9,
|
||||
.EXT_custom_border_color = true,
|
||||
.EXT_debug_marker = radv_thread_trace_enabled(),
|
||||
.EXT_depth_clip_enable = true,
|
||||
.EXT_depth_range_unrestricted = true,
|
||||
.EXT_descriptor_indexing = true,
|
||||
|
|
@ -2636,34 +2665,6 @@ radv_device_init_gs_info(struct radv_device *device)
|
|||
device->physical_device->rad_info.family);
|
||||
}
|
||||
|
||||
int
|
||||
radv_get_int_debug_option(const char *name, int default_value)
|
||||
{
|
||||
const char *str;
|
||||
int result;
|
||||
|
||||
str = getenv(name);
|
||||
if (!str) {
|
||||
result = default_value;
|
||||
} else {
|
||||
char *endptr;
|
||||
|
||||
result = strtol(str, &endptr, 0);
|
||||
if (str == endptr) {
|
||||
/* No digits founs. */
|
||||
result = default_value;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static bool radv_thread_trace_enabled()
|
||||
{
|
||||
return radv_get_int_debug_option("RADV_THREAD_TRACE", -1) >= 0 ||
|
||||
getenv("RADV_THREAD_TRACE_TRIGGER");
|
||||
}
|
||||
|
||||
static VkResult
|
||||
check_physical_device_features(VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceFeatures *features)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue