vktImageTexture.cpp revision c56bfb7d0b64737b3fd543b792d3a5247611efe8
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
35c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski#include "vktTexture.hpp"
36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
37c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiusing namespace vk;
38c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
39c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace vkt
40c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace image
42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
43c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
44c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej JesionowskiTexture::Texture (const ImageType type, const tcu::IVec3& layerSize, const int layers)
45c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	: m_layerSize	(layerSize)
46c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	, m_type		(type)
47c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	, m_numLayers	(layers)
48c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_numLayers >= 1);
50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1);
51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (type)
52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1);
61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 6);
74c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0);
79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_layerSize.z() == 1);
80c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
83c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			DE_ASSERT(m_numLayers == 1);
84c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			break;
85c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	}
86c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
87c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const
89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return m_layerSize;
97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
98c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
99c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_numLayers, 1);
100c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
101c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers);
105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	}
106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_FATAL("Internal error");
108c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	return tcu::IVec3();
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	}
129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_FATAL("Internal error");
131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	return 0;
132c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
133c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
134c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const
135c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{
136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	switch (m_type)
137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	{
138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D:
139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_BUFFER:
140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_1D_ARRAY:
141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 1;
142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D:
144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_2D_ARRAY:
145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE:
146c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_CUBE_ARRAY:
147c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 2;
148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski		case IMAGE_TYPE_3D:
150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski			return 3;
151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	}
152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	DE_FATAL("Internal error");
154c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski	return 0;
155c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski}
156c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski
157c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image
158c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt
159