1221 Commits

Author SHA1 Message Date
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
Chip Davis
cd26de225b MVKPipeline: Account for tessellation shaders as well.
If we don't have them, it's not a tessellation pipeline.
2019-04-29 17:40:03 -05:00
Chip Davis
1188edca76 Get rid of the queue idle event, too.
Put the fence back on the last submission.

This mostly reverts the last of the original change, save for a few
formatting changes and deletions of unused cruft.
2019-04-29 16:05:50 -05:00
Chip Davis
ba7c578827 Get rid of the 'command buffer done' event.
Since we no longer have a completion block which runs asynchronously,
the race condition it was meant to guard against can no longer happen.
2019-04-29 13:15:27 -05:00
Chip Davis
256ffc6d31 Try to capture only the work queued up to this point in a fence. 2019-04-25 23:11:24 -05:00
Chip Davis
4591cac69b MVKVector: Make this more amenable to the standard algorithms. 2019-04-24 15:00:46 -05:00
Chip Davis
43f97113b6 Perform query pool copies on the device side. 2019-04-24 14:20:13 -05:00
Bill Hollings
fc1ce42a37
Merge pull request #578 from mbarriault/master
Fix case where viewport/scissor doesn't get set properly when mixing dynamic and static-configured pipelines in the same command buffer.
2019-04-23 15:36:24 -04:00
Michael Barriault
b24d2e35ef Fix inequality. 2019-04-23 19:44:04 +01:00
Michael Barriault
cbd772a9d7 Refactor again to simplify conditionals. 2019-04-23 19:39:04 +01:00
Michael Barriault
dec40811ae Refactor to reduce code duplication. 2019-04-23 17:23:49 +01:00
Michael Barriault
a336e64bea Fix case where viewport/scissor doesn't get set properly when mixing dynamic and static-configured pipelines in the same command buffer. 2019-04-22 19:26:00 +01:00
Bill Hollings
e89e9dcfd6
Merge pull request #577 from mbarriault/master
Fix unused attachments terminating loop early.
2019-04-22 11:44:38 -04:00
Michael Barriault
0670ea133d Tweak counting logic 2019-04-22 15:48:48 +01:00
Michael Barriault
17da3e4d00 Move color attachment array access back inside if block. 2019-04-22 14:49:18 +01:00
Michael Barriault
eb468b7014 Fix unused attachments terminating loop early. 2019-04-20 23:01:57 +01:00
Bill Hollings
1c34873425
Merge pull request #576 from billhollings/master
MoltenVKShaderConverter enhancements
2019-04-19 12:12:18 -04:00
Bill Hollings
c2bb18e264 Update What's New document. 2019-04-18 18:38:11 -04:00
Bill Hollings
ee6e6f5ad0 Enable AMD and NV GLSL extensions when building glslang for MoltenVKGLSLToSPIRVConverter. 2019-04-18 17:39:25 -04:00
Bill Hollings
e91d2f6b35 Merge branch 'master' of https://github.com/KhronosGroup/MoltenVK 2019-04-18 15:12:42 -04:00
Bill Hollings
b29f6e47cc
Merge pull request #575 from mbarriault/master
Resolves issues with tessellation
2019-04-18 15:09:17 -04:00
Bill Hollings
62f374bf7e Allow building external dependency libraries in Debug mode.
Add ExternalDependencies (Debug) scheme to ExternalDependencies Xcode project.
Add --debug option to fetchDependencies script.
Support Release, Debug & Latest directories in External/build directory.
Enable DEPLOYMENT_POSTPROCESSING build setting when compiling
SPIRV-Tools to avoid warning spam when building dylibs.
Disable visibility warnings when building MoltenVKShaderConverter
in Release mode from external libraries built in Debug mode.
Always use -Xlinker -w option when creating dylibs to disable visibility warnings.
2019-04-18 15:08:39 -04:00
Michael Barriault
231196092b Fix spaces->tabs for consistency. 2019-04-17 22:51:40 +01:00
Michael Barriault
08d3d91016 Update to latest SPIRV-Cross. 2019-04-17 22:37:52 +01:00
Michael Barriault
11865f3809 Merge remote-tracking branch 'origin/master'
* origin/master:
2019-04-17 21:35:08 +01:00
Michael Barriault
ea5e38093a Work around potential Metal bug with stage in indirect buffers. Exact size isn't needed in our case anyway. 2019-04-17 21:31:38 +01:00
Michael Barriault
be54e748f0 Fix tessellated indirect draws using wrong kernels to map parameters. 2019-04-17 21:30:42 +01:00
Bill Hollings
eca03b8de1 MoltenVKShaderConverter tool add MSL version and platform command-line options.
Add SPIRVToMSLConverterOptions::platform to track platform. Default to build platform.
Update default SPIRVToMSLConverterOptions MSL version to 2.1.
MoltenVKShaderConverter test MSL compilation use same MSL version as conversion.
Default min perf tracking value to 0.0.
SPIRVToMSLConverter.h reference spirv.hpp via SPIRV-Cross framework.
Update What's New document.
2019-04-17 16:09:07 -04:00
Chip Davis
48d319432a MVKCountingEvent -> MVKSemaphoreImpl.
Remove the redundant class I added. Simplify a bit.
2019-04-17 10:42:25 -05:00
Michael Barriault
0aed9167c1 Tweak tabbing for consistency. 2019-04-16 18:12:10 +01:00
Michael Barriault
ef3e590617 Use empty depth state for tessellation vertex pre-pass. 2019-04-16 18:03:51 +01:00
Michael Barriault
2d627c6b8f Fix intermediate Metal renderpasses load and store actions maintaining attachments appropriately. 2019-04-16 18:03:15 +01:00