Follow up on "Add support for R8_SRGB textures"

Fixed R8G8_SRGB and R8G8B8_SRGB in the Blitter.
Enabled R8G8_SRGB tests to make sure the fix is correct.

Change-Id: Ibe7addd3f635f353abb09e0391a9a30d20392fbf
Tests: dEQP-VK.*r8g8_srgb*
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/33530
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index bdcfe0a..2ca5f3f 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -334,6 +334,7 @@
 			break;
 		case VK_FORMAT_R8G8_UNORM:
 		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8_SRGB:
 			c.x = Float(Int(*Pointer<Byte>(element + 0)));
 			c.y = Float(Int(*Pointer<Byte>(element + 1)));
 			c.w = float(0xFF);
@@ -618,12 +619,10 @@
 		case VK_FORMAT_R8G8B8_SINT:
 		case VK_FORMAT_R8G8B8_SNORM:
 		case VK_FORMAT_R8G8B8_SSCALED:
-		case VK_FORMAT_R8G8B8_SRGB:
 			if(writeB) { *Pointer<SByte>(element + 2) = SByte(RoundInt(Float(c.z))); }
 		case VK_FORMAT_R8G8_SINT:
 		case VK_FORMAT_R8G8_SNORM:
 		case VK_FORMAT_R8G8_SSCALED:
-		case VK_FORMAT_R8G8_SRGB:
 			if(writeG) { *Pointer<SByte>(element + 1) = SByte(RoundInt(Float(c.y))); }
 		case VK_FORMAT_R8_SINT:
 		case VK_FORMAT_R8_SNORM:
@@ -633,10 +632,12 @@
 		case VK_FORMAT_R8G8B8_UINT:
 		case VK_FORMAT_R8G8B8_UNORM:
 		case VK_FORMAT_R8G8B8_USCALED:
+		case VK_FORMAT_R8G8B8_SRGB:
 			if(writeB) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.z))); }
 		case VK_FORMAT_R8G8_UINT:
 		case VK_FORMAT_R8G8_UNORM:
 		case VK_FORMAT_R8G8_USCALED:
+		case VK_FORMAT_R8G8_SRGB:
 			if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
 		case VK_FORMAT_R8_UINT:
 		case VK_FORMAT_R8_UNORM:
@@ -1043,7 +1044,6 @@
 		case VK_FORMAT_B8G8R8A8_SSCALED:
 			if(writeA) { *Pointer<SByte>(element + 3) = SByte(Extract(c, 3)); }
 		case VK_FORMAT_B8G8R8_SINT:
-		case VK_FORMAT_B8G8R8_SRGB:
 		case VK_FORMAT_B8G8R8_SSCALED:
 			if(writeB) { *Pointer<SByte>(element) = SByte(Extract(c, 2)); }
 			if(writeG) { *Pointer<SByte>(element + 1) = SByte(Extract(c, 1)); }
@@ -1109,6 +1109,7 @@
 			if(writeA) { *Pointer<Byte>(element + 3) = Byte(Extract(c, 3)); }
 		case VK_FORMAT_B8G8R8_UINT:
 		case VK_FORMAT_B8G8R8_USCALED:
+		case VK_FORMAT_B8G8R8_SRGB:
 			if(writeB) { *Pointer<Byte>(element) = Byte(Extract(c, 2)); }
 			if(writeG) { *Pointer<Byte>(element + 1) = Byte(Extract(c, 1)); }
 			if(writeR) { *Pointer<Byte>(element + 2) = Byte(Extract(c, 0)); }
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index 14c0c9e..a769a2c 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -185,6 +185,7 @@
 				case VK_FORMAT_B8G8R8A8_SRGB:
 				case VK_FORMAT_R8G8B8A8_SRGB:
 				case VK_FORMAT_R8_SRGB:
+				case VK_FORMAT_R8G8_SRGB:
 					c.x *= Float4(1.0f / 0xFF00u);
 					c.y *= Float4(1.0f / 0xFF00u);
 					c.z *= Float4(1.0f / 0xFF00u);
