Edit

kc3-lang/angle/src/compiler/translator/StructureHLSL.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2015-02-19 10:16:12
    Hash : 80d934bb
    Message : Enable MSVS warning 4512. Fix up the missing DISALLOW_COPY_AND_ASSIGN macros and various small problems preventing us from turning on this warning. This should ensure we more often use the DISALLOW macro going forward. Change-Id: I2e1a9d23a31a51279a577fad8dffb8c1530e2ee8 Reviewed-on: https://chromium-review.googlesource.com/251100 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cooper Partin <coopp@microsoft.com> Tested-by: Cooper Partin <coopp@microsoft.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/compiler/translator/StructureHLSL.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.
    //
    // StructureHLSL.h:
    //   Interfaces of methods for HLSL translation of GLSL structures.
    //
    
    #ifndef COMPILER_TRANSLATOR_STRUCTUREHLSL_H_
    #define COMPILER_TRANSLATOR_STRUCTUREHLSL_H_
    
    #include "compiler/translator/Common.h"
    #include "compiler/translator/IntermNode.h"
    
    #include <set>
    
    class TInfoSinkBase;
    class TScopeBracket;
    
    namespace sh
    {
    
    // This helper class assists structure and interface block definitions in determining
    // how to pack std140 structs within HLSL's packing rules.
    class Std140PaddingHelper
    {
      public:
        explicit Std140PaddingHelper(const std::map<TString, int> &structElementIndexes,
                                     unsigned int *uniqueCounter);
        Std140PaddingHelper(const Std140PaddingHelper &other);
        Std140PaddingHelper &operator=(const Std140PaddingHelper &other);
    
        int elementIndex() const { return mElementIndex; }
        int prePadding(const TType &type);
        TString prePaddingString(const TType &type);
        TString postPaddingString(const TType &type, bool useHLSLRowMajorPacking);
    
      private:
        TString next();
    
        unsigned *mPaddingCounter;
        int mElementIndex;
        const std::map<TString, int> *mStructElementIndexes;
    };
    
    class StructureHLSL
    {
      public:
        StructureHLSL();
    
        void addConstructor(const TType &type, const TString &name, const TIntermSequence *parameters);
        std::string structsHeader() const;
    
        TString defineQualified(const TStructure &structure, bool useHLSLRowMajorPacking, bool useStd140Packing);
        static TString defineNameless(const TStructure &structure);
    
        Std140PaddingHelper getPaddingHelper();
    
      private:
        DISALLOW_COPY_AND_ASSIGN(StructureHLSL);
    
        unsigned mUniquePaddingCounter;
    
        std::map<TString, int> mStd140StructElementIndexes;
    
        typedef std::set<TString> StructNames;
        StructNames mStructNames;
    
        typedef std::set<TString> Constructors;
        Constructors mConstructors;
    
        typedef std::vector<TString> StructDeclarations;
        StructDeclarations mStructDeclarations;
    
        void storeStd140ElementIndex(const TStructure &structure, bool useHLSLRowMajorPacking);
        static TString define(const TStructure &structure, bool useHLSLRowMajorPacking,
                             bool useStd140Packing, Std140PaddingHelper *padHelper);
    };
    
    }
    
    #endif // COMPILER_TRANSLATOR_STRUCTUREHLSL_H_