MTLComputePassDescriptor

This commit is contained in:
Isaac Marovitz
2024-01-20 21:01:47 -05:00
committed by Jake Turner
parent e6b8b380d4
commit adb6fe2e8d
4 changed files with 55 additions and 0 deletions
@@ -408,6 +408,13 @@ void DoSerialise(SerialiserType &ser, RDMTL::ComputePipelineDescriptor &el)
// SERIALISE_MEMBER(binaryArchives);
}
template <typename SerialiserType>
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);
@@ -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)
{
+22
View File
@@ -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 <typename MTL_TYPE>
static void GetWrappedNSArray(rdcarray<typename UnwrapHelper<MTL_TYPE>::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
+14
View File
@@ -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<NS::Range>()
@@ -512,6 +514,17 @@ struct ComputePipelineDescriptor
// rdcarray<WrappedMTLBinaryArchive*> 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<ComputePassSampleBufferAttachmentDescriptor> 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);