14b9229de0ea1993c94c91016ba3f955509753fb0scygan/*------------------------------------------------------------------------
24b9229de0ea1993c94c91016ba3f955509753fb0scygan * Vulkan Conformance Tests
34b9229de0ea1993c94c91016ba3f955509753fb0scygan * ------------------------
44b9229de0ea1993c94c91016ba3f955509753fb0scygan *
54b9229de0ea1993c94c91016ba3f955509753fb0scygan * Copyright (c) 2015 The Khronos Group Inc.
64b9229de0ea1993c94c91016ba3f955509753fb0scygan * Copyright (c) 2015 Intel Corporation
74b9229de0ea1993c94c91016ba3f955509753fb0scygan *
8978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License");
9978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License.
10978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at
114b9229de0ea1993c94c91016ba3f955509753fb0scygan *
12978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos *      http://www.apache.org/licenses/LICENSE-2.0
134b9229de0ea1993c94c91016ba3f955509753fb0scygan *
14978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software
15978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS,
16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and
18978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License.
194b9229de0ea1993c94c91016ba3f955509753fb0scygan *
204b9229de0ea1993c94c91016ba3f955509753fb0scygan *//*!
214b9229de0ea1993c94c91016ba3f955509753fb0scygan * \file
224b9229de0ea1993c94c91016ba3f955509753fb0scygan * \brief CreateInfo utilities
234b9229de0ea1993c94c91016ba3f955509753fb0scygan *//*--------------------------------------------------------------------*/
244b9229de0ea1993c94c91016ba3f955509753fb0scygan
254b9229de0ea1993c94c91016ba3f955509753fb0scygan#include "vktDynamicStateCreateInfoUtil.hpp"
264b9229de0ea1993c94c91016ba3f955509753fb0scygan
274b9229de0ea1993c94c91016ba3f955509753fb0scygan#include "vkImageUtil.hpp"
284b9229de0ea1993c94c91016ba3f955509753fb0scygan
294b9229de0ea1993c94c91016ba3f955509753fb0scygannamespace vkt
304b9229de0ea1993c94c91016ba3f955509753fb0scygan{
314b9229de0ea1993c94c91016ba3f955509753fb0scygannamespace DynamicState
324b9229de0ea1993c94c91016ba3f955509753fb0scygan{
334b9229de0ea1993c94c91016ba3f955509753fb0scygan
346a2834ac40395173796b6e8d2a8e6c120d86ee74scyganImageSubresourceRange::ImageSubresourceRange (vk::VkImageAspectFlags	_aspectMask,
356a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  deUint32					_baseMipLevel,
366a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  deUint32					_levelCount,
376a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  deUint32					_baseArrayLayer,
386a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  deUint32					_layerCount)
394b9229de0ea1993c94c91016ba3f955509753fb0scygan{
404b9229de0ea1993c94c91016ba3f955509753fb0scygan	aspectMask		= _aspectMask;
414b9229de0ea1993c94c91016ba3f955509753fb0scygan	baseMipLevel	= _baseMipLevel;
426a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	levelCount		= _levelCount;
434b9229de0ea1993c94c91016ba3f955509753fb0scygan	baseArrayLayer	= _baseArrayLayer;
446a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	layerCount		= _layerCount;
454b9229de0ea1993c94c91016ba3f955509753fb0scygan}
464b9229de0ea1993c94c91016ba3f955509753fb0scygan
476a2834ac40395173796b6e8d2a8e6c120d86ee74scyganComponentMapping::ComponentMapping (vk::VkComponentSwizzle _r,
48271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim									vk::VkComponentSwizzle _g,
49271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim									vk::VkComponentSwizzle _b,
50271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim									vk::VkComponentSwizzle _a)
514b9229de0ea1993c94c91016ba3f955509753fb0scygan{
524b9229de0ea1993c94c91016ba3f955509753fb0scygan	r = _r;
534b9229de0ea1993c94c91016ba3f955509753fb0scygan	g = _g;
544b9229de0ea1993c94c91016ba3f955509753fb0scygan	b = _b;
554b9229de0ea1993c94c91016ba3f955509753fb0scygan	a = _a;
564b9229de0ea1993c94c91016ba3f955509753fb0scygan}
574b9229de0ea1993c94c91016ba3f955509753fb0scygan
586a2834ac40395173796b6e8d2a8e6c120d86ee74scyganImageViewCreateInfo::ImageViewCreateInfo (vk::VkImage							_image,
596a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  vk::VkImageViewType					_viewType,
606a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  vk::VkFormat							_format,
616a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  const vk::VkImageSubresourceRange&	_subresourceRange,
626a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  const vk::VkComponentMapping&			_components,
636a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  vk::VkImageViewCreateFlags			_flags)
644b9229de0ea1993c94c91016ba3f955509753fb0scygan{
654b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
664b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
676a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags				= 0u;
684b9229de0ea1993c94c91016ba3f955509753fb0scygan	image				= _image;
694b9229de0ea1993c94c91016ba3f955509753fb0scygan	viewType			= _viewType;
704b9229de0ea1993c94c91016ba3f955509753fb0scygan	format				= _format;
716a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	components.r		= _components.r;
726a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	components.g		= _components.g;
736a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	components.b		= _components.b;
746a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	components.a		= _components.a;
754b9229de0ea1993c94c91016ba3f955509753fb0scygan	subresourceRange	= _subresourceRange;
764b9229de0ea1993c94c91016ba3f955509753fb0scygan	flags				= _flags;
774b9229de0ea1993c94c91016ba3f955509753fb0scygan}
784b9229de0ea1993c94c91016ba3f955509753fb0scygan
796a2834ac40395173796b6e8d2a8e6c120d86ee74scyganImageViewCreateInfo::ImageViewCreateInfo (vk::VkImage					_image,
806a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  vk::VkImageViewType			_viewType,
816a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  vk::VkFormat					_format,
826a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  const vk::VkComponentMapping&	_components,
836a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  vk::VkImageViewCreateFlags	_flags)
844b9229de0ea1993c94c91016ba3f955509753fb0scygan{
854b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
864b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
876a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags			= 0u;
886a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	image			= _image;
896a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	viewType		= _viewType;
906a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	format			= _format;
916a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	components.r	= _components.r;
926a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	components.g	= _components.g;
936a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	components.b	= _components.b;
946a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	components.a	= _components.a;
954b9229de0ea1993c94c91016ba3f955509753fb0scygan
964b9229de0ea1993c94c91016ba3f955509753fb0scygan	vk::VkImageAspectFlags aspectFlags;
974b9229de0ea1993c94c91016ba3f955509753fb0scygan	const tcu::TextureFormat tcuFormat = vk::mapVkFormat(_format);
984b9229de0ea1993c94c91016ba3f955509753fb0scygan
994b9229de0ea1993c94c91016ba3f955509753fb0scygan	switch (tcuFormat.order)
1004b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
1014b9229de0ea1993c94c91016ba3f955509753fb0scygan		case tcu::TextureFormat::D:
1024b9229de0ea1993c94c91016ba3f955509753fb0scygan			aspectFlags = vk::VK_IMAGE_ASPECT_DEPTH_BIT;
1034b9229de0ea1993c94c91016ba3f955509753fb0scygan			break;
1044b9229de0ea1993c94c91016ba3f955509753fb0scygan		case tcu::TextureFormat::S:
1054b9229de0ea1993c94c91016ba3f955509753fb0scygan			aspectFlags = vk::VK_IMAGE_ASPECT_STENCIL_BIT;
1064b9229de0ea1993c94c91016ba3f955509753fb0scygan			break;
1074b9229de0ea1993c94c91016ba3f955509753fb0scygan		case tcu::TextureFormat::DS:
1084b9229de0ea1993c94c91016ba3f955509753fb0scygan			aspectFlags = vk::VK_IMAGE_ASPECT_STENCIL_BIT | vk::VK_IMAGE_ASPECT_DEPTH_BIT;
1094b9229de0ea1993c94c91016ba3f955509753fb0scygan			break;
1104b9229de0ea1993c94c91016ba3f955509753fb0scygan		default:
1116a2834ac40395173796b6e8d2a8e6c120d86ee74scygan			aspectFlags = vk::VK_IMAGE_ASPECT_COLOR_BIT;
1126a2834ac40395173796b6e8d2a8e6c120d86ee74scygan			break;
1134b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
1144b9229de0ea1993c94c91016ba3f955509753fb0scygan
1154b9229de0ea1993c94c91016ba3f955509753fb0scygan	subresourceRange = ImageSubresourceRange(aspectFlags);;
1164b9229de0ea1993c94c91016ba3f955509753fb0scygan	flags = _flags;
1174b9229de0ea1993c94c91016ba3f955509753fb0scygan}
1184b9229de0ea1993c94c91016ba3f955509753fb0scygan
119271724cff305eb9f013d5587ef3f213ed7c9e28bDae KimBufferViewCreateInfo::BufferViewCreateInfo (vk::VkBuffer		_buffer,
1204b9229de0ea1993c94c91016ba3f955509753fb0scygan											vk::VkFormat		_format,
121271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim											vk::VkDeviceSize	_offset,
122271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim											vk::VkDeviceSize	_range)
1234b9229de0ea1993c94c91016ba3f955509753fb0scygan{
1244b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
1254b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
1264b9229de0ea1993c94c91016ba3f955509753fb0scygan
127271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags	= 0u;
1284b9229de0ea1993c94c91016ba3f955509753fb0scygan	buffer	= _buffer;
1294b9229de0ea1993c94c91016ba3f955509753fb0scygan	format	= _format;
1304b9229de0ea1993c94c91016ba3f955509753fb0scygan	offset	= _offset;
1314b9229de0ea1993c94c91016ba3f955509753fb0scygan	range	= _range;
1324b9229de0ea1993c94c91016ba3f955509753fb0scygan}
1334b9229de0ea1993c94c91016ba3f955509753fb0scygan
1346a2834ac40395173796b6e8d2a8e6c120d86ee74scyganBufferCreateInfo::BufferCreateInfo (vk::VkDeviceSize		_size,
1356a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									vk::VkBufferUsageFlags	_usage,
1366a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									vk::VkSharingMode		_sharingMode,
1376a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									deUint32				_queueFamilyIndexCount,
1386a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									const deUint32*			_pQueueFamilyIndices,
1396a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									vk::VkBufferCreateFlags _flags)
140ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos{
1414b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
1424b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
1436a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	size					= _size;
1446a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	usage					= _usage;
1456a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= _flags;
1466a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sharingMode				= _sharingMode;
1476a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	queueFamilyIndexCount	= _queueFamilyIndexCount;
1484b9229de0ea1993c94c91016ba3f955509753fb0scygan
1496a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	if (_queueFamilyIndexCount)
1504b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
1514b9229de0ea1993c94c91016ba3f955509753fb0scygan		m_queueFamilyIndices = std::vector<deUint32>(
1526a2834ac40395173796b6e8d2a8e6c120d86ee74scygan			_pQueueFamilyIndices, _pQueueFamilyIndices + _queueFamilyIndexCount);
1534b9229de0ea1993c94c91016ba3f955509753fb0scygan		pQueueFamilyIndices = &m_queueFamilyIndices[0];
1546a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	}
1556a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	else
1566a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	{
1574b9229de0ea1993c94c91016ba3f955509753fb0scygan		pQueueFamilyIndices = _pQueueFamilyIndices;
158ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos	}
1594b9229de0ea1993c94c91016ba3f955509753fb0scygan}
1604b9229de0ea1993c94c91016ba3f955509753fb0scygan
1614b9229de0ea1993c94c91016ba3f955509753fb0scyganBufferCreateInfo::BufferCreateInfo (const BufferCreateInfo &other)
1624b9229de0ea1993c94c91016ba3f955509753fb0scygan{
1636a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType					= other.sType;
1646a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pNext					= other.pNext;
1656a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	size					= other.size;
1666a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	usage					= other.usage;
1676a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= other.flags;
1686a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sharingMode				= other.sharingMode;
1696a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	queueFamilyIndexCount	= other.queueFamilyIndexCount;
1704b9229de0ea1993c94c91016ba3f955509753fb0scygan
1716a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_queueFamilyIndices	= other.m_queueFamilyIndices;
1726a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	DE_ASSERT(m_queueFamilyIndices.size() == queueFamilyIndexCount);
1734b9229de0ea1993c94c91016ba3f955509753fb0scygan
1744b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (m_queueFamilyIndices.size())
1754b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
1764b9229de0ea1993c94c91016ba3f955509753fb0scygan		pQueueFamilyIndices = &m_queueFamilyIndices[0];
1774b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
1784b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
1794b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
1804b9229de0ea1993c94c91016ba3f955509753fb0scygan		pQueueFamilyIndices = DE_NULL;
1814b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
1824b9229de0ea1993c94c91016ba3f955509753fb0scygan}
1834b9229de0ea1993c94c91016ba3f955509753fb0scygan
1844b9229de0ea1993c94c91016ba3f955509753fb0scyganBufferCreateInfo & BufferCreateInfo::operator= (const BufferCreateInfo &other)
1854b9229de0ea1993c94c91016ba3f955509753fb0scygan{
1866a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType						= other.sType;
1876a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pNext						= other.pNext;
1886a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	size						= other.size;
1896a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	usage						= other.usage;
1906a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags						= other.flags;
1916a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sharingMode					= other.sharingMode;
1926a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	queueFamilyIndexCount		= other.queueFamilyIndexCount;
1934b9229de0ea1993c94c91016ba3f955509753fb0scygan
1946a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_queueFamilyIndices		= other.m_queueFamilyIndices;
1954b9229de0ea1993c94c91016ba3f955509753fb0scygan
1966a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	DE_ASSERT(m_queueFamilyIndices.size() == queueFamilyIndexCount);
1974b9229de0ea1993c94c91016ba3f955509753fb0scygan
1984b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (m_queueFamilyIndices.size())
1994b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
2004b9229de0ea1993c94c91016ba3f955509753fb0scygan		pQueueFamilyIndices = &m_queueFamilyIndices[0];
2014b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
2024b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
2034b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
2044b9229de0ea1993c94c91016ba3f955509753fb0scygan		pQueueFamilyIndices = DE_NULL;
2054b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
2064b9229de0ea1993c94c91016ba3f955509753fb0scygan
2074b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
2084b9229de0ea1993c94c91016ba3f955509753fb0scygan}
2094b9229de0ea1993c94c91016ba3f955509753fb0scygan
2106a2834ac40395173796b6e8d2a8e6c120d86ee74scyganImageCreateInfo::ImageCreateInfo (vk::VkImageType			_imageType,
2116a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  vk::VkFormat				_format,
2126a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  vk::VkExtent3D			_extent,
2136a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  deUint32					_mipLevels,
2146a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  deUint32					_arrayLayers,
2156a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  vk::VkSampleCountFlagBits	_samples,
2166a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  vk::VkImageTiling			_tiling,
2176a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  vk::VkImageUsageFlags		_usage,
2186a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  vk::VkSharingMode			_sharingMode,
2196a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  deUint32					_queueFamilyIndexCount,
220db4efd02b79d71e0d0b1122d01d1a20b37760527scygan								  const deUint32*			_pQueueFamilyIndices,
2216a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  vk::VkImageCreateFlags	_flags,
2226a2834ac40395173796b6e8d2a8e6c120d86ee74scygan								  vk::VkImageLayout			_initialLayout)
2236a2834ac40395173796b6e8d2a8e6c120d86ee74scygan{
2246a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	if (_queueFamilyIndexCount)
2254b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
2266a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		m_queueFamilyIndices = std::vector<deUint32>(_pQueueFamilyIndices, _pQueueFamilyIndices + _queueFamilyIndexCount);
2274b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
2284b9229de0ea1993c94c91016ba3f955509753fb0scygan
2294b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
2304b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
2316a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= _flags;
2326a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	imageType				= _imageType;
2336a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	format					= _format;
2346a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	extent					= _extent;
2356a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	mipLevels				= _mipLevels;
2366a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	arrayLayers				= _arrayLayers;
2376a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	samples					= _samples;
2386a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	tiling					= _tiling;
2396a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	usage					= _usage;
2406a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sharingMode				= _sharingMode;
2416a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	queueFamilyIndexCount	= _queueFamilyIndexCount;
2424b9229de0ea1993c94c91016ba3f955509753fb0scygan
2434b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (m_queueFamilyIndices.size())
2444b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
2454b9229de0ea1993c94c91016ba3f955509753fb0scygan		pQueueFamilyIndices = &m_queueFamilyIndices[0];
2464b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
2474b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
2484b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
2494b9229de0ea1993c94c91016ba3f955509753fb0scygan		pQueueFamilyIndices = DE_NULL;
2504b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
2514b9229de0ea1993c94c91016ba3f955509753fb0scygan	initialLayout	= _initialLayout;
2524b9229de0ea1993c94c91016ba3f955509753fb0scygan}
2534b9229de0ea1993c94c91016ba3f955509753fb0scygan
2546a2834ac40395173796b6e8d2a8e6c120d86ee74scyganFramebufferCreateInfo::FramebufferCreateInfo (vk::VkRenderPass						_renderPass,
255ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos											  const std::vector<vk::VkImageView>&	atachments,
2566a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  deUint32								_width,
2576a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  deUint32								_height,
2586a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  deUint32								_layers)
2594b9229de0ea1993c94c91016ba3f955509753fb0scygan{
2604b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
2614b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
2626a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags = 0u;
2634b9229de0ea1993c94c91016ba3f955509753fb0scygan
2644b9229de0ea1993c94c91016ba3f955509753fb0scygan	renderPass		= _renderPass;
2654b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachmentCount	= static_cast<deUint32>(atachments.size());
2664b9229de0ea1993c94c91016ba3f955509753fb0scygan
2674b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (attachmentCount)
2684b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
2694b9229de0ea1993c94c91016ba3f955509753fb0scygan		pAttachments = const_cast<vk::VkImageView *>(&atachments[0]);
2704b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
2714b9229de0ea1993c94c91016ba3f955509753fb0scygan
2724b9229de0ea1993c94c91016ba3f955509753fb0scygan	width	= _width;
2734b9229de0ea1993c94c91016ba3f955509753fb0scygan	height	= _height;
2744b9229de0ea1993c94c91016ba3f955509753fb0scygan	layers	= _layers;
2754b9229de0ea1993c94c91016ba3f955509753fb0scygan}
2764b9229de0ea1993c94c91016ba3f955509753fb0scygan
2774b9229de0ea1993c94c91016ba3f955509753fb0scyganRenderPassCreateInfo::RenderPassCreateInfo (const std::vector<vk::VkAttachmentDescription>&	attachments,
2784b9229de0ea1993c94c91016ba3f955509753fb0scygan											const std::vector<vk::VkSubpassDescription>&	subpasses,
2794b9229de0ea1993c94c91016ba3f955509753fb0scygan											const std::vector<vk::VkSubpassDependency>&		dependiences)
2804b9229de0ea1993c94c91016ba3f955509753fb0scygan
2814b9229de0ea1993c94c91016ba3f955509753fb0scygan	: m_attachments			(attachments.begin(), attachments.end())
2824b9229de0ea1993c94c91016ba3f955509753fb0scygan	, m_subpasses			(subpasses.begin(), subpasses.end())
2834b9229de0ea1993c94c91016ba3f955509753fb0scygan	, m_dependiences		(dependiences.begin(), dependiences.end())
2844b9229de0ea1993c94c91016ba3f955509753fb0scygan	, m_attachmentsStructs	(m_attachments.begin(), m_attachments.end())
2854b9229de0ea1993c94c91016ba3f955509753fb0scygan	, m_subpassesStructs	(m_subpasses.begin(), m_subpasses.end())
2864b9229de0ea1993c94c91016ba3f955509753fb0scygan	, m_dependiencesStructs	(m_dependiences.begin(), m_dependiences.end())
2874b9229de0ea1993c94c91016ba3f955509753fb0scygan{
2884b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
2894b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
290ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos	flags = 0;
2914b9229de0ea1993c94c91016ba3f955509753fb0scygan
2924b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachmentCount = static_cast<deUint32>(m_attachments.size());
2934b9229de0ea1993c94c91016ba3f955509753fb0scygan	pAttachments	= &m_attachmentsStructs[0];
2944b9229de0ea1993c94c91016ba3f955509753fb0scygan	subpassCount	= static_cast<deUint32>(m_subpasses.size());
2954b9229de0ea1993c94c91016ba3f955509753fb0scygan	pSubpasses		= &m_subpassesStructs[0];
2964b9229de0ea1993c94c91016ba3f955509753fb0scygan	dependencyCount = static_cast<deUint32>(m_dependiences.size());
2974b9229de0ea1993c94c91016ba3f955509753fb0scygan	pDependencies	= &m_dependiencesStructs[0];
2984b9229de0ea1993c94c91016ba3f955509753fb0scygan}
2994b9229de0ea1993c94c91016ba3f955509753fb0scygan
3006a2834ac40395173796b6e8d2a8e6c120d86ee74scyganRenderPassCreateInfo::RenderPassCreateInfo (deUint32							_attachmentCount,
3016a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											const vk::VkAttachmentDescription*	_pAttachments,
3026a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											deUint32							_subpassCount,
3036a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											const vk::VkSubpassDescription*		_pSubpasses,
3046a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											deUint32							_dependencyCount,
3056a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											const vk::VkSubpassDependency*		_pDependiences)
3064b9229de0ea1993c94c91016ba3f955509753fb0scygan{
3074b9229de0ea1993c94c91016ba3f955509753fb0scygan
3084b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_attachments	= std::vector<AttachmentDescription>(_pAttachments, _pAttachments + _attachmentCount);
3094b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_subpasses		= std::vector<SubpassDescription>(_pSubpasses, _pSubpasses + _subpassCount);
3104b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_dependiences	= std::vector<SubpassDependency>(_pDependiences, _pDependiences + _dependencyCount);
3114b9229de0ea1993c94c91016ba3f955509753fb0scygan
3124b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_attachmentsStructs	= std::vector<vk::VkAttachmentDescription>	(m_attachments.begin(),		m_attachments.end());
3134b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_subpassesStructs		= std::vector<vk::VkSubpassDescription>		(m_subpasses.begin(),		m_subpasses.end());
3144b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_dependiencesStructs	= std::vector<vk::VkSubpassDependency>		(m_dependiences.begin(),	m_dependiences.end());
3154b9229de0ea1993c94c91016ba3f955509753fb0scygan
3164b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
3174b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
3186a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags = 0;
3194b9229de0ea1993c94c91016ba3f955509753fb0scygan
3204b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachmentCount = static_cast<deUint32>(m_attachments.size());
3214b9229de0ea1993c94c91016ba3f955509753fb0scygan
3224b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (attachmentCount) {
3234b9229de0ea1993c94c91016ba3f955509753fb0scygan		pAttachments = &m_attachmentsStructs[0];
3244b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
3254b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
3264b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
3274b9229de0ea1993c94c91016ba3f955509753fb0scygan		pAttachments = DE_NULL;
3284b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
3294b9229de0ea1993c94c91016ba3f955509753fb0scygan
3304b9229de0ea1993c94c91016ba3f955509753fb0scygan	subpassCount = static_cast<deUint32>(m_subpasses.size());
3314b9229de0ea1993c94c91016ba3f955509753fb0scygan
3324b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (subpassCount) {
3334b9229de0ea1993c94c91016ba3f955509753fb0scygan		pSubpasses = &m_subpassesStructs[0];
3344b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
3354b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
3364b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
3374b9229de0ea1993c94c91016ba3f955509753fb0scygan		pSubpasses = DE_NULL;
3384b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
3394b9229de0ea1993c94c91016ba3f955509753fb0scygan
3404b9229de0ea1993c94c91016ba3f955509753fb0scygan	dependencyCount = static_cast<deUint32>(m_dependiences.size());
3414b9229de0ea1993c94c91016ba3f955509753fb0scygan
3424b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (dependencyCount) {
3434b9229de0ea1993c94c91016ba3f955509753fb0scygan		pDependencies = &m_dependiencesStructs[0];
3444b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
3454b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
3464b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
3474b9229de0ea1993c94c91016ba3f955509753fb0scygan		pDependencies = DE_NULL;
3484b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
3494b9229de0ea1993c94c91016ba3f955509753fb0scygan}
3504b9229de0ea1993c94c91016ba3f955509753fb0scygan
3514b9229de0ea1993c94c91016ba3f955509753fb0scyganvoid
3524b9229de0ea1993c94c91016ba3f955509753fb0scyganRenderPassCreateInfo::addAttachment (vk::VkAttachmentDescription attachment)
3534b9229de0ea1993c94c91016ba3f955509753fb0scygan{
3544b9229de0ea1993c94c91016ba3f955509753fb0scygan
3554b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_attachments.push_back(attachment);
3564b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_attachmentsStructs	= std::vector<vk::VkAttachmentDescription>(m_attachments.begin(), m_attachments.end());
3574b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachmentCount			= static_cast<deUint32>(m_attachments.size());
3584b9229de0ea1993c94c91016ba3f955509753fb0scygan	pAttachments			= &m_attachmentsStructs[0];
3594b9229de0ea1993c94c91016ba3f955509753fb0scygan}
3604b9229de0ea1993c94c91016ba3f955509753fb0scygan
3614b9229de0ea1993c94c91016ba3f955509753fb0scyganvoid
3624b9229de0ea1993c94c91016ba3f955509753fb0scyganRenderPassCreateInfo::addSubpass (vk::VkSubpassDescription subpass)
3634b9229de0ea1993c94c91016ba3f955509753fb0scygan{
3644b9229de0ea1993c94c91016ba3f955509753fb0scygan
3654b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_subpasses.push_back(subpass);
3664b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_subpassesStructs	= std::vector<vk::VkSubpassDescription>(m_subpasses.begin(), m_subpasses.end());
3674b9229de0ea1993c94c91016ba3f955509753fb0scygan	subpassCount		= static_cast<deUint32>(m_subpasses.size());
3684b9229de0ea1993c94c91016ba3f955509753fb0scygan	pSubpasses			= &m_subpassesStructs[0];
3694b9229de0ea1993c94c91016ba3f955509753fb0scygan}
3704b9229de0ea1993c94c91016ba3f955509753fb0scygan
3714b9229de0ea1993c94c91016ba3f955509753fb0scyganvoid
3724b9229de0ea1993c94c91016ba3f955509753fb0scyganRenderPassCreateInfo::addDependency (vk::VkSubpassDependency dependency)
3734b9229de0ea1993c94c91016ba3f955509753fb0scygan{
3744b9229de0ea1993c94c91016ba3f955509753fb0scygan
3754b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_dependiences.push_back(dependency);
3764b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_dependiencesStructs	= std::vector<vk::VkSubpassDependency>(m_dependiences.begin(), m_dependiences.end());
3774b9229de0ea1993c94c91016ba3f955509753fb0scygan
3784b9229de0ea1993c94c91016ba3f955509753fb0scygan	dependencyCount			= static_cast<deUint32>(m_dependiences.size());
3794b9229de0ea1993c94c91016ba3f955509753fb0scygan	pDependencies			= &m_dependiencesStructs[0];
3804b9229de0ea1993c94c91016ba3f955509753fb0scygan}
3814b9229de0ea1993c94c91016ba3f955509753fb0scygan
3826a2834ac40395173796b6e8d2a8e6c120d86ee74scyganRenderPassBeginInfo::RenderPassBeginInfo (vk::VkRenderPass						_renderPass,
3836a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  vk::VkFramebuffer						_framebuffer,
3846a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										  vk::VkRect2D							_renderArea,
385db4efd02b79d71e0d0b1122d01d1a20b37760527scygan										  const std::vector<vk::VkClearValue>&	_clearValues)
3864b9229de0ea1993c94c91016ba3f955509753fb0scygan{
3874b9229de0ea1993c94c91016ba3f955509753fb0scygan
3884b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_clearValues	= _clearValues;
3894b9229de0ea1993c94c91016ba3f955509753fb0scygan
3904b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType			= vk::VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
3914b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext			= DE_NULL;
3924b9229de0ea1993c94c91016ba3f955509753fb0scygan	renderPass		= _renderPass;
3934b9229de0ea1993c94c91016ba3f955509753fb0scygan	framebuffer		= _framebuffer;
3944b9229de0ea1993c94c91016ba3f955509753fb0scygan	renderArea		= _renderArea;
3954b9229de0ea1993c94c91016ba3f955509753fb0scygan	clearValueCount = static_cast<deUint32>(m_clearValues.size());
3964b9229de0ea1993c94c91016ba3f955509753fb0scygan	pClearValues	= m_clearValues.size() ? &m_clearValues[0] : DE_NULL;
3974b9229de0ea1993c94c91016ba3f955509753fb0scygan}
3984b9229de0ea1993c94c91016ba3f955509753fb0scygan
3994b9229de0ea1993c94c91016ba3f955509753fb0scyganCmdPoolCreateInfo::CmdPoolCreateInfo (deUint32 _queueFamilyIndex, unsigned int _flags)
4004b9229de0ea1993c94c91016ba3f955509753fb0scygan{
4016a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType = vk::VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
4024b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
4034b9229de0ea1993c94c91016ba3f955509753fb0scygan
4044b9229de0ea1993c94c91016ba3f955509753fb0scygan	queueFamilyIndex = _queueFamilyIndex;
4056a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags				= _flags;
4064b9229de0ea1993c94c91016ba3f955509753fb0scygan}
4074b9229de0ea1993c94c91016ba3f955509753fb0scygan
4086a2834ac40395173796b6e8d2a8e6c120d86ee74scyganAttachmentDescription::AttachmentDescription (vk::VkFormat				_format,
4096a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  vk::VkSampleCountFlagBits	_samples,
4106a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  vk::VkAttachmentLoadOp	_loadOp,
4116a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  vk::VkAttachmentStoreOp	_storeOp,
4126a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  vk::VkAttachmentLoadOp	_stencilLoadOp,
4136a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  vk::VkAttachmentStoreOp	_stencilStoreOp,
4146a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  vk::VkImageLayout			_initialLayout,
4156a2834ac40395173796b6e8d2a8e6c120d86ee74scygan											  vk::VkImageLayout			_finalLayout)
4164b9229de0ea1993c94c91016ba3f955509753fb0scygan{
4176a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags = 0;
4184b9229de0ea1993c94c91016ba3f955509753fb0scygan	format			= _format;
4194b9229de0ea1993c94c91016ba3f955509753fb0scygan	samples			= _samples;
4204b9229de0ea1993c94c91016ba3f955509753fb0scygan	loadOp			= _loadOp;
4214b9229de0ea1993c94c91016ba3f955509753fb0scygan	storeOp			= _storeOp;
4224b9229de0ea1993c94c91016ba3f955509753fb0scygan	stencilLoadOp	= _stencilLoadOp;
4234b9229de0ea1993c94c91016ba3f955509753fb0scygan	stencilStoreOp	= _stencilStoreOp;
4244b9229de0ea1993c94c91016ba3f955509753fb0scygan	initialLayout	= _initialLayout;
4254b9229de0ea1993c94c91016ba3f955509753fb0scygan	finalLayout		= _finalLayout;
4264b9229de0ea1993c94c91016ba3f955509753fb0scygan}
4274b9229de0ea1993c94c91016ba3f955509753fb0scygan
428db4efd02b79d71e0d0b1122d01d1a20b37760527scyganAttachmentDescription::AttachmentDescription (const vk::VkAttachmentDescription& rhs)
4294b9229de0ea1993c94c91016ba3f955509753fb0scygan{
4306a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags			= rhs.flags;
4314b9229de0ea1993c94c91016ba3f955509753fb0scygan	format			= rhs.format;
4324b9229de0ea1993c94c91016ba3f955509753fb0scygan	samples			= rhs.samples;
4334b9229de0ea1993c94c91016ba3f955509753fb0scygan	loadOp			= rhs.loadOp;
4344b9229de0ea1993c94c91016ba3f955509753fb0scygan	storeOp			= rhs.storeOp;
4354b9229de0ea1993c94c91016ba3f955509753fb0scygan	stencilLoadOp	= rhs.stencilLoadOp;
4364b9229de0ea1993c94c91016ba3f955509753fb0scygan	stencilStoreOp	= rhs.stencilStoreOp;
4374b9229de0ea1993c94c91016ba3f955509753fb0scygan	initialLayout	= rhs.initialLayout;
4384b9229de0ea1993c94c91016ba3f955509753fb0scygan	finalLayout		= rhs.finalLayout;
4394b9229de0ea1993c94c91016ba3f955509753fb0scygan}
4404b9229de0ea1993c94c91016ba3f955509753fb0scygan
4414b9229de0ea1993c94c91016ba3f955509753fb0scyganAttachmentReference::AttachmentReference (deUint32 _attachment, vk::VkImageLayout _layout)
4424b9229de0ea1993c94c91016ba3f955509753fb0scygan{
4434b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachment	= _attachment;
4444b9229de0ea1993c94c91016ba3f955509753fb0scygan	layout		= _layout;
4454b9229de0ea1993c94c91016ba3f955509753fb0scygan}
4464b9229de0ea1993c94c91016ba3f955509753fb0scygan
4474b9229de0ea1993c94c91016ba3f955509753fb0scyganAttachmentReference::AttachmentReference (void)
4484b9229de0ea1993c94c91016ba3f955509753fb0scygan{
4494b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachment = vk::VK_ATTACHMENT_UNUSED;
4504b9229de0ea1993c94c91016ba3f955509753fb0scygan	layout = vk::VK_IMAGE_LAYOUT_UNDEFINED;
4514b9229de0ea1993c94c91016ba3f955509753fb0scygan}
4524b9229de0ea1993c94c91016ba3f955509753fb0scygan
4536a2834ac40395173796b6e8d2a8e6c120d86ee74scyganSubpassDescription::SubpassDescription (vk::VkPipelineBindPoint				_pipelineBindPoint,
4546a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										vk::VkSubpassDescriptionFlags		_flags,
4556a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										deUint32							_inputAttachmentCount,
4566a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										const vk::VkAttachmentReference*	_inputAttachments,
4576a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										deUint32							_colorAttachmentCount,
4586a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										const vk::VkAttachmentReference*	_colorAttachments,
4596a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										const vk::VkAttachmentReference*	_resolveAttachments,
4606a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										vk::VkAttachmentReference			depthStencilAttachment,
4616a2834ac40395173796b6e8d2a8e6c120d86ee74scygan										deUint32							_preserveAttachmentCount,
462689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos										const deUint32*						_preserveAttachments)
4634b9229de0ea1993c94c91016ba3f955509753fb0scygan{
4646a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_inputAttachments = std::vector<vk::VkAttachmentReference>(_inputAttachments, _inputAttachments + _inputAttachmentCount);
4656a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_colorAttachments = std::vector<vk::VkAttachmentReference>(_colorAttachments, _colorAttachments + _colorAttachmentCount);
4664b9229de0ea1993c94c91016ba3f955509753fb0scygan
4674b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (_resolveAttachments)
4686a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		m_resolveAttachments = std::vector<vk::VkAttachmentReference>(_resolveAttachments, _resolveAttachments + _colorAttachmentCount);
4694b9229de0ea1993c94c91016ba3f955509753fb0scygan
470689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	m_preserveAttachments = std::vector<deUint32>(_preserveAttachments, _preserveAttachments + _preserveAttachmentCount);
4714b9229de0ea1993c94c91016ba3f955509753fb0scygan
4726a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_depthStencilAttachment = depthStencilAttachment;
4736a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
474689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	flags					= _flags;
4754b9229de0ea1993c94c91016ba3f955509753fb0scygan	pipelineBindPoint		= _pipelineBindPoint;
4766a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	inputAttachmentCount	= _inputAttachmentCount;
4774b9229de0ea1993c94c91016ba3f955509753fb0scygan	pInputAttachments		= DE_NULL;
4786a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	colorAttachmentCount	= _colorAttachmentCount;
4794b9229de0ea1993c94c91016ba3f955509753fb0scygan	pColorAttachments		= DE_NULL;
4804b9229de0ea1993c94c91016ba3f955509753fb0scygan	pResolveAttachments		= DE_NULL;
4816a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pDepthStencilAttachment	= &m_depthStencilAttachment;
4824b9229de0ea1993c94c91016ba3f955509753fb0scygan	pPreserveAttachments	= DE_NULL;
4836a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	preserveAttachmentCount	= _preserveAttachmentCount;
4844b9229de0ea1993c94c91016ba3f955509753fb0scygan
485689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_inputAttachments.empty())
4866a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pInputAttachments = &m_inputAttachments[0];
4874b9229de0ea1993c94c91016ba3f955509753fb0scygan
488689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_colorAttachments.empty())
4896a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pColorAttachments = &m_colorAttachments[0];
4904b9229de0ea1993c94c91016ba3f955509753fb0scygan
491689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_resolveAttachments.empty())
4926a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pResolveAttachments = &m_resolveAttachments[0];
4934b9229de0ea1993c94c91016ba3f955509753fb0scygan
494689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_preserveAttachments.empty())
4956a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pPreserveAttachments = &m_preserveAttachments[0];
4964b9229de0ea1993c94c91016ba3f955509753fb0scygan}
4974b9229de0ea1993c94c91016ba3f955509753fb0scygan
4986a2834ac40395173796b6e8d2a8e6c120d86ee74scyganSubpassDescription::SubpassDescription (const vk::VkSubpassDescription& rhs)
4994b9229de0ea1993c94c91016ba3f955509753fb0scygan{
5004b9229de0ea1993c94c91016ba3f955509753fb0scygan	*static_cast<vk::VkSubpassDescription*>(this) = rhs;
5014b9229de0ea1993c94c91016ba3f955509753fb0scygan
5026a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_inputAttachments = std::vector<vk::VkAttachmentReference>(
5036a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		rhs.pInputAttachments, rhs.pInputAttachments + rhs.inputAttachmentCount);
5044b9229de0ea1993c94c91016ba3f955509753fb0scygan
5056a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_colorAttachments = std::vector<vk::VkAttachmentReference>(
5066a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		rhs.pColorAttachments, rhs.pColorAttachments + rhs.colorAttachmentCount);
5074b9229de0ea1993c94c91016ba3f955509753fb0scygan
508689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (rhs.pResolveAttachments)
5096a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		m_resolveAttachments = std::vector<vk::VkAttachmentReference>(
5106a2834ac40395173796b6e8d2a8e6c120d86ee74scygan			rhs.pResolveAttachments, rhs.pResolveAttachments + rhs.colorAttachmentCount);
511689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos
512689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	m_preserveAttachments = std::vector<deUint32>(
5136a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		rhs.pPreserveAttachments, rhs.pPreserveAttachments + rhs.preserveAttachmentCount);
5146a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
5156a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	if (rhs.pDepthStencilAttachment)
5166a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		m_depthStencilAttachment = *rhs.pDepthStencilAttachment;
5174b9229de0ea1993c94c91016ba3f955509753fb0scygan
518689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_inputAttachments.empty())
5196a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pInputAttachments = &m_inputAttachments[0];
520689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos
521689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_colorAttachments.empty())
5226a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pColorAttachments = &m_colorAttachments[0];
5234b9229de0ea1993c94c91016ba3f955509753fb0scygan
524689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_resolveAttachments.empty())
5256a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pResolveAttachments = &m_resolveAttachments[0];
5264b9229de0ea1993c94c91016ba3f955509753fb0scygan
5276a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pDepthStencilAttachment = &m_depthStencilAttachment;
5286a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
529689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_preserveAttachments.empty())
5306a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pPreserveAttachments = &m_preserveAttachments[0];
5314b9229de0ea1993c94c91016ba3f955509753fb0scygan}
5324b9229de0ea1993c94c91016ba3f955509753fb0scygan
5336a2834ac40395173796b6e8d2a8e6c120d86ee74scyganSubpassDescription::SubpassDescription (const SubpassDescription& rhs) {
5344b9229de0ea1993c94c91016ba3f955509753fb0scygan	*this = rhs;
5354b9229de0ea1993c94c91016ba3f955509753fb0scygan}
5364b9229de0ea1993c94c91016ba3f955509753fb0scygan
5376a2834ac40395173796b6e8d2a8e6c120d86ee74scyganSubpassDescription& SubpassDescription::operator= (const SubpassDescription& rhs)
5384b9229de0ea1993c94c91016ba3f955509753fb0scygan{
5394b9229de0ea1993c94c91016ba3f955509753fb0scygan	*static_cast<vk::VkSubpassDescription*>(this) = rhs;
5404b9229de0ea1993c94c91016ba3f955509753fb0scygan
5416a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_inputAttachments		= rhs.m_inputAttachments;
5426a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_colorAttachments		= rhs.m_colorAttachments;
5436a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_resolveAttachments	= rhs.m_resolveAttachments;
5446a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_preserveAttachments	= rhs.m_preserveAttachments;
5456a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_depthStencilAttachment = rhs.m_depthStencilAttachment;
5464b9229de0ea1993c94c91016ba3f955509753fb0scygan
547689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_inputAttachments.empty())
5486a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pInputAttachments = &m_inputAttachments[0];
549689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos
550689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_colorAttachments.empty())
5516a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pColorAttachments = &m_colorAttachments[0];
5524b9229de0ea1993c94c91016ba3f955509753fb0scygan
553689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_resolveAttachments.empty())
5546a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pResolveAttachments = &m_resolveAttachments[0];
5554b9229de0ea1993c94c91016ba3f955509753fb0scygan
5566a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pDepthStencilAttachment = &m_depthStencilAttachment;
5576a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
558689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	if (!m_preserveAttachments.empty())
5596a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		pPreserveAttachments = &m_preserveAttachments[0];
5604b9229de0ea1993c94c91016ba3f955509753fb0scygan
5614b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
5624b9229de0ea1993c94c91016ba3f955509753fb0scygan}
5634b9229de0ea1993c94c91016ba3f955509753fb0scygan
5646a2834ac40395173796b6e8d2a8e6c120d86ee74scyganSubpassDependency::SubpassDependency (deUint32					_srcSubpass,
5656a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									  deUint32					_dstSubpass,
5666a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									  vk::VkPipelineStageFlags	_srcStageMask,
5676a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									  vk::VkPipelineStageFlags	_dstStageMask,
5686a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									  vk::VkAccessFlags			_srcAccessMask,
5696a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									  vk::VkAccessFlags			_dstAccessMask,
5706a2834ac40395173796b6e8d2a8e6c120d86ee74scygan									  vk::VkDependencyFlags		_dependencyFlags)
5714b9229de0ea1993c94c91016ba3f955509753fb0scygan{
5724b9229de0ea1993c94c91016ba3f955509753fb0scygan	srcSubpass		= _srcSubpass;
5736a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dstSubpass		= _dstSubpass;
5744b9229de0ea1993c94c91016ba3f955509753fb0scygan	srcStageMask	= _srcStageMask;
5756a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dstStageMask	= _dstStageMask;
5766a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	srcAccessMask	= _srcAccessMask;
5776a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dstAccessMask	= _dstAccessMask;
5786a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dependencyFlags	= _dependencyFlags;
5794b9229de0ea1993c94c91016ba3f955509753fb0scygan}
5804b9229de0ea1993c94c91016ba3f955509753fb0scygan
581db4efd02b79d71e0d0b1122d01d1a20b37760527scyganSubpassDependency::SubpassDependency (const vk::VkSubpassDependency& rhs)
5824b9229de0ea1993c94c91016ba3f955509753fb0scygan{
5834b9229de0ea1993c94c91016ba3f955509753fb0scygan	srcSubpass		= rhs.srcSubpass;
5846a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dstSubpass		= rhs.dstSubpass;
5854b9229de0ea1993c94c91016ba3f955509753fb0scygan	srcStageMask	= rhs.srcStageMask;
5866a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dstStageMask	= rhs.dstStageMask;
5876a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	srcAccessMask	= rhs.srcAccessMask;
5886a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dstAccessMask	= rhs.dstAccessMask;
5896a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dependencyFlags	= rhs.dependencyFlags;
5904b9229de0ea1993c94c91016ba3f955509753fb0scygan}
5914b9229de0ea1993c94c91016ba3f955509753fb0scygan
5926a2834ac40395173796b6e8d2a8e6c120d86ee74scyganCmdBufferBeginInfo::CmdBufferBeginInfo (vk::VkCommandBufferUsageFlags _flags)
5934b9229de0ea1993c94c91016ba3f955509753fb0scygan{
594689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	sType				= vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
595689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	pNext				= DE_NULL;
596689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	flags				= _flags;
597689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	pInheritanceInfo	= DE_NULL;
5984b9229de0ea1993c94c91016ba3f955509753fb0scygan}
5994b9229de0ea1993c94c91016ba3f955509753fb0scygan
6006a2834ac40395173796b6e8d2a8e6c120d86ee74scyganDescriptorPoolCreateInfo::DescriptorPoolCreateInfo (const std::vector<vk::VkDescriptorPoolSize>&	poolSizeCounts,
6016a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													vk::VkDescriptorPoolCreateFlags					_flags,
6026a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													deUint32										_maxSets)
6036a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	: m_poolSizeCounts(poolSizeCounts)
6044b9229de0ea1993c94c91016ba3f955509753fb0scygan{
6054b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
6064b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
6076a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags			= _flags;
6086a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	maxSets			= _maxSets;
6096a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	poolSizeCount	= static_cast<deUint32>(m_poolSizeCounts.size());
6106a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pPoolSizes		= &m_poolSizeCounts[0];
6114b9229de0ea1993c94c91016ba3f955509753fb0scygan}
6124b9229de0ea1993c94c91016ba3f955509753fb0scygan
6134b9229de0ea1993c94c91016ba3f955509753fb0scyganDescriptorPoolCreateInfo& DescriptorPoolCreateInfo::addDescriptors (vk::VkDescriptorType type, deUint32 count)
6144b9229de0ea1993c94c91016ba3f955509753fb0scygan{
6156a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	vk::VkDescriptorPoolSize descriptorTypeCount = { type, count };
6166a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_poolSizeCounts.push_back(descriptorTypeCount);
6174b9229de0ea1993c94c91016ba3f955509753fb0scygan
6186a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	poolSizeCount	= static_cast<deUint32>(m_poolSizeCounts.size());
6196a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pPoolSizes		= &m_poolSizeCounts[0];
6204b9229de0ea1993c94c91016ba3f955509753fb0scygan
6214b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
6224b9229de0ea1993c94c91016ba3f955509753fb0scygan}
6234b9229de0ea1993c94c91016ba3f955509753fb0scygan
6246a2834ac40395173796b6e8d2a8e6c120d86ee74scyganDescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo (deUint32 _bindingCount, const vk::VkDescriptorSetLayoutBinding* _pBindings)
6254b9229de0ea1993c94c91016ba3f955509753fb0scygan{
6264b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
6274b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
6286a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags = 0;
6296a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	bindingCount = _bindingCount;
630689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	pBindings	 = _pBindings;
6314b9229de0ea1993c94c91016ba3f955509753fb0scygan}
6324b9229de0ea1993c94c91016ba3f955509753fb0scygan
6334b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineLayoutCreateInfo::PipelineLayoutCreateInfo (deUint32							_descriptorSetCount,
6346a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													const vk::VkDescriptorSetLayout*	_pSetLayouts,
6356a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													deUint32							_pushConstantRangeCount,
6366a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													const vk::VkPushConstantRange*		_pPushConstantRanges)
6374b9229de0ea1993c94c91016ba3f955509753fb0scygan	: m_pushConstantRanges(_pPushConstantRanges, _pPushConstantRanges + _pushConstantRangeCount)
6384b9229de0ea1993c94c91016ba3f955509753fb0scygan{
6394b9229de0ea1993c94c91016ba3f955509753fb0scygan	for (unsigned int i = 0; i < _descriptorSetCount; i++)
6404b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
6414b9229de0ea1993c94c91016ba3f955509753fb0scygan		m_setLayouts.push_back(_pSetLayouts[i]);
6424b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
6434b9229de0ea1993c94c91016ba3f955509753fb0scygan
6444b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
6454b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
6466a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	setLayoutCount			= static_cast<deUint32>(m_setLayouts.size());
6476a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pSetLayouts				= setLayoutCount > 0 ? &m_setLayouts[0] : DE_NULL;
6484b9229de0ea1993c94c91016ba3f955509753fb0scygan	pushConstantRangeCount	= static_cast<deUint32>(m_pushConstantRanges.size());
6494b9229de0ea1993c94c91016ba3f955509753fb0scygan
6504b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (m_pushConstantRanges.size()) {
6514b9229de0ea1993c94c91016ba3f955509753fb0scygan		pPushConstantRanges = &m_pushConstantRanges[0];
6524b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
6534b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
6544b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
6554b9229de0ea1993c94c91016ba3f955509753fb0scygan		pPushConstantRanges = DE_NULL;
6564b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
6574b9229de0ea1993c94c91016ba3f955509753fb0scygan}
6584b9229de0ea1993c94c91016ba3f955509753fb0scygan
6596a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineLayoutCreateInfo::PipelineLayoutCreateInfo (const std::vector<vk::VkDescriptorSetLayout>&	setLayouts,
6606a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													deUint32										_pushConstantRangeCount,
6616a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													const vk::VkPushConstantRange*					_pPushConstantRanges)
6624b9229de0ea1993c94c91016ba3f955509753fb0scygan	: m_setLayouts			(setLayouts)
6634b9229de0ea1993c94c91016ba3f955509753fb0scygan	, m_pushConstantRanges	(_pPushConstantRanges, _pPushConstantRanges + _pushConstantRangeCount)
6644b9229de0ea1993c94c91016ba3f955509753fb0scygan{
6654b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
6664b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
6674b9229de0ea1993c94c91016ba3f955509753fb0scygan
668271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags			= 0u;
669271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	setLayoutCount	= static_cast<deUint32>(m_setLayouts.size());
6704b9229de0ea1993c94c91016ba3f955509753fb0scygan
6716a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	if (setLayoutCount)
6724b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
6734b9229de0ea1993c94c91016ba3f955509753fb0scygan		pSetLayouts = &m_setLayouts[0];
6744b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
6754b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
6764b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
6774b9229de0ea1993c94c91016ba3f955509753fb0scygan		pSetLayouts = DE_NULL;
6784b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
6794b9229de0ea1993c94c91016ba3f955509753fb0scygan
6804b9229de0ea1993c94c91016ba3f955509753fb0scygan	pushConstantRangeCount = static_cast<deUint32>(m_pushConstantRanges.size());
6814b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (pushConstantRangeCount) {
6824b9229de0ea1993c94c91016ba3f955509753fb0scygan		pPushConstantRanges = &m_pushConstantRanges[0];
6834b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
6844b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
6854b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
6864b9229de0ea1993c94c91016ba3f955509753fb0scygan		pPushConstantRanges = DE_NULL;
6874b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
6884b9229de0ea1993c94c91016ba3f955509753fb0scygan}
6894b9229de0ea1993c94c91016ba3f955509753fb0scygan
6906a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::PipelineShaderStage::PipelineShaderStage (vk::VkShaderModule _module, const char* _pName, vk::VkShaderStageFlagBits _stage)
6914b9229de0ea1993c94c91016ba3f955509753fb0scygan{
6924b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
6934b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
6946a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags = 0u;
6954b9229de0ea1993c94c91016ba3f955509753fb0scygan	stage				= _stage;
6966a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	module				= _module;
6976a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pName				= _pName;
6984b9229de0ea1993c94c91016ba3f955509753fb0scygan	pSpecializationInfo = DE_NULL;
6994b9229de0ea1993c94c91016ba3f955509753fb0scygan}
7004b9229de0ea1993c94c91016ba3f955509753fb0scygan
7016a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::VertexInputState::VertexInputState (deUint32										_vertexBindingDescriptionCount,
7026a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														const vk::VkVertexInputBindingDescription*		_pVertexBindingDescriptions,
7036a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														deUint32										_vertexAttributeDescriptionCount,
7046a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														const vk::VkVertexInputAttributeDescription*	_pVertexAttributeDescriptions)
7054b9229de0ea1993c94c91016ba3f955509753fb0scygan{
7064b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
7074b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
7086a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags							= 0u;
7096a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	vertexBindingDescriptionCount	= _vertexBindingDescriptionCount;
7104b9229de0ea1993c94c91016ba3f955509753fb0scygan	pVertexBindingDescriptions		= _pVertexBindingDescriptions;
7116a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	vertexAttributeDescriptionCount	= _vertexAttributeDescriptionCount;
7124b9229de0ea1993c94c91016ba3f955509753fb0scygan	pVertexAttributeDescriptions	= _pVertexAttributeDescriptions;
7134b9229de0ea1993c94c91016ba3f955509753fb0scygan}
7144b9229de0ea1993c94c91016ba3f955509753fb0scygan
7156a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::InputAssemblerState::InputAssemblerState (vk::VkPrimitiveTopology	_topology,
7166a2834ac40395173796b6e8d2a8e6c120d86ee74scygan															  vk::VkBool32				_primitiveRestartEnable)
7174b9229de0ea1993c94c91016ba3f955509753fb0scygan{
7184b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
7194b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
7206a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= 0u;
7214b9229de0ea1993c94c91016ba3f955509753fb0scygan	topology				= _topology;
7224b9229de0ea1993c94c91016ba3f955509753fb0scygan	primitiveRestartEnable	= _primitiveRestartEnable;
7234b9229de0ea1993c94c91016ba3f955509753fb0scygan}
7244b9229de0ea1993c94c91016ba3f955509753fb0scygan
725689c095f881a410da6a315795452a8e00ad95a9dPyry HaulosPipelineCreateInfo::TessellationState::TessellationState (deUint32 _patchControlPoints)
7264b9229de0ea1993c94c91016ba3f955509753fb0scygan{
7274b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
7284b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
729271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags				= 0u;
730271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	patchControlPoints	= _patchControlPoints;
7314b9229de0ea1993c94c91016ba3f955509753fb0scygan}
7324b9229de0ea1993c94c91016ba3f955509753fb0scygan
7336a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::ViewportState::ViewportState (deUint32						_viewportCount,
7346a2834ac40395173796b6e8d2a8e6c120d86ee74scygan												  std::vector<vk::VkViewport>	_viewports,
7356a2834ac40395173796b6e8d2a8e6c120d86ee74scygan												  std::vector<vk::VkRect2D>		_scissors)
7364b9229de0ea1993c94c91016ba3f955509753fb0scygan{
7374b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
7384b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
7396a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags			= 0u;
7406a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	viewportCount	= _viewportCount;
7416a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	scissorCount	= _viewportCount;
742ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos
7436a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	if (!_viewports.size())
7446a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	{
7456a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		m_viewports.resize(viewportCount);
7466a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		deMemset(&m_viewports[0], 0, sizeof(m_viewports[0]) * m_viewports.size());
7476a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	}
7486a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	else
7496a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	{
7506a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		m_viewports = _viewports;
7516a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	}
7526a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
7536a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	if (!_scissors.size())
7546a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	{
7556a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		m_scissors.resize(scissorCount);
7566a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		deMemset(&m_scissors[0], 0, sizeof(m_scissors[0]) * m_scissors.size());
7576a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	}
7586a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	else
7596a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	{
7606a2834ac40395173796b6e8d2a8e6c120d86ee74scygan		m_scissors = _scissors;
7616a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	}
7626a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
7636a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pViewports	= &m_viewports[0];
7644b9229de0ea1993c94c91016ba3f955509753fb0scygan	pScissors	= &m_scissors[0];
7654b9229de0ea1993c94c91016ba3f955509753fb0scygan}
7664b9229de0ea1993c94c91016ba3f955509753fb0scygan
767db4efd02b79d71e0d0b1122d01d1a20b37760527scyganPipelineCreateInfo::ViewportState::ViewportState (const ViewportState& other)
7684b9229de0ea1993c94c91016ba3f955509753fb0scygan{
7696a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType			= other.sType;
7704b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext			= other.pNext;
771271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags			= other.flags;
7726a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	viewportCount	= other.viewportCount;
7734b9229de0ea1993c94c91016ba3f955509753fb0scygan	scissorCount	= other.scissorCount;
7744b9229de0ea1993c94c91016ba3f955509753fb0scygan
7754b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_viewports = std::vector<vk::VkViewport>(other.pViewports, other.pViewports + viewportCount);
7764b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_scissors	= std::vector<vk::VkRect2D>(other.pScissors, other.pScissors + scissorCount);
7774b9229de0ea1993c94c91016ba3f955509753fb0scygan
7786a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pViewports	= &m_viewports[0];
7794b9229de0ea1993c94c91016ba3f955509753fb0scygan	pScissors	= &m_scissors[0];
7804b9229de0ea1993c94c91016ba3f955509753fb0scygan}
7814b9229de0ea1993c94c91016ba3f955509753fb0scygan
782db4efd02b79d71e0d0b1122d01d1a20b37760527scyganPipelineCreateInfo::ViewportState& PipelineCreateInfo::ViewportState::operator= (const ViewportState& other)
7834b9229de0ea1993c94c91016ba3f955509753fb0scygan{
7846a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType			= other.sType;
7854b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext			= other.pNext;
786271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags			= other.flags;
7876a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	viewportCount	= other.viewportCount;
7884b9229de0ea1993c94c91016ba3f955509753fb0scygan	scissorCount	= other.scissorCount;
7894b9229de0ea1993c94c91016ba3f955509753fb0scygan
7904b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_viewports		= std::vector<vk::VkViewport>(other.pViewports, other.pViewports + scissorCount);
7914b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_scissors		= std::vector<vk::VkRect2D>(other.pScissors, other.pScissors + scissorCount);
7924b9229de0ea1993c94c91016ba3f955509753fb0scygan
7936a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pViewports		= &m_viewports[0];
7944b9229de0ea1993c94c91016ba3f955509753fb0scygan	pScissors		= &m_scissors[0];
7954b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
7964b9229de0ea1993c94c91016ba3f955509753fb0scygan}
7974b9229de0ea1993c94c91016ba3f955509753fb0scygan
7986a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::RasterizerState::RasterizerState (vk::VkBool32			_depthClampEnable,
7996a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkBool32			_rasterizerDiscardEnable,
8006a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkPolygonMode		_polygonMode,
8016a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkCullModeFlags	_cullMode,
8026a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkFrontFace		_frontFace,
8036a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkBool32			_depthBiasEnable,
8046a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  float					_depthBiasConstantFactor,
8056a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  float					_depthBiasClamp,
8066a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  float					_depthBiasSlopeFactor,
8076a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  float					_lineWidth)
8084b9229de0ea1993c94c91016ba3f955509753fb0scygan{
8096a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
8104b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
8116a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= 0u;
8126a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	depthClampEnable		= _depthClampEnable;
8134b9229de0ea1993c94c91016ba3f955509753fb0scygan	rasterizerDiscardEnable = _rasterizerDiscardEnable;
8146a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	polygonMode				= _polygonMode;
8154b9229de0ea1993c94c91016ba3f955509753fb0scygan	cullMode				= _cullMode;
8164b9229de0ea1993c94c91016ba3f955509753fb0scygan	frontFace				= _frontFace;
8174b9229de0ea1993c94c91016ba3f955509753fb0scygan
8186a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	depthBiasEnable			= _depthBiasEnable;
8196a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	depthBiasConstantFactor	= _depthBiasConstantFactor;
8204b9229de0ea1993c94c91016ba3f955509753fb0scygan	depthBiasClamp			= _depthBiasClamp;
8216a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	depthBiasSlopeFactor	= _depthBiasSlopeFactor;
8224b9229de0ea1993c94c91016ba3f955509753fb0scygan	lineWidth				= _lineWidth;
8234b9229de0ea1993c94c91016ba3f955509753fb0scygan}
8244b9229de0ea1993c94c91016ba3f955509753fb0scygan
8256a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::MultiSampleState::MultiSampleState (vk::VkSampleCountFlagBits				_rasterizationSamples,
8266a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														vk::VkBool32							_sampleShadingEnable,
8276a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														float									_minSampleShading,
8286a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														const std::vector<vk::VkSampleMask>&	_sampleMask,
829ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos														bool									_alphaToCoverageEnable,
8306a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														bool									_alphaToOneEnable)
8314b9229de0ea1993c94c91016ba3f955509753fb0scygan	: m_sampleMask(_sampleMask)
8324b9229de0ea1993c94c91016ba3f955509753fb0scygan{
8334b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
8344b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
8356a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= 0u;
8366a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	rasterizationSamples	= _rasterizationSamples;
8376a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sampleShadingEnable		= _sampleShadingEnable;
8386a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	minSampleShading		= _minSampleShading;
8396a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pSampleMask				= &m_sampleMask[0];
8406a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	alphaToCoverageEnable   = _alphaToCoverageEnable;
8416a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	alphaToOneEnable		= _alphaToOneEnable;
8424b9229de0ea1993c94c91016ba3f955509753fb0scygan}
8434b9229de0ea1993c94c91016ba3f955509753fb0scygan
844db4efd02b79d71e0d0b1122d01d1a20b37760527scyganPipelineCreateInfo::MultiSampleState::MultiSampleState (const MultiSampleState& other)
8454b9229de0ea1993c94c91016ba3f955509753fb0scygan{
8466a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType					= other.sType;
8476a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pNext					= other.pNext;
848271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags					= other.flags;
8496a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	rasterizationSamples	= other.rasterizationSamples;
8506a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sampleShadingEnable		= other.sampleShadingEnable;
8516a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	minSampleShading		= other.minSampleShading;
852ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos
8536a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	const size_t sampleMaskArrayLen = (sizeof(vk::VkSampleMask) * 8 + other.rasterizationSamples) / (sizeof(vk::VkSampleMask) * 8);
8544b9229de0ea1993c94c91016ba3f955509753fb0scygan
8556a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_sampleMask	= std::vector<vk::VkSampleMask>(other.pSampleMask, other.pSampleMask + sampleMaskArrayLen);
8564b9229de0ea1993c94c91016ba3f955509753fb0scygan	pSampleMask		= &m_sampleMask[0];
8574b9229de0ea1993c94c91016ba3f955509753fb0scygan}
8584b9229de0ea1993c94c91016ba3f955509753fb0scygan
859db4efd02b79d71e0d0b1122d01d1a20b37760527scyganPipelineCreateInfo::MultiSampleState& PipelineCreateInfo::MultiSampleState::operator= (const MultiSampleState& other)
8604b9229de0ea1993c94c91016ba3f955509753fb0scygan{
8616a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType = other.sType;
8626a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pNext = other.pNext;
863271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags					= other.flags;
8646a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	rasterizationSamples	= other.rasterizationSamples;
8656a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sampleShadingEnable		= other.sampleShadingEnable;
8666a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	minSampleShading		= other.minSampleShading;
8674b9229de0ea1993c94c91016ba3f955509753fb0scygan
8686a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	const size_t sampleMaskArrayLen = (sizeof(vk::VkSampleMask) * 8 + other.rasterizationSamples) / (sizeof(vk::VkSampleMask) * 8);
8696a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
8706a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_sampleMask	= std::vector<vk::VkSampleMask>(other.pSampleMask, other.pSampleMask + sampleMaskArrayLen);
8714b9229de0ea1993c94c91016ba3f955509753fb0scygan	pSampleMask		= &m_sampleMask[0];
8724b9229de0ea1993c94c91016ba3f955509753fb0scygan
8734b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
8744b9229de0ea1993c94c91016ba3f955509753fb0scygan}
8754b9229de0ea1993c94c91016ba3f955509753fb0scygan
8766a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::ColorBlendState::ColorBlendState (const std::vector<vk::VkPipelineColorBlendAttachmentState>&	_attachments,
8776a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkBool32													_logicOpEnable,
8786a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkLogicOp													_logicOp)
8794b9229de0ea1993c94c91016ba3f955509753fb0scygan	: m_attachments(_attachments)
8804b9229de0ea1993c94c91016ba3f955509753fb0scygan{
8814b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
882ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos	pNext = DE_NULL;
8836a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= 0u;
8844b9229de0ea1993c94c91016ba3f955509753fb0scygan	logicOpEnable			= _logicOpEnable;
8854b9229de0ea1993c94c91016ba3f955509753fb0scygan	logicOp					= _logicOp;
8864b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachmentCount			= static_cast<deUint32>(m_attachments.size());
8874b9229de0ea1993c94c91016ba3f955509753fb0scygan	pAttachments			= &m_attachments[0];
8884b9229de0ea1993c94c91016ba3f955509753fb0scygan}
8894b9229de0ea1993c94c91016ba3f955509753fb0scygan
8906a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::ColorBlendState::ColorBlendState (deUint32											_attachmentCount,
891db4efd02b79d71e0d0b1122d01d1a20b37760527scygan													  const vk::VkPipelineColorBlendAttachmentState*	_attachments,
8926a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkBool32										_logicOpEnable,
8936a2834ac40395173796b6e8d2a8e6c120d86ee74scygan													  vk::VkLogicOp										_logicOp)
8944b9229de0ea1993c94c91016ba3f955509753fb0scygan	: m_attachments(_attachments, _attachments + _attachmentCount)
8954b9229de0ea1993c94c91016ba3f955509753fb0scygan{
8964b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
897ae21c307c29a6efa73f3d4f2b25f0dd2c0b0e023Pyry Haulos	pNext	= DE_NULL;
898271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags					= 0u;
8994b9229de0ea1993c94c91016ba3f955509753fb0scygan	logicOpEnable			= _logicOpEnable;
9004b9229de0ea1993c94c91016ba3f955509753fb0scygan	logicOp					= _logicOp;
9014b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachmentCount			= static_cast<deUint32>(m_attachments.size());
9024b9229de0ea1993c94c91016ba3f955509753fb0scygan	pAttachments			= &m_attachments[0];
9034b9229de0ea1993c94c91016ba3f955509753fb0scygan}
9044b9229de0ea1993c94c91016ba3f955509753fb0scygan
905db4efd02b79d71e0d0b1122d01d1a20b37760527scyganPipelineCreateInfo::ColorBlendState::ColorBlendState (const vk::VkPipelineColorBlendStateCreateInfo& createInfo)
9064b9229de0ea1993c94c91016ba3f955509753fb0scygan	: m_attachments (createInfo.pAttachments, createInfo.pAttachments + createInfo.attachmentCount)
9074b9229de0ea1993c94c91016ba3f955509753fb0scygan{
9084b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = createInfo.sType;
9094b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = createInfo.pNext;
910271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags					= createInfo.flags;
9114b9229de0ea1993c94c91016ba3f955509753fb0scygan	logicOpEnable			= createInfo.logicOpEnable;
9124b9229de0ea1993c94c91016ba3f955509753fb0scygan	logicOp					= createInfo.logicOp;
9134b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachmentCount			= static_cast<deUint32>(m_attachments.size());
9144b9229de0ea1993c94c91016ba3f955509753fb0scygan	pAttachments			= &m_attachments[0];
9154b9229de0ea1993c94c91016ba3f955509753fb0scygan}
9164b9229de0ea1993c94c91016ba3f955509753fb0scygan
917db4efd02b79d71e0d0b1122d01d1a20b37760527scyganPipelineCreateInfo::ColorBlendState::ColorBlendState (const ColorBlendState& createInfo, std::vector<float> _blendConstants)
9184b9229de0ea1993c94c91016ba3f955509753fb0scygan	: m_attachments (createInfo.pAttachments, createInfo.pAttachments + createInfo.attachmentCount)
9194b9229de0ea1993c94c91016ba3f955509753fb0scygan{
9204b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = createInfo.sType;
9214b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = createInfo.pNext;
922271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags					= createInfo.flags;
9234b9229de0ea1993c94c91016ba3f955509753fb0scygan	logicOpEnable			= createInfo.logicOpEnable;
9244b9229de0ea1993c94c91016ba3f955509753fb0scygan	logicOp					= createInfo.logicOp;
9254b9229de0ea1993c94c91016ba3f955509753fb0scygan	attachmentCount			= static_cast<deUint32>(m_attachments.size());
9264b9229de0ea1993c94c91016ba3f955509753fb0scygan	pAttachments			= &m_attachments[0];
9276a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	deMemcpy(blendConstants, &_blendConstants[0], 4 * sizeof(float));
9284b9229de0ea1993c94c91016ba3f955509753fb0scygan}
9294b9229de0ea1993c94c91016ba3f955509753fb0scygan
9306a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::ColorBlendState::Attachment::Attachment (vk::VkBool32		_blendEnable,
9316a2834ac40395173796b6e8d2a8e6c120d86ee74scygan															 vk::VkBlendFactor	_srcColorBlendFactor,
9326a2834ac40395173796b6e8d2a8e6c120d86ee74scygan															 vk::VkBlendFactor	_dstColorBlendFactor,
9336a2834ac40395173796b6e8d2a8e6c120d86ee74scygan															 vk::VkBlendOp		_colorBlendOp,
9346a2834ac40395173796b6e8d2a8e6c120d86ee74scygan															 vk::VkBlendFactor	_srcAlphaBlendFactor,
9356a2834ac40395173796b6e8d2a8e6c120d86ee74scygan															 vk::VkBlendFactor	_dstAlphaBlendFactor,
9366a2834ac40395173796b6e8d2a8e6c120d86ee74scygan															 vk::VkBlendOp		_alphaBlendOp,
9376a2834ac40395173796b6e8d2a8e6c120d86ee74scygan															 deUint8			_colorWriteMask)
9384b9229de0ea1993c94c91016ba3f955509753fb0scygan{
9394b9229de0ea1993c94c91016ba3f955509753fb0scygan	blendEnable			= _blendEnable;
9406a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	srcColorBlendFactor	= _srcColorBlendFactor;
9416a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dstColorBlendFactor	= _dstColorBlendFactor;
9426a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	colorBlendOp		= _colorBlendOp;
9436a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	srcAlphaBlendFactor	= _srcAlphaBlendFactor;
9446a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	dstAlphaBlendFactor	= _dstAlphaBlendFactor;
9456a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	alphaBlendOp		= _alphaBlendOp;
9466a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	colorWriteMask	= _colorWriteMask;
9476a2834ac40395173796b6e8d2a8e6c120d86ee74scygan}
9486a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
9496a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::DepthStencilState::StencilOpState::StencilOpState (vk::VkStencilOp	_failOp,
9506a2834ac40395173796b6e8d2a8e6c120d86ee74scygan																	   vk::VkStencilOp	_passOp,
9516a2834ac40395173796b6e8d2a8e6c120d86ee74scygan																	   vk::VkStencilOp	_depthFailOp,
9526a2834ac40395173796b6e8d2a8e6c120d86ee74scygan																	   vk::VkCompareOp	_compareOp,
9536a2834ac40395173796b6e8d2a8e6c120d86ee74scygan																	   deUint32			_compareMask,
9546a2834ac40395173796b6e8d2a8e6c120d86ee74scygan																	   deUint32			_writeMask,
9556a2834ac40395173796b6e8d2a8e6c120d86ee74scygan																	   deUint32			_reference)
9566a2834ac40395173796b6e8d2a8e6c120d86ee74scygan{
9576a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	failOp		= _failOp;
9586a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	passOp		= _passOp;
9596a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	depthFailOp	= _depthFailOp;
9606a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	compareOp	= _compareOp;
9616a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
9626a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	compareMask	= _compareMask;
9636a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	writeMask	= _writeMask;
9646a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	reference	= _reference;
9656a2834ac40395173796b6e8d2a8e6c120d86ee74scygan}
9666a2834ac40395173796b6e8d2a8e6c120d86ee74scygan
9676a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo::DepthStencilState::DepthStencilState (vk::VkBool32		_depthTestEnable,
9686a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														  vk::VkBool32		_depthWriteEnable,
9696a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														  vk::VkCompareOp	_depthCompareOp,
9706a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														  vk::VkBool32		_depthBoundsTestEnable,
9716a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														  vk::VkBool32		_stencilTestEnable,
9726a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														  StencilOpState	_front,
9736a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														  StencilOpState	_back,
9746a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														  float				_minDepthBounds,
9756a2834ac40395173796b6e8d2a8e6c120d86ee74scygan														  float				_maxDepthBounds)
9764b9229de0ea1993c94c91016ba3f955509753fb0scygan{
9774b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
9784b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
9796a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= 0u;
9804b9229de0ea1993c94c91016ba3f955509753fb0scygan	depthTestEnable			= _depthTestEnable;
9814b9229de0ea1993c94c91016ba3f955509753fb0scygan	depthWriteEnable		= _depthWriteEnable;
9824b9229de0ea1993c94c91016ba3f955509753fb0scygan	depthCompareOp			= _depthCompareOp;
9834b9229de0ea1993c94c91016ba3f955509753fb0scygan	depthBoundsTestEnable	= _depthBoundsTestEnable;
9844b9229de0ea1993c94c91016ba3f955509753fb0scygan	stencilTestEnable		= _stencilTestEnable;
9854b9229de0ea1993c94c91016ba3f955509753fb0scygan	front	= _front;
9864b9229de0ea1993c94c91016ba3f955509753fb0scygan	back	= _back;
9874b9229de0ea1993c94c91016ba3f955509753fb0scygan
9884b9229de0ea1993c94c91016ba3f955509753fb0scygan	minDepthBounds = _minDepthBounds;
9894b9229de0ea1993c94c91016ba3f955509753fb0scygan	maxDepthBounds = _maxDepthBounds;
9904b9229de0ea1993c94c91016ba3f955509753fb0scygan}
9914b9229de0ea1993c94c91016ba3f955509753fb0scygan
9924b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo::DynamicState::DynamicState (const std::vector<vk::VkDynamicState>& _dynamicStates)
9934b9229de0ea1993c94c91016ba3f955509753fb0scygan{
9944b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
9954b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
996271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags = 0u;
9974b9229de0ea1993c94c91016ba3f955509753fb0scygan
9984b9229de0ea1993c94c91016ba3f955509753fb0scygan	if (!_dynamicStates.size())
9994b9229de0ea1993c94c91016ba3f955509753fb0scygan	{
10004b9229de0ea1993c94c91016ba3f955509753fb0scygan		for (size_t i = 0; i < vk::VK_DYNAMIC_STATE_LAST; ++i)
10014b9229de0ea1993c94c91016ba3f955509753fb0scygan		{
10024b9229de0ea1993c94c91016ba3f955509753fb0scygan			m_dynamicStates.push_back(static_cast<vk::VkDynamicState>(i));
10034b9229de0ea1993c94c91016ba3f955509753fb0scygan		}
10044b9229de0ea1993c94c91016ba3f955509753fb0scygan	}
10054b9229de0ea1993c94c91016ba3f955509753fb0scygan	else
10064b9229de0ea1993c94c91016ba3f955509753fb0scygan		m_dynamicStates = _dynamicStates;
10074b9229de0ea1993c94c91016ba3f955509753fb0scygan
10084b9229de0ea1993c94c91016ba3f955509753fb0scygan	dynamicStateCount = static_cast<deUint32>(m_dynamicStates.size());
10094b9229de0ea1993c94c91016ba3f955509753fb0scygan	pDynamicStates = &m_dynamicStates[0];
10104b9229de0ea1993c94c91016ba3f955509753fb0scygan}
10114b9229de0ea1993c94c91016ba3f955509753fb0scygan
10124b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo::DynamicState::DynamicState (const DynamicState &other)
10134b9229de0ea1993c94c91016ba3f955509753fb0scygan{
10146a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType = other.sType;
10154b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = other.pNext;
1016271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags = other.flags;
10174b9229de0ea1993c94c91016ba3f955509753fb0scygan
10184b9229de0ea1993c94c91016ba3f955509753fb0scygan	dynamicStateCount = other.dynamicStateCount;
10194b9229de0ea1993c94c91016ba3f955509753fb0scygan
10204b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_dynamicStates = std::vector<vk::VkDynamicState>(other.pDynamicStates, other.pDynamicStates + dynamicStateCount);
10214b9229de0ea1993c94c91016ba3f955509753fb0scygan	pDynamicStates = &m_dynamicStates[0];
10224b9229de0ea1993c94c91016ba3f955509753fb0scygan}
10234b9229de0ea1993c94c91016ba3f955509753fb0scygan
1024db4efd02b79d71e0d0b1122d01d1a20b37760527scyganPipelineCreateInfo::DynamicState& PipelineCreateInfo::DynamicState::operator= (const DynamicState& other)
10254b9229de0ea1993c94c91016ba3f955509753fb0scygan{
10266a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	sType = other.sType;
10274b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = other.pNext;
1028271724cff305eb9f013d5587ef3f213ed7c9e28bDae Kim	flags = other.flags;
10294b9229de0ea1993c94c91016ba3f955509753fb0scygan
10304b9229de0ea1993c94c91016ba3f955509753fb0scygan	dynamicStateCount = other.dynamicStateCount;
10314b9229de0ea1993c94c91016ba3f955509753fb0scygan
10324b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_dynamicStates = std::vector<vk::VkDynamicState>(other.pDynamicStates, other.pDynamicStates + dynamicStateCount);
10334b9229de0ea1993c94c91016ba3f955509753fb0scygan	pDynamicStates = &m_dynamicStates[0];
10344b9229de0ea1993c94c91016ba3f955509753fb0scygan
10354b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
10364b9229de0ea1993c94c91016ba3f955509753fb0scygan}
10374b9229de0ea1993c94c91016ba3f955509753fb0scygan
10384b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo::PipelineCreateInfo (vk::VkPipelineLayout		_layout,
10394b9229de0ea1993c94c91016ba3f955509753fb0scygan										vk::VkRenderPass			_renderPass,
10404b9229de0ea1993c94c91016ba3f955509753fb0scygan										int							_subpass,
10414b9229de0ea1993c94c91016ba3f955509753fb0scygan										vk::VkPipelineCreateFlags	_flags)
10424b9229de0ea1993c94c91016ba3f955509753fb0scygan{
10436a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	deMemset(static_cast<vk::VkGraphicsPipelineCreateInfo *>(this), 0,
10444b9229de0ea1993c94c91016ba3f955509753fb0scygan		sizeof(vk::VkGraphicsPipelineCreateInfo));
10454b9229de0ea1993c94c91016ba3f955509753fb0scygan
10464b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType = vk::VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
10474b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext = DE_NULL;
10486a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags				= _flags;
10494b9229de0ea1993c94c91016ba3f955509753fb0scygan	renderPass			= _renderPass;
10504b9229de0ea1993c94c91016ba3f955509753fb0scygan	subpass				= _subpass;
10514b9229de0ea1993c94c91016ba3f955509753fb0scygan	layout				= _layout;
10524b9229de0ea1993c94c91016ba3f955509753fb0scygan	basePipelineHandle	= DE_NULL;
10534b9229de0ea1993c94c91016ba3f955509753fb0scygan	basePipelineIndex	= 0;
10544b9229de0ea1993c94c91016ba3f955509753fb0scygan	pDynamicState		= DE_NULL;
10554b9229de0ea1993c94c91016ba3f955509753fb0scygan}
10564b9229de0ea1993c94c91016ba3f955509753fb0scygan
1057db4efd02b79d71e0d0b1122d01d1a20b37760527scyganPipelineCreateInfo& PipelineCreateInfo::addShader (const vk::VkPipelineShaderStageCreateInfo& shader)
10584b9229de0ea1993c94c91016ba3f955509753fb0scygan{
10594b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_shaders.push_back(shader);
10604b9229de0ea1993c94c91016ba3f955509753fb0scygan
10614b9229de0ea1993c94c91016ba3f955509753fb0scygan	stageCount	= static_cast<deUint32>(m_shaders.size());
10624b9229de0ea1993c94c91016ba3f955509753fb0scygan	pStages		= &m_shaders[0];
10634b9229de0ea1993c94c91016ba3f955509753fb0scygan
10644b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
10654b9229de0ea1993c94c91016ba3f955509753fb0scygan}
10664b9229de0ea1993c94c91016ba3f955509753fb0scygan
10674b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineVertexInputStateCreateInfo& state)
10684b9229de0ea1993c94c91016ba3f955509753fb0scygan{
10696a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_vertexInputState	= state;
10706a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pVertexInputState	= &m_vertexInputState;
10714b9229de0ea1993c94c91016ba3f955509753fb0scygan
10724b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
10734b9229de0ea1993c94c91016ba3f955509753fb0scygan}
10744b9229de0ea1993c94c91016ba3f955509753fb0scygan
10754b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineInputAssemblyStateCreateInfo& state)
10764b9229de0ea1993c94c91016ba3f955509753fb0scygan{
10776a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_inputAssemblyState = state;
10786a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pInputAssemblyState = &m_inputAssemblyState;
10794b9229de0ea1993c94c91016ba3f955509753fb0scygan
10804b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
10814b9229de0ea1993c94c91016ba3f955509753fb0scygan}
10824b9229de0ea1993c94c91016ba3f955509753fb0scygan
10834b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineColorBlendStateCreateInfo& state)
10844b9229de0ea1993c94c91016ba3f955509753fb0scygan{
10856a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_colorBlendStateAttachments	= std::vector<vk::VkPipelineColorBlendAttachmentState>(state.pAttachments, state.pAttachments + state.attachmentCount);
10866a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_colorBlendState				= state;
10876a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_colorBlendState.pAttachments	= &m_colorBlendStateAttachments[0];
10886a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pColorBlendState				= &m_colorBlendState;
10894b9229de0ea1993c94c91016ba3f955509753fb0scygan
10904b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
10914b9229de0ea1993c94c91016ba3f955509753fb0scygan}
10924b9229de0ea1993c94c91016ba3f955509753fb0scygan
10934b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineViewportStateCreateInfo& state)
10944b9229de0ea1993c94c91016ba3f955509753fb0scygan{
10956a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_viewports					= std::vector<vk::VkViewport>(state.pViewports, state.pViewports + state.viewportCount);
10966a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_scissors					= std::vector<vk::VkRect2D>(state.pScissors, state.pScissors + state.scissorCount);
10976a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_viewportState				= state;
10986a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_viewportState.pViewports	= &m_viewports[0];
10996a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_viewportState.pScissors	= &m_scissors[0];
11006a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pViewportState				= &m_viewportState;
11014b9229de0ea1993c94c91016ba3f955509753fb0scygan
11024b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
11034b9229de0ea1993c94c91016ba3f955509753fb0scygan}
11044b9229de0ea1993c94c91016ba3f955509753fb0scygan
11054b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineDepthStencilStateCreateInfo& state)
11064b9229de0ea1993c94c91016ba3f955509753fb0scygan{
11076a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_dynamicDepthStencilState	= state;
11086a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pDepthStencilState			= &m_dynamicDepthStencilState;
11094b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
11104b9229de0ea1993c94c91016ba3f955509753fb0scygan}
11114b9229de0ea1993c94c91016ba3f955509753fb0scygan
11124b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineTessellationStateCreateInfo& state)
11134b9229de0ea1993c94c91016ba3f955509753fb0scygan{
11146a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_tessState			= state;
11156a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pTessellationState	= &m_tessState;
11164b9229de0ea1993c94c91016ba3f955509753fb0scygan
11174b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
11184b9229de0ea1993c94c91016ba3f955509753fb0scygan}
11194b9229de0ea1993c94c91016ba3f955509753fb0scygan
11206a2834ac40395173796b6e8d2a8e6c120d86ee74scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineRasterizationStateCreateInfo& state)
11214b9229de0ea1993c94c91016ba3f955509753fb0scygan{
11226a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_rasterState		= state;
11236a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pRasterizationState	= &m_rasterState;
11244b9229de0ea1993c94c91016ba3f955509753fb0scygan
11254b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
11264b9229de0ea1993c94c91016ba3f955509753fb0scygan}
11274b9229de0ea1993c94c91016ba3f955509753fb0scygan
11284b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineMultisampleStateCreateInfo& state)
11294b9229de0ea1993c94c91016ba3f955509753fb0scygan{
11304b9229de0ea1993c94c91016ba3f955509753fb0scygan
11316a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	const size_t sampleMaskArrayLen = (sizeof(vk::VkSampleMask) * 8 + state.rasterizationSamples) / ( sizeof(vk::VkSampleMask) * 8 );
11324b9229de0ea1993c94c91016ba3f955509753fb0scygan	m_multisampleStateSampleMask	= std::vector<vk::VkSampleMask>(state.pSampleMask, state.pSampleMask + sampleMaskArrayLen);
11336a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_multisampleState				= state;
11346a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_multisampleState.pSampleMask	= &m_multisampleStateSampleMask[0];
11356a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pMultisampleState				= &m_multisampleState;
11364b9229de0ea1993c94c91016ba3f955509753fb0scygan
11374b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
11384b9229de0ea1993c94c91016ba3f955509753fb0scygan}
11394b9229de0ea1993c94c91016ba3f955509753fb0scyganPipelineCreateInfo& PipelineCreateInfo::addState (const vk::VkPipelineDynamicStateCreateInfo& state)
11404b9229de0ea1993c94c91016ba3f955509753fb0scygan{
11416a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_dynamicStates					= std::vector<vk::VkDynamicState>(state.pDynamicStates, state.pDynamicStates + state.dynamicStateCount);
11426a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_dynamicState					= state;
11436a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	m_dynamicState.pDynamicStates	= &m_dynamicStates[0];
11446a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	pDynamicState					= &m_dynamicState;
11454b9229de0ea1993c94c91016ba3f955509753fb0scygan
11464b9229de0ea1993c94c91016ba3f955509753fb0scygan	return *this;
11474b9229de0ea1993c94c91016ba3f955509753fb0scygan}
11484b9229de0ea1993c94c91016ba3f955509753fb0scygan
11496a2834ac40395173796b6e8d2a8e6c120d86ee74scyganSamplerCreateInfo::SamplerCreateInfo (vk::VkFilter				_magFilter,
1150db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkFilter				_minFilter,
1151db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkSamplerMipmapMode	_mipmapMode,
1152db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkSamplerAddressMode	_addressModeU,
1153db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkSamplerAddressMode	_addressModeV,
1154db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkSamplerAddressMode	_addressModeW,
1155db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  float						_mipLodBias,
1156689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos									  vk::VkBool32				_anisotropyEnable,
1157db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  float						_maxAnisotropy,
1158db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkBool32				_compareEnable,
1159db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkCompareOp			_compareOp,
1160db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  float						_minLod,
1161db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  float						_maxLod,
1162db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkBorderColor			_borderColor,
1163db4efd02b79d71e0d0b1122d01d1a20b37760527scygan									  vk::VkBool32				_unnormalizedCoordinates)
11644b9229de0ea1993c94c91016ba3f955509753fb0scygan{
11654b9229de0ea1993c94c91016ba3f955509753fb0scygan	sType					= vk::VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
11664b9229de0ea1993c94c91016ba3f955509753fb0scygan	pNext					= DE_NULL;
11676a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	flags					= 0u;
11684b9229de0ea1993c94c91016ba3f955509753fb0scygan	magFilter				= _magFilter;
11694b9229de0ea1993c94c91016ba3f955509753fb0scygan	minFilter				= _minFilter;
11706a2834ac40395173796b6e8d2a8e6c120d86ee74scygan	mipmapMode				= _mipmapMode;
11714b9229de0ea1993c94c91016ba3f955509753fb0scygan	addressModeU			= _addressModeU;
11724b9229de0ea1993c94c91016ba3f955509753fb0scygan	addressModeV			= _addressModeV;
11734b9229de0ea1993c94c91016ba3f955509753fb0scygan	addressModeW			= _addressModeW;
11744b9229de0ea1993c94c91016ba3f955509753fb0scygan	mipLodBias				= _mipLodBias;
1175689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos	anisotropyEnable		= _anisotropyEnable;
11764b9229de0ea1993c94c91016ba3f955509753fb0scygan	maxAnisotropy			= _maxAnisotropy;
11774b9229de0ea1993c94c91016ba3f955509753fb0scygan	compareEnable			= _compareEnable;
11784b9229de0ea1993c94c91016ba3f955509753fb0scygan	compareOp				= _compareOp;
11794b9229de0ea1993c94c91016ba3f955509753fb0scygan	minLod					= _minLod;
11804b9229de0ea1993c94c91016ba3f955509753fb0scygan	maxLod					= _maxLod;
11814b9229de0ea1993c94c91016ba3f955509753fb0scygan	borderColor				= _borderColor;
11824b9229de0ea1993c94c91016ba3f955509753fb0scygan	unnormalizedCoordinates = _unnormalizedCoordinates;
11834b9229de0ea1993c94c91016ba3f955509753fb0scygan}
11844b9229de0ea1993c94c91016ba3f955509753fb0scygan} // DynamicState
11854b9229de0ea1993c94c91016ba3f955509753fb0scygan} // vkt
1186