mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-08 16:01:19 +12:00
implement texture readback
This commit is contained in:
parent
e2ec602c43
commit
d3249dc324
6 changed files with 143 additions and 23 deletions
|
@ -6,6 +6,7 @@
|
|||
#include "Cafe/HW/Latte/Renderer/Metal/CachedFBOMtl.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Metal/MetalPipelineCache.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Metal/MetalDepthStencilCache.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Metal/LatteTextureReadbackMtl.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Metal/LatteToMtl.h"
|
||||
|
||||
#include "Cafe/HW/Latte/Renderer/Metal/ShaderSourcePresent.h"
|
||||
|
@ -35,6 +36,9 @@ MetalRenderer::MetalRenderer()
|
|||
m_pipelineCache = new MetalPipelineCache(this);
|
||||
m_depthStencilCache = new MetalDepthStencilCache(this);
|
||||
|
||||
// Texture readback
|
||||
m_readbackBuffer = m_device->newBuffer(TEXTURE_READBACK_SIZE, MTL::StorageModeShared);
|
||||
|
||||
// Initialize state
|
||||
for (uint32 i = 0; i < (uint32)LatteConst::ShaderType::TotalCount; i++)
|
||||
{
|
||||
|
@ -53,6 +57,8 @@ MetalRenderer::~MetalRenderer()
|
|||
|
||||
m_nearestSampler->release();
|
||||
|
||||
m_readbackBuffer->release();
|
||||
|
||||
m_commandQueue->release();
|
||||
m_device->release();
|
||||
}
|
||||
|
@ -407,9 +413,17 @@ void MetalRenderer::texture_copyImageSubData(LatteTexture* src, sint32 srcMip, s
|
|||
|
||||
LatteTextureReadbackInfo* MetalRenderer::texture_createReadback(LatteTextureView* textureView)
|
||||
{
|
||||
debug_printf("MetalRenderer::texture_createReadback not implemented\n");
|
||||
size_t uploadSize = static_cast<LatteTextureMtl*>(textureView->baseTexture)->GetTexture()->allocatedSize();
|
||||
|
||||
return nullptr;
|
||||
if ((m_readbackBufferWriteOffset + uploadSize) > TEXTURE_READBACK_SIZE)
|
||||
{
|
||||
m_readbackBufferWriteOffset = 0;
|
||||
}
|
||||
|
||||
auto* result = new LatteTextureReadbackInfoMtl(this, textureView, m_readbackBufferWriteOffset);
|
||||
m_readbackBufferWriteOffset += uploadSize;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void MetalRenderer::surfaceCopy_copySurfaceWithFormatConversion(LatteTexture* sourceTexture, sint32 srcMip, sint32 srcSlice, LatteTexture* destinationTexture, sint32 dstMip, sint32 dstSlice, sint32 width, sint32 height)
|
||||
|
@ -801,6 +815,9 @@ void MetalRenderer::CommitCommandBuffer()
|
|||
m_commandBuffer->release();
|
||||
m_commandBuffer = nullptr;
|
||||
|
||||
// TODO: where should this be called?
|
||||
LatteTextureReadback_UpdateFinishedTransfers(false);
|
||||
|
||||
// Debug
|
||||
m_commandQueue->insertDebugCaptureBoundary();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue