2624 Commits

Author SHA1 Message Date
Bill Hollings
27aaaf50c1
Merge pull request #1593 from billhollings/fix-intel-zombie-object
Add workaround for zombie memory bug in Intel Iris Plus Graphics driver when repeatedly retrieving GPU counter sets.
2022-05-12 14:12:56 -04:00
Bill Hollings
695a54037b Add workaround for zombie memory bug in Intel Iris Plus Graphics
driver when repeatedly retrieving GPU counter sets.
2022-05-12 11:40:02 -04:00
Bill Hollings
711231ddf6
Merge pull request #1590 from billhollings/fix-timestamp-fences
Fix error on some Apple GPU's where a vkCmdTimestampQuery() after a renderpass was writing timestamp before renderpass activity was complete.
2022-05-11 15:29:24 -04:00
Bill Hollings
e2168a33db Fix error on some Apple GPU's where a vkCmdTimestampQuery() after a
renderpass was writing timestamp before renderpass activity was complete.

MVKCommandBuffer tracks whether it contains a stage-based timestamp command,
and MVKCommandEncoder updates the timestamp command fence when ending any
Metal command encoder on such a MVKCommandBuffer.

MVKCommandEncoder reorder member variables to avoid layout gaps (unrelated).
MVKCommandBuffer update _commandCount even for single-use immediate command
encoding (unrelated).
2022-05-10 14:51:55 -04:00
Bill Hollings
b8f0828da7
Merge pull request #1587 from billhollings/VK_KHR_separate_depth_stencil_layouts
Add support for VK_KHR_separate_depth_stencil_layouts extension.
2022-05-05 16:09:35 -04:00
Bill Hollings
1bad27cf26 Add support for VK_KHR_separate_depth_stencil_layouts extension.
Add VK_KHR_separate_depth_stencil_layouts and enable its features.
Metal generally ignores image layouts, so nothing further needed.
Update Whats_New.md and MoltenVK_Runtime_UserGuide.md documents
with recently-added extensions.

Passes almost all supported separate_layouts CTS tests, with the
few remaining tests failing due to issues with unrelated capabilities.

Unrelated cleanup:
- MVKDevice enable extensions before features.
- MVKDevice reorder ivar declarations to reduce
  memory layout gaps, and define default values.
- Rename VkSemaphoreStyle to MVKSemaphoreStyle to
  remove potential conflicts with Vulkan Vk name space.
2022-05-05 15:55:26 -04:00
Bill Hollings
790b7aa594
Merge pull request #1584 from billhollings/VK_EXT_separate_stencil_usage
Add support for VK_EXT_separate_stencil_usage extension.
2022-04-30 11:01:57 -04:00
Bill Hollings
cd5b336bec Add support for VK_EXT_separate_stencil_usage extension. 2022-04-29 22:14:05 -04:00
Bill Hollings
718113cd52
Merge pull request #1583 from billhollings/update-spirv-cross
Update to latest SPIRV-Cross.
2022-04-28 10:51:23 -04:00
Bill Hollings
e00fef5b69 Update to latest SPIRV-Cross.
MSL: Emit interface block members of array length 1 as arrays instead of scalars.
2022-04-27 15:02:14 -04:00
Bill Hollings
8c35b085a5
Merge pull request #1578 from smanhaeve/patch-1
Fix vkSetMoltenVKConfigurationMVK function typedef
2022-04-26 11:37:15 -04:00
smanhaeve
409101788a
Fix vkSetMoltenVKConfigurationMVK function typedef
Fixes issue https://github.com/KhronosGroup/MoltenVK/issues/1577
2022-04-25 14:37:00 +02:00
Bill Hollings
1236d2f535
Merge pull request #1575 from billhollings/VK_KHR_dynamic_rendering
Add support for VK_KHR_dynamic_rendering extension
2022-04-21 15:14:58 -04:00
Bill Hollings
abaafd09d7
Update MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm
Co-authored-by: Chip Davis <cdavis@codeweavers.com>
2022-04-21 14:41:22 -04:00
Bill Hollings
a1f3508f8e Optimize reuse of transient renderbuffer and framebuffer for dynamic rendering.
- MVKRenderPass set rendering flags from outside instead of via constructor.
- MVKCommandEncodingContext tracks and manages lifespan of renderpass and
  framebuffer, potentially across multiple MVKCommandEncoders.
