diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index 4eab6e8..0537db8 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -116,10 +116,10 @@
 		BlitData data = {
 			pixel, nullptr,  // source, dest
 
-			format.bytes(),                                  // sPitchB
-			dest->rowPitchBytes(aspect, subres.mipLevel),    // dPitchB
-			0,                                               // sSliceB (unused in clear operations)
-			dest->slicePitchBytes(aspect, subres.mipLevel),  // dSliceB
+			static_cast<uint32_t>(format.bytes()),                                  // sPitchB
+			static_cast<uint32_t>(dest->rowPitchBytes(aspect, subres.mipLevel)),    // dPitchB
+			0,                                                                      // sSliceB (unused in clear operations)
+			static_cast<uint32_t>(dest->slicePitchBytes(aspect, subres.mipLevel)),  // dSliceB
 
 			0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.0f,  // x0, y0, z0, w, h, d
 
@@ -1901,12 +1901,12 @@
 	}
 
 	BlitData data = {
-		nullptr,                                                          // source
-		nullptr,                                                          // dest
-		src->rowPitchBytes(srcAspect, region.srcSubresource.mipLevel),    // sPitchB
-		dst->rowPitchBytes(dstAspect, region.dstSubresource.mipLevel),    // dPitchB
-		src->slicePitchBytes(srcAspect, region.srcSubresource.mipLevel),  // sSliceB
-		dst->slicePitchBytes(dstAspect, region.dstSubresource.mipLevel),  // dSliceB
+		nullptr,                                                                                 // source
+		nullptr,                                                                                 // dest
+		static_cast<uint32_t>(src->rowPitchBytes(srcAspect, region.srcSubresource.mipLevel)),    // sPitchB
+		static_cast<uint32_t>(dst->rowPitchBytes(dstAspect, region.dstSubresource.mipLevel)),    // dPitchB
+		static_cast<uint32_t>(src->slicePitchBytes(srcAspect, region.srcSubresource.mipLevel)),  // sSliceB
+		static_cast<uint32_t>(dst->slicePitchBytes(dstAspect, region.dstSubresource.mipLevel)),  // dSliceB
 
 		x0,
 		y0,
@@ -2354,7 +2354,7 @@
 	VkExtent3D extent = image->getMipLevelExtent(aspect, subresource.mipLevel);
 	CubeBorderData data = {
 		image->getTexelPointer({ 0, 0, 0 }, posX),
-		image->rowPitchBytes(aspect, subresource.mipLevel),
+		static_cast<uint32_t>(image->rowPitchBytes(aspect, subresource.mipLevel)),
 		static_cast<uint32_t>(image->getLayerSize(aspect)),
 		extent.width
 	};
diff --git a/src/Device/Blitter.hpp b/src/Device/Blitter.hpp
index 0a7ed00..0d91e50 100644
--- a/src/Device/Blitter.hpp
+++ b/src/Device/Blitter.hpp
@@ -104,10 +104,10 @@
 	{
 		const void *source;
 		void *dest;
-		int sPitchB;
-		int dPitchB;
-		int sSliceB;
-		int dSliceB;
+		uint32_t sPitchB;
+		uint32_t dPitchB;
+		uint32_t sSliceB;
+		uint32_t dSliceB;
 
 		float x0;
 		float y0;
@@ -133,7 +133,7 @@
 	struct CubeBorderData
 	{
 		void *layers;
-		int pitchB;
+		uint32_t pitchB;
 		uint32_t layerSize;
 		uint32_t dim;
 	};
diff --git a/src/Vulkan/VkFormat.cpp b/src/Vulkan/VkFormat.cpp
index 56b331e..65ed94a 100644
--- a/src/Vulkan/VkFormat.cpp
+++ b/src/Vulkan/VkFormat.cpp
@@ -1529,7 +1529,7 @@
 	return false;
 }
 
-int Format::bytes() const
+size_t Format::bytes() const
 {
 	switch(format)
 	{
@@ -1742,7 +1742,7 @@
 	return 0;
 }
 
-int Format::pitchB(int width, int border) const
+size_t Format::pitchB(int width, int border) const
 {
 	// Render targets require 2x2 quads
 	width = sw::align<2>(width + 2 * border);
@@ -1818,7 +1818,7 @@
 	}
 }
 
-int Format::sliceBUnpadded(int width, int height, int border) const
+size_t Format::sliceBUnpadded(int width, int height, int border) const
 {
 	// Render targets require 2x2 quads
 	height = sw::align<2>(height + 2 * border);
@@ -1890,7 +1890,7 @@
 	}
 }
 
