| 279 | } |
| 280 | |
| 281 | static void* create2_func(GraphicContext* ctx, CommandBuffer* buffer, const uint64_t* params, GpuMemoryScenario scenario, |
| 282 | const Vector<GpuMemoryObject>& objects, VulkanMemory* mem) |
| 283 | { |
| 284 | KYTY_PROFILER_BLOCK("RenderTextureObject::CreateFromObjects"); |
| 285 | |
| 286 | EXIT_IF(objects.IsEmpty()); |
| 287 | EXIT_IF(mem == nullptr); |
| 288 | EXIT_IF(ctx == nullptr); |
| 289 | |
| 290 | auto pixel_format = params[RenderTextureObject::PARAM_FORMAT]; |
| 291 | auto width = params[RenderTextureObject::PARAM_WIDTH]; |
| 292 | auto height = params[RenderTextureObject::PARAM_HEIGHT]; |
| 293 | |
| 294 | VkFormat vk_format = VK_FORMAT_UNDEFINED; |
| 295 | |
| 296 | switch (pixel_format) |
| 297 | { |
| 298 | case static_cast<uint64_t>(RenderTextureFormat::R8Unorm): vk_format = VK_FORMAT_R8_UNORM; break; |
| 299 | case static_cast<uint64_t>(RenderTextureFormat::R8G8B8A8Unorm): vk_format = VK_FORMAT_R8G8B8A8_UNORM; break; |
| 300 | case static_cast<uint64_t>(RenderTextureFormat::R8G8B8A8Srgb): vk_format = VK_FORMAT_R8G8B8A8_SRGB; break; |
| 301 | case static_cast<uint64_t>(RenderTextureFormat::B8G8R8A8Unorm): vk_format = VK_FORMAT_B8G8R8A8_UNORM; break; |
| 302 | case static_cast<uint64_t>(RenderTextureFormat::B8G8R8A8Srgb): vk_format = VK_FORMAT_B8G8R8A8_SRGB; break; |
| 303 | default: EXIT("unknown format: %" PRIu64 "\n", pixel_format); |
| 304 | } |
| 305 | |
| 306 | EXIT_NOT_IMPLEMENTED(width == 0); |
| 307 | EXIT_NOT_IMPLEMENTED(height == 0); |
| 308 | |
| 309 | auto* vk_obj = new RenderTextureVulkanImage; |
| 310 | |
| 311 | vk_obj->extent.width = width; |
| 312 | vk_obj->extent.height = height; |
| 313 | vk_obj->format = vk_format; |
| 314 | vk_obj->image = nullptr; |
| 315 | |
| 316 | for (auto& view: vk_obj->image_view) |
| 317 | { |
| 318 | view = nullptr; |
| 319 | } |
| 320 | |
| 321 | VkImageCreateInfo image_info {}; |
| 322 | image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; |
| 323 | image_info.pNext = nullptr; |
| 324 | image_info.flags = 0; |
| 325 | image_info.imageType = VK_IMAGE_TYPE_2D; |
| 326 | image_info.extent.width = vk_obj->extent.width; |
| 327 | image_info.extent.height = vk_obj->extent.height; |
| 328 | image_info.extent.depth = 1; |
| 329 | image_info.mipLevels = 1; |
| 330 | image_info.arrayLayers = 1; |
| 331 | image_info.format = vk_obj->format; |
| 332 | image_info.tiling = VK_IMAGE_TILING_OPTIMAL; |
| 333 | image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; |
| 334 | image_info.usage = static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) | |
| 335 | static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_TRANSFER_SRC_BIT) | |
| 336 | static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_TRANSFER_DST_BIT) | |
| 337 | static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_SAMPLED_BIT); |
| 338 | image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; |
nothing calls this directly
no test coverage detected