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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user