952 Commits

Author SHA1 Message Date
Bill Hollings
a684b47baa
Merge pull request #617 from billhollings/master
Fix offset of buffer view relative to buffer offset within device memory.
2019-05-27 21:10:06 -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
1c3130462a
Merge pull request #616 from billhollings/master
Guard against null _debugNames being used to build name strings.
2019-05-27 17:21:07 -04:00
Bill Hollings
8efebd6485 Guard against null _debugNames being used to build name strings. 2019-05-27 15:48:10 -04:00
Bill Hollings
4e4b654ed7
Merge pull request #614 from ch45er/fix/large_texel_buffer_addressing_in_CS
Added missing texelBufferTextureWidth setting in MVKComputePipeline::getMTLFunction.
2019-05-27 15:34:42 -04:00
Bill Hollings
e173bfe2e6
Merge pull request #612 from jozefkucia/fix-tess-level-attribute
Fix [[attribute]] assignment for tessellation evaluation shaders.
2019-05-27 13:31:14 -04:00
Sergey Cherepanov
ce492f4f54 Added missing texelBufferTextureWidth setting in MVKComputePipeline::getMTLFunction.
Fixes #589.
2019-05-27 20:29:18 +03:00
Bill Hollings
974d2db55d
Merge pull request #613 from jozefkucia/fix-dxt-decompression
Use device address space when decompressing DXT image data.
2019-05-27 12:36:19 -04: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
Józef Kucia
b8abc58b7e Fix [[attribute]] assignment for tessellation evaluation shaders.
This is needed for TessLevelInner and TessLevelOuter in tessellation evaluation
shaders.

