Metal.jl
Metal.jl copied to clipboard
Migrate to metal C++?
https://developer.apple.com/metal/cpp/
This would be useful if we had a good C++ FFI. Without it, you'd probably end up writing shims anyway.
It's something to keep in mind though, so it doesn't hurt to let this open.
I had a brief look at using SWIG with the experimental C back-end from https://github.com/swig/swig/pull/2086, but ran into a few problems. Documenting those here:
- SWIG doesn't handle
_MTL_INLINE(but we cansedthat away) - callbacks are blocks, not ordinary function pointers: https://en.wikipedia.org/wiki/Blocks_(C_language_extension). Maybe we can treat those without captures like ordinary function pointers (i.e. remove the
(^)), but not all (e.g.newBuffer(const void* pointer, NS::UInteger length, MTL::ResourceOptions options, void (^deallocator)(void*, NS::UInteger)))
metal-cpp/Metal.i
%module MTL
%{
#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Metal/Metal.hpp>
%}
// includes taken from Metal.hpp (-includeall works too,
// but includes too much, like system headers)
#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
%include "MTLAccelerationStructure.hpp"
%include "MTLAccelerationStructureCommandEncoder.hpp"
%include "MTLAccelerationStructureTypes.hpp"
%include "MTLArgument.hpp"
%include "MTLArgumentEncoder.hpp"
%include "MTLBinaryArchive.hpp"
%include "MTLBlitCommandEncoder.hpp"
%include "MTLBlitPass.hpp"
%include "MTLBuffer.hpp"
%include "MTLCaptureManager.hpp"
%include "MTLCaptureScope.hpp"
%include "MTLCommandBuffer.hpp"
%include "MTLCommandEncoder.hpp"
%include "MTLCommandQueue.hpp"
%include "MTLComputeCommandEncoder.hpp"
%include "MTLComputePass.hpp"
%include "MTLComputePipeline.hpp"
%include "MTLCounters.hpp"
%include "MTLDefines.hpp"
%include "MTLDepthStencil.hpp"
%include "MTLDevice.hpp"
%include "MTLDrawable.hpp"
%include "MTLDynamicLibrary.hpp"
%include "MTLEvent.hpp"
%include "MTLFence.hpp"
%include "MTLFunctionConstantValues.hpp"
%include "MTLFunctionDescriptor.hpp"
%include "MTLFunctionHandle.hpp"
%include "MTLFunctionLog.hpp"
%include "MTLFunctionStitching.hpp"
%include "MTLHeaderBridge.hpp"
%include "MTLHeap.hpp"
%include "MTLIndirectCommandBuffer.hpp"
%include "MTLIndirectCommandEncoder.hpp"
%include "MTLIntersectionFunctionTable.hpp"
%include "MTLIOCommandBuffer.hpp"
%include "MTLIOCommandQueue.hpp"
%include "MTLIOCompressor.hpp"
%include "MTLLibrary.hpp"
%include "MTLLinkedFunctions.hpp"
%include "MTLParallelRenderCommandEncoder.hpp"
%include "MTLPipeline.hpp"
%include "MTLPixelFormat.hpp"
%include "MTLPrivate.hpp"
%include "MTLRasterizationRate.hpp"
%include "MTLRenderCommandEncoder.hpp"
%include "MTLRenderPass.hpp"
%include "MTLRenderPipeline.hpp"
%include "MTLResource.hpp"
%include "MTLResourceStateCommandEncoder.hpp"
%include "MTLResourceStatePass.hpp"
%include "MTLSampler.hpp"
%include "MTLStageInputOutputDescriptor.hpp"
%include "MTLTexture.hpp"
%include "MTLTypes.hpp"
%include "MTLVertexDescriptor.hpp"
%include "MTLVisibleFunctionTable.hpp"
%include "MTLVersion.hpp"
swig -Imetal-cpp/Metal -c++ -c metal-cpp/Metal.i
Does #117 close this issue?
Yeah, thanks.