From abdc55726210df2f45930d5298ba5161b2201018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Miko=C5=82ajczyk?= Date: Mon, 26 May 2025 23:01:32 +0100 Subject: [PATCH] Handle occlusion query commands --- src/video_core/amdgpu/liverpool.cpp | 20 +++++++++++++++++++ .../renderer_vulkan/vk_rasterizer.cpp | 9 ++++++++- .../renderer_vulkan/vk_rasterizer.h | 2 ++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp index f6dd954db..21a2c9288 100644 --- a/src/video_core/amdgpu/liverpool.cpp +++ b/src/video_core/amdgpu/liverpool.cpp @@ -612,6 +612,26 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::spanevent_index.Value() == EventIndex::ZpassDone) { + if (event->event_type.Value() == EventType::PixelPipeStatControl) { + + } + else if (event->event_type.Value() == EventType::PixelPipeStatDump) { + if ((event->Address() & 0x8) == 0) { + // occlusion query start + if (rasterizer) { + rasterizer->StartOcclusionQuery(); + } + } + else { + // occlusion query end + if (rasterizer) { + rasterizer->EndOcclusionQuery(); + } + } + } + } break; } case PM4ItOpcode::EventWriteEos: { diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index cf0c354c9..970d68ecb 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1268,8 +1268,15 @@ void Rasterizer::StartPredication() { } void Rasterizer::EndPredication() { - + } +void Rasterizer::StartOcclusionQuery() { + +} + +void Rasterizer::EndOcclusionQuery() { + +} } // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index e4b8aefb4..22b62e9d4 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h @@ -57,6 +57,8 @@ public: void StartPredication(); void EndPredication(); + void StartOcclusionQuery(); + void EndOcclusionQuery(); void InlineData(VAddr address, const void* value, u32 num_bytes, bool is_gds); u32 ReadDataFromGds(u32 gsd_offset);