Edit

kc3-lang/angle/src/compiler/translator/tree_ops/ClampPointSize.cpp

Branch :

  • Show log

    Commit

  • Author : Clemen Deng
    Date : 2019-08-21 15:22:49
    Hash : d7d42540
    Message : Don't build symbol table for GLSL built-ins if on Android The GLSL + ESSL autogenerated symbol table is too large for android, and android also doesn't need desktop GL functionality If on android, compile the ESSL only symbol table Bug: chromium:996286 Change-Id: I14dfc7748dae389e78c35f82a390c67962665356 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1757372 Commit-Queue: Clemen Deng <clemendeng@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/compiler/translator/tree_ops/ClampPointSize.cpp
  • //
    // Copyright 2017 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.
    //
    // ClampPointSize.cpp: Limit the value that is written to gl_PointSize.
    //
    
    #include "compiler/translator/tree_ops/ClampPointSize.h"
    
    #include "compiler/translator/SymbolTable.h"
    #include "compiler/translator/tree_util/BuiltIn.h"
    #include "compiler/translator/tree_util/FindSymbolNode.h"
    #include "compiler/translator/tree_util/IntermNode_util.h"
    #include "compiler/translator/tree_util/RunAtTheEndOfShader.h"
    
    namespace sh
    {
    
    bool ClampPointSize(TCompiler *compiler,
                        TIntermBlock *root,
                        float maxPointSize,
                        TSymbolTable *symbolTable)
    {
        // Only clamp gl_PointSize if it's used in the shader.
        if (!FindSymbolNode(root, ImmutableString("gl_PointSize")))
        {
            return true;
        }
    
        TIntermSymbol *pointSizeNode = new TIntermSymbol(BuiltInVariable::gl_PointSize());
    
        TConstantUnion *maxPointSizeConstant = new TConstantUnion();
        maxPointSizeConstant->setFConst(maxPointSize);
        TIntermConstantUnion *maxPointSizeNode =
            new TIntermConstantUnion(maxPointSizeConstant, TType(EbtFloat, EbpHigh, EvqConst));
    
        // min(gl_PointSize, maxPointSize)
        TIntermSequence *minArguments = new TIntermSequence();
        minArguments->push_back(pointSizeNode->deepCopy());
        minArguments->push_back(maxPointSizeNode);
        TIntermTyped *clampedPointSize =
            CreateBuiltInFunctionCallNode("min", minArguments, *symbolTable, 100);
    
        // gl_PointSize = min(gl_PointSize, maxPointSize)
        TIntermBinary *assignPointSize = new TIntermBinary(EOpAssign, pointSizeNode, clampedPointSize);
    
        return RunAtTheEndOfShader(compiler, root, assignPointSize, symbolTable);
    }
    
    }  // namespace sh