blob: a31d9cfbab4cb32752e53e59c8be0da5d0bdb87e [file] [log] [blame]
/*------------------------------------------------------------------------
* Vulkan Conformance Tests
* ------------------------
*
* Copyright (c) 2018 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief RenderPass utils
*//*--------------------------------------------------------------------*/
#include "vktMultiViewRenderPassUtil.hpp"
#include "tcuTestCase.hpp"
#include "vkRefUtil.hpp"
using namespace vk;
namespace vkt
{
namespace MultiView
{
AttachmentDescription1::AttachmentDescription1 (const void* pNext_,
VkAttachmentDescriptionFlags flags_,
VkFormat format_,
VkSampleCountFlagBits samples_,
VkAttachmentLoadOp loadOp_,
VkAttachmentStoreOp storeOp_,
VkAttachmentLoadOp stencilLoadOp_,
VkAttachmentStoreOp stencilStoreOp_,
VkImageLayout initialLayout_,
VkImageLayout finalLayout_)
{
DE_ASSERT(pNext_ == DE_NULL);
// No sType field in this struct
DE_UNREF(pNext_);
flags = flags_;
format = format_;
samples = samples_;
loadOp = loadOp_;
storeOp = storeOp_;
stencilLoadOp = stencilLoadOp_;
stencilStoreOp = stencilStoreOp_;
initialLayout = initialLayout_;
finalLayout = finalLayout_;
}
AttachmentDescription2::AttachmentDescription2 (const void* pNext_,
VkAttachmentDescriptionFlags flags_,
VkFormat format_,
VkSampleCountFlagBits samples_,
VkAttachmentLoadOp loadOp_,
VkAttachmentStoreOp storeOp_,
VkAttachmentLoadOp stencilLoadOp_,
VkAttachmentStoreOp stencilStoreOp_,
VkImageLayout initialLayout_,
VkImageLayout finalLayout_)
{
sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR;
pNext = pNext_;
flags = flags_;
format = format_;
samples = samples_;
loadOp = loadOp_;
storeOp = storeOp_;
stencilLoadOp = stencilLoadOp_;
stencilStoreOp = stencilStoreOp_;
initialLayout = initialLayout_;
finalLayout = finalLayout_;
}
AttachmentReference1::AttachmentReference1 (const void* pNext_,
deUint32 attachment_,
VkImageLayout layout_,
VkImageAspectFlags aspectMask_)
{
DE_ASSERT(pNext_ == DE_NULL);
DE_ASSERT(aspectMask_ == 0);
// No sType field in this struct
DE_UNREF (pNext_);
attachment = attachment_;
layout = layout_;
DE_UNREF (aspectMask_);
}
AttachmentReference2::AttachmentReference2 (const void* pNext_,
deUint32 attachment_,
VkImageLayout layout_,
VkImageAspectFlags aspectMask_)
{
sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR;
pNext = pNext_;
attachment = attachment_;
layout = layout_;
aspectMask = aspectMask_;
}
SubpassDescription1::SubpassDescription1 (const void* pNext_,
VkSubpassDescriptionFlags flags_,
VkPipelineBindPoint pipelineBindPoint_,
deUint32 viewMask_,
deUint32 inputAttachmentCount_,
const VkAttachmentReference* pInputAttachments_,
deUint32 colorAttachmentCount_,
const VkAttachmentReference* pColorAttachments_,
const VkAttachmentReference* pResolveAttachments_,
const VkAttachmentReference* pDepthStencilAttachment_,
deUint32 preserveAttachmentCount_,
const deUint32* pPreserveAttachments_)
{
DE_ASSERT(pNext_ == DE_NULL);
DE_ASSERT(viewMask_ == 0);
// No sType field in this struct
DE_UNREF (pNext_);
flags = flags_;
pipelineBindPoint = pipelineBindPoint_;
DE_UNREF (viewMask_);
inputAttachmentCount = inputAttachmentCount_;
pInputAttachments = pInputAttachments_;
colorAttachmentCount = colorAttachmentCount_;
pColorAttachments = pColorAttachments_;
pResolveAttachments = pResolveAttachments_;
pDepthStencilAttachment = pDepthStencilAttachment_;
preserveAttachmentCount = preserveAttachmentCount_;
pPreserveAttachments = pPreserveAttachments_;
}
SubpassDescription2::SubpassDescription2 (const void* pNext_,
VkSubpassDescriptionFlags flags_,
VkPipelineBindPoint pipelineBindPoint_,
deUint32 viewMask_,
deUint32 inputAttachmentCount_,
const VkAttachmentReference2KHR* pInputAttachments_,
deUint32 colorAttachmentCount_,
const VkAttachmentReference2KHR* pColorAttachments_,
const VkAttachmentReference2KHR* pResolveAttachments_,
const VkAttachmentReference2KHR* pDepthStencilAttachment_,
deUint32 preserveAttachmentCount_,
const deUint32* pPreserveAttachments_)
{
sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR;
pNext = pNext_;
flags = flags_;
pipelineBindPoint = pipelineBindPoint_;
viewMask = viewMask_;
inputAttachmentCount = inputAttachmentCount_;
pInputAttachments = pInputAttachments_;
colorAttachmentCount = colorAttachmentCount_;
pColorAttachments = pColorAttachments_;
pResolveAttachments = pResolveAttachments_;
pDepthStencilAttachment = pDepthStencilAttachment_;
preserveAttachmentCount = preserveAttachmentCount_;
pPreserveAttachments = pPreserveAttachments_;
}
SubpassDependency1::SubpassDependency1 (const void* pNext_,
deUint32 srcSubpass_,
deUint32 dstSubpass_,
VkPipelineStageFlags srcStageMask_,
VkPipelineStageFlags dstStageMask_,
VkAccessFlags srcAccessMask_,
VkAccessFlags dstAccessMask_,
VkDependencyFlags dependencyFlags_,
deInt32 viewOffset_)
{
DE_ASSERT(pNext_ == DE_NULL);
DE_ASSERT(viewOffset_ == 0);
// No sType field in this struct
DE_UNREF (pNext_);
srcSubpass = srcSubpass_;
dstSubpass = dstSubpass_;
srcStageMask = srcStageMask_;
dstStageMask = dstStageMask_;
srcAccessMask = srcAccessMask_;
dstAccessMask = dstAccessMask_;
dependencyFlags = dependencyFlags_;
DE_UNREF (viewOffset_);
}
SubpassDependency2::SubpassDependency2 (const void* pNext_,
deUint32 srcSubpass_,
deUint32 dstSubpass_,
VkPipelineStageFlags srcStageMask_,
VkPipelineStageFlags dstStageMask_,
VkAccessFlags srcAccessMask_,
VkAccessFlags dstAccessMask_,
VkDependencyFlags dependencyFlags_,
deInt32 viewOffset_)
{
sType = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR;
pNext = pNext_;
srcSubpass = srcSubpass_;
dstSubpass = dstSubpass_;
srcStageMask = srcStageMask_;
dstStageMask = dstStageMask_;
srcAccessMask = srcAccessMask_;
dstAccessMask = dstAccessMask_;
dependencyFlags = dependencyFlags_;
viewOffset = viewOffset_;
}
RenderPassCreateInfo1::RenderPassCreateInfo1 (const void* pNext_,
VkRenderPassCreateFlags flags_,
deUint32 attachmentCount_,
const VkAttachmentDescription* pAttachments_,
deUint32 subpassCount_,
const VkSubpassDescription* pSubpasses_,
deUint32 dependencyCount_,
const VkSubpassDependency* pDependencies_,
deUint32 correlatedViewMaskCount_,
const deUint32* pCorrelatedViewMasks_)
{
DE_ASSERT(correlatedViewMaskCount_ == 0);
DE_ASSERT(pCorrelatedViewMasks_ == DE_NULL);
sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
pNext = pNext_;
flags = flags_;
attachmentCount = attachmentCount_;
pAttachments = pAttachments_;
subpassCount = subpassCount_;
pSubpasses = pSubpasses_;
dependencyCount = dependencyCount_;
pDependencies = pDependencies_;
DE_UNREF (correlatedViewMaskCount_);
DE_UNREF (pCorrelatedViewMasks_);
}
Move<VkRenderPass> RenderPassCreateInfo1::createRenderPass (const DeviceInterface& vk, VkDevice device) const
{
return vk::createRenderPass(vk, device, this);
}
RenderPassCreateInfo2::RenderPassCreateInfo2 (const void* pNext_,
VkRenderPassCreateFlags flags_,
deUint32 attachmentCount_,
const VkAttachmentDescription2KHR* pAttachments_,
deUint32 subpassCount_,
const VkSubpassDescription2KHR* pSubpasses_,
deUint32 dependencyCount_,
const VkSubpassDependency2KHR* pDependencies_,
deUint32 correlatedViewMaskCount_,
const deUint32* pCorrelatedViewMasks_)
{
sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR;
pNext = pNext_;
flags = flags_;
attachmentCount = attachmentCount_;
pAttachments = pAttachments_;
subpassCount = subpassCount_;
pSubpasses = pSubpasses_;
dependencyCount = dependencyCount_;
pDependencies = pDependencies_;
correlatedViewMaskCount = correlatedViewMaskCount_;
pCorrelatedViewMasks = pCorrelatedViewMasks_;
}
Move<VkRenderPass> RenderPassCreateInfo2::createRenderPass (const DeviceInterface& vk, VkDevice device) const
{
return vk::createRenderPass2KHR(vk, device, this);
}
SubpassBeginInfo1::SubpassBeginInfo1 (const void* pNext_,
VkSubpassContents contents_)
: contents (contents_)
{
DE_ASSERT(pNext_ == DE_NULL);
DE_UNREF(pNext_);
}
SubpassBeginInfo2::SubpassBeginInfo2 (const void* pNext_,
VkSubpassContents contents_)
{
sType = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR;
pNext = pNext_;
contents = contents_;
}
SubpassEndInfo1::SubpassEndInfo1 (const void* pNext_)
{
DE_ASSERT(pNext_ == DE_NULL);
DE_UNREF(pNext_);
}
SubpassEndInfo2::SubpassEndInfo2 (const void* pNext_)
{
sType = VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR;
pNext = pNext_;
}
void RenderpassSubpass1::cmdBeginRenderPass (const DeviceInterface& vk,
VkCommandBuffer cmdBuffer,
const VkRenderPassBeginInfo* pRenderPassBegin,
const SubpassBeginInfo* pSubpassBeginInfo)
{
DE_ASSERT(pSubpassBeginInfo != DE_NULL);
vk.cmdBeginRenderPass(cmdBuffer, pRenderPassBegin, pSubpassBeginInfo->contents);
}
void RenderpassSubpass1::cmdNextSubpass (const DeviceInterface& vk,
VkCommandBuffer cmdBuffer,
const SubpassBeginInfo* pSubpassBeginInfo,
const SubpassEndInfo* pSubpassEndInfo)
{
DE_UNREF(pSubpassEndInfo);
DE_ASSERT(pSubpassBeginInfo != DE_NULL);
vk.cmdNextSubpass(cmdBuffer, pSubpassBeginInfo->contents);
}
void RenderpassSubpass1::cmdEndRenderPass (const DeviceInterface& vk,
VkCommandBuffer cmdBuffer,
const SubpassEndInfo* pSubpassEndInfo)
{
DE_UNREF(pSubpassEndInfo);
vk.cmdEndRenderPass(cmdBuffer);
}
void RenderpassSubpass2::cmdBeginRenderPass (const DeviceInterface& vk,
VkCommandBuffer cmdBuffer,
const VkRenderPassBeginInfo* pRenderPassBegin,
const SubpassBeginInfo* pSubpassBeginInfo)
{
vk.cmdBeginRenderPass2KHR(cmdBuffer, pRenderPassBegin, pSubpassBeginInfo);
}
void RenderpassSubpass2::cmdNextSubpass (const DeviceInterface& vk,
VkCommandBuffer cmdBuffer,
const SubpassBeginInfo* pSubpassBeginInfo,
const SubpassEndInfo* pSubpassEndInfo)
{
DE_ASSERT(pSubpassBeginInfo != DE_NULL);
DE_ASSERT(pSubpassEndInfo != DE_NULL);
vk.cmdNextSubpass2KHR(cmdBuffer, pSubpassBeginInfo, pSubpassEndInfo);
}
void RenderpassSubpass2::cmdEndRenderPass (const DeviceInterface& vk,
VkCommandBuffer cmdBuffer,
const SubpassEndInfo* pSubpassEndInfo)
{
DE_ASSERT(pSubpassEndInfo != DE_NULL);
vk.cmdEndRenderPass2KHR(cmdBuffer, pSubpassEndInfo);
}
} // renderpass
} // vkt