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 14namespace gl 15{ 16class VertexDataManager; 17} 18 19namespace rx 20{ 21 22class 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