Create the RDCMTL descriptor struct in the ObjC hook and pass it to the C++ wrapped APIs
ie.
WrappedMTLDevice::newTextureWithDescriptor takes a RDMTL::TextureDescriptor &
WrappedMTLDevice::newRenderPipelineStateWithDescriptor takes a RDMTL::RenderPipelineDescriptor &
This means the wrapping and unwrapping of resources in the descriptor structs is handled by the conversion methods for the structs
METAL_NOT_HOOKED
Get class name directly from self pointer instead of getting the class type from self and then the class name from the class type
Change the log to be an RDCERR instead of an RDCWARN
METAL_NOT_IMPLEMENTED_ONCE
Change the log to be an RDCWARN instead of RDCDEBUG to match METAL_NOT_IMPLEMENTED macro
* If the popmarker inserted at the end of an indirect multi-draw is selected
this points past the end of the normal draws, but we don't want to replay that
extra draw.
* Unifying these views means that constant buffers have all the same
reformatting and it avoids having multiple paths for what is now effectively
the same control (a buffer can either have fixed data, repeating data, or
both)
* GL and Vulkan allow buffers to have fixed variables before a trailing AoS
unbounded array. These fixed variables can't be easily displayed in a table
and previously we skipped them. Now we display these in a tree format.
* We also support formats which don't have an unbounded array at all and display
these just with the tree. This will allow the BufferViewer to subsume the
capabilities of the ConstantBufferPreviewer (though it needs to handle opaque
non-buffer-backed variables, and slot-following).
* These elements are consumed but not shown, so the offsets of subsequent
elements still act as if they're there. This may be more convenient than
specifying a manual offset on the next element or a struct size.
* There's no reason to make users aware that the mesh viewer and buffer viewer
are implemented in a common way, they are very different and should be
documented separately.
* This hasn't updated the buffer viewer documentation with the recently added
features.
* This allows the calling code to pass a hint of what packing is known or likely
to be used, meaning less generated manual offsetting/padding when the implicit
rules cover it.
* Instead of having a global tight/non-tight we now let the format string
specify the packing rules (defaulting to scalar - i.e. tight packing as
before), and use the resulting properties to calculate packing.