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 * "Layout Transition" RGP SQTT instrumentation marker (Table 7)
326 struct rgp_sqtt_marker_layout_transition
{
329 uint32_t identifier
: 4;
330 uint32_t ext_dwords
: 3;
331 uint32_t depth_stencil_expand
: 1;
332 uint32_t htile_hiz_range_expand
: 1;
333 uint32_t depth_stencil_resummarize
: 1;
334 uint32_t dcc_decompress
: 1;
335 uint32_t fmask_decompress
: 1;
336 uint32_t fast_clear_eliminate
: 1;
337 uint32_t fmask_color_expand
: 1;
338 uint32_t init_mask_ram
: 1;
339 uint32_t reserved1
: 17;
345 uint32_t reserved2
: 32;
351 static_assert(sizeof(struct rgp_sqtt_marker_layout_transition
) == 8,
352 "rgp_sqtt_marker_layout_transition doesn't match RGP spec");
355 radv_write_begin_general_api_marker(struct radv_cmd_buffer
*cmd_buffer
,
356 enum rgp_sqtt_marker_general_api_type api_type
)
358 struct rgp_sqtt_marker_general_api marker
= {};
359 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
361 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_GENERAL_API
;
362 marker
.api_type
= api_type
;
364 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
368 radv_write_end_general_api_marker(struct radv_cmd_buffer
*cmd_buffer
,
369 enum rgp_sqtt_marker_general_api_type api_type
)
371 struct rgp_sqtt_marker_general_api marker
= {};
372 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
374 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_GENERAL_API
;
375 marker
.api_type
= api_type
;
378 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
382 radv_write_event_marker(struct radv_cmd_buffer
*cmd_buffer
,
383 enum rgp_sqtt_marker_event_type api_type
,
384 uint32_t vertex_offset_user_data
,
385 uint32_t instance_offset_user_data
,
386 uint32_t draw_index_user_data
)
388 struct rgp_sqtt_marker_event marker
= {};
389 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
391 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_EVENT
;
392 marker
.api_type
= api_type
;
393 marker
.cmd_id
= cmd_buffer
->state
.num_events
++;
396 if (vertex_offset_user_data
== UINT_MAX
||
397 instance_offset_user_data
== UINT_MAX
) {
398 vertex_offset_user_data
= 0;
399 instance_offset_user_data
= 0;
402 if (draw_index_user_data
== UINT_MAX
)
403 draw_index_user_data
= vertex_offset_user_data
;
405 marker
.vertex_offset_reg_idx
= vertex_offset_user_data
;
406 marker
.instance_offset_reg_idx
= instance_offset_user_data
;
407 marker
.draw_index_reg_idx
= draw_index_user_data
;
409 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
413 radv_write_event_with_dims_marker(struct radv_cmd_buffer
*cmd_buffer
,
414 enum rgp_sqtt_marker_event_type api_type
,
415 uint32_t x
, uint32_t y
, uint32_t z
)
417 struct rgp_sqtt_marker_event_with_dims marker
= {};
418 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
420 marker
.event
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_EVENT
;
421 marker
.event
.api_type
= api_type
;
422 marker
.event
.cmd_id
= cmd_buffer
->state
.num_events
++;
423 marker
.event
.cb_id
= 0;
424 marker
.event
.has_thread_dims
= 1;
430 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
434 radv_describe_begin_cmd_buffer(struct radv_cmd_buffer
*cmd_buffer
)
436 uint64_t device_id
= (uintptr_t)cmd_buffer
->device
;
437 struct rgp_sqtt_marker_cb_start marker
= {};
438 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
440 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
443 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_CB_START
;
445 marker
.device_id_low
= device_id
;
446 marker
.device_id_high
= device_id
>> 32;
447 marker
.queue
= cmd_buffer
->queue_family_index
;
448 marker
.queue_flags
= VK_QUEUE_COMPUTE_BIT
|
449 VK_QUEUE_TRANSFER_BIT
|
450 VK_QUEUE_SPARSE_BINDING_BIT
;
452 if (cmd_buffer
->queue_family_index
== RADV_QUEUE_GENERAL
)
453 marker
.queue_flags
|= VK_QUEUE_GRAPHICS_BIT
;
455 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
459 radv_describe_end_cmd_buffer(struct radv_cmd_buffer
*cmd_buffer
)
461 uint64_t device_id
= (uintptr_t)cmd_buffer
->device
;
462 struct rgp_sqtt_marker_cb_end marker
= {};
463 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
465 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
468 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_CB_END
;
470 marker
.device_id_low
= device_id
;
471 marker
.device_id_high
= device_id
>> 32;
473 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
477 radv_describe_draw(struct radv_cmd_buffer
*cmd_buffer
)
479 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
482 radv_write_event_marker(cmd_buffer
, cmd_buffer
->state
.current_event_type
,
483 UINT_MAX
, UINT_MAX
, UINT_MAX
);
487 radv_describe_dispatch(struct radv_cmd_buffer
*cmd_buffer
, int x
, int y
, int z
)
489 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
492 radv_write_event_with_dims_marker(cmd_buffer
,
493 cmd_buffer
->state
.current_event_type
,
498 radv_describe_begin_render_pass_clear(struct radv_cmd_buffer
*cmd_buffer
,
499 VkImageAspectFlagBits aspects
)
501 cmd_buffer
->state
.current_event_type
= (aspects
& VK_IMAGE_ASPECT_COLOR_BIT
) ?
502 EventRenderPassColorClear
: EventRenderPassDepthStencilClear
;
506 radv_describe_end_render_pass_clear(struct radv_cmd_buffer
*cmd_buffer
)
508 cmd_buffer
->state
.current_event_type
= EventInternalUnknown
;
512 radv_describe_barrier_start(struct radv_cmd_buffer
*cmd_buffer
,
513 enum rgp_barrier_reason reason
)
515 struct rgp_sqtt_marker_barrier_start marker
= {};
516 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
518 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
521 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_BARRIER_START
;
523 marker
.dword02
= reason
;
525 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
529 radv_describe_barrier_end(struct radv_cmd_buffer
*cmd_buffer
)
531 struct rgp_sqtt_marker_barrier_end marker
= {};
532 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
534 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
537 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_BARRIER_END
;
540 marker
.num_layout_transitions
= cmd_buffer
->state
.num_layout_transitions
;
542 /* TODO: fill pipeline stalls, cache flushes, etc */
544 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
546 cmd_buffer
->state
.num_layout_transitions
= 0;
550 radv_describe_layout_transition(struct radv_cmd_buffer
*cmd_buffer
,
551 const struct radv_barrier_data
*barrier
)
553 struct rgp_sqtt_marker_layout_transition marker
= {};
554 struct radeon_cmdbuf
*cs
= cmd_buffer
->cs
;
556 if (likely(!cmd_buffer
->device
->thread_trace_bo
))
559 marker
.identifier
= RGP_SQTT_MARKER_IDENTIFIER_LAYOUT_TRANSITION
;
560 marker
.depth_stencil_expand
= barrier
->layout_transitions
.depth_stencil_expand
;
561 marker
.htile_hiz_range_expand
= barrier
->layout_transitions
.htile_hiz_range_expand
;
562 marker
.depth_stencil_resummarize
= barrier
->layout_transitions
.depth_stencil_resummarize
;
563 marker
.dcc_decompress
= barrier
->layout_transitions
.dcc_decompress
;
564 marker
.fmask_decompress
= barrier
->layout_transitions
.fmask_decompress
;
565 marker
.fast_clear_eliminate
= barrier
->layout_transitions
.fast_clear_eliminate
;
566 marker
.fmask_color_expand
= barrier
->layout_transitions
.fmask_color_expand
;
567 marker
.init_mask_ram
= barrier
->layout_transitions
.init_mask_ram
;
569 radv_emit_thread_trace_userdata(cs
, &marker
, sizeof(marker
) / 4);
571 cmd_buffer
->state
.num_layout_transitions
++;
574 /* TODO: Improve the way to trigger capture (overlay, etc). */
576 radv_handle_thread_trace(VkQueue _queue
)
578 RADV_FROM_HANDLE(radv_queue
, queue
, _queue
);
579 static bool thread_trace_enabled
= false;
580 static uint64_t num_frames
= 0;
582 if (thread_trace_enabled
) {
583 struct radv_thread_trace thread_trace
= {};
585 radv_end_thread_trace(queue
);
586 thread_trace_enabled
= false;
588 /* TODO: Do something better than this whole sync. */
589 radv_QueueWaitIdle(_queue
);
591 if (radv_get_thread_trace(queue
, &thread_trace
))
592 radv_dump_thread_trace(queue
->device
, &thread_trace
);
594 if (num_frames
== queue
->device
->thread_trace_start_frame
) {
595 radv_begin_thread_trace(queue
);
596 assert(!thread_trace_enabled
);
597 thread_trace_enabled
= true;
603 VkResult
sqtt_QueuePresentKHR(
605 const VkPresentInfoKHR
* pPresentInfo
)
609 result
= radv_QueuePresentKHR(_queue
, pPresentInfo
);
610 if (result
!= VK_SUCCESS
)
613 radv_handle_thread_trace(_queue
);
618 #define EVENT_MARKER(cmd_name, args...) \
619 RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); \
620 radv_write_begin_general_api_marker(cmd_buffer, ApiCmd##cmd_name); \
621 cmd_buffer->state.current_event_type = EventCmd##cmd_name; \
622 radv_Cmd##cmd_name(args); \
623 cmd_buffer->state.current_event_type = EventInternalUnknown; \
624 radv_write_end_general_api_marker(cmd_buffer, ApiCmd##cmd_name);
627 VkCommandBuffer commandBuffer
,
628 uint32_t vertexCount
,
629 uint32_t instanceCount
,
630 uint32_t firstVertex
,
631 uint32_t firstInstance
)
633 EVENT_MARKER(Draw
, commandBuffer
, vertexCount
, instanceCount
,
634 firstVertex
, firstInstance
);
637 void sqtt_CmdDrawIndexed(
638 VkCommandBuffer commandBuffer
,
640 uint32_t instanceCount
,
642 int32_t vertexOffset
,
643 uint32_t firstInstance
)
645 EVENT_MARKER(DrawIndexed
, commandBuffer
, indexCount
, instanceCount
,
646 firstIndex
, vertexOffset
, firstInstance
);
649 void sqtt_CmdDrawIndirect(
650 VkCommandBuffer commandBuffer
,
656 EVENT_MARKER(DrawIndirect
, commandBuffer
, buffer
, offset
, drawCount
,
660 void sqtt_CmdDrawIndexedIndirect(
661 VkCommandBuffer commandBuffer
,
667 EVENT_MARKER(DrawIndexedIndirect
, commandBuffer
, buffer
, offset
,
671 void sqtt_CmdDrawIndirectCount(
672 VkCommandBuffer commandBuffer
,
675 VkBuffer countBuffer
,
676 VkDeviceSize countBufferOffset
,
677 uint32_t maxDrawCount
,
680 EVENT_MARKER(DrawIndirectCount
,commandBuffer
, buffer
, offset
,
681 countBuffer
, countBufferOffset
, maxDrawCount
, stride
);
684 void sqtt_CmdDrawIndexedIndirectCount(
685 VkCommandBuffer commandBuffer
,
688 VkBuffer countBuffer
,
689 VkDeviceSize countBufferOffset
,
690 uint32_t maxDrawCount
,
693 EVENT_MARKER(DrawIndexedIndirectCount
, commandBuffer
, buffer
, offset
,
694 countBuffer
, countBufferOffset
, maxDrawCount
, stride
);
697 void sqtt_CmdDispatch(
698 VkCommandBuffer commandBuffer
,
703 EVENT_MARKER(Dispatch
, commandBuffer
, x
, y
, z
);
706 void sqtt_CmdDispatchIndirect(
707 VkCommandBuffer commandBuffer
,
711 EVENT_MARKER(DispatchIndirect
, commandBuffer
, buffer
, offset
);
714 void sqtt_CmdCopyBuffer(
715 VkCommandBuffer commandBuffer
,
718 uint32_t regionCount
,
719 const VkBufferCopy
* pRegions
)
721 EVENT_MARKER(CopyBuffer
, commandBuffer
, srcBuffer
, destBuffer
,
722 regionCount
, pRegions
);
725 void sqtt_CmdFillBuffer(
726 VkCommandBuffer commandBuffer
,
728 VkDeviceSize dstOffset
,
729 VkDeviceSize fillSize
,
732 EVENT_MARKER(FillBuffer
, commandBuffer
, dstBuffer
, dstOffset
, fillSize
,
736 void sqtt_CmdUpdateBuffer(
737 VkCommandBuffer commandBuffer
,
739 VkDeviceSize dstOffset
,
740 VkDeviceSize dataSize
,
743 EVENT_MARKER(UpdateBuffer
, commandBuffer
, dstBuffer
, dstOffset
,
747 void sqtt_CmdCopyImage(
748 VkCommandBuffer commandBuffer
,
750 VkImageLayout srcImageLayout
,
752 VkImageLayout destImageLayout
,
753 uint32_t regionCount
,
754 const VkImageCopy
* pRegions
)
756 EVENT_MARKER(CopyImage
, commandBuffer
, srcImage
, srcImageLayout
,
757 destImage
, destImageLayout
, regionCount
, pRegions
);
760 void sqtt_CmdCopyBufferToImage(
761 VkCommandBuffer commandBuffer
,
764 VkImageLayout destImageLayout
,
765 uint32_t regionCount
,
766 const VkBufferImageCopy
* pRegions
)
768 EVENT_MARKER(CopyBufferToImage
, commandBuffer
, srcBuffer
, destImage
,
769 destImageLayout
, regionCount
, pRegions
);
772 void sqtt_CmdCopyImageToBuffer(
773 VkCommandBuffer commandBuffer
,
775 VkImageLayout srcImageLayout
,
777 uint32_t regionCount
,
778 const VkBufferImageCopy
* pRegions
)
780 EVENT_MARKER(CopyImageToBuffer
, commandBuffer
, srcImage
, srcImageLayout
,
781 destBuffer
, regionCount
, pRegions
);
784 void sqtt_CmdBlitImage(
785 VkCommandBuffer commandBuffer
,
787 VkImageLayout srcImageLayout
,
789 VkImageLayout destImageLayout
,
790 uint32_t regionCount
,
791 const VkImageBlit
* pRegions
,
794 EVENT_MARKER(BlitImage
, commandBuffer
, srcImage
, srcImageLayout
,
795 destImage
, destImageLayout
, regionCount
, pRegions
, filter
);
798 void sqtt_CmdClearColorImage(
799 VkCommandBuffer commandBuffer
,
801 VkImageLayout imageLayout
,
802 const VkClearColorValue
* pColor
,
804 const VkImageSubresourceRange
* pRanges
)
806 EVENT_MARKER(ClearColorImage
, commandBuffer
, image_h
, imageLayout
,
807 pColor
, rangeCount
, pRanges
);
810 void sqtt_CmdClearDepthStencilImage(
811 VkCommandBuffer commandBuffer
,
813 VkImageLayout imageLayout
,
814 const VkClearDepthStencilValue
* pDepthStencil
,
816 const VkImageSubresourceRange
* pRanges
)
818 EVENT_MARKER(ClearDepthStencilImage
, commandBuffer
, image_h
,
819 imageLayout
, pDepthStencil
, rangeCount
, pRanges
);
822 void sqtt_CmdClearAttachments(
823 VkCommandBuffer commandBuffer
,
824 uint32_t attachmentCount
,
825 const VkClearAttachment
* pAttachments
,
827 const VkClearRect
* pRects
)
829 EVENT_MARKER(ClearAttachments
, commandBuffer
, attachmentCount
,
830 pAttachments
, rectCount
, pRects
);
833 void sqtt_CmdResolveImage(
834 VkCommandBuffer commandBuffer
,
836 VkImageLayout src_image_layout
,
837 VkImage dest_image_h
,
838 VkImageLayout dest_image_layout
,
839 uint32_t region_count
,
840 const VkImageResolve
* regions
)
842 EVENT_MARKER(ResolveImage
, commandBuffer
, src_image_h
, src_image_layout
,
843 dest_image_h
, dest_image_layout
, region_count
, regions
);
846 void sqtt_CmdWaitEvents(VkCommandBuffer commandBuffer
,
848 const VkEvent
* pEvents
,
849 VkPipelineStageFlags srcStageMask
,
850 VkPipelineStageFlags dstStageMask
,
851 uint32_t memoryBarrierCount
,
852 const VkMemoryBarrier
* pMemoryBarriers
,
853 uint32_t bufferMemoryBarrierCount
,
854 const VkBufferMemoryBarrier
* pBufferMemoryBarriers
,
855 uint32_t imageMemoryBarrierCount
,
856 const VkImageMemoryBarrier
* pImageMemoryBarriers
)
858 EVENT_MARKER(WaitEvents
, commandBuffer
, eventCount
, pEvents
,
859 srcStageMask
, dstStageMask
, memoryBarrierCount
,
860 pMemoryBarriers
, bufferMemoryBarrierCount
,
861 pBufferMemoryBarriers
, imageMemoryBarrierCount
,
862 pImageMemoryBarriers
);
865 void sqtt_CmdPipelineBarrier(
866 VkCommandBuffer commandBuffer
,
867 VkPipelineStageFlags srcStageMask
,
868 VkPipelineStageFlags destStageMask
,
870 uint32_t memoryBarrierCount
,
871 const VkMemoryBarrier
* pMemoryBarriers
,
872 uint32_t bufferMemoryBarrierCount
,
873 const VkBufferMemoryBarrier
* pBufferMemoryBarriers
,
874 uint32_t imageMemoryBarrierCount
,
875 const VkImageMemoryBarrier
* pImageMemoryBarriers
)
877 EVENT_MARKER(PipelineBarrier
, commandBuffer
, srcStageMask
,
878 destStageMask
, byRegion
, memoryBarrierCount
,
879 pMemoryBarriers
, bufferMemoryBarrierCount
,
880 pBufferMemoryBarriers
, imageMemoryBarrierCount
,
881 pImageMemoryBarriers
);
884 void sqtt_CmdResetQueryPool(
885 VkCommandBuffer commandBuffer
,
886 VkQueryPool queryPool
,
890 EVENT_MARKER(ResetQueryPool
, commandBuffer
, queryPool
, firstQuery
,
894 void sqtt_CmdCopyQueryPoolResults(
895 VkCommandBuffer commandBuffer
,
896 VkQueryPool queryPool
,
900 VkDeviceSize dstOffset
,
902 VkQueryResultFlags flags
)
904 EVENT_MARKER(CopyQueryPoolResults
, commandBuffer
, queryPool
, firstQuery
,
905 queryCount
, dstBuffer
, dstOffset
, stride
,
910 #define API_MARKER(cmd_name, args...) \
911 RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); \
912 radv_write_begin_general_api_marker(cmd_buffer, ApiCmd##cmd_name); \
913 radv_Cmd##cmd_name(args); \
914 radv_write_end_general_api_marker(cmd_buffer, ApiCmd##cmd_name);
916 void sqtt_CmdBindPipeline(
917 VkCommandBuffer commandBuffer
,
918 VkPipelineBindPoint pipelineBindPoint
,
921 API_MARKER(BindPipeline
, commandBuffer
, pipelineBindPoint
, pipeline
);
924 void sqtt_CmdBindDescriptorSets(
925 VkCommandBuffer commandBuffer
,
926 VkPipelineBindPoint pipelineBindPoint
,
927 VkPipelineLayout layout
,
929 uint32_t descriptorSetCount
,
930 const VkDescriptorSet
* pDescriptorSets
,
931 uint32_t dynamicOffsetCount
,
932 const uint32_t* pDynamicOffsets
)
934 API_MARKER(BindDescriptorSets
, commandBuffer
, pipelineBindPoint
,
935 layout
, firstSet
, descriptorSetCount
,
936 pDescriptorSets
, dynamicOffsetCount
, pDynamicOffsets
);
939 void sqtt_CmdBindIndexBuffer(
940 VkCommandBuffer commandBuffer
,
943 VkIndexType indexType
)
945 API_MARKER(BindIndexBuffer
, commandBuffer
, buffer
, offset
, indexType
);
948 void sqtt_CmdBindVertexBuffers(
949 VkCommandBuffer commandBuffer
,
950 uint32_t firstBinding
,
951 uint32_t bindingCount
,
952 const VkBuffer
* pBuffers
,
953 const VkDeviceSize
* pOffsets
)
955 API_MARKER(BindVertexBuffers
, commandBuffer
, firstBinding
, bindingCount
,
959 void sqtt_CmdBeginQuery(
960 VkCommandBuffer commandBuffer
,
961 VkQueryPool queryPool
,
963 VkQueryControlFlags flags
)
965 API_MARKER(BeginQuery
, commandBuffer
, queryPool
, query
, flags
);
968 void sqtt_CmdEndQuery(
969 VkCommandBuffer commandBuffer
,
970 VkQueryPool queryPool
,
973 API_MARKER(EndQuery
, commandBuffer
, queryPool
, query
);
976 void sqtt_CmdWriteTimestamp(
977 VkCommandBuffer commandBuffer
,
978 VkPipelineStageFlagBits pipelineStage
,
979 VkQueryPool queryPool
,
982 API_MARKER(WriteTimestamp
, commandBuffer
, pipelineStage
, queryPool
, flags
);
985 void sqtt_CmdPushConstants(
986 VkCommandBuffer commandBuffer
,
987 VkPipelineLayout layout
,
988 VkShaderStageFlags stageFlags
,
993 API_MARKER(PushConstants
, commandBuffer
, layout
, stageFlags
, offset
,
997 void sqtt_CmdBeginRenderPass(
998 VkCommandBuffer commandBuffer
,
999 const VkRenderPassBeginInfo
* pRenderPassBegin
,
1000 VkSubpassContents contents
)
1002 API_MARKER(BeginRenderPass
, commandBuffer
, pRenderPassBegin
, contents
);
1005 void sqtt_CmdNextSubpass(
1006 VkCommandBuffer commandBuffer
,
1007 VkSubpassContents contents
)
1009 API_MARKER(NextSubpass
, commandBuffer
, contents
);
1012 void sqtt_CmdEndRenderPass(
1013 VkCommandBuffer commandBuffer
)
1015 API_MARKER(EndRenderPass
, commandBuffer
);
1018 void sqtt_CmdExecuteCommands(
1019 VkCommandBuffer commandBuffer
,
1020 uint32_t commandBufferCount
,
1021 const VkCommandBuffer
* pCmdBuffers
)
1023 API_MARKER(ExecuteCommands
, commandBuffer
, commandBufferCount
,
1027 void sqtt_CmdSetViewport(
1028 VkCommandBuffer commandBuffer
,
1029 uint32_t firstViewport
,
1030 uint32_t viewportCount
,
1031 const VkViewport
* pViewports
)
1033 API_MARKER(SetViewport
, commandBuffer
, firstViewport
, viewportCount
,
1037 void sqtt_CmdSetScissor(
1038 VkCommandBuffer commandBuffer
,
1039 uint32_t firstScissor
,
1040 uint32_t scissorCount
,
1041 const VkRect2D
* pScissors
)
1043 API_MARKER(SetScissor
, commandBuffer
, firstScissor
, scissorCount
,
1047 void sqtt_CmdSetLineWidth(
1048 VkCommandBuffer commandBuffer
,
1051 API_MARKER(SetLineWidth
, commandBuffer
, lineWidth
);
1054 void sqtt_CmdSetDepthBias(
1055 VkCommandBuffer commandBuffer
,
1056 float depthBiasConstantFactor
,
1057 float depthBiasClamp
,
1058 float depthBiasSlopeFactor
)
1060 API_MARKER(SetDepthBias
, commandBuffer
, depthBiasConstantFactor
,
1061 depthBiasClamp
, depthBiasSlopeFactor
);
1064 void sqtt_CmdSetBlendConstants(
1065 VkCommandBuffer commandBuffer
,
1066 const float blendConstants
[4])
1068 API_MARKER(SetBlendConstants
, commandBuffer
, blendConstants
);
1071 void sqtt_CmdSetDepthBounds(
1072 VkCommandBuffer commandBuffer
,
1073 float minDepthBounds
,
1074 float maxDepthBounds
)
1076 API_MARKER(SetDepthBounds
, commandBuffer
, minDepthBounds
,
1080 void sqtt_CmdSetStencilCompareMask(
1081 VkCommandBuffer commandBuffer
,
1082 VkStencilFaceFlags faceMask
,
1083 uint32_t compareMask
)
1085 API_MARKER(SetStencilCompareMask
, commandBuffer
, faceMask
, compareMask
);
1088 void sqtt_CmdSetStencilWriteMask(
1089 VkCommandBuffer commandBuffer
,
1090 VkStencilFaceFlags faceMask
,
1093 API_MARKER(SetStencilWriteMask
, commandBuffer
, faceMask
, writeMask
);
1096 void sqtt_CmdSetStencilReference(
1097 VkCommandBuffer commandBuffer
,
1098 VkStencilFaceFlags faceMask
,
1101 API_MARKER(SetStencilReference
, commandBuffer
, faceMask
, reference
);