Added Metal Replay ProcessChunk()

bool WrappedMTLDevice::ProcessChunk(ReadSerialiser &ser, MetalChunk chunk)

SystemChunk::InitialContentsList is handled but not implemented

Added declarations for dummy objects used for serialization replay

WrappedMTLBuffer *m_DummyBuffer;
WrappedMTLCommandBuffer *m_DummyReplayCommandBuffer;
WrappedMTLCommandQueue *m_DummyReplayCommandQueue;
WrappedMTLLibrary *m_DummyReplayLibrary;
WrappedMTLRenderCommandEncoder *m_DummyReplayRenderCommandEncoder;
WrappedMTLBlitCommandEncoder *m_DummyReplayBlitCommandEncoder;

The dummy objects are not created in this commit.
This commit is contained in:
Jake Turner
2022-08-31 09:57:48 +01:00
committed by Baldur Karlsson
parent 75c1d37a45
commit 0f4c280f72
2 changed files with 371 additions and 0 deletions
+362
View File
@@ -24,9 +24,12 @@
#include "metal_core.h"
#include "serialise/rdcfile.h"
#include "metal_blit_command_encoder.h"
#include "metal_buffer.h"
#include "metal_command_buffer.h"
#include "metal_device.h"
#include "metal_library.h"
#include "metal_render_command_encoder.h"
#include "metal_replay.h"
#include "metal_texture.h"
@@ -69,6 +72,365 @@ void WrappedMTLDevice::AddEvent()
METAL_NOT_IMPLEMENTED();
}
#define METAL_CHUNK_NOT_HANDLED(CHUNK) \
case MetalChunk::CHUNK: \
{ \
RDCERR("MetalChunk::" #CHUNK " not handled"); \
return false; \
}
bool WrappedMTLDevice::ProcessChunk(ReadSerialiser &ser, MetalChunk chunk)
{
switch(chunk)
{
case MetalChunk::MTLCreateSystemDefaultDevice:
return Serialise_MTLCreateSystemDefaultDevice(ser);
case MetalChunk::MTLDevice_newCommandQueue:
return Serialise_newCommandQueue(ser, NULL);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newCommandQueueWithMaxCommandBufferCount);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newHeapWithDescriptor);
case MetalChunk::MTLDevice_newBufferWithLength:
case MetalChunk::MTLDevice_newBufferWithBytes:
return Serialise_newBufferWithBytes(ser, NULL, NULL, 0, MTL::ResourceOptionCPUCacheModeDefault);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newBufferWithBytesNoCopy);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newDepthStencilStateWithDescriptor);
case MetalChunk::MTLDevice_newTextureWithDescriptor:
case MetalChunk::MTLDevice_newTextureWithDescriptor_iosurface:
case MetalChunk::MTLDevice_newTextureWithDescriptor_nextDrawable:
{
RDMTL::TextureDescriptor descriptor;
return Serialise_newTextureWithDescriptor(ser, NULL, descriptor);
}
METAL_CHUNK_NOT_HANDLED(MTLDevice_newSharedTextureWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newSharedTextureWithHandle);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newSamplerStateWithDescriptor);
case MetalChunk::MTLDevice_newDefaultLibrary:
return Serialise_newDefaultLibrary(ser, NULL);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newDefaultLibraryWithBundle);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newLibraryWithFile);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newLibraryWithURL);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newLibraryWithData);
case MetalChunk::MTLDevice_newLibraryWithSource:
return Serialise_newLibraryWithSource(ser, NULL, NULL, NULL, NULL);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newLibraryWithStitchedDescriptor);
case MetalChunk::MTLDevice_newRenderPipelineStateWithDescriptor:
{
RDMTL::RenderPipelineDescriptor descriptor;
return Serialise_newRenderPipelineStateWithDescriptor(ser, NULL, descriptor, NULL);
}
METAL_CHUNK_NOT_HANDLED(MTLDevice_newRenderPipelineStateWithDescriptor_options);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newComputePipelineStateWithFunction);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newComputePipelineStateWithFunction_options);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newComputePipelineStateWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newFence);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newRenderPipelineStateWithTileDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newArgumentEncoderWithArguments);
METAL_CHUNK_NOT_HANDLED(MTLDevice_supportsRasterizationRateMapWithLayerCount);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newRasterizationRateMapWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newIndirectCommandBufferWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newEvent);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newSharedEvent);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newSharedEventWithHandle);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newCounterSampleBufferWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newDynamicLibrary);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newDynamicLibraryWithURL);
METAL_CHUNK_NOT_HANDLED(MTLDevice_newBinaryArchiveWithDescriptor);
case MetalChunk::MTLLibrary_newFunctionWithName:
return m_DummyReplayLibrary->Serialise_newFunctionWithName(ser, NULL, NULL);
METAL_CHUNK_NOT_HANDLED(MTLLibrary_newFunctionWithName_constantValues);
METAL_CHUNK_NOT_HANDLED(MTLLibrary_newFunctionWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLLibrary_newIntersectionFunctionWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLFunction_newArgumentEncoderWithBufferIndex);
case MetalChunk::MTLCommandQueue_commandBuffer:
return m_DummyReplayCommandQueue->Serialise_commandBuffer(ser, NULL);
METAL_CHUNK_NOT_HANDLED(MTLCommandQueue_commandBufferWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLCommandQueue_commandBufferWithUnretainedReferences);
case MetalChunk::MTLCommandBuffer_enqueue:
return m_DummyReplayCommandBuffer->Serialise_enqueue(ser);
case MetalChunk::MTLCommandBuffer_commit:
return m_DummyReplayCommandBuffer->Serialise_commit(ser);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_addScheduledHandler);
case MetalChunk::MTLCommandBuffer_presentDrawable:
return m_DummyReplayCommandBuffer->Serialise_presentDrawable(ser, NULL);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_presentDrawable_atTime);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_presentDrawable_afterMinimumDuration);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_waitUntilScheduled);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_addCompletedHandler);
case MetalChunk::MTLCommandBuffer_waitUntilCompleted:
return m_DummyReplayCommandBuffer->Serialise_waitUntilCompleted(ser);
case MetalChunk::MTLCommandBuffer_blitCommandEncoder:
return m_DummyReplayCommandBuffer->Serialise_blitCommandEncoder(ser, NULL);
case MetalChunk::MTLCommandBuffer_renderCommandEncoderWithDescriptor:
{
RDMTL::RenderPassDescriptor descriptor;
return m_DummyReplayCommandBuffer->Serialise_renderCommandEncoderWithDescriptor(ser, NULL,
descriptor);
}
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_computeCommandEncoderWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_blitCommandEncoderWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_computeCommandEncoder);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_computeCommandEncoderWithDispatchType);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_encodeWaitForEvent);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_encodeSignalEvent);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_parallelRenderCommandEncoderWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_resourceStateCommandEncoder);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_resourceStateCommandEncoderWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_accelerationStructureCommandEncoder);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_pushDebugGroup);
METAL_CHUNK_NOT_HANDLED(MTLCommandBuffer_popDebugGroup);
METAL_CHUNK_NOT_HANDLED(MTLTexture_setPurgeableState);
METAL_CHUNK_NOT_HANDLED(MTLTexture_makeAliasable);
METAL_CHUNK_NOT_HANDLED(MTLTexture_getBytes);
METAL_CHUNK_NOT_HANDLED(MTLTexture_getBytes_slice);
METAL_CHUNK_NOT_HANDLED(MTLTexture_replaceRegion);
METAL_CHUNK_NOT_HANDLED(MTLTexture_replaceRegion_slice);
METAL_CHUNK_NOT_HANDLED(MTLTexture_newTextureViewWithPixelFormat);
METAL_CHUNK_NOT_HANDLED(MTLTexture_newTextureViewWithPixelFormat_subset);
METAL_CHUNK_NOT_HANDLED(MTLTexture_newTextureViewWithPixelFormat_subset_swizzle);
METAL_CHUNK_NOT_HANDLED(MTLTexture_newSharedTextureHandle);
METAL_CHUNK_NOT_HANDLED(MTLTexture_remoteStorageTexture);
METAL_CHUNK_NOT_HANDLED(MTLTexture_newRemoteTextureViewForDevice);
METAL_CHUNK_NOT_HANDLED(MTLRenderPipelineState_functionHandleWithFunction);
METAL_CHUNK_NOT_HANDLED(MTLRenderPipelineState_newVisibleFunctionTableWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLRenderPipelineState_newIntersectionFunctionTableWithDescriptor);
METAL_CHUNK_NOT_HANDLED(
MTLRenderPipelineState_newRenderPipelineStateWithAdditionalBinaryFunctions);
case MetalChunk::MTLRenderCommandEncoder_endEncoding:
return m_DummyReplayRenderCommandEncoder->Serialise_endEncoding(ser);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_insertDebugSignpost);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_pushDebugGroup);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_popDebugGroup);
case MetalChunk::MTLRenderCommandEncoder_setRenderPipelineState:
return m_DummyReplayRenderCommandEncoder->Serialise_setRenderPipelineState(ser, NULL);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexBytes);
case MetalChunk::MTLRenderCommandEncoder_setVertexBuffer:
return m_DummyReplayRenderCommandEncoder->Serialise_setVertexBuffer(ser, NULL, 0, 0);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexBufferOffset);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexBuffers);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexTexture);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexTextures);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexSamplerState);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexSamplerState_lodclamp);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexSamplerStates);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexSamplerStates_lodclamp);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexVisibleFunctionTable);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexVisibleFunctionTables);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexIntersectionFunctionTable);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexIntersectionFunctionTables);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexAccelerationStructure);
case MetalChunk::MTLRenderCommandEncoder_setViewport:
{
MTL::Viewport viewport;
return m_DummyReplayRenderCommandEncoder->Serialise_setViewport(ser, viewport);
}
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setViewports);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFrontFacingWinding);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVertexAmplificationCount);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setCullMode);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setDepthClipMode);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setDepthBias);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setScissorRect);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setScissorRects);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTriangleFillMode);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentBytes);
case MetalChunk::MTLRenderCommandEncoder_setFragmentBuffer:
return m_DummyReplayRenderCommandEncoder->Serialise_setFragmentBuffer(ser, NULL, 0, 0);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentBufferOffset);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentBuffers);
case MetalChunk::MTLRenderCommandEncoder_setFragmentTexture:
return m_DummyReplayRenderCommandEncoder->Serialise_setFragmentTexture(ser, NULL, 0);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentTextures);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentSamplerState);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentSamplerState_lodclamp);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentSamplerStates);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentSamplerStates_lodclamp);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentVisibleFunctionTable);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentVisibleFunctionTables);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentIntersectionFunctionTable);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentIntersectionFunctionTables);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setFragmentAccelerationStructure);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setBlendColor);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setDepthStencilState);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setStencilReferenceValue);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setStencilFrontReferenceValue);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setVisibilityResultMode);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setColorStoreAction);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setDepthStoreAction);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setStencilStoreAction);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setColorStoreActionOptions);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setDepthStoreActionOptions);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setStencilStoreActionOptions);
case MetalChunk::MTLRenderCommandEncoder_drawPrimitives:
case MetalChunk::MTLRenderCommandEncoder_drawPrimitives_instanced:
case MetalChunk::MTLRenderCommandEncoder_drawPrimitives_instanced_base:
return m_DummyReplayRenderCommandEncoder->Serialise_drawPrimitives(
ser, MTL::PrimitiveTypePoint, 0, 0, 0, 0);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawPrimitives_indirect);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawIndexedPrimitives);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawIndexedPrimitives_instanced);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawIndexedPrimitives_instanced_base);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawIndexedPrimitives_indirect);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_textureBarrier);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_updateFence);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_waitForFence);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTessellationFactorBuffer);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTessellationFactorScale);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawPatches);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawPatches_indirect);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawIndexedPatches);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_drawIndexedPatches_indirect);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileBytes);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileBuffer);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileBufferOffset);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileBuffers);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileTexture);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileTextures);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileSamplerState);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileSamplerState_lodclamp);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileSamplerStates);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileSamplerStates_lodclamp);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileVisibleFunctionTable);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileVisibleFunctionTables);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileIntersectionFunctionTable);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileIntersectionFunctionTables);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setTileAccelerationStructure);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_dispatchThreadsPerTile);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_setThreadgroupMemoryLength);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_useResource);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_useResource_stages);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_useResources);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_useResources_stages);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_useHeap);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_useHeap_stages);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_useHeaps);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_useHeaps_stages);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_executeCommandsInBuffer);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_executeCommandsInBuffer_indirect);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_memoryBarrierWithScope);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_memoryBarrierWithResources);
METAL_CHUNK_NOT_HANDLED(MTLRenderCommandEncoder_sampleCountersInBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBuffer_setPurgeableState);
METAL_CHUNK_NOT_HANDLED(MTLBuffer_makeAliasable);
METAL_CHUNK_NOT_HANDLED(MTLBuffer_contents);
case MetalChunk::MTLBuffer_didModifyRange:
{
NS::Range range = NS::Range::Make(0, 0);
return m_DummyBuffer->Serialise_didModifyRange(ser, range);
}
METAL_CHUNK_NOT_HANDLED(MTLBuffer_newTextureWithDescriptor);
METAL_CHUNK_NOT_HANDLED(MTLBuffer_addDebugMarker);
METAL_CHUNK_NOT_HANDLED(MTLBuffer_removeAllDebugMarkers);
METAL_CHUNK_NOT_HANDLED(MTLBuffer_remoteStorageBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBuffer_newRemoteBufferViewForDevice);
case MetalChunk::MTLBuffer_InternalModifyCPUContents:
return m_DummyBuffer->Serialise_InternalModifyCPUContents(ser, 0, 0, NULL);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_setLabel);
case MetalChunk::MTLBlitCommandEncoder_endEncoding:
return m_DummyReplayBlitCommandEncoder->Serialise_endEncoding(ser);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_insertDebugSignpost);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_pushDebugGroup);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_popDebugGroup);
case MetalChunk::MTLBlitCommandEncoder_synchronizeResource:
return m_DummyReplayBlitCommandEncoder->Serialise_synchronizeResource(ser, NULL);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_synchronizeTexture);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyFromBuffer_toBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyFromBuffer_toTexture);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyFromBuffer_toTexture_options);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyFromTexture_toBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyFromTexture_toBuffer_options);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyFromTexture_toTexture);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyFromTexture_toTexture_slice_level_origin);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyFromTexture_toTexture_slice_level_count);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_generateMipmapsForTexture);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_fillBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_updateFence);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_waitForFence);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_getTextureAccessCounters);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_resetTextureAccessCounters);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_optimizeContentsForGPUAccess);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_optimizeContentsForGPUAccess_slice_level);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_optimizeContentsForCPUAccess);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_optimizeContentsForCPUAccess_slice_level);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_resetCommandsInBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_copyIndirectCommandBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_optimizeIndirectCommandBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_sampleCountersInBuffer);
METAL_CHUNK_NOT_HANDLED(MTLBlitCommandEncoder_resolveCounters);
// no default to get compile error if a chunk is not handled
case MetalChunk::Max: break;
}
{
SystemChunk system = (SystemChunk)chunk;
if(system == SystemChunk::DriverInit)
{
MetalInitParams InitParams;
SERIALISE_ELEMENT(InitParams);
SERIALISE_CHECK_READ_ERRORS();
}
else if(system == SystemChunk::InitialContentsList)
{
// TODO: Create initial contents
RDCERR("SystemChunk::InitialContentsList not handled");
SERIALISE_CHECK_READ_ERRORS();
}
else if(system == SystemChunk::InitialContents)
{
return Serialise_InitialState(ser, ResourceId(), NULL, NULL);
}
else if(system == SystemChunk::CaptureScope)
{
return Serialise_CaptureScope(ser);
}
else if(system == SystemChunk::CaptureEnd)
{
SERIALISE_ELEMENT_LOCAL(PresentedImage, ResourceId()).TypedAs("MTLTexture"_lit);
SERIALISE_CHECK_READ_ERRORS();
// TODO: handle null PresentedImage
// TODO: Track most recently presented texture in Serialise_presentDrawable
if(IsLoading(m_State))
{
AddEvent();
ActionDescription action;
action.customName = "End of Capture";
action.flags |= ActionFlags::Present;
action.copyDestination = PresentedImage;
AddAction(action);
}
return true;
}
else if(system < SystemChunk::FirstDriverChunk)
{
RDCERR("Unexpected system chunk in capture data: %u", system);
ser.SkipCurrentChunk();
SERIALISE_CHECK_READ_ERRORS();
}
else
{
RDCERR("Unrecognised Chunk type %d", chunk);
return false;
}
}
return true;
}
void WrappedMTLDevice::AddResource(ResourceId id, ResourceType type, const char *defaultNamePrefix)
{
ResourceDescription &descr = GetReplay()->GetResourceDesc(id);
+9
View File
@@ -169,6 +169,7 @@ private:
void AddResourceCurChunk(ResourceDescription &descr);
bool ProcessChunk(ReadSerialiser &ser, MetalChunk chunk);
WrappedMTLTexture *Common_NewTexture(RDMTL::TextureDescriptor &descriptor, MetalChunk chunkType,
bool ioSurfaceTexture, IOSurfaceRef iosurface,
NS::UInteger plane);
@@ -177,6 +178,14 @@ private:
MetalResourceManager *m_ResourceManager = NULL;
// Dummy objects used for serialisation replay
WrappedMTLBuffer *m_DummyBuffer = NULL;
WrappedMTLCommandBuffer *m_DummyReplayCommandBuffer = NULL;
WrappedMTLCommandQueue *m_DummyReplayCommandQueue = NULL;
WrappedMTLLibrary *m_DummyReplayLibrary = NULL;
WrappedMTLRenderCommandEncoder *m_DummyReplayRenderCommandEncoder = NULL;
WrappedMTLBlitCommandEncoder *m_DummyReplayBlitCommandEncoder = NULL;
MetalReplay *m_Replay = NULL;
// Back buffer and swap chain emulation