Add MVKQueueFullCommandBufferSubmission template class of to support MVKSmallVector
allocations of varying size based on command buffer count and keep allocs on the stack.
MVKQueueCommandBufferSubmission optimize wait and signal vector preallocations.
Clean up vector preallocation in MVKDescriptorSet and MVKDescriptorTypePreallocation.
Make SPIRVReflection global functions inline and templated.
Remove SPIRVReflection.cpp.
Allow MVKSmallVector to be sorted by supporting
random access from MVKSmallVector::iterator.
Redefine MVKGraphicsResourcesCommandEncoderState::ShaderStage
as MVKResourcesCommandEncoderState::ResourceBindings.
Add ResourceBindings::reset() function.
MVKComputeResourcesCommandEncoderState replace discrete member variables
with a single ResourceBindings member variable.
Rename MVKGraphicsResourcesCommandEncoderState::_shaderStage
member variable to _shaderStageResourceBindings.
In stage iterations, replace < kMVKShaderStageCompute with <= kMVKShaderStageFragment.
* vkGetRefreshCycleDurationGOOGLE is implemented for iOS using UIScreen maximumFramesPerSecond. I did not implement it for macOS (just hard-coded to 60). It looks like doing it will require using CGDisplayModeGetRefreshRate
* vkGetPastPresentationTimingGOOGLE fills in the actualPresentationTime, but Metal does not provide the earlierPresentTime or the presentMargin as far as I can tell so earliestPresentTime is set to actualPresentTime and presentMargin is zero.
* Tested mostly on iOS - confirmed with Metal System Trace that desiredPresentTime works properly aligning the presentation correctly with vsync.
Replicate MVKVector.h and MVKVectorAllocator.h into MVKSmallVector.h and
MVKSmallVectorAllocator.h, and collapse class hierarchies.
Add MVKArrayRef struct to allow the contents of MVKSmallVector and MVKVector
to be passed between functions consistently.
Add contents() function to MVKVector to return MVKArrayRef.
MVKCmdCopyImage and MVKCmdBlitImage move passing MVKCommandUse
from setContent() to second encode() function.
MVKCmdPipelineBarrier reorder member variables.
MVKCmdCopyImage, MVKCmdBlitImage, MVKCmdResolveImage generate derivative
arrays inline during encoding instead of holding as member variables.
Separate MVKCmdBlitImage from MVKCmdCopyImage and derive from MVKCommand instead.
Convert to template classes MVKCmdCopyImage, MVKCmdBlitImage, MVKCmdResolveImage,
MVKCmdCopyBuffer, MVKCmdBufferImageCopy, MVKCmdClearAttachments, MVKCmdClearImage.
Add MVKAddCmdFrom3Thresholds and MVK_CMD_TYPE_POOLS_FROM_3_THRESHOLDS()
macros to support 3 template thresholds.
Add MVKCmdClearImage subclasses MVKCmdClearColorImage and MVKCmdClearDepthStencilImage.
MVKCmdClearAttachments consolidate clear value arrays.
Reorder member variables in commands to avoid internal memory gaps.
Set enum MVKCommandUse type to uint8_t.
MVKCmdPushConstants convert to a template class based on push constant size.
MVKCmdPushDescriptorSet reduce count of pre-allocated VkWriteDescriptorSets,
in recognition that numerous dynamic allocations necessarily happen anyway.
Cleanup member variable order in commands to avoid internal memory gaps.
Split MVKCmdBindDescriptorSetsStatic into separate subclasses,
depending on use of dynamic offsets, and make them template classes
based on descriptor set count.
Add MVKPipelineBarrier struct to consolidate barrier specs, reduce
memory use in each, and standardize barrier info into one collection.
MVKCmdPipelineBarrier uses templated collection sizes.
Add mvkPrintSizeOf() macro to simplify printing type sizes.
Use uint16_t instead of uint32_t for Metal resource indexes in binding structures.
MVKIndexMTLBufferBinding::mtlIndexType track MTLIndexType as uint8_t.
Convert MVKCmdBindVertexBuffers to template class.
Add MVKAddCmdFromTwoThresholds() macro in vulkan.mm.
Add MVK_CMD_TYPE_POOLS_FROM_TWO_THRESHOLDS() macro in MVKCommandTypePools.def.
Add second threshold to MVKCmdBeginRenderPass.
MVKCmdBeginRenderPass don't hold VkRenderPassBeginInfo.
Convert MVKCmdBeginRenderPass and MVKCmdExecuteCommands to template classes.
MVKCommandBuffer::recordBeginRenderPass() pass MVKLoadStoreOverrideMixin
instead of MVKCmdBeginRenderPass.
MVKCommandBuffer::recordEndRenderPass() pass nothing.
Add MVKAddCmdFromThreshold() macro in vulkan.mm.
Add MVK_CMD_TYPE_POOLS_FROM_THRESHOLD() macro in MVKCommandTypePools.def.
Move null tests on destroy calls from vulkan.mm to MVKDevice and MVKInstance.
Don't bother testing for null when spec says a param must not be null.
Invert remaining null tests so they don't abort.
Remove MVKResource::bindDeviceMemory2() and MVKBindDeviceMemoryInfo struct.
Add separate MVKBuffer::bindDeviceMemory2() and MVKImage::bindDeviceMemory2()
functions with distinct params, and delegate to MVKResource::bindDeviceMemory().
Functions and functionality supported, but don't currently do anything
until Metal-friendly enumerations added to VkExternalMemoryHandleTypeFlagBits.
Updated What's New document.