SpirvShader: Add support for DescriptorSet and Binding decorations

Bug: b/126330097
Change-Id: Id705dc19bb3a114bf703ddc37b529d6ac89b4d52
Reviewed-on: https://swiftshader-review.googlesource.com/c/25549
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 96f88f4..c8b57d7 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -656,6 +656,14 @@
 			HasComponent = true;
 			Component = arg;
 			break;
+		case spv::DecorationDescriptorSet:
+			HasDescriptorSet = true;
+			DescriptorSet = arg;
+			break;
+		case spv::DecorationBinding:
+			HasBinding = true;
+			Binding = arg;
+			break;
 		case spv::DecorationBuiltIn:
 			HasBuiltIn = true;
 			BuiltIn = static_cast<spv::BuiltIn>(arg);
@@ -702,6 +710,18 @@
 			Component = src.Component;
 		}
 
+		if (src.HasDescriptorSet)
+		{
+			HasDescriptorSet = true;
+			DescriptorSet = src.DescriptorSet;
+		}
+
+		if (src.HasBinding)
+		{
+			HasBinding = true;
+			Binding = src.Binding;
+		}
+
 		Flat |= src.Flat;
 		NoPerspective |= src.NoPerspective;
 		Centroid |= src.Centroid;
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 96302d7..3b8d055 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -271,9 +271,13 @@
 		{
 			int32_t Location;
 			int32_t Component;
+			int32_t DescriptorSet;
+			int32_t Binding;
 			spv::BuiltIn BuiltIn;
 			bool HasLocation : 1;
 			bool HasComponent : 1;
+			bool HasDescriptorSet : 1;
+			bool HasBinding : 1;
 			bool HasBuiltIn : 1;
 			bool Flat : 1;
 			bool Centroid : 1;
@@ -282,10 +286,12 @@
 			bool BufferBlock : 1;
 
 			Decorations()
-					: Location{-1}, Component{0}, BuiltIn{}, HasLocation{false}, HasComponent{false}, HasBuiltIn{false},
-					  Flat{false},
-					  Centroid{false}, NoPerspective{false}, Block{false},
-					  BufferBlock{false}
+					: Location{-1}, Component{0}, DescriptorSet{-1}, Binding{-1},
+					  BuiltIn{static_cast<spv::BuiltIn>(-1)},
+					  HasLocation{false}, HasComponent{false},
+					  HasDescriptorSet{false}, HasBinding{false},
+					  HasBuiltIn{false}, Flat{false}, Centroid{false},
+					  NoPerspective{false}, Block{false}, BufferBlock{false}
 			{
 			}