Edit

kc3-lang/angle/src/libGLESv2/DynamicHLSL.h

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2014-02-05 16:28:24
    Hash : 48dcae7b
    Message : Added transform feedback shader generation. BUG=angle:495 Change-Id: I41a0177fd3eb43c9f4ab9e54faeadac3eb483c2c Reviewed-on: https://chromium-review.googlesource.com/185035 Reviewed-by: Shannon Woods <shannonwoods@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>

  • src/libGLESv2/DynamicHLSL.h
  • //
    // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // DynamicHLSL.h: Interface for link and run-time HLSL generation
    //
    
    #ifndef LIBGLESV2_DYNAMIC_HLSL_H_
    #define LIBGLESV2_DYNAMIC_HLSL_H_
    
    #include "common/angleutils.h"
    
    namespace sh
    {
    struct ShaderVariable;
    struct Attribute;
    }
    
    namespace rx
    {
    class Renderer;
    }
    
    namespace gl
    {
    
    class InfoLog;
    class FragmentShader;
    class VertexShader;
    struct VariableLocation;
    struct LinkedVarying;
    class VertexAttribute;
    struct VertexFormat;
    
    class DynamicHLSL
    {
      public:
        explicit DynamicHLSL(rx::Renderer *const renderer);
    
        int packVaryings(InfoLog &infoLog, const sh::ShaderVariable *packing[][4], FragmentShader *fragmentShader,
                         VertexShader *vertexShader, const std::vector<std::string>& transformFeedbackVaryings);
        std::string generateInputLayoutHLSL(const VertexFormat inputLayout[], const sh::Attribute shaderAttributes[]) const;
        bool generateShaderLinkHLSL(InfoLog &infoLog, int registers, const sh::ShaderVariable *packing[][4],
                                    std::string& pixelHLSL, std::string& vertexHLSL,
                                    FragmentShader *fragmentShader, VertexShader *vertexShader,
                                    const std::vector<std::string>& transformFeedbackVaryings,
                                    std::vector<LinkedVarying> *linkedVaryings,
                                    std::map<int, VariableLocation> *programOutputVars) const;
    
        std::string generateGeometryShaderHLSL(int registers, const sh::ShaderVariable *packing[][4], FragmentShader *fragmentShader, VertexShader *vertexShader) const;
    
        static const std::string VERTEX_ATTRIBUTE_STUB_STRING;
    
      private:
        DISALLOW_COPY_AND_ASSIGN(DynamicHLSL);
    
        rx::Renderer *const mRenderer;
    
        std::string generateVaryingHLSL(VertexShader *shader, const std::string &varyingSemantic,
                                        std::vector<LinkedVarying> *linkedVaryings) const;
        void defineOutputVariables(FragmentShader *fragmentShader, std::map<int, VariableLocation> *programOutputVars) const;
        std::string generatePointSpriteHLSL(int registers, const sh::ShaderVariable *packing[][4], FragmentShader *fragmentShader, VertexShader *vertexShader) const;
    
        // Prepend an underscore
        static std::string decorateVariable(const std::string &name);
    
        std::string generateAttributeConversionHLSL(const VertexFormat &vertexFormat, const sh::ShaderVariable &shaderAttrib) const;
    };
    
    // Utility method shared between ProgramBinary and DynamicHLSL
    std::string ArrayString(unsigned int i);
    
    }
    
    #endif // LIBGLESV2_DYNAMIC_HLSL_H_