Skip to content

Commit

Permalink
Delete USE_RESOURCE_DEBUGGER. Replace FixedMap with xr_unordered_map.…
Browse files Browse the repository at this point in the history
… A small decrease in FPS is approximately 1-3% in Release. TODO: use an pool allocator with xr_unordered_map (maybe boost or tbb?) to compensate.
  • Loading branch information
intorr authored and Xottab-DUTY committed Jan 9, 2018
1 parent d533f5b commit f28b8a9
Show file tree
Hide file tree
Showing 6 changed files with 210 additions and 278 deletions.
36 changes: 18 additions & 18 deletions src/Layers/xrRender/D3DXRenderBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,25 @@ class D3DXRenderBase : public IRender, public pureFrame
#endif

// Runtime structures
xr_vector<R_dsgraph::mapNormalVS::TNode*> nrmVS;
xr_vector<R_dsgraph::mapNormalVS::value_type *> nrmVS;
#if defined(USE_DX10) || defined(USE_DX11)
xr_vector<R_dsgraph::mapNormalGS::TNode*> nrmGS;
xr_vector<R_dsgraph::mapNormalGS::value_type *> nrmGS;
#endif // USE_DX10
xr_vector<R_dsgraph::mapNormalPS::TNode*> nrmPS;
xr_vector<R_dsgraph::mapNormalCS::TNode*> nrmCS;
xr_vector<R_dsgraph::mapNormalStates::TNode*> nrmStates;
xr_vector<R_dsgraph::mapNormalTextures::TNode*> nrmTextures;
xr_vector<R_dsgraph::mapNormalTextures::TNode*> nrmTexturesTemp;
xr_vector<R_dsgraph::mapNormalPS::value_type *> nrmPS;
xr_vector<R_dsgraph::mapNormalCS::value_type *> nrmCS;
xr_vector<R_dsgraph::mapNormalStates::value_type *> nrmStates;
xr_vector<R_dsgraph::mapNormalTextures::value_type *> nrmTextures;
xr_vector<R_dsgraph::mapNormalTextures::value_type *> nrmTexturesTemp;

xr_vector<R_dsgraph::mapMatrixVS::TNode*> matVS;
xr_vector<R_dsgraph::mapMatrixVS::value_type *> matVS;
#if defined(USE_DX10) || defined(USE_DX11)
xr_vector<R_dsgraph::mapMatrixGS::TNode*> matGS;
xr_vector<R_dsgraph::mapMatrixGS::value_type *> matGS;
#endif // USE_DX10
xr_vector<R_dsgraph::mapMatrixPS::TNode*> matPS;
xr_vector<R_dsgraph::mapMatrixCS::TNode*> matCS;
xr_vector<R_dsgraph::mapMatrixStates::TNode*> matStates;
xr_vector<R_dsgraph::mapMatrixTextures::TNode*> matTextures;
xr_vector<R_dsgraph::mapMatrixTextures::TNode*> matTexturesTemp;
xr_vector<R_dsgraph::mapMatrixPS::value_type *> matPS;
xr_vector<R_dsgraph::mapMatrixCS::value_type *> matCS;
xr_vector<R_dsgraph::mapMatrixStates::value_type *> matStates;
xr_vector<R_dsgraph::mapMatrixTextures::value_type *> matTextures;
xr_vector<R_dsgraph::mapMatrixTextures::value_type *> matTexturesTemp;
xr_vector<R_dsgraph::_LodItem> lstLODs;
xr_vector<int> lstLODgroups;
xr_vector<ISpatial*> lstRenderables;
Expand Down Expand Up @@ -135,10 +135,10 @@ class D3DXRenderBase : public IRender, public pureFrame

