1666 Commits

Author SHA1 Message Date
Chip Davis
e2ba444aa6 Use deferred store actions instead of tracking multi-pass draws.
The current code does not handle multiple subpasses, nor does it handle
secondary command buffers. Handling subpasses was easy enough. The
problem came with secondary command buffers. Tracking them became
extremely complicated, particularly since pipelines may be set either
inside or outside a render pass, and further, a pipeline set in one
buffer might be used in another.

I then realized a simpler and more elegant solution: Metal's deferred
store actions feature. This allows you to defer setting the store action
for a render pass until encoding time. This is exactly what we need,
since we won't know what store action we actually want until we start
encoding draws. This solution should now work with multiple subpasses
and secondary command buffers, with much less code.
2020-08-31 21:09:11 -05:00
Bill Hollings
43c0a08472
Merge pull request #993 from js6i/master
Initialize tessellation related variables conditionally in indirect draws
2020-08-14 20:43:20 -04:00
Jan Sikorski
7c99bb9430 Initialize tessellation related variables conditionally in indirect draws 2020-08-14 12:38:33 +02:00
Bill Hollings
769f0e4592
Merge pull request #992 from cdavis5e/fix-988-991
MVKCommandBuffer: Don't set renderTargetArrayLength on devices that don't support it.
2020-08-13 18:39:25 -04:00
Chip Davis
07c2054cc8 MVKCommandBuffer: Don't set renderTargetArrayLength on devices that don't support it.
It's a hard validation error to do so. We originally had a check for
this, but it was erroneously completely removed in #988, instead of
being limited to `renderTargetArrayLength`.

Fixes #991.
2020-08-13 15:20:57 -05:00
Bill Hollings
f3e938fafa
Merge pull request #990 from billhollings/master
Re-add support for bitcode generation on iOS and tvOS.
2020-08-12 17:41:36 -04:00
Bill Hollings
d4b5df532e Re-add support for bitcode generation on iOS and tvOS.
Set BITCODE_GENERATION_MODE build setting in all Xcode projects.
create_dylib.sh support BITCODE_GENERATION_MODE.
2020-08-11 20:18:50 -04:00
Bill Hollings
285346293d
Merge pull request #988 from js6i/master
Validation warning fixes
2020-08-11 11:27:03 -04:00
Jan Sikorski
77cbe56101 Detect support for having no attachments in a render pass
When we do have support, don't create a dummy texture to attach.
2020-08-11 10:56:33 +02:00
Jan Sikorski
c3254cb546 Ensure the base texture is created when creating a view texture 2020-08-07 12:24:22 +02:00
Jan Sikorski
babefe6608 Always set renderTarget* properties in MTLRenderPassDescriptor
A shader might still use array index even if array length is 1
causing a validation warning if renderTargetArrayLength is not set.
2020-08-07 11:39:17 +02:00
Jan Sikorski
8f8395dcdf Enable MTLRenderPassDescriptor renderTargetWidth and renderTargetHeight API
on macOS, as it's available on 10.15 and newer.
2020-08-07 11:39:11 +02:00
Bill Hollings
72ef14ed27
Merge pull request #985 from billhollings/master
Update MoltenVK version to 1.0.45.
2020-08-05 20:55:15 -04:00
Bill Hollings
5126aaed3e Update MoltenVK version to 1.0.45.
Update What's New document.
2020-08-05 19:58:59 -04:00
Bill Hollings
7708b08c10
Merge pull request #983 from cdavis5e/multi-patch-workgroup
Process multiple patches per workgroup in a tessellation control shader.
2020-08-05 18:51:34 -04:00
Chip Davis
3db2cbff6b Process multiple patches per workgroup in a tessellation control shader.
This should hopefully reduce underutilization of the GPU, especially on
GPUs where the thread execution width is greater than the number of
control points.

This also eliminates the extra invocations previously needed to read the
varyings from the vertex shader into the tessellation shader. The number
of threads per workgroup is now lcm(SIMD-size, output control points).
This should ensure we always process a whole number of patches per
workgroup, and further reduce underutilization of the GPU's SIMD units.

