lavapipe: add render pass support for multiview

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9399>
This commit is contained in:
Dave Airlie
2021-03-04 14:01:36 +10:00
committed by Marge Bot
parent 3c08eee1bd
commit cbd01045bc
2 changed files with 18 additions and 0 deletions
+16
View File
@@ -23,6 +23,8 @@
#include "lvp_private.h"
#include "vk_util.h"
static void
lvp_render_pass_compile(struct lvp_render_pass *pass)
{
@@ -152,6 +154,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateRenderPass(
struct lvp_render_pass *pass;
size_t size;
size_t attachments_offset;
VkRenderPassMultiviewCreateInfo *multiview_info = NULL;
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO);
@@ -176,6 +179,16 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateRenderPass(
pass->subpass_count = pCreateInfo->subpassCount;
pass->attachments = (struct lvp_render_pass_attachment *)((char *)pass + attachments_offset);
vk_foreach_struct(ext, pCreateInfo->pNext) {
switch(ext->sType) {
case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
multiview_info = (VkRenderPassMultiviewCreateInfo*)ext;
break;
default:
break;
}
}
for (uint32_t i = 0; i < pCreateInfo->attachmentCount; i++) {
struct lvp_render_pass_attachment *att = &pass->attachments[i];
@@ -214,6 +227,9 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateRenderPass(
subpass->attachment_count = lvp_num_subpass_attachments(desc);
subpass->attachments = p;
if (multiview_info)
subpass->view_mask = multiview_info->pViewMasks[i];
if (desc->inputAttachmentCount > 0) {
subpass->input_attachments = p;
p += desc->inputAttachmentCount;
@@ -353,6 +353,8 @@ struct lvp_subpass {
bool has_color_att;
VkSampleCountFlagBits max_sample_count;
uint32_t view_mask;
};
struct lvp_render_pass_attachment {