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_PixelPipeline_hpp 16 #define sw_PixelPipeline_hpp 17 18 #include "PixelRoutine.hpp" 19 20 namespace sw 21 { 22 class PixelPipeline : public PixelRoutine 23 { 24 public: 25 PixelPipeline(const PixelProcessor::State &state, const PixelShader *shader) : 26 PixelRoutine(state, shader), current(rs[0]), diffuse(vs[0]), specular(vs[1]), perturbate(false), luminance(false), previousScaling(false) {} 27 virtual ~PixelPipeline() {} 28 29 protected: 30 virtual void setBuiltins(Int &x, Int &y, Float4(&z)[4], Float4 &w); 31 virtual void applyShader(Int cMask[4]); 32 virtual Bool alphaTest(Int cMask[4]); 33 virtual void rasterOperation(Float4 &fog, Pointer<Byte> cBuffer[4], Int &x, Int sMask[4], Int zMask[4], Int cMask[4]); 34 35 private: 36 Vector4s ¤t; 37 Vector4s &diffuse; 38 Vector4s &specular; 39 40 Vector4s rs[6]; 41 Vector4s vs[2]; 42 Vector4s ts[6]; 43 44 // bem(l) offsets and luminance 45 Float4 du; 46 Float4 dv; 47 Short4 L; 48 49 // texm3x3 temporaries 50 Float4 u_; // FIXME 51 Float4 v_; // FIXME 52 Float4 w_; // FIXME 53 Float4 U; // FIXME 54 Float4 V; // FIXME 55 Float4 W; // FIXME 56 57 void fixedFunction(); 58 void blendTexture(Vector4s &temp, Vector4s &texture, int stage); 59 void fogBlend(Vector4s ¤t, Float4 &fog); 60 void specularPixel(Vector4s ¤t, Vector4s &specular); 61 62 void sampleTexture(Vector4s &c, int coordinates, int sampler, bool project = false); 63 void sampleTexture(Vector4s &c, int sampler, Float4 &u, Float4 &v, Float4 &w, Float4 &q, bool project = false); 64 65 Short4 convertFixed12(RValue<Float4> cf); 66 void convertFixed12(Vector4s &cs, Vector4f &cf); 67 Float4 convertSigned12(Short4 &cs); 68 void convertSigned12(Vector4f &cf, Vector4s &cs); 69 70 void writeDestination(Vector4s &d, const Dst &dst); 71 Vector4s fetchRegister(const Src &src); 72 73 // Instructions 74 void MOV(Vector4s &dst, Vector4s &src0); 75 void ADD(Vector4s &dst, Vector4s &src0, Vector4s &src1); 76 void SUB(Vector4s &dst, Vector4s &src0, Vector4s &src1); 77 void MAD(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2); 78 void MUL(Vector4s &dst, Vector4s &src0, Vector4s &src1); 79 void DP3(Vector4s &dst, Vector4s &src0, Vector4s &src1); 80 void DP4(Vector4s &dst, Vector4s &src0, Vector4s &src1); 81 void LRP(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2); 82 void TEXCOORD(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate); 83 void TEXCRD(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int coordinate, bool project); 84 void TEXDP3(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src); 85 void TEXDP3TEX(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0); 86 void TEXKILL(Int cMask[4], Float4 &u, Float4 &v, Float4 &s); 87 void TEXKILL(Int cMask[4], Vector4s &dst); 88 void TEX(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, bool project); 89 void TEXLD(Vector4s &dst, Vector4s &src, int stage, bool project); 90 void TEXBEM(Vector4s &dst, Vector4s &src, Float4 &u, Float4 &v, Float4 &s, int stage); 91 void TEXBEML(Vector4s &dst, Vector4s &src, Float4 &u, Float4 &v, Float4 &s, int stage); 92 void TEXREG2AR(Vector4s &dst, Vector4s &src0, int stage); 93 void TEXREG2GB(Vector4s &dst, Vector4s &src0, int stage); 94 void TEXREG2RGB(Vector4s &dst, Vector4s &src0, int stage); 95 void TEXM3X2DEPTH(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src, bool signedScaling); 96 void TEXM3X2PAD(Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, int component, bool signedScaling); 97 void TEXM3X2TEX(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, bool signedScaling); 98 void TEXM3X3(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, bool signedScaling); 99 void TEXM3X3PAD(Float4 &u, Float4 &v, Float4 &s, Vector4s &src0, int component, bool signedScaling); 100 void TEXM3X3SPEC(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, Vector4s &src1); 101 void TEXM3X3TEX(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0, bool singedScaling); 102 void TEXM3X3VSPEC(Vector4s &dst, Float4 &u, Float4 &v, Float4 &s, int stage, Vector4s &src0); 103 void TEXDEPTH(); 104 void CND(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2); 105 void CMP(Vector4s &dst, Vector4s &src0, Vector4s &src1, Vector4s &src2); 106 void BEM(Vector4s &dst, Vector4s &src0, Vector4s &src1, int stage); 107 108 bool perturbate; 109 bool luminance; 110 bool previousScaling; 111 }; 112 } 113 114 #endif 115