#ifndef _VKTMULTIVIEWRENDERPASSUTIL_HPP
#define _VKTMULTIVIEWRENDERPASSUTIL_HPP
/*------------------------------------------------------------------------
 * 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 "tcuDefs.hpp"
#include "vkRef.hpp"
#include "vkDefs.hpp"
#include "vkTypeUtil.hpp"

namespace vkt
{
namespace MultiView
{
using namespace vk;

class AttachmentDescription1 : public vk::VkAttachmentDescription
{
public:
	AttachmentDescription1	(const void*					pNext,
							 VkAttachmentDescriptionFlags	flags,
							 VkFormat						format,
							 VkSampleCountFlagBits			samples,
							 VkAttachmentLoadOp				loadOp,
							 VkAttachmentStoreOp			storeOp,
							 VkAttachmentLoadOp				stencilLoadOp,
							 VkAttachmentStoreOp			stencilStoreOp,
							 VkImageLayout					initialLayout,
							 VkImageLayout					finalLayout);
};

class AttachmentDescription2 : public vk::VkAttachmentDescription2KHR
{
public:
	AttachmentDescription2	(const void*					pNext,
							 VkAttachmentDescriptionFlags	flags,
							 VkFormat						format,
							 VkSampleCountFlagBits			samples,
							 VkAttachmentLoadOp				loadOp,
							 VkAttachmentStoreOp			storeOp,
							 VkAttachmentLoadOp				stencilLoadOp,
							 VkAttachmentStoreOp			stencilStoreOp,
							 VkImageLayout					initialLayout,
							 VkImageLayout					finalLayout);
};

class AttachmentReference1 : public vk::VkAttachmentReference
{
public:
	AttachmentReference1	(const void*		pNext,
							 deUint32			attachment,
							 VkImageLayout		layout,
							 VkImageAspectFlags	aspectMask);
};

class AttachmentReference2 : public vk::VkAttachmentReference2KHR
{
public:
	AttachmentReference2	(const void*		pNext,
							 deUint32			attachment,
							 VkImageLayout		layout,
							 VkImageAspectFlags	aspectMask);
};

class SubpassDescription1 : public vk::VkSubpassDescription
{
public:
	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);
};

class SubpassDescription2 : public vk::VkSubpassDescription2KHR
{
public:
	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);
};

class SubpassDependency1 : public vk::VkSubpassDependency
{
public:
	SubpassDependency1	(const void*			pNext,
						 deUint32				srcSubpass,
						 deUint32				dstSubpass,
						 VkPipelineStageFlags	srcStageMask,
						 VkPipelineStageFlags	dstStageMask,
						 VkAccessFlags			srcAccessMask,
						 VkAccessFlags			dstAccessMask,
						 VkDependencyFlags		dependencyFlags,
						 deInt32				viewOffset);
};

class SubpassDependency2 : public vk::VkSubpassDependency2KHR
{
public:
	SubpassDependency2	(const void*			pNext,
						 deUint32				srcSubpass,
						 deUint32				dstSubpass,
						 VkPipelineStageFlags	srcStageMask,
						 VkPipelineStageFlags	dstStageMask,
						 VkAccessFlags			srcAccessMask,
						 VkAccessFlags			dstAccessMask,
						 VkDependencyFlags		dependencyFlags,
						 deInt32				viewOffset);
};

class RenderPassCreateInfo1 : public VkRenderPassCreateInfo
{
public:
							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);

	Move<VkRenderPass>		createRenderPass		(const DeviceInterface& vk,
													 VkDevice device) const;
};

class RenderPassCreateInfo2 : public VkRenderPassCreateInfo2KHR
{
public:
							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);

	Move<VkRenderPass>		createRenderPass		(const DeviceInterface& vk,
													 VkDevice device) const;
};

class SubpassBeginInfo1
{
public:
						SubpassBeginInfo1	(const void*		pNext,
											 VkSubpassContents	contents);

	VkSubpassContents	contents;
};

class SubpassBeginInfo2 : public VkSubpassBeginInfoKHR
{
public:
						SubpassBeginInfo2	(const void*		pNext,
											 VkSubpassContents	contents);
};

class SubpassEndInfo1
{
public:
						SubpassEndInfo1	(const void*	pNext);
};

class SubpassEndInfo2 : public VkSubpassEndInfoKHR
{
public:
						SubpassEndInfo2	(const void*	pNext);
};

class RenderpassSubpass1
{
public:
	typedef SubpassBeginInfo1		SubpassBeginInfo;
	typedef SubpassEndInfo1			SubpassEndInfo;

	static void	cmdBeginRenderPass	(const DeviceInterface&			vk,
									 VkCommandBuffer				cmdBuffer,
									 const VkRenderPassBeginInfo*	pRenderPassBegin,
									 const SubpassBeginInfo*		pSubpassBeginInfo);

	static void	cmdNextSubpass		(const DeviceInterface&			vk,
									 VkCommandBuffer				cmdBuffer,
									 const SubpassBeginInfo*		pSubpassBeginInfo,
									 const SubpassEndInfo*			pSubpassEndInfo);

	static void	cmdEndRenderPass	(const DeviceInterface&			vk,
									 VkCommandBuffer				cmdBuffer,
									 const SubpassEndInfo*			pSubpassEndInfo);
};

class RenderpassSubpass2
{
public:
	typedef SubpassBeginInfo2		SubpassBeginInfo;
	typedef SubpassEndInfo2			SubpassEndInfo;

	static void	cmdBeginRenderPass	(const DeviceInterface&			vk,
									 VkCommandBuffer				cmdBuffer,
									 const VkRenderPassBeginInfo*	pRenderPassBegin,
									 const SubpassBeginInfo*		pSubpassBeginInfo);

	static void	cmdNextSubpass		(const DeviceInterface&			vk,
									 VkCommandBuffer				cmdBuffer,
									 const SubpassBeginInfo*		pSubpassBeginInfo,
									 const SubpassEndInfo*			pSubpassEndInfo);

	static void	cmdEndRenderPass	(const DeviceInterface&			vk,
									 VkCommandBuffer				cmdBuffer,
									 const SubpassEndInfo*			pSubpassEndInfo);
};

} // renderpass

} // vkt

#endif // _VKTMULTIVIEWRENDERPASSUTIL_HPP
