MVKDeviceMemory keep MTLResourceOptions aligned with MTLStorageMode & MTLCPUCacheMode.
diff --git a/MoltenVK/MoltenVK/API/mvk_datatypes.h b/MoltenVK/MoltenVK/API/mvk_datatypes.h
index b2c59ba..a3e9792 100644
--- a/MoltenVK/MoltenVK/API/mvk_datatypes.h
+++ b/MoltenVK/MoltenVK/API/mvk_datatypes.h
@@ -464,8 +464,8 @@
 /** Returns the Metal CPU cache mode corresponding to the specified Vulkan memory flags. */
 MTLCPUCacheMode mvkMTLCPUCacheModeFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags);
 
-/** Returns the Metal resource option flags corresponding to the specified Vulkan memory flags. */
-MTLResourceOptions mvkMTLResourceOptionsFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags);
+/** Returns the Metal resource option flags corresponding to the Metal storage mode and cache mode. */
+MTLResourceOptions mvkMTLResourceOptions(MTLStorageMode mtlStorageMode, MTLCPUCacheMode mtlCPUCacheMode);
 
 
 #ifdef __cplusplus
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
index 5c13988..c87b443 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
@@ -101,7 +101,7 @@
 	inline MTLCPUCacheMode getMTLCPUCacheMode() { return _mtlCPUCacheMode; }
 
 	/** Returns the Metal reource options used by this memory allocation. */
-	inline MTLResourceOptions getMTLResourceOptions() { return _mtlResourceOptions; }
+	inline MTLResourceOptions getMTLResourceOptions() { return mvkMTLResourceOptions(_mtlStorageMode, _mtlCPUCacheMode); }
 
 
 #pragma mark Construction
@@ -139,7 +139,6 @@
 	void* _pHostMemory = nullptr;
 	bool _isMapped = false;
 	bool _isDedicated = false;
-	MTLResourceOptions _mtlResourceOptions;
 	MTLStorageMode _mtlStorageMode;
 	MTLCPUCacheMode _mtlCPUCacheMode;
 };
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
index b179646..ee4aedf 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
@@ -163,10 +163,10 @@
 
 	// If host memory was already allocated, it is copied into the new MTLBuffer, and then released.
 	if (_pHostMemory) {
-		_mtlBuffer = [getMTLDevice() newBufferWithBytes: _pHostMemory length: memLen options: _mtlResourceOptions];     // retained
+		_mtlBuffer = [getMTLDevice() newBufferWithBytes: _pHostMemory length: memLen options: getMTLResourceOptions()];     // retained
 		freeHostMemory();
 	} else {
-		_mtlBuffer = [getMTLDevice() newBufferWithLength: memLen options: _mtlResourceOptions];     // retained
+		_mtlBuffer = [getMTLDevice() newBufferWithLength: memLen options: getMTLResourceOptions()];     // retained
 	}
 	_pMemory = isMemoryHostAccessible() ? _mtlBuffer.contents : nullptr;
 
@@ -210,7 +210,6 @@
 								 const VkAllocationCallbacks* pAllocator) : MVKVulkanAPIDeviceObject(device) {
 	// Set Metal memory parameters
 	VkMemoryPropertyFlags vkMemProps = _device->_pMemoryProperties->memoryTypes[pAllocateInfo->memoryTypeIndex].propertyFlags;
-	_mtlResourceOptions = mvkMTLResourceOptionsFromVkMemoryPropertyFlags(vkMemProps);
 	_mtlStorageMode = mvkMTLStorageModeFromVkMemoryPropertyFlags(vkMemProps);
 	_mtlCPUCacheMode = mvkMTLCPUCacheModeFromVkMemoryPropertyFlags(vkMemProps);
 
diff --git a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
index 4e4390e..b58a603 100644
--- a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
+++ b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
@@ -1395,44 +1395,9 @@
 	return MTLCPUCacheModeDefaultCache;
 }
 
-MVK_PUBLIC_SYMBOL MTLResourceOptions mvkMTLResourceOptionsFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags) {
-	MTLResourceOptions mtlFlags = 0;
-
-	// First set the resource CPU cache mode
-	MTLCPUCacheMode mtlCPUMode = mvkMTLCPUCacheModeFromVkMemoryPropertyFlags(vkFlags);
-	switch (mtlCPUMode) {
-		case MTLCPUCacheModeDefaultCache:
-			mvkEnableFlag(mtlFlags, MTLResourceCPUCacheModeDefaultCache);
-			break;
-		case MTLCPUCacheModeWriteCombined:
-			mvkEnableFlag(mtlFlags, MTLResourceCPUCacheModeWriteCombined);
-			break;
-	}
-
-	// Then set the resource storage mode
-	MTLStorageMode mtlStgMode = mvkMTLStorageModeFromVkMemoryPropertyFlags(vkFlags);
-	switch (mtlStgMode) {
-		case MTLStorageModePrivate:
-			mvkEnableFlag(mtlFlags, MTLResourceStorageModePrivate);
-			break;
-		case MTLStorageModeShared:
-			mvkEnableFlag(mtlFlags, MTLResourceStorageModeShared);
-			break;
-#if MVK_MACOS
-		case MTLStorageModeManaged:
-			mvkEnableFlag(mtlFlags, MTLResourceStorageModeManaged);
-			break;
-#endif
-#if MVK_IOS
-		case MTLStorageModeMemoryless:
-			mvkEnableFlag(mtlFlags, MTLResourceStorageModeMemoryless);
-			break;
-#endif
-		default:		// Silence erroneous -Wswitch-enum warning on MTLResourceStorageModeManaged under iOS
-			break;
-	}
-
-	return mtlFlags;
+MVK_PUBLIC_SYMBOL MTLResourceOptions mvkMTLResourceOptions(MTLStorageMode mtlStorageMode,
+														   MTLCPUCacheMode mtlCPUCacheMode) {
+	return (mtlStorageMode << MTLResourceStorageModeShift) | (mtlCPUCacheMode << MTLResourceCPUCacheModeShift);
 }