10bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Copyright 2016 The SwiftShader Authors. All Rights Reserved. 20bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 30bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Licensed under the Apache License, Version 2.0 (the "License"); 40bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// you may not use this file except in compliance with the License. 50bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// You may obtain a copy of the License at 60bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 70bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// http://www.apache.org/licenses/LICENSE-2.0 80bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 90bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Unless required by applicable law or agreed to in writing, software 100bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// distributed under the License is distributed on an "AS IS" BASIS, 110bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// See the License for the specific language governing permissions and 130bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// limitations under the License. 140bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 150bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#ifndef sw_VertexPipeline_hpp 160bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#define sw_VertexPipeline_hpp 170bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 180bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#include "VertexRoutine.hpp" 190bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 20708c24b3cd03b68aa98b29a9099d6a9ce96eca16Nicolas Capens#include "Renderer/Context.hpp" 21708c24b3cd03b68aa98b29a9099d6a9ce96eca16Nicolas Capens#include "Renderer/VertexProcessor.hpp" 220bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 230bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capensnamespace sw 240bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens{ 250bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens class VertexPipeline : public VertexRoutine 260bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens { 270bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens public: 280bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens VertexPipeline(const VertexProcessor::State &state); 290bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 300bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens virtual ~VertexPipeline(); 310bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 320bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens private: 33877ddfc51400030afd2804a23b132ed87a2f8d2fAlexis Hetu void pipeline(UInt &index) override; 340bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens void processTextureCoordinate(int stage, Vector4f &normal, Vector4f &position); 350bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens void processPointSize(); 360bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 370bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens Vector4f transformBlend(const Register &src, const Pointer<Byte> &matrix, bool homogenous); 380bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens Vector4f transform(const Register &src, const Pointer<Byte> &matrix, bool homogenous); 390bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens Vector4f transform(const Register &src, const Pointer<Byte> &matrix, UInt index[4], bool homogenous); 400bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens Vector4f normalize(Vector4f &src); 410bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens Float4 power(Float4 &src0, Float4 &src1); 420bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens }; 430bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens}; 440bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 450bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#endif // sw_VertexPipeline_hpp 46