diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index 946eafc..5333359 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -1750,7 +1750,7 @@
 	if((region.srcSubresource.layerCount != region.dstSubresource.layerCount) ||
 	   (region.srcSubresource.aspectMask != region.dstSubresource.aspectMask))
 	{
-		UNIMPLEMENTED("region");
+		UNSUPPORTED("region");
 	}
 
 	if(region.dstOffsets[0].x > region.dstOffsets[1].x)
@@ -1892,7 +1892,7 @@
 
 	if(state.srcSamples != 1)
 	{
-		UNIMPLEMENTED("state.srcSamples %d", state.srcSamples);
+		UNSUPPORTED("state.srcSamples %d", state.srcSamples);
 	}
 
 	CornerUpdateFunction function;
@@ -1924,8 +1924,8 @@
 {
 	if(image->getArrayLayers() < (subresourceLayers.baseArrayLayer + 6))
 	{
-		UNIMPLEMENTED("image->getArrayLayers() %d, baseArrayLayer %d",
-		              image->getArrayLayers(), subresourceLayers.baseArrayLayer);
+		UNSUPPORTED("image->getArrayLayers() %d, baseArrayLayer %d",
+		            image->getArrayLayers(), subresourceLayers.baseArrayLayer);
 	}
 
 	// From Vulkan 1.1 spec, section 11.5. Image Views:
@@ -1982,7 +1982,7 @@
 
 	if(samples != VK_SAMPLE_COUNT_1_BIT)
 	{
-		UNIMPLEMENTED("Multi-sampled cube: %d samples", static_cast<int>(samples));
+		UNSUPPORTED("Multi-sampled cube: %d samples", static_cast<int>(samples));
 	}
 
 	auto cornerUpdateRoutine = getCornerUpdateRoutine(state);
diff --git a/src/Device/Context.cpp b/src/Device/Context.cpp
index 5275e67..1303e4c 100644
--- a/src/Device/Context.cpp
+++ b/src/Device/Context.cpp
@@ -43,7 +43,7 @@
 		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:
 			return polygonModeAware ? (polygonMode == VK_POLYGON_MODE_POINT) : false;
 		default:
-			UNIMPLEMENTED("topology %d", int(topology));
+			UNSUPPORTED("topology %d", int(topology));
 	}
 	return false;
 }
@@ -62,7 +62,7 @@
 		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:
 			return polygonModeAware ? (polygonMode == VK_POLYGON_MODE_LINE) : false;
 		default:
-			UNIMPLEMENTED("topology %d", int(topology));
+			UNSUPPORTED("topology %d", int(topology));
 	}
 	return false;
 }
@@ -80,7 +80,7 @@
 		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:
 			return polygonModeAware ? (polygonMode == VK_POLYGON_MODE_FILL) : true;
 		default:
-			UNIMPLEMENTED("topology %d", int(topology));
+			UNSUPPORTED("topology %d", int(topology));
 	}
 	return false;
 }
diff --git a/src/Pipeline/PixelProgram.cpp b/src/Pipeline/PixelProgram.cpp
index 7fd52fa..fff8b93 100644
--- a/src/Pipeline/PixelProgram.cpp
+++ b/src/Pipeline/PixelProgram.cpp
@@ -291,7 +291,7 @@
 				}
 				break;
 			default:
-				UNIMPLEMENTED("VkFormat: %d", int(format));
+				UNSUPPORTED("VkFormat: %d", int(format));
 		}
 	}
 }
@@ -363,7 +363,7 @@
 			case VK_FORMAT_A2R10G10B10_UINT_PACK32:
 				break;
 			default:
-				UNIMPLEMENTED("VkFormat: %d", int(state.targetFormat[index]));
+				UNSUPPORTED("VkFormat: %d", int(state.targetFormat[index]));
 		}
 	}
 }
diff --git a/src/Pipeline/PixelRoutine.cpp b/src/Pipeline/PixelRoutine.cpp
index ffb81b8..dc91691 100644
--- a/src/Pipeline/PixelRoutine.cpp
+++ b/src/Pipeline/PixelRoutine.cpp
@@ -370,7 +370,7 @@
 			value ^= Byte8(0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
 			break;
 		default:
-			UNIMPLEMENTED("VkCompareOp: %d", int(stencilCompareMode));
+			UNSUPPORTED("VkCompareOp: %d", int(stencilCompareMode));
 	}
 }
 
@@ -429,7 +429,7 @@
 			zTest = CmpLT(zValue, Z);
 			break;
 		default:
-			UNIMPLEMENTED("VkCompareOp: %d", int(state.depthCompareMode));
+			UNSUPPORTED("VkCompareOp: %d", int(state.depthCompareMode));
 	}
 
 	switch(state.depthCompareMode)
@@ -512,7 +512,7 @@
 			zTest = Int4(CmpGT(Z, zValue));
 			break;
 		default:
-			UNIMPLEMENTED("VkCompareOp: %d", int(state.depthCompareMode));
+			UNSUPPORTED("VkCompareOp: %d", int(state.depthCompareMode));
 	}
 
 	switch(state.depthCompareMode)
@@ -779,7 +779,7 @@
 			output = bufferValue - Byte8(1, 1, 1, 1, 1, 1, 1, 1);
 			break;
 		default:
-			UNIMPLEMENTED("VkStencilOp: %d", int(operation));
+			UNSUPPORTED("VkStencilOp: %d", int(operation));
 	}
 }
 
