vktImageTexture.cpp revision 49c4f4f532ad8094b5de6fc6e2ec1c77db4066cc
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
4249c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry HaulosTexture::Texture (const ImageType type_, const tcu::IVec3& layerSize_, const int layers)
4349c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	: m_layerSize	(layerSize_)
4449c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	, 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);
4949c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos
5049c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	switch (type_)
51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 6);
73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
74c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0);
78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
80c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
83c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
840b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski
850b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
860b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
870b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			break;
88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	}
89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const
92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
98c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
99c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return m_layerSize;
100c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
101c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_numLayers, 1);
103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers);
108c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1090b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1100b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1110b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return tcu::IVec3();
1120b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const
116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
120c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
121c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
122c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
123c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
124c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
125c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
132c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1330b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1340b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1350b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1360b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const
140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
146c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
147c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
154c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
155c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
156c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1570b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1580b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1590b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1600b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
161c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
162c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
163c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image
164c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt
165