diff options
author | George Kyriazis <[email protected]> | 2018-02-27 15:29:52 -0600 |
---|---|---|
committer | George Kyriazis <[email protected]> | 2018-03-09 09:36:30 -0600 |
commit | 3f7ce10b3eca0f3c3dbd01c76c35d1af8627664d (patch) | |
tree | 4ee6d891ef96d9a8009f1a5a1ae438e93ed47ee3 | |
parent | e0a4a258297b12cb5c6ee4bb57d4372ecf85367e (diff) |
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 <[email protected]>
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/codegen/knob_defs.py | 10 | ||||
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/core/api.cpp | 24 |
2 files changed, 26 insertions, 8 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/codegen/knob_defs.py b/src/gallium/drivers/swr/rasterizer/codegen/knob_defs.py index 2c6946b063f..d4bf1930a0f 100644 --- a/src/gallium/drivers/swr/rasterizer/codegen/knob_defs.py +++ b/src/gallium/drivers/swr/rasterizer/codegen/knob_defs.py @@ -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', + }], + ] diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp index b2529598bd1..53bd2d28555 100644 --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp @@ -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; |