v3d: Track write reference to the separate stencil buffer.
Otherwise, a blit from separate stencil may fail to flush the job that initialized it, or new drawing could fail to flush a blit reading from stencil. Fixes: dEQP-GLES3.functional.fbo.blit.depth_stencil.depth32f_stencil8_basic dEQP-GLES3.functional.fbo.blit.depth_stencil.depth32f_stencil8_scale dEQP-GLES3.functional.fbo.blit.depth_stencil.depth32f_stencil8_stencil_only dEQP-GLES3.functional.fbo.msaa.2_samples.depth32f_stencil8 dEQP-GLES3.functional.fbo.msaa.4_samples.depth32f_stencil8
This commit is contained in:
@@ -73,6 +73,11 @@ v3d_job_free(struct v3d_context *v3d, struct v3d_job *job)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (job->zsbuf) {
|
if (job->zsbuf) {
|
||||||
|
struct v3d_resource *rsc = v3d_resource(job->zsbuf->texture);
|
||||||
|
if (rsc->separate_stencil)
|
||||||
|
remove_from_ht(v3d->write_jobs,
|
||||||
|
&rsc->separate_stencil->base);
|
||||||
|
|
||||||
remove_from_ht(v3d->write_jobs, job->zsbuf->texture);
|
remove_from_ht(v3d->write_jobs, job->zsbuf->texture);
|
||||||
pipe_surface_reference(&job->zsbuf, NULL);
|
pipe_surface_reference(&job->zsbuf, NULL);
|
||||||
}
|
}
|
||||||
@@ -274,9 +279,19 @@ v3d_get_job(struct v3d_context *v3d,
|
|||||||
_mesa_hash_table_insert(v3d->write_jobs,
|
_mesa_hash_table_insert(v3d->write_jobs,
|
||||||
cbufs[i]->texture, job);
|
cbufs[i]->texture, job);
|
||||||
}
|
}
|
||||||
if (zsbuf)
|
if (zsbuf) {
|
||||||
_mesa_hash_table_insert(v3d->write_jobs, zsbuf->texture, job);
|
_mesa_hash_table_insert(v3d->write_jobs, zsbuf->texture, job);
|
||||||
|
|
||||||
|
struct v3d_resource *rsc = v3d_resource(zsbuf->texture);
|
||||||
|
if (rsc->separate_stencil) {
|
||||||
|
v3d_flush_jobs_reading_resource(v3d,
|
||||||
|
&rsc->separate_stencil->base);
|
||||||
|
_mesa_hash_table_insert(v3d->write_jobs,
|
||||||
|
&rsc->separate_stencil->base,
|
||||||
|
job);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(&job->key, &local_key, sizeof(local_key));
|
memcpy(&job->key, &local_key, sizeof(local_key));
|
||||||
_mesa_hash_table_insert(v3d->jobs, &job->key, job);
|
_mesa_hash_table_insert(v3d->jobs, &job->key, job);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user