1 /*
2  * Copyright © 2020 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  *
23  * Author:
24  *    Eleni Maria Stea <estea@igalia.com>
25  */
26 
27 #ifndef PARAMS_H
28 #define PARAMS_H
29 
30 #include "interop.h"
31 
32 uint32_t w;
33 uint32_t h;
34 uint32_t d = 1;
35 uint32_t num_samples = 1;
36 uint32_t num_levels = 1;
37 uint32_t num_layers = 1;
38 VkFormat color_format = VK_FORMAT_R32G32B32A32_SFLOAT;
39 VkFormat depth_format = VK_FORMAT_D32_SFLOAT;
40 VkImageUsageFlagBits color_usage = VK_IMAGE_USAGE_SAMPLED_BIT |
41 				   VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
42 				   VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
43 VkImageUsageFlagBits depth_usage = VK_IMAGE_USAGE_SAMPLED_BIT |
44 				   VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
45 VkImageTiling color_tiling = VK_IMAGE_TILING_OPTIMAL;
46 VkImageTiling depth_tiling = VK_IMAGE_TILING_OPTIMAL;
47 VkImageLayout color_in_layout = VK_IMAGE_LAYOUT_UNDEFINED;
48 VkImageLayout color_end_layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
49 VkImageLayout depth_in_layout = VK_IMAGE_LAYOUT_UNDEFINED;
50 VkImageLayout depth_end_layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
51 
52 const struct format_mapping vk_gl_format[] =
53 {
54 	{ "RGBA 4 UNORM linear", GL_RGBA4, VK_FORMAT_R4G4B4A4_UNORM_PACK16, FLOAT_FS, 4, 4, 4, 4,
55 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
56 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
57 	{ "RGBA 4 UNORM optimal", GL_RGBA4, VK_FORMAT_R4G4B4A4_UNORM_PACK16, FLOAT_FS, 4, 4, 4, 4,
58 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
59 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT },
60 
61 	{ "RGB 5 A1 UNORM linear", GL_RGB5_A1, VK_FORMAT_R5G5B5A1_UNORM_PACK16, FLOAT_FS, 5, 5, 5, 1,
62 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
63 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
64 	{ "RGB 5 A1 UNORM optimal",  GL_RGB5_A1, VK_FORMAT_R5G5B5A1_UNORM_PACK16, FLOAT_FS, 5, 5, 5, 1,
65 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
66 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT },
67 
68 	{ "RGBA 8 UNORM linear", GL_RGBA8, VK_FORMAT_R8G8B8A8_UNORM, FLOAT_FS, 8, 8, 8, 8,
69 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
70 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
71 	{ "RGBA 8 UNORM optimal", GL_RGBA8, VK_FORMAT_R8G8B8A8_UNORM, FLOAT_FS, 8, 8, 8, 8,
72 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
73 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
74 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
75 
76 	{ "RGBA 8 SNORM linear", GL_RGBA8_SNORM, VK_FORMAT_R8G8B8A8_SNORM, INT_FS, 8, 8, 8, 8,
77 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
78 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
79 	{ "RGBA 8 SNORM optimal", GL_RGBA8_SNORM, VK_FORMAT_R8G8B8A8_SNORM, INT_FS, 8, 8, 8, 8,
80 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
81 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
82 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
83 
84 	{ "RGBA 8 SRGB linear", GL_SRGB8_ALPHA8, VK_FORMAT_R8G8B8A8_SRGB, FLOAT_FS, 8, 8, 8, 8,
85 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
86 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
87 	{ "RGBA 8 SRGB optimal", GL_SRGB8_ALPHA8, VK_FORMAT_R8G8B8A8_SRGB, FLOAT_FS, 8, 8, 8, 8,
88 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
89 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
90 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
91 
92 	{ "RGBA 8 INT linear", GL_RGBA8I, VK_FORMAT_R8G8B8A8_SINT, INT_FS , 8, 8, 8, 8,
93 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
94 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
95 	{ "RGBA 8 INT optimal", GL_RGBA8I, VK_FORMAT_R8G8B8A8_SINT, INT_FS , 8, 8, 8, 8,
96 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
97 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
98 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
99 
100 	{ "RGBA 8 UINT linear", GL_RGBA8UI, VK_FORMAT_R8G8B8A8_UINT, UINT_FS, 8, 8, 8, 8,
101 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
102 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
103 	{ "RGBA 8 UINT optimal", GL_RGBA8UI, VK_FORMAT_R8G8B8A8_UINT, UINT_FS, 8, 8, 8, 8,
104 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
105 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
106 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
107 
108 	{ "RGB 10 A2 UNORM linear", GL_RGB10_A2, VK_FORMAT_A2R10G10B10_UNORM_PACK32, FLOAT_FS, 10, 10, 10, 2,
109 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
110 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
111 	{ "RGB 10 A2 UNORM optimal", GL_RGB10_A2, VK_FORMAT_A2R10G10B10_UNORM_PACK32, FLOAT_FS, 10, 10, 10, 2,
112 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
113 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
114 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
115 
116 	{ "RGB 10 A2 UINT linear", GL_RGB10_A2UI, VK_FORMAT_A2R10G10B10_UINT_PACK32, UINT_FS, 10, 10, 10, 2,
117 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
118 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
119 	{ "RGB 10 A2 UINT optimal", GL_RGB10_A2UI, VK_FORMAT_A2R10G10B10_UINT_PACK32, UINT_FS, 10, 10, 10, 2,
120 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
121 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT },
122 
123 	{ "RGBA 12 UNORM linear", GL_RGBA12, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, FLOAT_FS, 12, 12, 12, 12,
124 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
125 					VK_IMAGE_USAGE_TRANSFER_DST_BIT },
126 	{ "RGBA 12 UNORM optimal", GL_RGBA12, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, FLOAT_FS, 12, 12, 12, 12,
127 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
128 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT },
129 
130 	{ "RGBA 16 UNORM linear", GL_RGBA16, VK_FORMAT_R16G16B16A16_UNORM, FLOAT_FS, 16, 16, 16, 16,
131 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
132 					VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
133 					VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
134 	{ "RGBA 16 UNORM optimal", GL_RGBA16, VK_FORMAT_R16G16B16A16_UNORM, FLOAT_FS, 16, 16, 16, 16,
135 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
136 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
137 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
138 
139 	{ "RGBA 16 SNORM linear", GL_RGBA16_SNORM, VK_FORMAT_R16G16B16A16_SNORM, INT_FS, 16, 16, 16, 16,
140 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
141 					VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
142 					VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
143 	{ "RGBA 16 SNORM optimal", GL_RGBA16_SNORM, VK_FORMAT_R16G16B16A16_SNORM, INT_FS, 16, 16, 16, 16,
144 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
145 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
146 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
147 
148 	{ "RGBA 16 SFLOAT linear", GL_RGBA16F, VK_FORMAT_R16G16B16A16_SFLOAT, FLOAT_FS, 16, 16, 16, 16,
149 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
150 					VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
151 					VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
152 	{ "RGBA 16 SFLOAT optimal", GL_RGBA16F, VK_FORMAT_R16G16B16A16_SFLOAT, FLOAT_FS, 16, 16, 16, 16,
153 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
154 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
155 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
156 
157 	{ "RGBA 16 INT linear", GL_RGBA16I, VK_FORMAT_R16G16B16A16_SINT, INT_FS, 16, 16, 16, 16,
158 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
159 					VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
160 					VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
161 	{ "RGBA 16 INT optimal", GL_RGBA16I, VK_FORMAT_R16G16B16A16_SINT, INT_FS, 16, 16, 16, 16,
162 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
163 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
164 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
165 
166 	{ "RGBA 16 UINT linear", GL_RGBA16UI, VK_FORMAT_R16G16B16A16_UINT, UINT_FS, 16, 16, 16, 16,
167 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
168 					VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
169 					VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
170 	{ "RGBA 16 UINT optimal", GL_RGBA16UI, VK_FORMAT_R16G16B16A16_UINT, UINT_FS, 16, 16, 16, 16,
171 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
172 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
173 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
174 
175 	{ "RGBA 32 SFLOAT linear", GL_RGBA32F, VK_FORMAT_R32G32B32A32_SFLOAT, FLOAT_FS , 32, 32, 32, 32,
176 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
177 					VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
178 					VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
179 	{ "RGBA 32 SFLOAT optimal", GL_RGBA32F, VK_FORMAT_R32G32B32A32_SFLOAT, FLOAT_FS , 32, 32, 32, 32,
180 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
181 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
182 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
183 
184 	{ "RGBA 32 INT linear", GL_RGBA32I, VK_FORMAT_R32G32B32A32_SINT, INT_FS, 32, 32, 32, 32,
185 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
186 					VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
187 					VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
188 	{ "RGBA 32 INT optimal", GL_RGBA32I, VK_FORMAT_R32G32B32A32_SINT, INT_FS, 32, 32, 32, 32,
189 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
190 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
191 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
192 
193 	{ "RGBA 32 UINT linear", GL_RGBA32UI, VK_FORMAT_R32G32B32A32_UINT, FLOAT_FS , 32, 32, 32, 32,
194 		VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
195 					VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
196 					VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
197 	{ "RGBA 32 UINT optimal", GL_RGBA32UI, VK_FORMAT_R32G32B32A32_UINT, FLOAT_FS , 32, 32, 32, 32,
198 		VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
199 					 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT|
200 					 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT },
201 };
202 
203 #endif /* PARAMS_H */
204