v3d: Avoid assertion failures when removing end-of-shader instructions.
After generating VIR, we leave c->cursor pointing at the end of the shader. If the shader had dead code at the end (for example from preamble instructions in a shader with no side effects), we would assertion fail that we were leaving the cursor pointing at freed memory. Since anything following DCE should be setting up a new cursor anyway, just clear the cursor at the start.
This commit is contained in:
@@ -101,6 +101,12 @@ vir_opt_dead_code(struct v3d_compile *c)
|
||||
bool progress = false;
|
||||
bool *used = calloc(c->num_temps, sizeof(bool));
|
||||
|
||||
/* Defuse the "are you removing the cursor?" assertion in the core.
|
||||
* You'll need to set up a new cursor for any new instructions after
|
||||
* doing DCE (which we would expect, anyway).
|
||||
*/
|
||||
c->cursor.link = NULL;
|
||||
|
||||
vir_for_each_inst_inorder(inst, c) {
|
||||
for (int i = 0; i < vir_get_nsrc(inst); i++) {
|
||||
if (inst->src[i].file == QFILE_TEMP)
|
||||
|
||||
Reference in New Issue
Block a user