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