Home | History | Annotate | Download | only in MachineIndependent
      1 //
      2 // Copyright (C) 2017 LunarG, Inc.
      3 // Copyright (C) 2018 Google, Inc.
      4 //
      5 // All rights reserved.
      6 //
      7 // Redistribution and use in source and binary forms, with or without
      8 // modification, are permitted provided that the following conditions
      9 // are met:
     10 //
     11 //    Redistributions of source code must retain the above copyright
     12 //    notice, this list of conditions and the following disclaimer.
     13 //
     14 //    Redistributions in binary form must reproduce the above
     15 //    copyright notice, this list of conditions and the following
     16 //    disclaimer in the documentation and/or other materials provided
     17 //    with the distribution.
     18 //
     19 //    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
     20 //    contributors may be used to endorse or promote products derived
     21 //    from this software without specific prior written permission.
     22 //
     23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     24 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     25 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     26 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     27 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     28 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     29 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     30 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     31 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     32 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     33 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     34 // POSSIBILITY OF SUCH DAMAGE.
     35 //
     36 
     37 #ifndef _ATTRIBUTE_INCLUDED_
     38 #define _ATTRIBUTE_INCLUDED_
     39 
     40 #include "../Include/Common.h"
     41 #include "../Include/ConstantUnion.h"
     42 
     43 namespace glslang {
     44 
     45     enum TAttributeType {
     46         EatNone,
     47         EatAllow_uav_condition,
     48         EatBranch,
     49         EatCall,
     50         EatDomain,
     51         EatEarlyDepthStencil,
     52         EatFastOpt,
     53         EatFlatten,
     54         EatForceCase,
     55         EatInstance,
     56         EatMaxTessFactor,
     57         EatNumThreads,
     58         EatMaxVertexCount,
     59         EatOutputControlPoints,
     60         EatOutputTopology,
     61         EatPartitioning,
     62         EatPatchConstantFunc,
     63         EatPatchSize,
     64         EatUnroll,
     65         EatLoop,
     66         EatBinding,
     67         EatGlobalBinding,
     68         EatLocation,
     69         EatInputAttachment,
     70         EatBuiltIn,
     71         EatPushConstant,
     72         EatConstantId,
     73         EatDependencyInfinite,
     74         EatDependencyLength
     75     };
     76 
     77     class TIntermAggregate;
     78 
     79     struct TAttributeArgs {
     80         TAttributeType name;
     81         const TIntermAggregate* args;
     82 
     83         // Obtain attribute as integer
     84         // Return false if it cannot be obtained
     85         bool getInt(int& value, int argNum = 0) const;
     86 
     87         // Obtain attribute as string, with optional to-lower transform
     88         // Return false if it cannot be obtained
     89         bool getString(TString& value, int argNum = 0, bool convertToLower = true) const;
     90 
     91         // How many arguments were provided to the attribute?
     92         int size() const;
     93 
     94     protected:
     95         const TConstUnion* getConstUnion(TBasicType basicType, int argNum) const;
     96     };
     97 
     98     typedef TList<TAttributeArgs> TAttributes;
     99 
    100 } // end namespace glslang
    101 
    102 #endif // _ATTRIBUTE_INCLUDED_
    103