752 Commits

Author SHA1 Message Date
Chip Davis
a2533116b3 Support the VK_KHR_uniform_buffer_standard_layout extension.
This happens to fall out of the way structure layouts are handled in
SPIRV-Cross.
2019-07-16 00:01:48 -05:00
Bill Hollings
d1a6b5a40d Remove exposure to leakable instances of NSString, NSArray & NSDictionary.
Reduce creation of autoreleased instances of NSString, NSArray & NSDictionary.
Ensure remaining are covered by deliberate autorelease pools.
2019-07-15 18:59:52 -04:00
Chip Davis
fc13aec2af Advertise the VK_EXT_shader_stencil_export extension.
This is supported by Mac GPU Family 2 starting on macOS 10.14, and Apple
GPU Family 5 starting on iOS 12.

Supporting this is a bit tricky. Because only some devices support this
extension, we now have to keep track of supported device extensions per
device.
2019-07-15 12:12:39 -05:00
Bill Hollings
8bcfef228b Fix memory leak in debug marker and debug utils labelling. 2019-07-15 10:17:55 -04:00
Bill Hollings
8cbc951cc3 Texture memory requirements don't use shared storage on macOS.
MVKBuffer getMemoryRequirements() ensure texel buffers don't use shared memory.
MVKImage getMemoryRequirements() ensure textures don't use shared memory.
MVKBufferView set MTLTexture storageMode & cpuCacheMode directly from MTLBuffer.
2019-07-12 17:00:18 -04:00
Bill Hollings
608028a291 MVKDeviceMemory keep MTLResourceOptions aligned with MTLStorageMode & MTLCPUCacheMode. 2019-07-12 15:20:05 -04:00
Bill Hollings
f01434ebb1 MVKCmdClearImage return error if texture is not renderable. 2019-07-12 14:40:23 -04:00
Bill Hollings
f46575df60 Move push constant binding to vkCmdBindPipeline() from vkCmdBindDescriptorSet(). 2019-07-10 17:53:44 -04:00
Bill Hollings
04c7e4e8f0 MVKCmdBlitImage clear _mvkImageBlitRenders vector on reuse. 2019-07-10 10:46:48 -04:00
Bill Hollings
d926424bfe MVKCmdResolveImage support textures of different sizes. 2019-07-09 17:56:10 -04:00
Bill Hollings
e35426d4c3 MVKCmdBlitImage support multisample textures.
MVKCmdCopyImage track src & dest sample counts.
MVKRPSKeyBlitImg track dest sample count.
2019-07-09 17:16:42 -04:00
Bill Hollings
5289d10746 MVKCmdBlitImage support blit between different texture formats.
MVKRPSKeyBlitImg track both src and dst texture formats.
MVKCmdCopyImage fix copyable comparison.
2019-07-09 15:45:16 -04:00
Bill Hollings
4915b1ec0c Allow MVKCmdBlitImage to use texture view and image->buffer->image copying
from parent MVKCmdCopyImage class.

