Metal.jl icon indicating copy to clipboard operation
Metal.jl copied to clipboard

Migrate to metal C++?

Open machineko opened this issue 4 years ago • 2 comments

https://developer.apple.com/metal/cpp/

machineko avatar Dec 30 '21 20:12 machineko

This would be useful if we had a good C++ FFI. Without it, you'd probably end up writing shims anyway.

maleadt avatar Jun 23 '22 07:06 maleadt

It's something to keep in mind though, so it doesn't hurt to let this open.

maleadt avatar Jun 26 '22 06:06 maleadt

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 can sed that 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

maleadt avatar Jan 31 '23 12:01 maleadt

Does #117 close this issue?

christiangnrd avatar Mar 10 '23 16:03 christiangnrd

Yeah, thanks.

maleadt avatar Mar 10 '23 17:03 maleadt