@@ -860,7 +860,7 @@
 			blendFactor.z = *Pointer<Short4>(data + OFFSET(DrawData, factor.invBlendConstant4W[3]));
 			break;
 		default:
-			UNIMPLEMENTED("VkBlendFactor: %d", int(blendFactorActive));
+			UNSUPPORTED("VkBlendFactor: %d", int(blendFactorActive));
 	}
 }
 
@@ -910,7 +910,7 @@
 			blendFactor.w = *Pointer<Short4>(data + OFFSET(DrawData, factor.invBlendConstant4W[3]));
 			break;
 		default:
-			UNIMPLEMENTED("VkBlendFactor: %d", int(blendFactorAlphaActive));
+			UNSUPPORTED("VkBlendFactor: %d", int(blendFactorAlphaActive));
 	}
 }
 
@@ -1075,7 +1075,7 @@
 		}
 		break;
 		default:
-			UNIMPLEMENTED("VkFormat %d", state.targetFormat[index]);
+			UNSUPPORTED("VkFormat %d", state.targetFormat[index]);
 	}
 
 	if(isSRGB(index))
@@ -1156,7 +1156,7 @@
 			current.z = Short4(0x0000);
 			break;
 		default:
-			UNIMPLEMENTED("VkBlendOp: %d", int(state.blendState[index].blendOperation));
+			UNSUPPORTED("VkBlendOp: %d", int(state.blendState[index].blendOperation));
 	}
 
 	blendFactorAlpha(sourceFactor, current, pixel, state.blendState[index].sourceBlendFactorAlpha);
@@ -1199,7 +1199,7 @@
 			current.w = Short4(0x0000);
 			break;
 		default:
-			UNIMPLEMENTED("VkBlendOp: %d", int(state.blendState[index].blendOperationAlpha));
+			UNSUPPORTED("VkBlendOp: %d", int(state.blendState[index].blendOperationAlpha));
 	}
 }
 
@@ -1392,7 +1392,7 @@
 			break;
 		}
 		default:
-			UNIMPLEMENTED("VkFormat: %d", int(state.targetFormat[index]));
+			UNSUPPORTED("VkFormat: %d", int(state.targetFormat[index]));
 	}
 
 	Short4 c01 = current.z;
@@ -1704,7 +1704,7 @@
 		}
 		break;
 		default:
-			UNIMPLEMENTED("VkFormat: %d", int(state.targetFormat[index]));
+			UNSUPPORTED("VkFormat: %d", int(state.targetFormat[index]));
 	}
 }
 
@@ -1790,7 +1790,7 @@
 			break;
 
 		default:
-			UNIMPLEMENTED("VkBlendFactor: %d", int(blendFactorActive));
+			UNSUPPORTED("VkBlendFactor: %d", int(blendFactorActive));
 	}
 }
 
@@ -1840,7 +1840,7 @@
 			blendFactor.w = *Pointer<Float4>(data + OFFSET(DrawData, factor.invBlendConstant4F[3]));
 			break;
 		default:
-			UNIMPLEMENTED("VkBlendFactor: %d", int(blendFactorAlphaActive));
+			UNSUPPORTED("VkBlendFactor: %d", int(blendFactorAlphaActive));
 	}
 }
 
@@ -1967,7 +1967,7 @@
 			pixel.w = one;
 			break;
 		default:
-			UNIMPLEMENTED("VkFormat: %d", int(state.targetFormat[index]));
+			UNSUPPORTED("VkFormat: %d", int(state.targetFormat[index]));
 	}
 
 	// Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
@@ -2026,7 +2026,7 @@
 			oC.z = Float4(0.0f);
 			break;
 		default:
-			UNIMPLEMENTED("VkBlendOp: %d", int(state.blendState[index].blendOperation));
+			UNSUPPORTED("VkBlendOp: %d", int(state.blendState[index].blendOperation));
 	}
 
 	blendFactorAlpha(sourceFactor, oC, pixel, state.blendState[index].sourceBlendFactorAlpha);
@@ -2063,7 +2063,7 @@
 			oC.w = Float4(0.0f);
 			break;
 		default:
-			UNIMPLEMENTED("VkBlendOp: %d", int(state.blendState[index].blendOperationAlpha));
+			UNSUPPORTED("VkBlendOp: %d", int(state.blendState[index].blendOperationAlpha));
 	}
 
 	if(format.isUnsignedComponent(0)) { oC.x = Max(oC.x, Float4(0.0f)); }
@@ -2114,7 +2114,7 @@
 			transpose4x4(oC.x, oC.y, oC.z, oC.w);
 			break;
 		default:
-			UNIMPLEMENTED("VkFormat: %d", int(state.targetFormat[index]));
+			UNSUPPORTED("VkFormat: %d", int(state.targetFormat[index]));
 	}
 
 	int rgbaWriteMask = state.colorWriteActive(index);
@@ -2698,7 +2698,7 @@
 			}
 			break;
 		default:
-			UNIMPLEMENTED("VkFormat: %d", int(targetFormat));
+			UNSUPPORTED("VkFormat: %d", int(targetFormat));
 	}
 }
 
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index 6026600..ae8e787 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -2031,7 +2031,7 @@
 				break;
 			}
 			default:
-				UNIMPLEMENTED("Format %d", VkFormat(state.textureFormat));
+				UNSUPPORTED("Format %d", VkFormat(state.textureFormat));
 		}
 	}
 	else
@@ -2142,7 +2142,7 @@
 			borderA = Int4(1);
 			break;
 		default:
