619 Commits

Author SHA1 Message Date
Chip Davis
b6034d8fd0 More format feature fixes.
Advertise linear filtering of linear textures on macOS. I don't see any
reason this was disabled, and I don't know why I didn't turn it on in
PR #391.

Advertise that texel buffers of `VK_FORMAT_A2R10G10B10_UNORM_PACK32` are
supported. This was another oversight of mine in #391.

*Don't* advertise that sRGB formats can be used as vertex attributes.
I'm not sure what that would even mean--I'm guessing that the
implementation performs sRGB->linear conversion on the attribute before
loading it? But we don't do that and neither does Metal.
2019-07-17 17:39:53 -05:00
Bill Hollings
c1aa02adad
Merge pull request #675 from cdavis5e/native-texture-buffer-fix-2
Fix implementation of VK_EXT_texel_buffer_alignment.
2019-07-17 16:39:25 -04:00
Bill Hollings
be5fc2c979
Merge pull request #674 from cdavis5e/swapchain-texture-view
MVKImage: Swapchain images do support texture views.
2019-07-17 16:36:48 -04:00
Bill Hollings
88d07f7dcb
Merge pull request #673 from cdavis5e/bgr10a2-surface
Advertise VK_FORMAT_A2R10G10B10_UNORM_PACK32 as a surface format.
2019-07-17 16:36:02 -04:00
Chip Davis
55fc3a11c7 Fix implementation of VK_EXT_texel_buffer_alignment.
Correct maximum number of texel buffer elements for the native texture
buffer case. With an 8-bit format, I assume it's possible to create a
texture buffer spanning the entire 3.5 GiB (the maximum size of a buffer
on my GPU).

Set the structure type in the physical device's
`_texelBuffAlignProperties` struct. Otherwise, when it gets written out
to a chain, the structure type will be lost, and it wouldn't e.g. show
up in `vulkaninfo`.

Fix enumeration of formats when one of the members of the
`VkFormatProperties` is zero. I intended that to mean "don't care," but
it was erroneously filtering out, well, everything. Now we actually
accurately report the minimum alignment requirements.
2019-07-17 14:52:34 -05:00
Chip Davis
1eb1adabdc MVKImage: Swapchain images do support texture views.
I forgot to make this change when I added support for
`VK_KHR_swapchain_mutable_format`. The extension isn't very useful
without this.
2019-07-17 12:43:46 -05:00
Chip Davis
c479c37aad Advertise VK_FORMAT_A2R10G10B10_UNORM_PACK32 as a surface format.
The documentation for the corresponding Metal format recommends using it
on displays with wide-color output to reduce banding artifacts, and thus
implies that it is possible to use it with a CAMetalLayer.
2019-07-17 12:09:40 -05:00
Chip Davis
4fbbb313f2 Support the VK_INTEL_shader_integer_functions2 extension. 2019-07-17 11:36:58 -05:00
Chip Davis
530d84ba42 Advertise the VK_AMD_shader_trinary_minmax extension. 2019-07-17 11:36:58 -05:00
Chip Davis
3f3810afbd Advertise the VK_EXT_post_depth_coverage extension.
iOS only, and only on A11/A12 devices (GPU Family 4/5).
2019-07-17 11:36:58 -05:00
Chip Davis
b2ae0f011c Support the VK_EXT_scalar_block_layout extension. 2019-07-17 11:36:58 -05:00
Bill Hollings
463a104c10
Merge pull request #671 from cdavis5e/texel-buffer-alignment
Support the VK_EXT_texel_buffer_alignment extension.
2019-07-16 22:44:50 -04:00
Bill Hollings
745b929fb3
Merge pull request #670 from cdavis5e/amd-shader-image-ldst-lod
Advertise the VK_AMD_shader_image_load_store_lod extension.
2019-07-16 22:43:53 -04:00
Bill Hollings
1d4d29e2e2
Merge pull request #669 from cdavis5e/native-texture-buffer-fix
MVKBuffer: Correct _mtlBytesPerRow value for the native texture buffer case.
2019-07-16 22:43:37 -04:00
Chip Davis
7771b00bee Support the VK_EXT_texel_buffer_alignment extension.
This extension lets implementations report separate limits for uniform
and storage texel buffers, as well as whether or not the required
alignment is only a single texel of the buffer view's format.

This information is available in Metal, but only through an API query.
We must query the required alignment for every buffer view format we
support.

