mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-22 19:20:22 +01:00
i965: Fix up clip min_nr_entries, preferred_nr_entries, and max_threads.
The clip thread could potentially deadlock when processing tristrips since being moved back to dual-thread mode, as the two threads could each have 4 VUEs referenced and not be able to allocate another one since SF processing wasn't able to continue (needing 5 entries before it freed 2). In constrained URB mode, similar deadlock could even have occurred with polygons (so we cut back max_threads if we can't handle it any primitive type).
This commit is contained in:
parent
5cb7ba10cc
commit
82eb7c235d
2 changed files with 16 additions and 2 deletions
|
|
@ -88,7 +88,21 @@ clip_unit_create_from_key(struct brw_context *brw,
|
|||
|
||||
clip.thread4.nr_urb_entries = key->nr_urb_entries;
|
||||
clip.thread4.urb_entry_allocation_size = key->urb_size - 1;
|
||||
clip.thread4.max_threads = 1; /* 2 threads */
|
||||
/* If we have enough clip URB entries to run two threads, do so.
|
||||
*/
|
||||
if (key->nr_urb_entries >= 10) {
|
||||
/* Half of the URB entries go to each thread, and it has to be an
|
||||
* even number.
|
||||
*/
|
||||
assert(key->nr_urb_entries % 2 == 0);
|
||||
clip.thread4.max_threads = 2 - 1;
|
||||
} else {
|
||||
assert(key->nr_urb_entries >= 5);
|
||||
clip.thread4.max_threads = 1 - 1;
|
||||
}
|
||||
|
||||
if (INTEL_DEBUG & DEBUG_SINGLE_THREAD)
|
||||
clip.thread4.max_threads = 0;
|
||||
|
||||
if (INTEL_DEBUG & DEBUG_STATS)
|
||||
clip.thread4.stats_enable = 1;
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ static const struct {
|
|||
} limits[CS+1] = {
|
||||
{ 16, 32, 1, 5 }, /* vs */
|
||||
{ 4, 8, 1, 5 }, /* gs */
|
||||
{ 6, 8, 1, 5 }, /* clp */
|
||||
{ 5, 10, 1, 5 }, /* clp */
|
||||
{ 1, 8, 1, 12 }, /* sf */
|
||||
{ 1, 4, 1, 32 } /* cs */
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue