Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / d3d9 / VertexDeclarationCache.h
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/d3d/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_