To avoid complexity handling indices in the tessellation control shader,
I've also changed the way vertex shaders for tessellation are handled.
They are now compute kernels using Metal's support for vertex-style
stage input. This lets us always emit vertices into the buffer in order
of vertex shader execution. Now we no longer have to deal with indexing
in the tessellation control shader, nor do we always have to duplicate
the index buffer to insert gaps. This also fixes a long-standing issue
where if an index were greater than the number of vertices to draw, the
vertex shader would wind up writing outside the buffer, and the vertex
would be lost.
2020-08-05 16:03:25 -05:00
Bill Hollings
15dae8af71
Merge pull request #984 from js6i/master
Images in coherent memory
2020-08-05 16:23:18 -04:00
Jan Sikorski
8f52521b1d Flush source image of a transfer
Since on macOS textures cannot be resident in shared (host-coherent) memory,
they need to be flushed before making the copy, to ensure that the modified
data is transferred.
2020-08-05 15:34:10 +02:00
Bill Hollings
4609416ef2
Merge pull request #980 from mbechard/master
dynamicOffsets are supposed to be ordered by binding index
2020-07-30 12:06:12 -04:00
Bill Hollings
8f6edef8ba
Merge pull request #979 from billhollings/master
Fix issue where expected buffer-sizes buffer not bound to Metal compute encoder.
2020-07-28 19:06:16 -04:00
Malcolm Bechard
5874616d78 dynamicOffsets are supposed to be ordered by binding index
not by layout element index. Fixes #978
2020-07-28 17:25:53 -04:00
Bill Hollings
2c7734eda8 Fix issue where expected buffer-sizes buffer not bound to Metal compute encoder.
MVKComputeResourcesCommandEncoderState update buffer-size value before buffer
bindings are encoded into Metal and are no longer marked as dirty.
2020-07-28 15:38:39 -04:00
Bill Hollings
1e993f8907
Merge pull request #977 from billhollings/master
Update dependency libraries to match Vulkan SDK 1.2.148
2020-07-28 11:35:35 -04:00
Bill Hollings
834d391aec Update dependency libraries to match Vulkan SDK 1.2.148.
fetchDependencies support option to skip all library builds.
fetchDependencies avoid sync locks if not building in parallel.
fetchDependencies build glslang headers.
Update ExternalRevisions/README.md glslang build integration section.
Update What's New.
2020-07-27 22:25:44 -04:00
Bill Hollings
23ea3c9bf7 vkCmdBlitImage() return error if scaling or inverting to linear image on macOS. 2020-07-27 16:00:42 -04:00
Bill Hollings
f7a1c87c71 Update pipeline cache to latest CompilerMSL::Options struct content.
SPIRVToMSLConversionOptions compare instances using memcmp(CompilerMSL::Options).
Update What's New document.
2020-07-27 15:02:56 -04:00
Bill Hollings
6b25c816b5
Merge pull request #976 from cdavis5e/pipeline-sample-mask
MVKPipeline: Pass the pipeline sample mask, if present, to SPIRV-Cross.
2020-07-27 10:31:44 -04:00
Bill Hollings
d2e5ff7df5
Merge pull request #975 from cdavis5e/image-robustness
MVKDevice: Support the VK_EXT_image_robustness extension.
2020-07-27 10:21:31 -04:00
Bill Hollings
484e1dffdb
Merge pull request #972 from BearishSun/various-fixes
Various fixes
2020-07-27 10:04:00 -04:00
Chip Davis
cda8a2cf44 MVKPipeline: Pass the pipeline sample mask, if present, to SPIRV-Cross.
SPIRV-Cross can now AND the `gl_SampleMask` output with an additional
fixed mask, presumably from the pipeline. Use this new functionality to
implement pipeline sample mask handling.

Special thanks to Tomek Pontika and Corentin Wallez of Google for
graciously contributing their implementation to SPIRV-Cross.

