| 133 | namespace vvl { |
| 134 | |
| 135 | Image::Image(const vvl::DeviceState& dev_data, VkImage img, const VkImageCreateInfo* pCreateInfo, VkFormatFeatureFlags2 ff) |
| 136 | : Bindable(img, kVulkanObjectTypeImage, (GetImageCreateFlags(*pCreateInfo) & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) != 0, |
| 137 | (GetImageCreateFlags(*pCreateInfo) & VK_IMAGE_CREATE_PROTECTED_BIT) == 0, GetExternalHandleTypes(pCreateInfo)), |
| 138 | safe_create_info(pCreateInfo), |
| 139 | create_info(*safe_create_info.ptr()), |
| 140 | create_flags(GetImageCreateFlags(create_info)), |
| 141 | usage(GetImageUsageFlags(create_info)), |
| 142 | stencil_usage(GetImageStencilUsageFlags(pCreateInfo->pNext)), |
| 143 | layout_locked(false), |
| 144 | ahb_format(GetExternalFormat(pCreateInfo->pNext)), |
| 145 | full_range{MakeImageFullRange(create_info)}, |
| 146 | create_from_swapchain(GetSwapchain(pCreateInfo)), |
| 147 | owned_by_swapchain(false), |
| 148 | swapchain_image_index(0), |
| 149 | format_features(ff), |
| 150 | disjoint((create_flags & VK_IMAGE_CREATE_DISJOINT_BIT) != 0), |
| 151 | requirements(GetMemoryRequirements(dev_data, img, pCreateInfo, disjoint, IsExternalBuffer())), |
| 152 | sparse_residency((create_flags & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) != 0), |
| 153 | sparse_requirements(GetSparseRequirements(dev_data, img, sparse_residency)), |
| 154 | #ifdef VK_USE_PLATFORM_METAL_EXT |
| 155 | metal_image_export(GetMetalExport(pCreateInfo, VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT)), |
| 156 | metal_io_surface_export(GetMetalExport(pCreateInfo, VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT)), |
| 157 | #endif // VK_USE_PLATFORM_METAL_EXT |
| 158 | subresource_encoder(GetSubresourceEncoderRange(dev_data, full_range)), |
| 159 | store_device_as_workaround(dev_data.device), // TODO REMOVE WHEN encoder can be const |
| 160 | supported_video_profiles(dev_data.video_profile_cache_.Get( |
| 161 | dev_data.physical_device, vku::FindStructInPNextChain<VkVideoProfileListInfoKHR>(pCreateInfo->pNext))) { |
| 162 | if (create_flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) { |
| 163 | bool is_resident = (create_flags & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) != 0; |
| 164 | tracker_.emplace<BindableSparseMemoryTracker>(requirements.data(), is_resident); |
| 165 | SetMemoryTracker(&std::get<BindableSparseMemoryTracker>(tracker_)); |
| 166 | } else if (create_flags & VK_IMAGE_CREATE_DISJOINT_BIT) { |
| 167 | tracker_.emplace<BindableMultiplanarMemoryTracker>(requirements.data(), vkuFormatPlaneCount(pCreateInfo->format)); |
| 168 | SetMemoryTracker(&std::get<BindableMultiplanarMemoryTracker>(tracker_)); |
| 169 | } else { |
| 170 | tracker_.emplace<BindableLinearMemoryTracker>(requirements.data()); |
| 171 | SetMemoryTracker(&std::get<BindableLinearMemoryTracker>(tracker_)); |
| 172 | } |
| 173 | } |
| 174 | |
| 175 | Image::Image(const vvl::DeviceState& dev_data, VkImage img, const VkImageCreateInfo* pCreateInfo, VkSwapchainKHR swapchain, |
| 176 | uint32_t swapchain_index, VkFormatFeatureFlags2 ff) |
nothing calls this directly
no test coverage detected