1e5c31af7Sopenharmony_ci#ifndef _VKTRENDERPASSTESTSUTIL_HPP
2e5c31af7Sopenharmony_ci#define _VKTRENDERPASSTESTSUTIL_HPP
3e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------
4e5c31af7Sopenharmony_ci * Vulkan Conformance Tests
5e5c31af7Sopenharmony_ci * ------------------------
6e5c31af7Sopenharmony_ci *
7e5c31af7Sopenharmony_ci * Copyright (c) 2018 The Khronos Group Inc.
8e5c31af7Sopenharmony_ci *
9e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
10e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
11e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
12e5c31af7Sopenharmony_ci *
13e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
14e5c31af7Sopenharmony_ci *
15e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
16e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
17e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
19e5c31af7Sopenharmony_ci * limitations under the License.
20e5c31af7Sopenharmony_ci *
21e5c31af7Sopenharmony_ci *//*!
22e5c31af7Sopenharmony_ci * \file
23e5c31af7Sopenharmony_ci * \brief RenderPass test utils
24e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ci#include "tcuDefs.hpp"
27e5c31af7Sopenharmony_ci#include "vkRef.hpp"
28e5c31af7Sopenharmony_ci#include "vkDefs.hpp"
29e5c31af7Sopenharmony_ci#include "vkMemUtil.hpp"
30e5c31af7Sopenharmony_ci#include "vkTypeUtil.hpp"
31e5c31af7Sopenharmony_ci#include "vkTypeUtil.hpp"
32e5c31af7Sopenharmony_ci#include "vktRenderPassGroupParams.hpp"
33e5c31af7Sopenharmony_ci
34e5c31af7Sopenharmony_ci#include <vector>
35e5c31af7Sopenharmony_ci
36e5c31af7Sopenharmony_cinamespace vkt
37e5c31af7Sopenharmony_ci{
38e5c31af7Sopenharmony_cinamespace renderpass
39e5c31af7Sopenharmony_ci{
40e5c31af7Sopenharmony_ci
41e5c31af7Sopenharmony_ciusing namespace vk;
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_ciclass AttachmentDescription1 : public vk::VkAttachmentDescription
44e5c31af7Sopenharmony_ci{
45e5c31af7Sopenharmony_cipublic:
46e5c31af7Sopenharmony_ci	AttachmentDescription1	(const void*					pNext,
47e5c31af7Sopenharmony_ci							 VkAttachmentDescriptionFlags	flags,
48e5c31af7Sopenharmony_ci							 VkFormat						format,
49e5c31af7Sopenharmony_ci							 VkSampleCountFlagBits			samples,
50e5c31af7Sopenharmony_ci							 VkAttachmentLoadOp				loadOp,
51e5c31af7Sopenharmony_ci							 VkAttachmentStoreOp			storeOp,
52e5c31af7Sopenharmony_ci							 VkAttachmentLoadOp				stencilLoadOp,
53e5c31af7Sopenharmony_ci							 VkAttachmentStoreOp			stencilStoreOp,
54e5c31af7Sopenharmony_ci							 VkImageLayout					initialLayout,
55e5c31af7Sopenharmony_ci							 VkImageLayout					finalLayout);
56e5c31af7Sopenharmony_ci};
57e5c31af7Sopenharmony_ci
58e5c31af7Sopenharmony_ciclass AttachmentDescription2 : public vk::VkAttachmentDescription2
59e5c31af7Sopenharmony_ci{
60e5c31af7Sopenharmony_cipublic:
61e5c31af7Sopenharmony_ci	AttachmentDescription2	(const void*					pNext,
62e5c31af7Sopenharmony_ci							 VkAttachmentDescriptionFlags	flags,
63e5c31af7Sopenharmony_ci							 VkFormat						format,
64e5c31af7Sopenharmony_ci							 VkSampleCountFlagBits			samples,
65e5c31af7Sopenharmony_ci							 VkAttachmentLoadOp				loadOp,
66e5c31af7Sopenharmony_ci							 VkAttachmentStoreOp			storeOp,
67e5c31af7Sopenharmony_ci							 VkAttachmentLoadOp				stencilLoadOp,
68e5c31af7Sopenharmony_ci							 VkAttachmentStoreOp			stencilStoreOp,
69e5c31af7Sopenharmony_ci							 VkImageLayout					initialLayout,
70e5c31af7Sopenharmony_ci							 VkImageLayout					finalLayout);
71e5c31af7Sopenharmony_ci};
72e5c31af7Sopenharmony_ci
73e5c31af7Sopenharmony_ciclass AttachmentReference1 : public vk::VkAttachmentReference
74e5c31af7Sopenharmony_ci{
75e5c31af7Sopenharmony_cipublic:
76e5c31af7Sopenharmony_ci	AttachmentReference1	(const void*		pNext,
77e5c31af7Sopenharmony_ci							 deUint32			attachment,
78e5c31af7Sopenharmony_ci							 VkImageLayout		layout,
79e5c31af7Sopenharmony_ci							 VkImageAspectFlags	aspectMask);
80e5c31af7Sopenharmony_ci};
81e5c31af7Sopenharmony_ci
82e5c31af7Sopenharmony_ciclass AttachmentReference2 : public vk::VkAttachmentReference2
83e5c31af7Sopenharmony_ci{
84e5c31af7Sopenharmony_cipublic:
85e5c31af7Sopenharmony_ci	AttachmentReference2	(const void*		pNext,
86e5c31af7Sopenharmony_ci							 deUint32			attachment,
87e5c31af7Sopenharmony_ci							 VkImageLayout		layout,
88e5c31af7Sopenharmony_ci							 VkImageAspectFlags	aspectMask);
89e5c31af7Sopenharmony_ci};
90e5c31af7Sopenharmony_ci
91e5c31af7Sopenharmony_ciclass SubpassDescription1 : public vk::VkSubpassDescription
92e5c31af7Sopenharmony_ci{
93e5c31af7Sopenharmony_cipublic:
94e5c31af7Sopenharmony_ci	SubpassDescription1	(const void*						pNext,
95e5c31af7Sopenharmony_ci						 VkSubpassDescriptionFlags			flags,
96e5c31af7Sopenharmony_ci						 VkPipelineBindPoint				pipelineBindPoint,
97e5c31af7Sopenharmony_ci						 deUint32							viewMask,
98e5c31af7Sopenharmony_ci						 deUint32							inputAttachmentCount,
99e5c31af7Sopenharmony_ci						 const VkAttachmentReference*		pInputAttachments,
100e5c31af7Sopenharmony_ci						 deUint32							colorAttachmentCount,
101e5c31af7Sopenharmony_ci						 const VkAttachmentReference*		pColorAttachments,
102e5c31af7Sopenharmony_ci						 const VkAttachmentReference*		pResolveAttachments,
103e5c31af7Sopenharmony_ci						 const VkAttachmentReference*		pDepthStencilAttachment,
104e5c31af7Sopenharmony_ci						 deUint32							preserveAttachmentCount,
105e5c31af7Sopenharmony_ci						 const deUint32*					pPreserveAttachments);
106e5c31af7Sopenharmony_ci};
107e5c31af7Sopenharmony_ci
108e5c31af7Sopenharmony_ciclass SubpassDescription2 : public vk::VkSubpassDescription2
109e5c31af7Sopenharmony_ci{
110e5c31af7Sopenharmony_cipublic:
111e5c31af7Sopenharmony_ci	SubpassDescription2	(const void*						pNext,
112e5c31af7Sopenharmony_ci						 VkSubpassDescriptionFlags			flags,
113e5c31af7Sopenharmony_ci						 VkPipelineBindPoint				pipelineBindPoint,
114e5c31af7Sopenharmony_ci						 deUint32							viewMask,
115e5c31af7Sopenharmony_ci						 deUint32							inputAttachmentCount,
116e5c31af7Sopenharmony_ci						 const VkAttachmentReference2*		pInputAttachments,
117e5c31af7Sopenharmony_ci						 deUint32							colorAttachmentCount,
118e5c31af7Sopenharmony_ci						 const VkAttachmentReference2*		pColorAttachments,
119e5c31af7Sopenharmony_ci						 const VkAttachmentReference2*		pResolveAttachments,
120e5c31af7Sopenharmony_ci						 const VkAttachmentReference2*		pDepthStencilAttachment,
121e5c31af7Sopenharmony_ci						 deUint32							preserveAttachmentCount,
122e5c31af7Sopenharmony_ci						 const deUint32*					pPreserveAttachments);
123e5c31af7Sopenharmony_ci};
124e5c31af7Sopenharmony_ci
125e5c31af7Sopenharmony_ciclass SubpassDependency1 : public vk::VkSubpassDependency
126e5c31af7Sopenharmony_ci{
127e5c31af7Sopenharmony_cipublic:
128e5c31af7Sopenharmony_ci	SubpassDependency1	(const void*			pNext,
129e5c31af7Sopenharmony_ci						 deUint32				srcSubpass,
130e5c31af7Sopenharmony_ci						 deUint32				dstSubpass,
131e5c31af7Sopenharmony_ci						 VkPipelineStageFlags	srcStageMask,
132e5c31af7Sopenharmony_ci						 VkPipelineStageFlags	dstStageMask,
133e5c31af7Sopenharmony_ci						 VkAccessFlags			srcAccessMask,
134e5c31af7Sopenharmony_ci						 VkAccessFlags			dstAccessMask,
135e5c31af7Sopenharmony_ci						 VkDependencyFlags		dependencyFlags,
136e5c31af7Sopenharmony_ci						 deInt32				viewOffset);
137e5c31af7Sopenharmony_ci};
138e5c31af7Sopenharmony_ci
139e5c31af7Sopenharmony_ciclass SubpassDependency2 : public vk::VkSubpassDependency2
140e5c31af7Sopenharmony_ci{
141e5c31af7Sopenharmony_cipublic:
142e5c31af7Sopenharmony_ci	SubpassDependency2	(const void*			pNext,
143e5c31af7Sopenharmony_ci						 deUint32				srcSubpass,
144e5c31af7Sopenharmony_ci						 deUint32				dstSubpass,
145e5c31af7Sopenharmony_ci						 VkPipelineStageFlags	srcStageMask,
146e5c31af7Sopenharmony_ci						 VkPipelineStageFlags	dstStageMask,
147e5c31af7Sopenharmony_ci						 VkAccessFlags			srcAccessMask,
148e5c31af7Sopenharmony_ci						 VkAccessFlags			dstAccessMask,
149e5c31af7Sopenharmony_ci						 VkDependencyFlags		dependencyFlags,
150e5c31af7Sopenharmony_ci						 deInt32				viewOffset);
151e5c31af7Sopenharmony_ci};
152e5c31af7Sopenharmony_ci
153e5c31af7Sopenharmony_ciclass RenderPassCreateInfo1 : public VkRenderPassCreateInfo
154e5c31af7Sopenharmony_ci{
155e5c31af7Sopenharmony_cipublic:
156e5c31af7Sopenharmony_ci							RenderPassCreateInfo1	(const void*						pNext,
157e5c31af7Sopenharmony_ci													 VkRenderPassCreateFlags			flags,
158e5c31af7Sopenharmony_ci													 deUint32							attachmentCount,
159e5c31af7Sopenharmony_ci													 const VkAttachmentDescription*		pAttachments,
160e5c31af7Sopenharmony_ci													 deUint32							subpassCount,
161e5c31af7Sopenharmony_ci													 const VkSubpassDescription*		pSubpasses,
162e5c31af7Sopenharmony_ci													 deUint32							dependencyCount,
163e5c31af7Sopenharmony_ci													 const VkSubpassDependency*			pDependencies,
164e5c31af7Sopenharmony_ci													 deUint32							correlatedViewMaskCount,
165e5c31af7Sopenharmony_ci													 const deUint32*					pCorrelatedViewMasks);
166e5c31af7Sopenharmony_ci
167e5c31af7Sopenharmony_ci	Move<VkRenderPass>		createRenderPass		(const DeviceInterface& vk,
168e5c31af7Sopenharmony_ci													 VkDevice device) const;
169e5c31af7Sopenharmony_ci};
170e5c31af7Sopenharmony_ci
171e5c31af7Sopenharmony_ciclass RenderPassCreateInfo2 : public VkRenderPassCreateInfo2
172e5c31af7Sopenharmony_ci{
173e5c31af7Sopenharmony_cipublic:
174e5c31af7Sopenharmony_ci							RenderPassCreateInfo2	(const void*						pNext,
175e5c31af7Sopenharmony_ci													 VkRenderPassCreateFlags			flags,
176e5c31af7Sopenharmony_ci													 deUint32							attachmentCount,
177e5c31af7Sopenharmony_ci													 const VkAttachmentDescription2*	pAttachments,
178e5c31af7Sopenharmony_ci													 deUint32							subpassCount,
179e5c31af7Sopenharmony_ci													 const VkSubpassDescription2*		pSubpasses,
180e5c31af7Sopenharmony_ci													 deUint32							dependencyCount,
181e5c31af7Sopenharmony_ci													 const VkSubpassDependency2*		pDependencies,
182e5c31af7Sopenharmony_ci													 deUint32							correlatedViewMaskCount,
183e5c31af7Sopenharmony_ci													 const deUint32*					pCorrelatedViewMasks);
184e5c31af7Sopenharmony_ci
185e5c31af7Sopenharmony_ci	Move<VkRenderPass>		createRenderPass		(const DeviceInterface& vk,
186e5c31af7Sopenharmony_ci													 VkDevice device) const;
187e5c31af7Sopenharmony_ci};
188e5c31af7Sopenharmony_ci
189e5c31af7Sopenharmony_ciclass SubpassBeginInfo1
190e5c31af7Sopenharmony_ci{
191e5c31af7Sopenharmony_cipublic:
192e5c31af7Sopenharmony_ci						SubpassBeginInfo1	(const void*		pNext,
193e5c31af7Sopenharmony_ci											 VkSubpassContents	contents);
194e5c31af7Sopenharmony_ci
195e5c31af7Sopenharmony_ci	VkSubpassContents	contents;
196e5c31af7Sopenharmony_ci};
197e5c31af7Sopenharmony_ci
198e5c31af7Sopenharmony_ciclass SubpassBeginInfo2 : public VkSubpassBeginInfo
199e5c31af7Sopenharmony_ci{
200e5c31af7Sopenharmony_cipublic:
201e5c31af7Sopenharmony_ci						SubpassBeginInfo2	(const void*		pNext,
202e5c31af7Sopenharmony_ci											 VkSubpassContents	contents);
203e5c31af7Sopenharmony_ci};
204e5c31af7Sopenharmony_ci
205e5c31af7Sopenharmony_ciclass SubpassEndInfo1
206e5c31af7Sopenharmony_ci{
207e5c31af7Sopenharmony_cipublic:
208e5c31af7Sopenharmony_ci						SubpassEndInfo1	(const void*	pNext);
209e5c31af7Sopenharmony_ci};
210e5c31af7Sopenharmony_ci
211e5c31af7Sopenharmony_ciclass SubpassEndInfo2 : public VkSubpassEndInfo
212e5c31af7Sopenharmony_ci{
213e5c31af7Sopenharmony_cipublic:
214e5c31af7Sopenharmony_ci						SubpassEndInfo2	(const void*	pNext);
215e5c31af7Sopenharmony_ci};
216e5c31af7Sopenharmony_ci
217e5c31af7Sopenharmony_ciclass RenderpassSubpass1
218e5c31af7Sopenharmony_ci{
219e5c31af7Sopenharmony_cipublic:
220e5c31af7Sopenharmony_ci	typedef SubpassBeginInfo1		SubpassBeginInfo;
221e5c31af7Sopenharmony_ci	typedef SubpassEndInfo1			SubpassEndInfo;
222e5c31af7Sopenharmony_ci
223e5c31af7Sopenharmony_ci	static void	cmdBeginRenderPass	(const DeviceInterface&			vk,
224e5c31af7Sopenharmony_ci									 VkCommandBuffer				cmdBuffer,
225e5c31af7Sopenharmony_ci									 const VkRenderPassBeginInfo*	pRenderPassBegin,
226e5c31af7Sopenharmony_ci									 const SubpassBeginInfo*		pSubpassBeginInfo);
227e5c31af7Sopenharmony_ci
228e5c31af7Sopenharmony_ci	static void	cmdNextSubpass		(const DeviceInterface&			vk,
229e5c31af7Sopenharmony_ci									 VkCommandBuffer				cmdBuffer,
230e5c31af7Sopenharmony_ci									 const SubpassBeginInfo*		pSubpassBeginInfo,
231e5c31af7Sopenharmony_ci									 const SubpassEndInfo*			pSubpassEndInfo);
232e5c31af7Sopenharmony_ci
233e5c31af7Sopenharmony_ci	static void	cmdEndRenderPass	(const DeviceInterface&			vk,
234e5c31af7Sopenharmony_ci									 VkCommandBuffer				cmdBuffer,
235e5c31af7Sopenharmony_ci									 const SubpassEndInfo*			pSubpassEndInfo);
236e5c31af7Sopenharmony_ci};
237e5c31af7Sopenharmony_ci
238e5c31af7Sopenharmony_ciclass RenderpassSubpass2
239e5c31af7Sopenharmony_ci{
240e5c31af7Sopenharmony_cipublic:
241e5c31af7Sopenharmony_ci	typedef SubpassBeginInfo2		SubpassBeginInfo;
242e5c31af7Sopenharmony_ci	typedef SubpassEndInfo2			SubpassEndInfo;
243e5c31af7Sopenharmony_ci
244e5c31af7Sopenharmony_ci	static void	cmdBeginRenderPass	(const DeviceInterface&			vk,
245e5c31af7Sopenharmony_ci									 VkCommandBuffer				cmdBuffer,
246e5c31af7Sopenharmony_ci									 const VkRenderPassBeginInfo*	pRenderPassBegin,
247e5c31af7Sopenharmony_ci									 const SubpassBeginInfo*		pSubpassBeginInfo);
248e5c31af7Sopenharmony_ci
249e5c31af7Sopenharmony_ci	static void	cmdNextSubpass		(const DeviceInterface&			vk,
250e5c31af7Sopenharmony_ci									 VkCommandBuffer				cmdBuffer,
251e5c31af7Sopenharmony_ci									 const SubpassBeginInfo*		pSubpassBeginInfo,
252e5c31af7Sopenharmony_ci									 const SubpassEndInfo*			pSubpassEndInfo);
253e5c31af7Sopenharmony_ci
254e5c31af7Sopenharmony_ci	static void	cmdEndRenderPass	(const DeviceInterface&			vk,
255e5c31af7Sopenharmony_ci									 VkCommandBuffer				cmdBuffer,
256e5c31af7Sopenharmony_ci									 const SubpassEndInfo*			pSubpassEndInfo);
257e5c31af7Sopenharmony_ci};
258e5c31af7Sopenharmony_ci
259e5c31af7Sopenharmony_ci// For internal to RP/RP2 conversions
260e5c31af7Sopenharmony_ci
261e5c31af7Sopenharmony_ciclass AttachmentReference
262e5c31af7Sopenharmony_ci{
263e5c31af7Sopenharmony_cipublic:
264e5c31af7Sopenharmony_ci						AttachmentReference	(deUint32			attachment,
265e5c31af7Sopenharmony_ci											 VkImageLayout		layout,
266e5c31af7Sopenharmony_ci											 VkImageAspectFlags	aspectMask = static_cast<VkImageAspectFlags>(0u));
267e5c31af7Sopenharmony_ci
268e5c31af7Sopenharmony_ci	deUint32			getAttachment		(void) const;
269e5c31af7Sopenharmony_ci	VkImageLayout		getImageLayout		(void) const;
270e5c31af7Sopenharmony_ci	VkImageAspectFlags	getAspectMask		(void) const;
271e5c31af7Sopenharmony_ci	void				setImageLayout		(VkImageLayout layout);
272e5c31af7Sopenharmony_ci
273e5c31af7Sopenharmony_ciprivate:
274e5c31af7Sopenharmony_ci	deUint32			m_attachment;
275e5c31af7Sopenharmony_ci	VkImageLayout		m_layout;
276e5c31af7Sopenharmony_ci	VkImageAspectFlags	m_aspectMask;
277e5c31af7Sopenharmony_ci};
278e5c31af7Sopenharmony_ci
279e5c31af7Sopenharmony_ciclass Subpass
280e5c31af7Sopenharmony_ci{
281e5c31af7Sopenharmony_cipublic:
282e5c31af7Sopenharmony_ci											Subpass						(VkPipelineBindPoint					pipelineBindPoint,
283e5c31af7Sopenharmony_ci																		VkSubpassDescriptionFlags				flags,
284e5c31af7Sopenharmony_ci																		const std::vector<AttachmentReference>&	inputAttachments,
285e5c31af7Sopenharmony_ci																		const std::vector<AttachmentReference>&	colorAttachments,
286e5c31af7Sopenharmony_ci																		const std::vector<AttachmentReference>&	resolveAttachments,
287e5c31af7Sopenharmony_ci																		AttachmentReference						depthStencilAttachment,
288e5c31af7Sopenharmony_ci																		const std::vector<deUint32>&			preserveAttachments,
289e5c31af7Sopenharmony_ci																		bool									omitBlendState = false);
290e5c31af7Sopenharmony_ci
291e5c31af7Sopenharmony_ci	VkPipelineBindPoint						getPipelineBindPoint		(void) const;
292e5c31af7Sopenharmony_ci	VkSubpassDescriptionFlags				getFlags					(void) const;
293e5c31af7Sopenharmony_ci	const std::vector<AttachmentReference>&	getInputAttachments			(void) const;
294e5c31af7Sopenharmony_ci	const std::vector<AttachmentReference>&	getColorAttachments			(void) const;
295e5c31af7Sopenharmony_ci	const std::vector<AttachmentReference>&	getResolveAttachments		(void) const;
296e5c31af7Sopenharmony_ci	const AttachmentReference&				getDepthStencilAttachment	(void) const;
297e5c31af7Sopenharmony_ci	const std::vector<deUint32>&			getPreserveAttachments		(void) const;
298e5c31af7Sopenharmony_ci	bool									getOmitBlendState			(void) const;
299e5c31af7Sopenharmony_ci
300e5c31af7Sopenharmony_ciprivate:
301e5c31af7Sopenharmony_ci	VkPipelineBindPoint						m_pipelineBindPoint;
302e5c31af7Sopenharmony_ci	VkSubpassDescriptionFlags				m_flags;
303e5c31af7Sopenharmony_ci
304e5c31af7Sopenharmony_ci	std::vector<AttachmentReference>		m_inputAttachments;
305e5c31af7Sopenharmony_ci	std::vector<AttachmentReference>		m_colorAttachments;
306e5c31af7Sopenharmony_ci	std::vector<AttachmentReference>		m_resolveAttachments;
307e5c31af7Sopenharmony_ci	AttachmentReference						m_depthStencilAttachment;
308e5c31af7Sopenharmony_ci
309e5c31af7Sopenharmony_ci	std::vector<deUint32>					m_preserveAttachments;
310e5c31af7Sopenharmony_ci	bool									m_omitBlendState;
311e5c31af7Sopenharmony_ci};
312e5c31af7Sopenharmony_ci
313e5c31af7Sopenharmony_ciclass SubpassDependency
314e5c31af7Sopenharmony_ci{
315e5c31af7Sopenharmony_cipublic:
316e5c31af7Sopenharmony_ci							SubpassDependency	(deUint32				srcPass,
317e5c31af7Sopenharmony_ci												 deUint32				dstPass,
318e5c31af7Sopenharmony_ci
319e5c31af7Sopenharmony_ci												 VkPipelineStageFlags	srcStageMask,
320e5c31af7Sopenharmony_ci												 VkPipelineStageFlags	dstStageMask,
321e5c31af7Sopenharmony_ci
322e5c31af7Sopenharmony_ci												 VkAccessFlags			srcAccessMask,
323e5c31af7Sopenharmony_ci												 VkAccessFlags			dstAccessMask,
324e5c31af7Sopenharmony_ci
325e5c31af7Sopenharmony_ci												 VkDependencyFlags		flags);
326e5c31af7Sopenharmony_ci
327e5c31af7Sopenharmony_ci	deUint32				getSrcPass			(void) const;
328e5c31af7Sopenharmony_ci	deUint32				getDstPass			(void) const;
329e5c31af7Sopenharmony_ci
330e5c31af7Sopenharmony_ci	VkPipelineStageFlags	getSrcStageMask		(void) const;
331e5c31af7Sopenharmony_ci	VkPipelineStageFlags	getDstStageMask		(void) const;
332e5c31af7Sopenharmony_ci
333e5c31af7Sopenharmony_ci	VkAccessFlags			getSrcAccessMask	(void) const;
334e5c31af7Sopenharmony_ci	VkAccessFlags			getDstAccessMask	(void) const;
335e5c31af7Sopenharmony_ci
336e5c31af7Sopenharmony_ci	VkDependencyFlags		getFlags			(void) const;
337e5c31af7Sopenharmony_ci
338e5c31af7Sopenharmony_ciprivate:
339e5c31af7Sopenharmony_ci	deUint32				m_srcPass;
340e5c31af7Sopenharmony_ci	deUint32				m_dstPass;
341e5c31af7Sopenharmony_ci
342e5c31af7Sopenharmony_ci	VkPipelineStageFlags	m_srcStageMask;
343e5c31af7Sopenharmony_ci	VkPipelineStageFlags	m_dstStageMask;
344e5c31af7Sopenharmony_ci
345e5c31af7Sopenharmony_ci	VkAccessFlags			m_srcAccessMask;
346e5c31af7Sopenharmony_ci	VkAccessFlags			m_dstAccessMask;
347e5c31af7Sopenharmony_ci	VkDependencyFlags		m_flags;
348e5c31af7Sopenharmony_ci};
349e5c31af7Sopenharmony_ci
350e5c31af7Sopenharmony_ciclass Attachment
351e5c31af7Sopenharmony_ci{
352e5c31af7Sopenharmony_cipublic:
353e5c31af7Sopenharmony_ci							Attachment			(VkFormat				format,
354e5c31af7Sopenharmony_ci												 VkSampleCountFlagBits	samples,
355e5c31af7Sopenharmony_ci
356e5c31af7Sopenharmony_ci												 VkAttachmentLoadOp		loadOp,
357e5c31af7Sopenharmony_ci												 VkAttachmentStoreOp	storeOp,
358e5c31af7Sopenharmony_ci
359e5c31af7Sopenharmony_ci												 VkAttachmentLoadOp		stencilLoadOp,
360e5c31af7Sopenharmony_ci												 VkAttachmentStoreOp	stencilStoreOp,
361e5c31af7Sopenharmony_ci
362e5c31af7Sopenharmony_ci												 VkImageLayout			initialLayout,
363e5c31af7Sopenharmony_ci												 VkImageLayout			finalLayout);
364e5c31af7Sopenharmony_ci
365e5c31af7Sopenharmony_ci	VkFormat				getFormat			(void) const;
366e5c31af7Sopenharmony_ci	VkSampleCountFlagBits	getSamples			(void) const;
367e5c31af7Sopenharmony_ci
368e5c31af7Sopenharmony_ci	VkAttachmentLoadOp		getLoadOp			(void) const;
369e5c31af7Sopenharmony_ci	VkAttachmentStoreOp		getStoreOp			(void) const;
370e5c31af7Sopenharmony_ci
371e5c31af7Sopenharmony_ci	VkAttachmentLoadOp		getStencilLoadOp	(void) const;
372e5c31af7Sopenharmony_ci	VkAttachmentStoreOp		getStencilStoreOp	(void) const;
373e5c31af7Sopenharmony_ci
374e5c31af7Sopenharmony_ci	VkImageLayout			getInitialLayout	(void) const;
375e5c31af7Sopenharmony_ci	VkImageLayout			getFinalLayout		(void) const;
376e5c31af7Sopenharmony_ci
377e5c31af7Sopenharmony_ciprivate:
378e5c31af7Sopenharmony_ci	VkFormat				m_format;
379e5c31af7Sopenharmony_ci	VkSampleCountFlagBits	m_samples;
380e5c31af7Sopenharmony_ci
381e5c31af7Sopenharmony_ci	VkAttachmentLoadOp		m_loadOp;
382e5c31af7Sopenharmony_ci	VkAttachmentStoreOp		m_storeOp;
383e5c31af7Sopenharmony_ci
384e5c31af7Sopenharmony_ci	VkAttachmentLoadOp		m_stencilLoadOp;
385e5c31af7Sopenharmony_ci	VkAttachmentStoreOp		m_stencilStoreOp;
386e5c31af7Sopenharmony_ci
387e5c31af7Sopenharmony_ci	VkImageLayout			m_initialLayout;
388e5c31af7Sopenharmony_ci	VkImageLayout			m_finalLayout;
389e5c31af7Sopenharmony_ci};
390e5c31af7Sopenharmony_ci
391e5c31af7Sopenharmony_ciclass RenderPass
392e5c31af7Sopenharmony_ci{
393e5c31af7Sopenharmony_cipublic:
394e5c31af7Sopenharmony_ci															RenderPass		(const std::vector<Attachment>&							attachments,
395e5c31af7Sopenharmony_ci																			 const std::vector<Subpass>&							subpasses,
396e5c31af7Sopenharmony_ci																			 const std::vector<SubpassDependency>&					dependencies,
397e5c31af7Sopenharmony_ci																			 const std::vector<VkInputAttachmentAspectReference>	inputAspects = std::vector<VkInputAttachmentAspectReference>());
398e5c31af7Sopenharmony_ci
399e5c31af7Sopenharmony_ci	const std::vector<Attachment>&							getAttachments	(void) const;
400e5c31af7Sopenharmony_ci	const std::vector<Subpass>&								getSubpasses	(void) const;
401e5c31af7Sopenharmony_ci	const std::vector<SubpassDependency>&					getDependencies	(void) const;
402e5c31af7Sopenharmony_ci	const std::vector<VkInputAttachmentAspectReference>&	getInputAspects	(void) const;
403e5c31af7Sopenharmony_ci
404e5c31af7Sopenharmony_ciprivate:
405e5c31af7Sopenharmony_ci	std::vector<Attachment>									m_attachments;
406e5c31af7Sopenharmony_ci	std::vector<Subpass>									m_subpasses;
407e5c31af7Sopenharmony_ci	std::vector<SubpassDependency>							m_dependencies;
408e5c31af7Sopenharmony_ci	std::vector<VkInputAttachmentAspectReference>			m_inputAspects;
409e5c31af7Sopenharmony_ci};
410e5c31af7Sopenharmony_ci
411e5c31af7Sopenharmony_ciMove<VkRenderPass> createRenderPass (const DeviceInterface&	vk,
412e5c31af7Sopenharmony_ci									 VkDevice				device,
413e5c31af7Sopenharmony_ci									 const RenderPass&		renderPassInfo,
414e5c31af7Sopenharmony_ci									 RenderingType			renderingType,
415e5c31af7Sopenharmony_ci									 SynchronizationType	synchronizationType = SYNCHRONIZATION_TYPE_LEGACY);
416e5c31af7Sopenharmony_ci
417e5c31af7Sopenharmony_ci} // renderpass
418e5c31af7Sopenharmony_ci
419e5c31af7Sopenharmony_ci} // vkt
420e5c31af7Sopenharmony_ci
421e5c31af7Sopenharmony_ci#endif // _VKTRENDERPASSTESTSUTIL_HPP
422