rsx: Capture stats about vertex cache performance

This commit is contained in:
kd-11 2023-06-07 03:06:27 +03:00 committed by kd-11
parent d752ab0151
commit 7e2eaf43ca
4 changed files with 21 additions and 0 deletions

View File

@ -16,6 +16,9 @@ namespace rsx
s64 textures_upload_time;
s64 draw_exec_time;
s64 flip_time;
u32 vertex_cache_request_count;
u32 vertex_cache_miss_count;
};
struct frame_time_t

View File

@ -364,10 +364,17 @@ void GLGSRender::flip(const rsx::display_flip_info_t& info)
const auto num_texture_upload = m_gl_texture_cache.get_texture_upload_calls_this_frame();
const auto num_texture_upload_miss = m_gl_texture_cache.get_texture_upload_misses_this_frame();
const auto texture_upload_miss_ratio = m_gl_texture_cache.get_texture_upload_miss_percentage();
println(fmt::format("Unreleased textures: %7d", num_dirty_textures));
println(fmt::format("Texture memory: %12dM", texture_memory_size));
println(fmt::format("Flush requests: %12d = %2d (%3d%%) hard faults, %2d unavoidable, %2d misprediction(s), %2d speculation(s)", num_flushes, num_misses, cache_miss_ratio, num_unavoidable, num_mispredict, num_speculate));
println(fmt::format("Texture uploads: %15u (%u from CPU - %02u%%)", num_texture_upload, num_texture_upload_miss, texture_upload_miss_ratio));
const auto vertex_cache_hit_count = (info.stats.vertex_cache_request_count - info.stats.vertex_cache_miss_count);
const auto vertex_cache_hit_ratio = info.stats.vertex_cache_request_count
? (vertex_cache_hit_count * 100) / info.stats.vertex_cache_request_count
: 0;
println(fmt::format("Vertex cache hits: %12u/%u (%u%%)", vertex_cache_hit_count, info.stats.vertex_cache_request_count, vertex_cache_hit_ratio));
}
if (gl::debug::g_vis_texture)

View File

@ -801,11 +801,18 @@ void VKGSRender::flip(const rsx::display_flip_info_t& info)
const auto num_texture_upload = m_texture_cache.get_texture_upload_calls_this_frame();
const auto num_texture_upload_miss = m_texture_cache.get_texture_upload_misses_this_frame();
const auto texture_upload_miss_ratio = m_texture_cache.get_texture_upload_miss_percentage();
println(fmt::format("Unreleased textures: %8d", num_dirty_textures));
println(fmt::format("Texture cache memory: %7dM", texture_memory_size));
println(fmt::format("Temporary texture memory: %3dM", tmp_texture_memory_size));
println(fmt::format("Flush requests: %13d = %2d (%3d%%) hard faults, %2d unavoidable, %2d misprediction(s), %2d speculation(s)", num_flushes, num_misses, cache_miss_ratio, num_unavoidable, num_mispredict, num_speculate));
println(fmt::format("Texture uploads: %14u (%u from CPU - %02u%%)", num_texture_upload, num_texture_upload_miss, texture_upload_miss_ratio));
const auto vertex_cache_hit_count = (info.stats.vertex_cache_request_count - info.stats.vertex_cache_miss_count);
const auto vertex_cache_hit_ratio = info.stats.vertex_cache_request_count
? (vertex_cache_hit_count * 100) / info.stats.vertex_cache_request_count
: 0;
println(fmt::format("Vertex cache hits: %12u/%u (%u%%)", vertex_cache_hit_count, info.stats.vertex_cache_request_count, vertex_cache_hit_ratio));
}
direct_fbo->release();

View File

@ -243,6 +243,8 @@ vk::vertex_upload_info VKGSRender::upload_vertex_data()
bool to_store = false;
u32 storage_address = -1;
m_frame_stats.vertex_cache_request_count++;
if (m_vertex_layout.interleaved_blocks.size() == 1 &&
rsx::method_registers.current_draw_clause.command != rsx::draw_command::inlined_array)
{
@ -264,6 +266,8 @@ vk::vertex_upload_info VKGSRender::upload_vertex_data()
if (!in_cache)
{
m_frame_stats.vertex_cache_miss_count++;
persistent_offset = static_cast<u32>(m_attrib_ring_info.alloc<256>(required.first));
persistent_range_base = static_cast<u32>(persistent_offset);