pvr: various multiview fixes
- Fix ds address offset for multiview. - Fix multiview depth/stencil address by restoring it after every kick. - Enable empty tile processing after first subpass for multiview. Signed-off-by: Peter Quayle <peter.quayle@imgtec.com> Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37512>
This commit is contained in:
@@ -7692,12 +7692,23 @@ void pvr_CmdNextSubpass2(VkCommandBuffer commandBuffer,
|
||||
if (next_hw_render->color_init_count > 0) {
|
||||
rp_info->enable_bg_tag = true;
|
||||
|
||||
for (uint32_t i = 0; i < next_hw_render->color_init_count; i++) {
|
||||
/* Empty tiles need to be cleared too. */
|
||||
if (next_hw_render->color_init[i].op ==
|
||||
VK_ATTACHMENT_LOAD_OP_CLEAR) {
|
||||
rp_info->process_empty_tiles = true;
|
||||
break;
|
||||
if (pass->multiview_enabled) {
|
||||
/* TODO: A more optimized fix would be to selectively enable empty
|
||||
* tile processing for renders depending on whether the render is
|
||||
* the first use of a particular view in a renderpass. This would be
|
||||
* a much larger and more invasive change but could be considered if
|
||||
* empty tile processing in multiview workloads becomes a
|
||||
* performance issue.
|
||||
*/
|
||||
rp_info->process_empty_tiles = true;
|
||||
} else {
|
||||
for (uint32_t i = 0; i < next_hw_render->color_init_count; i++) {
|
||||
/* Empty tiles need to be cleared too. */
|
||||
if (next_hw_render->color_init[i].op ==
|
||||
VK_ATTACHMENT_LOAD_OP_CLEAR) {
|
||||
rp_info->process_empty_tiles = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,7 +227,7 @@ pvr_process_graphics_cmd_for_view(struct pvr_device *device,
|
||||
VkResult result;
|
||||
|
||||
job->ds.addr =
|
||||
PVR_DEV_ADDR_OFFSET(job->ds.addr, job->ds.stride * view_index);
|
||||
PVR_DEV_ADDR_OFFSET(job->ds.addr, job->ds.layer_size * view_index);
|
||||
job->view_state.view_index = view_index;
|
||||
|
||||
result = vk_sync_create(&device->vk,
|
||||
@@ -336,12 +336,12 @@ static VkResult pvr_process_graphics_cmd(struct pvr_device *device,
|
||||
cmd_buffer,
|
||||
sub_cmd,
|
||||
view_idx);
|
||||
sub_cmd->job.ds.addr = ds_addr;
|
||||
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
}
|
||||
|
||||
sub_cmd->job.ds.addr = ds_addr;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user