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.
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.
This is needed for TessLevelInner and TessLevelOuter in tessellation evaluation
shaders.
Fixes dEQP-VK.tessellation.shader_input_output.tess_level_inner_0_tes.
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.
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.
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.
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.
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.
Allow mvkMTLRenderStagesFromVkPipelineStageFlags() to map to all Vulkan stages, by indicating whether the pipeline barrier should come before or after the stages.
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.
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.
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.
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.