diff --git a/.pick_status.json b/.pick_status.json index 10c450c89da..b1ec55a9c80 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -6414,7 +6414,7 @@ "description": "vulkan/wsi/headless: properly use CPU images for CPU devices", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "90caf9bdbd2425f61b0b28483c9d940854d67541", "notes": null diff --git a/src/vulkan/wsi/wsi_common_headless.c b/src/vulkan/wsi/wsi_common_headless.c index c94439899d2..4bcaf13f326 100644 --- a/src/vulkan/wsi/wsi_common_headless.c +++ b/src/vulkan/wsi/wsi_common_headless.c @@ -405,7 +405,7 @@ wsi_headless_surface_create_swapchain(VkIcdSurfaceBase *icd_surface, .sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, .pNext = &mod_list, }; - if (wsi_device->supports_modifiers) { + if (!wsi_device->sw && wsi_device->supports_modifiers) { wsi_device->GetPhysicalDeviceFormatProperties2( wsi_device->pdevice, pCreateInfo->imageFormat, &props); assert(mod_list.drmFormatModifierCount > 0); @@ -424,16 +424,27 @@ wsi_headless_surface_create_swapchain(VkIcdSurfaceBase *icd_surface, mods[i] = mod_props[i].drmFormatModifier; } - struct wsi_drm_image_params drm_params = { - .base.image_type = WSI_IMAGE_TYPE_DRM, - .same_gpu = true, - .num_modifier_lists = mod_list.drmFormatModifierCount > 0 ? 1 : 0, - .num_modifiers = &mod_list.drmFormatModifierCount, - .modifiers = (const uint64_t **)&mods, - }; + struct wsi_base_image_params *image_params = NULL; + struct wsi_cpu_image_params cpu_params; + struct wsi_drm_image_params drm_params; + if (wsi_device->sw) { + cpu_params = (struct wsi_cpu_image_params) { + .base.image_type = WSI_IMAGE_TYPE_CPU, + }; + image_params = &cpu_params.base; + } else { + drm_params = (struct wsi_drm_image_params) { + .base.image_type = WSI_IMAGE_TYPE_DRM, + .same_gpu = true, + .num_modifier_lists = mod_list.drmFormatModifierCount > 0 ? 1 : 0, + .num_modifiers = &mod_list.drmFormatModifierCount, + .modifiers = (const uint64_t **)&mods, + }; + image_params = &drm_params.base; + } result = wsi_swapchain_init(wsi_device, &chain->base, device, - pCreateInfo, &drm_params.base, pAllocator); + pCreateInfo, image_params, pAllocator); STACK_ARRAY_FINISH(mods); STACK_ARRAY_FINISH(mod_props);