From 69a321f81dddea433dab0d5558e6f6fb12deeaa7 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Wed, 2 Jul 2025 01:29:12 -0700 Subject: [PATCH] nv2a: Split nv2a_pgraph_surface_cpu_access trace into read/write --- hw/xbox/nv2a/pgraph/gl/surface.c | 10 +++++++--- hw/xbox/nv2a/pgraph/vk/surface.c | 10 +++++++--- hw/xbox/nv2a/trace-events | 3 ++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/hw/xbox/nv2a/pgraph/gl/surface.c b/hw/xbox/nv2a/pgraph/gl/surface.c index 33e9ccfca2..1adfbd9ac4 100644 --- a/hw/xbox/nv2a/pgraph/gl/surface.c +++ b/hw/xbox/nv2a/pgraph/gl/surface.c @@ -438,14 +438,18 @@ static void surface_access_callback(void *opaque, MemoryRegion *mr, hwaddr addr, hwaddr offset = addr - surface->vram_addr; + if (write) { + trace_nv2a_pgraph_surface_cpu_write(surface->vram_addr, offset); + } else { + trace_nv2a_pgraph_surface_cpu_read(surface->vram_addr, offset); + } + if (surface->draw_dirty) { - trace_nv2a_pgraph_surface_cpu_access(surface->vram_addr, offset); surface->download_pending = true; wait_for_downloads = true; } - if (write && !surface->upload_pending) { - trace_nv2a_pgraph_surface_cpu_access(surface->vram_addr, offset); + if (write) { surface->upload_pending = true; } } diff --git a/hw/xbox/nv2a/pgraph/vk/surface.c b/hw/xbox/nv2a/pgraph/vk/surface.c index 81f73dd265..d4f9a74871 100644 --- a/hw/xbox/nv2a/pgraph/vk/surface.c +++ b/hw/xbox/nv2a/pgraph/vk/surface.c @@ -546,14 +546,18 @@ static void surface_access_callback(void *opaque, MemoryRegion *mr, hwaddr addr, hwaddr offset = addr - surface->vram_addr; + if (write) { + trace_nv2a_pgraph_surface_cpu_write(surface->vram_addr, offset); + } else { + trace_nv2a_pgraph_surface_cpu_read(surface->vram_addr, offset); + } + if (surface->draw_dirty) { - trace_nv2a_pgraph_surface_cpu_access(surface->vram_addr, offset); surface->download_pending = true; wait_for_downloads = true; } - if (write && !surface->upload_pending) { - trace_nv2a_pgraph_surface_cpu_access(surface->vram_addr, offset); + if (write) { surface->upload_pending = true; } } diff --git a/hw/xbox/nv2a/trace-events b/hw/xbox/nv2a/trace-events index 3633dfb85b..9cc8fef11e 100644 --- a/hw/xbox/nv2a/trace-events +++ b/hw/xbox/nv2a/trace-events @@ -11,7 +11,8 @@ nv2a_pgraph_method(uint32_t subchannel, uint32_t graphics_class, uint32_t method nv2a_pgraph_method_abbrev(uint32_t subchannel, uint32_t graphics_class, uint32_t method, const char *name, unsigned int count) "%d: 0x%"PRIx32" -> 0x%04"PRIx32" %s * %d" nv2a_pgraph_method_unhandled(uint32_t subchannel, uint32_t graphics_class, uint32_t method, uint32_t parameter) "%d: 0x%"PRIx32" -> 0x%04"PRIx32" 0x%"PRIx32 nv2a_pgraph_surface_compare_mismatch(const char *field, long int a, long int b) "%20s -- %8ld vs %8ld" -nv2a_pgraph_surface_cpu_access(uint32_t addr, uint32_t offset) "0x%08"PRIx32"+0x%"PRIx32 +nv2a_pgraph_surface_cpu_read(uint32_t addr, uint32_t offset) "0x%08"PRIx32"+0x%"PRIx32 +nv2a_pgraph_surface_cpu_write(uint32_t addr, uint32_t offset) "0x%08"PRIx32"+0x%"PRIx32 nv2a_pgraph_surface_create_color(uint32_t addr, uint32_t width, uint32_t height, const char *layout, uint32_t anti_aliasing, uint32_t clip_x, uint32_t clip_width, uint32_t clip_y, uint32_t clip_height, uint32_t pitch) "Create: [COLOR @ 0x%08" PRIx32 " (%dx%d)] (%s) aa:%d, clip:x=%d,w=%d,y=%d,h=%d,p=%d" nv2a_pgraph_surface_create_zeta(uint32_t addr, uint32_t width, uint32_t height, const char *layout, uint32_t anti_aliasing, uint32_t clip_x, uint32_t clip_width, uint32_t clip_y, uint32_t clip_height, uint32_t pitch) " Create: [ZETA @ 0x%08" PRIx32 " (%dx%d)] (%s) aa:%d, clip:x=%d,w=%d,y=%d,h=%d,p=%d" nv2a_pgraph_surface_download(const char *binding, const char *layout, uint32_t addr, uint32_t width, uint32_t height, uint32_t pitch, uint32_t bytes_per_pixel) "[GPU->RAM] %s (%s) surface @ 0x%08" PRIx32 " (w=%d,h=%d,p=%d,bpp=%d)"