From adb6fe2e8d4067053f5e351717eced33cb302a76 Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 20 Jan 2024 21:01:47 -0500 Subject: [PATCH] MTLComputePassDescriptor --- renderdoc/driver/metal/metal_serialise.cpp | 8 ++++++++ renderdoc/driver/metal/metal_stringise.cpp | 11 +++++++++++ renderdoc/driver/metal/metal_types.cpp | 22 ++++++++++++++++++++++ renderdoc/driver/metal/metal_types.h | 14 ++++++++++++++ 4 files changed, 55 insertions(+) diff --git a/renderdoc/driver/metal/metal_serialise.cpp b/renderdoc/driver/metal/metal_serialise.cpp index aac184c9d..e40524a90 100644 --- a/renderdoc/driver/metal/metal_serialise.cpp +++ b/renderdoc/driver/metal/metal_serialise.cpp @@ -408,6 +408,13 @@ void DoSerialise(SerialiserType &ser, RDMTL::ComputePipelineDescriptor &el) // SERIALISE_MEMBER(binaryArchives); } +template +void DoSerialise(SerialiserType &ser, RDMTL::ComputePassDescriptor &el) +{ + SERIALISE_MEMBER(sampleBufferAttachments); + SERIALISE_MEMBER(dispatchType); +} + INSTANTIATE_SERIALISE_TYPE(NS::String *); INSTANTIATE_SERIALISE_TYPE(NS::Range) INSTANTIATE_SERIALISE_TYPE(MTL::TextureSwizzleChannels); @@ -436,3 +443,4 @@ INSTANTIATE_SERIALISE_TYPE(RDMTL::RenderPassStencilAttachmentDescriptor); INSTANTIATE_SERIALISE_TYPE(RDMTL::RenderPassDescriptor); INSTANTIATE_SERIALISE_TYPE(RDMTL::ComputePassSampleBufferAttachmentDescriptor); INSTANTIATE_SERIALISE_TYPE(RDMTL::ComputePipelineDescriptor); +INSTANTIATE_SERIALISE_TYPE(RDMTL::ComputePassDescriptor); diff --git a/renderdoc/driver/metal/metal_stringise.cpp b/renderdoc/driver/metal/metal_stringise.cpp index 9fd6d3a78..2ea872281 100644 --- a/renderdoc/driver/metal/metal_stringise.cpp +++ b/renderdoc/driver/metal/metal_stringise.cpp @@ -1218,6 +1218,17 @@ rdcstr DoStringise(const MTL::StepFunction &el) END_ENUM_STRINGISE() } +template <> +rdcstr DoStringise(const MTL::DispatchType &el) +{ + BEGIN_ENUM_STRINGISE(MTL::DispatchType) + { + MTL_STRINGISE_ENUM(DispatchTypeSerial); + MTL_STRINGISE_ENUM(DispatchTypeConcurrent); + } + END_ENUM_STRINGISE() +} + template <> rdcstr DoStringise(const MetalResourceType &el) { diff --git a/renderdoc/driver/metal/metal_types.cpp b/renderdoc/driver/metal/metal_types.cpp index a7773d346..8c87b2215 100644 --- a/renderdoc/driver/metal/metal_types.cpp +++ b/renderdoc/driver/metal/metal_types.cpp @@ -164,6 +164,13 @@ static bool ValidData(MTL::BufferLayoutDescriptor *descriptor) return true; } +static bool ValidData(MTL::ComputePassSampleBufferAttachmentDescriptor *descriptor) +{ + if(!descriptor->sampleBuffer()) + return false; + return true; +} + template static void GetWrappedNSArray(rdcarray::Outer *> &to, NS::Array *from) { @@ -731,4 +738,19 @@ ComputePipelineDescriptor::operator MTL::ComputePipelineDescriptor *() return objc; } +ComputePassDescriptor::ComputePassDescriptor(MTL::ComputePassDescriptor *objc) + : dispatchType(objc->dispatchType()) +{ + GETOBJCARRAY(ComputePassSampleBufferAttachmentDescriptor, + MAX_COMPUTE_PASS_SAMPLE_BUFFER_ATTACHMENTS, sampleBufferAttachments, ValidData); +} + +ComputePassDescriptor::operator MTL::ComputePassDescriptor *() +{ + MTL::ComputePassDescriptor *objc = MTL::ComputePassDescriptor::alloc()->init(); + COPYTOOBJCARRAY(ComputePassSampleBufferAttachmentDescriptor, sampleBufferAttachments); + objc->setDispatchType(dispatchType); + return objc; +} + } // namespace RDMTL diff --git a/renderdoc/driver/metal/metal_types.h b/renderdoc/driver/metal/metal_types.h index 95d6d6cb0..7232eb172 100644 --- a/renderdoc/driver/metal/metal_types.h +++ b/renderdoc/driver/metal/metal_types.h @@ -34,6 +34,7 @@ const uint32_t MAX_RENDER_PASS_BUFFER_ATTACHMENTS = 31; const uint32_t MAX_VERTEX_SHADER_ATTRIBUTES = 31; const uint32_t MAX_RENDER_PASS_SAMPLE_BUFFER_ATTACHMENTS = 4; const uint32_t MAX_COMPUTE_PASS_BUFFER_ATTACHMENTS = 31; +const uint32_t MAX_COMPUTE_PASS_SAMPLE_BUFFER_ATTACHMENTS = 4; // Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Metal.framework/Headers/MTLCounters.h #ifndef MTLCounterDontSample @@ -166,6 +167,7 @@ MTL_DECLARE_REFLECTION_TYPE(CullMode); MTL_DECLARE_REFLECTION_TYPE(IndexType); MTL_DECLARE_REFLECTION_TYPE(StepFunction); MTL_DECLARE_REFLECTION_TYPE(AttributeFormat); +MTL_DECLARE_REFLECTION_TYPE(DispatchType); template <> inline rdcliteral TypeName() @@ -512,6 +514,17 @@ struct ComputePipelineDescriptor // rdcarray binaryArchives; }; +// MTLComputePassDescriptor : based on the interface defined in +// Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/System/Library/Frameworks/Metal.framework/Headers/MTLComputePass.h +struct ComputePassDescriptor +{ + ComputePassDescriptor() = default; + ComputePassDescriptor(MTL::ComputePassDescriptor *objc); + explicit operator MTL::ComputePassDescriptor *(); + rdcarray sampleBufferAttachments; + MTL::DispatchType dispatchType = MTL::DispatchTypeSerial; +}; + } // namespace RDMTL template <> @@ -551,3 +564,4 @@ RDMTL_DECLARE_REFLECTION_STRUCT(RenderPassSampleBufferAttachmentDescriptor); RDMTL_DECLARE_REFLECTION_STRUCT(RenderPassDescriptor); RDMTL_DECLARE_REFLECTION_STRUCT(ComputePassSampleBufferAttachmentDescriptor); RDMTL_DECLARE_REFLECTION_STRUCT(ComputePipelineDescriptor); +RDMTL_DECLARE_REFLECTION_STRUCT(ComputePassDescriptor);