diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index 41c7d65..3519950 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -90,7 +90,7 @@
 		return;
 	}
 
-	State state(format, dstFormat, 1, dest->getSampleCountFlagBits(), Options{ 0xF });
+	State state(format, dstFormat, 1, dest->getSampleCount(), Options{ 0xF });
 	auto blitRoutine = getBlitRoutine(state);
 	if(!blitRoutine)
 	{
@@ -280,7 +280,7 @@
 				uint8_t *slice = (uint8_t *)dest->getTexelPointer(
 				    { area.offset.x, area.offset.y, static_cast<int32_t>(depth) }, subres);
 
-				for(int j = 0; j < dest->getSampleCountFlagBits(); j++)
+				for(int j = 0; j < dest->getSampleCount(); j++)
 				{
 					uint8_t *d = slice;
 
@@ -1866,10 +1866,10 @@
 	bool doFilter = (filter != VK_FILTER_NEAREST);
 	bool allowSRGBConversion =
 	    doFilter ||
-	    (src->getSampleCountFlagBits() > 1) ||
+	    (src->getSampleCount() > 1) ||
 	    (srcFormat.isSRGBformat() != dstFormat.isSRGBformat());
 
-	State state(srcFormat, dstFormat, src->getSampleCountFlagBits(), dst->getSampleCountFlagBits(),
+	State state(srcFormat, dstFormat, src->getSampleCount(), dst->getSampleCount(),
 	            Options{ doFilter, allowSRGBConversion });
 	state.clampToEdge = (region.srcOffsets[0].x < 0) ||
 	                    (region.srcOffsets[0].y < 0) ||
@@ -2124,7 +2124,7 @@
 	uint8_t *dest = reinterpret_cast<uint8_t *>(dst->getTexelPointer({ 0, 0, 0 }, dstSubresource));
 
 	auto format = src->getFormat();
-	auto samples = src->getSampleCountFlagBits();
+	auto samples = src->getSampleCount();
 	auto extent = src->getExtent();
 
 	int width = extent.width;
@@ -2323,7 +2323,7 @@
 	// Compute corner colors
 	VkImageAspectFlagBits aspect = static_cast<VkImageAspectFlagBits>(subresource.aspectMask);
 	vk::Format format = image->getFormat(aspect);
-	VkSampleCountFlagBits samples = image->getSampleCountFlagBits();
+	VkSampleCountFlagBits samples = image->getSampleCount();
 	State state(format, format, samples, samples, Options{ 0xF });
 
 	// Vulkan 1.2: "If samples is not VK_SAMPLE_COUNT_1_BIT, then imageType must be
diff --git a/src/Device/Context.cpp b/src/Device/Context.cpp
index 79c1db4..204ff55 100644
--- a/src/Device/Context.cpp
+++ b/src/Device/Context.cpp
@@ -256,7 +256,7 @@
 		if(dynamicStateCreateInfo->flags != 0)
 		{
 			// Vulkan 1.3: "flags is reserved for future use." "flags must be 0"
-			UNSUPPORTED("dynamicStateCreateInfo->flags %d", int(dynamicStateCreateInfo->flags));
+			UNSUPPORTED("dynamicStateCreateInfo->flags 0x%08X", int(dynamicStateCreateInfo->flags));
 		}
 
 		for(uint32_t i = 0; i < dynamicStateCreateInfo->dynamicStateCount; i++)
@@ -394,7 +394,7 @@
 	      VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT |
 	      VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT)) != 0)
 	{
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	const VkPipelineVertexInputStateCreateInfo *vertexInputState = pCreateInfo->pVertexInputState;
@@ -410,7 +410,7 @@
 	if(inputAssemblyState->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->pInputAssemblyState->flags %d", int(pCreateInfo->pInputAssemblyState->flags));
+		UNSUPPORTED("pCreateInfo->pInputAssemblyState->flags 0x%08X", int(pCreateInfo->pInputAssemblyState->flags));
 	}
 
 	primitiveRestartEnable = (inputAssemblyState->primitiveRestartEnable != VK_FALSE);
@@ -421,7 +421,7 @@
 	if(rasterizationState->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->pRasterizationState->flags %d", int(pCreateInfo->pRasterizationState->flags));
+		UNSUPPORTED("pCreateInfo->pRasterizationState->flags 0x%08X", int(pCreateInfo->pRasterizationState->flags));
 	}
 
 	rasterizerDiscard = (rasterizationState->rasterizerDiscardEnable != VK_FALSE);
@@ -509,7 +509,7 @@
 		if(viewportState->flags != 0)
 		{
 			// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-			UNSUPPORTED("pCreateInfo->pViewportState->flags %d", int(pCreateInfo->pViewportState->flags));
+			UNSUPPORTED("pCreateInfo->pViewportState->flags 0x%08X", int(pCreateInfo->pViewportState->flags));
 		}
 
 		if((viewportState->viewportCount > 1) ||
@@ -531,7 +531,7 @@
 		if(multisampleState->flags != 0)
 		{
 			// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-			UNSUPPORTED("pCreateInfo->pMultisampleState->flags %d", int(pCreateInfo->pMultisampleState->flags));
+			UNSUPPORTED("pCreateInfo->pMultisampleState->flags 0x%08X", int(pCreateInfo->pMultisampleState->flags));
 		}
 
 		sampleShadingEnable = (multisampleState->sampleShadingEnable != VK_FALSE);
@@ -649,7 +649,7 @@
 	    ~(VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT |
 	      VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT)) != 0)
 	{
-		UNSUPPORTED("depthStencilState->flags %d", int(depthStencilState->flags));
+		UNSUPPORTED("depthStencilState->flags 0x%08X", int(depthStencilState->flags));
 	}
 
 	depthBoundsTestEnable = (depthStencilState->depthBoundsTestEnable != VK_FALSE);
