Handle occlusion query commands

This commit is contained in:
Marcin Mikołajczyk 2025-05-26 23:01:32 +01:00
parent 0543f1fd6d
commit abdc557262
3 changed files with 30 additions and 1 deletions

View File

@ -612,6 +612,26 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
// immediately // immediately
regs.cp_strmout_cntl.offset_update_done = 1; regs.cp_strmout_cntl.offset_update_done = 1;
} }
if (event->event_index.Value() == EventIndex::ZpassDone) {
if (event->event_type.Value() == EventType::PixelPipeStatControl) {
}
else if (event->event_type.Value() == EventType::PixelPipeStatDump) {
if ((event->Address<u64>() & 0x8) == 0) {
// occlusion query start
if (rasterizer) {
rasterizer->StartOcclusionQuery();
}
}
else {
// occlusion query end
if (rasterizer) {
rasterizer->EndOcclusionQuery();
}
}
}
}
break; break;
} }
case PM4ItOpcode::EventWriteEos: { case PM4ItOpcode::EventWriteEos: {

View File

@ -1271,5 +1271,12 @@ void Rasterizer::EndPredication() {
} }
void Rasterizer::StartOcclusionQuery() {
}
void Rasterizer::EndOcclusionQuery() {
}
} // namespace Vulkan } // namespace Vulkan

View File

@ -57,6 +57,8 @@ public:
void StartPredication(); void StartPredication();
void EndPredication(); void EndPredication();
void StartOcclusionQuery();
void EndOcclusionQuery();
void InlineData(VAddr address, const void* value, u32 num_bytes, bool is_gds); void InlineData(VAddr address, const void* value, u32 num_bytes, bool is_gds);
u32 ReadDataFromGds(u32 gsd_offset); u32 ReadDataFromGds(u32 gsd_offset);