Add builtin interface to spirv shader

Initial structures to bridge the shader's use of particular builtins to
behavior of the "fixed function" logic wrapped around it.

Bug: b/120799499

Change-Id: I5cb360909c62615efab2e500f5c24109737e4ab7
Reviewed-on: https://swiftshader-review.googlesource.com/c/23709
Tested-by: Chris Forbes <chrisforbes@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 0d64a0e..8a91ebf 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -127,6 +127,7 @@
 			bool DepthGreater : 1;
 			bool DepthLess : 1;
 			bool DepthUnchanged : 1;
+			bool ContainsKill : 1;
 
 			// Compute workgroup dimensions
 			int LocalSizeX, LocalSizeY, LocalSizeZ;
@@ -146,11 +147,18 @@
 			ATTRIBTYPE_LAST = ATTRIBTYPE_UINT
 		};
 
+		bool hasBuiltinInput(spv::BuiltIn b) const
+		{
+			return inputBuiltins.find(b) != inputBuiltins.end();
+		}
+
 	private:
 		const int serialID;
 		static volatile int serialCounter;
 		Modes modes;
 		std::unordered_map<uint32_t, Object> defs;
+		std::unordered_map<spv::BuiltIn, uint32_t> inputBuiltins;
+		std::unordered_map<spv::BuiltIn, uint32_t> outputBuiltins;
 
 		void ProcessExecutionMode(InsnIterator it);