• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (c) 2012 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 // VertexDeclarationCache.h: Defines a helper class to construct and cache vertex declarations.
8 
9 #ifndef LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_
10 #define LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_
11 
12 #include "libGLESv2/renderer/VertexDataManager.h"
13 
14 namespace gl
15 {
16 class VertexDataManager;
17 }
18 
19 namespace rx
20 {
21 
22 class VertexDeclarationCache
23 {
24   public:
25     VertexDeclarationCache();
26     ~VertexDeclarationCache();
27 
28     GLenum applyDeclaration(IDirect3DDevice9 *device, TranslatedAttribute attributes[], gl::ProgramBinary *programBinary, GLsizei instances, GLsizei *repeatDraw);
29 
30     void markStateDirty();
31 
32   private:
33     UINT mMaxLru;
34 
35     enum { NUM_VERTEX_DECL_CACHE_ENTRIES = 32 };
36 
37     struct VBData
38     {
39         unsigned int serial;
40         unsigned int stride;
41         unsigned int offset;
42     };
43 
44     VBData mAppliedVBs[gl::MAX_VERTEX_ATTRIBS];
45     IDirect3DVertexDeclaration9 *mLastSetVDecl;
46     bool mInstancingEnabled;
47 
48     struct VertexDeclCacheEntry
49     {
50         D3DVERTEXELEMENT9 cachedElements[gl::MAX_VERTEX_ATTRIBS + 1];
51         UINT lruCount;
52         IDirect3DVertexDeclaration9 *vertexDeclaration;
53     } mVertexDeclCache[NUM_VERTEX_DECL_CACHE_ENTRIES];
54 };
55 
56 }
57 
58 #endif // LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_
59