Update SPIRV-Cross to pull in the change necessary for this.
2020-07-24 15:15:11 -05:00
Chip Davis
b1803ea5d7 MVKDevice: Support the VK_EXT_image_robustness extension.
This extension provides weaker guarantees than `VK_EXT_robustness2` and
its `robustImageAccess2` feature. Metal easily meets those guarantees,
with no action on our part necessary.
2020-07-24 15:13:58 -05:00
Marko Pintera
e2f4828f42 Less error prone way of calculating bytes per layer 2020-07-24 09:58:17 +02:00
Marko Pintera
6da2fbb353 Don't over-allocate memory for higher mip levels of 3D textures 2020-07-23 15:06:49 +02:00
Marko Pintera
f13fb48905 Allocate correctly sized images 2020-07-23 15:05:44 +02:00
Marko Pintera
d351a7a173 Use correct offset when calculating overlap between image and device memory ranges 2020-07-23 15:03:48 +02:00
Marko Pintera
0b6a5db049 Don't assign MTLTextureUsageRenderTarget to linear textures 2020-07-23 15:02:26 +02:00
Bill Hollings
115275bd9f
Merge pull request #971 from billhollings/master
Fix intermittent concurrent shader specialization race condition.
2020-07-22 18:22:26 -04:00
Bill Hollings
1f68d5fc2a Fix intermittent concurrent shader specialization race condition.
MVKShaderLibrary::getMTLFunction() synchronize and refactor release of Metal objects.
Make use of existing autorelease pool instead of discrete retain/release.
Wrap entire specialization operation in @synchronized() to guard against
Metal internals not coping with multiple simultaneous specializations.
2020-07-22 17:48:19 -04:00
Bill Hollings
c0103fd008 Remove redundant validation check for 2D image views on 3D images. 2020-07-22 14:52:06 -04:00
Bill Hollings
b53a111ba8
Merge pull request #969 from TheSpydog/scaled-vertex-formats
Add support for USCALED/SSCALED vertex formats
2020-07-22 14:30:02 -04:00
Caleb Cornett
c8cba37170 Add support for USCALED/SSCALED vertex formats 2020-07-21 21:06:13 -04:00
Bill Hollings
0d3b128eaa
Merge pull request #968 from billhollings/master
Track if indirect tessellation drawing is supported.
2020-07-21 15:09:09 -04:00
Bill Hollings
81ec314787 Track if indirect tessellation drawing is supported.
Add MVKPhysicalDeviceMetalFeatures::indirectTessellationDrawing.
Return error if indirect tessellated draw command is used when not supported.
2020-07-21 14:10:20 -04:00
Bill Hollings
9b1ec34ce7
Merge pull request #967 from billhollings/master
VkPhysicalDeviceProperties::pipelineCacheUUID include MoltenVK Git revision hash.
2020-07-21 10:21:04 -04:00
Bill Hollings
927bfddbc7 VkPhysicalDeviceProperties::pipelineCacheUUID include MoltenVK Git revision hash. 2020-07-20 17:53:11 -04:00
Bill Hollings
87d15ee9e7
Merge pull request #966 from billhollings/master
Set VkPhysicalDeviceDriverPropertiesKHR::driverID to VK_DRIVER_ID_MOLTENVK.
2020-07-20 17:02:43 -04:00
Bill Hollings
fc0750d67c Set VkPhysicalDeviceDriverPropertiesKHR::driverID to VK_DRIVER_ID_MOLTENVK.
Update to latest version of Vulkan-Headers.
2020-07-20 14:51:40 -04:00
Bill Hollings
b4ea11fe2a
Merge pull request #965 from billhollings/master
Several minor updates: VK_FORMAT_D16_UNORM plus vertex attribute stride test
2020-07-20 14:16:48 -04:00
Bill Hollings
4d082f0501
Merge pull request #948 from TheSpydog/driverprops
Implement VK_KHR_driver_properties extension
2020-07-20 13:35:22 -04:00
Bill Hollings
e784ae2cbb
Merge pull request #964 from js6i/master
Add missing offset when flushing buffer data to device
2020-07-20 12:32:26 -04:00