- When resuming a suspended dynamic renderpass, reuse the renderpass and
  framebuffer cached in MVKCommandEncodingContext, otherwise create them.
- MVKCommandBuffer::begin() creates local copy of dynamic rendering color formats.
2022-04-19 14:53:15 -04:00
Bill Hollings
751dac4391 Support attachment clearing when some clearing formats are not specified.
Exclude attachment from shader if clearing format is not specified.
2022-04-19 09:02:56 -04:00
Bill Hollings
e3f8ce4ebc Add support for VK_KHR_dynamic_rendering extension.
- MVKDevice track enabling VK_KHR_dynamic_rendering extension features.
- Add MVKCmdBeginRendering and MVKCmdEndRendering command objects
  and associated command pools.
- Add MVKCommandEncoder::beginRendering() which dynamically instantiates
  temporary MVKRenderpass and (imageless) MVKFramebuffer objects to handle
  equivalent renderpass operations.
- MVKCommandEncoder retain and release subpass and framebuffer objects
  to allow transient dynamic instances to be created and destroyed.
- Add support functions to create MVKRenderpass and (imageless)
  MVKFramebuffer objects from VkRenderingInfo.
- MVKRenderpass track VkRenderingFlags.
- MVKRenderSubpass create and track an internal VkPipelineRenderingCreateInfo.
- MVKRenderPassAttachment support LoadOp and StoreOp behavior for
  dynamic rendering suspend and resume.
- Refactor viewMask processing to permit operations on viewMask outside of
  MVKGraphicsPipeline without requiring the presence of an MVKSubpass.
- MVKGraphicsPipeline extract VkPipelineRenderingCreateInfo from MVKRenderSubpass
  if available, or VkGraphicsPipelineCreateInfo::pNext if not.
- MVKCommandBuffer track VkCommandBufferInheritanceRenderingInfo (currently unused).
- (unrelated) vulkan.mm move location of VK_EXT_sample_locations functions
  for layout readability consistency.
2022-04-19 07:27:41 -04:00
Bill Hollings
6b3ef7b51a
Merge pull request #1573 from billhollings/push-constant-binding-fix
Fix error where previously bound push constants can override a descriptor buffer binding
2022-04-18 16:36:31 -04:00
Bill Hollings
be7a68153f Fix error where previously bound push constants can override a descriptor
buffer binding used by a subsequent pipeline that does not use push constants.

This error was previously introduced in 2a17f75, where a push constants
binding could override the Metal buffer binding 0 of a subsequent pipeline
that does not use push constants.

When pipeline binding is encoded, track which stages use push constants
and only encode push constants if the pipeline and stage uses them.

(unrelated) Make use of MVKResourcesCommandEncoderState::getPipeline() consistent.
2022-04-18 15:32:40 -04:00
Bill Hollings
023ec50e3c
Merge pull request #1572 from billhollings/VK_KHR_portability_enumeration
Actually update MoltenVK version to 1.1.10.
2022-04-15 18:07:44 -04:00
Bill Hollings
370fead8b7 Actually update MoltenVK version to 1.1.10. 2022-04-15 17:52:11 -04:00
Bill Hollings
106b12cc58
Merge pull request #1571 from billhollings/VK_KHR_portability_enumeration
MoltenVK_icd.json support VK_KHR_portability_enumeration extension.
2022-04-15 14:28:41 -04:00
Bill Hollings
9fa373ebbb MoltenVK_icd.json support VK_KHR_portability_enumeration extension.
Update README.md and MoltenVK_Runtime_UserGuide.md to document the impact
of the VK_KHR_portability_enumeration extension during runtime loading on macOS.
Update MoltenVK version to 1.1.10.
2022-04-15 13:57:10 -04:00
Bill Hollings
d2fe5e1ad0
Merge pull request #1568 from billhollings/sdk-1.3.211
Update dependency libraries to match Vulkan SDK 1.3.211.
2022-04-09 17:39:49 -04:00
Bill Hollings
be6f7a5083 Update dependency libraries to match Vulkan SDK 1.3.211.
Update What's New document.
2022-04-09 16:28:41 -04:00
Bill Hollings
2a565ef8e7
Merge pull request #1566 from billhollings/VK_EXT_sample_locations
Add support for VK_EXT_sample_locations extension.
2022-04-08 21:05:52 -04:00
Bill Hollings
3c0644f36a Add support for VK_EXT_sample_locations extension.
Supports only setting custom sample locations in subpasses via
vkBeginRenderpass. Does not support setting custom sample locations via
vkCmdBindPipeline or vkCmdSetSampleLocationsEXT, although collects that
info for possible future enhancements.

