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

Function AppCreateDisplaySurface

vulkaninfo/vulkaninfo.h:1190–1241  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1188//----------------------KHR DISPLAY--------------------------
1189#ifdef VK_USE_PLATFORM_DISPLAY_KHR
1190static VkSurfaceKHR AppCreateDisplaySurface(AppInstance &inst, VkPhysicalDevice phys_device) {
1191 auto all_display_props = GetVector<VkDisplayPropertiesKHR>("vkGetPhysicalDeviceDisplayPropertiesKHR",
1192 vkGetPhysicalDeviceDisplayPropertiesKHR, phys_device);
1193 if (all_display_props.size() == 0) return VK_NULL_HANDLE;
1194
1195 auto all_plane_props = GetVector<VkDisplayPlanePropertiesKHR>("vkGetPhysicalDeviceDisplayPlanePropertiesKHR",
1196 vkGetPhysicalDeviceDisplayPlanePropertiesKHR, phys_device);
1197 if (all_plane_props.size() == 0) THROW_VK_ERR("No display plane properties for physical device.", VK_ERROR_UNKNOWN);
1198
1199 // Always use the first plane
1200 const uint32_t plane_index = 0;
1201 const auto &plane_props = all_plane_props[plane_index];
1202
1203 auto supported_displays = GetVector<VkDisplayKHR>("vkGetDisplayPlaneSupportedDisplaysKHR",
1204 vkGetDisplayPlaneSupportedDisplaysKHR, phys_device, plane_index);
1205 if (supported_displays.size() == 0) THROW_VK_ERR("No display supported by the display plane.", VK_ERROR_UNKNOWN);
1206
1207 const VkDisplayKHR display = plane_props.currentDisplay != VK_NULL_HANDLE ? plane_props.currentDisplay : supported_displays[0];
1208
1209 auto all_mode_props =
1210 GetVector<VkDisplayModePropertiesKHR>("vkGetDisplayModePropertiesKHR", vkGetDisplayModePropertiesKHR, phys_device, display);
1211 if (all_mode_props.size() == 0) THROW_VK_ERR("No display modes reported for display.", VK_ERROR_UNKNOWN);
1212
1213 const auto &mode_props = all_mode_props[0];
1214 const VkDisplayModeKHR mode = mode_props.displayMode;
1215
1216 VkDisplayPlaneCapabilitiesKHR plane_caps{};
1217 VkResult result = vkGetDisplayPlaneCapabilitiesKHR(phys_device, mode, plane_index, &plane_caps);
1218 if (result != VK_SUCCESS) THROW_VK_ERR("vkGetDisplayPlaneCapabilitiesKHR", result);
1219
1220 VkDisplaySurfaceCreateInfoKHR createInfo;
1221 createInfo.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR;
1222 createInfo.pNext = NULL;
1223 createInfo.flags = 0;
1224 createInfo.displayMode = mode;
1225 createInfo.planeIndex = plane_index;
1226 createInfo.planeStackIndex = plane_props.currentStackIndex;
1227 createInfo.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
1228 createInfo.globalAlpha = 1.0f;
1229 for (uint32_t i = 0; i < 32; ++i) {
1230 if ((plane_caps.supportedAlpha & (1 << i)) != 0) {
1231 createInfo.alphaMode = static_cast<VkDisplayPlaneAlphaFlagBitsKHR>(1 << i);
1232 break;
1233 }
1234 }
1235 createInfo.imageExtent = mode_props.parameters.visibleRegion;
1236
1237 VkSurfaceKHR surface;
1238 VkResult err = vkCreateDisplayPlaneSurfaceKHR(inst.instance, &createInfo, NULL, &surface);
1239 if (err) THROW_VK_ERR("vkCreateDisplayPlaneSurfaceKHR", err);
1240 return surface;
1241}
1242#endif // VK_USE_PLATFORM_DISPLAY_KHR
1243
1244//-----------------------------------------------------------

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected