Edit

kc3-lang/angle/src/libANGLE/renderer/d3d/BufferD3D.h

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2015-05-05 13:12:36
    Hash : 520c4ae2
    Message : Add a Buffer::getIndexRange function. Instead of exposing the index range cache, add a more generic method that allows the buffers to handle their own caching of index ranges. BufferImpl::getData can be hard to implement for BufferGL because there isn't a way to tell the buffer to unmap and glGetBufferSubData can be very expensive, requiring an extra copy of the data. BUG=angleproject:881 Change-Id: Idec645219056132e0d72a410fbe7b971fa02c9e9 Reviewed-on: https://chromium-review.googlesource.com/261892 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/renderer/d3d/BufferD3D.h
  • //
    // 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.
    //
    
    // BufferD3D.h: Defines the rx::BufferD3D class, an implementation of BufferImpl.
    
    #ifndef LIBANGLE_RENDERER_D3D_BUFFERD3D_H_
    #define LIBANGLE_RENDERER_D3D_BUFFERD3D_H_
    
    #include "libANGLE/angletypes.h"
    #include "libANGLE/renderer/BufferImpl.h"
    
    #include <stdint.h>
    
    namespace rx
    {
    class BufferFactoryD3D;
    class StaticIndexBufferInterface;
    class StaticVertexBufferInterface;
    
    class BufferD3D : public BufferImpl
    {
      public:
        BufferD3D(BufferFactoryD3D *factory);
        virtual ~BufferD3D();
    
        unsigned int getSerial() const { return mSerial; }
    
        virtual size_t getSize() const = 0;
        virtual bool supportsDirectBinding() const = 0;
        virtual void markTransformFeedbackUsage() = 0;
        virtual gl::Error getData(const uint8_t **outData) = 0;
    
        StaticVertexBufferInterface *getStaticVertexBuffer() { return mStaticVertexBuffer; }
        StaticIndexBufferInterface *getStaticIndexBuffer() { return mStaticIndexBuffer; }
    
        void initializeStaticData();
        void invalidateStaticData();
        void promoteStaticUsage(int dataSize);
    
        gl::Error getIndexRange(GLenum type, size_t offset, size_t count, gl::RangeUI *outRange) override;
    
      protected:
        void updateSerial();
    
        BufferFactoryD3D *mFactory;
        unsigned int mSerial;
        static unsigned int mNextSerial;
    
        StaticVertexBufferInterface *mStaticVertexBuffer;
        StaticIndexBufferInterface *mStaticIndexBuffer;
        unsigned int mUnmodifiedDataUse;
    };
    
    }
    
    #endif // LIBANGLE_RENDERER_D3D_BUFFERD3D_H_