-			UNIMPLEMENTED("sint/uint/sfloat border: %u", state.border);
+			UNSUPPORTED("sint/uint/sfloat border: %u", state.border);
 	}
 
 	Vector4f out;
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 0da463c..95457fb 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -272,7 +272,7 @@
 					}
 					case spv::StorageClassAtomicCounter:
 					case spv::StorageClassImage:
-						UNIMPLEMENTED("StorageClass %d not yet implemented", (int)storageClass);
+						UNSUPPORTED("StorageClass %d not yet implemented", (int)storageClass);
 						break;
 
 					case spv::StorageClassCrossWorkgroup:
@@ -722,7 +722,7 @@
 			}
 
 			default:
-				UNIMPLEMENTED("%s", OpcodeName(opcode).c_str());
+				UNSUPPORTED("%s", OpcodeName(opcode).c_str());
 		}
 	}
 
diff --git a/src/Pipeline/SpirvShaderControlFlow.cpp b/src/Pipeline/SpirvShaderControlFlow.cpp
index 824e468..bcaa473 100644
--- a/src/Pipeline/SpirvShaderControlFlow.cpp
+++ b/src/Pipeline/SpirvShaderControlFlow.cpp
@@ -581,12 +581,12 @@
 		{
 			if(insnNumber > 1)
 			{
-				UNIMPLEMENTED("Function block number of instructions: %d", insnNumber);
+				UNSUPPORTED("Function block number of instructions: %d", insnNumber);
 				return EmitResult::Continue;
 			}
 			if(blockInsn.opcode() != wrapOpKill[insnNumber++])
 			{
-				UNIMPLEMENTED("Function block instruction %d : %s", insnNumber - 1, OpcodeName(blockInsn.opcode()).c_str());
+				UNSUPPORTED("Function block instruction %d : %s", insnNumber - 1, OpcodeName(blockInsn.opcode()).c_str());
 				return EmitResult::Continue;
 			}
 			if(blockInsn.opcode() == spv::OpKill)
diff --git a/src/Pipeline/SpirvShaderGroup.cpp b/src/Pipeline/SpirvShaderGroup.cpp
index 97bdd6c..2345ab9 100644
--- a/src/Pipeline/SpirvShaderGroup.cpp
+++ b/src/Pipeline/SpirvShaderGroup.cpp
@@ -69,8 +69,8 @@
 					break;
 				}
 				default:
-					UNIMPLEMENTED("EmitGroupNonUniform op: %s Group operation: %d",
-					              SpirvShader::OpcodeName(type.opcode()).c_str(), insn.word(4));
+					UNSUPPORTED("EmitGroupNonUniform op: %s Group operation: %d",
+					            SpirvShader::OpcodeName(type.opcode()).c_str(), insn.word(4));
 			}
 		}
 	}
@@ -422,7 +422,7 @@
 			break;
 
 		default:
-			UNIMPLEMENTED("EmitGroupNonUniform op: %s", OpcodeName(type.opcode()).c_str());
+			UNSUPPORTED("EmitGroupNonUniform op: %s", OpcodeName(type.opcode()).c_str());
 	}
 	return EmitResult::Continue;
 }
diff --git a/src/Pipeline/SpirvShaderImage.cpp b/src/Pipeline/SpirvShaderImage.cpp
index 40ed41f..4321537 100644
--- a/src/Pipeline/SpirvShaderImage.cpp
+++ b/src/Pipeline/SpirvShaderImage.cpp
@@ -48,7 +48,7 @@
 		case spv::ImageFormatRg16ui: return VK_FORMAT_R16G16_UINT;
 
 		default:
-			UNIMPLEMENTED("SPIR-V ImageFormat %u", format);
+			UNSUPPORTED("SPIR-V ImageFormat %u", format);
 			return VK_FORMAT_UNDEFINED;
 	}
 }
@@ -95,7 +95,8 @@
 		return EmitImageSample({ variant, Grad }, insn, state);
 	}
 	else
-		UNIMPLEMENTED("Image Operands %x", imageOperands);
+		UNSUPPORTED("Image Operands %x", imageOperands);
+
 	return EmitResult::Continue;
 }
 
@@ -836,7 +837,7 @@
 			dst.move(3, SIMD::Float((packed[0] >> 15) & SIMD::Int(0x1)));
 			break;
 		default:
-			UNIMPLEMENTED("VkFormat %d", int(vkFormat));
+			UNSUPPORTED("VkFormat %d", int(vkFormat));
 			break;
 	}
 
@@ -969,7 +970,7 @@
 		case spv::ImageFormatRg8ui:
 		case spv::ImageFormatR16ui:
 		case spv::ImageFormatR8ui:
-			UNIMPLEMENTED("spv::ImageFormat %d", int(format));
+			UNSUPPORTED("spv::ImageFormat %d", int(format));
 			break;
 
 		default:
