vktImageTexture.cpp revision 9a869c2848d0419008cb99f72c9fa372e3af805d
1c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski/*------------------------------------------------------------------------
2c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Vulkan Conformance Tests
3c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * ------------------------
4c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
59a869c2848d0419008cb99f72c9fa372e3af805dPyry Haulos * Copyright (c) 2016 The Khronos Group Inc.
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 PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
25c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *
26c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*!
27c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \file
28c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \brief Texture utility class
29c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*--------------------------------------------------------------------*/
30c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
310b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski#include "vktImageTexture.hpp"
32c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
33c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace vkt
34c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
35c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace image
36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
37c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
3849c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry HaulosTexture::Texture (const ImageType type_, const tcu::IVec3& layerSize_, const int layers)
3949c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	: m_layerSize	(layerSize_)
4049c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	, m_type		(type_)
41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	, m_numLayers	(layers)
42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
43c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_numLayers >= 1);
44c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1);
4549c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos
4649c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos	switch (type_)
47c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
48c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 6);
69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0);
74c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
800b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski
810b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
820b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
830b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			break;
84c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	}
85c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
86c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
87c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const
88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return m_layerSize;
96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
98c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_numLayers, 1);
99c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
100c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
101c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers);
104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1050b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1060b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1070b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return tcu::IVec3();
1080b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
109c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
110c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
111c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const
112c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
120c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
121c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
122c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
123c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
124c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
125c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1290b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1300b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1310b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1320b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
133c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
134c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
135c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const
136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
146c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
147c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
1530b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski		default:
1540b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			DE_FATAL("Internal error");
1550b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski			return 0;
1560b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski	}
157c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
158c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
159c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image
160c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt
161