Fixes dEQP-VK.tessellation.shader_input_output.tess_level_inner_0_tes.
2019-05-26 13:41:28 +02:00
Bill Hollings
6b556a9625
Merge pull request #608 from billhollings/master
Add support for VK_EXT_debug_marker extension.
2019-05-25 16:54:01 -04:00
Bill Hollings
8d9fa6bbd5 Add support for VK_EXT_debug_marker extension.
Move MVKVulkanAPIObject to its own .h/mm files.
Add MVKCmdDebug.h/mm files.
Change extension on MVKExtensions.cpp and MVKBaseObject.cpp to .mm.
Remove unused command use in MVKQueue submit() and waitIdle() functions.
MVKCommandPool constructor use default isPooling value in MVKCommandTypePool constructors.
MVKSwapchainImage pass image index in constructor.
2019-05-25 16:23:05 -04:00
Bill Hollings
d1aba9ae8b
Merge pull request #606 from billhollings/master
Fix sporadic crash on vkDestroySwapchainKHR().
2019-05-20 16:54:02 -04:00
Bill Hollings
b773e7aaab Fix sporadic crash on vkDestroySwapchainKHR().
MVKSwapchain & MVKSurface init _layerObserver to nil.
2019-05-20 16:13:52 -04:00
Bill Hollings
ffa9ca1b3c
Merge pull request #605 from billhollings/master
Clear attachments using layered rendering only if framebuffer is layered.
2019-05-15 23:18:40 -04:00
Bill Hollings
2da855a6bc Clear attachments using layered rendering only if framebuffer is layered.
Consolidate testing of subpass layered rendering.
Add MVKCommandEncoder _isUsingLayeredRendering member variable.
Track layered rendering enabled in MVKRPSKeyClearAtt.
Rename MVKRPSKeyClearAtt::enable() and ::isEnabled() functions.
Add MVKRPSKeyClearAtt::reset() function.
Consolidate viewport, scissor & attachment limits.
MVKImage add validation for layered rendering when used as attachment.
2019-05-15 22:40:47 -04:00
Bill Hollings
e80b535526
Merge pull request #604 from billhollings/master
Fixes to Metal renderpass layered rendering settings.
2019-05-15 16:43:58 -04:00
Bill Hollings
a52b984a31 Fixes to Metal renderpass layered rendering settings.
Only set MTLRenderPassDescriptor layered rendering properties if layered rendering
is supported and the framebuffer really has multiple layers.
MVKCmdClearImage don't set renderTargetArrayLength, since layers are cleared individually.
Update highest available MTLFeatureSets for use in pipelineCacheUUID.
2019-05-15 15:08:17 -04:00
Bill Hollings
e2f7654d1b
Merge pull request #603 from billhollings/master
Fix crash with multisample layered rendering on older macOS devices.
2019-05-15 13:08:26 -04:00
Bill Hollings
1da02b6d73 Fix crash with multisample layered rendering on older macOS devices.
Add MVKPhysicalDeviceMetalFeatures::multisampleLayeredRendering feature.
MVKCmdClearAttachments shader don't include [[render_target_array_index]] if multisample
and multisampleLayeredRendering is false.
Refactor validation of VkImageCreateInfo when creating an MVKImage.
Validate MVKImage multisample layered array attachments require multisampleLayeredRendering.
2019-05-14 14:22:14 -04:00
Bill Hollings
5dcc6d7501
Merge pull request #598 from mmaldacker/bugix/texture_coherent
texture don't have coherent memory on mac os
2019-05-13 20:59:28 -04:00
Maximilian Maldacker
05d2fcbede check if _deviceMemory is valid before getting storage mode in image. 2019-05-13 20:24:45 +02:00
Bill Hollings
90d9da72aa
Merge pull request #600 from billhollings/master
Automatically update VkPhysicalDeviceProperties::pipelineCacheUUID when SPIRV-Cross revision changes
2019-05-10 19:18:16 -04:00
Bill Hollings
67743ab423 Automatically update VkPhysicalDeviceProperties::pipelineCacheUUID when SPIRV-Cross revision changes.
Generate derived External/SPIRV-Cross/mvkSpirvCrossRevisionDerived.h
header file from SPIRV-Cross_repo_revision file from within fetchDependencies.
MoltenVK includes derived header file and extracts first part of revision hash
for inclusion in pipelineCacheUUID.
Update highest available MTLFeatureSets for use in pipelineCacheUUID.
Suppress echoing of script directory changes in fetchDependencies.
2019-05-10 18:24:19 -04:00
Bill Hollings
32e79892f5
Merge pull request #599 from billhollings/master
Add support for the VK_NV_glsl_shader extension.
2019-05-10 13:08:26 -04:00
Bill Hollings
c3aaf976ae Add support for the VK_NV_glsl_shader extension.
Support runtime shader compilation from GLSL.
Return VK_ERROR_INVALID_SHADER_NV on shader and pipeline compilation errors.
Add MVKShaderCompilationPerformance::glslToSPRIV to track GLSL conversion performance.
Rename MoltenVKGLSLToSPIRVConverter MVKShaderStage enum to MVKGLSLConversionShaderStage
to avoid naming conflicts with MoltenVK MVKShaderStage enum.
Hologram demo load SPIR-V directly instead of using GLSL through either
MoltenVKGLSLToSPIRVConverter or VK_NV_glsl_shader extension.
Update to latest version of VulkanSamples that supports MVKGLSLConversionShaderStage.
2019-05-10 12:21:03 -04:00
Maximilian Maldacker
a615dabe85 texture don't have coherent memory on mac os 2019-05-10 12:27:40 +02:00
Bill Hollings
f79ccdfd94
Merge pull request #596 from billhollings/master
Allow mvkMTLRenderStagesFromVkPipelineStageFlags() to map to all Vulkan stages, by indicating whether the pipeline barrier should come before or after the stages.
2019-05-09 14:02:18 -04:00
Bill Hollings
6b2e225d5c Update logic in mvkMTLRenderStagesFromVkPipelineStageFlags(), and test for renderpass. 2019-05-09 00:34:06 -04:00
Bill Hollings
f5999a8e76 Allow mvkMTLRenderStagesFromVkPipelineStageFlags() to map to all Vulkan stages,
by indicating whether the pipeline barrier should come before or after the stages.
2019-05-08 23:10:48 -04:00
Bill Hollings
35c56db2b8
Merge pull request #595 from billhollings/master
Update to latest version of SPIRV-Cross.
2019-05-08 22:04:24 -04:00
Bill Hollings
04cf30a0b5 Update to latest version of SPIRV-Cross. 2019-05-08 17:19:24 -04:00
Bill Hollings
fae314849d
Merge pull request #588 from billhollings/master
Add support for the VK_EXT_debug_report extension
2019-05-08 16:02:06 -04:00
Bill Hollings
224c3451f0 Resolve and merge conflicts. 2019-05-08 15:15:14 -04:00
Bill Hollings
41b4ae9589
Merge pull request #590 from cdavis5e/pipeline-barriers-2.1
Use the new memory barrier methods for pipeline barrier commands.
2019-05-07 16:32:14 -04:00
Chip Davis
b491578c93 Actually use the correct device. 2019-05-07 14:00:36 -05:00
Chip Davis
be1a821a8c Use a Metal feature bit for memory barrier support. 2019-05-07 12:08:23 -05:00
Chip Davis
5c5f890039 Merge remote-tracking branch 'origin' into pipeline-barriers-2.1 2019-05-07 11:56:07 -05:00
Bill Hollings
cbb39a2f62
Merge pull request #591 from cdavis5e/gpu-semaphores
MVKSemaphore: Use MTLEvent for device-side synchronization.
2019-05-07 12:26:52 -04:00
Chip Davis
a3aec8db1a Don't use MTLBarrierScopeRenderTargets on iOS.
It's not available there.
2019-05-07 10:55:50 -05:00
Bill Hollings
f14ed14a1b
Merge pull request #592 from cdavis5e/useless-host-barrier
MVKDevice: Don't unnecessarily iterate resources for global memory barriers.
2019-05-07 11:48:26 -04:00
Chip Davis
a42e77b101 MVKDevice: Don't unnecessarily iterate resources for global memory barriers.
All of the resources' `applyMemoryBarrier()` methods check if the second
scope contains host operations. If they don't, they have no effect. If
there are a lot of resources, iterating them for a method that will
ultimately do nothing is wasteful. Bail out if we can see that they will
do nothing.
2019-05-03 14:13:20 -05:00
Chip Davis
b02d354be5 MVKSemaphore: Use MTLEvent for device-side synchronization.
While `MTLFence` could be used for synchronization within a single
queue, it doesn't prevent execution across queues. For this, an
`MTLEvent` is required. Yes, this requires Metal 2.1 (macOS 10.14, iOS
12). Older versions will continue to use the old, CPU-based
implementation.