diff --git a/src/Pipeline/SpirvShaderMemory.cpp b/src/Pipeline/SpirvShaderMemory.cpp
index 8df565f..031ae7c 100644
--- a/src/Pipeline/SpirvShaderMemory.cpp
+++ b/src/Pipeline/SpirvShaderMemory.cpp
@@ -225,7 +225,7 @@
 		Object::ID initializerId = insn.word(4);
 		if(getObject(initializerId).kind != Object::Kind::Constant)
 		{
-			UNIMPLEMENTED("Non-constant initializers not yet implemented");
+			UNSUPPORTED("Non-constant initializers not yet implemented");
 		}
 		switch(objectTy.storageClass)
 		{
diff --git a/src/Pipeline/SpirvShaderSampling.cpp b/src/Pipeline/SpirvShaderSampling.cpp
index 96837a9..e656a78 100644
--- a/src/Pipeline/SpirvShaderSampling.cpp
+++ b/src/Pipeline/SpirvShaderSampling.cpp
@@ -237,7 +237,7 @@
 				case VK_FILTER_NEAREST: return FILTER_POINT;
 				case VK_FILTER_LINEAR: return FILTER_MIN_LINEAR_MAG_POINT;
 				default:
-					UNIMPLEMENTED("minFilter %d", sampler->minFilter);
+					UNSUPPORTED("minFilter %d", sampler->minFilter);
 					return FILTER_POINT;
 			}
 			break;
@@ -247,7 +247,7 @@
 				case VK_FILTER_NEAREST: return FILTER_MIN_POINT_MAG_LINEAR;
 				case VK_FILTER_LINEAR: return FILTER_LINEAR;
 				default:
-					UNIMPLEMENTED("minFilter %d", sampler->minFilter);
+					UNSUPPORTED("minFilter %d", sampler->minFilter);
 					return FILTER_POINT;
 			}
 			break;
@@ -255,7 +255,7 @@
 			break;
 	}
 
-	UNIMPLEMENTED("magFilter %d", sampler->magFilter);
+	UNSUPPORTED("magFilter %d", sampler->magFilter);
 	return FILTER_POINT;
 }
 
@@ -276,7 +276,7 @@
 		case VK_SAMPLER_MIPMAP_MODE_NEAREST: return MIPMAP_POINT;
 		case VK_SAMPLER_MIPMAP_MODE_LINEAR: return MIPMAP_LINEAR;
 		default:
-			UNIMPLEMENTED("mipmapMode %d", sampler->mipmapMode);
+			UNSUPPORTED("mipmapMode %d", sampler->mipmapMode);
 			return MIPMAP_POINT;
 	}
 }
@@ -354,7 +354,7 @@
 			break;
 
 		default:
-			UNIMPLEMENTED("imageViewType %d", imageViewType);
+			UNSUPPORTED("imageViewType %d", imageViewType);
 			return ADDRESSING_WRAP;
 	}
 
@@ -387,7 +387,7 @@
 		case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER: return ADDRESSING_BORDER;
 		case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE: return ADDRESSING_MIRRORONCE;
 		default:
-			UNIMPLEMENTED("addressMode %d", addressMode);
+			UNSUPPORTED("addressMode %d", addressMode);
 			return ADDRESSING_WRAP;
 	}
 }
diff --git a/src/Vulkan/VkCommandBuffer.cpp b/src/Vulkan/VkCommandBuffer.cpp
index 9f38549..414e748 100644
--- a/src/Vulkan/VkCommandBuffer.cpp
+++ b/src/Vulkan/VkCommandBuffer.cpp
@@ -555,7 +555,7 @@
 			ASSERT(executionState.dynamicState.maxDepthBounds >= 0.0f &&
 			       executionState.dynamicState.maxDepthBounds <= 1.0f);
 
-			UNIMPLEMENTED("depthBoundsTestEnable");
+			UNSUPPORTED("depthBoundsTestEnable");
 		}
 		if(pipeline->hasDynamicState(VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK) && context.stencilEnable)
 		{
@@ -593,7 +593,7 @@
 						processPrimitiveRestart(static_cast<uint32_t *>(indexBuffer), count, pipeline, indexBuffers);
 						break;
 					default:
-						UNIMPLEMENTED("executionState.indexType %d", int(executionState.indexType));
+						UNSUPPORTED("executionState.indexType %d", int(executionState.indexType));
 				}
 			}
 			else
@@ -1427,7 +1427,7 @@
 			addCommand<::CmdPipelineBind>(pipelineBindPoint, pipeline);
 			break;
 		default:
-			UNIMPLEMENTED("pipelineBindPoint");
+			UNSUPPORTED("pipelineBindPoint");
 	}
 }
 
@@ -1476,7 +1476,7 @@
 {
 	if(firstViewport != 0 || viewportCount > 1)
 	{
-		UNIMPLEMENTED("viewport");
+		UNSUPPORTED("viewport");
 	}
 
 	for(uint32_t i = 0; i < viewportCount; i++)
@@ -1489,7 +1489,7 @@
 {
 	if(firstScissor != 0 || scissorCount > 1)
 	{
-		UNIMPLEMENTED("scissor");
+		UNSUPPORTED("scissor");
 	}
 
 	for(uint32_t i = 0; i < scissorCount; i++)
diff --git a/src/Vulkan/VkDescriptorSetLayout.cpp b/src/Vulkan/VkDescriptorSetLayout.cpp
index 5e45d81..704f6f8 100644
--- a/src/Vulkan/VkDescriptorSetLayout.cpp
+++ b/src/Vulkan/VkDescriptorSetLayout.cpp
@@ -108,7 +108,7 @@
 		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
 			return sizeof(BufferDescriptor);
 		default:
-			UNIMPLEMENTED("Unsupported Descriptor Type");
+			UNSUPPORTED("Unsupported Descriptor Type");
 			return 0;
 	}
 }
@@ -619,7 +619,7 @@
 			break;
 
 		default:
-			UNIMPLEMENTED("descriptor type %u", writeDescriptorSet.descriptorType);
+			UNSUPPORTED("descriptor type %u", writeDescriptorSet.descriptorType);
 	}
 
 	WriteDescriptorSet(device, dstSet, e, reinterpret_cast<char const *>(ptr));