-int Format::sliceB(int width, int height, int border) const
+size_t Format::sliceB(int width, int height, int border) const
 {
 	return sw::align<16>(sliceBUnpadded(width, height, border) + 15);
 }
diff --git a/src/Vulkan/VkFormat.hpp b/src/Vulkan/VkFormat.hpp
index 8a69d5b..dcfe40e 100644
--- a/src/Vulkan/VkFormat.hpp
+++ b/src/Vulkan/VkFormat.hpp
@@ -56,9 +56,9 @@
 	int componentCount() const;
 	bool isUnsignedComponent(int component) const;
 
-	int bytes() const;
-	int pitchB(int width, int border) const;
-	int sliceB(int width, int height, int border) const;
+	size_t bytes() const;
+	size_t pitchB(int width, int border) const;
+	size_t sliceB(int width, int height, int border) const;
 
 	sw::float4 getScale() const;
 
@@ -78,7 +78,7 @@
 
 private:
 	VkFormat compatibleFormat() const;
-	int sliceBUnpadded(int width, int height, int border) const;
+	size_t sliceBUnpadded(int width, int height, int border) const;
 
 	VkFormat format = VK_FORMAT_UNDEFINED;
 };
diff --git a/src/Vulkan/VkImage.cpp b/src/Vulkan/VkImage.cpp
index 1fd7d37..3f77be6 100644
--- a/src/Vulkan/VkImage.cpp
+++ b/src/Vulkan/VkImage.cpp
@@ -817,7 +817,7 @@
 	return mipLevelExtent;
 }
 
-int Image::rowPitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
+size_t Image::rowPitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
 {
 	if(deviceMemory && deviceMemory->hasExternalImageProperties())
 	{
@@ -839,7 +839,7 @@
 	return usedFormat.pitchB(mipLevelExtent.width, borderSize());
 }
 
-int Image::slicePitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
+size_t Image::slicePitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
 {
 	// Depth and Stencil slice should be computed separately
 	ASSERT((aspect & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) !=
@@ -937,8 +937,7 @@
 
 VkDeviceSize Image::getMipLevelSize(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
 {
-	return static_cast<VkDeviceSize>(slicePitchBytes(aspect, mipLevel)) *
-	       getMipLevelExtent(aspect, mipLevel).depth;
+	return slicePitchBytes(aspect, mipLevel) * getMipLevelExtent(aspect, mipLevel).depth;
 }
 
 VkDeviceSize Image::getMultiSampledLevelSize(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
diff --git a/src/Vulkan/VkImage.hpp b/src/Vulkan/VkImage.hpp
index 65813ab..0f059e9 100644
--- a/src/Vulkan/VkImage.hpp
+++ b/src/Vulkan/VkImage.hpp
@@ -87,8 +87,8 @@
 	VkSampleCountFlagBits getSampleCountFlagBits() const { return samples; }
 	const VkExtent3D &getExtent() const { return extent; }
 	VkExtent3D getMipLevelExtent(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
-	int rowPitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
-	int slicePitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
+	size_t rowPitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
+	size_t slicePitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
 	void *getTexelPointer(const VkOffset3D &offset, const VkImageSubresource &subresource) const;
 	bool isCubeCompatible() const;
 	bool is3DSlice() const;
