diff --git a/src/Device/Sampler.hpp b/src/Device/Sampler.hpp
index 9d80a3b..b348a80 100644
--- a/src/Device/Sampler.hpp
+++ b/src/Device/Sampler.hpp
@@ -52,26 +52,6 @@
 		float4 depth;
 	};
 
-	enum SamplerType
-	{
-		SAMPLER_PIXEL,
-		SAMPLER_VERTEX
-	};
-
-	enum TextureType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
-	{
-		TEXTURE_NULL,       // TODO(b/129523279): Eliminate
-		TEXTURE_1D,
-		TEXTURE_2D,
-		TEXTURE_3D,
-		TEXTURE_CUBE,
-		TEXTURE_1D_ARRAY,   // Treated as 2D texture with second coordinate 0. TODO(b/134669567)
-		TEXTURE_2D_ARRAY,
-		TEXTURE_CUBE_ARRAY,
-
-		TEXTURE_LAST = TEXTURE_CUBE_ARRAY
-	};
-
 	enum FilterType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
 	{
 		FILTER_POINT,
@@ -109,36 +89,9 @@
 		ADDRESSING_LAST = ADDRESSING_TEXELFETCH
 	};
 
-	enum CompareFunc ENUM_UNDERLYING_TYPE_UNSIGNED_INT
-	{
-		COMPARE_BYPASS,
-		COMPARE_LESSEQUAL,
-		COMPARE_GREATEREQUAL,
-		COMPARE_LESS,
-		COMPARE_GREATER,
-		COMPARE_EQUAL,
-		COMPARE_NOTEQUAL,
-		COMPARE_ALWAYS,
-		COMPARE_NEVER,
-
-		COMPARE_LAST = COMPARE_NEVER
-	};
-
-	enum SwizzleType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
-	{
-		SWIZZLE_RED,
-		SWIZZLE_GREEN,
-		SWIZZLE_BLUE,
-		SWIZZLE_ALPHA,
-		SWIZZLE_ZERO,
-		SWIZZLE_ONE,
-
-		SWIZZLE_LAST = SWIZZLE_ONE
-	};
-
 	struct Sampler
 	{
-		TextureType textureType;
+		VkImageViewType textureType;
 		vk::Format textureFormat;
 		FilterType textureFilter;
 		AddressingMode addressingModeU;
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index d832bcb..3c2dc9a 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -68,7 +68,7 @@
 		Float4 vDelta;
 		Float4 M;  // Major axis
 
-		if(state.textureType == TEXTURE_CUBE)
+		if(state.textureType == VK_IMAGE_VIEW_TYPE_CUBE)
 		{
 			Int4 face = cubeFace(uuuu, vvvv, u, v, w, M);
 			wwww = As<Float4>(face);
@@ -76,9 +76,9 @@
 
 		if(function == Implicit || function == Bias || function == Grad || function == Query)
 		{
-			if(state.textureType != TEXTURE_3D)
+			if(state.textureType != VK_IMAGE_VIEW_TYPE_3D)
 			{
-				if(state.textureType != TEXTURE_CUBE)
+				if(state.textureType != VK_IMAGE_VIEW_TYPE_CUBE)
 				{
 					computeLod(texture, sampler, lod, anisotropy, uDelta, vDelta, uuuu, vvvv, dsx, dsy, function);
 				}
@@ -446,7 +446,7 @@
 
 	Vector4s SamplerCore::sampleQuad(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Vector4f &offset, Float &lod, bool secondLOD, SamplerFunction function)
 	{
-		if(state.textureType != TEXTURE_3D)
+		if(state.textureType != VK_IMAGE_VIEW_TYPE_3D)
 		{
 			return sampleQuad2D(texture, u, v, w, offset, lod, secondLOD, function);
 		}
@@ -867,7 +867,7 @@
 
 	Vector4f SamplerCore::sampleFloat(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Vector4f &offset, Float &lod, bool secondLOD, SamplerFunction function)
 	{
-		if(state.textureType != TEXTURE_3D)
+		if(state.textureType != VK_IMAGE_VIEW_TYPE_3D)
 		{
 			return sampleFloat2D(texture, u, v, w, q, offset, lod, secondLOD, function);
 		}
@@ -1288,7 +1288,7 @@
 
 		if(hasThirdCoordinate())
 		{
-			if(state.textureType == TEXTURE_3D)
+			if(state.textureType == VK_IMAGE_VIEW_TYPE_3D)
 			{
 				if(!texelFetch)
 				{
@@ -2361,9 +2361,9 @@
 
 	bool SamplerCore::hasThirdCoordinate() const
 	{
-		return (state.textureType == TEXTURE_3D) ||
-		       (state.textureType == TEXTURE_2D_ARRAY) ||
-		       (state.textureType == TEXTURE_1D_ARRAY);  // Treated as 2D texture with second coordinate 0. TODO(b/134669567)
+		return (state.textureType == VK_IMAGE_VIEW_TYPE_3D) ||
+		       (state.textureType == VK_IMAGE_VIEW_TYPE_2D_ARRAY) ||
+		       (state.textureType == VK_IMAGE_VIEW_TYPE_1D_ARRAY);  // Treated as 2D texture with second coordinate 0. TODO(b/134669567)
 	}
 
 	bool SamplerCore::has16bitTextureFormat() const
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 1066da5..2c78203 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -1235,7 +1235,6 @@
 		static std::shared_ptr<rr::Routine> emitSamplerRoutine(ImageInstruction instruction, const Sampler &samplerState);
 
 		// TODO(b/129523279): Eliminate conversion and use vk::Sampler members directly.
-		static sw::TextureType convertTextureType(VkImageViewType imageViewType);
 		static sw::FilterType convertFilterMode(const vk::Sampler *sampler);
 		static sw::MipmapType convertMipmapMode(const vk::Sampler *sampler);
 		static sw::AddressingMode convertAddressingMode(int coordinateIndex, VkSamplerAddressMode addressMode, VkImageViewType imageViewType);
diff --git a/src/Pipeline/SpirvShaderSampling.cpp b/src/Pipeline/SpirvShaderSampling.cpp
index 6a232fd..9013bf6 100644
--- a/src/Pipeline/SpirvShaderSampling.cpp
+++ b/src/Pipeline/SpirvShaderSampling.cpp
@@ -57,7 +57,7 @@
 	auto type = imageDescriptor->type;
 
 	Sampler samplerState = {};
-	samplerState.textureType = convertTextureType(type);
+	samplerState.textureType = type;
 	samplerState.textureFormat = imageDescriptor->format;
 	samplerState.textureFilter = (instruction.samplerMethod == Gather) ? FILTER_GATHER : convertFilterMode(sampler);
 	samplerState.border = sampler->borderColor;
@@ -128,11 +128,11 @@
 
 		// TODO(b/134669567): Currently 1D textures are treated as 2D by setting the second coordinate to 0.
 		// Implement optimized 1D sampling.
-		if(samplerState.textureType == TEXTURE_1D)
+		if(samplerState.textureType == VK_IMAGE_VIEW_TYPE_1D)
 		{
 			uvw[1] = SIMD::Float(0);
 		}
-		else if(samplerState.textureType == TEXTURE_1D_ARRAY)
+		else if(samplerState.textureType == VK_IMAGE_VIEW_TYPE_1D_ARRAY)
 		{
 			uvw[1] = SIMD::Float(0);
 			uvw[2] = in[1];  // Move 1D layer coordinate to 2D layer coordinate index.
@@ -185,7 +185,7 @@
 				dPdy.z = Pointer<Float>(&dsy.z)[i];
 
 				// 1D textures are treated as 2D texture with second coordinate 0, so we also need to zero out the second grad component. TODO(b/134669567)
-				if(samplerState.textureType == TEXTURE_1D || samplerState.textureType == TEXTURE_1D_ARRAY)
+				if(samplerState.textureType == VK_IMAGE_VIEW_TYPE_1D || samplerState.textureType == VK_IMAGE_VIEW_TYPE_1D_ARRAY)
 				{
 					dPdx.y = Float(0.0f);
 					dPdy.y = Float(0.0f);
@@ -215,23 +215,6 @@
 	return function("sampler");
 }
 
-sw::TextureType SpirvShader::convertTextureType(VkImageViewType imageViewType)
-{
-	switch(imageViewType)
-	{
-	case VK_IMAGE_VIEW_TYPE_1D:         return TEXTURE_1D;
-	case VK_IMAGE_VIEW_TYPE_2D:         return TEXTURE_2D;
-	case VK_IMAGE_VIEW_TYPE_3D:         return TEXTURE_3D;
-	case VK_IMAGE_VIEW_TYPE_CUBE:       return TEXTURE_CUBE;
-	case VK_IMAGE_VIEW_TYPE_1D_ARRAY:   return TEXTURE_1D_ARRAY;
-	case VK_IMAGE_VIEW_TYPE_2D_ARRAY:   return TEXTURE_2D_ARRAY;
-//	case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: return TEXTURE_CUBE_ARRAY;
-	default:
-		UNIMPLEMENTED("imageViewType %d", imageViewType);
-		return TEXTURE_2D;
-	}
-}
-
 sw::FilterType SpirvShader::convertFilterMode(const vk::Sampler *sampler)
 {
 	switch(sampler->magFilter)
