diff --git a/src/Vulkan/VkDeviceMemory.hpp b/src/Vulkan/VkDeviceMemory.hpp
index 8a66056..91dcc92 100644
--- a/src/Vulkan/VkDeviceMemory.hpp
+++ b/src/Vulkan/VkDeviceMemory.hpp
@@ -57,6 +57,7 @@
 	// Internal implementation class for external memory. Platform-specific.
 	class ExternalBase;
 
+	bool hasExternalMemory() const { return external; }
 	bool hasExternalImageProperties() const;
 	int externalImageRowPitchBytes(VkImageAspectFlagBits aspect) const;
 	VkDeviceSize externalImageMemoryOffset(VkImageAspectFlagBits aspect) const;
diff --git a/src/Vulkan/VkFormat.cpp b/src/Vulkan/VkFormat.cpp
index 48340ab..216658b 100644
--- a/src/Vulkan/VkFormat.cpp
+++ b/src/Vulkan/VkFormat.cpp
@@ -1703,7 +1703,7 @@
 	return 0;
 }
 
-int Format::pitchB(int width, int border) const
+int Format::pitchB(int width, int border, bool external) const
 {
 	// Render targets require 2x2 quads
 	width = sw::align<2>(width + 2 * border);
@@ -1779,7 +1779,7 @@
 	}
 }
 
-int Format::sliceBUnpadded(int width, int height, int border) const
+int Format::sliceBUnpadded(int width, int height, int border, bool external) const
 {
 	// Render targets require 2x2 quads
 	height = sw::align<2>(height + 2 * border);
@@ -1812,7 +1812,7 @@
 	case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
 	case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
-		return pitchB(width, border) * ((height + 3) / 4);  // Pitch computed per 4 rows
+		return pitchB(width, border, external) * ((height + 3) / 4);  // Pitch computed per 4 rows
 	case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
 	case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
@@ -1821,39 +1821,39 @@
 	case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
 	case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
-		return pitchB(width, border) * ((height + 4) / 5);  // Pitch computed per 5 rows
+		return pitchB(width, border, external) * ((height + 4) / 5);  // Pitch computed per 5 rows
 	case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
 	case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
 	case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
-		return pitchB(width, border) * ((height + 5) / 6);  // Pitch computed per 6 rows
+		return pitchB(width, border, external) * ((height + 5) / 6);  // Pitch computed per 6 rows
 	case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
 	case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
-		return pitchB(width, border) * ((height + 7) / 8);  // Pitch computed per 8 rows
+		return pitchB(width, border, external) * ((height + 7) / 8);  // Pitch computed per 8 rows
 	case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
 	case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
-		return pitchB(width, border) * ((height + 9) / 10);  // Pitch computed per 10 rows
+		return pitchB(width, border, external) * ((height + 9) / 10);  // Pitch computed per 10 rows
 	case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
 	case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
-		return pitchB(width, border) * ((height + 11) / 12);  // Pitch computed per 12 rows
+		return pitchB(width, border, external) * ((height + 11) / 12);  // Pitch computed per 12 rows
 	case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
 	case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 		// "Images in this format must be defined with a width and height that is a multiple of two."
-		return pitchB(width, border) * (height + height / 2);  // U and V planes are 1/4 size of Y plane.
+		return pitchB(width, border, external) * (height + height / 2);  // U and V planes are 1/4 size of Y plane.
 	default:
-		return pitchB(width, border) * height;  // Pitch computed per row
+		return pitchB(width, border, external) * height;  // Pitch computed per row
 	}
 }
 
-int Format::sliceB(int width, int height, int border) const
+int Format::sliceB(int width, int height, int border, bool external) const
 {
-	return sw::align<16>(sliceBUnpadded(width, height, border) + 15);
+	return sw::align<16>(sliceBUnpadded(width, height, border, external) + 15);
 }
 
 sw::float4 Format::getScale() const
diff --git a/src/Vulkan/VkFormat.hpp b/src/Vulkan/VkFormat.hpp
index dd26314..f9010cb 100644
--- a/src/Vulkan/VkFormat.hpp
+++ b/src/Vulkan/VkFormat.hpp
@@ -55,8 +55,8 @@
 	bool isUnsignedComponent(int component) const;
 
 	int bytes() const;
-	int pitchB(int width, int border) const;
-	int sliceB(int width, int height, int border) const;
+	int pitchB(int width, int border, bool external) const;
+	int sliceB(int width, int height, int border, bool external) const;
 
 	sw::float4 getScale() const;
 
@@ -74,7 +74,7 @@
 
 private:
 	VkFormat compatibleFormat() const;
-	int sliceBUnpadded(int width, int height, int border) const;
+	int sliceBUnpadded(int width, int height, int border, bool external) const;
 
 	VkFormat format = VK_FORMAT_UNDEFINED;
 };
diff --git a/src/Vulkan/VkImage.cpp b/src/Vulkan/VkImage.cpp
index 534281f..a29cd1e 100644
--- a/src/Vulkan/VkImage.cpp
+++ b/src/Vulkan/VkImage.cpp
@@ -807,7 +807,7 @@
 		return extentInBlocks.width * usedFormat.bytesPerBlock();
 	}
 
-	return usedFormat.pitchB(mipLevelExtent.width, borderSize());
+	return usedFormat.pitchB(mipLevelExtent.width, borderSize(), deviceMemory && deviceMemory->hasExternalMemory());
 }
 
 int Image::slicePitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
@@ -824,7 +824,7 @@
 		return extentInBlocks.height * extentInBlocks.width * usedFormat.bytesPerBlock();
 	}
 
-	return usedFormat.sliceB(mipLevelExtent.width, mipLevelExtent.height, borderSize());
+	return usedFormat.sliceB(mipLevelExtent.width, mipLevelExtent.height, borderSize(), deviceMemory && deviceMemory->hasExternalMemory());
 }
 
 Format Image::getFormat(VkImageAspectFlagBits aspect) const
