1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef sw_PixelShader_hpp
16 #define sw_PixelShader_hpp
17 
18 #include "Shader.hpp"
19 #include "Main/Config.hpp"
20 
21 namespace sw
22 {
23 	class PixelShader : public Shader
24 	{
25 	public:
26 		explicit PixelShader(const PixelShader *ps = 0);
27 		explicit PixelShader(const unsigned long *token);
28 
29 		virtual ~PixelShader();
30 
31 		static int validate(const unsigned long *const token);   // Returns number of instructions if valid
32 		bool depthOverride() const;
33 		bool containsKill() const;
34 		bool containsCentroid() const;
35 		bool usesDiffuse(int component) const;
36 		bool usesSpecular(int component) const;
37 		bool usesTexture(int coordinate, int component) const;
38 
39 		virtual void analyze();
40 
41 		Semantic semantic[MAX_FRAGMENT_INPUTS][4];   // FIXME: Private
42 
43 		bool vPosDeclared;
44 		bool vFaceDeclared;
45 
46 	private:
47 		void analyzeZOverride();
48 		void analyzeKill();
49 		void analyzeInterpolants();
50 
51 		bool zOverride;
52 		bool kill;
53 		bool centroid;
54 	};
55 }
56 
57 #endif   // sw_PixelShader_hpp
58