Update Vulkan-Headers to pull in support for this new extension.
2019-07-16 14:51:45 -05:00
Chip Davis
eb330056e6 Advertise the VK_AMD_shader_image_load_store_lod extension.
iOS only for now. Metal textures on Mac don't support non-zero `lod` in
the `write()` method.
2019-07-16 14:48:58 -05:00
Bill Hollings
fe3b2fbd5f
Merge pull request #666 from cdavis5e/swapchain-colorspace
Support the VK_EXT_swapchain_colorspace extension.
2019-07-16 15:37:06 -04:00
Chip Davis
dc16c3cc22 MVKBuffer: Correct _mtlBytesPerRow value for the native texture buffer case. 2019-07-16 11:58:06 -05:00
Chip Davis
8c3d30b12b Support the VK_EXT_swapchain_colorspace extension.
Only some of the color spaces provided by this extension are supported.
macOS 10.12 supports a few more. macOS 10.14 (at least, according to the
*10.15* SDK) supports even more. (But that needs a change to the
Metal-3.0 branch.)

I've chosen to group by color space. That way, programs will find the
all the supported formats early on. Programs that are interested in
the color space can keep looking.
2019-07-16 10:14:28 -05:00
Bill Hollings
8a1d7f4f81
Merge pull request #668 from cdavis5e/native-texture-buffer
Use native texture buffers when available.
2019-07-16 10:15:02 -04:00
Chip Davis
47082fd4c3 Use native texture buffers when available.
These were added in Metal 2.1.
2019-07-16 00:02:46 -05:00
Chip Davis
a2533116b3 Support the VK_KHR_uniform_buffer_standard_layout extension.
This happens to fall out of the way structure layouts are handled in
SPIRV-Cross.
2019-07-16 00:01:48 -05:00
Chip Davis
fc13aec2af Advertise the VK_EXT_shader_stencil_export extension.
This is supported by Mac GPU Family 2 starting on macOS 10.14, and Apple
GPU Family 5 starting on iOS 12.

Supporting this is a bit tricky. Because only some devices support this
extension, we now have to keep track of supported device extensions per
device.
2019-07-15 12:12:39 -05:00
Bill Hollings
8bcfef228b Fix memory leak in debug marker and debug utils labelling. 2019-07-15 10:17:55 -04:00
Bill Hollings
8cbc951cc3 Texture memory requirements don't use shared storage on macOS.
MVKBuffer getMemoryRequirements() ensure texel buffers don't use shared memory.
MVKImage getMemoryRequirements() ensure textures don't use shared memory.
MVKBufferView set MTLTexture storageMode & cpuCacheMode directly from MTLBuffer.
2019-07-12 17:00:18 -04:00
Bill Hollings
608028a291 MVKDeviceMemory keep MTLResourceOptions aligned with MTLStorageMode & MTLCPUCacheMode. 2019-07-12 15:20:05 -04:00
Bill Hollings
f01434ebb1 MVKCmdClearImage return error if texture is not renderable. 2019-07-12 14:40:23 -04:00
Bill Hollings
f46575df60 Move push constant binding to vkCmdBindPipeline() from vkCmdBindDescriptorSet(). 2019-07-10 17:53:44 -04:00
Bill Hollings
04c7e4e8f0 MVKCmdBlitImage clear _mvkImageBlitRenders vector on reuse. 2019-07-10 10:46:48 -04:00
Bill Hollings
d926424bfe MVKCmdResolveImage support textures of different sizes. 2019-07-09 17:56:10 -04:00
Bill Hollings
e35426d4c3 MVKCmdBlitImage support multisample textures.
MVKCmdCopyImage track src & dest sample counts.
MVKRPSKeyBlitImg track dest sample count.
2019-07-09 17:16:42 -04:00
Bill Hollings
5289d10746 MVKCmdBlitImage support blit between different texture formats.
MVKRPSKeyBlitImg track both src and dst texture formats.
MVKCmdCopyImage fix copyable comparison.
2019-07-09 15:45:16 -04:00
Bill Hollings
4915b1ec0c Allow MVKCmdBlitImage to use texture view and image->buffer->image copying
from parent MVKCmdCopyImage class.

