I've been object/mesh shaders using MTLRenderPipelineState
built from MTLMeshRenderPipelineDescriptor
with visible function tables. However, it seems that some functionality that is present on other MTL*RenderPipelineDescriptor
types is missing. Namely, it lacks max<Stage>CallStackDepth()
and setSupportAdding<Stage>BinaryFunctions()
.
The latter isn't too bad: I can always rebuild the the pipeline states from scratch if I want to add new linked functions.
However, not being able to set the max call stack depth is limiting. I assume that means I only get a depth of 1 as that is the default value for the other descriptor types. In practice it seems that I can go up to 2 with the functions I'm using before I start getting kIOGPUCommandBufferCallbackErrorSubmissionsIgnored
errors due to "prior/excessive GPU errors".
I'm curious if the lack of this functionality on MTLMeshRenderPipelineDescriptor
is a simple oversight. In my case I only am using VFTs and linked functions in the fragment stage. I suspect it should be possible since the other render pipeline descriptor types expose max call depths and adding binary functions in the fragment stage.
FWIW I'm also using Metal-CPP (which is fantastic!) but I don't see this functionality in the Swift/Obj-C docs either.