- MVKPhysicalDevice track platform support and respond to property queries.
- MVKCmdBeginRenderPassBase collect subpass custom sample locations.
- MVKPipeline support dynamic state values beyond 31.
- MVKPipeline collect custom sample locations.
- Add MVKCmdSetSampleLocations to support vkCmdSetSampleLocations
  to collect dynamic custom sample locations.
- MVKCommandEncoder support collecting custom sample positions from subpass
  and dynamic, and set into MTLRenderPassDescriptor for each Metal render pass.
- MVKArrayRef add assignment operator.
- Add MVKPhysicalDeviceMetalFeatures::programmableSamplePositions.
- Update VK_MVK_MOLTENVK_SPEC_VERSION to version 34.
- MVKCommandBuffer.h remove obsolete comment documentation.
- Update Whats_New.md.
2022-04-08 18:50:32 -04:00
Bill Hollings
148823a841
Merge pull request #1564 from bangnoise/pr/IOSurface-CF-leaks
Fix leak of CoreFoundation objects during calls to vkUseIOSurfaceMVK()
2022-04-08 13:06:05 -04:00
Bill Hollings
8ad7ee8984
Merge pull request #1563 from bangnoise/pr/vkGetMTLCommandQueueMVK
Fix crash in vkGetMTLCommandQueueMVK()
2022-04-08 13:05:47 -04:00
Tom Butterworth
9f5bd82bef Fix leak of CoreFoundation objects during calls to vkUseIOSurfaceMVK()
A small leak occurs if no existing IOSurface is provided to vkUseIOSurfaceMVK() because CoreFoundation objects returned from functions with Create in their name must be released with CFRelease()
2022-04-08 10:44:13 +01:00
Tom Butterworth
41fabde757 Fix crash in vkGetMTLCommandQueueMVK()
MVKQueue* cannot be cast from VkQueue, use MVKQueue::getMVKQueue() instead
2022-04-08 10:12:21 +01:00
Bill Hollings
76aca81fac
Merge pull request #1561 from BeastLe9enD/master
Added optimized support for VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT when MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS is used
2022-04-05 14:12:03 -04:00
BeastLe9enD
1955c161a6
Added optimized support for VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT when MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS is used 2022-04-05 18:01:52 +02:00
Bill Hollings
32f5bee40d
Merge pull request #1557 from billhollings/vulkan-extensions-os-version-support
Use MVKExtensions.def to check OS version support for all Vulkan extensions.
2022-04-03 22:11:27 -04:00
Bill Hollings
d84f6b69cf Use MVKExtensions.def to check OS version support for all Vulkan extensions.
In the interests of Single Source of Truth, OS version support is now populated
in MVKExtensions.def, and that info is used to validate each Vulkan extension
against OS version support for the functionality required by the extension, with
the default being unsupported, unless otherwise indicated in MVKExtensions.def.

- Add OS version info for each extension in MVKExtensions.def.
- mvkIsSupportedOnPlatform() checks every extension for OS version support,
  not just a separately-populated list of OS version limitations (that defaulted
  to supported, instead of unsupported).
- Visually clean up MVKExtensions.def for easier reading.
2022-04-03 20:31:55 -04:00
Bill Hollings
6e8de7c696
Merge pull request #1550 from billhollings/remove-std-iterator
Remove use of C++17 deprecated feature: std::iterator.
2022-03-23 10:25:23 -04:00
Bill Hollings
0bb6917979 Remove use of C++17 deprecated feature: std::iterator.
std::iterator is deprecated in C++17, which triggers multiple compilation warnings.
Update MVKSmallVector::iterator to explicitly specify iterator traits,
instead of subclassing from std::iterator.
Qualify use of std::remove() in mvkRemoveAllOccurances(),
to eliminate resolution ambiguity.
2022-03-22 10:03:56 -04:00
Bill Hollings
7df32cdc06
Merge pull request #1549 from billhollings/xcode-update
Update Xcode build settings validation, and GitHub CI settings.
2022-03-21 22:53:29 -04:00
Bill Hollings
6011bfe05d Update Xcode build settings validation, and GitHub CI settings.
Update to Xcode 13.3 build settings validation.
Update GitHub CI settings to latest macOS and Xcode 13.2.1.
2022-03-21 20:31:33 -04:00
Bill Hollings
fada8e08c7
Merge pull request #1547 from billhollings/pipeline-layout-compatibility-fixes
Fixes to pipeline layout compatibility
2022-03-16 14:05:22 -04:00
Bill Hollings
1b6b8bc992 Move implicit buffers to top of Metal buffer index range.
To better support pipeline layout compatibility between pipelines with differing
quantities of descriptor sets, move the buffer indexes used by implicit buffers to
the top end of the Metal buffer index range, below vertex and tessellation buffers.

