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.
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
index 18da46f..f56cd86 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
@@ -45,6 +45,12 @@
pMemoryRequirements->size = getByteCount();
pMemoryRequirements->alignment = _byteAlignment;
pMemoryRequirements->memoryTypeBits = _device->getPhysicalDevice()->getAllMemoryTypes();
+#if MVK_MACOS
+ // Textures must not use shared memory
+ if (mvkIsAnyFlagEnabled(_usage, VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)) {
+ mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
+ }
+#endif
#if MVK_IOS
// Memoryless storage is not allowed for buffers
mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getLazilyAllocatedMemoryTypes());
@@ -160,17 +166,9 @@
width: _textureSize.width
height: _textureSize.height
mipmapped: NO];
-#if MVK_MACOS
- // Textures on Mac cannot use shared storage, so force managed.
- if (_buffer->getMTLBuffer().storageMode == MTLStorageModeShared) {
- mtlTexDesc.storageMode = MTLStorageModeManaged;
- } else {
- mtlTexDesc.storageMode = _buffer->getMTLBuffer().storageMode;
- }
-#else
- mtlTexDesc.storageMode = _buffer->getMTLBuffer().storageMode;
-#endif
- mtlTexDesc.cpuCacheMode = _buffer->getMTLBuffer().cpuCacheMode;
+ id<MTLBuffer> mtlBuff = _buffer->getMTLBuffer();
+ mtlTexDesc.storageMode = mtlBuff.storageMode;
+ mtlTexDesc.cpuCacheMode = mtlBuff.cpuCacheMode;
mtlTexDesc.usage = MTLTextureUsageShaderRead;
if ( mvkIsAnyFlagEnabled(_buffer->getUsage(), VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) ) {
mtlTexDesc.usage |= MTLTextureUsageShaderWrite;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
index 3c979d7..de49bb3 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
@@ -175,9 +175,8 @@
? _device->getPhysicalDevice()->getPrivateMemoryTypes()
: _device->getPhysicalDevice()->getAllMemoryTypes());
#if MVK_MACOS
- if (!_isLinear) { // XXX Linear images must support host-coherent memory
- mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
- }
+ // Textures must not use shared memory
+ mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
#endif
#if MVK_IOS
// Only transient attachments may use memoryless storage