Refactor MVKCmdCopyImage & MVKCmdBlitImage to hold corresponding Vulkan structs.
MVKCommandResourceFactory::getBlitFragFunction() only pass srcSlice.
2019-07-09 10:14:42 -04:00
Bill Hollings
5b7038b21d vkCmdCopyImage() adjust dest extent when copying from compressed to uncompressed images.
Add MVKImage::getIsCompressed().
MVKPhysicalDevice::getImageFormatProperties() optimize use of mvkFormatTypeFromVkFormat().
2019-07-08 22:28:33 -04:00
Bill Hollings
35d40a83b0 vkCmdCopyImage() support copying between compressed and uncompressed formats. 2019-07-05 19:39:52 -04:00
Bill Hollings
5e0214d3e1 MVKCmdBufferImageCopy don't supply bytes per image if not array texture.
MVKRPSKeyBlitImg::isArrayType() include multisample array type.
Clean up formatting in texture type functions in mvk_datatypes.mm.
2019-07-05 11:21:23 -04:00
Bill Hollings
c593cebce5 MVKCmdCopyImage validate that formats are compatible for copying.
MVKCmdBlitImage use same validation to use direct copy when possible.
2019-07-04 19:19:11 -04:00
Bill Hollings
423944d01e Rename mvkAreFlagsEnabled() & mvkAreOnlyAnyFlagsEnabled()
functions for consistency with similar functions.
2019-07-04 16:08:12 -04:00
Bill Hollings
74e38659aa Set Metal texture usage to allow texture copy via view.
MVKCmdCopyImage uses texture view if formats different. Enable
MTLTextureUsagePixelFormatView for VK_IMAGE_USAGE_TRANSFER_SRC_BIT.
Refactor mvkMTLTextureUsageFromVkImageUsageFlags() to clarify Metal usages
and enable views on depth-stencil attachments by default.
2019-07-04 15:50:12 -04:00
Bill Hollings
aa6a10570a Support VK_EXT_metal_surface extension.
Modify demo apps to pass OS layer instead of view.
2019-07-03 20:23:43 -04:00
Bill Hollings
8df685a9dc Fix race condition between swapchain image destruction and presentation completion callback.
Retain MVKSwapchainImage before passing to MTLCommandBuffer completion handler.
Redesign MVKVulkanAPIObject retain/release functionality using atomic ref count
instead of mutex locks, to simplify design and improve performance.
2019-06-30 17:28:52 -04:00
Bill Hollings
fb4dd158d0 Document each function in vk_mvk_moltenvk.h to indicate they cannot be used
with objects retrieved through the Vulkan SDK Loader and Layers framework.
2019-06-30 11:16:08 -04:00
Bill Hollings
1b4124d4aa For shaders created directly from MSL, set function name from
VkPipelineShaderStageCreateInfo::pName.
2019-06-29 19:18:32 -04:00
Bill Hollings
84ea825ea3 Separate SPIRVToMSLConverterContext into input config and output results.
Refactor SPIRVToMSLConverterContext into distinct SPIRVToMSLConversionConfiguration
and SPIRVToMSLConversionResults for conversion input and output, respectively.
Update to latest SPIRV-Cross version.
Update What's New document.
2019-06-29 18:01:07 -04:00
Bill Hollings
a0f0c78b34 Expand MVK_CONFIG_TRACE_VULKAN_CALLS to optionally log Vulkan call timings.
Update What's New document.
2019-06-21 22:56:13 -04:00
Bill Hollings
e6afb1fedb Add MTLCommandBuffer completion timing performance tracking option.
Add MVKPerformanceStatistics::MVKQueuePerformance::mtlCommandBufferCompletion.
Increment VK_MVK_MOLTENVK_SPEC_VERSION to 21.
2019-06-20 17:31:19 -04:00
Bill Hollings
11482aed03 Merge branch 'master' into Metal-3.0 2019-06-16 14:35:49 -04:00
Bill Hollings
64d7e07243 Support immutable depth compare samplers as constexpr samplers hardcoded in MSL.
On iOS GPU family 2 and earlier:
  - Allow immutable samplers to be passed to SPIRV-Cross in a format
    they can be output as hardcoded constexpr samplers in MSL.
  - Validate depth compare samplers are only used as immutable.

MVKMVKPipelineLayout & MVKDescriptorSetLayout can take null MVKCommandEncoder
to perform a validation pass when binding or pushing.
Reduce redundancy by combining SPIRVToMSLConverterContext structs
with compatible SPIRV-Cross structs.
Update MoltenVK version to 1.0.36.
2019-06-15 01:47:13 -04:00
Bill Hollings
e4466ef8db Merge branch 'master' into Metal-3.0 2019-06-14 12:11:02 -04:00
Bill Hollings
bf8c7f8bb8 Updates for SDK 1.1.108 release.
Update to latest external dependency libraries.
MVKDescriptorSetLayoutBinding allow binding of null MVKBuffer.
Update What's New document.
2019-06-13 17:11:44 -04:00
Bill Hollings
e755a17907 Report image layer limits for attachments in vkGetPhysicalDeviceImageFormatProperties(). 2019-06-13 14:30:16 -04:00
Bill Hollings
7ba7f1efef Fixes to clearning attachments.
vkCmdClearAttachments(): Return encoder to previous pipeline, depth-stencil & resource state after execution.
Fix issue clearing stencil attachment via renderpass when depth attachment is not being cleared.
2019-06-13 13:21:26 -04:00
Józef Kucia
f9399f70e1 Mark stencil reference value as dirty in MVKCmdClearAttachment command.
MVKCmdClearAttachment sets the stencil reference value to 0 and the stencil
reference value is not properly restored for subsequent draw calls.

