From 975ab701d77739a9434d6d5fa7a9b0721a1ff951 Mon Sep 17 00:00:00 2001 From: Icecream95 Date: Thu, 22 Apr 2021 11:08:49 +1200 Subject: [PATCH] pan/decode: Allow frame shader DCDs to be in another BO than the FBD Fixes: 96b71a59c0a ("panfrost: Decode pre/post frame DCDs") Part-of: (cherry picked from commit 1cc9b28a768d6e88034a888dd3c91ec7e0816d83) --- .pick_status.json | 2 +- src/panfrost/lib/decode.c | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 2c77c17ef5c..24d97ec0db6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -202,7 +202,7 @@ "description": "pan/decode: Allow frame shader DCDs to be in another BO than the FBD", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "96b71a59c0ae6e3fb336608a10b1c27de11db922" }, diff --git a/src/panfrost/lib/decode.c b/src/panfrost/lib/decode.c index ca61fbd63db..a5fc745ee93 100644 --- a/src/panfrost/lib/decode.c +++ b/src/panfrost/lib/decode.c @@ -287,24 +287,28 @@ pandecode_mfbd_bfr(uint64_t gpu_va, int job_no, bool is_fragment, bool is_bifros if (is_bifrost) { pandecode_sample_locations(fb, job_no); + pan_section_unpack(fb, MULTI_TARGET_FRAMEBUFFER, BIFROST_PARAMETERS, bparams); unsigned dcd_size = MALI_DRAW_LENGTH + MALI_DRAW_PADDING_LENGTH; + struct pandecode_mapped_memory *dcdmem = + pandecode_find_mapped_gpu_mem_containing(bparams.frame_shader_dcds); + if (bparams.pre_frame_0 != MALI_PRE_POST_FRAME_SHADER_MODE_NEVER) { - const void *PANDECODE_PTR_VAR(dcd, mem, bparams.frame_shader_dcds + (0 * dcd_size)); + const void *PANDECODE_PTR_VAR(dcd, dcdmem, bparams.frame_shader_dcds + (0 * dcd_size)); pan_unpack(dcd, DRAW, draw); pandecode_log("Pre frame 0:\n"); pandecode_dcd(&draw, job_no, MALI_JOB_TYPE_FRAGMENT, "", true, gpu_id); } if (bparams.pre_frame_1 != MALI_PRE_POST_FRAME_SHADER_MODE_NEVER) { - const void *PANDECODE_PTR_VAR(dcd, mem, bparams.frame_shader_dcds + (1 * dcd_size)); + const void *PANDECODE_PTR_VAR(dcd, dcdmem, bparams.frame_shader_dcds + (1 * dcd_size)); pan_unpack(dcd, DRAW, draw); pandecode_log("Pre frame 1:\n"); pandecode_dcd(&draw, job_no, MALI_JOB_TYPE_FRAGMENT, "", true, gpu_id); } if (bparams.post_frame != MALI_PRE_POST_FRAME_SHADER_MODE_NEVER) { - const void *PANDECODE_PTR_VAR(dcd, mem, bparams.frame_shader_dcds + (2 * dcd_size)); + const void *PANDECODE_PTR_VAR(dcd, dcdmem, bparams.frame_shader_dcds + (2 * dcd_size)); pan_unpack(dcd, DRAW, draw); pandecode_log("Post frame:\n"); pandecode_dcd(&draw, job_no, MALI_JOB_TYPE_FRAGMENT, "", true, gpu_id);