Hey @warrenm, I was playing around with MPS from your tutorial http://metalbyexample.com/metal-performance-shaders-in-swift/ … now I want to try and chain some filters, Sobel and Resize for example but I'm not sure where to start. Any tips?
The key thing to remember is that you’re responsible for tracking dependencies between resources that might alias. I seem to recall another tweet from you that mentioned fences; are you using them? Have you consulted this sample? https://developer.apple.com/documentation/metal/resource_objects/image_filter_graph_with_heaps_and_fences …
-
-
Yeah, the problem is that MPS kernels don’t provide you with MPSComputeComandEncoder, but instead encode themselves into command buffer. That’s why I’m lost at how to ensure chaining order on heap sub-allocated resources. Is there a way to feed MPS a fence to use?
-
Sorry, that wasn’t the sample I intended. I think what you want are MTLEvents, which are command buffer-level objects that allow more flexible specification of sync boundaries for heap-allocated and non-tracked resources: https://developer.apple.com/documentation/metal/advanced_command_setup/image_filter_graph_with_heaps_and_events …
-
Oh I see, so I can encode MTLEvents in between MPS kernels so that they are chained in a serial order. Do you think it will introduce comparable overhead as device-memory resources with automatic hazard tracking?
-
Difficult to say. On the one hand, by going manual, you’re reducing the work done by the framework/driver. On the other, it might be tricky to place events and order work optimally. Best to ask a profiler.
End of conversation
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.