Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> --- src/amd/vulkan/radv_cmd_buffer.c | 23 +++++++ src/amd/vulkan/radv_device.c | 4 ++ src/amd/vulkan/radv_meta.c | 2 + src/amd/vulkan/radv_meta_buffer.c | 6 ++ src/amd/vulkan/radv_meta_clear.c | 11 ++++ src/amd/vulkan/radv_meta_copy.c | 6 ++ src/amd/vulkan/radv_meta_decompress.c | 1 + src/amd/vulkan/radv_meta_fast_clear.c | 3 + src/amd/vulkan/radv_meta_resolve.c | 2 + src/amd/vulkan/radv_meta_resolve_cs.c | 1 + src/amd/vulkan/radv_meta_resolve_fs.c | 2 + src/amd/vulkan/radv_private.h | 51 ++++++++++++++++ src/amd/vulkan/radv_wsi.c | 87 +++++++++++++++++++++++++++ src/amd/vulkan/si_cmd_buffer.c | 19 ++++++ 14 files changed, 218 insertions(+)
diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index f13768b4ada..7367e24fd28 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -907,6 +907,8 @@ radv_emit_graphics_pipeline(struct radv_cmd_buffer *cmd_buffer) cmd_buffer->state.emitted_pipeline = pipeline; cmd_buffer->state.dirty &= ~RADV_CMD_DIRTY_PIPELINE; + + cmd_buffer->counters.counters[RADV_NUM_EMITTED_PIPELINES]++; } static void @@ -1822,6 +1824,10 @@ radv_flush_descriptors(struct radv_cmd_buffer *cmd_buffer, if (unlikely(cmd_buffer->device->trace_bo)) radv_save_descriptors(cmd_buffer, bind_point); + + assert(cmd_buffer->cs->cdw <= cdw_max); + + cmd_buffer->counters.counters[RADV_NUM_FLUSH_DESCRIPTORS]++; } static void @@ -1878,6 +1884,8 @@ radv_flush_constants(struct radv_cmd_buffer *cmd_buffer, cmd_buffer->push_constant_stages &= ~stages; assert(cmd_buffer->cs->cdw <= cdw_max); + + cmd_buffer->counters.counters[RADV_NUM_FLUSH_CONSTANTS]++; } static void @@ -1929,6 +1937,8 @@ radv_flush_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer, cmd_buffer->state.vb_va = va; cmd_buffer->state.vb_size = count * 16; cmd_buffer->state.prefetch_L2_mask |= RADV_PREFETCH_VBO_DESCRIPTORS; + + cmd_buffer->counters.counters[RADV_NUM_VB_UPDATES]++; } cmd_buffer->state.dirty &= ~RADV_CMD_DIRTY_VERTEX_BUFFER; } @@ -2463,6 +2473,7 @@ VkResult radv_BeginCommandBuffer( } memset(&cmd_buffer->state, 0, sizeof(cmd_buffer->state)); + memset(&cmd_buffer->counters, 0, sizeof(cmd_buffer->counters)); cmd_buffer->state.last_primitive_reset_en = -1; cmd_buffer->state.last_index_type = -1; cmd_buffer->state.last_num_instances = -1; @@ -2816,6 +2827,8 @@ radv_emit_compute_pipeline(struct radv_cmd_buffer *cmd_buffer) if (unlikely(cmd_buffer->device->trace_bo)) radv_save_pipeline(cmd_buffer, pipeline, RING_COMPUTE); + + cmd_buffer->counters.counters[RADV_NUM_EMITTED_PIPELINES]++; } static void radv_mark_descriptor_sets_dirty(struct radv_cmd_buffer *cmd_buffer, @@ -3710,6 +3723,8 @@ radv_draw(struct radv_cmd_buffer *cmd_buffer, assert(cmd_buffer->cs->cdw <= cdw_max); radv_cmd_buffer_after_draw(cmd_buffer, RADV_CMD_FLAG_PS_PARTIAL_FLUSH); + + cmd_buffer->counters.counters[RADV_NUM_DRAW_CALLS]++; } void radv_CmdDraw( @@ -4105,6 +4120,8 @@ radv_dispatch(struct radv_cmd_buffer *cmd_buffer, } radv_cmd_buffer_after_draw(cmd_buffer, RADV_CMD_FLAG_CS_PARTIAL_FLUSH); + + cmd_buffer->counters.counters[RADV_NUM_DISPATCH_CALLS]++; } void radv_CmdDispatchBase( @@ -4233,6 +4250,8 @@ static void radv_initialize_htile(struct radv_cmd_buffer *cmd_buffer, aspects |= VK_IMAGE_ASPECT_STENCIL_BIT; radv_set_ds_clear_metadata(cmd_buffer, image, value, aspects); + + cmd_buffer->counters.counters[RADV_NUM_HTILE_INITS]++; } static void radv_handle_depth_image_transition(struct radv_cmd_buffer *cmd_buffer, @@ -4283,6 +4302,8 @@ static void radv_initialise_cmask(struct radv_cmd_buffer *cmd_buffer, state->flush_bits |= radv_clear_cmask(cmd_buffer, image, value); state->flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB_META; + + cmd_buffer->counters.counters[RADV_NUM_CMASK_INITS]++; } void radv_initialize_dcc(struct radv_cmd_buffer *cmd_buffer, @@ -4297,6 +4318,8 @@ void radv_initialize_dcc(struct radv_cmd_buffer *cmd_buffer, state->flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB | RADV_CMD_FLAG_FLUSH_AND_INV_CB_META; + + cmd_buffer->counters.counters[RADV_NUM_DCC_INITS]++; } /** diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 70084a2b605..91f8db6f3bc 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -2772,6 +2772,10 @@ VkResult radv_QueueSubmit( can_patch = false; cmd_buffer->status = RADV_CMD_BUFFER_STATUS_PENDING; + + for(unsigned k = 0; k < RADV_NUM_COUNTERS; k++) { + queue->device->counters.counters[k] += cmd_buffer->counters.counters[k]; + } } for (uint32_t j = 0; j < pSubmits[i].commandBufferCount; j += advance) { diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c index 1ec8896afa2..8f03b3941a1 100644 --- a/src/amd/vulkan/radv_meta.c +++ b/src/amd/vulkan/radv_meta.c @@ -97,6 +97,8 @@ radv_meta_save(struct radv_meta_saved_state *state, state->attachments = cmd_buffer->state.attachments; state->render_area = cmd_buffer->state.render_area; } + + cmd_buffer->counters.counters[RADV_NUM_META_OPERATIONS]++; } void diff --git a/src/amd/vulkan/radv_meta_buffer.c b/src/amd/vulkan/radv_meta_buffer.c index 76854d7bbad..a79232d7168 100644 --- a/src/amd/vulkan/radv_meta_buffer.c +++ b/src/amd/vulkan/radv_meta_buffer.c @@ -329,6 +329,8 @@ static void fill_buffer_shader(struct radv_cmd_buffer *cmd_buffer, radv_CmdDispatch(radv_cmd_buffer_to_handle(cmd_buffer), block_count, 1, 1); radv_meta_restore(&saved_state, cmd_buffer); + + cmd_buffer->counters.counters[RADV_NUM_CS_CLEARS]++; } static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer, @@ -395,6 +397,8 @@ static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer, radv_CmdDispatch(radv_cmd_buffer_to_handle(cmd_buffer), block_count, 1, 1); radv_meta_restore(&saved_state, cmd_buffer); + + cmd_buffer->counters.counters[RADV_NUM_CS_COPIES]++; } @@ -537,4 +541,6 @@ void radv_CmdUpdateBuffer( radv_copy_buffer(cmd_buffer, cmd_buffer->upload.upload_bo, dst_buffer->bo, buf_offset, dstOffset + dst_buffer->offset, dataSize); } + + cmd_buffer->counters.counters[RADV_NUM_UPDATE_BUFFERS]++; } diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c index bf88d3a84d9..e82b6fd2f58 100644 --- a/src/amd/vulkan/radv_meta_clear.c +++ b/src/amd/vulkan/radv_meta_clear.c @@ -451,6 +451,8 @@ emit_color_clear(struct radv_cmd_buffer *cmd_buffer, } radv_cmd_buffer_set_subpass(cmd_buffer, subpass, false); + + cmd_buffer->counters.counters[RADV_NUM_SLOW_COLOR_CLEARS]++; } @@ -656,6 +658,10 @@ pick_depthstencil_pipeline(struct radv_cmd_buffer *cmd_buffer, /* we don't know the previous clear values, so we always have * the NO_EXPCLEAR path */ index = DEPTH_CLEAR_FAST_NO_EXPCLEAR; + + cmd_buffer->counters.counters[RADV_NUM_FAST_DEPTH_CLEARS]++; + } else { + cmd_buffer->counters.counters[RADV_NUM_SLOW_DEPTH_CLEARS]++; } switch (aspects) { @@ -971,6 +977,8 @@ emit_fast_htile_clear(struct radv_cmd_buffer *cmd_buffer, *post_flush |= flush_bits; } + cmd_buffer->counters.counters[RADV_NUM_FAST_DEPTH_CLEARS]++; + return true; } @@ -1456,6 +1464,7 @@ emit_fast_color_clear(struct radv_cmd_buffer *cmd_buffer, radv_update_color_clear_metadata(cmd_buffer, iview->image, subpass_att, clear_color); + cmd_buffer->counters.counters[RADV_NUM_FAST_COLOR_CLEARS]++; return true; } @@ -1862,4 +1871,6 @@ void radv_CmdClearAttachments( radv_meta_restore(&saved_state, cmd_buffer); cmd_buffer->state.flush_bits |= post_flush; + + cmd_buffer->counters.counters[RADV_NUM_CLEAR_ATTACHMENTS]++; } diff --git a/src/amd/vulkan/radv_meta_copy.c b/src/amd/vulkan/radv_meta_copy.c index ddfb5c54673..1fd12850bf8 100644 --- a/src/amd/vulkan/radv_meta_copy.c +++ b/src/amd/vulkan/radv_meta_copy.c @@ -223,6 +223,8 @@ meta_copy_buffer_to_image(struct radv_cmd_buffer *cmd_buffer, cmd_buffer->state.predicating = old_predicating; radv_meta_restore(&saved_state, cmd_buffer); + + cmd_buffer->counters.counters[RADV_NUM_B2I_COPIES]++; } void radv_CmdCopyBufferToImage( @@ -338,6 +340,8 @@ meta_copy_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, cmd_buffer->state.predicating = old_predicating; radv_meta_restore(&saved_state, cmd_buffer); + + cmd_buffer->counters.counters[RADV_NUM_I2B_COPIES]++; } void radv_CmdCopyImageToBuffer( @@ -504,6 +508,8 @@ meta_copy_image(struct radv_cmd_buffer *cmd_buffer, cmd_buffer->state.predicating = old_predicating; radv_meta_restore(&saved_state, cmd_buffer); + + cmd_buffer->counters.counters[RADV_NUM_IMAGE_COPIES]++; } void radv_CmdCopyImage( diff --git a/src/amd/vulkan/radv_meta_decompress.c b/src/amd/vulkan/radv_meta_decompress.c index b4f568ba2f8..0bb77ce0583 100644 --- a/src/amd/vulkan/radv_meta_decompress.c +++ b/src/amd/vulkan/radv_meta_decompress.c @@ -457,6 +457,7 @@ void radv_decompress_depth_image_inplace(struct radv_cmd_buffer *cmd_buffer, { assert(cmd_buffer->queue_family_index == RADV_QUEUE_GENERAL); radv_process_depth_image_inplace(cmd_buffer, image, subresourceRange, DEPTH_DECOMPRESS); + cmd_buffer->counters.counters[RADV_NUM_HTILE_DECOMPRESSIONS]++; } void radv_resummarize_depth_image_inplace(struct radv_cmd_buffer *cmd_buffer, diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c index a54b78c2a6c..3f5d0054046 100644 --- a/src/amd/vulkan/radv_meta_fast_clear.c +++ b/src/amd/vulkan/radv_meta_fast_clear.c @@ -623,10 +623,13 @@ radv_emit_color_decompress(struct radv_cmd_buffer *cmd_buffer, if (decompress_dcc && radv_image_has_dcc(image)) { pipeline = cmd_buffer->device->meta_state.fast_clear_flush.dcc_decompress_pipeline; + cmd_buffer->counters.counters[RADV_NUM_DCC_DECOMPRESSIONS]++; } else if (radv_image_has_fmask(image)) { pipeline = cmd_buffer->device->meta_state.fast_clear_flush.fmask_decompress_pipeline; + cmd_buffer->counters.counters[RADV_NUM_FMASK_DECOMPRESSIONS]++; } else { pipeline = cmd_buffer->device->meta_state.fast_clear_flush.cmask_eliminate_pipeline; + cmd_buffer->counters.counters[RADV_NUM_CMASK_ELIMINATES]++; } if (!decompress_dcc && radv_image_has_dcc(image)) { diff --git a/src/amd/vulkan/radv_meta_resolve.c b/src/amd/vulkan/radv_meta_resolve.c index 7ce36b1df6e..2f8011bfb46 100644 --- a/src/amd/vulkan/radv_meta_resolve.c +++ b/src/amd/vulkan/radv_meta_resolve.c @@ -322,6 +322,8 @@ emit_resolve(struct radv_cmd_buffer *cmd_buffer, radv_CmdDraw(cmd_buffer_h, 3, 1, 0, 0); cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB; + + cmd_buffer->counters.counters[RADV_NUM_HW_RESOLVES]++; } enum radv_resolve_method { diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c b/src/amd/vulkan/radv_meta_resolve_cs.c index e56df7f8a59..9cb43a1b83a 100644 --- a/src/amd/vulkan/radv_meta_resolve_cs.c +++ b/src/amd/vulkan/radv_meta_resolve_cs.c @@ -399,6 +399,7 @@ emit_resolve(struct radv_cmd_buffer *cmd_buffer, push_constants); radv_unaligned_dispatch(cmd_buffer, resolve_extent->width, resolve_extent->height, 1); + cmd_buffer->counters.counters[RADV_NUM_CS_RESOLVES]++; } void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer, diff --git a/src/amd/vulkan/radv_meta_resolve_fs.c b/src/amd/vulkan/radv_meta_resolve_fs.c index af4a6fe7a66..9205b0a76fa 100644 --- a/src/amd/vulkan/radv_meta_resolve_fs.c +++ b/src/amd/vulkan/radv_meta_resolve_fs.c @@ -442,6 +442,8 @@ emit_resolve(struct radv_cmd_buffer *cmd_buffer, radv_CmdDraw(cmd_buffer_h, 3, 1, 0, 0); cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB; + + cmd_buffer->counters.counters[RADV_NUM_FS_RESOLVES]++; } void radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer, diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index ac756f2c247..7cb8dbb75a0 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -647,6 +647,51 @@ struct radv_bo_list { pthread_mutex_t mutex; }; +enum radv_counter_id { + RADV_NUM_DRAW_CALLS, + RADV_NUM_DISPATCH_CALLS, + RADV_NUM_META_OPERATIONS, + RADV_NUM_CLEAR_ATTACHMENTS, + RADV_NUM_SLOW_COLOR_CLEARS, + RADV_NUM_FAST_COLOR_CLEARS, + RADV_NUM_SLOW_DEPTH_CLEARS, + RADV_NUM_FAST_DEPTH_CLEARS, + RADV_NUM_EMITTED_PIPELINES, + RADV_NUM_FLUSH_CONSTANTS, + RADV_NUM_FLUSH_DESCRIPTORS, + RADV_NUM_VB_UPDATES, + RADV_NUM_CMASK_INITS, + RADV_NUM_CMASK_ELIMINATES, + RADV_NUM_FMASK_DECOMPRESSIONS, + RADV_NUM_DCC_DECOMPRESSIONS, + RADV_NUM_DCC_INITS, + RADV_NUM_HTILE_INITS, + RADV_NUM_HTILE_DECOMPRESSIONS, + RADV_NUM_HW_RESOLVES, + RADV_NUM_FS_RESOLVES, + RADV_NUM_CS_RESOLVES, + RADV_NUM_CP_DMA_CLEARS, + RADV_NUM_CP_DMA_COPIES, + RADV_NUM_CS_CLEARS, + RADV_NUM_CS_COPIES, + RADV_NUM_UPDATE_BUFFERS, + RADV_NUM_B2I_COPIES, + RADV_NUM_I2B_COPIES, + RADV_NUM_IMAGE_COPIES, + RADV_NUM_VS_FLUSHES, + RADV_NUM_PS_FLUSHES, + RADV_NUM_CS_FLUSHES, + RADV_NUM_CB_FLUSHES, + RADV_NUM_CB_META_FLUSHES, + RADV_NUM_DB_FLUSHES, + RADV_NUM_DB_META_FLUSHES, + RADV_NUM_COUNTERS, +}; + +struct radv_counters { + unsigned counters[RADV_NUM_COUNTERS]; +}; + struct radv_device { VK_LOADER_DATA _loader_data; @@ -716,6 +761,9 @@ struct radv_device { /* Whether anisotropy is forced with RADV_TEX_ANISO (-1 is disabled). */ int force_aniso; + + /* Software counters. */ + struct radv_counters counters; }; struct radv_device_memory { @@ -1118,6 +1166,9 @@ struct radv_cmd_buffer { * Whether a query pool has been resetted and we have to flush caches. */ bool pending_reset_query; + + /* Software counters. */ + struct radv_counters counters; }; struct radv_image; diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index 346fb43d675..22ce2c2864b 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -248,11 +248,98 @@ VkResult radv_AcquireNextImage2KHR( return result; } +static void +radv_print_counters(struct radv_counters *counters) +{ + FILE *f = fopen("/tmp/radv_counters", "w"); + + fprintf(f, "num draw calls: %d\n", + counters->counters[RADV_NUM_DRAW_CALLS]); + fprintf(f, "num dispatch calls: %d\n", + counters->counters[RADV_NUM_DISPATCH_CALLS]); + fprintf(f, "num meta operations: %d\n", + counters->counters[RADV_NUM_META_OPERATIONS]); + fprintf(f, "num clear attachments: %d\n", + counters->counters[RADV_NUM_CLEAR_ATTACHMENTS]); + fprintf(f, "num slow color clears: %d\n", + counters->counters[RADV_NUM_SLOW_COLOR_CLEARS]); + fprintf(f, "num fast color clears: %d\n", + counters->counters[RADV_NUM_FAST_COLOR_CLEARS]); + fprintf(f, "num slow depth clears: %d\n", + counters->counters[RADV_NUM_SLOW_DEPTH_CLEARS]); + fprintf(f, "num fast depth clears: %d\n", + counters->counters[RADV_NUM_FAST_DEPTH_CLEARS]); + fprintf(f, "num emitted pipelines: %d\n", + counters->counters[RADV_NUM_EMITTED_PIPELINES]); + fprintf(f, "num flush constants: %d\n", + counters->counters[RADV_NUM_FLUSH_CONSTANTS]); + fprintf(f, "num flush descriptors: %d\n", + counters->counters[RADV_NUM_FLUSH_DESCRIPTORS]); + fprintf(f, "num VB updates: %d\n", + counters->counters[RADV_NUM_VB_UPDATES]); + fprintf(f, "num CMASK inits: %d\n", + counters->counters[RADV_NUM_CMASK_INITS]); + fprintf(f, "num CMASK eliminates: %d\n", + counters->counters[RADV_NUM_CMASK_ELIMINATES]); + fprintf(f, "num FMASK decompressions: %d\n", + counters->counters[RADV_NUM_FMASK_DECOMPRESSIONS]); + fprintf(f, "num DCC decompressions: %d\n", + counters->counters[RADV_NUM_DCC_DECOMPRESSIONS]); + fprintf(f, "num DCC inits: %d\n", + counters->counters[RADV_NUM_DCC_INITS]); + fprintf(f, "num HTILE inits: %d\n", + counters->counters[RADV_NUM_HTILE_INITS]); + fprintf(f, "num HTILE decompressions: %d\n", + counters->counters[RADV_NUM_HTILE_DECOMPRESSIONS]); + fprintf(f, "num HW resolves: %d\n", + counters->counters[RADV_NUM_HW_RESOLVES]); + fprintf(f, "num FS resolves: %d\n", + counters->counters[RADV_NUM_FS_RESOLVES]); + fprintf(f, "num CS resolves: %d\n", + counters->counters[RADV_NUM_CS_RESOLVES]); + fprintf(f, "num CP DMA clears: %d\n", + counters->counters[RADV_NUM_CP_DMA_CLEARS]); + fprintf(f, "num CP DMA copies: %d\n", + counters->counters[RADV_NUM_CP_DMA_COPIES]); + fprintf(f, "num CS clears: %d\n", + counters->counters[RADV_NUM_CS_CLEARS]); + fprintf(f, "num CS copies: %d\n", + counters->counters[RADV_NUM_CS_COPIES]); + fprintf(f, "num update buffers: %d\n", + counters->counters[RADV_NUM_UPDATE_BUFFERS]); + fprintf(f, "num B2I copies: %d\n", + counters->counters[RADV_NUM_B2I_COPIES]); + fprintf(f, "num I2B copies: %d\n", + counters->counters[RADV_NUM_I2B_COPIES]); + fprintf(f, "num image copies: %d\n", + counters->counters[RADV_NUM_IMAGE_COPIES]); + fprintf(f, "num VS flushes: %d\n", + counters->counters[RADV_NUM_VS_FLUSHES]); + fprintf(f, "num PS flushes: %d\n", + counters->counters[RADV_NUM_PS_FLUSHES]); + fprintf(f, "num CS flushes: %d\n", + counters->counters[RADV_NUM_CS_FLUSHES]); + fprintf(f, "num CB flushes: %d\n", + counters->counters[RADV_NUM_CB_FLUSHES]); + fprintf(f, "num CB meta flushes: %d\n", + counters->counters[RADV_NUM_CB_META_FLUSHES]); + fprintf(f, "num DB flushes: %d\n", + counters->counters[RADV_NUM_DB_FLUSHES]); + fprintf(f, "num DB meta flushes: %d\n", + counters->counters[RADV_NUM_DB_META_FLUSHES]); + fprintf(f, "\n\n"); + fclose(f); +} + VkResult radv_QueuePresentKHR( VkQueue _queue, const VkPresentInfoKHR* pPresentInfo) { RADV_FROM_HANDLE(radv_queue, queue, _queue); + + radv_print_counters(&queue->device->counters); + memset(&queue->device->counters, 0, sizeof(queue->device->counters)); + return wsi_common_queue_present(&queue->device->physical_device->wsi_device, radv_device_to_handle(queue->device), _queue, diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c index a9f25725415..5aeba6a7e99 100644 --- a/src/amd/vulkan/si_cmd_buffer.c +++ b/src/amd/vulkan/si_cmd_buffer.c @@ -971,6 +971,21 @@ si_emit_cache_flush(struct radv_cmd_buffer *cmd_buffer) if (!cmd_buffer->state.flush_bits) return; + if (cmd_buffer->state.flush_bits & RADV_CMD_FLAG_VS_PARTIAL_FLUSH) + cmd_buffer->counters.counters[RADV_NUM_VS_FLUSHES]++; + if (cmd_buffer->state.flush_bits & RADV_CMD_FLAG_PS_PARTIAL_FLUSH) + cmd_buffer->counters.counters[RADV_NUM_PS_FLUSHES]++; + if (cmd_buffer->state.flush_bits & RADV_CMD_FLAG_CS_PARTIAL_FLUSH) + cmd_buffer->counters.counters[RADV_NUM_CS_FLUSHES]++; + if (cmd_buffer->state.flush_bits & RADV_CMD_FLAG_FLUSH_AND_INV_CB) + cmd_buffer->counters.counters[RADV_NUM_CB_FLUSHES]++; + if (cmd_buffer->state.flush_bits & RADV_CMD_FLAG_FLUSH_AND_INV_CB_META) + cmd_buffer->counters.counters[RADV_NUM_CB_META_FLUSHES]++; + if (cmd_buffer->state.flush_bits & RADV_CMD_FLAG_FLUSH_AND_INV_DB) + cmd_buffer->counters.counters[RADV_NUM_DB_FLUSHES]++; + if (cmd_buffer->state.flush_bits & RADV_CMD_FLAG_FLUSH_AND_INV_DB_META) + cmd_buffer->counters.counters[RADV_NUM_DB_META_FLUSHES]++; + enum chip_class chip_class = cmd_buffer->device->physical_device->rad_info.chip_class; radeon_check_space(cmd_buffer->device->ws, cmd_buffer->cs, 128); @@ -1244,6 +1259,8 @@ void si_cp_dma_buffer_copy(struct radv_cmd_buffer *cmd_buffer, } if (realign_size) si_cp_dma_realign_engine(cmd_buffer, realign_size); + + cmd_buffer->counters.counters[RADV_NUM_CP_DMA_COPIES]++; } void si_cp_dma_clear_buffer(struct radv_cmd_buffer *cmd_buffer, uint64_t va, @@ -1271,6 +1288,8 @@ void si_cp_dma_clear_buffer(struct radv_cmd_buffer *cmd_buffer, uint64_t va, size -= byte_count; va += byte_count; } + + cmd_buffer->counters.counters[RADV_NUM_CP_DMA_CLEARS]++; } void si_cp_dma_wait_for_idle(struct radv_cmd_buffer *cmd_buffer) -- 2.19.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev