From: Alyssa Rosenzweig Date: Fri, 19 Jul 2019 23:11:27 +0000 (-0700) Subject: panfrost: Set `initialized` in more cases X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f1dcaa0df67aa92ff236418e125adf3299bbf0fd;p=mesa.git panfrost: Set `initialized` in more cases Indirect linear writes were not being marked as initialized, causing the back blit to be dropped, breaking the listed tests. Signed-off-by: Alyssa Rosenzweig --- diff --git a/src/gallium/drivers/panfrost/ci/expected-failures.txt b/src/gallium/drivers/panfrost/ci/expected-failures.txt index 54be6f99f92..440231bfb54 100644 --- a/src/gallium/drivers/panfrost/ci/expected-failures.txt +++ b/src/gallium/drivers/panfrost/ci/expected-failures.txt @@ -237,8 +237,3 @@ dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_fragment dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_vertex dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_fragment dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_vertex -dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_alpha -dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_luminance -dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_luminance_alpha -dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgb -dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgba diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index 3f8d50cad73..e7bd4442f94 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -592,23 +592,24 @@ panfrost_transfer_unmap(struct pipe_context *pctx, struct panfrost_gtransfer *trans = pan_transfer(transfer); struct panfrost_resource *prsrc = (struct panfrost_resource *) transfer->resource; + /* Mark whatever we wrote as written */ + if (transfer->usage & PIPE_TRANSFER_WRITE) + prsrc->slices[transfer->level].initialized = true; + if (trans->map) { struct panfrost_bo *bo = prsrc->bo; if (transfer->usage & PIPE_TRANSFER_WRITE) { - unsigned level = transfer->level; - prsrc->slices[level].initialized = true; - if (prsrc->layout == PAN_AFBC) { DBG("Unimplemented: writes to AFBC\n"); } else if (prsrc->layout == PAN_TILED) { assert(transfer->box.depth == 1); panfrost_store_tiled_image( - bo->cpu + prsrc->slices[level].offset, + bo->cpu + prsrc->slices[transfer->level].offset, trans->map, &transfer->box, - prsrc->slices[level].stride, + prsrc->slices[transfer->level].stride, transfer->stride, util_format_get_blocksize(prsrc->base.format)); } @@ -638,6 +639,9 @@ panfrost_transfer_flush_region(struct pipe_context *pctx, util_range_add(&rsc->valid_buffer_range, transfer->box.x + box->x, transfer->box.x + box->x + box->width); + } else { + unsigned level = transfer->level; + rsc->slices[level].initialized = true; } }