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
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;
}
case PM4ItOpcode::EventWriteEos: {

View File

@ -1268,8 +1268,15 @@ void Rasterizer::StartPredication() {
}
void Rasterizer::EndPredication() {
}
void Rasterizer::StartOcclusionQuery() {
}
void Rasterizer::EndOcclusionQuery() {
}
} // namespace Vulkan

View File

@ -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);