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