141702fa78437820bc601e604de6a490eb09513ddPeter Siket#ifndef _VKTTEXTURETESTUTIL_HPP
241702fa78437820bc601e604de6a490eb09513ddPeter Siket#define _VKTTEXTURETESTUTIL_HPP
341702fa78437820bc601e604de6a490eb09513ddPeter Siket/*------------------------------------------------------------------------
441702fa78437820bc601e604de6a490eb09513ddPeter Siket * Vulkan Conformance Tests
541702fa78437820bc601e604de6a490eb09513ddPeter Siket * ------------------------
641702fa78437820bc601e604de6a490eb09513ddPeter Siket *
741702fa78437820bc601e604de6a490eb09513ddPeter Siket * Copyright (c) 2016 The Khronos Group Inc.
841702fa78437820bc601e604de6a490eb09513ddPeter Siket * Copyright (c) 2016 Samsung Electronics Co., Ltd.
941702fa78437820bc601e604de6a490eb09513ddPeter Siket * Copyright (c) 2014 The Android Open Source Project
1041702fa78437820bc601e604de6a490eb09513ddPeter Siket *
1141702fa78437820bc601e604de6a490eb09513ddPeter Siket * Licensed under the Apache License, Version 2.0 (the "License");
1241702fa78437820bc601e604de6a490eb09513ddPeter Siket * you may not use this file except in compliance with the License.
1341702fa78437820bc601e604de6a490eb09513ddPeter Siket * You may obtain a copy of the License at
1441702fa78437820bc601e604de6a490eb09513ddPeter Siket *
1541702fa78437820bc601e604de6a490eb09513ddPeter Siket *      http://www.apache.org/licenses/LICENSE-2.0
1641702fa78437820bc601e604de6a490eb09513ddPeter Siket *
1741702fa78437820bc601e604de6a490eb09513ddPeter Siket * Unless required by applicable law or agreed to in writing, software
1841702fa78437820bc601e604de6a490eb09513ddPeter Siket * distributed under the License is distributed on an "AS IS" BASIS,
1941702fa78437820bc601e604de6a490eb09513ddPeter Siket * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2041702fa78437820bc601e604de6a490eb09513ddPeter Siket * See the License for the specific language governing permissions and
2141702fa78437820bc601e604de6a490eb09513ddPeter Siket * limitations under the License.
2241702fa78437820bc601e604de6a490eb09513ddPeter Siket *
2341702fa78437820bc601e604de6a490eb09513ddPeter Siket *//*!
2441702fa78437820bc601e604de6a490eb09513ddPeter Siket * \file
2541702fa78437820bc601e604de6a490eb09513ddPeter Siket * \brief Texture test utilities.
2641702fa78437820bc601e604de6a490eb09513ddPeter Siket *
2741702fa78437820bc601e604de6a490eb09513ddPeter Siket * About coordinates:
2841702fa78437820bc601e604de6a490eb09513ddPeter Siket *  + Quads consist of 2 triangles, rendered using explicit indices.
2941702fa78437820bc601e604de6a490eb09513ddPeter Siket *  + All TextureTestUtil functions and classes expect texture coordinates
3041702fa78437820bc601e604de6a490eb09513ddPeter Siket *    for quads to be specified in order (-1, -1), (-1, 1), (1, -1), (1, 1).
3141702fa78437820bc601e604de6a490eb09513ddPeter Siket *//*--------------------------------------------------------------------*/
3241702fa78437820bc601e604de6a490eb09513ddPeter Siket
3341702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "tcuDefs.hpp"
3441702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "tcuSurface.hpp"
3541702fa78437820bc601e604de6a490eb09513ddPeter Siket
3641702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vkDefs.hpp"
3741702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vktTestCase.hpp"
3841702fa78437820bc601e604de6a490eb09513ddPeter Siket
3941702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "gluShaderProgram.hpp"
4041702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "gluTextureTestUtil.hpp"
4141702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "deSharedPtr.hpp"
4241702fa78437820bc601e604de6a490eb09513ddPeter Siket
4341702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "../pipeline/vktPipelineImageUtil.hpp"
4441702fa78437820bc601e604de6a490eb09513ddPeter Siket
4541702fa78437820bc601e604de6a490eb09513ddPeter Siketnamespace vkt
4641702fa78437820bc601e604de6a490eb09513ddPeter Siket{
4741702fa78437820bc601e604de6a490eb09513ddPeter Siket
4841702fa78437820bc601e604de6a490eb09513ddPeter Siketnamespace texture
4941702fa78437820bc601e604de6a490eb09513ddPeter Siket{
5041702fa78437820bc601e604de6a490eb09513ddPeter Siket
5141702fa78437820bc601e604de6a490eb09513ddPeter Siketnamespace util
5241702fa78437820bc601e604de6a490eb09513ddPeter Siket{
5341702fa78437820bc601e604de6a490eb09513ddPeter Siket
5441702fa78437820bc601e604de6a490eb09513ddPeter Siketenum Program
5541702fa78437820bc601e604de6a490eb09513ddPeter Siket{
5641702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_FLOAT = 0,
5741702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_INT,
5841702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_UINT,
5941702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_SHADOW,
6041702fa78437820bc601e604de6a490eb09513ddPeter Siket
6141702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_FLOAT_BIAS,
6241702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_INT_BIAS,
6341702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_UINT_BIAS,
6441702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_SHADOW_BIAS,
6541702fa78437820bc601e604de6a490eb09513ddPeter Siket
6641702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_FLOAT,
6741702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_INT,
6841702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_UINT,
6941702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_SHADOW,
7041702fa78437820bc601e604de6a490eb09513ddPeter Siket
7141702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_FLOAT_BIAS,
7241702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_INT_BIAS,
7341702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_UINT_BIAS,
7441702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_SHADOW_BIAS,
7541702fa78437820bc601e604de6a490eb09513ddPeter Siket
7641702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_FLOAT,
7741702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_INT,
7841702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_UINT,
7941702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_SHADOW,
8041702fa78437820bc601e604de6a490eb09513ddPeter Siket
8141702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_FLOAT_BIAS,
8241702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_INT_BIAS,
8341702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_UINT_BIAS,
8441702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_SHADOW_BIAS,
8541702fa78437820bc601e604de6a490eb09513ddPeter Siket
8641702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_ARRAY_FLOAT,
8741702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_ARRAY_INT,
8841702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_ARRAY_UINT,
8941702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_1D_ARRAY_SHADOW,
9041702fa78437820bc601e604de6a490eb09513ddPeter Siket
9141702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_ARRAY_FLOAT,
9241702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_ARRAY_INT,
9341702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_ARRAY_UINT,
9441702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_2D_ARRAY_SHADOW,
9541702fa78437820bc601e604de6a490eb09513ddPeter Siket
9641702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_3D_FLOAT,
9741702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_3D_INT,
9841702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_3D_UINT,
9941702fa78437820bc601e604de6a490eb09513ddPeter Siket
10041702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_3D_FLOAT_BIAS,
10141702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_3D_INT_BIAS,
10241702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_3D_UINT_BIAS,
10341702fa78437820bc601e604de6a490eb09513ddPeter Siket
10441702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_ARRAY_FLOAT,
10541702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_ARRAY_INT,
10641702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_ARRAY_UINT,
10741702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_CUBE_ARRAY_SHADOW,
10841702fa78437820bc601e604de6a490eb09513ddPeter Siket
10941702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_BUFFER_FLOAT,
11041702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_BUFFER_INT,
11141702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_BUFFER_UINT,
11241702fa78437820bc601e604de6a490eb09513ddPeter Siket
11341702fa78437820bc601e604de6a490eb09513ddPeter Siket	PROGRAM_LAST
11441702fa78437820bc601e604de6a490eb09513ddPeter Siket};
11541702fa78437820bc601e604de6a490eb09513ddPeter Siket
11641702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid initializePrograms(vk::SourceCollections& programCollection, glu::Precision texCoordPrecision, const std::vector<Program>& programs);
11741702fa78437820bc601e604de6a490eb09513ddPeter Siket
11841702fa78437820bc601e604de6a490eb09513ddPeter Sikettypedef de::SharedPtr<pipeline::TestTexture>		TestTextureSp;
11941702fa78437820bc601e604de6a490eb09513ddPeter Sikettypedef de::SharedPtr<pipeline::TestTexture2D>		TestTexture2DSp;
12041702fa78437820bc601e604de6a490eb09513ddPeter Sikettypedef de::SharedPtr<pipeline::TestTextureCube>	TestTextureCubeSp;
12141702fa78437820bc601e604de6a490eb09513ddPeter Sikettypedef de::SharedPtr<pipeline::TestTexture2DArray>	TestTexture2DArraySp;
12241702fa78437820bc601e604de6a490eb09513ddPeter Sikettypedef de::SharedPtr<pipeline::TestTexture3D>		TestTexture3DSp;
12341702fa78437820bc601e604de6a490eb09513ddPeter Siket
12441702fa78437820bc601e604de6a490eb09513ddPeter Siketclass TextureBinding {
12541702fa78437820bc601e604de6a490eb09513ddPeter Siketpublic:
12641702fa78437820bc601e604de6a490eb09513ddPeter Siket	enum Type
12741702fa78437820bc601e604de6a490eb09513ddPeter Siket	{
12841702fa78437820bc601e604de6a490eb09513ddPeter Siket		TYPE_NONE = 0,
12941702fa78437820bc601e604de6a490eb09513ddPeter Siket		TYPE_2D,
13041702fa78437820bc601e604de6a490eb09513ddPeter Siket		TYPE_CUBE_MAP,
13141702fa78437820bc601e604de6a490eb09513ddPeter Siket		TYPE_2D_ARRAY,
13241702fa78437820bc601e604de6a490eb09513ddPeter Siket		TYPE_3D,
13341702fa78437820bc601e604de6a490eb09513ddPeter Siket
13441702fa78437820bc601e604de6a490eb09513ddPeter Siket		TYPE_LAST
13541702fa78437820bc601e604de6a490eb09513ddPeter Siket	};
13641702fa78437820bc601e604de6a490eb09513ddPeter Siket										TextureBinding				(Context& context);
13741702fa78437820bc601e604de6a490eb09513ddPeter Siket										TextureBinding				(Context& context, const TestTextureSp& textureData, const Type type);
13841702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::VkImage							getImage					(void) { return *m_textureImage; }
13941702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::VkImageView						getImageView				(void) { return *m_textureImageView; }
14041702fa78437820bc601e604de6a490eb09513ddPeter Siket	Type								getType						(void) { return m_type; }
14141702fa78437820bc601e604de6a490eb09513ddPeter Siket	const pipeline::TestTexture&		getTestTexture				(void) { return *m_textureData; }
14241702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								updateTextureViewMipLevels	(deUint32 baseLevel, deUint32 maxLevel);
14341702fa78437820bc601e604de6a490eb09513ddPeter Siket
14441702fa78437820bc601e604de6a490eb09513ddPeter Siketprivate:
14541702fa78437820bc601e604de6a490eb09513ddPeter Siket										TextureBinding				(const TextureBinding&);	// not allowed!
14641702fa78437820bc601e604de6a490eb09513ddPeter Siket	TextureBinding&						operator=					(const TextureBinding&);	// not allowed!
14741702fa78437820bc601e604de6a490eb09513ddPeter Siket
14841702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								updateTextureData			(const TestTextureSp& textureData, const Type type);
14941702fa78437820bc601e604de6a490eb09513ddPeter Siket
15041702fa78437820bc601e604de6a490eb09513ddPeter Siket	Context&							m_context;
15141702fa78437820bc601e604de6a490eb09513ddPeter Siket	Type								m_type;
15241702fa78437820bc601e604de6a490eb09513ddPeter Siket	TestTextureSp						m_textureData;
15341702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkImage>				m_textureImage;
15441702fa78437820bc601e604de6a490eb09513ddPeter Siket	de::MovePtr<vk::Allocation>			m_textureImageMemory;
15541702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkImageView>			m_textureImageView;
15641702fa78437820bc601e604de6a490eb09513ddPeter Siket};
15741702fa78437820bc601e604de6a490eb09513ddPeter Siket
15841702fa78437820bc601e604de6a490eb09513ddPeter Sikettypedef de::SharedPtr<TextureBinding>	TextureBindingSp;
15941702fa78437820bc601e604de6a490eb09513ddPeter Siket
16041702fa78437820bc601e604de6a490eb09513ddPeter Siketclass TextureRenderer
16141702fa78437820bc601e604de6a490eb09513ddPeter Siket{
16241702fa78437820bc601e604de6a490eb09513ddPeter Siketpublic:
16341702fa78437820bc601e604de6a490eb09513ddPeter Siket										TextureRenderer				(Context& context, vk::VkSampleCountFlagBits sampleCount, deUint32 renderWidth, deUint32 renderHeight);
16441702fa78437820bc601e604de6a490eb09513ddPeter Siket										~TextureRenderer			(void);
16541702fa78437820bc601e604de6a490eb09513ddPeter Siket
16641702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								renderQuad					(tcu::Surface& result, int texUnit, const float* texCoord, glu::TextureTestUtil::TextureType texType);
16741702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								renderQuad					(tcu::Surface& result, int texUnit, const float* texCoord, const glu::TextureTestUtil::ReferenceParams& params);
168b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa	void								renderQuad					(tcu::Surface&									result,
169b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa																	 const float*									positions,
170b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa																	 const int										texUnit,
171b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa																	 const float*									texCoord,
172b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa																	 const glu::TextureTestUtil::ReferenceParams&	params,
173b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa																	 const float									maxAnisotropy);
17441702fa78437820bc601e604de6a490eb09513ddPeter Siket
17541702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								clearImage					(vk::VkImage image);
17641702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								add2DTexture				(const TestTexture2DSp& texture);
17741702fa78437820bc601e604de6a490eb09513ddPeter Siket	const pipeline::TestTexture2D&		get2DTexture				(int textureIndex) const;
17841702fa78437820bc601e604de6a490eb09513ddPeter Siket
17941702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								addCubeTexture				(const TestTextureCubeSp& texture);
18041702fa78437820bc601e604de6a490eb09513ddPeter Siket	const pipeline::TestTextureCube&	getCubeTexture				(int textureIndex) const;
18141702fa78437820bc601e604de6a490eb09513ddPeter Siket
18241702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								add2DArrayTexture			(const TestTexture2DArraySp& texture);
18341702fa78437820bc601e604de6a490eb09513ddPeter Siket	const pipeline::TestTexture2DArray&	get2DArrayTexture			(int textureIndex) const;
18441702fa78437820bc601e604de6a490eb09513ddPeter Siket
18541702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								add3DTexture				(const TestTexture3DSp& texture);
18641702fa78437820bc601e604de6a490eb09513ddPeter Siket	const pipeline::TestTexture3D&		get3DTexture				(int textureIndex) const;
18741702fa78437820bc601e604de6a490eb09513ddPeter Siket
18841702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								setViewport					(float viewportX, float viewportY, float viewportW, float viewportH);
18941702fa78437820bc601e604de6a490eb09513ddPeter Siket
19041702fa78437820bc601e604de6a490eb09513ddPeter Siket	TextureBinding*						getTextureBinding			(int textureIndex) const;
19141702fa78437820bc601e604de6a490eb09513ddPeter Siket
19241702fa78437820bc601e604de6a490eb09513ddPeter Siket	deUint32							getRenderWidth				(void) const;
19341702fa78437820bc601e604de6a490eb09513ddPeter Siket	deUint32							getRenderHeight				(void) const;
19441702fa78437820bc601e604de6a490eb09513ddPeter Siket
19541702fa78437820bc601e604de6a490eb09513ddPeter Siketprotected:
19641702fa78437820bc601e604de6a490eb09513ddPeter Siket										TextureRenderer				(const TextureRenderer& other);
19741702fa78437820bc601e604de6a490eb09513ddPeter Siket	TextureRenderer&					operator=					(const TextureRenderer& other);
19841702fa78437820bc601e604de6a490eb09513ddPeter Siket
19941702fa78437820bc601e604de6a490eb09513ddPeter Siket	Context&							m_context;
20041702fa78437820bc601e604de6a490eb09513ddPeter Siket	tcu::TestLog&						m_log;
20141702fa78437820bc601e604de6a490eb09513ddPeter Siket
20241702fa78437820bc601e604de6a490eb09513ddPeter Siket	const deUint32						m_renderWidth;
20341702fa78437820bc601e604de6a490eb09513ddPeter Siket	const deUint32						m_renderHeight;
20441702fa78437820bc601e604de6a490eb09513ddPeter Siket	const vk::VkSampleCountFlagBits		m_sampleCount;
20541702fa78437820bc601e604de6a490eb09513ddPeter Siket	const deBool						m_multisampling;
20641702fa78437820bc601e604de6a490eb09513ddPeter Siket
20741702fa78437820bc601e604de6a490eb09513ddPeter Siket	const vk::VkFormat					m_imageFormat;
20841702fa78437820bc601e604de6a490eb09513ddPeter Siket	const tcu::TextureFormat			m_textureFormat;
20941702fa78437820bc601e604de6a490eb09513ddPeter Siket
21041702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkImage>				m_image;
21141702fa78437820bc601e604de6a490eb09513ddPeter Siket	de::MovePtr<vk::Allocation>			m_imageMemory;
21241702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkImageView>			m_imageView;
21341702fa78437820bc601e604de6a490eb09513ddPeter Siket
21441702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkImage>				m_resolvedImage;
21541702fa78437820bc601e604de6a490eb09513ddPeter Siket	de::MovePtr<vk::Allocation>			m_resolvedImageMemory;
21641702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkImageView>			m_resolvedImageView;
21741702fa78437820bc601e604de6a490eb09513ddPeter Siket
21841702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkCommandPool>			m_commandPool;
21941702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkRenderPass>			m_renderPass;
22041702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkFramebuffer>			m_frameBuffer;
22141702fa78437820bc601e604de6a490eb09513ddPeter Siket
22241702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkDescriptorPool>		m_descriptorPool;
22341702fa78437820bc601e604de6a490eb09513ddPeter Siket
22441702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkBuffer>				m_uniformBuffer;
22541702fa78437820bc601e604de6a490eb09513ddPeter Siket	de::MovePtr<vk::Allocation>			m_uniformBufferMemory;
22641702fa78437820bc601e604de6a490eb09513ddPeter Siket	const vk::VkDeviceSize				m_uniformBufferSize;
22741702fa78437820bc601e604de6a490eb09513ddPeter Siket
22841702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkBuffer>				m_vertexIndexBuffer;
22941702fa78437820bc601e604de6a490eb09513ddPeter Siket	de::MovePtr<vk::Allocation>			m_vertexIndexBufferMemory;
23041702fa78437820bc601e604de6a490eb09513ddPeter Siket	static const vk::VkDeviceSize		s_vertexIndexBufferSize;
23141702fa78437820bc601e604de6a490eb09513ddPeter Siket	static const deUint16				s_vertexIndices[6];
23241702fa78437820bc601e604de6a490eb09513ddPeter Siket
23341702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkFence>				m_fence;
23441702fa78437820bc601e604de6a490eb09513ddPeter Siket
23541702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkBuffer>				m_resultBuffer;
23641702fa78437820bc601e604de6a490eb09513ddPeter Siket	de::MovePtr<vk::Allocation>			m_resultBufferMemory;
23741702fa78437820bc601e604de6a490eb09513ddPeter Siket	const vk::VkDeviceSize				m_resultBufferSize;
23841702fa78437820bc601e604de6a490eb09513ddPeter Siket
23941702fa78437820bc601e604de6a490eb09513ddPeter Siket	std::vector<TextureBindingSp>		m_textureBindings;
24041702fa78437820bc601e604de6a490eb09513ddPeter Siket
24141702fa78437820bc601e604de6a490eb09513ddPeter Siket	float								m_viewportOffsetX;
24241702fa78437820bc601e604de6a490eb09513ddPeter Siket	float								m_viewportOffsetY;
24341702fa78437820bc601e604de6a490eb09513ddPeter Siket	float								m_viewportWidth;
24441702fa78437820bc601e604de6a490eb09513ddPeter Siket	float								m_viewportHeight;
24541702fa78437820bc601e604de6a490eb09513ddPeter Siket
24641702fa78437820bc601e604de6a490eb09513ddPeter Siketprivate:
24741702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::Move<vk::VkDescriptorSet>		makeDescriptorSet			(const vk::VkDescriptorPool descriptorPool, const vk::VkDescriptorSetLayout setLayout) const;
24841702fa78437820bc601e604de6a490eb09513ddPeter Siket	void								addImageTransitionBarrier	(vk::VkCommandBuffer commandBuffer, vk::VkImage image, vk::VkPipelineStageFlags srcStageMask, vk::VkPipelineStageFlags dstStageMask, vk::VkAccessFlags srcAccessMask, vk::VkAccessFlags dstAccessMask, vk::VkImageLayout oldLayout, vk::VkImageLayout newLayout) const;
24941702fa78437820bc601e604de6a490eb09513ddPeter Siket
25041702fa78437820bc601e604de6a490eb09513ddPeter Siket};
25141702fa78437820bc601e604de6a490eb09513ddPeter Siket
25241702fa78437820bc601e604de6a490eb09513ddPeter Sikettcu::Sampler createSampler (tcu::Sampler::WrapMode wrapU, tcu::Sampler::WrapMode wrapV, tcu::Sampler::WrapMode wrapW, tcu::Sampler::FilterMode minFilterMode, tcu::Sampler::FilterMode magFilterMode);
25341702fa78437820bc601e604de6a490eb09513ddPeter Sikettcu::Sampler createSampler (tcu::Sampler::WrapMode wrapU, tcu::Sampler::WrapMode wrapV, tcu::Sampler::FilterMode minFilterMode, tcu::Sampler::FilterMode magFilterMode);
25441702fa78437820bc601e604de6a490eb09513ddPeter Sikettcu::Sampler createSampler (tcu::Sampler::WrapMode wrapU, tcu::Sampler::FilterMode minFilterMode, tcu::Sampler::FilterMode magFilterMode);
25541702fa78437820bc601e604de6a490eb09513ddPeter Siket
25641702fa78437820bc601e604de6a490eb09513ddPeter SiketTestTexture2DSp loadTexture2D (const tcu::Archive& archive, const std::vector<std::string>& filenames);
25741702fa78437820bc601e604de6a490eb09513ddPeter SiketTestTextureCubeSp loadTextureCube (const tcu::Archive& archive, const std::vector<std::string>& filenames);
25841702fa78437820bc601e604de6a490eb09513ddPeter Siket
25941702fa78437820bc601e604de6a490eb09513ddPeter Sikettemplate <typename INSTANCE_TYPE>
26041702fa78437820bc601e604de6a490eb09513ddPeter Siketclass TextureTestCase : public TestCase
26141702fa78437820bc601e604de6a490eb09513ddPeter Siket{
26241702fa78437820bc601e604de6a490eb09513ddPeter Siketpublic:
26341702fa78437820bc601e604de6a490eb09513ddPeter Siket										TextureTestCase	(tcu::TestContext& context, const std::string& name, const std::string& description, const typename INSTANCE_TYPE::ParameterType& testParameters)
26441702fa78437820bc601e604de6a490eb09513ddPeter Siket												: TestCase				(context, name, description)
26541702fa78437820bc601e604de6a490eb09513ddPeter Siket												, m_testsParameters		(testParameters)
26641702fa78437820bc601e604de6a490eb09513ddPeter Siket										{}
26741702fa78437820bc601e604de6a490eb09513ddPeter Siket
26841702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual TestInstance*				createInstance				(Context& context) const
26941702fa78437820bc601e604de6a490eb09513ddPeter Siket										{
27041702fa78437820bc601e604de6a490eb09513ddPeter Siket											return new INSTANCE_TYPE(context, m_testsParameters);
27141702fa78437820bc601e604de6a490eb09513ddPeter Siket										}
27241702fa78437820bc601e604de6a490eb09513ddPeter Siket
27341702fa78437820bc601e604de6a490eb09513ddPeter Siket	virtual void						initPrograms				(vk::SourceCollections& programCollection) const
27441702fa78437820bc601e604de6a490eb09513ddPeter Siket										{
27541702fa78437820bc601e604de6a490eb09513ddPeter Siket											initializePrograms(programCollection, m_testsParameters.texCoordPrecision, m_testsParameters.programs);
27641702fa78437820bc601e604de6a490eb09513ddPeter Siket										}
27741702fa78437820bc601e604de6a490eb09513ddPeter Siket
27841702fa78437820bc601e604de6a490eb09513ddPeter Siketprotected:
27941702fa78437820bc601e604de6a490eb09513ddPeter Siket	const typename INSTANCE_TYPE::ParameterType m_testsParameters;
28041702fa78437820bc601e604de6a490eb09513ddPeter Siket};
28141702fa78437820bc601e604de6a490eb09513ddPeter Siket
28241702fa78437820bc601e604de6a490eb09513ddPeter Siketstruct TextureCommonTestCaseParameters
28341702fa78437820bc601e604de6a490eb09513ddPeter Siket{
28441702fa78437820bc601e604de6a490eb09513ddPeter Siket								TextureCommonTestCaseParameters	(void);
28541702fa78437820bc601e604de6a490eb09513ddPeter Siket
28641702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::VkSampleCountFlagBits	sampleCount;
28741702fa78437820bc601e604de6a490eb09513ddPeter Siket	glu::Precision				texCoordPrecision;
28841702fa78437820bc601e604de6a490eb09513ddPeter Siket
28941702fa78437820bc601e604de6a490eb09513ddPeter Siket	tcu::Sampler::FilterMode	minFilter;
29041702fa78437820bc601e604de6a490eb09513ddPeter Siket	tcu::Sampler::FilterMode	magFilter;
29141702fa78437820bc601e604de6a490eb09513ddPeter Siket	tcu::Sampler::WrapMode		wrapS;
29241702fa78437820bc601e604de6a490eb09513ddPeter Siket	tcu::Sampler::WrapMode		wrapT;
29341702fa78437820bc601e604de6a490eb09513ddPeter Siket
29441702fa78437820bc601e604de6a490eb09513ddPeter Siket	vk::VkFormat				format;
29541702fa78437820bc601e604de6a490eb09513ddPeter Siket
29641702fa78437820bc601e604de6a490eb09513ddPeter Siket	std::vector<util::Program>	programs;
29741702fa78437820bc601e604de6a490eb09513ddPeter Siket};
29841702fa78437820bc601e604de6a490eb09513ddPeter Siket
29941702fa78437820bc601e604de6a490eb09513ddPeter Siketstruct Texture2DTestCaseParameters : public TextureCommonTestCaseParameters
30041702fa78437820bc601e604de6a490eb09513ddPeter Siket{
30141702fa78437820bc601e604de6a490eb09513ddPeter Siket								Texture2DTestCaseParameters		(void);
30241702fa78437820bc601e604de6a490eb09513ddPeter Siket	int							width;
30341702fa78437820bc601e604de6a490eb09513ddPeter Siket	int							height;
30441702fa78437820bc601e604de6a490eb09513ddPeter Siket};
30541702fa78437820bc601e604de6a490eb09513ddPeter Siket
30641702fa78437820bc601e604de6a490eb09513ddPeter Siketstruct TextureCubeTestCaseParameters : public TextureCommonTestCaseParameters
30741702fa78437820bc601e604de6a490eb09513ddPeter Siket{
30841702fa78437820bc601e604de6a490eb09513ddPeter Siket								TextureCubeTestCaseParameters	(void);
30941702fa78437820bc601e604de6a490eb09513ddPeter Siket	int							size;
31041702fa78437820bc601e604de6a490eb09513ddPeter Siket};
31141702fa78437820bc601e604de6a490eb09513ddPeter Siket
31241702fa78437820bc601e604de6a490eb09513ddPeter Siketstruct Texture2DArrayTestCaseParameters : public Texture2DTestCaseParameters
31341702fa78437820bc601e604de6a490eb09513ddPeter Siket{
31441702fa78437820bc601e604de6a490eb09513ddPeter Siket								Texture2DArrayTestCaseParameters(void);
31541702fa78437820bc601e604de6a490eb09513ddPeter Siket	int							numLayers;
31641702fa78437820bc601e604de6a490eb09513ddPeter Siket};
31741702fa78437820bc601e604de6a490eb09513ddPeter Siket
31841702fa78437820bc601e604de6a490eb09513ddPeter Siketstruct Texture3DTestCaseParameters : public Texture2DTestCaseParameters
31941702fa78437820bc601e604de6a490eb09513ddPeter Siket{
32041702fa78437820bc601e604de6a490eb09513ddPeter Siket								Texture3DTestCaseParameters		(void);
32141702fa78437820bc601e604de6a490eb09513ddPeter Siket	tcu::Sampler::WrapMode		wrapR;
32241702fa78437820bc601e604de6a490eb09513ddPeter Siket	int							depth;
32341702fa78437820bc601e604de6a490eb09513ddPeter Siket};
32441702fa78437820bc601e604de6a490eb09513ddPeter Siket
32541702fa78437820bc601e604de6a490eb09513ddPeter Siket} // util
32641702fa78437820bc601e604de6a490eb09513ddPeter Siket} // texture
32741702fa78437820bc601e604de6a490eb09513ddPeter Siket} // vkt
32841702fa78437820bc601e604de6a490eb09513ddPeter Siket
32941702fa78437820bc601e604de6a490eb09513ddPeter Siket#endif // _VKTTEXTURETESTUTIL_HPP
330