mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-06 23:11:18 +12:00
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
#include "Cafe/HW/Latte/Renderer/Metal/MetalQuery.h"
|
|
#include "Cafe/HW/Latte/Renderer/Metal/MetalRenderer.h"
|
|
|
|
bool LatteQueryObjectMtl::getResult(uint64& numSamplesPassed)
|
|
{
|
|
if (!m_commandBuffer)
|
|
{
|
|
numSamplesPassed = 0;
|
|
return true;
|
|
}
|
|
|
|
if (!CommandBufferCompleted(m_commandBuffer))
|
|
return false;
|
|
|
|
uint64* resultPtr = m_mtlr->GetOcclusionQueryResultsPtr();
|
|
|
|
numSamplesPassed = 0;
|
|
for (uint32 i = m_range.begin; i != m_range.end; i = (i + 1) % MetalRenderer::OCCLUSION_QUERY_POOL_SIZE)
|
|
numSamplesPassed += resultPtr[i];
|
|
|
|
return true;
|
|
}
|
|
|
|
LatteQueryObjectMtl::~LatteQueryObjectMtl()
|
|
{
|
|
if (m_commandBuffer)
|
|
m_commandBuffer->release();
|
|
}
|
|
|
|
void LatteQueryObjectMtl::begin()
|
|
{
|
|
m_range.begin = m_mtlr->GetOcclusionQueryIndex();
|
|
m_mtlr->BeginOcclusionQuery();
|
|
}
|
|
|
|
void LatteQueryObjectMtl::end()
|
|
{
|
|
m_range.end = m_mtlr->GetOcclusionQueryIndex();
|
|
m_mtlr->EndOcclusionQuery();
|
|
|
|
m_commandBuffer = m_mtlr->GetCurrentCommandBuffer()->retain();
|
|
if (m_mtlr->IsCommandBufferActive())
|
|
m_mtlr->RequestSoonCommit();
|
|
}
|