@@ -237,6 +238,7 @@
 			case VK_FORMAT_B8G8R8A8_SRGB:
 			case VK_FORMAT_R8G8B8A8_SRGB:
 			case VK_FORMAT_R8_SRGB:
+			case VK_FORMAT_R8G8_SRGB:
 				c.x = Float4(As<UShort4>(cs.x)) * Float4(1.0f / 0xFF00u);
 				c.y = Float4(As<UShort4>(cs.y)) * Float4(1.0f / 0xFF00u);
 				c.z = Float4(As<UShort4>(cs.z)) * Float4(1.0f / 0xFF00u);
@@ -1454,6 +1456,7 @@
 				{
 				case VK_FORMAT_R8G8_UNORM:
 				case VK_FORMAT_R8G8_SNORM:
+				case VK_FORMAT_R8G8_SRGB:
 					c.y = (c.x & Short4(0xFF00u));
 					c.x = (c.x << 8);
 					break;
diff --git a/src/Vulkan/VkFormat.cpp b/src/Vulkan/VkFormat.cpp
index e68efce..9dad667 100644
--- a/src/Vulkan/VkFormat.cpp
+++ b/src/Vulkan/VkFormat.cpp
@@ -1900,6 +1900,7 @@
 	case VK_FORMAT_R32G32B32A32_SINT:
 	case VK_FORMAT_R32G32B32A32_UINT:
 	case VK_FORMAT_R8G8_UNORM:
+	case VK_FORMAT_R8G8_SRGB:
 	case VK_FORMAT_B8G8R8_UNORM:
 	case VK_FORMAT_B8G8R8A8_UNORM:
 	case VK_FORMAT_R8G8B8A8_UNORM:
@@ -1945,6 +1946,7 @@
 	switch(format)
 	{
 	case VK_FORMAT_R8G8_UNORM:
+	case VK_FORMAT_R8G8_SRGB:
 	case VK_FORMAT_B8G8R8_UNORM:
 	case VK_FORMAT_B8G8R8A8_UNORM:
 	case VK_FORMAT_R8G8B8A8_UNORM:
@@ -2027,6 +2029,7 @@
 	case VK_FORMAT_R32G32B32A32_SINT:
 	case VK_FORMAT_R32G32B32A32_UINT:
 	case VK_FORMAT_R8G8_UNORM:
+	case VK_FORMAT_R8G8_SRGB:
 	case VK_FORMAT_B8G8R8_UNORM:
 	case VK_FORMAT_B8G8R8A8_UNORM:
 	case VK_FORMAT_R8G8B8A8_UNORM:
@@ -2085,6 +2088,7 @@
 	case VK_FORMAT_R8G8B8A8_SINT:
 	case VK_FORMAT_R8G8B8A8_UINT:
 	case VK_FORMAT_R8G8_UNORM:
+	case VK_FORMAT_R8G8_SRGB:
 	case VK_FORMAT_B8G8R8_UNORM:
 	case VK_FORMAT_B8G8R8A8_UNORM:
 	case VK_FORMAT_R8G8B8A8_UNORM:
@@ -2152,6 +2156,7 @@
 		return component < 1;
 	case VK_FORMAT_R8G8_SNORM:
 	case VK_FORMAT_R8G8_UNORM:
+	case VK_FORMAT_R8G8_SRGB:
 	case VK_FORMAT_R8G8_SINT:
 	case VK_FORMAT_R8G8_UINT:
 	case VK_FORMAT_R16G16_SINT:
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp
index 7e6c150..323d644 100644
--- a/src/Vulkan/VkPhysicalDevice.cpp
+++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -391,6 +391,7 @@
 	case VK_FORMAT_R8_SRGB:
 	case VK_FORMAT_R8_SNORM:
 	case VK_FORMAT_R8G8_UNORM:
+	case VK_FORMAT_R8G8_SRGB:
 	case VK_FORMAT_R8G8_SNORM:
 	case VK_FORMAT_R8G8B8A8_UNORM:
 	case VK_FORMAT_R8G8B8A8_SNORM: