mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-07 01:48:20 +02:00
vulkan/wsi/display: Check with an atomic commit if the swapchain fails.
The TEST_ONLY flag lets you run your display configuration past the driver to see if it exceeds any of the many arbitrary hardware limits that can't be expressed through the limited properties that DRM exposes. This maps quite well to VK_ERROR_INITIALIZATION_FAILED. Fixes dEQP-VK.wsi.direct_drm.colorspace.basic failure on my anv CFL system, where we exceeded the primary plane's width restriction for the specific tiling format chosen. Closes: #14314 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39466>
This commit is contained in:
parent
08f0fd8bd6
commit
580381d9e7
6 changed files with 34 additions and 71 deletions
|
|
@ -106,18 +106,6 @@ dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r12x4g12x4_unorm_2pack
|
|||
|
||||
dEQP-VK.wsi.direct_drm.colorspace.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.colorspace.hdr,Fail
|
||||
dEQP-VK.wsi.direct_drm.incremental_present.scale_none.fifo.identity.opaque.incremental_present,Fail
|
||||
dEQP-VK.wsi.direct_drm.incremental_present.scale_none.fifo.identity.opaque.reference,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.deferred_alloc.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.deferred_alloc.fifo.bind_image,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_fence.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_fence.fifo.ordering,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_modes.fifo.change_modes,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.release_before_present,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire_release_before_retire,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window,Fail
|
||||
|
||||
# deqp-vk: ../src/vulkan/wsi/wsi_common.c:2579: wsi_common_create_swapchain_image: Assertion `pCreateInfo->extent.width == swcInfo->extent.width' failed.
|
||||
dEQP-VK.wsi.direct_drm.swapchain.create.image_swapchain_create_info_concurrent,Crash
|
||||
|
|
|
|||
|
|
@ -105,9 +105,6 @@ dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r12x4g12x4_unorm_2pack
|
|||
dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r12x4g12x4_unorm_2pack16.512_256_1,Crash
|
||||
|
||||
dEQP-VK.wsi.direct.colorspace.hdr,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.resize_window,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire_release_before_retire,Fail
|
||||
|
||||
# deqp-vk: ../src/vulkan/wsi/wsi_common.c:2579: wsi_common_create_swapchain_image: Assertion `pCreateInfo->extent.width == swcInfo->extent.width' failed.
|
||||
dEQP-VK.wsi.direct.swapchain.simulate_oom.image_swapchain_create_info_concurrent,Crash
|
||||
|
|
|
|||
|
|
@ -169,21 +169,12 @@ dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r12x4g12x4_unorm_2pack
|
|||
dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r12x4g12x4_unorm_2pack16.503_137_1,Crash
|
||||
dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r12x4g12x4_unorm_2pack16.512_256_1,Crash
|
||||
|
||||
# Probably https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/6287
|
||||
dEQP-VK.wsi.direct_drm.present_timing.time_domain.present_stage_calibration,Fail
|
||||
dEQP-VK.wsi.direct.present_timing.time_domain.present_stage_calibration,Fail
|
||||
|
||||
dEQP-VK.wsi.direct_drm.colorspace.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.colorspace.hdr,Fail
|
||||
dEQP-VK.wsi.direct_drm.incremental_present.scale_none.fifo.identity.opaque.incremental_present,Fail
|
||||
dEQP-VK.wsi.direct_drm.incremental_present.scale_none.fifo.identity.opaque.reference,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.deferred_alloc.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.deferred_alloc.fifo.bind_image,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_fence.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_fence.fifo.ordering,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_modes.fifo.change_modes,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.release_before_present,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire_release_before_retire,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window,Fail
|
||||
dEQP-VK.wsi.direct_drm.present_timing.time_domain.present_stage_calibration,Fail
|
||||
dEQP-VK.wsi.direct_drm.swapchain.create.image_sharing_mode,Crash
|
||||
dEQP-VK.wsi.direct_drm.swapchain.create.image_swapchain_create_info_concurrent,Crash
|
||||
dEQP-VK.wsi.direct_drm.swapchain.create.image_swapchain_create_info,Crash
|
||||
|
|
@ -192,19 +183,6 @@ dEQP-VK.wsi.direct_drm.swapchain.simulate_oom.image_swapchain_create_info_concur
|
|||
dEQP-VK.wsi.direct_drm.swapchain.simulate_oom.image_swapchain_create_info,Crash
|
||||
dEQP-VK.wsi.direct.colorspace.basic,Fail
|
||||
dEQP-VK.wsi.direct.colorspace.hdr,Fail
|
||||
dEQP-VK.wsi.direct.incremental_present.scale_none.fifo.identity.opaque.incremental_present,Fail
|
||||
dEQP-VK.wsi.direct.incremental_present.scale_none.fifo.identity.opaque.reference,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.deferred_alloc.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.deferred_alloc.fifo.bind_image,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.present_fence.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.present_fence.fifo.ordering,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.present_modes.fifo.change_modes,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.basic,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.release_before_present,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire_release_before_retire,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.resize_window,Fail
|
||||
dEQP-VK.wsi.direct.present_timing.time_domain.present_stage_calibration,Fail
|
||||
dEQP-VK.wsi.direct.swapchain.create.image_sharing_mode,Crash
|
||||
dEQP-VK.wsi.direct.swapchain.create.image_swapchain_create_info_concurrent,Crash
|
||||
dEQP-VK.wsi.direct.swapchain.create.image_swapchain_create_info,Crash
|
||||
|
|
|
|||
|
|
@ -1,5 +1,2 @@
|
|||
# See https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9049
|
||||
dEQP-VK.pipeline.timestamp.calibrated.calibration_test,Fail
|
||||
|
||||
dEQP-VK.wsi.direct_drm.incremental_present.scale_none.fifo.identity.opaque.reference,Fail
|
||||
dEQP-VK.wsi.direct_drm.incremental_present.scale_none.fifo.identity.opaque.incremental_present,Fail
|
||||
|
|
|
|||
|
|
@ -107,36 +107,12 @@ dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r12x4g12x4_unorm_2pack
|
|||
|
||||
dEQP-VK.wsi.direct_drm.colorspace.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.colorspace.hdr,Fail
|
||||
dEQP-VK.wsi.direct_drm.incremental_present.scale_none.fifo.identity.opaque.incremental_present,Fail
|
||||
dEQP-VK.wsi.direct_drm.incremental_present.scale_none.fifo.identity.opaque.reference,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.deferred_alloc.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.deferred_alloc.fifo.bind_image,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_fence.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_fence.fifo.ordering,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.present_modes.fifo.change_modes,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.basic,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.release_before_present,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire_release_before_retire,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire,Fail
|
||||
dEQP-VK.wsi.direct_drm.maintenance1.release_images.fifo.no_scaling.resize_window,Fail
|
||||
dEQP-VK.wsi.direct_drm.swapchain.create.image_swapchain_create_info_concurrent,Crash
|
||||
dEQP-VK.wsi.direct_drm.swapchain.create.image_swapchain_create_info,Crash
|
||||
dEQP-VK.wsi.direct_drm.swapchain.simulate_oom.image_swapchain_create_info_concurrent,Crash
|
||||
dEQP-VK.wsi.direct_drm.swapchain.simulate_oom.image_swapchain_create_info,Crash
|
||||
dEQP-VK.wsi.direct.colorspace.basic,Fail
|
||||
dEQP-VK.wsi.direct.colorspace.hdr,Fail
|
||||
dEQP-VK.wsi.direct.incremental_present.scale_none.fifo.identity.opaque.incremental_present,Fail
|
||||
dEQP-VK.wsi.direct.incremental_present.scale_none.fifo.identity.opaque.reference,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.deferred_alloc.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.deferred_alloc.fifo.bind_image,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.present_fence.fifo.basic,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.present_fence.fifo.ordering,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.present_modes.fifo.change_modes,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.basic,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.release_before_present,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire_release_before_retire,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.resize_window_after_acquire,Fail
|
||||
dEQP-VK.wsi.direct.maintenance1.release_images.fifo.no_scaling.resize_window,Fail
|
||||
dEQP-VK.wsi.direct.swapchain.create.image_swapchain_create_info_concurrent,Crash
|
||||
dEQP-VK.wsi.direct.swapchain.create.image_swapchain_create_info,Crash
|
||||
dEQP-VK.wsi.direct.swapchain.simulate_oom.image_swapchain_create_info_concurrent,Crash
|
||||
|
|
|
|||
|
|
@ -2860,7 +2860,7 @@ _wsi_display_convert_hdr_metadata(VkHdrMetadataEXT *pMetadata, uint8_t hdmi_eotf
|
|||
}
|
||||
|
||||
static int
|
||||
drm_atomic_commit(wsi_display_connector *connector, struct wsi_display_image *image)
|
||||
drm_atomic_commit(wsi_display_connector *connector, struct wsi_display_image *image, bool test_only)
|
||||
{
|
||||
const drmModeModeInfo *mode = &connector->current_drm_mode;
|
||||
int fd = connector->wsi->fd;
|
||||
|
|
@ -2947,6 +2947,11 @@ drm_atomic_commit(wsi_display_connector *connector, struct wsi_display_image *im
|
|||
drmModeAtomicAddProperty(req, plane_id, prop[CRTC_W], mode->hdisplay);
|
||||
drmModeAtomicAddProperty(req, plane_id, prop[CRTC_H], mode->vdisplay);
|
||||
|
||||
if (test_only) {
|
||||
flags |= DRM_MODE_ATOMIC_TEST_ONLY;
|
||||
flags &= ~DRM_MODE_PAGE_FLIP_EVENT;
|
||||
}
|
||||
|
||||
ret = drmModeAtomicCommit(fd, req, flags, image);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
|
@ -2977,7 +2982,7 @@ _wsi_display_cleanup_state(struct wsi_display_swapchain *chain)
|
|||
if (chain->color_outcome_serial) {
|
||||
chain->color_outcome_serial = 0;
|
||||
chain->base.image_info.color_space = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
|
||||
drm_atomic_commit(connector, &chain->images[0]);
|
||||
drm_atomic_commit(connector, &chain->images[0], false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3122,7 +3127,7 @@ _wsi_display_queue_next(struct wsi_swapchain *drv_chain)
|
|||
|
||||
image->state = WSI_IMAGE_QUEUED;
|
||||
|
||||
int ret = drm_atomic_commit(connector, image);
|
||||
int ret = drm_atomic_commit(connector, image, false);
|
||||
if (ret == 0) {
|
||||
image->state = WSI_IMAGE_FLIPPING;
|
||||
connector->active = true;
|
||||
|
|
@ -3410,6 +3415,28 @@ wsi_display_surface_create_swapchain(
|
|||
create_info,
|
||||
drm_format,
|
||||
&chain->images[image]);
|
||||
|
||||
/* Check that we could actually possibly atomic commit to this plane. This
|
||||
* catches cases where the swapchain exceeds some limits of the hardware
|
||||
* that we couldn't tell from the probed properties.
|
||||
*
|
||||
* There is text explicitly allowing this error code for "exclusive
|
||||
* full-screen mode" (which is not actually what DRM KHR_display is by
|
||||
* spec, though we are giving exclusive full-screen access!), but this is
|
||||
* what the CTS expects to find for unsupported swapchains.
|
||||
*/
|
||||
if (result == VK_SUCCESS) {
|
||||
ret = drm_atomic_commit(display_mode->connector, &chain->images[image], true);
|
||||
if (ret != 0) {
|
||||
wsi_display_debug("Atomic commit check for %dx%d %s, failed: %s\n",
|
||||
create_info->imageExtent.width,
|
||||
create_info->imageExtent.height,
|
||||
util_format_short_name(vk_format_to_pipe_format(create_info->imageFormat)),
|
||||
strerror(-errno));
|
||||
result = VK_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
if (result != VK_SUCCESS) {
|
||||
while (image > 0) {
|
||||
--image;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue