Edit

kc3-lang/angle/src/libANGLE/params.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2017-08-01 12:48:34
    Hash : 44183cce
    Message : Micro-optimizations to draw call entry point. Thanks to Markus from NVIDIA. This inlines some methods and optimizes the check if a uniform is a bool type. BUG=angleproject:2119 Change-Id: I6f2c2d22c577458b39de600d3c56ec8e1a456a7a Reviewed-on: https://chromium-review.googlesource.com/591699 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>

  • src/libANGLE/params.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.
    //
    // params:
    //   Parameter wrapper structs for OpenGL ES. These helpers cache re-used values
    //   in entry point routines.
    
    #include "libANGLE/params.h"
    
    #include "common/utilities.h"
    #include "libANGLE/Context.h"
    #include "libANGLE/VertexArray.h"
    
    namespace gl
    {
    
    // static
    constexpr ParamTypeInfo ParamsBase::TypeInfo;
    constexpr ParamTypeInfo HasIndexRange::TypeInfo;
    
    const Optional<IndexRange> &HasIndexRange::getIndexRange() const
    {
        if (mIndexRange.valid())
        {
            return mIndexRange;
        }
    
        const State &state = mContext->getGLState();
    
        const gl::VertexArray *vao     = state.getVertexArray();
        gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get();
    
        if (elementArrayBuffer)
        {
            uintptr_t offset = reinterpret_cast<uintptr_t>(mIndices);
            IndexRange indexRange;
            Error error =
                elementArrayBuffer->getIndexRange(mType, static_cast<size_t>(offset), mCount,
                                                  state.isPrimitiveRestartEnabled(), &indexRange);
            if (error.isError())
            {
                mContext->handleError(error);
                return mIndexRange;
            }
    
            mIndexRange = indexRange;
        }
        else
        {
            mIndexRange = ComputeIndexRange(mType, mIndices, mCount, state.isPrimitiveRestartEnabled());
        }
    
        return mIndexRange;
    }
    
    }  // namespace gl