tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

VertexArray11.h (4811B)


      1 //
      2 // Copyright 2014 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 // VertexArray11.h: Defines the rx::VertexArray11 class which implements rx::VertexArrayImpl.
      8 
      9 #ifndef LIBANGLE_RENDERER_D3D_D3D11_VERTEXARRAY11_H_
     10 #define LIBANGLE_RENDERER_D3D_D3D11_VERTEXARRAY11_H_
     11 
     12 #include "libANGLE/Framebuffer.h"
     13 #include "libANGLE/renderer/VertexArrayImpl.h"
     14 #include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
     15 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
     16 
     17 namespace rx
     18 {
     19 class Renderer11;
     20 
     21 class VertexArray11 : public VertexArrayImpl
     22 {
     23  public:
     24    VertexArray11(const gl::VertexArrayState &data);
     25    ~VertexArray11() override;
     26    void destroy(const gl::Context *context) override;
     27 
     28    // Does not apply any state updates - these are done in syncStateForDraw which as access to
     29    // the draw call parameters.
     30    angle::Result syncState(const gl::Context *context,
     31                            const gl::VertexArray::DirtyBits &dirtyBits,
     32                            gl::VertexArray::DirtyAttribBitsArray *attribBits,
     33                            gl::VertexArray::DirtyBindingBitsArray *bindingBits) override;
     34 
     35    // Applied buffer pointers are updated here.
     36    angle::Result syncStateForDraw(const gl::Context *context,
     37                                   GLint firstVertex,
     38                                   GLsizei vertexOrIndexCount,
     39                                   gl::DrawElementsType indexTypeOrInvalid,
     40                                   const void *indices,
     41                                   GLsizei instances,
     42                                   GLint baseVertex,
     43                                   GLuint baseInstance,
     44                                   bool promoteDynamic);
     45 
     46    // This will check the dynamic attribs mask.
     47    bool hasActiveDynamicAttrib(const gl::Context *context);
     48 
     49    const std::vector<TranslatedAttribute> &getTranslatedAttribs() const;
     50 
     51    Serial getCurrentStateSerial() const { return mCurrentStateSerial; }
     52 
     53    // In case of a multi-view program change, we have to update all attributes so that the divisor
     54    // is adjusted.
     55    void markAllAttributeDivisorsForAdjustment(int numViews);
     56 
     57    const TranslatedIndexData &getCachedIndexInfo() const;
     58    void updateCachedIndexInfo(const TranslatedIndexData &indexInfo);
     59    bool isCachedIndexInfoValid() const;
     60 
     61    gl::DrawElementsType getCachedDestinationIndexType() const;
     62 
     63  private:
     64    void updateVertexAttribStorage(const gl::Context *context,
     65                                   StateManager11 *stateManager,
     66                                   size_t attribIndex);
     67    angle::Result updateDirtyAttribs(const gl::Context *context,
     68                                     const gl::AttributesMask &activeDirtyAttribs);
     69    angle::Result updateDynamicAttribs(const gl::Context *context,
     70                                       VertexDataManager *vertexDataManager,
     71                                       GLint firstVertex,
     72                                       GLsizei vertexOrIndexCount,
     73                                       gl::DrawElementsType indexTypeOrInvalid,
     74                                       const void *indices,
     75                                       GLsizei instances,
     76                                       GLint baseVertex,
     77                                       GLuint baseInstance,
     78                                       bool promoteDynamic,
     79                                       const gl::AttributesMask &activeDynamicAttribs);
     80 
     81    angle::Result updateElementArrayStorage(const gl::Context *context,
     82                                            GLsizei indexCount,
     83                                            gl::DrawElementsType indexType,
     84                                            const void *indices,
     85                                            bool restartEnabled);
     86 
     87    std::vector<VertexStorageType> mAttributeStorageTypes;
     88    std::vector<TranslatedAttribute> mTranslatedAttribs;
     89 
     90    // The mask of attributes marked as dynamic.
     91    gl::AttributesMask mDynamicAttribsMask;
     92 
     93    // A set of attributes we know are dirty, and need to be re-translated.
     94    gl::AttributesMask mAttribsToTranslate;
     95 
     96    Serial mCurrentStateSerial;
     97 
     98    // The numViews value used to adjust the divisor.
     99    int mAppliedNumViewsToDivisor;
    100 
    101    // If the index buffer needs re-streaming.
    102    Optional<gl::DrawElementsType> mLastDrawElementsType;
    103    Optional<const void *> mLastDrawElementsIndices;
    104    Optional<bool> mLastPrimitiveRestartEnabled;
    105    IndexStorageType mCurrentElementArrayStorage;
    106    Optional<TranslatedIndexData> mCachedIndexInfo;
    107    gl::DrawElementsType mCachedDestinationIndexType;
    108 };
    109 
    110 }  // namespace rx
    111 
    112 #endif  // LIBANGLE_RENDERER_D3D_D3D11_VERTEXARRAY11_H_