Remove duplicate build of SPIRV-Tools in fetchDependencies.
Remove folder symlinks from Externals and MoltenVKShaderCompiler folders.
Update header search paths to reference External folders directly.
Update External/README.md documentation.
Update MoltenVK version to 1.0.1 to reflect new build instructions.
Minor update to performance logging.
Add MVKPhysicalDeviceMetalFeatures::mtlCopyBufferAlignment.
Set MTLComputeCommandEncoder label based on Vulkan command type.
Add MVKCommandUse::kMVKCommandUseDispatch.
* Vulkan allows any valid copy regions to be used in this function.
However, Metal's blit command encoder only allows copy offsets and
sizes which are multiples of 4 bytes.
* Before this change, attempting to copy such a region would cause
Metal validation errors to trigger.
* This adds logic to detect such copy regions and uses a special compute
shader to perform a byte-by-byte copy from the source buffer to
the destination buffer with the appropriate offsets.
* This new code path is only needed on macOS, because iOS does not share
the same copy region restrictions.
Load external library versions using script instead of Git submodules.
SPIRV-Cross, Vulkan-LoaderAndValidationLayers & VulkanSamples versions recorded in files.
glslang version determined by Vulkan-LoaderAndValidationLayers.
SPIRV-Tools & SPIRV-Headers versions loaded by glslang.
When MoltenVK is built as part of the LunarG SDK, use external libraries
sourced from parent Vulkan-LoaderAndValidationLayers.
Use Vulkan headers from Vulkan-LoaderAndValidationLayers.
No longer generate Vulkan specification.
Update documentation.
In order to determine the instance version, the 1.1 loader takes
advantage of the fact that a 1.0 ICD will return NULL for
vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceVersion")
Fix MVKShaderLibrary missing function prototype warning.
Update to latest SPIRV-Cross.
Update to latest Vulkan-Hpp.
Update to latest Vulkan-LoaderAndValidationLayers.
Fix typo that was setting the dstExtent from the source image. This was
causing Desktop-Friendly fullscreen resolution not to render correctly
in Dota.
MVKBufferView add lock when creating MTLTexture.
MVKDeviceMemory add lock when creating MTLBuffer during memory mapping.
MVKMTLBufferAllocator does not need to be threadsafe.
Cleanup syntax on other lock handling to add consistency.
If there is no depth attachment, Metal Validation will give the
following error: "validateDepthStencilState:3657: failed assertion
`MTLDepthStencilDescriptor sets depth test but MTLRenderPassDescriptor
has a nil depthAttachment texture'". Fix by checking the current
subpass to see if there is a depth/stencil attachment, and if not use a
depth/stencil state with depth test always, depth write disabled, and no
stencil state.
* Move mutex lock in MVKBuffer::getMTLBuffer() to be after checking
MVKDeviceMemory::getMTLBuffer() so we don't always lock in that case
* Fix comment I put in the wrong place in previous commit
The problem was that MVKBuffer::getMTLBuffer() was not thread-safe. If
multiple threads called it at the same time, more than one underlying
_mtlBuffer would be created. This could make the vkCmdCopyBufferToImage
copy from an unfilled buffer leaving the texture corrupted. I also
added similar thread safety to MVKImage::getMTLTexture() and
MVKImageView::getMTLTexture() since they both looked like they would
have the same potential problem.
In debug mode, ensure scissors fit inside renderpass area to avoid Metal validation assertions.
Consolidate setting of viewport and scissors by pipeline and command.
Log which GPU is attached to a VkDevice.
Sort multiple GPU's to put higher-power GPU's at front of list.
Use pipelineStatisticsQuery feature to determine whether pipeline stats are available.
Update to latest SPIRV-Cross.