According to the Vulkan spec, semaphores must either be already signaled
or have a signal operation in progress before waiting for them. This
implementation increments the `MTLEvent`'s expected value after encoding
a wait operation, which requires this assumption to hold.

One thorny bit is acquiring a swapchain image when it is not already in
use. In this case, any semaphore provided must be signaled right away.
To accomplish this, a command buffer is executed which performs the
signal operation on the device. Alternatively, we could use an
`MTLSharedEvent`, which would allow us to signal the event on the host.
But, this could have performance implications that may not be
acceptable, just to handle this one case.

Fixes #438.
2019-05-03 14:01:55 -05:00
Chip Davis
dcd29975e6 Use the new memory barrier methods for pipeline barrier commands.
These two new methods introduced in Metal 2.1 (macOS 10.14) are more
granular, providing more control over what exactly must be sync'd. They
also work on buffer memory, meaning that buffer dependencies work
properly here.
2019-05-03 13:57:13 -05:00
Bill Hollings
acd8a6cb4d Resolve and merge conflicts. 2019-05-01 23:29:11 -04:00
Bill Hollings
173d8cc5f3 Add support for the VK_EXT_debug_report extension.
Add MVKDebugReportCallback class.
Add MVKVulkanAPIObject class as base class of classes exposed in Vulkan API.
Remove MVKRefCountedDeviceObject class and move ref-counting to MVKVulkanAPIObject.
Rename MVKDispatchableObject class to MVKDispatchableVulkanAPIObject.
Introduce multiple inheritance mixin classes into class hierarchy.
Add MVKBaseObject::getVulkanAPIObject() function to find Vulkan API object
controlling any subobject that needs to report something.
MVKCommandResourceFactory functions pass in calling object for reporting.
Add MVKBaseObject::reportMessage() & reportError() functions.
Replace mvkNotifyErrorWithText() static function with reportError()
instance function to allow access to debug reporting.
Redefine MVKLog*() functions to call reportError() instance method.
Delete MVKLogging.cpp.
Remove MVKLogging.h from MoltenVKShaderConverter project.
Add mvk_datatypes.hpp to redirect errors in mvk_datatypes.h functions to debug
reporting. Use mvk_datatypes.hpp internally for all references to these functions.
Convert several static methods to instance methods.
Refactor platform defines in MVKSurface.h.
Explicitly count MVKExtensionList extension count to avoid relying on struct size.
Remove MVKCommandBuffer::recordResult() and use setConfigurationResult().
Change log indication of error in logs from [***MoltenVK ERROR***] to [mvk-error],
for consistency with other log level indications.
Update MoltenVK version to 1.0.35.
2019-05-01 22:27:03 -04:00
Bill Hollings
cd57b2d816
Merge pull request #587 from cdavis5e/shared-linear-textures
MVKBuffer: Force managed storage for linear textures on shared buffers.
2019-05-01 17:15:42 -04:00
Chip Davis
787086351f MVKBuffer: Force managed storage for linear textures on shared buffers.
Shared storage on textures is disallowed on macOS.

Fixes #573.
2019-05-01 09:37:27 -05:00
Bill Hollings
1b60679104
Merge pull request #571 from cdavis5e/fix-query-race
Fix a race condition between sync objects and queries.
2019-04-30 15:33:16 -04:00
Bill Hollings
85a3af59e1
Merge pull request #585 from cdavis5e/tess-pipeline-no-shaders
MVKPipeline: Account for tessellation shaders as well.
2019-04-30 12:43:49 -04:00