diff --git a/src/Vulkan/VkDevice.cpp b/src/Vulkan/VkDevice.cpp
index 8a92ac3..901a511 100644
--- a/src/Vulkan/VkDevice.cpp
+++ b/src/Vulkan/VkDevice.cpp
@@ -93,7 +93,7 @@
 	if(pCreateInfo->enabledLayerCount)
 	{
 		// "The ppEnabledLayerNames and enabledLayerCount members of VkDeviceCreateInfo are deprecated and their values must be ignored by implementations."
-		UNIMPLEMENTED("enabledLayerCount");  // TODO(b/119321052): UNIMPLEMENTED() should be used only for features that must still be implemented. Use a more informational macro here.
+		UNSUPPORTED("enabledLayerCount");  // TODO(b/119321052): UNSUPPORTED() should be used only for features that must still be implemented. Use a more informational macro here.
 	}
 
 	// FIXME (b/119409619): use an allocator here so we can control all memory allocations
diff --git a/src/Vulkan/VkDeviceMemoryExternalAndroid.hpp b/src/Vulkan/VkDeviceMemoryExternalAndroid.hpp
index 6cd2c93..281773b 100644
--- a/src/Vulkan/VkDeviceMemoryExternalAndroid.hpp
+++ b/src/Vulkan/VkDeviceMemoryExternalAndroid.hpp
@@ -55,7 +55,7 @@
 
 						if(exportInfo->handleTypes != VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)
 						{
-							UNIMPLEMENTED("exportInfo->handleTypes");
+							UNSUPPORTED("exportInfo->handleTypes");
 						}
 						exportAhb = true;
 					}
@@ -146,7 +146,7 @@
 
 	static VkResult getAhbProperties(const struct AHardwareBuffer *buffer, VkAndroidHardwareBufferPropertiesANDROID *pProperties)
 	{
-		UNIMPLEMENTED("getAhbProperties");
+		UNSUPPORTED("getAhbProperties");
 		return VK_SUCCESS;
 	}
 
diff --git a/src/Vulkan/VkDeviceMemoryExternalLinux.hpp b/src/Vulkan/VkDeviceMemoryExternalLinux.hpp
index 89dd4f9..b85aecd 100644
--- a/src/Vulkan/VkDeviceMemoryExternalLinux.hpp
+++ b/src/Vulkan/VkDeviceMemoryExternalLinux.hpp
@@ -47,7 +47,7 @@
 
 						if(importInfo->handleType != VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
 						{
-							UNIMPLEMENTED("importInfo->handleType");
+							UNSUPPORTED("importInfo->handleType");
 						}
 						importFd = true;
 						fd = importInfo->fd;
@@ -59,7 +59,7 @@
 
 						if(exportInfo->handleTypes != VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
 						{
-							UNIMPLEMENTED("exportInfo->handleTypes");
+							UNSUPPORTED("exportInfo->handleTypes");
 						}
 						exportFd = true;
 					}
diff --git a/src/Vulkan/VkFormat.cpp b/src/Vulkan/VkFormat.cpp
index edd8f12..8eddb9c 100644
--- a/src/Vulkan/VkFormat.cpp
+++ b/src/Vulkan/VkFormat.cpp
@@ -454,7 +454,7 @@
 		case VK_FORMAT_D32_SFLOAT_S8_UINT:
 			return true;
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return false;
@@ -578,7 +578,7 @@
 		case VK_FORMAT_BC5_SNORM_BLOCK:
 			return VK_FORMAT_R8G8_SNORM;
 		default:
-			UNIMPLEMENTED("format: %d", int(format));
+			UNSUPPORTED("format: %d", int(format));
 			return VK_FORMAT_UNDEFINED;
 	}
 }
@@ -1266,7 +1266,7 @@
 		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
 			return 4;
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return 1;
@@ -1439,7 +1439,7 @@
 		case VK_FORMAT_R64G64B64_SFLOAT:
 			return component >= 3;
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return false;
@@ -1665,7 +1665,7 @@
 			// TODO: ASSERT to ensure this is only called per-aspect?
 			return 1;  // Y plane only
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return 0;
@@ -2032,7 +2032,7 @@
 		case VK_FORMAT_S8_UINT:
 			return false;
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return false;
@@ -2100,7 +2100,7 @@
 		case VK_FORMAT_D16_UNORM:
 			return false;
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return false;
@@ -2168,7 +2168,7 @@
 		case VK_FORMAT_D16_UNORM:
 			return true;
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return false;
@@ -2236,7 +2236,7 @@
 		case VK_FORMAT_R32G32B32A32_UINT:
 			return true;
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return false;
@@ -2303,7 +2303,7 @@
 		case VK_FORMAT_S8_UINT:
 			return false;
 		default:
-			UNIMPLEMENTED("Format: %d", int(format));
+			UNSUPPORTED("Format: %d", int(format));
 	}
 
 	return false;
diff --git a/src/Vulkan/VkImage.cpp b/src/Vulkan/VkImage.cpp
index b1e7916..0cdd5ca 100644
--- a/src/Vulkan/VkImage.cpp
+++ b/src/Vulkan/VkImage.cpp
@@ -49,7 +49,7 @@
 		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
 			return ETC_Decoder::ETC_RGBA;
 		default:
-			UNIMPLEMENTED("format: %d", int(format));
+			UNSUPPORTED("format: %d", int(format));
 			return ETC_Decoder::ETC_RGBA;
 	}
 }
