1c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#ifndef _VKTPIPELINEIMAGEUTIL_HPP
2c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#define _VKTPIPELINEIMAGEUTIL_HPP
3c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim/*------------------------------------------------------------------------
4c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Vulkan Conformance Tests
5c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * ------------------------
6c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
7c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Copyright (c) 2015 The Khronos Group Inc.
8c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Copyright (c) 2015 Imagination Technologies Ltd.
9c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
10978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License");
11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License.
12978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at
13c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
14978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos *      http://www.apache.org/licenses/LICENSE-2.0
15c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software
17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS,
18978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and
20978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License.
21c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
22c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *//*!
23c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * \file
24c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * \brief Utilities for images.
25c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *//*--------------------------------------------------------------------*/
26c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
27c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "tcuDefs.hpp"
28c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vkDefs.hpp"
29c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vkDefs.hpp"
30c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vkPlatform.hpp"
31c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vkMemUtil.hpp"
32c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vkRef.hpp"
33c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "tcuTexture.hpp"
3483a6066224454de177655eb414dd3453c2059536Dae Kim#include "tcuCompressedTexture.hpp"
35c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
36c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimnamespace vkt
37c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
38c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimnamespace pipeline
39c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
40c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
4183a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTexture;
4283a6066224454de177655eb414dd3453c2059536Dae Kim
4383a6066224454de177655eb414dd3453c2059536Dae Kimenum BorderColor
4483a6066224454de177655eb414dd3453c2059536Dae Kim{
4583a6066224454de177655eb414dd3453c2059536Dae Kim	BORDER_COLOR_OPAQUE_BLACK,
4683a6066224454de177655eb414dd3453c2059536Dae Kim	BORDER_COLOR_OPAQUE_WHITE,
4783a6066224454de177655eb414dd3453c2059536Dae Kim	BORDER_COLOR_TRANSPARENT_BLACK,
4883a6066224454de177655eb414dd3453c2059536Dae Kim
4983a6066224454de177655eb414dd3453c2059536Dae Kim	BORDER_COLOR_COUNT
5083a6066224454de177655eb414dd3453c2059536Dae Kim};
5183a6066224454de177655eb414dd3453c2059536Dae Kim
52549732add51d3906362b924a946a015eef134df5Pyry Haulosbool							isSupportedSamplableFormat	(const vk::InstanceInterface&	instanceInterface,
53549732add51d3906362b924a946a015eef134df5Pyry Haulos															 vk::VkPhysicalDevice			device,
54549732add51d3906362b924a946a015eef134df5Pyry Haulos															 vk::VkFormat					format);
55549732add51d3906362b924a946a015eef134df5Pyry Haulosbool							isLinearFilteringSupported	(const vk::InstanceInterface&	instanceInterface,
56549732add51d3906362b924a946a015eef134df5Pyry Haulos															 vk::VkPhysicalDevice			device,
57549732add51d3906362b924a946a015eef134df5Pyry Haulos															 vk::VkFormat					format,
58549732add51d3906362b924a946a015eef134df5Pyry Haulos															 vk::VkImageTiling				tiling);
5983a6066224454de177655eb414dd3453c2059536Dae Kim
6083a6066224454de177655eb414dd3453c2059536Dae Kimvk::VkBorderColor				getFormatBorderColor		(BorderColor color, vk::VkFormat format);
6183a6066224454de177655eb414dd3453c2059536Dae Kim
62387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulosvoid							getLookupScaleBias			(vk::VkFormat					format,
63387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos															 tcu::Vec4&						lookupScale,
64387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos															 tcu::Vec4&						lookupBias);
65387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos
66c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim/*--------------------------------------------------------------------*//*!
67c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Gets a tcu::TextureLevel initialized with data from a VK color
68c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * attachment.
69c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
70c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * The VkImage must be non-multisampled and able to be used as a source
71c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * operand for transfer operations.
72c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *//*--------------------------------------------------------------------*/
7383a6066224454de177655eb414dd3453c2059536Dae Kimde::MovePtr<tcu::TextureLevel>	readColorAttachment			 (const vk::DeviceInterface&	vk,
7483a6066224454de177655eb414dd3453c2059536Dae Kim															  vk::VkDevice					device,
7583a6066224454de177655eb414dd3453c2059536Dae Kim															  vk::VkQueue					queue,
7683a6066224454de177655eb414dd3453c2059536Dae Kim															  deUint32						queueFamilyIndex,
7783a6066224454de177655eb414dd3453c2059536Dae Kim															  vk::Allocator&				allocator,
7883a6066224454de177655eb414dd3453c2059536Dae Kim															  vk::VkImage					image,
7983a6066224454de177655eb414dd3453c2059536Dae Kim															  vk::VkFormat					format,
80689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos															  const tcu::UVec2&				renderSize);
8183a6066224454de177655eb414dd3453c2059536Dae Kim
8283a6066224454de177655eb414dd3453c2059536Dae Kim/*--------------------------------------------------------------------*//*!
8383a6066224454de177655eb414dd3453c2059536Dae Kim * Uploads data from a test texture to a destination VK image.
8483a6066224454de177655eb414dd3453c2059536Dae Kim *
8583a6066224454de177655eb414dd3453c2059536Dae Kim * The VkImage must be non-multisampled and able to be used as a
8683a6066224454de177655eb414dd3453c2059536Dae Kim * destination operand for transfer operations.
8783a6066224454de177655eb414dd3453c2059536Dae Kim *//*--------------------------------------------------------------------*/
8894128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulosvoid							uploadTestTexture			(const vk::DeviceInterface&		vk,
8994128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos															 vk::VkDevice					device,
9094128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos															 vk::VkQueue					queue,
9194128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos															 deUint32						queueFamilyIndex,
9294128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos															 vk::Allocator&					allocator,
9394128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos															 const TestTexture&				testTexture,
9494128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos															 vk::VkImage					destImage);
9583a6066224454de177655eb414dd3453c2059536Dae Kim
9683a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTexture
9783a6066224454de177655eb414dd3453c2059536Dae Kim{
9883a6066224454de177655eb414dd3453c2059536Dae Kimpublic:
9983a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture					(const tcu::TextureFormat& format, int width, int height, int depth);
10083a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture					(const tcu::CompressedTexFormat& format, int width, int height, int depth);
10183a6066224454de177655eb414dd3453c2059536Dae Kim	virtual										~TestTexture				(void);
10283a6066224454de177655eb414dd3453c2059536Dae Kim
10383a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getNumLevels				(void) const = 0;
10483a6066224454de177655eb414dd3453c2059536Dae Kim	virtual deUint32							getSize						(void) const;
10583a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getArraySize				(void) const { return 1; }
10683a6066224454de177655eb414dd3453c2059536Dae Kim
10783a6066224454de177655eb414dd3453c2059536Dae Kim	virtual bool								isCompressed				(void) const { return !m_compressedLevels.empty(); }
10883a6066224454de177655eb414dd3453c2059536Dae Kim	virtual deUint32							getCompressedSize			(void) const;
10983a6066224454de177655eb414dd3453c2059536Dae Kim
11083a6066224454de177655eb414dd3453c2059536Dae Kim	virtual tcu::PixelBufferAccess				getLevel					(int level, int layer) = 0;
11183a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::ConstPixelBufferAccess	getLevel					(int level, int layer) const = 0;
11283a6066224454de177655eb414dd3453c2059536Dae Kim
11383a6066224454de177655eb414dd3453c2059536Dae Kim	virtual tcu::CompressedTexture&				getCompressedLevel			(int level, int layer);
11483a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::CompressedTexture&		getCompressedLevel			(int level, int layer) const;
11583a6066224454de177655eb414dd3453c2059536Dae Kim
11683a6066224454de177655eb414dd3453c2059536Dae Kim	virtual std::vector<vk::VkBufferImageCopy>	getBufferCopyRegions		(void) const;
11783a6066224454de177655eb414dd3453c2059536Dae Kim	virtual void								write						(deUint8* destPtr) const;
118d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	virtual de::MovePtr<TestTexture>			copy						(const tcu::TextureFormat) const = 0;
11994128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos
12041702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::TextureFormat&			getTextureFormat			(void) const = 0;
12141702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::UVec3							getTextureDimension			(void) const = 0;
12241702fa78437820bc601e604de6a490eb09513ddPeter Siket
12383a6066224454de177655eb414dd3453c2059536Dae Kimprotected:
12483a6066224454de177655eb414dd3453c2059536Dae Kim	void										populateLevels				(const std::vector<tcu::PixelBufferAccess>& levels);
1253a40c1645672ac36c31e4275b9b00ec3effa02c8Pyry Haulos	void										populateCompressedLevels	(tcu::CompressedTexFormat format, const std::vector<tcu::PixelBufferAccess>& decompressedLevels);
12683a6066224454de177655eb414dd3453c2059536Dae Kim
12783a6066224454de177655eb414dd3453c2059536Dae Kim	static void									fillWithGradient			(const tcu::PixelBufferAccess& levelAccess);
12894128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos
129d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	void										copyToTexture				(TestTexture&) const;
130d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan
13183a6066224454de177655eb414dd3453c2059536Dae Kimprotected:
13283a6066224454de177655eb414dd3453c2059536Dae Kim	std::vector<tcu::CompressedTexture*>		m_compressedLevels;
13383a6066224454de177655eb414dd3453c2059536Dae Kim};
13483a6066224454de177655eb414dd3453c2059536Dae Kim
13583a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTexture1D : public TestTexture
13683a6066224454de177655eb414dd3453c2059536Dae Kim{
13783a6066224454de177655eb414dd3453c2059536Dae Kimprivate:
13883a6066224454de177655eb414dd3453c2059536Dae Kim	tcu::Texture1D								m_texture;
13983a6066224454de177655eb414dd3453c2059536Dae Kim
14083a6066224454de177655eb414dd3453c2059536Dae Kimpublic:
14141702fa78437820bc601e604de6a490eb09513ddPeter Siket												TestTexture1D		(const tcu::TextureFormat& format, int width);
14241702fa78437820bc601e604de6a490eb09513ddPeter Siket												TestTexture1D		(const tcu::CompressedTexFormat& format, int width);
14341702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual										~TestTexture1D		(void);
14483a6066224454de177655eb414dd3453c2059536Dae Kim
14583a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int getNumLevels (void) const;
14641702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::PixelBufferAccess				getLevel			(int level, int layer);
14741702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::ConstPixelBufferAccess	getLevel			(int level, int layer) const;
14841702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::Texture1D&				getTexture			(void) const;
14941702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::Texture1D&						getTexture			(void);
15041702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::TextureFormat&			getTextureFormat	(void) const { return m_texture.getFormat(); }
15141702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::UVec3							getTextureDimension	(void) const { return tcu::UVec3(m_texture.getWidth(), 1, 1); }
152d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan
153d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	virtual de::MovePtr<TestTexture>			copy				(const tcu::TextureFormat) const;
15483a6066224454de177655eb414dd3453c2059536Dae Kim};
15583a6066224454de177655eb414dd3453c2059536Dae Kim
15683a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTexture1DArray : public TestTexture
15783a6066224454de177655eb414dd3453c2059536Dae Kim{
15883a6066224454de177655eb414dd3453c2059536Dae Kimprivate:
15983a6066224454de177655eb414dd3453c2059536Dae Kim	tcu::Texture1DArray							m_texture;
16083a6066224454de177655eb414dd3453c2059536Dae Kim
16183a6066224454de177655eb414dd3453c2059536Dae Kimpublic:
16283a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture1DArray	(const tcu::TextureFormat& format, int width, int arraySize);
16383a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture1DArray	(const tcu::CompressedTexFormat& format, int width, int arraySize);
16483a6066224454de177655eb414dd3453c2059536Dae Kim	virtual										~TestTexture1DArray	(void);
16583a6066224454de177655eb414dd3453c2059536Dae Kim
16683a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getNumLevels		(void) const;
16783a6066224454de177655eb414dd3453c2059536Dae Kim	virtual tcu::PixelBufferAccess				getLevel			(int level, int layer);
16883a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::ConstPixelBufferAccess	getLevel			(int level, int layer) const;
16983a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::Texture1DArray&			getTexture			(void) const;
17041702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::Texture1DArray&				getTexture			(void);
17183a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getArraySize		(void) const;
17241702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::TextureFormat&			getTextureFormat	(void) const { return m_texture.getFormat(); }
17341702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::UVec3							getTextureDimension	(void) const { return tcu::UVec3(m_texture.getWidth(), 1, 1); }
174d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan
175d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	virtual de::MovePtr<TestTexture>			copy				(const tcu::TextureFormat) const;
17683a6066224454de177655eb414dd3453c2059536Dae Kim};
17783a6066224454de177655eb414dd3453c2059536Dae Kim
17883a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTexture2D : public TestTexture
17983a6066224454de177655eb414dd3453c2059536Dae Kim{
18083a6066224454de177655eb414dd3453c2059536Dae Kimprivate:
18183a6066224454de177655eb414dd3453c2059536Dae Kim	tcu::Texture2D								m_texture;
18283a6066224454de177655eb414dd3453c2059536Dae Kim
18383a6066224454de177655eb414dd3453c2059536Dae Kimpublic:
18483a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture2D		(const tcu::TextureFormat& format, int width, int height);
18583a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture2D		(const tcu::CompressedTexFormat& format, int width, int height);
18683a6066224454de177655eb414dd3453c2059536Dae Kim	virtual										~TestTexture2D		(void);
18783a6066224454de177655eb414dd3453c2059536Dae Kim
18883a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getNumLevels		(void) const;
18983a6066224454de177655eb414dd3453c2059536Dae Kim	virtual tcu::PixelBufferAccess				getLevel			(int level, int layer);
19083a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::ConstPixelBufferAccess	getLevel			(int level, int layer) const;
19183a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::Texture2D&				getTexture			(void) const;
19241702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::Texture2D&						getTexture			(void);
19341702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::TextureFormat&			getTextureFormat	(void) const { return m_texture.getFormat(); }
19441702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::UVec3							getTextureDimension	(void) const { return tcu::UVec3(m_texture.getWidth(), m_texture.getHeight(), 1); }
195d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan
196d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	virtual de::MovePtr<TestTexture>			copy				(const tcu::TextureFormat) const;
19783a6066224454de177655eb414dd3453c2059536Dae Kim};
19883a6066224454de177655eb414dd3453c2059536Dae Kim
19983a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTexture2DArray : public TestTexture
20083a6066224454de177655eb414dd3453c2059536Dae Kim{
20183a6066224454de177655eb414dd3453c2059536Dae Kimprivate:
20283a6066224454de177655eb414dd3453c2059536Dae Kim	tcu::Texture2DArray	m_texture;
20383a6066224454de177655eb414dd3453c2059536Dae Kim
20483a6066224454de177655eb414dd3453c2059536Dae Kimpublic:
20583a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture2DArray	(const tcu::TextureFormat& format, int width, int height, int arraySize);
20683a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture2DArray	(const tcu::CompressedTexFormat& format, int width, int height, int arraySize);
20783a6066224454de177655eb414dd3453c2059536Dae Kim	virtual										~TestTexture2DArray	(void);
20883a6066224454de177655eb414dd3453c2059536Dae Kim
20983a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getNumLevels		(void) const;
21083a6066224454de177655eb414dd3453c2059536Dae Kim	virtual tcu::PixelBufferAccess				getLevel			(int level, int layer);
21183a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::ConstPixelBufferAccess	getLevel			(int level, int layer) const;
21283a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::Texture2DArray&			getTexture			(void) const;
21341702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::Texture2DArray&				getTexture			(void);
21483a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getArraySize		(void) const;
21541702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::TextureFormat&			getTextureFormat	(void) const { return m_texture.getFormat(); }
21641702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::UVec3							getTextureDimension	(void) const { return tcu::UVec3(m_texture.getWidth(), m_texture.getHeight(), 1); }
217d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan
218d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	virtual de::MovePtr<TestTexture>			copy				(const tcu::TextureFormat) const;
21983a6066224454de177655eb414dd3453c2059536Dae Kim};
22083a6066224454de177655eb414dd3453c2059536Dae Kim
22183a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTexture3D : public TestTexture
22283a6066224454de177655eb414dd3453c2059536Dae Kim{
22383a6066224454de177655eb414dd3453c2059536Dae Kimprivate:
22483a6066224454de177655eb414dd3453c2059536Dae Kim	tcu::Texture3D	m_texture;
22583a6066224454de177655eb414dd3453c2059536Dae Kim
22683a6066224454de177655eb414dd3453c2059536Dae Kimpublic:
22783a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture3D		(const tcu::TextureFormat& format, int width, int height, int depth);
22883a6066224454de177655eb414dd3453c2059536Dae Kim												TestTexture3D		(const tcu::CompressedTexFormat& format, int width, int height, int depth);
22983a6066224454de177655eb414dd3453c2059536Dae Kim	virtual										~TestTexture3D		(void);
23083a6066224454de177655eb414dd3453c2059536Dae Kim
23183a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getNumLevels		(void) const;
23283a6066224454de177655eb414dd3453c2059536Dae Kim	virtual tcu::PixelBufferAccess				getLevel			(int level, int layer);
23383a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::ConstPixelBufferAccess	getLevel			(int level, int layer) const;
23483a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::Texture3D&				getTexture			(void) const;
23541702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::Texture3D&						getTexture			(void);
23641702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::TextureFormat&			getTextureFormat	(void) const { return m_texture.getFormat(); }
23741702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::UVec3							getTextureDimension	(void) const { return tcu::UVec3(m_texture.getWidth(), m_texture.getHeight(), m_texture.getDepth()); }
238d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan
239d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	virtual de::MovePtr<TestTexture>			copy				(const tcu::TextureFormat) const;
24083a6066224454de177655eb414dd3453c2059536Dae Kim};
24183a6066224454de177655eb414dd3453c2059536Dae Kim
24283a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTextureCube : public TestTexture
24383a6066224454de177655eb414dd3453c2059536Dae Kim{
24483a6066224454de177655eb414dd3453c2059536Dae Kimprivate:
24583a6066224454de177655eb414dd3453c2059536Dae Kim	tcu::TextureCube							m_texture;
24683a6066224454de177655eb414dd3453c2059536Dae Kim
24783a6066224454de177655eb414dd3453c2059536Dae Kimpublic:
24883a6066224454de177655eb414dd3453c2059536Dae Kim												TestTextureCube			(const tcu::TextureFormat& format, int size);
24983a6066224454de177655eb414dd3453c2059536Dae Kim												TestTextureCube			(const tcu::CompressedTexFormat& format, int size);
25083a6066224454de177655eb414dd3453c2059536Dae Kim	virtual										~TestTextureCube		(void);
25183a6066224454de177655eb414dd3453c2059536Dae Kim
25283a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getNumLevels			(void) const;
25383a6066224454de177655eb414dd3453c2059536Dae Kim	virtual tcu::PixelBufferAccess				getLevel				(int level, int layer);
25483a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::ConstPixelBufferAccess	getLevel				(int level, int layer) const;
25583a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getArraySize			(void) const;
25683a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::TextureCube&				getTexture				(void) const;
25741702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::TextureCube&					getTexture				(void);
25841702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::TextureFormat&			getTextureFormat		(void) const { return m_texture.getFormat(); }
25941702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::UVec3							getTextureDimension		(void) const { return tcu::UVec3(m_texture.getSize(), m_texture.getSize(), 1); }
260d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan
261d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	virtual de::MovePtr<TestTexture>			copy					(const tcu::TextureFormat) const;
26283a6066224454de177655eb414dd3453c2059536Dae Kim};
26383a6066224454de177655eb414dd3453c2059536Dae Kim
26483a6066224454de177655eb414dd3453c2059536Dae Kimclass TestTextureCubeArray: public TestTexture
26583a6066224454de177655eb414dd3453c2059536Dae Kim{
26683a6066224454de177655eb414dd3453c2059536Dae Kimprivate:
26783a6066224454de177655eb414dd3453c2059536Dae Kim	tcu::TextureCubeArray						m_texture;
26883a6066224454de177655eb414dd3453c2059536Dae Kim
26983a6066224454de177655eb414dd3453c2059536Dae Kimpublic:
27083a6066224454de177655eb414dd3453c2059536Dae Kim												TestTextureCubeArray	(const tcu::TextureFormat& format, int size, int arraySize);
27183a6066224454de177655eb414dd3453c2059536Dae Kim												TestTextureCubeArray	(const tcu::CompressedTexFormat& format, int size, int arraySize);
27283a6066224454de177655eb414dd3453c2059536Dae Kim	virtual										~TestTextureCubeArray	(void);
27383a6066224454de177655eb414dd3453c2059536Dae Kim
27483a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getNumLevels			(void) const;
27583a6066224454de177655eb414dd3453c2059536Dae Kim	virtual tcu::PixelBufferAccess				getLevel				(int level, int layer);
27683a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::ConstPixelBufferAccess	getLevel				(int level, int layer) const;
27783a6066224454de177655eb414dd3453c2059536Dae Kim	virtual int									getArraySize			(void) const;
27883a6066224454de177655eb414dd3453c2059536Dae Kim	virtual const tcu::TextureCubeArray&		getTexture				(void) const;
27941702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::TextureCubeArray&				getTexture				(void);
28041702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual const tcu::TextureFormat&			getTextureFormat		(void) const { return m_texture.getFormat(); }
28141702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual tcu::UVec3							getTextureDimension		(void) const { return tcu::UVec3(m_texture.getSize(), m_texture.getSize(), 1); }
282d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan
283d766ec7288478fd296695e6be1dc02b29b2de3aeSzilard Ledan	virtual de::MovePtr<TestTexture>			copy					(const tcu::TextureFormat) const;
28483a6066224454de177655eb414dd3453c2059536Dae Kim};
285c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
286c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim} // pipeline
287c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim} // vkt
288c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
289c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#endif // _VKTPIPELINEIMAGEUTIL_HPP
290