| 25 | |
| 26 | #if RESHADE_ADDON |
| 27 | void create_default_view(reshade::vulkan::device_impl *device_impl, VkImage image) |
| 28 | { |
| 29 | if (image == VK_NULL_HANDLE) |
| 30 | return; |
| 31 | |
| 32 | const auto data = device_impl->get_private_data_for_object<VK_OBJECT_TYPE_IMAGE>(image); |
| 33 | assert(data->default_view == VK_NULL_HANDLE); |
| 34 | |
| 35 | // Need to create a default view that is used in 'vkCmdClearColorImage' and 'vkCmdClearDepthStencilImage' |
| 36 | if ((data->create_info.usage & (VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT)) != 0 && |
| 37 | (data->create_info.usage & (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) != 0) |
| 38 | { |
| 39 | VkImageViewCreateInfo default_view_info { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; |
| 40 | default_view_info.image = image; |
| 41 | default_view_info.viewType = static_cast<VkImageViewType>(data->create_info.imageType); // Map 'VK_IMAGE_TYPE_1D' to VK_IMAGE_VIEW_TYPE_1D' and so on |
| 42 | default_view_info.format = data->create_info.format; |
| 43 | default_view_info.subresourceRange.aspectMask = reshade::vulkan::aspect_flags_from_format(data->create_info.format); |
| 44 | default_view_info.subresourceRange.baseMipLevel = 0; |
| 45 | default_view_info.subresourceRange.levelCount = VK_REMAINING_MIP_LEVELS; |
| 46 | default_view_info.subresourceRange.baseArrayLayer = 0; |
| 47 | default_view_info.subresourceRange.layerCount = 1; // Non-array image view types can only contain a single layer |
| 48 | |
| 49 | vkCreateImageView(device_impl->_orig, &default_view_info, nullptr, &data->default_view); |
| 50 | } |
| 51 | } |
| 52 | void destroy_default_view(reshade::vulkan::device_impl *device_impl, VkImage image) |
| 53 | { |
| 54 | if (image == VK_NULL_HANDLE) |
no test coverage detected