for (int i = 0; i < SHADER_PASSES_MAX; ++i)
{
mapNormalPasses[0][i].destroy();
mapNormalPasses[1][i].destroy();
mapMatrixPasses[0][i].destroy();
mapMatrixPasses[1][i].destroy();
mapNormalPasses[0][i].clear();
mapNormalPasses[1][i].clear();
mapMatrixPasses[0][i].clear();
mapMatrixPasses[1][i].clear();
}
mapSorted.destroy();
mapHUD.destroy();
Expand Down
202 changes: 69 additions & 133 deletions src/Layers/xrRender/r__dsgraph_build.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,91 +163,65 @@ void D3DXRenderBase::r_dsgraph_insert_dynamic(dxRender_Visual* pVisual, Fvector&

for (u32 iPass = 0; iPass < sh->passes.size(); ++iPass)
{
// the most common node
// SPass& pass = *sh->passes.front ();
// mapMatrix_T& map = mapMatrix [sh->flags.iPriority/2];
SPass& pass = *sh->passes[iPass];
mapMatrix_T& map = mapMatrixPasses[sh->flags.iPriority / 2][iPass];
auto &pass = *sh->passes[iPass];
auto &map = mapMatrixPasses[sh->flags.iPriority / 2][iPass];

#ifdef USE_RESOURCE_DEBUGGER
#if defined(USE_DX10) || defined(USE_DX11)
mapMatrixVS::TNode* Nvs = map.insert(pass.vs);
mapMatrixGS::TNode* Ngs = Nvs->val.insert(pass.gs);
mapMatrixPS::TNode* Nps = Ngs->val.insert(pass.ps);
#else // USE_DX10
mapMatrixVS::TNode* Nvs = map.insert(pass.vs);
mapMatrixPS::TNode* Nps = Nvs->val.insert(pass.ps);
#endif // USE_DX10
auto &Nvs = map[&*pass.vs];
auto &Ngs = Nvs[pass.gs->gs];
auto &Nps = Ngs[pass.ps->ps];
#else
#if defined(USE_DX10) || defined(USE_DX11)
mapMatrixVS::TNode* Nvs = map.insert(&*pass.vs);
mapMatrixGS::TNode* Ngs = Nvs->val.insert(pass.gs->gs);
mapMatrixPS::TNode* Nps = Ngs->val.insert(pass.ps->ps);
#else // USE_DX10
mapMatrixVS::TNode* Nvs = map.insert(pass.vs->vs);
mapMatrixPS::TNode* Nps = Nvs->val.insert(pass.ps->ps);
#endif // USE_DX10
auto &Nvs = map[pass.vs->vs];
auto &Nps = Nvs[pass.ps->ps];
#endif

#ifdef USE_DX11
#ifdef USE_RESOURCE_DEBUGGER
Nps->val.hs = pass.hs;
Nps->val.ds = pass.ds;
mapMatrixCS::TNode* Ncs = Nps->val.mapCS.insert(pass.constants._get());
#else
Nps->val.hs = pass.hs->sh;
Nps->val.ds = pass.ds->sh;
mapMatrixCS::TNode* Ncs = Nps->val.mapCS.insert(pass.constants._get());
#endif
Nps.hs = pass.hs->sh;
Nps.ds = pass.ds->sh;

auto &Ncs = Nps.mapCS[pass.constants._get()];
#else
mapMatrixCS::TNode* Ncs = Nps->val.insert(pass.constants._get());
auto &Ncs = Nps[pass.constants._get()];
#endif
mapMatrixStates::TNode* Nstate = Ncs->val.insert(pass.state->state);
mapMatrixTextures::TNode* Ntex = Nstate->val.insert(pass.T._get());
mapMatrixItems& items = Ntex->val;
items.push_back(item);
auto &Nstate = Ncs[pass.state->state];
auto &Ntex = Nstate[pass.T._get()];
Ntex.push_back(item);

// Need to sort for HZB efficient use
if (SSA > Ntex->val.ssa)
if (SSA > Ntex.ssa)
{
Ntex->val.ssa = SSA;
if (SSA > Nstate->val.ssa)
Ntex.ssa = SSA;
if (SSA > Nstate.ssa)
{
Nstate->val.ssa = SSA;
if (SSA > Ncs->val.ssa)
Nstate.ssa = SSA;
if (SSA > Ncs.ssa)
{
Ncs->val.ssa = SSA;
Ncs.ssa = SSA;
#ifdef USE_DX11
if (SSA > Nps->val.mapCS.ssa)
if (SSA > Nps.mapCS.ssa)
{
Nps->val.mapCS.ssa = SSA;
Nps.mapCS.ssa = SSA;
#else
if (SSA > Nps->val.ssa)
if (SSA > Nps.ssa)
{
Nps->val.ssa = SSA;
Nps.ssa = SSA;
#endif
#if defined(USE_DX10) || defined(USE_DX11)
if (SSA > Ngs->val.ssa)
if (SSA > Ngs.ssa)
{
Ngs->val.ssa = SSA;
#endif // USE_DX10
if (SSA > Nvs->val.ssa)
Ngs.ssa = SSA;
#endif
if (SSA > Nvs.ssa)
{
Nvs->val.ssa = SSA;
#if defined(USE_DX10) || defined(USE_DX11)
Nvs.ssa = SSA;
}
#if defined(USE_DX10) || defined(USE_DX11)
}
#endif
}
}
}
}
#else // USE_DX10
}
}
}
}
}
#endif // USE_DX10
}

#if RENDER != R_R1
Expand Down Expand Up @@ -345,107 +319,69 @@ void D3DXRenderBase::r_dsgraph_insert_static(dxRender_Visual* pVisual)

counter_S++;

_NormalItem item = {SSA, pVisual};

