vktImageTexture.cpp revision 0b28fcc70473fa4194a1dca3515c6dbb5ad26bd9
1c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski/*------------------------------------------------------------------------
2c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Vulkan Conformance Tests
3c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * ------------------------
4c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
5c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Copyright (c) 2015 Mobica Ltd.
6c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
7c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Permission is hereby granted, free of charge, to any person obtaining a
8c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * copy of this software and/or associated documentation files (the
9c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * "Materials"), to deal in the Materials without restriction, including
10c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * without limitation the rights to use, copy, modify, merge, publish,
11c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * distribute, sublicense, and/or sell copies of the Materials, and to
12c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * permit persons to whom the Materials are furnished to do so, subject to
13c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * the following conditions:
14c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
15c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * The above copyright notice(s) and this permission notice shall be included
16c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * in all copies or substantial portions of the Materials.
17c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
18c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * The Materials are Confidential Information as defined by the
19c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Khronos Membership Agreement until designated non-confidential by Khronos,
20c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * at which point this condition clause shall be removed.
21c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
22c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
26c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
29c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
30c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*!
31c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \file
32c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \brief Texture utility class
33c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*--------------------------------------------------------------------*/
34c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
350b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski#include "vktImageTexture.hpp"
36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
37c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace vkt
38c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
39c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace image
40c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej JesionowskiTexture::Texture (const ImageType type, const tcu::IVec3& layerSize, const int layers)
43c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	: m_layerSize	(layerSize)
44c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	, m_type		(type)
45c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	, m_numLayers	(layers)
46c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
47c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_numLayers >= 1);
48c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1);
49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (type)
50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 6);
72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
74c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0);
77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
80c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
830b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski
840b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
850b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
860b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			break;
87c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	}
88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const
91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
98c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return m_layerSize;
99c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
100c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
101c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_numLayers, 1);
102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers);
107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1080b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1090b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1100b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return tcu::IVec3();
1110b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
112c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const
115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
120c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
121c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
122c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
123c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
124c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
125c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1320b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1330b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1340b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1350b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const
139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
146c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
147c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
154c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
155c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1560b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1570b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1580b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1590b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
160c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
161c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
162c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image
163c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt
164