170a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com// 270a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 370a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 470a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com// found in the LICENSE file. 570a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com// 670a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 770a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com// VertexDeclarationCache.h: Defines a helper class to construct and cache vertex declarations. 870a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 970a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com#ifndef LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_ 1070a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com#define LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_ 1170a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 12f7100b981f0856b238252e6052509eecf8e5adedGeoff Lang#include "libGLESv2/Error.h" 13c7a4104957aa1f6fa36e4e9cf65d36b699eb05bdBrandon Jones#include "libGLESv2/renderer/d3d/VertexDataManager.h" 1470a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 1570a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.comnamespace gl 1670a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com{ 1770a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.comclass VertexDataManager; 1870a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com} 1970a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 2070a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.comnamespace rx 2170a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com{ 2270a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 2370a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.comclass VertexDeclarationCache 2470a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com{ 2570a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com public: 2670a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com VertexDeclarationCache(); 2770a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com ~VertexDeclarationCache(); 2870a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 29f7100b981f0856b238252e6052509eecf8e5adedGeoff Lang gl::Error applyDeclaration(IDirect3DDevice9 *device, TranslatedAttribute attributes[], gl::ProgramBinary *programBinary, GLsizei instances, GLsizei *repeatDraw); 3070a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 3170a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com void markStateDirty(); 3270a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 3370a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com private: 3470a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com UINT mMaxLru; 3570a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 3670a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com enum { NUM_VERTEX_DECL_CACHE_ENTRIES = 32 }; 3770a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 3870a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com struct VBData 3970a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com { 4070a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com unsigned int serial; 4170a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com unsigned int stride; 4270a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com unsigned int offset; 4370a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com }; 4470a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 4570a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com VBData mAppliedVBs[gl::MAX_VERTEX_ATTRIBS]; 4670a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com IDirect3DVertexDeclaration9 *mLastSetVDecl; 4770a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com bool mInstancingEnabled; 4870a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 4970a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com struct VertexDeclCacheEntry 5070a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com { 5170a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com D3DVERTEXELEMENT9 cachedElements[gl::MAX_VERTEX_ATTRIBS + 1]; 5270a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com UINT lruCount; 5370a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com IDirect3DVertexDeclaration9 *vertexDeclaration; 5470a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com } mVertexDeclCache[NUM_VERTEX_DECL_CACHE_ENTRIES]; 5570a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com}; 5670a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 5770a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com} 5870a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com 5970a219bc1637c98cae30baf60de6d713131a2755daniel@transgaming.com#endif // LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_ 60