turnip: Fix execution of secondary cmd bufs with nothing in primary.
We want to finish off cmd emission in the primary CS and add its entry to the IB, but regardless of whether there had been anything in the primary CS to emit, we still need a reserved CS entry for the loop below. Fixes crashes in dEQP-VK.binding_model.shader_access.secondary_cmd_buf.* and many more in dEQP-VK.renderpass* Reviewed-by: Jonathan Marek <jonathan@marek.ca> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3524> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3524>
This commit is contained in:
parent
d6d6ef2862
commit
fbd9b4ce08
|
@ -220,18 +220,14 @@ tu_cs_add_entries(struct tu_cs *cs, struct tu_cs *target)
|
||||||
assert(cs->mode == TU_CS_MODE_GROW);
|
assert(cs->mode == TU_CS_MODE_GROW);
|
||||||
assert(target->mode == TU_CS_MODE_GROW);
|
assert(target->mode == TU_CS_MODE_GROW);
|
||||||
|
|
||||||
if (!tu_cs_is_empty(cs)) {
|
if (!tu_cs_is_empty(cs))
|
||||||
tu_cs_add_entry(cs);
|
tu_cs_add_entry(cs);
|
||||||
result = tu_cs_reserve_entry(cs);
|
|
||||||
if (result != VK_SUCCESS)
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < target->entry_count; i++) {
|
for (unsigned i = 0; i < target->entry_count; i++) {
|
||||||
cs->entries[cs->entry_count++] = target->entries[i];
|
|
||||||
result = tu_cs_reserve_entry(cs);
|
result = tu_cs_reserve_entry(cs);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
return result;
|
return result;
|
||||||
|
cs->entries[cs->entry_count++] = target->entries[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
|
|
Loading…
Reference in New Issue