2 * Copyright © 2020 Valve Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24 #include "radv_private.h"
27 * Identifiers for RGP SQ thread-tracing markers (Table 1)
29 enum rgp_sqtt_marker_identifier
{
30 RGP_SQTT_MARKER_IDENTIFIER_EVENT
= 0x0,
31 RGP_SQTT_MARKER_IDENTIFIER_CB_START
= 0x1,
32 RGP_SQTT_MARKER_IDENTIFIER_CB_END
= 0x2,
33 RGP_SQTT_MARKER_IDENTIFIER_BARRIER_START
= 0x3,
34 RGP_SQTT_MARKER_IDENTIFIER_BARRIER_END
= 0x4,
35 RGP_SQTT_MARKER_IDENTIFIER_USER_EVENT
= 0x5,
36 RGP_SQTT_MARKER_IDENTIFIER_GENERAL_API
= 0x6,
37 RGP_SQTT_MARKER_IDENTIFIER_SYNC
= 0x7,
38 RGP_SQTT_MARKER_IDENTIFIER_PRESENT
= 0x8,
39 RGP_SQTT_MARKER_IDENTIFIER_LAYOUT_TRANSITION
= 0x9,
40 RGP_SQTT_MARKER_IDENTIFIER_RENDER_PASS
= 0xA,
41 RGP_SQTT_MARKER_IDENTIFIER_RESERVED2
= 0xB,
42 RGP_SQTT_MARKER_IDENTIFIER_BIND_PIPELINE
= 0xC,
43 RGP_SQTT_MARKER_IDENTIFIER_RESERVED4
= 0xD,
44 RGP_SQTT_MARKER_IDENTIFIER_RESERVED5
= 0xE,
45 RGP_SQTT_MARKER_IDENTIFIER_RESERVED6
= 0xF
49 * RGP SQ thread-tracing marker for the start of a command buffer. (Table 2)
51 struct rgp_sqtt_marker_cb_start
{
54 uint32_t identifier
: 4;
55 uint32_t ext_dwords
: 3;
62 uint32_t device_id_low
;
66 uint32_t device_id_high
;
75 static_assert(sizeof(struct rgp_sqtt_marker_cb_start
) == 16,
76 "rgp_sqtt_marker_cb_start doesn't match RGP spec");
80 * RGP SQ thread-tracing marker for the end of a command buffer. (Table 3)
82 struct rgp_sqtt_marker_cb_end
{
85 uint32_t identifier
: 4;
86 uint32_t ext_dwords
: 3;
88 uint32_t reserved
: 5;
93 uint32_t device_id_low
;
97 uint32_t device_id_high
;
102 static_assert(sizeof(struct rgp_sqtt_marker_cb_end
) == 12,
103 "rgp_sqtt_marker_cb_end doesn't match RGP spec");
106 * API types used in RGP SQ thread-tracing markers for the "General API"
109 enum rgp_sqtt_marker_general_api_type
{
110 ApiCmdBindPipeline
= 0,
111 ApiCmdBindDescriptorSets
= 1,
112 ApiCmdBindIndexBuffer
= 2,
113 ApiCmdBindVertexBuffers
= 3,
115 ApiCmdDrawIndexed
= 5,
116 ApiCmdDrawIndirect
= 6,
117 ApiCmdDrawIndexedIndirect
= 7,
118 ApiCmdDrawIndirectCountAMD
= 8,
119 ApiCmdDrawIndexedIndirectCountAMD
= 9,
121 ApiCmdDispatchIndirect
= 11,
122 ApiCmdCopyBuffer
= 12,
123 ApiCmdCopyImage
= 13,
124 ApiCmdBlitImage
= 14,
125 ApiCmdCopyBufferToImage
= 15,
126 ApiCmdCopyImageToBuffer
= 16,
127 ApiCmdUpdateBuffer
= 17,
128 ApiCmdFillBuffer
= 18,
129 ApiCmdClearColorImage
= 19,
130 ApiCmdClearDepthStencilImage
= 20,
131 ApiCmdClearAttachments
= 21,
132 ApiCmdResolveImage
= 22,
133 ApiCmdWaitEvents
= 23,
134 ApiCmdPipelineBarrier
= 24,
135 ApiCmdBeginQuery
= 25,
137 ApiCmdResetQueryPool
= 27,
138 ApiCmdWriteTimestamp
= 28,
139 ApiCmdCopyQueryPoolResults
= 29,
140 ApiCmdPushConstants
= 30,
141 ApiCmdBeginRenderPass
= 31,
142 ApiCmdNextSubpass
= 32,
143 ApiCmdEndRenderPass
= 33,
144 ApiCmdExecuteCommands
= 34,
145 ApiCmdSetViewport
= 35,
146 ApiCmdSetScissor
= 36,
147 ApiCmdSetLineWidth
= 37,
148 ApiCmdSetDepthBias
= 38,
149 ApiCmdSetBlendConstants
= 39,
150 ApiCmdSetDepthBounds
= 40,
151 ApiCmdSetStencilCompareMask
= 41,
152 ApiCmdSetStencilWriteMask
= 42,
153 ApiCmdSetStencilReference
= 43,
154 ApiCmdDrawIndirectCount
= 44,
155 ApiCmdDrawIndexedIndirectCount
= 45,
156 ApiInvalid
= 0xffffffff
160 * RGP SQ thread-tracing marker for a "General API" instrumentation packet.
162 struct rgp_sqtt_marker_general_api
{
165 uint32_t identifier
: 4;
166 uint32_t ext_dwords
: 3;
167 uint32_t api_type
: 20;
169 uint32_t reserved
: 4;
175 static_assert(sizeof(struct rgp_sqtt_marker_general_api
) == 4,
176 "rgp_sqtt_marker_general_api doesn't match RGP spec");
179 * API types used in RGP SQ thread-tracing markers (Table 16).
181 enum rgp_sqtt_marker_event_type
{
183 EventCmdDrawIndexed
= 1,
184 EventCmdDrawIndirect
= 2,
185 EventCmdDrawIndexedIndirect
= 3,
186 EventCmdDrawIndirectCountAMD
= 4,
187 EventCmdDrawIndexedIndirectCountAMD
= 5,
188 EventCmdDispatch
= 6,
189 EventCmdDispatchIndirect
= 7,
190 EventCmdCopyBuffer
= 8,
191 EventCmdCopyImage
= 9,
192 EventCmdBlitImage
= 10,
193 EventCmdCopyBufferToImage
= 11,
194 EventCmdCopyImageToBuffer
= 12,
195 EventCmdUpdateBuffer
= 13,
196 EventCmdFillBuffer
= 14,
197 EventCmdClearColorImage
= 15,
198 EventCmdClearDepthStencilImage
= 16,
199 EventCmdClearAttachments
= 17,
200 EventCmdResolveImage
= 18,
201 EventCmdWaitEvents
= 19,
202 EventCmdPipelineBarrier
= 20,
203 EventCmdResetQueryPool
= 21,
204 EventCmdCopyQueryPoolResults
= 22,
205 EventRenderPassColorClear
= 23,
206 EventRenderPassDepthStencilClear
= 24,
207 EventRenderPassResolve
= 25,
208 EventInternalUnknown
= 26,
209 EventCmdDrawIndirectCount
= 27,
210 EventCmdDrawIndexedIndirectCount
= 28,
211 EventInvalid
= 0xffffffff
215 * "Event (Per-draw/dispatch)" RGP SQ thread-tracing marker. (Table 4)
217 struct rgp_sqtt_marker_event
{
220 uint32_t identifier
: 4;
221 uint32_t ext_dwords
: 3;
222 uint32_t api_type
: 24;
223 uint32_t has_thread_dims
: 1;
230 uint32_t vertex_offset_reg_idx
: 4;
231 uint32_t instance_offset_reg_idx
: 4;
232 uint32_t draw_index_reg_idx
: 4;
242 static_assert(sizeof(struct rgp_sqtt_marker_event
) == 12,
243 "rgp_sqtt_marker_event doesn't match RGP spec");
246 * Per-dispatch specific marker where workgroup dims are included.
248 struct rgp_sqtt_marker_event_with_dims
{
249 struct rgp_sqtt_marker_event event
;
255 static_assert(sizeof(struct rgp_sqtt_marker_event_with_dims
) == 24,
256 "rgp_sqtt_marker_event_with_dims doesn't match RGP spec");
259 * "Barrier Start" RGP SQTT instrumentation marker (Table 5)
261 struct rgp_sqtt_marker_barrier_start
{
264 uint32_t identifier
: 4;
265 uint32_t ext_dwords
: 3;
267 uint32_t reserved
: 5;
273 uint32_t driver_reason
: 31;
274 uint32_t internal
: 1;
280 static_assert(sizeof(struct rgp_sqtt_marker_barrier_start
) == 8,
281 "rgp_sqtt_marker_barrier_start doesn't match RGP spec");
284 * "Barrier End" RGP SQTT instrumentation marker (Table 6)
286 struct rgp_sqtt_marker_barrier_end
{
289 uint32_t identifier
: 4;
290 uint32_t ext_dwords
: 3;
292 uint32_t wait_on_eop_ts
: 1;
293 uint32_t vs_partial_flush
: 1;
294 uint32_t ps_partial_flush
: 1;
295 uint32_t cs_partial_flush
: 1;
296 uint32_t pfp_sync_me
: 1;
302 uint32_t sync_cp_dma
: 1;
303 uint32_t inval_ccp
: 1;
304 uint32_t inval_sqI
: 1;
305 uint32_t inval_sqK
: 1;
306 uint32_t flush_tcc
: 1;
307 uint32_t inval_tcc
: 1;
308 uint32_t flush_cb
: 1;
309 uint32_t inval_cb
: 1;
310 uint32_t flush_db
: 1;
311 uint32_t inval_db
: 1;
312 uint32_t num_layout_transitions
: 16;
313 uint32_t inval_gl1
: 1;
314 uint32_t reserved
: 5;
320 static_assert(sizeof(struct rgp_sqtt_marker_barrier_end
) == 8,
321 "rgp_sqtt_marker_barrier_end doesn't match RGP spec");
324 radv_write_begin_general_api_marker(struct radv_cmd_buffer
*cmd_buffer
,
325 enum rgp_sqtt_marker_general_api_type api_type
)
327 struct rgp_sqtt_marker_general_api marker
= {};
328 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
330 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_GENERAL_API
;
331 marker
.api_type
= api_type
;
333 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
337 radv_write_end_general_api_marker(struct radv_cmd_buffer
*cmd_buffer
,
338 enum rgp_sqtt_marker_general_api_type api_type
)
340 struct rgp_sqtt_marker_general_api marker
= {};
341 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
343 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_GENERAL_API
;
344 marker
.api_type
= api_type
;
347 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
351 radv_write_event_marker(struct radv_cmd_buffer
*cmd_buffer
,
352 enum rgp_sqtt_marker_event_type api_type
,
353 uint32_t vertex_offset_user_data
,
354 uint32_t instance_offset_user_data
,
355 uint32_t draw_index_user_data
)
357 struct rgp_sqtt_marker_event marker
= {};
358 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
360 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_EVENT
;
361 marker
.api_type
= api_type
;
362 marker
.cmd_id
= cmd_buffer
->state
.num_events
++;
365 if (vertex_offset_user_data
== UINT_MAX
||
366 instance_offset_user_data
== UINT_MAX
) {
367 vertex_offset_user_data
= 0;
368 instance_offset_user_data
= 0;
371 if (draw_index_user_data
== UINT_MAX
)
372 draw_index_user_data
= vertex_offset_user_data
;
374 marker
.vertex_offset_reg_idx
= vertex_offset_user_data
;
375 marker
.instance_offset_reg_idx
= instance_offset_user_data
;
376 marker
.draw_index_reg_idx
= draw_index_user_data
;
378 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
382 radv_write_event_with_dims_marker(struct radv_cmd_buffer
*cmd_buffer
,
383 enum rgp_sqtt_marker_event_type api_type
,
384 uint32_t x
, uint32_t y
, uint32_t z
)
386 struct rgp_sqtt_marker_event_with_dims marker
= {};
387 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
389 marker
.event
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_EVENT
;
390 marker
.event
.api_type
= api_type
;
391 marker
.event
.cmd_id
= cmd_buffer
->state
.num_events
++;
392 marker
.event
.cb_id
= 0;
393 marker
.event
.has_thread_dims
= 1;
399 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
403 radv_describe_begin_cmd_buffer(struct radv_cmd_buffer
*cmd_buffer
)
405 uint64_t device_id
= (uint64_t)cmd_buffer
->device
;
406 struct rgp_sqtt_marker_cb_start marker
= {};
407 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
409 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
412 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_CB_START
;
414 marker
.device_id_low
= device_id
;
415 marker
.device_id_high
= device_id
>> 32;
416 marker
.queue
= cmd_buffer
->queue_family_index
;
417 marker
.queue_flags
= VK_QUEUE_COMPUTE_BIT
|
418 VK_QUEUE_TRANSFER_BIT
|
419 VK_QUEUE_SPARSE_BINDING_BIT
;
421 if (cmd_buffer
->queue_family_index
== RADV_QUEUE_GENERAL
)
422 marker
.queue_flags
|= VK_QUEUE_GRAPHICS_BIT
;
424 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
428 radv_describe_end_cmd_buffer(struct radv_cmd_buffer
*cmd_buffer
)
430 uint64_t device_id
= (uint64_t)cmd_buffer
->device
;
431 struct rgp_sqtt_marker_cb_end marker
= {};
432 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
434 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
437 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_CB_END
;
439 marker
.device_id_low
= device_id
;
440 marker
.device_id_high
= device_id
>> 32;
442 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
446 radv_describe_draw(struct radv_cmd_buffer
*cmd_buffer
)
448 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
451 radv_write_event_marker(cmd_buffer
, cmd_buffer
->state
.current_event_type
,
452 UINT_MAX
, UINT_MAX
, UINT_MAX
);
456 radv_describe_dispatch(struct radv_cmd_buffer
*cmd_buffer
, int x
, int y
, int z
)
458 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
461 radv_write_event_with_dims_marker(cmd_buffer
,
462 cmd_buffer
->state
.current_event_type
,
467 radv_describe_begin_render_pass_clear(struct radv_cmd_buffer
*cmd_buffer
,
468 VkImageAspectFlagBits aspects
)
470 cmd_buffer
->state
.current_event_type
= (aspects
& VK_IMAGE_ASPECT_COLOR_BIT
) ?
471 EventRenderPassColorClear
: EventRenderPassDepthStencilClear
;
475 radv_describe_end_render_pass_clear(struct radv_cmd_buffer
*cmd_buffer
)
477 cmd_buffer
->state
.current_event_type
= EventInternalUnknown
;
481 radv_describe_barrier_start(struct radv_cmd_buffer
*cmd_buffer
,
482 enum rgp_barrier_reason reason
)
484 struct rgp_sqtt_marker_barrier_start marker
= {};
485 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
487 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
490 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_BARRIER_START
;
492 marker
.dword02
= reason
;
494 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
498 radv_describe_barrier_end(struct radv_cmd_buffer
*cmd_buffer
)
500 struct rgp_sqtt_marker_barrier_end marker
= {};
501 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
503 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
506 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_BARRIER_END
;
509 /* TODO: fill pipeline stalls, cache flushes, etc */
511 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
514 #define EVENT_MARKER(cmd_name, args...) \
515 RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); \
516 radv_write_begin_general_api_marker(cmd_buffer, ApiCmd##cmd_name); \
517 cmd_buffer->state.current_event_type = EventCmd##cmd_name; \
518 radv_Cmd##cmd_name(args); \
519 cmd_buffer->state.current_event_type = EventInternalUnknown; \
520 radv_write_end_general_api_marker(cmd_buffer, ApiCmd##cmd_name);
523 VkCommandBuffer commandBuffer
,
524 uint32_t vertexCount
,
525 uint32_t instanceCount
,
526 uint32_t firstVertex
,
527 uint32_t firstInstance
)
529 EVENT_MARKER(Draw
, commandBuffer
, vertexCount
, instanceCount
,
530 firstVertex
, firstInstance
);
533 void sqtt_CmdDrawIndexed(
534 VkCommandBuffer commandBuffer
,
536 uint32_t instanceCount
,
538 int32_t vertexOffset
,
539 uint32_t firstInstance
)
541 EVENT_MARKER(DrawIndexed
, commandBuffer
, indexCount
, instanceCount
,
542 firstIndex
, vertexOffset
, firstInstance
);
545 void sqtt_CmdDrawIndirect(
546 VkCommandBuffer commandBuffer
,
552 EVENT_MARKER(DrawIndirect
, commandBuffer
, buffer
, offset
, drawCount
,
556 void sqtt_CmdDrawIndexedIndirect(
557 VkCommandBuffer commandBuffer
,
563 EVENT_MARKER(DrawIndexedIndirect
, commandBuffer
, buffer
, offset
,
567 void sqtt_CmdDrawIndirectCount(
568 VkCommandBuffer commandBuffer
,
571 VkBuffer countBuffer
,
572 VkDeviceSize countBufferOffset
,
573 uint32_t maxDrawCount
,
576 EVENT_MARKER(DrawIndirectCount
,commandBuffer
, buffer
, offset
,
577 countBuffer
, countBufferOffset
, maxDrawCount
, stride
);
580 void sqtt_CmdDrawIndexedIndirectCount(
581 VkCommandBuffer commandBuffer
,
584 VkBuffer countBuffer
,
585 VkDeviceSize countBufferOffset
,
586 uint32_t maxDrawCount
,
589 EVENT_MARKER(DrawIndexedIndirectCount
, commandBuffer
, buffer
, offset
,
590 countBuffer
, countBufferOffset
, maxDrawCount
, stride
);
593 void sqtt_CmdDispatch(
594 VkCommandBuffer commandBuffer
,
599 EVENT_MARKER(Dispatch
, commandBuffer
, x
, y
, z
);
602 void sqtt_CmdDispatchIndirect(
603 VkCommandBuffer commandBuffer
,
607 EVENT_MARKER(DispatchIndirect
, commandBuffer
, buffer
, offset
);
610 void sqtt_CmdCopyBuffer(
611 VkCommandBuffer commandBuffer
,
614 uint32_t regionCount
,
615 const VkBufferCopy
* pRegions
)
617 EVENT_MARKER(CopyBuffer
, commandBuffer
, srcBuffer
, destBuffer
,
618 regionCount
, pRegions
);
621 void sqtt_CmdFillBuffer(
622 VkCommandBuffer commandBuffer
,
624 VkDeviceSize dstOffset
,
625 VkDeviceSize fillSize
,
628 EVENT_MARKER(FillBuffer
, commandBuffer
, dstBuffer
, dstOffset
, fillSize
,
632 void sqtt_CmdUpdateBuffer(
633 VkCommandBuffer commandBuffer
,
635 VkDeviceSize dstOffset
,
636 VkDeviceSize dataSize
,
639 EVENT_MARKER(UpdateBuffer
, commandBuffer
, dstBuffer
, dstOffset
,
643 void sqtt_CmdCopyImage(
644 VkCommandBuffer commandBuffer
,
646 VkImageLayout srcImageLayout
,
648 VkImageLayout destImageLayout
,
649 uint32_t regionCount
,
650 const VkImageCopy
* pRegions
)
652 EVENT_MARKER(CopyImage
, commandBuffer
, srcImage
, srcImageLayout
,
653 destImage
, destImageLayout
, regionCount
, pRegions
);
656 void sqtt_CmdCopyBufferToImage(
657 VkCommandBuffer commandBuffer
,
660 VkImageLayout destImageLayout
,
661 uint32_t regionCount
,
662 const VkBufferImageCopy
* pRegions
)
664 EVENT_MARKER(CopyBufferToImage
, commandBuffer
, srcBuffer
, destImage
,
665 destImageLayout
, regionCount
, pRegions
);
668 void sqtt_CmdCopyImageToBuffer(
669 VkCommandBuffer commandBuffer
,
671 VkImageLayout srcImageLayout
,
673 uint32_t regionCount
,
674 const VkBufferImageCopy
* pRegions
)
676 EVENT_MARKER(CopyImageToBuffer
, commandBuffer
, srcImage
, srcImageLayout
,
677 destBuffer
, regionCount
, pRegions
);
680 void sqtt_CmdBlitImage(
681 VkCommandBuffer commandBuffer
,
683 VkImageLayout srcImageLayout
,
685 VkImageLayout destImageLayout
,
686 uint32_t regionCount
,
687 const VkImageBlit
* pRegions
,
690 EVENT_MARKER(BlitImage
, commandBuffer
, srcImage
, srcImageLayout
,
691 destImage
, destImageLayout
, regionCount
, pRegions
, filter
);
694 void sqtt_CmdClearColorImage(
695 VkCommandBuffer commandBuffer
,
697 VkImageLayout imageLayout
,
698 const VkClearColorValue
* pColor
,
700 const VkImageSubresourceRange
* pRanges
)
702 EVENT_MARKER(ClearColorImage
, commandBuffer
, image_h
, imageLayout
,
703 pColor
, rangeCount
, pRanges
);
706 void sqtt_CmdClearDepthStencilImage(
707 VkCommandBuffer commandBuffer
,
709 VkImageLayout imageLayout
,
710 const VkClearDepthStencilValue
* pDepthStencil
,
712 const VkImageSubresourceRange
* pRanges
)
714 EVENT_MARKER(ClearDepthStencilImage
, commandBuffer
, image_h
,
715 imageLayout
, pDepthStencil
, rangeCount
, pRanges
);
718 void sqtt_CmdClearAttachments(
719 VkCommandBuffer commandBuffer
,
720 uint32_t attachmentCount
,
721 const VkClearAttachment
* pAttachments
,
723 const VkClearRect
* pRects
)
725 EVENT_MARKER(ClearAttachments
, commandBuffer
, attachmentCount
,
726 pAttachments
, rectCount
, pRects
);
729 void sqtt_CmdResolveImage(
730 VkCommandBuffer commandBuffer
,
732 VkImageLayout src_image_layout
,
733 VkImage dest_image_h
,
734 VkImageLayout dest_image_layout
,
735 uint32_t region_count
,
736 const VkImageResolve
* regions
)
738 EVENT_MARKER(ResolveImage
, commandBuffer
, src_image_h
, src_image_layout
,
739 dest_image_h
, dest_image_layout
, region_count
, regions
);
742 void sqtt_CmdWaitEvents(VkCommandBuffer commandBuffer
,
744 const VkEvent
* pEvents
,
745 VkPipelineStageFlags srcStageMask
,
746 VkPipelineStageFlags dstStageMask
,
747 uint32_t memoryBarrierCount
,
748 const VkMemoryBarrier
* pMemoryBarriers
,
749 uint32_t bufferMemoryBarrierCount
,
750 const VkBufferMemoryBarrier
* pBufferMemoryBarriers
,
751 uint32_t imageMemoryBarrierCount
,
752 const VkImageMemoryBarrier
* pImageMemoryBarriers
)
754 EVENT_MARKER(WaitEvents
, commandBuffer
, eventCount
, pEvents
,
755 srcStageMask
, dstStageMask
, memoryBarrierCount
,
756 pMemoryBarriers
, bufferMemoryBarrierCount
,
757 pBufferMemoryBarriers
, imageMemoryBarrierCount
,
758 pImageMemoryBarriers
);
761 void sqtt_CmdPipelineBarrier(
762 VkCommandBuffer commandBuffer
,
763 VkPipelineStageFlags srcStageMask
,
764 VkPipelineStageFlags destStageMask
,
766 uint32_t memoryBarrierCount
,
767 const VkMemoryBarrier
* pMemoryBarriers
,
768 uint32_t bufferMemoryBarrierCount
,
769 const VkBufferMemoryBarrier
* pBufferMemoryBarriers
,
770 uint32_t imageMemoryBarrierCount
,
771 const VkImageMemoryBarrier
* pImageMemoryBarriers
)
773 EVENT_MARKER(PipelineBarrier
, commandBuffer
, srcStageMask
,
774 destStageMask
, byRegion
, memoryBarrierCount
,
775 pMemoryBarriers
, bufferMemoryBarrierCount
,
776 pBufferMemoryBarriers
, imageMemoryBarrierCount
,
777 pImageMemoryBarriers
);
780 void sqtt_CmdResetQueryPool(
781 VkCommandBuffer commandBuffer
,
782 VkQueryPool queryPool
,
786 EVENT_MARKER(ResetQueryPool
, commandBuffer
, queryPool
, firstQuery
,
790 void sqtt_CmdCopyQueryPoolResults(
791 VkCommandBuffer commandBuffer
,
792 VkQueryPool queryPool
,
796 VkDeviceSize dstOffset
,
798 VkQueryResultFlags flags
)
800 EVENT_MARKER(CopyQueryPoolResults
, commandBuffer
, queryPool
, firstQuery
,
801 queryCount
, dstBuffer
, dstOffset
, stride
,
806 #define API_MARKER(cmd_name, args...) \
807 RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); \
808 radv_write_begin_general_api_marker(cmd_buffer, ApiCmd##cmd_name); \
809 radv_Cmd##cmd_name(args); \
810 radv_write_end_general_api_marker(cmd_buffer, ApiCmd##cmd_name);
812 void sqtt_CmdBindPipeline(
813 VkCommandBuffer commandBuffer
,
814 VkPipelineBindPoint pipelineBindPoint
,
817 API_MARKER(BindPipeline
, commandBuffer
, pipelineBindPoint
, pipeline
);
820 void sqtt_CmdBindDescriptorSets(
821 VkCommandBuffer commandBuffer
,
822 VkPipelineBindPoint pipelineBindPoint
,
823 VkPipelineLayout layout
,
825 uint32_t descriptorSetCount
,
826 const VkDescriptorSet
* pDescriptorSets
,
827 uint32_t dynamicOffsetCount
,
828 const uint32_t* pDynamicOffsets
)
830 API_MARKER(BindDescriptorSets
, commandBuffer
, pipelineBindPoint
,
831 layout
, firstSet
, descriptorSetCount
,
832 pDescriptorSets
, dynamicOffsetCount
, pDynamicOffsets
);
835 void sqtt_CmdBindIndexBuffer(
836 VkCommandBuffer commandBuffer
,
839 VkIndexType indexType
)
841 API_MARKER(BindIndexBuffer
, commandBuffer
, buffer
, offset
, indexType
);
844 void sqtt_CmdBindVertexBuffers(
845 VkCommandBuffer commandBuffer
,
846 uint32_t firstBinding
,
847 uint32_t bindingCount
,
848 const VkBuffer
* pBuffers
,
849 const VkDeviceSize
* pOffsets
)
851 API_MARKER(BindVertexBuffers
, commandBuffer
, firstBinding
, bindingCount
,
855 void sqtt_CmdBeginQuery(
856 VkCommandBuffer commandBuffer
,
857 VkQueryPool queryPool
,
859 VkQueryControlFlags flags
)
861 API_MARKER(BeginQuery
, commandBuffer
, queryPool
, query
, flags
);
864 void sqtt_CmdEndQuery(
865 VkCommandBuffer commandBuffer
,
866 VkQueryPool queryPool
,
869 API_MARKER(EndQuery
, commandBuffer
, queryPool
, query
);
872 void sqtt_CmdWriteTimestamp(
873 VkCommandBuffer commandBuffer
,
874 VkPipelineStageFlagBits pipelineStage
,
875 VkQueryPool queryPool
,
878 API_MARKER(WriteTimestamp
, commandBuffer
, pipelineStage
, queryPool
, flags
);
881 void sqtt_CmdPushConstants(
882 VkCommandBuffer commandBuffer
,
883 VkPipelineLayout layout
,
884 VkShaderStageFlags stageFlags
,
889 API_MARKER(PushConstants
, commandBuffer
, layout
, stageFlags
, offset
,
893 void sqtt_CmdBeginRenderPass(
894 VkCommandBuffer commandBuffer
,
895 const VkRenderPassBeginInfo
* pRenderPassBegin
,
896 VkSubpassContents contents
)
898 API_MARKER(BeginRenderPass
, commandBuffer
, pRenderPassBegin
, contents
);
901 void sqtt_CmdNextSubpass(
902 VkCommandBuffer commandBuffer
,
903 VkSubpassContents contents
)
905 API_MARKER(NextSubpass
, commandBuffer
, contents
);
908 void sqtt_CmdEndRenderPass(
909 VkCommandBuffer commandBuffer
)
911 API_MARKER(EndRenderPass
, commandBuffer
);
914 void sqtt_CmdExecuteCommands(
915 VkCommandBuffer commandBuffer
,
916 uint32_t commandBufferCount
,
917 const VkCommandBuffer
* pCmdBuffers
)
919 API_MARKER(ExecuteCommands
, commandBuffer
, commandBufferCount
,
923 void sqtt_CmdSetViewport(
924 VkCommandBuffer commandBuffer
,
925 uint32_t firstViewport
,
926 uint32_t viewportCount
,
927 const VkViewport
* pViewports
)
929 API_MARKER(SetViewport
, commandBuffer
, firstViewport
, viewportCount
,
933 void sqtt_CmdSetScissor(
934 VkCommandBuffer commandBuffer
,
935 uint32_t firstScissor
,
936 uint32_t scissorCount
,
937 const VkRect2D
* pScissors
)
939 API_MARKER(SetScissor
, commandBuffer
, firstScissor
, scissorCount
,
943 void sqtt_CmdSetLineWidth(
944 VkCommandBuffer commandBuffer
,
947 API_MARKER(SetLineWidth
, commandBuffer
, lineWidth
);
950 void sqtt_CmdSetDepthBias(
951 VkCommandBuffer commandBuffer
,
952 float depthBiasConstantFactor
,
953 float depthBiasClamp
,
954 float depthBiasSlopeFactor
)
956 API_MARKER(SetDepthBias
, commandBuffer
, depthBiasConstantFactor
,
957 depthBiasClamp
, depthBiasSlopeFactor
);
960 void sqtt_CmdSetBlendConstants(
961 VkCommandBuffer commandBuffer
,
962 const float blendConstants
[4])
964 API_MARKER(SetBlendConstants
, commandBuffer
, blendConstants
);
967 void sqtt_CmdSetDepthBounds(
968 VkCommandBuffer commandBuffer
,
969 float minDepthBounds
,
970 float maxDepthBounds
)
972 API_MARKER(SetDepthBounds
, commandBuffer
, minDepthBounds
,
976 void sqtt_CmdSetStencilCompareMask(
977 VkCommandBuffer commandBuffer
,
978 VkStencilFaceFlags faceMask
,
979 uint32_t compareMask
)
981 API_MARKER(SetStencilCompareMask
, commandBuffer
, faceMask
, compareMask
);
984 void sqtt_CmdSetStencilWriteMask(
985 VkCommandBuffer commandBuffer
,
986 VkStencilFaceFlags faceMask
,
989 API_MARKER(SetStencilWriteMask
, commandBuffer
, faceMask
, writeMask
);
992 void sqtt_CmdSetStencilReference(
993 VkCommandBuffer commandBuffer
,
994 VkStencilFaceFlags faceMask
,
997 API_MARKER(SetStencilReference
, commandBuffer
, faceMask
, reference
);