mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-10 00:31:00 +00:00
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:
committed by
Baldur Karlsson
parent
75c1d37a45
commit
0f4c280f72
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user