@@ -673,7 +673,7 @@
 	if(colorBlendState->flags != 0 &&
 	   colorBlendState->flags != VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT)
 	{
-		UNSUPPORTED("colorBlendState->flags %d", int(colorBlendState->flags));
+		UNSUPPORTED("colorBlendState->flags 0x%08X", int(colorBlendState->flags));
 	}
 
 	if(colorBlendState->logicOpEnable != VK_FALSE)
diff --git a/src/Vulkan/VkImage.hpp b/src/Vulkan/VkImage.hpp
index 118d656..9c0421e 100644
--- a/src/Vulkan/VkImage.hpp
+++ b/src/Vulkan/VkImage.hpp
@@ -85,7 +85,7 @@
 	uint32_t getMipLevels() const { return mipLevels; }
 	VkImageUsageFlags getUsage() const { return usage; }
 	VkImageCreateFlags getFlags() const { return flags; }
-	VkSampleCountFlagBits getSampleCountFlagBits() const { return samples; }
+	VkSampleCountFlagBits getSampleCount() const { return samples; }
 	const VkExtent3D &getExtent() const { return extent; }
 	VkExtent3D getMipLevelExtent(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
 	size_t rowPitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
diff --git a/src/Vulkan/VkImageView.hpp b/src/Vulkan/VkImageView.hpp
index 6645b32..bf4d666 100644
--- a/src/Vulkan/VkImageView.hpp
+++ b/src/Vulkan/VkImageView.hpp
@@ -110,12 +110,12 @@
 
 	int getSampleCount() const
 	{
-		switch(image->getSampleCountFlagBits())
+		switch(image->getSampleCount())
 		{
 		case VK_SAMPLE_COUNT_1_BIT: return 1;
 		case VK_SAMPLE_COUNT_4_BIT: return 4;
 		default:
-			UNSUPPORTED("Sample count flags %d", image->getSampleCountFlagBits());
+			UNSUPPORTED("Sample count %d", image->getSampleCount());
 			return 1;
 		}
 	}
diff --git a/src/Vulkan/VkPipeline.cpp b/src/Vulkan/VkPipeline.cpp
index 474b21f..5b7e597 100644
--- a/src/Vulkan/VkPipeline.cpp
+++ b/src/Vulkan/VkPipeline.cpp
@@ -348,7 +348,7 @@
 		    ~(VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT |
 		      VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT)) != 0)
 		{
-			UNSUPPORTED("pStage->flags %d", int(stageInfo.flags));
+			UNSUPPORTED("pStage->flags 0x%08X", int(stageInfo.flags));
 		}
 
 		auto dbgctx = device->getDebuggerContext();