for (u32 iPass = 0; iPass < sh->passes.size(); ++iPass)
{
// SPass& pass = *sh->passes.front ();
// mapNormal_T& map = mapNormal [sh->flags.iPriority/2];
SPass& pass = *sh->passes[iPass];
mapNormal_T& map = mapNormalPasses[sh->flags.iPriority / 2][iPass];

//#ifdef USE_RESOURCE_DEBUGGER
// mapNormalVS::TNode* Nvs = map.insert (pass.vs);
// mapNormalPS::TNode* Nps = Nvs->val.insert (pass.ps);
//#else
//#if defined(USE_DX10) || defined(USE_DX11)
// mapNormalVS::TNode* Nvs = map.insert (&*pass.vs);
//#else // USE_DX10
// mapNormalVS::TNode* Nvs = map.insert (pass.vs->vs);
//#endif // USE_DX10
// mapNormalPS::TNode* Nps = Nvs->val.insert (pass.ps->ps);
//#endif

#ifdef USE_RESOURCE_DEBUGGER
#if defined(USE_DX10) || defined(USE_DX11)
mapNormalVS::TNode* Nvs = map.insert(pass.vs);
mapNormalGS::TNode* Ngs = Nvs->val.insert(pass.gs);
mapNormalPS::TNode* Nps = Ngs->val.insert(pass.ps);
#else // USE_DX10
mapNormalVS::TNode* Nvs = map.insert(pass.vs);
mapNormalPS::TNode* Nps = Nvs->val.insert(pass.ps);
#endif // USE_DX10
#else // USE_RESOURCE_DEBUGGER
#if defined(USE_DX10) || defined(USE_DX11)
mapNormalVS::TNode* Nvs = map.insert(&*pass.vs);
mapNormalGS::TNode* Ngs = Nvs->val.insert(pass.gs->gs);
mapNormalPS::TNode* Nps = Ngs->val.insert(pass.ps->ps);
#else // USE_DX10
mapNormalVS::TNode* Nvs = map.insert(pass.vs->vs);
mapNormalPS::TNode* Nps = Nvs->val.insert(pass.ps->ps);
#endif // USE_DX10
#endif // USE_RESOURCE_DEBUGGER
auto &pass = *sh->passes[iPass];
auto &map = mapNormalPasses[sh->flags.iPriority / 2][iPass];

#ifdef USE_DX11
#ifdef USE_RESOURCE_DEBUGGER
Nps->val.hs = pass.hs;
Nps->val.ds = pass.ds;
mapNormalCS::TNode* Ncs = Nps->val.mapCS.insert(pass.constants._get());
#if defined(USE_DX10) || defined(USE_DX11)
auto &Nvs = map[&*pass.vs];
auto &Ngs = Nvs[pass.gs->gs];
auto &Nps = Ngs[pass.ps->ps];
#else
Nps->val.hs = pass.hs->sh;
Nps->val.ds = pass.ds->sh;
mapNormalCS::TNode* Ncs = Nps->val.mapCS.insert(pass.constants._get());
auto &Nvs = map[pass.vs->vs];
auto &Nps = Nvs[pass.ps->ps];
#endif

#ifdef USE_DX11
Nps.hs = pass.hs->sh;
Nps.ds = pass.ds->sh;

auto &Ncs = Nps.mapCS[pass.constants._get()];
#else
mapNormalCS::TNode* Ncs = Nps->val.insert(pass.constants._get());
auto &Ncs = Nps[pass.constants._get()];
#endif
mapNormalStates::TNode* Nstate = Ncs->val.insert(pass.state->state);
mapNormalTextures::TNode* Ntex = Nstate->val.insert(pass.T._get());
mapNormalItems& items = Ntex->val;
_NormalItem item = {SSA, pVisual};
items.push_back(item);
auto &Nstate = Ncs[pass.state->state];
auto &Ntex = Nstate[pass.T._get()];
Ntex.push_back(item);

// Need to sort for HZB efficient use
if (SSA > Ntex->val.ssa)
if (SSA > Ntex.ssa)
{
Ntex->val.ssa = SSA;
if (SSA > Nstate->val.ssa)
Ntex.ssa = SSA;
if (SSA > Nstate.ssa)
{
Nstate->val.ssa = SSA;
if (SSA > Ncs->val.ssa)
Nstate.ssa = SSA;
if (SSA > Ncs.ssa)
{
Ncs->val.ssa = SSA;
Ncs.ssa = SSA;
#ifdef USE_DX11
if (SSA > Nps->val.mapCS.ssa)
if (SSA > Nps.mapCS.ssa)
{
Nps->val.mapCS.ssa = SSA;
Nps.mapCS.ssa = SSA;
#else
if (SSA > Nps->val.ssa)
if (SSA > Nps.ssa)
{
Nps->val.ssa = SSA;
Nps.ssa = SSA;
#endif
// if (SSA>Nvs->val.ssa) { Nvs->val.ssa = SSA;
// } } } } }
#if defined(USE_DX10) || defined(USE_DX11)
if (SSA > Ngs->val.ssa)
if (SSA > Ngs.ssa)
{
Ngs->val.ssa = SSA;
#endif // USE_DX10
if (SSA > Nvs->val.ssa)
Ngs.ssa = SSA;
#endif
if (SSA > Nvs.ssa)
{
Nvs->val.ssa = SSA;
#if defined(USE_DX10) || defined(USE_DX11)
Nvs.ssa = SSA;
}
#if defined(USE_DX10) || defined(USE_DX11)
}
#endif
}
}
}
}
#else // USE_DX10
}
}
}
}
}
#endif // USE_DX10
}

#if RENDER != R_R1
Expand Down
Loading

0 comments on commit f28b8a9

Please sign in to comment.