@@ -76,7 +76,7 @@
 		case VK_FORMAT_BC5_SNORM_BLOCK:
 			return 5;
 		default:
-			UNIMPLEMENTED("format: %d", int(format));
+			UNSUPPORTED("format: %d", int(format));
 			return 0;
 	}
 }
@@ -103,7 +103,7 @@
 		case VK_FORMAT_BC5_SNORM_BLOCK:
 			return false;
 		default:
-			UNIMPLEMENTED("format: %d", int(format));
+			UNSUPPORTED("format: %d", int(format));
 			return false;
 	}
 }
@@ -894,7 +894,7 @@
 {
 	if(!(subresourceRange.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT))
 	{
-		UNIMPLEMENTED("aspectMask");
+		UNSUPPORTED("aspectMask");
 	}
 
 	device->getBlitter()->clear((void *)color.float32, getClearFormat(), this, format, subresourceRange);
@@ -905,7 +905,7 @@
 	if((subresourceRange.aspectMask & ~(VK_IMAGE_ASPECT_DEPTH_BIT |
 	                                    VK_IMAGE_ASPECT_STENCIL_BIT)) != 0)
 	{
-		UNIMPLEMENTED("aspectMask");
+		UNSUPPORTED("aspectMask");
 	}
 
 	if(subresourceRange.aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT)
@@ -929,7 +929,7 @@
 	     (subresourceRange.aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT |
 	                                     VK_IMAGE_ASPECT_STENCIL_BIT))))
 	{
-		UNIMPLEMENTED("subresourceRange");
+		UNSUPPORTED("subresourceRange");
 	}
 
 	if(subresourceRange.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT)
diff --git a/src/Vulkan/VkImageView.cpp b/src/Vulkan/VkImageView.cpp
index cc1d558..8f065fe 100644
--- a/src/Vulkan/VkImageView.cpp
+++ b/src/Vulkan/VkImageView.cpp
@@ -120,12 +120,12 @@
 
 	if(!imageTypesMatch(image->getImageType()))
 	{
-		UNIMPLEMENTED("imageTypesMatch");
+		UNSUPPORTED("imageTypesMatch");
 	}
 
 	if(!format.isCompatible(image->getFormat()))
 	{
-		UNIMPLEMENTED("incompatible formats");
+		UNSUPPORTED("incompatible formats");
 	}
 
 	VkImageSubresourceRange sr = subresourceRange;
@@ -139,12 +139,12 @@
 
 	if(!imageTypesMatch(image->getImageType()))
 	{
-		UNIMPLEMENTED("imageTypesMatch");
+		UNSUPPORTED("imageTypesMatch");
 	}
 
 	if(!format.isCompatible(image->getFormat()))
 	{
-		UNIMPLEMENTED("incompatible formats");
+		UNSUPPORTED("incompatible formats");
 	}
 
 	VkImageSubresourceRange sr;
@@ -173,7 +173,7 @@
 {
 	if((subresourceRange.levelCount != 1) || (resolveAttachment->subresourceRange.levelCount != 1))
 	{
-		UNIMPLEMENTED("levelCount");
+		UNSUPPORTED("levelCount");
 	}
 
 	VkImageCopy region;
@@ -201,7 +201,7 @@
 {
 	if((subresourceRange.levelCount != 1) || (resolveAttachment->subresourceRange.levelCount != 1))
 	{
-		UNIMPLEMENTED("levelCount");
+		UNSUPPORTED("levelCount");
 	}
 
 	VkImageCopy region;
@@ -244,7 +244,7 @@
 		case SAMPLING:
 			return image->getSampledImage(format);
 		default:
-			UNIMPLEMENTED("usage %d", int(usage));
+			UNSUPPORTED("usage %d", int(usage));
 			return nullptr;
 	}
 }
diff --git a/src/Vulkan/VkImageView.hpp b/src/Vulkan/VkImageView.hpp
index 73fdcc6..20df400 100644
--- a/src/Vulkan/VkImageView.hpp
+++ b/src/Vulkan/VkImageView.hpp
@@ -66,7 +66,7 @@
 			case VK_SAMPLE_COUNT_1_BIT: return 1;
 			case VK_SAMPLE_COUNT_4_BIT: return 4;
 			default:
-				UNIMPLEMENTED("Sample count flags %d", image->getSampleCountFlagBits());
+				UNSUPPORTED("Sample count flags %d", image->getSampleCountFlagBits());
 				return 1;
 		}
 	}
diff --git a/src/Vulkan/VkPipeline.cpp b/src/Vulkan/VkPipeline.cpp
index cdf4873..19ab8a3 100644
--- a/src/Vulkan/VkPipeline.cpp
+++ b/src/Vulkan/VkPipeline.cpp
@@ -155,7 +155,7 @@
 	       VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)) != 0) ||
 	   (pCreateInfo->pTessellationState != nullptr))
 	{
-		UNIMPLEMENTED("pCreateInfo settings");
+		UNSUPPORTED("pCreateInfo settings");
 	}
 
 	if(pCreateInfo->pDynamicState)
@@ -178,7 +178,7 @@
 					dynamicStateFlags |= (1 << dynamicState);
 					break;
 				default:
-					UNIMPLEMENTED("dynamic state");
+					UNSUPPORTED("dynamic state");
 			}
 		}
 	}
