to each other to find cached shader, only consider current shader stage resources.
Rename more references to ShaderConverterContext to ShaderConversionConfig.
Separate reference counting from MVKVulkanAPIObject into a new
MVKReferenceCountingMixin class, so reference counting can
potentially be used in other areas of the class hierarchy.
Replace MVKConfigurableObject with MVKConfigurableMixin for the same reason.
Remove some inline definitions as unnecessary in the files being revised here.
Rename kMVKShaderStageMax to kMVKShaderStageCount
to clarify it's common use in array sizing and for loops.
Change mvkConfig() to return reference instead of pointer
to improve syntactic sugar to use . instead of ->.
Update MoltenVK version to 1.1.4.
Update What's New document.
I believe SPIRV_CROSS_NAMESPACE_OVERRIDE should be replaced by SPIRV_CROSS_NAMESPACE defined in SPIRV-Cross spirv_common.hpp. This ensures that SPIRV_CROSS_NAMESPACE_OVERRIDE usage in MVK is optional.
Revert to Xcode 12.4 in GitHub Actions CI, as 12.5 not deployed yet for the
macos-latest virtual environment, which is currently macOS 10.15, and a
macOS 11.0 virtual environment is available only in private preview.
This build error seems to have been exposed in Xcode 12.5.
Add mvkSupportsBCTextureCompression() to manage use of
[MTLDevice supportsBCTextureCompression] to query for
MTLDevice support for BC compression across all platforms.
Citing section 33.8 "Display Timing Queries", the description of
VK_GOOGLE_display_timing's vkGetPastPresentationTimingGOOGLE()
the spec states that "The results for a given swapchain and presentID are
only returned once from vkGetPastPresentationTimingGOOGLE."
In other words, every VkPastPresentationTimingGOOGLE timing record
stored in the internal queue must get removed from the internal queue,
once it was returned to the calling client application via a successfull
call to vkGetPastPresentationTimingGOOGLE().
The current implementation does not remove delivered entries from the
queue. Instead it keeps the last kMaxPresentationHistory (== 60) records,
so the internal queue grows to its maximum fill level and never empties.
Successive calls to vkGetPastPresentationTimingGOOGLE() deliver the same
records repeatedly, confusing applications which are written according to
spec.
This commit changes the queueing behavior to properly remove items from
the queue, so that it operates in a FIFO fashion and only retains items which
have not been fetched yet, up to kMaxPresentationHistory, after which the
oldest items get discarded.
Tested on macOS 10.15.7 with AMD for different intervals between calling
vkGetPastPresentationTimingGOOGLE() and different input values for
pPresentationTimingCount, to make sure it behaves properly for cases like
1 item in queue at query time, queue half full at query time, queue completely
full, queue "overflowing" - ie. items are properly discarded in FIFO order, and
for fetching 1 item at a time, multiple items (partially emptying the queue in
each iteration) or all items (emptying the queue in one go).
On return, *pPresentationTimingCount was not assigned the actual number
of timing records written, as the spec requires. Fix this.
If pPresentationTimingCount was smaller than the number of available
records, the function still returned VK_SUCCESS instead of VK_INCOMPLETE,
as the spec requires. Fix this.
Those functions are also usable from standard C, no need for the caller
to be compiled as Objective-C. Move their definition outside the __OBJC__
guards.
Use `[MTLDevice maxArgumentBufferSamplerCount]` to determine maximum sampler counts.
When checking `[MTLDevice argumentBuffersSupport]` tiers, compare
using `>=` to automatically handle evolution of this value in future.
Remove suspect use of early breaks in
MVKDescriptorSetLayoutBinding::initMetalResourceIndexOffsets().
Revert to using void* when padding for buffers in shader desc set structs.
Fix several typos.
by introduction of Metal argument buffer support.
Add copy assignment operator to MVKMTLFunction, plus other objects that have
notable copy constructors: MVKBitArray, MVKShaderLibrary, MVKVulkanAPIObject.
There are still some classes that have destructors without copy and
copy assign overrides, but these are higher level classes that should
not be subject to copy or assignment by value.
Note to self: Respect the Rule of Three!
pipelines and only encode bindings that are in use for each stage.
Add SPIRVToMSLConversionConfiguration::isResourceUsed() and
remove SPIRVToMSLConversionResults::isDescriptorSetUsed().
MVKBitArray add copy constructor and allow queries beyond range.
MVKDescriptorSetLayoutBinding no longer uses MTLTextureType to create
MTLArgumentEncoder, which is not needed for descriptor set argument encoding.
Remove obsolete MSLResourceBinding::outMTLTextureType and
SPIRVToMSLConversionConfiguration::getMTLTextureType().
or one MTLArgumentEncoder per combination of pipeline-stage/descriptor set.
Add MVKPhysicalDeviceMetalFeatures::descriptorSetArgumentBuffers,
and MVKDeviceTrackingMixin::isUsingDescriptorSetMetalArgumentBuffers()
and isUsingPipelineStageMetalArgumentBuffers() to track this.
Create a separate MTLArgumentEncoder for each shader stage from
MTLFunction instead of MTLDevice, and track per-stage in MVKPipeline.
Add MVKMTLArgumentEncoder to track MTLArgumentEncoders in pipelines and desc set layouts.
Add SPIRVToMSLConversionResults::activeDescriptorSets to get desc sets used by a shader.
In SPIRV-Cross make padded Metal argument buffer descriptors
for buffers a pointer to float instead of pointer to void.
Update to latest version of SPIRV-Cross to use arg buffer padding feature.
Enable argument buffer support only when one MTLArgumentEncoder per
descriptor set can be used (macOS 10.16 and later or Intel GPU's).
to allow VkDevice to resume after non-fatal VK_ERROR_DEVICE_LOST error.
When running CTS, when one test triggers a VK_ERROR_DEVICE_LOST error condition,
CTS does not create a new VkDevice for subsequent tests, which causes all subsequent
tests to fail. This creates an incredible amount of results noise, and makes it
difficult to determine accurate test failure numbers. This is particularly problematic
because VK_ERROR_DEVICE_LOST may be triggered sporadically by internal Metal issues,
often making it not traceable to a consistent failure of a particular CTS test.