swr/rast: Add KNOB_DISABLE_SPLIT_DRAW

This is useful for archrast data collection. This greatly speeds up the
post processing script since there is significantly less events generated.

Finally, this is a simpler option to communicate to users than having
them directly adjust MAX_PRIMS_PER_DRAW and MAX_TESS_PRIMS_PER_DRAW.

Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
George Kyriazis 2018-02-27 15:29:52 -06:00
parent e0a4a25829
commit 3f7ce10b3e
2 changed files with 26 additions and 8 deletions

View file

@ -270,4 +270,14 @@ KNOBS = [
'category' : 'perf_adv',
}],
['DISABLE_SPLIT_DRAW', {
'type' : 'bool',
'default' : 'false',
'desc' : ['Don\'t split large draws into smaller draws.,',
'MAX_PRIMS_PER_DRAW and MAX_TESS_PRIMS_PER_DRAW can be used to control split size.',
'',
'Useful to disable split draws for gathering archrast stats.'],
'category' : 'perf_adv',
}],
]

View file

@ -1077,13 +1077,27 @@ uint32_t MaxVertsPerDraw(
{
API_STATE& state = pDC->pState->state;
uint32_t vertsPerDraw = totalVerts;
// We can not split draws that have streamout enabled because there is no practical way
// to support multiple threads generating SO data for a single set of buffers.
if (state.soState.soEnable)
{
return totalVerts;
}
// The Primitive Assembly code can only handle 1 RECT at a time. Specified with only 3 verts.
if (topology == TOP_RECT_LIST)
{
return 3;
}
// Is split drawing disabled?
if (KNOB_DISABLE_SPLIT_DRAW)
{
return totalVerts;
}
uint32_t vertsPerDraw = totalVerts;
switch (topology)
{
case TOP_POINT_LIST:
@ -1129,12 +1143,6 @@ uint32_t MaxVertsPerDraw(
vertsPerDraw = vertsPerPrim * KNOB_MAX_TESS_PRIMS_PER_DRAW;
}
break;
// The Primitive Assembly code can only handle 1 RECT at a time.
case TOP_RECT_LIST:
vertsPerDraw = 3;
break;
default:
// We are not splitting up draws for other topologies.
break;