Edit

kc3-lang/angle/src/compiler/preprocessor/Macro.cpp

Branch :

  • Show log

    Commit

  • Author : Olli Etuaho
    Date : 2015-08-13 11:27:17
    Hash : 6cb4c7f0
    Message : Set __VERSION__ macro when the #version directive is parsed __VERSION__ macro needs to be set to 300 when #version 300 es is on the first line of the shader, since section 3.4 of ESSL 3.00.4 spec mentions that the value of __VERSION__ should match the shading language being parsed. The value from parsing the version directive replaces the default value 100. BUG=angleproject:524 TEST=dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.* (4 tests start passing, 2 still fail) dEQP-GLES3.functional.shaders.preprocessor.conditionals.* (2 tests start passing) dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.* (no regression) Change-Id: I15bfdeb73d1e343d131ded56b1fd52ca5ef32408 Reviewed-on: https://chromium-review.googlesource.com/293440 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Tested-by: Olli Etuaho <oetuaho@nvidia.com>

  • src/compiler/preprocessor/Macro.cpp
  • //
    // Copyright (c) 2011 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.
    //
    
    #include "Macro.h"
    
    #include <sstream>
    
    #include "Token.h"
    
    namespace pp
    {
    
    bool Macro::equals(const Macro &other) const
    {
        return (type == other.type) &&
               (name == other.name) &&
               (parameters == other.parameters) &&
               (replacements == other.replacements);
    }
    
    void PredefineMacro(MacroSet *macroSet, const char *name, int value)
    {
        std::ostringstream stream;
        stream << value;
    
        Token token;
        token.type = Token::CONST_INT;
        token.text = stream.str();
    
        Macro macro;
        macro.predefined = true;
        macro.type       = Macro::kTypeObj;
        macro.name = name;
        macro.replacements.push_back(token);
    
        (*macroSet)[name] = macro;
    }
    
    }  // namespace pp