MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-Tools / DumpSurfaceCapabilities

Function DumpSurfaceCapabilities

vulkaninfo/vulkaninfo.cpp:161–226  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

159}
160
161void 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

Callers 1

DumpSurfaceFunction · 0.85

Tested by

no test coverage detected