MVKPipeline calculates implicit buffer indexes based on vertex and tessellation
buffers required by pipeline, instead of based on descriptors in MVKPipelineLayout.

MVKPipeline track buffer index counts consumed by MVKPipelineLayout, to validate
room for implicit buffers.
2022-03-15 11:52:15 -04:00
Bill Hollings
2a17f757e1 Fixes to pipeline layout compatibility.
For pipeline layout compatibility, consume the Metal resource indexes in this order:
- Consume a fixed number of Metal buffer indexes for Metal argument buffers,
  but only consume them if Metal argument buffers are not being used.
- Consume push constants  Metal buffer index before descriptor set resources,
  but only consume it if the stage uses push constants.
- Consume descriptor set bindings.

In MVKPipelineLayout, separate tracking resource counts from push constants
indexes, and move push constant indexes ahead of descriptor bindings.
In MVKPipeline, track which stages use push constants.
Remove unused and obsolete function declaration in MVKDescriptorSet.h.
2022-03-14 16:29:22 -04:00
Bill Hollings
9cfc946a7c
Merge pull request #1546 from billhollings/retained-resource-object-fixes
Fixes to optimize resource objects retained by descriptors beyond their lifetimes.
2022-03-13 17:05:30 -04:00
Bill Hollings
9f4243ff91 Fixes to optimize resource objects retained by descriptors beyond their lifetimes.
For a resource object that can be retained by descriptors beyond its lifetime,
release memory resources when the object is destroyed by the app. This includes
objects of type MVKBuffer, MVKBufferView, MVKImageView, and MVKSampler.

When the app destroys an MVKBuffer, also detach from the MVKDeviceMemory,
to fix a potential race condition when the app updates the descriptor on
one thread while also freeing the MVKDeviceMemory on another thread.

MVKImageView guard against detached planes while in descriptor.

Add comment to clarify how destroy() is called from release().
2022-03-13 14:54:54 -04:00
Bill Hollings
eba6a04a91
Merge pull request #1545 from billhollings/avoid-adjusting-sRGB-clear-colors
Avoid adjusting SRGB clear color values by half-ULP.
2022-03-11 12:51:46 -05:00
Bill Hollings
cf3b5968ef Avoid adjusting SRGB clear color values by half-ULP.
For GPUs that round float clear colors down, a half-ULP adjustment is performed
on normalized formats. But this adjustment should not be performed on SRGB formats,
which Vulkan requires to be treated as linear, with the value managed by the app.
2022-03-11 11:24:05 -05:00
Bill Hollings
cd2146c229
Merge pull request #1544 from billhollings/fix-maxSamplerAllocationCount
Remove limit on VkPhysicalDeviceLimits::maxSamplerAllocationCount when not using Metal argument buffers.
2022-03-10 21:44:01 -05:00
Bill Hollings
a91a3d000a Remove limit on VkPhysicalDeviceLimits::maxSamplerAllocationCount
when not using Metal argument buffers.
2022-03-10 18:12:54 -05:00
Bill Hollings
d3b5d113f7
Merge pull request #1543 from billhollings/fix-gpu-counter-mtlfence-deletion
Fix deletion of GPU counter MTLFence while it is being used by MTLCommandBuffer.
2022-03-10 13:51:34 -05:00
Bill Hollings
2aadca70ce Fix deletion of GPU counter MTLFence while it is being used by MTLCommandBuffer.
Move release of GPU counter MTLFence from MVKCommandEncoder destructor
to MTLCommandBuffer completion handler.
2022-03-10 13:25:09 -05:00