Home | History | Annotate | Download | only in Shader
      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 		void setInput(int inputIdx, int nbComponents, const Semantic& semantic);
     40 		const Semantic& getInput(int inputIdx, int component) const;
     41 
     42 		void declareVPos() { vPosDeclared = true; }
     43 		void declareVFace() { vFaceDeclared = true; }
     44 		bool isVPosDeclared() const { return vPosDeclared; }
     45 		bool isVFaceDeclared() const { return vFaceDeclared; }
     46 
     47 	private:
     48 		void analyze();
     49 		void analyzeZOverride();
     50 		void analyzeKill();
     51 		void analyzeInterpolants();
     52 
     53 		Semantic input[MAX_FRAGMENT_INPUTS][4];
     54 
     55 		bool vPosDeclared;
     56 		bool vFaceDeclared;
     57 		bool zOverride;
     58 		bool kill;
     59 		bool centroid;
     60 	};
     61 }
     62 
     63 #endif   // sw_PixelShader_hpp
     64