1c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski/*------------------------------------------------------------------------
2c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Vulkan Conformance Tests
3c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * ------------------------
4c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
59a869c2848d0419008cb99f72c9fa372e3af805dPyry Haulos * Copyright (c) 2016 The Khronos Group Inc.
6c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
7978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License");
8978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License.
9978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at
10c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos *      http://www.apache.org/licenses/LICENSE-2.0
12c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
13978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software
14978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS,
15978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and
17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License.
18c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
19c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*!
20c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \file
21c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \brief Texture utility class
22c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*--------------------------------------------------------------------*/
23c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
240b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski#include "vktImageTexture.hpp"
25c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
26c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace vkt
27c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
28c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace image
29c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
30c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
317ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowskivoid Texture::checkInvariants (void) const
32c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
337ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	DE_ASSERT((m_numSamples == 1)  || (m_numSamples == 2)  || (m_numSamples == 4) || (m_numSamples == 8) ||
347ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski			  (m_numSamples == 16) || (m_numSamples == 32) || (m_numSamples == 64));
35c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_numLayers >= 1);
36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1);
3749c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos
387ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	switch (m_type)
39c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
40c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
437ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski			DE_ASSERT(m_numSamples == 1);
44c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
45c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
46c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
47c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
487ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski			DE_ASSERT(m_numSamples == 1);
49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
627ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski			DE_ASSERT(m_numSamples == 1);
63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 6);
64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
687ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski			DE_ASSERT(m_numSamples == 1);
69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0);
70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
747ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski			DE_ASSERT(m_numSamples == 1);
75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
770b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski
780b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
790b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
800b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			break;
81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	}
82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
83c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
847ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej JesionowskiTexture::Texture (const ImageType imageType, const tcu::IVec3& imageLayerSize, const int layers, const int samples)
857ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	: m_layerSize	(imageLayerSize)
867ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	, m_type		(imageType)
877ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	, m_numLayers	(layers)
887ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	, m_numSamples	(samples)
897ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski{
907ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	checkInvariants();
917ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski}
927ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski
937ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej JesionowskiTexture::Texture (const Texture& other, const int samples)
947ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	: m_layerSize	(other.m_layerSize)
957ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	, m_type		(other.m_type)
967ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	, m_numLayers	(other.m_numLayers)
977ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	, m_numSamples	(samples)
987ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski{
997ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski	checkInvariants();
1007ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski}
1017ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski
102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const
103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
108c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
109c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
110c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return m_layerSize;
111c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
112c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_numLayers, 1);
114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers);
119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1200b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1210b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1220b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return tcu::IVec3();
1230b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
124c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
125c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const
127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
132c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
133c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
134c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
135c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1440b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1450b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1460b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1470b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const
151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
154c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
155c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
156c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
157c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
158c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
159c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
160c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
161c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
162c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
163c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
164c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
165c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
166c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
167c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1680b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1690b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1700b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1710b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
172c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
173c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
174c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image
175c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt
176