1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2002 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 // IndexBuffer.h: Defines the abstract IndexBuffer class and IndexBufferInterface 8*8975f5c5SAndroid Build Coastguard Worker // class with derivations, classes that perform graphics API agnostic index buffer operations. 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_D3D_INDEXBUFFER_H_ 11*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_D3D_INDEXBUFFER_H_ 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker #include "common/PackedEnums.h" 14*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h" 15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h" 16*8975f5c5SAndroid Build Coastguard Worker 17*8975f5c5SAndroid Build Coastguard Worker namespace gl 18*8975f5c5SAndroid Build Coastguard Worker { 19*8975f5c5SAndroid Build Coastguard Worker class Context; 20*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Worker namespace rx 23*8975f5c5SAndroid Build Coastguard Worker { 24*8975f5c5SAndroid Build Coastguard Worker class BufferFactoryD3D; 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Worker class IndexBuffer : angle::NonCopyable 27*8975f5c5SAndroid Build Coastguard Worker { 28*8975f5c5SAndroid Build Coastguard Worker public: 29*8975f5c5SAndroid Build Coastguard Worker IndexBuffer(); 30*8975f5c5SAndroid Build Coastguard Worker virtual ~IndexBuffer(); 31*8975f5c5SAndroid Build Coastguard Worker 32*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result initialize(const gl::Context *context, 33*8975f5c5SAndroid Build Coastguard Worker unsigned int bufferSize, 34*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType indexType, 35*8975f5c5SAndroid Build Coastguard Worker bool dynamic) = 0; 36*8975f5c5SAndroid Build Coastguard Worker 37*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result mapBuffer(const gl::Context *context, 38*8975f5c5SAndroid Build Coastguard Worker unsigned int offset, 39*8975f5c5SAndroid Build Coastguard Worker unsigned int size, 40*8975f5c5SAndroid Build Coastguard Worker void **outMappedMemory) = 0; 41*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result unmapBuffer(const gl::Context *context) = 0; 42*8975f5c5SAndroid Build Coastguard Worker 43*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result discard(const gl::Context *context) = 0; 44*8975f5c5SAndroid Build Coastguard Worker 45*8975f5c5SAndroid Build Coastguard Worker virtual gl::DrawElementsType getIndexType() const = 0; 46*8975f5c5SAndroid Build Coastguard Worker virtual unsigned int getBufferSize() const = 0; 47*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result setSize(const gl::Context *context, 48*8975f5c5SAndroid Build Coastguard Worker unsigned int bufferSize, 49*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType indexType) = 0; 50*8975f5c5SAndroid Build Coastguard Worker 51*8975f5c5SAndroid Build Coastguard Worker unsigned int getSerial() const; 52*8975f5c5SAndroid Build Coastguard Worker 53*8975f5c5SAndroid Build Coastguard Worker protected: 54*8975f5c5SAndroid Build Coastguard Worker void updateSerial(); 55*8975f5c5SAndroid Build Coastguard Worker 56*8975f5c5SAndroid Build Coastguard Worker private: 57*8975f5c5SAndroid Build Coastguard Worker unsigned int mSerial; 58*8975f5c5SAndroid Build Coastguard Worker static unsigned int mNextSerial; 59*8975f5c5SAndroid Build Coastguard Worker }; 60*8975f5c5SAndroid Build Coastguard Worker 61*8975f5c5SAndroid Build Coastguard Worker class IndexBufferInterface : angle::NonCopyable 62*8975f5c5SAndroid Build Coastguard Worker { 63*8975f5c5SAndroid Build Coastguard Worker public: 64*8975f5c5SAndroid Build Coastguard Worker IndexBufferInterface(BufferFactoryD3D *factory, bool dynamic); 65*8975f5c5SAndroid Build Coastguard Worker virtual ~IndexBufferInterface(); 66*8975f5c5SAndroid Build Coastguard Worker 67*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result reserveBufferSpace(const gl::Context *context, 68*8975f5c5SAndroid Build Coastguard Worker unsigned int size, 69*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType indexType) = 0; 70*8975f5c5SAndroid Build Coastguard Worker 71*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType getIndexType() const; 72*8975f5c5SAndroid Build Coastguard Worker unsigned int getBufferSize() const; 73*8975f5c5SAndroid Build Coastguard Worker 74*8975f5c5SAndroid Build Coastguard Worker unsigned int getSerial() const; 75*8975f5c5SAndroid Build Coastguard Worker 76*8975f5c5SAndroid Build Coastguard Worker angle::Result mapBuffer(const gl::Context *context, 77*8975f5c5SAndroid Build Coastguard Worker unsigned int size, 78*8975f5c5SAndroid Build Coastguard Worker void **outMappedMemory, 79*8975f5c5SAndroid Build Coastguard Worker unsigned int *streamOffset); 80*8975f5c5SAndroid Build Coastguard Worker angle::Result unmapBuffer(const gl::Context *context); 81*8975f5c5SAndroid Build Coastguard Worker 82*8975f5c5SAndroid Build Coastguard Worker IndexBuffer *getIndexBuffer() const; 83*8975f5c5SAndroid Build Coastguard Worker 84*8975f5c5SAndroid Build Coastguard Worker protected: 85*8975f5c5SAndroid Build Coastguard Worker unsigned int getWritePosition() const; 86*8975f5c5SAndroid Build Coastguard Worker void setWritePosition(unsigned int writePosition); 87*8975f5c5SAndroid Build Coastguard Worker 88*8975f5c5SAndroid Build Coastguard Worker angle::Result discard(const gl::Context *context); 89*8975f5c5SAndroid Build Coastguard Worker 90*8975f5c5SAndroid Build Coastguard Worker angle::Result setBufferSize(const gl::Context *context, 91*8975f5c5SAndroid Build Coastguard Worker unsigned int bufferSize, 92*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType indexType); 93*8975f5c5SAndroid Build Coastguard Worker 94*8975f5c5SAndroid Build Coastguard Worker private: 95*8975f5c5SAndroid Build Coastguard Worker IndexBuffer *mIndexBuffer; 96*8975f5c5SAndroid Build Coastguard Worker 97*8975f5c5SAndroid Build Coastguard Worker unsigned int mWritePosition; 98*8975f5c5SAndroid Build Coastguard Worker bool mDynamic; 99*8975f5c5SAndroid Build Coastguard Worker }; 100*8975f5c5SAndroid Build Coastguard Worker 101*8975f5c5SAndroid Build Coastguard Worker class StreamingIndexBufferInterface : public IndexBufferInterface 102*8975f5c5SAndroid Build Coastguard Worker { 103*8975f5c5SAndroid Build Coastguard Worker public: 104*8975f5c5SAndroid Build Coastguard Worker explicit StreamingIndexBufferInterface(BufferFactoryD3D *factory); 105*8975f5c5SAndroid Build Coastguard Worker ~StreamingIndexBufferInterface() override; 106*8975f5c5SAndroid Build Coastguard Worker 107*8975f5c5SAndroid Build Coastguard Worker angle::Result reserveBufferSpace(const gl::Context *context, 108*8975f5c5SAndroid Build Coastguard Worker unsigned int size, 109*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType indexType) override; 110*8975f5c5SAndroid Build Coastguard Worker }; 111*8975f5c5SAndroid Build Coastguard Worker 112*8975f5c5SAndroid Build Coastguard Worker class StaticIndexBufferInterface : public IndexBufferInterface 113*8975f5c5SAndroid Build Coastguard Worker { 114*8975f5c5SAndroid Build Coastguard Worker public: 115*8975f5c5SAndroid Build Coastguard Worker explicit StaticIndexBufferInterface(BufferFactoryD3D *factory); 116*8975f5c5SAndroid Build Coastguard Worker ~StaticIndexBufferInterface() override; 117*8975f5c5SAndroid Build Coastguard Worker 118*8975f5c5SAndroid Build Coastguard Worker angle::Result reserveBufferSpace(const gl::Context *context, 119*8975f5c5SAndroid Build Coastguard Worker unsigned int size, 120*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType indexType) override; 121*8975f5c5SAndroid Build Coastguard Worker }; 122*8975f5c5SAndroid Build Coastguard Worker 123*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 124*8975f5c5SAndroid Build Coastguard Worker 125*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_D3D_INDEXBUFFER_H_ 126