diff --git a/src/Vulkan/VkQueryPool.cpp b/src/Vulkan/VkQueryPool.cpp
index b532ae8..c142704 100644
--- a/src/Vulkan/VkQueryPool.cpp
+++ b/src/Vulkan/VkQueryPool.cpp
@@ -188,7 +188,7 @@
 	// Only accept flags with valid bits set.
 	if(flags & ~(VK_QUERY_CONTROL_PRECISE_BIT))
 	{
-		UNSUPPORTED("vkCmdBeginQuery::flags %d", int(flags));
+		UNSUPPORTED("vkCmdBeginQuery::flags 0x%08X", int(flags));
 	}
 
 	pool[query].start();
diff --git a/src/Vulkan/VkSemaphore.cpp b/src/Vulkan/VkSemaphore.cpp
index bb61a3d..497784f 100644
--- a/src/Vulkan/VkSemaphore.cpp
+++ b/src/Vulkan/VkSemaphore.cpp
@@ -107,7 +107,7 @@
 				exportHandleTypes = exportInfo->handleTypes;
 				if((exportHandleTypes & ~kSupportedTypes) != 0)
 				{
-					UNSUPPORTED("exportInfo->handleTypes 0x%X (supports 0x%X)",
+					UNSUPPORTED("exportInfo->handleTypes 0x%08X (supports 0x%08X)",
 					            int(exportHandleTypes),
 					            int(kSupportedTypes));
 				}
@@ -312,7 +312,7 @@
 {
 	if((exportableHandleTypes & VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT) == 0)
 	{
-		TRACE("Cannot export semaphore as opaque FD (exportableHandleType = 0x%X, want 0x%X)",
+		TRACE("Cannot export semaphore as opaque FD (exportableHandleType = 0x%08X, want 0x%08X)",
 		      exportableHandleTypes,
 		      VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT);
 
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index ecab7a2..0476145 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -509,7 +509,7 @@
 	   pCreateInfo->flags != VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR)  // TODO(https://github.com/KhronosGroup/Vulkan-Loader/issues/992)
 	{
 		// Vulkan 1.3: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	if(pCreateInfo->enabledLayerCount != 0)
@@ -682,7 +682,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	if(pCreateInfo->enabledLayerCount != 0)
@@ -1096,7 +1096,7 @@
 		const VkDeviceQueueCreateInfo &queueCreateInfo = pCreateInfo->pQueueCreateInfos[i];
 		if(queueCreateInfo.flags != 0)
 		{
-			UNSUPPORTED("pCreateInfo->pQueueCreateInfos[%d]->flags %d", i, queueCreateInfo.flags);
+			UNSUPPORTED("pCreateInfo->pQueueCreateInfos[%d]->flags 0x%08X", i, queueCreateInfo.flags);
 		}
 
 		auto extInfo = reinterpret_cast<VkBaseInStructure const *>(queueCreateInfo.pNext);
@@ -1368,7 +1368,7 @@
 	if(flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("flags %d", int(flags));
+		UNSUPPORTED("flags 0x%08X", int(flags));
 	}
 
 	return vk::Cast(memory)->map(offset, size, ppData);
@@ -1555,7 +1555,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	VkSemaphoreType type = VK_SEMAPHORE_TYPE_BINARY;
@@ -1698,7 +1698,7 @@
 	// VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR is provided by VK_KHR_synchronization2
 	if((pCreateInfo->flags != 0) && (pCreateInfo->flags != VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR))
 	{
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -1753,7 +1753,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -1851,7 +1851,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -2008,7 +2008,7 @@
 
 	if(pCreateInfo->flags != 0)
 	{
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -2079,7 +2079,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -2116,7 +2116,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	auto extInfo = reinterpret_cast<VkBaseInStructure const *>(pCreateInfo->pNext);
@@ -2263,7 +2263,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -2299,7 +2299,7 @@
 
 	if(pCreateInfo->flags != 0)
 	{
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
@@ -2435,13 +2435,13 @@
 
 VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags)
 {
-	TRACE("(VkDevice device = %p, VkDescriptorPool descriptorPool = %p, VkDescriptorPoolResetFlags flags = 0x%x)",
+	TRACE("(VkDevice device = %p, VkDescriptorPool descriptorPool = %p, VkDescriptorPoolResetFlags flags = 0x%08X)",
 	      device, static_cast<void *>(descriptorPool), int(flags));
 
 	if(flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("flags %d", int(flags));
+		UNSUPPORTED("flags 0x%08X", int(flags));
 	}
 
 	return vk::Cast(descriptorPool)->reset();
@@ -2504,7 +2504,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	ValidateRenderPassPNextChain(device, pCreateInfo);
@@ -2520,7 +2520,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	ValidateRenderPassPNextChain(device, pCreateInfo);
@@ -3106,7 +3106,7 @@
 
 VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers)
 {
-	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t eventCount = %d, const VkEvent* pEvents = %p, VkPipelineStageFlags srcStageMask = 0x%x, VkPipelineStageFlags dstStageMask = 0x%x, uint32_t memoryBarrierCount = %d, const VkMemoryBarrier* pMemoryBarriers = %p, uint32_t bufferMemoryBarrierCount = %d, const VkBufferMemoryBarrier* pBufferMemoryBarriers = %p, uint32_t imageMemoryBarrierCount = %d, const VkImageMemoryBarrier* pImageMemoryBarriers = %p)",
+	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t eventCount = %d, const VkEvent* pEvents = %p, VkPipelineStageFlags srcStageMask = 0x%08X, VkPipelineStageFlags dstStageMask = 0x%08X, uint32_t memoryBarrierCount = %d, const VkMemoryBarrier* pMemoryBarriers = %p, uint32_t bufferMemoryBarrierCount = %d, const VkBufferMemoryBarrier* pBufferMemoryBarriers = %p, uint32_t imageMemoryBarrierCount = %d, const VkImageMemoryBarrier* pImageMemoryBarriers = %p)",
 	      commandBuffer, int(eventCount), pEvents, int(srcStageMask), int(dstStageMask), int(memoryBarrierCount), pMemoryBarriers, int(bufferMemoryBarrierCount), pBufferMemoryBarriers, int(imageMemoryBarrierCount), pImageMemoryBarriers);
 
 	vk::Cast(commandBuffer)->waitEvents(eventCount, pEvents, vk::DependencyInfo(srcStageMask, dstStageMask, VkDependencyFlags(0), memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers));
@@ -3123,7 +3123,7 @@
 VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers)
 {
 	TRACE(
-	    "(VkCommandBuffer commandBuffer = %p, VkPipelineStageFlags srcStageMask = 0x%x, VkPipelineStageFlags dstStageMask = 0x%x, VkDependencyFlags dependencyFlags = %d, uint32_t memoryBarrierCount = %d, onst VkMemoryBarrier* pMemoryBarriers = %p,"
+	    "(VkCommandBuffer commandBuffer = %p, VkPipelineStageFlags srcStageMask = 0x%08X, VkPipelineStageFlags dstStageMask = 0x%08X, VkDependencyFlags dependencyFlags = %d, uint32_t memoryBarrierCount = %d, onst VkMemoryBarrier* pMemoryBarriers = %p,"
 	    " uint32_t bufferMemoryBarrierCount = %d, const VkBufferMemoryBarrier* pBufferMemoryBarriers = %p, uint32_t imageMemoryBarrierCount = %d, const VkImageMemoryBarrier* pImageMemoryBarriers = %p)",
 	    commandBuffer, int(srcStageMask), int(dstStageMask), dependencyFlags, int(memoryBarrierCount), pMemoryBarriers, int(bufferMemoryBarrierCount), pBufferMemoryBarriers, int(imageMemoryBarrierCount), pImageMemoryBarriers);
 
@@ -4049,7 +4049,7 @@
 	if(flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("flags %d", int(flags));
+		UNSUPPORTED("flags 0x%08X", int(flags));
 	}
 
 	vk::Cast(commandPool)->trim(flags);
@@ -4120,7 +4120,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	if(pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)
@@ -4307,7 +4307,7 @@
 	if(pCreateInfo->flags != 0)
 	{
 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
-		UNSUPPORTED("pCreateInfo->flags %d", int(pCreateInfo->flags));
+		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
 	}
 
 	return vk::DebugUtilsMessenger::Create(pAllocator, pCreateInfo, pMessenger);