I'm affraid there might be more similar bugs in MoltenVK.
2019-06-11 13:51:19 +02:00
Bill Hollings
869ba75d5d Support Metal 3.0.
Add MVKPhysicalDevice functions to support new MTLDevice methods supportsVersion: and supportsFamily:.
MVKPhysicalDevice tests for Metal 3.0 & MSL 2.2.
Move some global functions into the MVKPhysicalDevice class.
Support Xcode 11.
2019-06-09 23:42:06 -04:00
bearishsun
4df8b92e9c Rename vkSetThreadgroupSizeMVK to vkSetWorkgroupSizeMVK to be consistent with Vulkan terminology 2019-06-07 09:59:27 +02:00
Bill Hollings
907c85a54c Guard against missing Metal pipeline states when pipeline compilation fails.
MVKPipeline records whether Metal pipelines are successfully compiled.
Pipeline and draw commands check for valid Metal pipeline state before encoding.
Compute compilation operations can have custom names.
Name Tessellation control stage compute compiler for logging.
2019-06-06 18:27:43 -04:00
bearishsun
7f5a70d802 Added a way to set compute kernel threadgroup size when using MSL source code or MSL compiled code 2019-06-06 11:19:41 +02:00
Bill Hollings
673788cba8 VkSemaphore optionally uses MTLEvent, if available and
MVK_ALLOW_METAL_EVENTS environment variable is enabled.
2019-06-05 11:23:46 -04:00
Bill Hollings
70b78ac7fa Fix crash on pipeline cache merge after VkShaderModule destroyed.
Set MTLFunction label immediately after creation from MVKShaderModule.
Remove _shaderModule reference from MVKShaderLibrary & MVKShaderLibraryCache.
No-op propogateDebugName() function in MVKShaderModule & MVKPipelineCache.
2019-05-30 17:53:11 -04:00
Bill Hollings
3e069c4a78 Add support for the VK_EXT_debug_utils extension.
Dispatch messenger callbacks on any reported message or error.
Add MVKDebugUtilsMessenger class.
Add MVKVulkanAPIObject::getVkObjectType() function and override in all Vulkan API objects.
MVKDevice::getMTLPixelFormatFromVkFormat() take base object for reporting.
2019-05-29 17:26:50 -04:00
Bill Hollings
7d37d5be16
Merge pull request #623 from cdavis5e/no-viewports-assertion
Don't assert if no viewports or scissor rects were given.
2019-05-29 13:00:43 -04:00
Bill Hollings
2e36a38524
Merge pull request #622 from cdavis5e/new-spirv-cross
Update SPIRV-Cross.
2019-05-29 12:59:45 -04:00
Chip Davis
edecd7e804 Don't assert if no viewports or scissor rects were given.
Instead, just avoid calling into Metal. It's perfectly valid to specify
no viewports--for example, if rasterization is disabled. Perhaps, then,
it'd be better to assert that rasterization is disabled when no
viewports are given.
2019-05-29 10:53:56 -05:00
Chip Davis
f075adc93f Update SPIRV-Cross.
This adds support for the `OpArrayLength` instruction.
2019-05-29 10:49:28 -05:00
Bill Hollings
f8a2707b21 Fixes to VK_EXT_debug_marker extension.
vkCmdDebugMarkerBegin() and vkCmdDebugMarkerEnd() attach debug
groups to render encoder if available, or command buffer if not.
Name MTLRenderCommandEncoder first after renderpass,
if named, then command buffer, if named, then usage name.
Add MVKCommandEncoder::endRenderpass() to clean up renderpass components.
MVKShaderLibrary and MVKShaderLibraryCache track shader module to
retrieve name for MTLLibrary and MTLFunction, even when cached offline.
2019-05-29 09:13:01 -04:00
Bill Hollings
fbf2af58a0 Fixes and consolidation of external library header references.
All external library header references consistently include framework references.
Cleanup references to external library headers that are no longer required.
Simplify and consolidate external library header paths in Xcode projects.
Add MVK_EXCLUDE_SPIRV_TOOLS build option to avoid use of SPIRV-Tools library.
Remove all other references to headers within SPIRV-Tools library.
2019-05-28 17:19:43 -04:00
Bill Hollings
c2706f3e6b Fix offset of buffer view relative to buffer offset within device memory. 2019-05-27 17:56:44 -04:00
Bill Hollings
8efebd6485 Guard against null _debugNames being used to build name strings. 2019-05-27 15:48:10 -04:00
Sergey Cherepanov
ce492f4f54 Added missing texelBufferTextureWidth setting in MVKComputePipeline::getMTLFunction.
Fixes #589.
2019-05-27 20:29:18 +03:00
Józef Kucia
1f8967a617 Use device address space when decompressing DXT image data.
Buffers in constant address space must be aligned to 256 bytes on macOS.

This fixes Metal validation errors:

Compute Function(cmdCopyBufferToImage3DDecompressDXTn): the offset into the buffer src that is bound at buffer index 0 must be a multiple of 256 but was set to 12928.
Compute Function(cmdCopyBufferToImage3DDecompressDXTn): the offset into the buffer src that is bound at buffer index 0 must be a multiple of 256 but was set to 78464.
2019-05-27 12:42:11 +02:00