| 159 | } |
| 160 | |
| 161 | void DumpSurfaceCapabilities(Printer &p, AppInstance &inst, AppGpu &gpu, AppSurface &surface) { |
| 162 | auto &surf_cap = surface.surface_capabilities; |
| 163 | p.SetSubHeader().SetIgnoreMinWidthInChild(); |
| 164 | DumpVkSurfaceCapabilitiesKHR(p, "VkSurfaceCapabilitiesKHR", surf_cap); |
| 165 | |
| 166 | if (inst.CheckExtensionEnabled(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)) { |
| 167 | p.SetSubHeader(); |
| 168 | ObjectWrapper obj(p, "VkSurfaceCapabilities2EXT"); |
| 169 | DumpVkSurfaceCounterFlagsEXT(p, "supportedSurfaceCounters", surface.surface_capabilities2_ext.supportedSurfaceCounters); |
| 170 | } |
| 171 | if (inst.CheckExtensionEnabled(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME)) { |
| 172 | chain_iterator_surface_capabilities2(p, inst, gpu, surface.surface_capabilities2_khr.pNext); |
| 173 | } |
| 174 | if (inst.CheckExtensionEnabled(VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME) || |
| 175 | inst.CheckExtensionEnabled(VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME)) { |
| 176 | const char *surf_ext_name = VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME; |
| 177 | if (!inst.CheckExtensionEnabled(VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME)) { |
| 178 | surf_ext_name = VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME; |
| 179 | } |
| 180 | p.SetSubHeader(); |
| 181 | ObjectWrapper obj(p, surf_ext_name); |
| 182 | for (auto &mode : surface.surf_present_modes) { |
| 183 | VkSurfacePresentModeKHR present_mode{}; |
| 184 | present_mode.sType = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR; |
| 185 | present_mode.presentMode = mode; |
| 186 | |
| 187 | VkPhysicalDeviceSurfaceInfo2KHR surface_info{}; |
| 188 | surface_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR; |
| 189 | surface_info.surface = surface.surface_extension.surface; |
| 190 | surface_info.pNext = &present_mode; |
| 191 | |
| 192 | VkSurfacePresentModeCompatibilityKHR SurfacePresentModeCompatibilityKHR{}; |
| 193 | SurfacePresentModeCompatibilityKHR.sType = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR; |
| 194 | |
| 195 | VkSurfacePresentScalingCapabilitiesKHR SurfacePresentScalingCapabilitiesKHR{}; |
| 196 | SurfacePresentScalingCapabilitiesKHR.sType = VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT; |
| 197 | SurfacePresentScalingCapabilitiesKHR.pNext = &SurfacePresentModeCompatibilityKHR; |
| 198 | |
| 199 | VkSurfaceCapabilities2KHR surface_caps2{}; |
| 200 | surface_caps2.sType = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR; |
| 201 | surface_caps2.pNext = &SurfacePresentScalingCapabilitiesKHR; |
| 202 | |
| 203 | VkResult err = vkGetPhysicalDeviceSurfaceCapabilities2KHR(gpu.phys_device, &surface_info, &surface_caps2); |
| 204 | if (err != VK_SUCCESS) { |
| 205 | continue; |
| 206 | } |
| 207 | |
| 208 | std::vector<VkPresentModeKHR> compatible_present_modes{SurfacePresentModeCompatibilityKHR.presentModeCount}; |
| 209 | SurfacePresentModeCompatibilityKHR.pPresentModes = compatible_present_modes.data(); |
| 210 | |
| 211 | err = vkGetPhysicalDeviceSurfaceCapabilities2KHR(gpu.phys_device, &surface_info, &surface_caps2); |
| 212 | |
| 213 | if (err == VK_SUCCESS) { |
| 214 | ObjectWrapper present_mode_obj(p, VkPresentModeKHRString(mode)); |
| 215 | |
| 216 | p.PrintKeyValue("minImageCount", surface_caps2.surfaceCapabilities.minImageCount); |
| 217 | p.PrintKeyValue("maxImageCount", surface_caps2.surfaceCapabilities.maxImageCount); |
| 218 |
no test coverage detected