1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Worker // BufferD3D.h: Defines the rx::BufferD3D class, an implementation of BufferImpl. 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_D3D_BUFFERD3D_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_D3D_BUFFERD3D_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h" 13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/BufferImpl.h" 14*8975f5c5SAndroid Build Coastguard Worker 15*8975f5c5SAndroid Build Coastguard Worker #include <stdint.h> 16*8975f5c5SAndroid Build Coastguard Worker #include <vector> 17*8975f5c5SAndroid Build Coastguard Worker 18*8975f5c5SAndroid Build Coastguard Worker namespace gl 19*8975f5c5SAndroid Build Coastguard Worker { 20*8975f5c5SAndroid Build Coastguard Worker struct VertexAttribute; 21*8975f5c5SAndroid Build Coastguard Worker class VertexBinding; 22*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 23*8975f5c5SAndroid Build Coastguard Worker 24*8975f5c5SAndroid Build Coastguard Worker namespace rx 25*8975f5c5SAndroid Build Coastguard Worker { 26*8975f5c5SAndroid Build Coastguard Worker class BufferFactoryD3D; 27*8975f5c5SAndroid Build Coastguard Worker class StaticIndexBufferInterface; 28*8975f5c5SAndroid Build Coastguard Worker class StaticVertexBufferInterface; 29*8975f5c5SAndroid Build Coastguard Worker 30*8975f5c5SAndroid Build Coastguard Worker enum class D3DBufferUsage 31*8975f5c5SAndroid Build Coastguard Worker { 32*8975f5c5SAndroid Build Coastguard Worker STATIC, 33*8975f5c5SAndroid Build Coastguard Worker DYNAMIC, 34*8975f5c5SAndroid Build Coastguard Worker }; 35*8975f5c5SAndroid Build Coastguard Worker 36*8975f5c5SAndroid Build Coastguard Worker class BufferD3D : public BufferImpl 37*8975f5c5SAndroid Build Coastguard Worker { 38*8975f5c5SAndroid Build Coastguard Worker public: 39*8975f5c5SAndroid Build Coastguard Worker BufferD3D(const gl::BufferState &state, BufferFactoryD3D *factory); 40*8975f5c5SAndroid Build Coastguard Worker ~BufferD3D() override; 41*8975f5c5SAndroid Build Coastguard Worker getSerial()42*8975f5c5SAndroid Build Coastguard Worker unsigned int getSerial() const { return mSerial; } 43*8975f5c5SAndroid Build Coastguard Worker 44*8975f5c5SAndroid Build Coastguard Worker virtual size_t getSize() const = 0; 45*8975f5c5SAndroid Build Coastguard Worker virtual bool supportsDirectBinding() const = 0; 46*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result markTransformFeedbackUsage(const gl::Context *context) = 0; 47*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result getData(const gl::Context *context, const uint8_t **outData) = 0; 48*8975f5c5SAndroid Build Coastguard Worker 49*8975f5c5SAndroid Build Coastguard Worker // Warning: you should ensure binding really matches attrib.bindingIndex before using this 50*8975f5c5SAndroid Build Coastguard Worker // function. 51*8975f5c5SAndroid Build Coastguard Worker StaticVertexBufferInterface *getStaticVertexBuffer(const gl::VertexAttribute &attribute, 52*8975f5c5SAndroid Build Coastguard Worker const gl::VertexBinding &binding); 53*8975f5c5SAndroid Build Coastguard Worker StaticIndexBufferInterface *getStaticIndexBuffer(); 54*8975f5c5SAndroid Build Coastguard Worker 55*8975f5c5SAndroid Build Coastguard Worker virtual void initializeStaticData(const gl::Context *context); 56*8975f5c5SAndroid Build Coastguard Worker virtual void invalidateStaticData(const gl::Context *context); 57*8975f5c5SAndroid Build Coastguard Worker 58*8975f5c5SAndroid Build Coastguard Worker void promoteStaticUsage(const gl::Context *context, size_t dataSize); 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker angle::Result getIndexRange(const gl::Context *context, 61*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type, 62*8975f5c5SAndroid Build Coastguard Worker size_t offset, 63*8975f5c5SAndroid Build Coastguard Worker size_t count, 64*8975f5c5SAndroid Build Coastguard Worker bool primitiveRestartEnabled, 65*8975f5c5SAndroid Build Coastguard Worker gl::IndexRange *outRange) override; 66*8975f5c5SAndroid Build Coastguard Worker getFactory()67*8975f5c5SAndroid Build Coastguard Worker BufferFactoryD3D *getFactory() const { return mFactory; } getUsage()68*8975f5c5SAndroid Build Coastguard Worker D3DBufferUsage getUsage() const { return mUsage; } 69*8975f5c5SAndroid Build Coastguard Worker 70*8975f5c5SAndroid Build Coastguard Worker protected: 71*8975f5c5SAndroid Build Coastguard Worker void updateSerial(); 72*8975f5c5SAndroid Build Coastguard Worker void updateD3DBufferUsage(const gl::Context *context, gl::BufferUsage usage); 73*8975f5c5SAndroid Build Coastguard Worker void emptyStaticBufferCache(); 74*8975f5c5SAndroid Build Coastguard Worker 75*8975f5c5SAndroid Build Coastguard Worker BufferFactoryD3D *mFactory; 76*8975f5c5SAndroid Build Coastguard Worker unsigned int mSerial; 77*8975f5c5SAndroid Build Coastguard Worker static unsigned int mNextSerial; 78*8975f5c5SAndroid Build Coastguard Worker 79*8975f5c5SAndroid Build Coastguard Worker std::vector<std::unique_ptr<StaticVertexBufferInterface>> mStaticVertexBuffers; 80*8975f5c5SAndroid Build Coastguard Worker StaticIndexBufferInterface *mStaticIndexBuffer; 81*8975f5c5SAndroid Build Coastguard Worker unsigned int mStaticBufferCacheTotalSize; 82*8975f5c5SAndroid Build Coastguard Worker unsigned int mStaticVertexBufferOutOfDate; 83*8975f5c5SAndroid Build Coastguard Worker size_t mUnmodifiedDataUse; 84*8975f5c5SAndroid Build Coastguard Worker D3DBufferUsage mUsage; 85*8975f5c5SAndroid Build Coastguard Worker }; 86*8975f5c5SAndroid Build Coastguard Worker 87*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 88*8975f5c5SAndroid Build Coastguard Worker 89*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_D3D_BUFFERD3D_H_ 90