Edit

kc3-lang/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2015-03-20 13:01:02
    Hash : cc6f55dd
    Message : Split Buffer::map into map and mapRange to match the API. BUG=angleproject:681 Change-Id: Ia4bf2b81134a922265ca762f33ac85d9ddbf1a7c Reviewed-on: https://chromium-review.googlesource.com/261890 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Brandon Jones <bajones@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp
  • //
    // Copyright 2014 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.
    //
    
    // Buffer9.cpp Defines the Buffer9 class.
    
    #include "libANGLE/renderer/d3d/d3d9/Buffer9.h"
    #include "libANGLE/renderer/d3d/d3d9/Renderer9.h"
    
    namespace rx
    {
    
    Buffer9::Buffer9(Renderer9 *renderer)
        : BufferD3D(renderer),
          mRenderer(renderer),
          mSize(0)
    {}
    
    Buffer9::~Buffer9()
    {
        mSize = 0;
    }
    
    gl::Error Buffer9::setData(const void* data, size_t size, GLenum usage)
    {
        if (size > mMemory.size())
        {
            if (!mMemory.resize(size))
            {
                return gl::Error(GL_OUT_OF_MEMORY, "Failed to resize internal buffer.");
            }
        }
    
        mSize = size;
        if (data && size > 0)
        {
            memcpy(mMemory.data(), data, size);
        }
    
        invalidateStaticData();
    
        if (usage == GL_STATIC_DRAW)
        {
            initializeStaticData();
        }
    
        return gl::Error(GL_NO_ERROR);
    }
    
    gl::Error Buffer9::getData(const uint8_t **outData)
    {
        *outData = mMemory.data();
        return gl::Error(GL_NO_ERROR);
    }
    
    gl::Error Buffer9::setSubData(const void* data, size_t size, size_t offset)
    {
        if (offset + size > mMemory.size())
        {
            if (!mMemory.resize(offset + size))
            {
                return gl::Error(GL_OUT_OF_MEMORY, "Failed to resize internal buffer.");
            }
        }
    
        mSize = std::max(mSize, offset + size);
        if (data && size > 0)
        {
            memcpy(mMemory.data() + offset, data, size);
        }
    
        invalidateStaticData();
    
        return gl::Error(GL_NO_ERROR);
    }
    
    gl::Error Buffer9::copySubData(BufferImpl* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size)
    {
        // Note: this method is currently unreachable
        Buffer9* sourceBuffer = GetAs<Buffer9>(source);
        ASSERT(sourceBuffer);
    
        memcpy(mMemory.data() + destOffset, sourceBuffer->mMemory.data() + sourceOffset, size);
    
        invalidateStaticData();
    
        return gl::Error(GL_NO_ERROR);
    }
    
    // We do not support buffer mapping in D3D9
    gl::Error Buffer9::map(GLenum access, GLvoid **mapPtr)
    {
        UNREACHABLE();
        return gl::Error(GL_INVALID_OPERATION);
    }
    
    gl::Error Buffer9::mapRange(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr)
    {
        UNREACHABLE();
        return gl::Error(GL_INVALID_OPERATION);
    }
    
    gl::Error Buffer9::unmap(GLboolean *result)
    {
        UNREACHABLE();
        return gl::Error(GL_INVALID_OPERATION);
    }
    
    void Buffer9::markTransformFeedbackUsage()
    {
        UNREACHABLE();
    }
    
    }