926 Commits

Author SHA1 Message Date
Bill Hollings
c3aaf976ae Add support for the VK_NV_glsl_shader extension.
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.
2019-05-10 12:21:03 -04:00
Bill Hollings
f79ccdfd94
Merge pull request #596 from billhollings/master
Allow mvkMTLRenderStagesFromVkPipelineStageFlags() to map to all Vulkan stages, by indicating whether the pipeline barrier should come before or after the stages.
2019-05-09 14:02:18 -04:00
Bill Hollings
6b2e225d5c Update logic in mvkMTLRenderStagesFromVkPipelineStageFlags(), and test for renderpass. 2019-05-09 00:34:06 -04:00
Bill Hollings
f5999a8e76 Allow mvkMTLRenderStagesFromVkPipelineStageFlags() to map to all Vulkan stages,
by indicating whether the pipeline barrier should come before or after the stages.
2019-05-08 23:10:48 -04:00
Bill Hollings
35c56db2b8
Merge pull request #595 from billhollings/master
Update to latest version of SPIRV-Cross.
2019-05-08 22:04:24 -04:00
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