@@ -186,7 +186,7 @@
 	const VkPipelineVertexInputStateCreateInfo *vertexInputState = pCreateInfo->pVertexInputState;
 	if(vertexInputState->flags != 0)
 	{
-		UNIMPLEMENTED("vertexInputState->flags");
+		UNSUPPORTED("vertexInputState->flags");
 	}
 
 	// Context must always have a PipelineLayout set.
@@ -217,7 +217,7 @@
 	const VkPipelineInputAssemblyStateCreateInfo *assemblyState = pCreateInfo->pInputAssemblyState;
 	if(assemblyState->flags != 0)
 	{
-		UNIMPLEMENTED("pCreateInfo->pInputAssemblyState settings");
+		UNSUPPORTED("pCreateInfo->pInputAssemblyState settings");
 	}
 
 	primitiveRestartEnable = (assemblyState->primitiveRestartEnable != VK_FALSE);
@@ -230,7 +230,7 @@
 		   (viewportState->viewportCount != 1) ||
 		   (viewportState->scissorCount != 1))
 		{
-			UNIMPLEMENTED("pCreateInfo->pViewportState settings");
+			UNSUPPORTED("pCreateInfo->pViewportState settings");
 		}
 
 		if(!hasDynamicState(VK_DYNAMIC_STATE_SCISSOR))
@@ -248,7 +248,7 @@
 	if((rasterizationState->flags != 0) ||
 	   (rasterizationState->depthClampEnable != VK_FALSE))
 	{
-		UNIMPLEMENTED("pCreateInfo->pRasterizationState settings");
+		UNSUPPORTED("pCreateInfo->pRasterizationState settings");
 	}
 
 	context.rasterizerDiscard = (rasterizationState->rasterizerDiscardEnable != VK_FALSE);
@@ -299,7 +299,7 @@
 				context.sampleCount = 4;
 				break;
 			default:
-				UNIMPLEMENTED("Unsupported sample count");
+				UNSUPPORTED("Unsupported sample count");
 		}
 
 		if(multisampleState->pSampleMask)
@@ -313,7 +313,7 @@
 		   (multisampleState->sampleShadingEnable != VK_FALSE) ||
 		   (multisampleState->alphaToOneEnable != VK_FALSE))
 		{
-			UNIMPLEMENTED("multisampleState");
+			UNSUPPORTED("multisampleState");
 		}
 	}
 	else
@@ -327,7 +327,7 @@
 		if((depthStencilState->flags != 0) ||
 		   (depthStencilState->depthBoundsTestEnable != VK_FALSE))
 		{
-			UNIMPLEMENTED("depthStencilState");
+			UNSUPPORTED("depthStencilState");
 		}
 
 		context.depthBoundsTestEnable = (depthStencilState->depthBoundsTestEnable != VK_FALSE);
@@ -349,7 +349,7 @@
 		if((colorBlendState->flags != 0) ||
 		   ((colorBlendState->logicOpEnable != VK_FALSE)))
 		{
-			UNIMPLEMENTED("colorBlendState");
+			UNSUPPORTED("colorBlendState");
 		}
 
 		if(!hasDynamicState(VK_DYNAMIC_STATE_BLEND_CONSTANTS))
@@ -427,7 +427,7 @@
 	{
 		if(pStage->flags != 0)
 		{
-			UNIMPLEMENTED("pStage->flags");
+			UNSUPPORTED("pStage->flags");
 		}
 
 		const ShaderModule *module = vk::Cast(pStage->module);
@@ -479,7 +479,7 @@
 		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:
 			return std::max<uint32_t>(vertexCount, 2) - 2;
 		default:
-			UNIMPLEMENTED("context.topology %d", int(context.topology));
+			UNSUPPORTED("context.topology %d", int(context.topology));
 	}
 
 	return 0;
diff --git a/src/Vulkan/VkQueryPool.cpp b/src/Vulkan/VkQueryPool.cpp
index 8dbfb26..9330b08 100644
--- a/src/Vulkan/VkQueryPool.cpp
+++ b/src/Vulkan/VkQueryPool.cpp
@@ -100,7 +100,7 @@
 	//  pipelineStatistics member of the VkQueryPoolCreateInfo structure."
 	if(type == VK_QUERY_TYPE_PIPELINE_STATISTICS)
 	{
-		UNIMPLEMENTED("pCreateInfo->queryType");
+		UNSUPPORTED("pCreateInfo->queryType");
 	}
 
 	// Construct all queries
@@ -189,7 +189,7 @@
 
 	if(flags != 0)
 	{
-		UNIMPLEMENTED("flags");
+		UNSUPPORTED("flags");
 	}
 
 	pool[query].prepare(type);
diff --git a/src/Vulkan/VkQueue.cpp b/src/Vulkan/VkQueue.cpp
index 55ce531..56434a9 100644
--- a/src/Vulkan/VkQueue.cpp
+++ b/src/Vulkan/VkQueue.cpp
@@ -178,7 +178,7 @@
 				submitQueue(task);
 				break;
 			default:
-				UNIMPLEMENTED("task.type %d", static_cast<int>(task.type));
+				UNSUPPORTED("task.type %d", static_cast<int>(task.type));
 				break;
 		}
 	}
