#include "state_tracker/image_state.h"
#include "state_tracker/pipeline_state.h"
#include "state_tracker/descriptor_sets.h"
#include "state_tracker/shader_module.h"
static VkImageSubresourceRange MakeImageFullRange(const VkImageCreateInfo &create_info) { … }
VkImageSubresourceRange NormalizeSubresourceRange(const VkImageCreateInfo &image_create_info,
const VkImageSubresourceRange &range) { … }
static bool IsDepthSliced(const VkImageCreateInfo &image_create_info, const VkImageViewCreateInfo &create_info) { … }
VkImageSubresourceRange NormalizeSubresourceRange(const VkImageCreateInfo &image_create_info,
const VkImageViewCreateInfo &create_info) { … }
static VkExternalMemoryHandleTypeFlags GetExternalHandleTypes(const VkImageCreateInfo *pCreateInfo) { … }
static VkSwapchainKHR GetSwapchain(const VkImageCreateInfo *pCreateInfo) { … }
static vvl::Image::MemoryReqs GetMemoryRequirements(const ValidationStateTracker &dev_data, VkImage img,
const VkImageCreateInfo *create_info, bool disjoint, bool is_external_ahb) { … }
static vvl::Image::SparseReqs GetSparseRequirements(const ValidationStateTracker &dev_data, VkImage img, bool sparse_residency) { … }
static bool SparseMetaDataRequired(const vvl::Image::SparseReqs &sparse_reqs) { … }
#ifdef VK_USE_PLATFORM_METAL_EXT
static bool GetMetalExport(const VkImageCreateInfo *info, VkExportMetalObjectTypeFlagBitsEXT object_type_required) {
bool retval = false;
auto export_metal_object_info = vku::FindStructInPNextChain<VkExportMetalObjectCreateInfoEXT>(info->pNext);
while (export_metal_object_info) {
if (export_metal_object_info->exportObjectType == object_type_required) {
retval = true;
break;
}
export_metal_object_info = vku::FindStructInPNextChain<VkExportMetalObjectCreateInfoEXT>(export_metal_object_info->pNext);
}
return retval;
}
#endif
namespace vvl {
Image::Image(const ValidationStateTracker &dev_data, VkImage img, const VkImageCreateInfo *pCreateInfo, VkFormatFeatureFlags2KHR ff)
: … { … }
Image::Image(const ValidationStateTracker &dev_data, VkImage img, const VkImageCreateInfo *pCreateInfo, VkSwapchainKHR swapchain,
uint32_t swapchain_index, VkFormatFeatureFlags2KHR ff)
: … { … }
void Image::Destroy() { … }
void Image::NotifyInvalidate(const StateObject::NodeList &invalid_nodes, bool unlink) { … }
bool Image::IsCreateInfoEqual(const VkImageCreateInfo &other_create_info) const { … }
bool Image::IsCreateInfoDedicatedAllocationImageAliasingCompatible(const VkImageCreateInfo &other_create_info) const { … }
bool Image::IsCompatibleAliasing(const Image *other_image_state) const { … }
void Image::SetInitialLayoutMap() { … }
void Image::SetImageLayout(const VkImageSubresourceRange &range, VkImageLayout layout) { … }
void Image::SetSwapchain(std::shared_ptr<vvl::Swapchain> &swapchain, uint32_t swapchain_index) { … }
bool Image::CompareCreateInfo(const Image &other) const { … }
}
static VkSamplerYcbcrConversion GetSamplerConversion(const VkImageViewCreateInfo *ci) { … }
static VkImageUsageFlags GetInheritedUsage(const VkImageViewCreateInfo *ci, const vvl::Image &image_state) { … }
static float GetImageViewMinLod(const VkImageViewCreateInfo *ci) { … }
#ifdef VK_USE_PLATFORM_METAL_EXT
static bool GetMetalExport(const VkImageViewCreateInfo *info) {
bool retval = false;
auto export_metal_object_info = vku::FindStructInPNextChain<VkExportMetalObjectCreateInfoEXT>(info->pNext);
while (export_metal_object_info) {
if (export_metal_object_info->exportObjectType == VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT) {
retval = true;
break;
}
export_metal_object_info = vku::FindStructInPNextChain<VkExportMetalObjectCreateInfoEXT>(export_metal_object_info->pNext);
}
return retval;
}
#endif
namespace vvl {
ImageView::ImageView(const std::shared_ptr<vvl::Image> &im, VkImageView handle, const VkImageViewCreateInfo *ci,
VkFormatFeatureFlags2KHR ff, const VkFilterCubicImageViewImageFormatPropertiesEXT &cubic_props)
: … { … }
void ImageView::Destroy() { … }
uint32_t ImageView::GetAttachmentLayerCount() const { … }
bool ImageView::OverlapSubresource(const ImageView &compare_view) const { … }
}
static vku::safe_VkImageCreateInfo GetImageCreateInfo(const VkSwapchainCreateInfoKHR *pCreateInfo) { … }
namespace vvl {
Swapchain::Swapchain(ValidationStateTracker &dev_data_, const VkSwapchainCreateInfoKHR *pCreateInfo, VkSwapchainKHR handle)
: … { … }
void Swapchain::PresentImage(uint32_t image_index, uint64_t present_id) { … }
void Swapchain::AcquireImage(uint32_t image_index, const std::shared_ptr<vvl::Semaphore> &semaphore_state,
const std::shared_ptr<vvl::Fence> &fence_state) { … }
void Swapchain::Destroy() { … }
void Swapchain::NotifyInvalidate(const StateObject::NodeList &invalid_nodes, bool unlink) { … }
SwapchainImage Swapchain::GetSwapChainImage(uint32_t index) const { … }
std::shared_ptr<const vvl::Image> Swapchain::GetSwapChainImageShared(uint32_t index) const { … }
void Surface::Destroy() { … }
void Surface::RemoveParent(StateObject *parent_node) { … }
void Surface::SetQueueSupport(VkPhysicalDevice phys_dev, uint32_t qfi, bool supported) { … }
bool Surface::GetQueueSupport(VkPhysicalDevice phys_dev, uint32_t qfi) const { … }
void Surface::SetPresentModes(VkPhysicalDevice phys_dev, vvl::span<const VkPresentModeKHR> modes) { … }
std::vector<VkPresentModeKHR> Surface::GetPresentModes(VkPhysicalDevice phys_dev, const Location &loc,
const ValidationObject *validation_obj) const { … }
void Surface::SetFormats(VkPhysicalDevice phys_dev, std::vector<vku::safe_VkSurfaceFormat2KHR> &&fmts) { … }
vvl::span<const vku::safe_VkSurfaceFormat2KHR> Surface::GetFormats(bool get_surface_capabilities2, VkPhysicalDevice phys_dev,
const void *surface_info2_pnext, const Location &loc,
const ValidationObject *validation_obj) const { … }
const Surface::PresentModeInfo *Surface::PhysDevCache::GetPresentModeInfo(VkPresentModeKHR present_mode) const { … }
const Surface::PhysDevCache *Surface::GetPhysDevCache(VkPhysicalDevice phys_dev) const { … }
void Surface::UpdateCapabilitiesCache(VkPhysicalDevice phys_dev, const VkSurfaceCapabilitiesKHR &surface_caps) { … }
void Surface::UpdateCapabilitiesCache(VkPhysicalDevice phys_dev, const VkSurfaceCapabilities2KHR &surface_caps,
VkPresentModeKHR present_mode) { … }
VkSurfaceCapabilitiesKHR Surface::GetSurfaceCapabilities(VkPhysicalDevice phys_dev, const void *surface_info_pnext) const { … }
VkSurfaceCapabilitiesKHR Surface::GetPresentModeSurfaceCapabilities(VkPhysicalDevice phys_dev,
VkPresentModeKHR present_mode) const { … }
VkSurfacePresentScalingCapabilitiesEXT Surface::GetPresentModeScalingCapabilities(VkPhysicalDevice phys_dev,
VkPresentModeKHR present_mode) const { … }
std::vector<VkPresentModeKHR> Surface::GetCompatibleModes(VkPhysicalDevice phys_dev, VkPresentModeKHR present_mode) const { … }
}
bool GlobalImageLayoutRangeMap::AnyInRange(RangeGenerator &gen,
std::function<bool(const key_type &range, const mapped_type &state)> &&func) const { … }