Increase subPixelPrecisionBits from 4 to 8

This is a requirement of the Vulkan Roadmap 2022 profile. We've long
kept it at 4 sub-pixel precision bits because a significant number of
mobile devices report this number.

Defining SWIFTSHADER_LEGACY_PRECISION=true keeps it at 4, which is
currently the case for GN builds to not affect Chromium golden images.

Test: dEQP-VK.api.info.profiles.roadmap_2022
Bug: b/226657516
Change-Id: I261362c5d1dc12c3a4e600a9acb7d5880e456a9b
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/69669
Tested-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Device/BUILD.gn b/src/Device/BUILD.gn
index 4497e3b..c1ae1ff 100644
--- a/src/Device/BUILD.gn
+++ b/src/Device/BUILD.gn
@@ -70,6 +70,7 @@
 
   defines = [
      "SWIFTSHADER_ENABLE_ASTC",  # TODO(b/150130101)
+     "SWIFTSHADER_LEGACY_PRECISION=true",  # TODO(b/226657516)
   ]
 
   deps = [
diff --git a/src/Vulkan/VkConfig.hpp b/src/Vulkan/VkConfig.hpp
index 4884986..4e2c023 100644
--- a/src/Vulkan/VkConfig.hpp
+++ b/src/Vulkan/VkConfig.hpp
@@ -20,6 +20,10 @@
 #include "Vulkan/VulkanPlatform.hpp"
 #include "spirv-tools/libspirv.h"
 
+#ifndef SWIFTSHADER_LEGACY_PRECISION
+#	define SWIFTSHADER_LEGACY_PRECISION false
+#endif
+
 namespace vk {
 
 // Note: Constant array initialization requires a string literal.
@@ -90,7 +94,7 @@
 
 constexpr int MAX_SAMPLER_ALLOCATION_COUNT = 4000;
 
-constexpr int SUBPIXEL_PRECISION_BITS = 4;
+constexpr int SUBPIXEL_PRECISION_BITS = SWIFTSHADER_LEGACY_PRECISION ? 4 : 8;
 constexpr float SUBPIXEL_PRECISION_FACTOR = static_cast<float>(1 << SUBPIXEL_PRECISION_BITS);
 constexpr int SUBPIXEL_PRECISION_MASK = 0xFFFFFFFF >> (32 - SUBPIXEL_PRECISION_BITS);