Edit

kc3-lang/angle/src/libANGLE/renderer/d3d/ShaderExecutableD3D.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2017-08-31 13:28:28
    Hash : be5e2ec3
    Message : Remove uniform memory copy from GL front-end. This moves the uniform query to the back-end. In D3D, this requires a bit more redesign, especially for matrix uniforms. Gives about a 10% speed improvement in the GL/NULL uniforms stress test on Windows (UniformsBenchmark.Run/gl_null_400_vec4). BUG=angleproject:1390 Change-Id: Idac22a77118e9e94d2f28c585e31ff0bc785ba94 Reviewed-on: https://chromium-review.googlesource.com/623929 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>

  • src/libANGLE/renderer/d3d/ShaderExecutableD3D.cpp
  • //
    // Copyright (c) 2012-2015 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.
    //
    
    // ShaderExecutable.cpp: Implements a class to contain D3D shader executable
    // implementation details.
    
    #include "libANGLE/renderer/d3d/ShaderExecutableD3D.h"
    
    #include "common/angleutils.h"
    
    namespace rx
    {
    
    ShaderExecutableD3D::ShaderExecutableD3D(const void *function, size_t length)
        : mFunctionBuffer(length)
    {
        memcpy(mFunctionBuffer.data(), function, length);
    }
    
    ShaderExecutableD3D::~ShaderExecutableD3D()
    {
    }
    
    const uint8_t *ShaderExecutableD3D::getFunction() const
    {
        return mFunctionBuffer.data();
    }
    
    size_t ShaderExecutableD3D::getLength() const
    {
        return mFunctionBuffer.size();
    }
    
    const std::string &ShaderExecutableD3D::getDebugInfo() const
    {
        return mDebugInfo;
    }
    
    void ShaderExecutableD3D::appendDebugInfo(const std::string &info)
    {
        mDebugInfo += info;
    }
    
    UniformStorageD3D::UniformStorageD3D(size_t initialSize) : mUniformData()
    {
        bool result = mUniformData.resize(initialSize);
        ASSERT(result);
    
        // Uniform data is zero-initialized by default.
        mUniformData.fill(0);
    }
    
    UniformStorageD3D::~UniformStorageD3D()
    {
    }
    
    size_t UniformStorageD3D::size() const
    {
        return mUniformData.size();
    }
    
    uint8_t *UniformStorageD3D::getDataPointer(unsigned int registerIndex, unsigned int registerElement)
    {
        size_t offset = ((registerIndex * 4 + registerElement) * sizeof(float));
        return mUniformData.data() + offset;
    }
    
    }  // namespace rx