diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
index c8c1c8b..c44f478 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
@@ -147,7 +147,7 @@
 #pragma mark Metal
 
 	/** Returns the Metal texture underlying this image. */
-	id<MTLTexture> getMTLTexture();
+	virtual id<MTLTexture> getMTLTexture();
 
 	/** Returns a Metal texture that interprets the pixels in the specified format. */
 	id<MTLTexture> getMTLTexture(MTLPixelFormat mtlPixFmt);
@@ -235,7 +235,7 @@
 	bool validateUseTexelBuffer();
 	void initSubresources(const VkImageCreateInfo* pCreateInfo);
 	void initSubresourceLayout(MVKImageSubresource& imgSubRez);
-	virtual id<MTLTexture> newMTLTexture();
+	id<MTLTexture> newMTLTexture();
 	void releaseMTLTexture();
     void releaseIOSurface();
 	MTLTextureDescriptor* newMTLTextureDescriptor();
@@ -300,6 +300,9 @@
 
 #pragma mark Metal
 
+	/** Returns the Metal texture used by the CAMetalDrawable underlying this image. */
+	id<MTLTexture> getMTLTexture() override;
+
 	/**
 	 * Presents the contained drawable to the OS, releases the Metal drawable and its
 	 * texture back to the Metal layer's pool, and makes the image memory available for new use.
@@ -324,7 +327,6 @@
 protected:
 	friend MVKSwapchain;
 
-	id<MTLTexture> newMTLTexture() override;
 	id<CAMetalDrawable> getCAMetalDrawable();
 	void releaseMetalDrawable();
 	MVKSwapchainImageAvailability getAvailability();
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
index 8a16ef2..65637b5 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
@@ -298,34 +298,6 @@
 	return mtlTex;
 }
 
-VkResult MVKImage::setMTLTexture(id<MTLTexture> mtlTexture) {
-    lock_guard<mutex> lock(_lock);
-    releaseMTLTexture();
-    releaseIOSurface();
-
-    _mtlTexture = [mtlTexture retain];		// retained
-
-    _mtlPixelFormat = _mtlTexture.pixelFormat;
-    _mtlTextureType = _mtlTexture.textureType;
-    _extent.width = uint32_t(_mtlTexture.width);
-    _extent.height = uint32_t(_mtlTexture.height);
-    _extent.depth = uint32_t(_mtlTexture.depth);
-    _mipLevels = uint32_t(_mtlTexture.mipmapLevelCount);
-    _samples = mvkVkSampleCountFlagBitsFromSampleCount(_mtlTexture.sampleCount);
-    _arrayLayers = uint32_t(_mtlTexture.arrayLength);
-    _usage = getPixelFormats()->getVkImageUsageFlagsFromMTLTextureUsage(_mtlTexture.usage, _mtlPixelFormat);
-
-    if (_device->_pMetalFeatures->ioSurfaces) {
-        _ioSurface = mtlTexture.iosurface;
-        CFRetain(_ioSurface);
-    }
-
-    return VK_SUCCESS;
-}
-
-// Creates and returns a retained Metal texture suitable for use in this instance.
-// This implementation creates a new MTLTexture from a MTLTextureDescriptor and possible IOSurface.
-// Subclasses may override this function to create the MTLTexture in a different manner.
 id<MTLTexture> MVKImage::newMTLTexture() {
 	id<MTLTexture> mtlTex = nil;
 	MTLTextureDescriptor* mtlTexDesc = newMTLTextureDescriptor();	// temp retain
@@ -348,6 +320,32 @@
 	return mtlTex;
 }
 
+VkResult MVKImage::setMTLTexture(id<MTLTexture> mtlTexture) {
+	lock_guard<mutex> lock(_lock);
+
+	releaseMTLTexture();
+	releaseIOSurface();
+
+	_mtlTexture = [mtlTexture retain];		// retained
+
+	_mtlPixelFormat = mtlTexture.pixelFormat;
+	_mtlTextureType = mtlTexture.textureType;
+	_extent.width = uint32_t(mtlTexture.width);
+	_extent.height = uint32_t(mtlTexture.height);
+	_extent.depth = uint32_t(mtlTexture.depth);
+	_mipLevels = uint32_t(mtlTexture.mipmapLevelCount);
+	_samples = mvkVkSampleCountFlagBitsFromSampleCount(mtlTexture.sampleCount);
+	_arrayLayers = uint32_t(mtlTexture.arrayLength);
+	_usage = getPixelFormats()->getVkImageUsageFlagsFromMTLTextureUsage(mtlTexture.usage, _mtlPixelFormat);
+
+	if (_device->_pMetalFeatures->ioSurfaces) {
+		_ioSurface = mtlTexture.iosurface;
+		CFRetain(_ioSurface);
+	}
+
+	return VK_SUCCESS;
+}
+
 // Removes and releases the MTLTexture object, and all associated texture views
 void MVKImage::releaseMTLTexture() {
 	[_mtlTexture release];
@@ -929,11 +927,8 @@
 
 #pragma mark Metal
 
-// Creates and returns a retained Metal texture suitable for use in this instance.
-// This implementation retrieves a MTLTexture from the CAMetalDrawable.
-id<MTLTexture> MVKSwapchainImage::newMTLTexture() {
-	return [[getCAMetalDrawable() texture] retain];
-}
+// Overridden to always retrieve the MTLTexture directly from the CAMetalDrawable.
+id<MTLTexture> MVKSwapchainImage::getMTLTexture() { return [getCAMetalDrawable() texture]; }
 
 id<CAMetalDrawable> MVKSwapchainImage::getCAMetalDrawable() {
 	while ( !_mtlDrawable ) {
@@ -941,7 +936,7 @@
 			uint64_t startTime = _device->getPerformanceTimestamp();
 
 			_mtlDrawable = [_swapchain->_mtlLayer.nextDrawable retain];
-			if ( !_mtlDrawable ) { MVKLogError("CAMetalDrawable could not be acquired after %.6f ms.", mvkGetElapsedMilliseconds(startTime)); }
+			if ( !_mtlDrawable ) { MVKLogError("CAMetalDrawable could not be acquired."); }
 
 			_device->addActivityPerformance(_device->_performanceStatistics.queue.nextCAMetalDrawable, startTime);
 		}
