diff --git a/src/Device/Sampler.cpp b/src/Device/Sampler.cpp
index b44f557..520f011 100644
--- a/src/Device/Sampler.cpp
+++ b/src/Device/Sampler.cpp
@@ -283,25 +283,6 @@
 		this->sRGB = sRGB;
 	}
 
-	void Sampler::setBorderColor(const Color<float> &borderColor)
-	{
-		// FIXME: Compact into generic function   // FIXME: Clamp
-		short r = iround(0xFFFF * borderColor.r);
-		short g = iround(0xFFFF * borderColor.g);
-		short b = iround(0xFFFF * borderColor.b);
-		short a = iround(0xFFFF * borderColor.a);
-
-		texture.borderColor4[0][0] = texture.borderColor4[0][1] = texture.borderColor4[0][2] = texture.borderColor4[0][3] = r;
-		texture.borderColor4[1][0] = texture.borderColor4[1][1] = texture.borderColor4[1][2] = texture.borderColor4[1][3] = g;
-		texture.borderColor4[2][0] = texture.borderColor4[2][1] = texture.borderColor4[2][2] = texture.borderColor4[2][3] = b;
-		texture.borderColor4[3][0] = texture.borderColor4[3][1] = texture.borderColor4[3][2] = texture.borderColor4[3][3] = a;
-
-		texture.borderColorF[0][0] = texture.borderColorF[0][1] = texture.borderColorF[0][2] = texture.borderColorF[0][3] = borderColor.r;
-		texture.borderColorF[1][0] = texture.borderColorF[1][1] = texture.borderColorF[1][2] = texture.borderColorF[1][3] = borderColor.g;
-		texture.borderColorF[2][0] = texture.borderColorF[2][1] = texture.borderColorF[2][2] = texture.borderColorF[2][3] = borderColor.b;
-		texture.borderColorF[3][0] = texture.borderColorF[3][1] = texture.borderColorF[3][2] = texture.borderColorF[3][3] = borderColor.a;
-	}
-
 	void Sampler::setMaxAnisotropy(float maxAnisotropy)
 	{
 		texture.maxAnisotropy = maxAnisotropy;
diff --git a/src/Device/Sampler.hpp b/src/Device/Sampler.hpp
index a9e0a4b..9f0e72f 100644
--- a/src/Device/Sampler.hpp
+++ b/src/Device/Sampler.hpp
@@ -55,8 +55,6 @@
 		float4 heightLOD;
 		float4 depthLOD;
 
-		word4 borderColor4[4];   // FIXME(b/129523279): Part of Vulkan sampler.
-		float4 borderColorF[4];  // FIXME(b/129523279): Part of Vulkan sampler.
 		float maxAnisotropy;     // FIXME(b/129523279): Part of Vulkan sampler.
 		float minLod;  // FIXME(b/129523279): Part of Vulkan sampler.
 		float maxLod;  // FIXME(b/129523279): Part of Vulkan sampler.
@@ -163,6 +161,7 @@
 			VkComponentMapping swizzle;
 			bool highPrecisionFiltering;
 			CompareFunc compare;
+			VkBorderColor border;
 
 			#if PERF_PROFILE
 			bool compressedFormat;
@@ -184,7 +183,6 @@
 		void setAddressingModeV(AddressingMode addressingMode);
 		void setAddressingModeW(AddressingMode addressingMode);
 		void setReadSRGB(bool sRGB);
-		void setBorderColor(const Color<float> &borderColor);
 		void setMaxAnisotropy(float maxAnisotropy);
 		void setHighPrecisionFiltering(bool highPrecisionFiltering);
 		void setCompareFunc(CompareFunc compare);
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index 377d10a..c29a185 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -170,6 +170,7 @@
 			case VK_FORMAT_R32G32_SINT:
 			case VK_FORMAT_R32G32_UINT:
 				c.z = As<Float4>(UInt4(0));
+				c.w = As<Float4>(UInt4(1));
 			case VK_FORMAT_R8G8B8A8_SINT:
 			case VK_FORMAT_R8G8B8A8_UINT:
 			case VK_FORMAT_R16G16B16A16_SINT:
@@ -359,12 +360,30 @@
 		   state.addressingModeV == ADDRESSING_BORDER ||
 		   (state.addressingModeW == ADDRESSING_BORDER && state.textureType == TEXTURE_3D))
 		{
-			Short4 b;
+			Short4 borderRgb;
+			Short4 borderA;
+			switch (state.border)
+			{
+			case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
+				borderRgb = Short4(0);
+				borderA = Short4(0);
+				break;
+			case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:
+				borderRgb = Short4(0);
+				borderA = hasUnsignedTextureComponent(0) ? Short4(0xffff) : Short4(0x7fff);
+				break;
+			case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:
+				borderRgb = hasUnsignedTextureComponent(0) ? Short4(0xffff) : Short4(0x7fff);
+				borderA = hasUnsignedTextureComponent(0) ? Short4(0xffff) : Short4(0x7fff);
+				break;
+			default:
+				UNIMPLEMENTED("snorm/unorm border %u", state.border);
+			}
 
-			c.x = (borderMask & c.x) | (~borderMask & (*Pointer<Short4>(texture + OFFSET(Texture,borderColor4[0])) >> (hasUnsignedTextureComponent(0) ? 0 : 1)));
-			c.y = (borderMask & c.y) | (~borderMask & (*Pointer<Short4>(texture + OFFSET(Texture,borderColor4[1])) >> (hasUnsignedTextureComponent(1) ? 0 : 1)));
-			c.z = (borderMask & c.z) | (~borderMask & (*Pointer<Short4>(texture + OFFSET(Texture,borderColor4[2])) >> (hasUnsignedTextureComponent(2) ? 0 : 1)));
-			c.w = (borderMask & c.w) | (~borderMask & (*Pointer<Short4>(texture + OFFSET(Texture,borderColor4[3])) >> (hasUnsignedTextureComponent(3) ? 0 : 1)));
+			c.x = (borderMask & c.x) | (~borderMask & borderRgb);
+			c.y = (borderMask & c.y) | (~borderMask & borderRgb);
+			c.z = (borderMask & c.z) | (~borderMask & borderRgb);
+			c.w = (borderMask & c.w) | (~borderMask & borderA);
 		}
 
 		return c;
