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
3149c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry HaulosTexture::Texture (const ImageType type_, const tcu::IVec3& layerSize_, const int layers)
3249c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	: m_layerSize	(layerSize_)
3349c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	, m_type		(type_)
34c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	, m_numLayers	(layers)
35c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_numLayers >= 1);
37c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1);
3849c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos
3949c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	switch (type_)
40c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
43c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 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:
48c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 6);
62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0);
67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
730b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski
740b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
750b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
760b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			break;
77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	}
78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
80c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const
81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
83c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
84c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
85c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
86c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
87c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return m_layerSize;
89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_numLayers, 1);
92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers);
97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
980b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
990b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1000b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return tcu::IVec3();
1010b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const
105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
108c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
109c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
110c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
111c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
112c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
120c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
121c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1220b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1230b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1240b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1250b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const
129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
132c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
133c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
134c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
135c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1460b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1470b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1480b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1490b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image
153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt
154