diff --git a/src/Vulkan/VkSemaphore.cpp b/src/Vulkan/VkSemaphore.cpp
index 31eb5fd..efc6c4c 100644
--- a/src/Vulkan/VkSemaphore.cpp
+++ b/src/Vulkan/VkSemaphore.cpp
@@ -56,7 +56,7 @@
 				exportSemaphore = true;
 				if(exportInfo->handleTypes != Semaphore::External::kExternalSemaphoreHandleType)
 				{
-					UNIMPLEMENTED("exportInfo->handleTypes");
+					UNSUPPORTED("exportInfo->handleTypes");
 				}
 				break;
 			}
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 7ad1de9..1dfe97f 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -267,7 +267,7 @@
 
 	if(pCreateInfo->enabledLayerCount)
 	{
-		UNIMPLEMENTED("pCreateInfo->enabledLayerCount");
+		UNSUPPORTED("pCreateInfo->enabledLayerCount");
 	}
 
 	uint32_t extensionPropertiesCount = sizeof(instanceExtensionProperties) / sizeof(instanceExtensionProperties[0]);
@@ -371,7 +371,7 @@
 			break;
 
 		default:
-			UNIMPLEMENTED("tiling");
+			UNSUPPORTED("tiling");
 			features = 0;
 	}
 
@@ -507,7 +507,7 @@
 	if(pCreateInfo->enabledLayerCount)
 	{
 		// "The ppEnabledLayerNames and enabledLayerCount members of VkDeviceCreateInfo are deprecated and their values must be ignored by implementations."
-		UNIMPLEMENTED("pCreateInfo->enabledLayerCount");  // TODO(b/119321052): UNIMPLEMENTED() should be used only for features that must still be implemented. Use a more informational macro here.
+		UNSUPPORTED("pCreateInfo->enabledLayerCount");
 	}
 
 	uint32_t extensionPropertiesCount = sizeof(deviceExtensionProperties) / sizeof(deviceExtensionProperties[0]);
@@ -662,7 +662,7 @@
 		const VkDeviceQueueCreateInfo &queueCreateInfo = pCreateInfo->pQueueCreateInfos[i];
 		if(queueCreateInfo.flags)
 		{
-			UNIMPLEMENTED("queueCreateInfo.flags");
+			UNSUPPORTED("queueCreateInfo.flags");
 		}
 
 		auto extInfo = reinterpret_cast<VkBaseInStructure const *>(queueCreateInfo.pNext);
@@ -1052,7 +1052,7 @@
 VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo *pBindInfo, VkFence fence)
 {
 	TRACE("()");
-	UNIMPLEMENTED("vkQueueBindSparse");
+	UNSUPPORTED("vkQueueBindSparse");
 	return VK_SUCCESS;
 }
 
@@ -1114,7 +1114,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	return vk::Semaphore::Create(pAllocator, pCreateInfo, pSemaphore, pAllocator);
@@ -1136,7 +1136,7 @@
 
 	if(pGetFdInfo->handleType != VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
 	{
-		UNIMPLEMENTED("pGetFdInfo->handleType");
+		UNSUPPORTED("pGetFdInfo->handleType");
 	}
 
 	return vk::Cast(pGetFdInfo->semaphore)->exportFd(pFd);
@@ -1149,7 +1149,7 @@
 
 	if(pImportSemaphoreInfo->handleType != VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
 	{
-		UNIMPLEMENTED("pImportSemaphoreInfo->handleType");
+		UNSUPPORTED("pImportSemaphoreInfo->handleType");
 	}
 	bool temporaryImport = (pImportSemaphoreInfo->flags & VK_SEMAPHORE_IMPORT_TEMPORARY_BIT) != 0;
 
@@ -1167,7 +1167,7 @@
 
 	if(pImportSemaphoreZirconHandleInfo->handleType != VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA)
 	{
-		UNIMPLEMENTED("pImportSemaphoreZirconHandleInfo->handleType");
+		UNSUPPORTED("pImportSemaphoreZirconHandleInfo->handleType");
 	}
 	bool temporaryImport = (pImportSemaphoreZirconHandleInfo->flags & VK_SEMAPHORE_IMPORT_TEMPORARY_BIT) != 0;
 
@@ -1184,7 +1184,7 @@
 
 	if(pGetZirconHandleInfo->handleType != VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA)
 	{
-		UNIMPLEMENTED("pGetZirconHandleInfo->handleType");
+		UNSUPPORTED("pGetZirconHandleInfo->handleType");
 	}
 
 	return vk::Cast(pGetZirconHandleInfo->semaphore)->exportHandle(pZirconHandle);
@@ -1198,7 +1198,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -1251,7 +1251,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -1318,7 +1318,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -1452,7 +1452,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -1508,7 +1508,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -1536,7 +1536,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -1652,7 +1652,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -1680,7 +1680,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -1778,7 +1778,7 @@
 
 	if(flags)
 	{
-		UNIMPLEMENTED("flags");
+		UNSUPPORTED("flags");
 	}
 
 	return vk::Cast(descriptorPool)->reset();
@@ -1824,7 +1824,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -1852,7 +1852,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->flags");
+		UNSUPPORTED("pCreateInfo->flags");
 	}
 
 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -3033,7 +3033,7 @@
 
 	if(pCreateInfo->flags || (pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET))
 	{
-		UNIMPLEMENTED("pCreateInfo->flags || (pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)");
+		UNSUPPORTED("pCreateInfo->flags || (pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)");
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -3099,7 +3099,7 @@
 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t lineStippleFactor = %u, uint16_t lineStipplePattern = %u",
 	      commandBuffer, lineStippleFactor, lineStipplePattern);
 
-	UNIMPLEMENTED("Line stipple not supported");
+	UNSUPPORTED("Line stipple not supported");
 }
 
 #ifdef VK_USE_PLATFORM_XCB_KHR
