diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 7371c72e1b5..bd5d6b981aa 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -1266,7 +1266,8 @@ create_image(struct zink_screen *screen, struct zink_resource_object *obj, /* we often need to be able to mutate between srgb and linear, but we don't need general * image view/shader image format compatibility (that path means losing fast clears or compression on some hardware). */ - if (!(templ->bind & ZINK_BIND_MUTABLE) && (!alloc_info->whandle || alloc_info->whandle->type == ZINK_EXTERNAL_MEMORY_HANDLE)) { + bool can_srgb = screen->driver_workarounds.srgb_dmabufs || (!alloc_info->whandle || alloc_info->whandle->type == ZINK_EXTERNAL_MEMORY_HANDLE); + if (!(templ->bind & ZINK_BIND_MUTABLE) && can_srgb) { srgb = util_format_is_srgb(templ->format) ? util_format_linear(templ->format) : util_format_srgb(templ->format); /* why do these helpers have different default return values? */ if (srgb == templ->format) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index a6a166d7b93..6b98a5d5c7c 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -3032,6 +3032,8 @@ init_driver_workarounds(struct zink_screen *screen) abort(); } + screen->driver_workarounds.srgb_dmabufs = zink_driverid(screen) != VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA; + /* these drivers benefit from renderpass optimization */ switch (zink_driverid(screen)) { case VK_DRIVER_ID_MESA_LLVMPIPE: diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index c303bd17adb..b40e35133a2 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -1544,6 +1544,8 @@ struct zink_screen { bool can_2d_view_sparse; bool general_depth_layout; bool general_layout; + /* intel driver is somehow broken for srgb-compatible dmabufs...but only in mesa CI */ + bool srgb_dmabufs; } driver_workarounds; };