Add vao cache for static surfaces.

Remove support for draw range elements, multi draw arrays, world vao creation, surface merging.
This commit is contained in:
SmileTheory 2017-04-28 02:13:25 -07:00
parent 127464ed19
commit c65d2c2657
12 changed files with 413 additions and 730 deletions

View file

@ -929,8 +929,6 @@ typedef struct srfBspSurface_s
// BSP VBO offsets
int firstVert;
int firstIndex;
glIndex_t minIndex;
glIndex_t maxIndex;
// static render data
vao_t *vao;
@ -1005,8 +1003,6 @@ typedef struct srfVaoMdvMesh_s
// backEnd stats
int numIndexes;
int numVerts;
glIndex_t minIndex;
glIndex_t maxIndex;
// static render data
vao_t *vao;
@ -1135,15 +1131,8 @@ typedef struct {
int *surfacesDlightBits;
int *surfacesPshadowBits;
int numMergedSurfaces;
msurface_t *mergedSurfaces;
int *mergedSurfacesViewCount;
int *mergedSurfacesDlightBits;
int *mergedSurfacesPshadowBits;
int nummarksurfaces;
int *marksurfaces;
int *viewSurfaces;
int numfogs;
fog_t *fogs;
@ -1375,8 +1364,6 @@ typedef struct {
qboolean intelGraphics;
qboolean drawRangeElements;
qboolean multiDrawArrays;
qboolean occlusionQuery;
int glslMajorVersion;
@ -1415,9 +1402,6 @@ typedef struct {
int c_staticVaoDraws;
int c_dynamicVaoDraws;
int c_multidraws;
int c_multidrawsMerged;
int c_dlightVertexes;
int c_dlightIndexes;
@ -1689,8 +1673,6 @@ extern cvar_t *r_showcluster;
extern cvar_t *r_gamma;
extern cvar_t *r_displayRefresh; // optional display refresh option
extern cvar_t *r_ext_draw_range_elements;
extern cvar_t *r_ext_multi_draw_arrays;
extern cvar_t *r_ext_framebuffer_object;
extern cvar_t *r_ext_texture_float;
extern cvar_t *r_ext_framebuffer_multisample;
@ -1977,8 +1959,6 @@ typedef struct stageVars
vec2_t texcoords[NUM_TEXTURE_BUNDLES][SHADER_MAX_VERTEXES];
} stageVars_t;
#define MAX_MULTIDRAW_PRIMITIVES 256
typedef struct shaderCommands_s
{
glIndex_t indexes[SHADER_MAX_INDEXES] QALIGN(16);
@ -1994,6 +1974,7 @@ typedef struct shaderCommands_s
void *attribPointers[ATTR_INDEX_COUNT];
vao_t *vao;
qboolean useInternalVao;
qboolean useCacheVao;
stageVars_t svars QALIGN(16);
@ -2010,14 +1991,6 @@ typedef struct shaderCommands_s
int firstIndex;
int numIndexes;
int numVertexes;
glIndex_t minIndex;
glIndex_t maxIndex;
int multiDrawPrimitives;
GLsizei multiDrawNumIndexes[MAX_MULTIDRAW_PRIMITIVES];
glIndex_t *multiDrawFirstIndex[MAX_MULTIDRAW_PRIMITIVES];
glIndex_t multiDrawMinIndex[MAX_MULTIDRAW_PRIMITIVES];
glIndex_t multiDrawMaxIndex[MAX_MULTIDRAW_PRIMITIVES];
// info extracted from current shader
int numPasses;
@ -2032,7 +2005,7 @@ void RB_EndSurface(void);
void RB_CheckOverflow( int verts, int indexes );
#define RB_CHECKOVERFLOW(v,i) if (tess.numVertexes + (v) >= SHADER_MAX_VERTEXES || tess.numIndexes + (i) >= SHADER_MAX_INDEXES ) {RB_CheckOverflow(v,i);}
void R_DrawElementsVao( int numIndexes, glIndex_t firstIndex, glIndex_t minIndex, glIndex_t maxIndex );
void R_DrawElements( int numIndexes, glIndex_t firstIndex );
void RB_StageIteratorGeneric( void );
void RB_StageIteratorSky( void );
void RB_StageIteratorVertexLitTexture( void );
@ -2171,6 +2144,14 @@ void R_VaoList_f(void);
void RB_UpdateTessVao(unsigned int attribBits);
void VaoCache_Commit(void);
void VaoCache_Init(void);
void VaoCache_BindVao(void);
void VaoCache_CheckAdd(qboolean *endSurface, qboolean *recycleVertexBuffer, qboolean *recycleIndexBuffer, int numVerts, int numIndexes);
void VaoCache_RecycleVertexBuffer(void);
void VaoCache_RecycleIndexBuffer(void);
void VaoCache_InitQueue(void);
void VaoCache_AddSurface(srfVert_t *verts, int numVerts, glIndex_t *indexes, int numIndexes);
/*
============================================================