Refactor MVKCmdCopyImage & MVKCmdBlitImage to hold corresponding Vulkan structs.
MVKCommandResourceFactory::getBlitFragFunction() only pass srcSlice.
2019-07-09 10:14:42 -04:00
Bill Hollings
5b7038b21d vkCmdCopyImage() adjust dest extent when copying from compressed to uncompressed images.
Add MVKImage::getIsCompressed().
MVKPhysicalDevice::getImageFormatProperties() optimize use of mvkFormatTypeFromVkFormat().
2019-07-08 22:28:33 -04:00
Bill Hollings
35d40a83b0 vkCmdCopyImage() support copying between compressed and uncompressed formats. 2019-07-05 19:39:52 -04:00
Bill Hollings
5e0214d3e1 MVKCmdBufferImageCopy don't supply bytes per image if not array texture.
MVKRPSKeyBlitImg::isArrayType() include multisample array type.
Clean up formatting in texture type functions in mvk_datatypes.mm.
2019-07-05 11:21:23 -04:00
Bill Hollings
c593cebce5 MVKCmdCopyImage validate that formats are compatible for copying.
MVKCmdBlitImage use same validation to use direct copy when possible.
2019-07-04 19:19:11 -04:00
Bill Hollings
423944d01e Rename mvkAreFlagsEnabled() & mvkAreOnlyAnyFlagsEnabled()
functions for consistency with similar functions.
2019-07-04 16:08:12 -04:00
Bill Hollings
74e38659aa Set Metal texture usage to allow texture copy via view.
MVKCmdCopyImage uses texture view if formats different. Enable
MTLTextureUsagePixelFormatView for VK_IMAGE_USAGE_TRANSFER_SRC_BIT.
Refactor mvkMTLTextureUsageFromVkImageUsageFlags() to clarify Metal usages
and enable views on depth-stencil attachments by default.
2019-07-04 15:50:12 -04:00
Bill Hollings
aa6a10570a Support VK_EXT_metal_surface extension.
Modify demo apps to pass OS layer instead of view.
2019-07-03 20:23:43 -04:00
Bill Hollings
8df685a9dc Fix race condition between swapchain image destruction and presentation completion callback.
Retain MVKSwapchainImage before passing to MTLCommandBuffer completion handler.
Redesign MVKVulkanAPIObject retain/release functionality using atomic ref count
instead of mutex locks, to simplify design and improve performance.
2019-06-30 17:28:52 -04:00
Bill Hollings
fb4dd158d0 Document each function in vk_mvk_moltenvk.h to indicate they cannot be used
with objects retrieved through the Vulkan SDK Loader and Layers framework.
2019-06-30 11:16:08 -04:00
Bill Hollings
1b4124d4aa For shaders created directly from MSL, set function name from
VkPipelineShaderStageCreateInfo::pName.
2019-06-29 19:18:32 -04:00
Bill Hollings
84ea825ea3 Separate SPIRVToMSLConverterContext into input config and output results.
Refactor SPIRVToMSLConverterContext into distinct SPIRVToMSLConversionConfiguration
and SPIRVToMSLConversionResults for conversion input and output, respectively.
Update to latest SPIRV-Cross version.
Update What's New document.
2019-06-29 18:01:07 -04:00
Bill Hollings
a0f0c78b34 Expand MVK_CONFIG_TRACE_VULKAN_CALLS to optionally log Vulkan call timings.
Update What's New document.
2019-06-21 22:56:13 -04:00
Bill Hollings
e6afb1fedb Add MTLCommandBuffer completion timing performance tracking option.
Add MVKPerformanceStatistics::MVKQueuePerformance::mtlCommandBufferCompletion.
Increment VK_MVK_MOLTENVK_SPEC_VERSION to 21.
2019-06-20 17:31:19 -04:00
Bill Hollings
64d7e07243 Support immutable depth compare samplers as constexpr samplers hardcoded in MSL.
On iOS GPU family 2 and earlier:
  - Allow immutable samplers to be passed to SPIRV-Cross in a format
    they can be output as hardcoded constexpr samplers in MSL.
  - Validate depth compare samplers are only used as immutable.

MVKMVKPipelineLayout & MVKDescriptorSetLayout can take null MVKCommandEncoder
to perform a validation pass when binding or pushing.
Reduce redundancy by combining SPIRVToMSLConverterContext structs
with compatible SPIRV-Cross structs.
Update MoltenVK version to 1.0.36.
2019-06-15 01:47:13 -04:00
Bill Hollings
bf8c7f8bb8 Updates for SDK 1.1.108 release.
Update to latest external dependency libraries.
MVKDescriptorSetLayoutBinding allow binding of null MVKBuffer.
Update What's New document.
2019-06-13 17:11:44 -04:00
Bill Hollings
e755a17907 Report image layer limits for attachments in vkGetPhysicalDeviceImageFormatProperties(). 2019-06-13 14:30:16 -04:00
Bill Hollings
7ba7f1efef Fixes to clearning attachments.
vkCmdClearAttachments(): Return encoder to previous pipeline, depth-stencil & resource state after execution.
Fix issue clearing stencil attachment via renderpass when depth attachment is not being cleared.
2019-06-13 13:21:26 -04:00