@@ -831,12 +850,43 @@
 		   state.addressingModeV == ADDRESSING_BORDER ||
 		   (state.addressingModeW == ADDRESSING_BORDER && state.textureType == TEXTURE_3D))
 		{
-			Int4 b;
+			Int4 borderRgb;
+			Int4 borderA;
 
-			c.x = As<Float4>((borderMask & As<Int4>(c.x)) | (~borderMask & *Pointer<Int4>(texture + OFFSET(Texture,borderColorF[0]))));
-			c.y = As<Float4>((borderMask & As<Int4>(c.y)) | (~borderMask & *Pointer<Int4>(texture + OFFSET(Texture,borderColorF[1]))));
-			c.z = As<Float4>((borderMask & As<Int4>(c.z)) | (~borderMask & *Pointer<Int4>(texture + OFFSET(Texture,borderColorF[2]))));
-			c.w = As<Float4>((borderMask & As<Int4>(c.w)) | (~borderMask & *Pointer<Int4>(texture + OFFSET(Texture,borderColorF[3]))));
+			switch (state.border)
+			{
+			case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
+				borderRgb = As<Int4>(Float4(0));
+				borderA = As<Int4>(Float4(0));
+				break;
+			case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:
+				borderRgb = Int4(0);
+				borderA = Int4(0);
+				break;
+			case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:
+				borderRgb = As<Int4>(Float4(0));
+				borderA = As<Int4>(Float4(1));
+				break;
+			case VK_BORDER_COLOR_INT_OPAQUE_BLACK:
+				borderRgb = Int4(0);
+				borderA = Int4(1);
+				break;
+			case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:
+				borderRgb = As<Int4>(Float4(1));
+				borderA = As<Int4>(Float4(1));
+				break;
+			case VK_BORDER_COLOR_INT_OPAQUE_WHITE:
+				borderRgb = Int4(1);
+				borderA = Int4(1);
+				break;
+			default:
+				UNIMPLEMENTED("sint/uint/sfloat border: %u", state.border);
+			}
+
+			c.x = As<Float4>((borderMask & As<Int4>(c.x)) | (~borderMask & borderRgb));
+			c.y = As<Float4>((borderMask & As<Int4>(c.y)) | (~borderMask & borderRgb));
+			c.z = As<Float4>((borderMask & As<Int4>(c.z)) | (~borderMask & borderRgb));
+			c.w = As<Float4>((borderMask & As<Int4>(c.w)) | (~borderMask & borderA));
 		}
 
 		return c;
diff --git a/src/Pipeline/SpirvShaderSampling.cpp b/src/Pipeline/SpirvShaderSampling.cpp
index 593cdbb..c46f6f8 100644
--- a/src/Pipeline/SpirvShaderSampling.cpp
+++ b/src/Pipeline/SpirvShaderSampling.cpp
@@ -83,6 +83,7 @@
 	samplerState.textureType = convertTextureType(imageView->getType());
 	samplerState.textureFormat = imageView->getFormat();
 	samplerState.textureFilter = convertFilterMode(sampler);
+	samplerState.border = sampler->borderColor;
 
 	samplerState.addressingModeU = convertAddressingMode(sampler->addressModeU, imageView->getType());
 	samplerState.addressingModeV = convertAddressingMode(sampler->addressModeV, imageView->getType());
diff --git a/src/Vulkan/VkDescriptorSetLayout.cpp b/src/Vulkan/VkDescriptorSetLayout.cpp
index a383c22..b624057 100644
--- a/src/Vulkan/VkDescriptorSetLayout.cpp
+++ b/src/Vulkan/VkDescriptorSetLayout.cpp
@@ -560,4 +560,4 @@
 	memcpy(memToWrite, memToRead, writeSize);
 }
 
-} // namespace vk
\ No newline at end of file
+} // namespace vk
