Hash :
a55102c5
Author :
Date :
2017-02-24T12:36:50
Unify and simplify shader variable collection
Instead of setting variable information in both CollectVariables and
the GetVariableTraverser helper class it uses, keep all of this
functionality in CollectVariables. A single helper function handles
setting variable information that doesn't depend on variable type, and
the rest is done in "record" functions that are implemented for each
variable type.
This removes templates from the code, making it leaner and easier to
understand, and will help with implementing future features like
adding binding and location layout qualifiers for uniforms.
BUG=angleproject:1442
TEST=angle_unittests, angle_end2end_tests,
dEQP-GLES2.functional.shaders.*
Change-Id: I79148b7b3fa9cb46634a22bdcc9ce0c04f970384
Reviewed-on: https://chromium-review.googlesource.com/446838
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
//
// Copyright (c) 2002-2010 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.
//
#ifndef COMPILER_TRANSLATOR_UTIL_H_
#define COMPILER_TRANSLATOR_UTIL_H_
#include <stack>
#include "angle_gl.h"
#include <GLSLANG/ShaderLang.h>
#include "compiler/translator/Operator.h"
#include "compiler/translator/Types.h"
// If overflow happens, clamp the value to UINT_MIN or UINT_MAX.
// Return false if overflow happens.
bool atoi_clamp(const char *str, unsigned int *value);
namespace sh
{
class TSymbolTable;
float NumericLexFloat32OutOfRangeToInfinity(const std::string &str);
// strtof_clamp is like strtof but
// 1. it forces C locale, i.e. forcing '.' as decimal point.
// 2. it sets the value to infinity if overflow happens.
// 3. str should be guaranteed to be in the valid format for a floating point number as defined
// by the grammar in the ESSL 3.00.6 spec section 4.1.4.
// Return false if overflow happens.
bool strtof_clamp(const std::string &str, float *value);
GLenum GLVariableType(const TType &type);
GLenum GLVariablePrecision(const TType &type);
bool IsVaryingIn(TQualifier qualifier);
bool IsVaryingOut(TQualifier qualifier);
bool IsVarying(TQualifier qualifier);
InterpolationType GetInterpolationType(TQualifier qualifier);
TString ArrayString(const TType &type);
TType GetShaderVariableBasicType(const sh::ShaderVariable &var);
TOperator TypeToConstructorOperator(const TType &type);
bool IsBuiltinOutputVariable(TQualifier qualifier);
bool IsBuiltinFragmentInputVariable(TQualifier qualifier);
bool CanBeInvariantESSL1(TQualifier qualifier);
bool CanBeInvariantESSL3OrGreater(TQualifier qualifier);
} // namespace sh
#endif // COMPILER_TRANSLATOR_UTIL_H_