anv: Fix gfx8/9 VB range > 32bits workaround detection.
Since the dirty range started out as 0..0, you would have 0..VBend as the new dirty range on the first draw, and if your VB was >32b then you'd flush every time you used it. Instead, if there's no existing dirty range then just set it to our new VB's range. Perf results with zink+anv on my CFL: sauerbraten: +24.8182% +/- 0.602077% (n=5) portal-2-v2.trace: +4.64289% +/- 0.285285% (n=5) Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21370>
This commit is contained in:
@@ -6657,10 +6657,7 @@ genX(cmd_buffer_update_dirty_vbs_for_gfx8_vb_flush)(struct anv_cmd_buffer *cmd_b
|
||||
struct anv_vb_cache_range *bound = &cmd_buffer->state.gfx.ib_bound_range;
|
||||
struct anv_vb_cache_range *dirty = &cmd_buffer->state.gfx.ib_dirty_range;
|
||||
|
||||
if (bound->end > bound->start) {
|
||||
dirty->start = MIN2(dirty->start, bound->start);
|
||||
dirty->end = MAX2(dirty->end, bound->end);
|
||||
}
|
||||
anv_merge_vb_cache_range(dirty, bound);
|
||||
}
|
||||
|
||||
uint64_t mask = vb_used;
|
||||
@@ -6674,10 +6671,7 @@ genX(cmd_buffer_update_dirty_vbs_for_gfx8_vb_flush)(struct anv_cmd_buffer *cmd_b
|
||||
bound = &cmd_buffer->state.gfx.vb_bound_ranges[i];
|
||||
dirty = &cmd_buffer->state.gfx.vb_dirty_ranges[i];
|
||||
|
||||
if (bound->end > bound->start) {
|
||||
dirty->start = MIN2(dirty->start, bound->start);
|
||||
dirty->end = MAX2(dirty->end, bound->end);
|
||||
}
|
||||
anv_merge_vb_cache_range(dirty, bound);
|
||||
}
|
||||
}
|
||||
#endif /* GFX_VER == 9 */
|
||||
|
||||
Reference in New Issue
Block a user