Eliminate use of Vulkan header BEGIN_RANGE/END_RANGE/RANGE_SIZE enums

As per Khronos, these enums will no longer be available in future Vulkan headers:
https://www.khronos.org/news/permalink/khronos-group-asking-for-feedback-on-removing-begin-range-end-range-range-size-tokens-from-headers

This change now asserts that our Vulkan driver is built using a known
version of the Vulkan headers (vk::SwiftShaderVulkanHeaderVersion), and
when we update, the static assert will trip, reminding us to validate
the range constants that we use, and must manually maintain.

Bug: b/153337629
Bug: b/154215163
Change-Id: I319978e3979893a8a0cc44caf6cc79a584e518fb
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/44388
Tested-by: Antonio Maiorano <amaiorano@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Vulkan/VkCommandBuffer.cpp b/src/Vulkan/VkCommandBuffer.cpp
index 03d04c1..d46620d 100644
--- a/src/Vulkan/VkCommandBuffer.cpp
+++ b/src/Vulkan/VkCommandBuffer.cpp
@@ -1111,7 +1111,7 @@
 
 	void play(vk::CommandBuffer::ExecutionState &executionState) override
 	{
-		ASSERT(pipelineBindPoint < VK_PIPELINE_BIND_POINT_RANGE_SIZE);
+		ASSERT(pipelineBindPoint < vk::VK_PIPELINE_BIND_POINT_RANGE_SIZE);
 		ASSERT(firstSet + descriptorSetCount <= vk::MAX_BOUND_DESCRIPTOR_SETS);
 		ASSERT(firstDynamicOffset + dynamicOffsetCount <= vk::MAX_DESCRIPTOR_SET_COMBINED_BUFFERS_DYNAMIC);
 
diff --git a/src/Vulkan/VkCommandBuffer.hpp b/src/Vulkan/VkCommandBuffer.hpp
index 00efb1d..f209102 100644
--- a/src/Vulkan/VkCommandBuffer.hpp
+++ b/src/Vulkan/VkCommandBuffer.hpp
@@ -147,7 +147,7 @@
 		sw::TaskEvents *events = nullptr;
 		RenderPass *renderPass = nullptr;
 		Framebuffer *renderPassFramebuffer = nullptr;
-		std::array<PipelineState, VK_PIPELINE_BIND_POINT_RANGE_SIZE> pipelineState;
+		std::array<PipelineState, vk::VK_PIPELINE_BIND_POINT_RANGE_SIZE> pipelineState;
 
 		struct DynamicState
 		{
diff --git a/src/Vulkan/VkImageView.cpp b/src/Vulkan/VkImageView.cpp
index c88fd71..4b8880d 100644
--- a/src/Vulkan/VkImageView.cpp
+++ b/src/Vulkan/VkImageView.cpp
@@ -74,7 +74,7 @@
 
 Identifier::Identifier(VkFormat fmt)
 {
-	static_assert(VK_IMAGE_VIEW_TYPE_END_RANGE == 6, "VkImageViewType does not allow using 7 to indicate buffer view");
+	static_assert(vk::VK_IMAGE_VIEW_TYPE_END_RANGE == 6, "VkImageViewType does not allow using 7 to indicate buffer view");
 	imageViewType = 7;  // Still fits in 3-bit field
 	format = Format::mapTo8bit(fmt);
 }
diff --git a/src/Vulkan/VkStringify.cpp b/src/Vulkan/VkStringify.cpp
index 9e660fd..a8247f3 100644
--- a/src/Vulkan/VkStringify.cpp
+++ b/src/Vulkan/VkStringify.cpp
@@ -453,9 +453,6 @@
 		INSERT_ELEMENT(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT),
 		INSERT_ELEMENT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT),
 		INSERT_ELEMENT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT),
-		INSERT_ELEMENT(VK_STRUCTURE_TYPE_BEGIN_RANGE),
-		INSERT_ELEMENT(VK_STRUCTURE_TYPE_END_RANGE),
-		INSERT_ELEMENT(VK_STRUCTURE_TYPE_RANGE_SIZE),
 		INSERT_ELEMENT(VK_STRUCTURE_TYPE_MAX_ENUM)
 #	undef INSERT_ELEMENT
 	};
diff --git a/src/Vulkan/VulkanPlatform.hpp b/src/Vulkan/VulkanPlatform.hpp
index b5f8630..a220865 100644
--- a/src/Vulkan/VulkanPlatform.hpp
+++ b/src/Vulkan/VulkanPlatform.hpp
@@ -57,4 +57,18 @@
 #	undef None
 #endif
 
+namespace vk {
+// Here we define constants that used to be in the Vulkan headers, but are not part of the spec.
+// See: https://github.com/KhronosGroup/Vulkan-Docs/issues/1230
+
+// When updating the Vulkan Headers we use, go through each constant below and make sure they are valid.
+// Once that's done, update SwiftShaderVulkanHeaderVersion.
+constexpr int SwiftShaderVulkanHeaderVersion = 128;
+static_assert(SwiftShaderVulkanHeaderVersion == VK_HEADER_VERSION, "Please validate/update constants below upon upgrading Vulkan headers");
+
+constexpr auto VK_PIPELINE_BIND_POINT_RANGE_SIZE = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1);
+constexpr auto VK_IMAGE_VIEW_TYPE_END_RANGE = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY;
+
+}  // namespace vk
+
 #endif  // VULKAN_PLATFORM