VkExtensionProperties *extension_properties;
};
-struct SurfaceNameWHandle {
- const char *name;
- VkSurfaceKHR surface;
- struct SurfaceNameWHandle *pNextSurface;
- VkBool32 present_support;
-};
-
struct AppInstance {
VkInstance instance;
uint32_t instance_version;
VkSharedPresentSurfaceCapabilitiesKHR shared_surface_capabilities;
VkSurfaceCapabilities2EXT surface_capabilities2_ext;
- struct SurfaceNameWHandle *surface_chain;
VkSurfaceKHR surface;
int width, height;
inst->vulkan_minor = VK_VERSION_MINOR(inst->instance_version);
inst->vulkan_patch = VK_VERSION_PATCH(VK_HEADER_VERSION);
- inst->surface_chain = NULL;
-
AppGetInstanceExtensions(inst);
const VkDebugReportCallbackCreateInfoEXT dbg_info = {.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
static void AppDestroySurface(struct AppInstance *inst) { // same for all platforms
vkDestroySurfaceKHR(inst->instance, inst->surface, NULL);
}
-
-static void AppDestroySurfaceChain(struct AppInstance *inst) { // same for all platforms
- for (struct SurfaceNameWHandle *surface_stuff = inst->surface_chain; surface_stuff != NULL;
- surface_stuff = surface_stuff->pNextSurface) {
- vkDestroySurfaceKHR(inst->instance, surface_stuff->surface, NULL);
- }
-}
#endif
//----------------------------XCB----------------------------
return;
}
- if (inst->surface) {
- AppDestroySurface(inst);
- }
-
surface_extension->create_window(inst);
- surface_extension->create_surface(inst);
-
- struct SurfaceNameWHandle *cur = inst->surface_chain;
- if (cur == NULL) {
- cur = (struct SurfaceNameWHandle *)malloc(sizeof(struct SurfaceNameWHandle));
- inst->surface_chain = cur;
- } else {
- for (; cur->pNextSurface != NULL; cur = cur->pNextSurface) {
- }
- cur->pNextSurface = (struct SurfaceNameWHandle *)malloc(sizeof(struct SurfaceNameWHandle));
- cur = cur->pNextSurface;
- }
- cur->name = surface_extension->name;
- cur->surface = inst->surface;
- cur->pNextSurface = NULL;
- cur->present_support = VK_FALSE;
-
for (uint32_t i = 0; i < gpu_count; ++i) {
+ surface_extension->create_surface(inst);
if (html_output) {
fprintf(out, "\t\t\t\t<details><summary>GPU id : <div class='val'>%u</div> (%s)</summary>\n", i,
gpus[i].props.deviceName);
printf("\n");
}
}
- inst->surface = VK_NULL_HANDLE;
surface_extension->destroy_window(inst);
}
props = *props_const;
}
- for (struct SurfaceNameWHandle *surface_stuff = gpu->inst->surface_chain; surface_stuff != NULL;
- surface_stuff = surface_stuff->pNextSurface) {
- VkResult err = vkGetPhysicalDeviceSurfaceSupportKHR(gpu->obj, id, surface_stuff->surface, &surface_stuff->present_support);
+ VkBool32 supports_present = VK_FALSE;
+ if (gpu->inst->surface) {
+ VkResult err = vkGetPhysicalDeviceSurfaceSupportKHR(gpu->obj, id, gpu->inst->surface, &supports_present);
if (err) ERR_EXIT(err);
}
"class='val'>%d</div>, <div class='val'>%d</div>)</summary></details>\n",
props.minImageTransferGranularity.width, props.minImageTransferGranularity.height,
props.minImageTransferGranularity.depth);
- fprintf(out, "\t\t\t\t\t\t<details><summary>present support</summary>\n");
- for (struct SurfaceNameWHandle *surface_stuff = gpu->inst->surface_chain; surface_stuff != NULL;
- surface_stuff = surface_stuff->pNextSurface) {
- fprintf(out, "\t\t\t\t\t\t\t<details><summary>%s = <div class='val'>%s</div></summary></details>\n",
- surface_stuff->name, surface_stuff->present_support ? "true" : "false");
- }
- fprintf(out, "\t\t\t\t\t\t</details>\n");
+ fprintf(out, "\t\t\t\t\t\t<details><summary>present support = <div class='val'>%s</div></summary></details>\n",
+ supports_present ? "true" : "false");
fprintf(out, "\t\t\t\t\t</details>\n");
} else if (human_readable_output) {
printf("\n");
printf("\ttimestampValidBits = %u\n", props.timestampValidBits);
printf("\tminImageTransferGranularity = (%d, %d, %d)\n", props.minImageTransferGranularity.width,
props.minImageTransferGranularity.height, props.minImageTransferGranularity.depth);
- printf("\tpresent support:\n");
- for (struct SurfaceNameWHandle *surface_stuff = gpu->inst->surface_chain; surface_stuff != NULL;
- surface_stuff = surface_stuff->pNextSurface) {
- printf("\t\t%s = %s\n", surface_stuff->name, surface_stuff->present_support ? "true" : "false");
- }
+ printf("\tpresent support = %s\n", supports_present ? "true" : "false");
}
if (json_output) {
printf("\t\t{\n");
printf("\t\t\t\"queueCount\": %u,\n", props.queueCount);
printf("\t\t\t\"queueFlags\": %u,\n", props.queueFlags);
printf("\t\t\t\"timestampValidBits\": %u,\n", props.timestampValidBits);
- printf("\t\t\t\"present_support\": {\n");
- for (struct SurfaceNameWHandle *surface_stuff = gpu->inst->surface_chain; surface_stuff != NULL;
- surface_stuff = surface_stuff->pNextSurface) {
- if (surface_stuff->pNextSurface) {
- printf("\t\t\t\t\"%s\" : %u,\n", surface_stuff->name, surface_stuff->present_support);
- } else {
- printf("\t\t\t\t\"%s\" : %u\n", surface_stuff->name, surface_stuff->present_support);
- }
- }
- printf("\t\t\t}\n");
+ printf("\t\t\t\"present_support\": %s\n", supports_present ? "\"true\"" : "\"false\"");
printf("\t\t}");
}
.physicalDeviceCount = group->physicalDeviceCount,
.pPhysicalDevices = group->physicalDevices};
- float queue_priority = 1.0f;
-
- VkDeviceQueueCreateInfo q_ci = {.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
- .pNext = NULL,
- .queueFamilyIndex = 0,
- .queueCount = 1,
- .pQueuePriorities = &queue_priority};
+ VkDeviceQueueCreateInfo q_ci = {
+ .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, .pNext = NULL, .queueFamilyIndex = 0, .queueCount = 1};
VkDeviceCreateInfo device_ci = {.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.pNext = &dg_ci,
free(gpus);
free(objs);
- AppDestroySurfaceChain(&inst);
+ AppDestroySurface(&inst);
AppDestroyInstance(&inst);
if (html_output) {