Metal viewports and scissors are twice the size of the Vulkan equivalents,
and internal caches are preallocated for 16 of each to avoid dynamic allocations.
Hold the Vulkan viewports and scissors, and convert just before sending them to Metal.
MVKCommandEncoder::clipToRenderArea() use VkRect2D instead of MTLScissorRect.
MVKCommand constructor not longer take MVKCommandTypePool.
Remove MVKCommand::returnToPool().
MVKCommandTypePool no longer track MVKCommandPool.
Remove MVKCommand.mm.
Pass MVKCommandPool to MVKCommand::returnToPool() function.
Add pure virtual MVKCommand::getTypePool() to reference correct
type pool in MVKCommandPool for a subclass instance.
Add MVKFuncionOverride_getTypePool() macro template to define
MVKCommand::getTypePool() overrides in subclasses.
Rename MVKCommandPool::_cmdPushSetWithTemplatePool to
_cmdPushDescriptorSetWithTemplatePool for consistency
with macro template support.
According to the Vulkan spec:
> * If `buffer` is a `VkBuffer` not created with the
> `VK_BUFFER_CREATE_SPARSE_BINDING_BIT` bit set[...] then the
> `memoryTypeBits` member always contains at least one bit set
> corresponding to a `VkMemoryType` with a `propertyFlags` that has
> both the `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` bit and the
> `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT` bit set. In other words,
> mappable coherent memory **can** always be attached to these
> objects.
There is no exception for texel buffers. Even though desktop Metal
disallows textures in shared memory, even linear textures created from a
buffer, we have to advertise host-coherent memory for texel buffers.
Some applications actually depend on this behavior, so it's not just a
theoretical concern.
To support host-coherent texel buffers, we implicitly create a managed
buffer and copy data between the device memory and the managed buffer,
just like for a linear image.
Signed-off-by: Chip Davis <cdavis@codeweavers.com>
Naturally, Metal complains when a fragment shader write to a
`[[depth]]` output, but there be no depth attachment. I imagine that it
will also complain if the shader write to ``[[stencil]]`` with no
stencil attachment, or it write to a ``[[color(n)]]`` output with no
corresponding attachment.
Added MVKQueuePerformance::frameInterval performance tracker.
Added MVKPerformanceTracker::latestDuration to track duration of most recent activity.
Swapchain performance can be retrieved with other activity performance through
vkGetPerformanceStatisticsMVK().
Performance logging of all activities can be performed periodically
on a frame-count basis, or inline as the activity occurs.
Add MVK_CONFIG_PERFORMANCE_LOGGING_INLINE env var to enable/disable
logging of performance of each activity when it happens.
Removed vkGetSwapchainPerformanceMVK() and MVKSwapchainPerformance from API.
Updated VK_MVK_MOLTENVK_SPEC_VERSION to 25.
Updated MoltenVK version to 1.0.42.
Add MVKPresentableSwapchainImage and MVKPeerSwapchainImage subclasses to
MVKSwapchainImage, with MVKPresentableSwapchainImage instances created inside
swapchain, and MVKPeerSwapchainImage instances created using vkCreateImage().
MVKPeerSwapchainImage retrieve and share CAMetalDrawable from corresponding
MVKPresentableSwapchainImage.
Remove obsolete MVKSwapchainImageAvailability::waitCount member that was initializing
randomly and corrupting swapchain image acquisition ordering evaluations.
Rename several member functions to clarify purpose.
Move call to MVKSwapchainImage::resetMetalDrawable() from immediately after
presentation until request to acquire, to preserve image content for copying
after presentation in cases such as an app screen capture operation.
Testing indicates this deferral has little or no adverse effect on the performance
of retrieving the drawable when next needed.
See GitHub issues 792 & 832. Depth/stencil textures issued from MTLHeap can be flaky in
some situations, including depth-only rendering on Intel GPUs, and corruption when DS
texture with sampling usage is combined with non-DS texture on a single placement heap.
Add MVKPixelFormats::getMTLTextureUsageFromVkImageUsageFlags(), which takes
into account limitations of pixel formats.
MVKImage remove getMTLTextureUsage(), getSupportsAnyFormatFeature()
and getSupportsAllFormatFeatures().
MVKPixelFormats tracks MVKPhysicalDevice, not just MVKVulkanAPIObject.
MVKPixelFormats refactor constructors and internal retrieval of MTLDevice.
Add MTLPixelFormat to mvkMTLTextureUsageFromVkImageUsageFlags() params for compatibility.
Remove optionality of hasResolveAttachment param in
mvkMTLStoreActionFromVkAttachmentStoreOp() to support C calling.
Update Cereal archive structs to match latest MoltenVK and SPIRV-Cross structs.
Fix recent error that caused pipeline cache data to be ignored during loading.
Update to Vulkan-Headers version 1.2.135.
Update to latest SPIRV-Cross version.
Update Whats_New.md document.
Replace MVKImageView::getSwizzledMTLPixelFormat() with static validateSwizzledMTLPixelFormat()
to support querying format support without having to create fake MVKImageView instance from
MVKPhysicalDevice::getImageViewIsSupported().
Remove ability for MVKDeviceTrackingMixin and subclasses to work without a MVKDevice.
Remove mvkPlatformPixelFormats().
vkGetPhysicalDeviceImageFormatProperties() tests whether format supports MSAA.
vkCreateRenderPass() validate each attachment supports format capabilities required
by each subpass that uses it.
vkCmdResolveImage() validate that destination attachment supports being resolved to.
MVKPixelFormats add getVkFormatCapabilities(), getMTLPixelFormatCapabilities(),
and vkFormatIsSupportedOrSubstitutable().
Rework type handling in flag functions in MVKFoundation.h.
taking into consideration variations across MTLDevice Features Sets.
Simplify contents and names in MVKMTLFmtCaps enum.
Add MVKVkFormatFeatureFlags enum to map capabilities from MVKMTLFmtCaps to VkFormat.
Derive three VkFormatFeatureFlags in VkFormatProperties from documented
MTLPixelFormat capabilities, customizing based on MTLDevice feature sets.
Include VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT and
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT in writable features.
MVKPixelFormats modify VkFormatProperties unit test to log differences.
MVKPixelFormats build and modify Metal format maps before building Vulkan format maps.
MVKMTLFormatDesc remove sinceOSVersion and isSupported() checks format caps instead.
Remove datafilling of OS versions in MVKMTLFormatDesc.
MVKPixelFormats improve readability of datafilling of VkFormat, MTLPixelFormat,
and MTLVertexFormat capabilities using dynamic symbol macros to allow abbreviations.
Add MVKMTLFmtCaps enum to track MTLPixelFormat capabilities, and populate table of
default MTLPixelFormat and MTLVertexFormat capabilities.
Add mvkSelectPlatformValue() template function to support
selecting values based on the OS platform.