@ -311,7 +311,8 @@ struct wlr_vk_texture_view *vulkan_texture_get_or_create_view(struct wlr_vk_text
VkImageViewCreateInfo view_info = {
. sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO ,
. viewType = VK_IMAGE_VIEW_TYPE_2D ,
. format = texture - > format - > vk ,
. format = texture - > using_mutable_srgb ? texture - > format - > vk_srgb
: texture - > format - > vk ,
. components . r = VK_COMPONENT_SWIZZLE_IDENTITY ,
. components . g = VK_COMPONENT_SWIZZLE_IDENTITY ,
. components . b = VK_COMPONENT_SWIZZLE_IDENTITY ,
@ -372,10 +373,10 @@ struct wlr_vk_texture_view *vulkan_texture_get_or_create_view(struct wlr_vk_text
}
static void texture_set_format ( struct wlr_vk_texture * texture ,
const struct wlr_vk_format * format ) {
const struct wlr_vk_format * format , bool has_mutable_srgb ) {
texture - > format = format ;
texture - > transform = ! format - > is_ycbcr & &
( format - > vk_srgb & & false /* temporary */ ) ?
texture - > using_mutable_srgb = has_mutable_srgb ;
texture - > transform = ! format - > is_ycbcr & & has_mutable_srgb ?
WLR_VK_TEXTURE_TRANSFORM_IDENTITY : WLR_VK_TEXTURE_TRANSFORM_SRGB ;
const struct wlr_pixel_format_info * format_info =
@ -409,7 +410,7 @@ static struct wlr_texture *vulkan_texture_from_pixels(
return NULL ;
}
texture_set_format ( texture , & fmt - > format );
texture_set_format ( texture , & fmt - > format , fmt - > shm . has_mutable_srgb );
VkFormat view_formats [ 2 ] = {
fmt - > format . vk ,
@ -516,7 +517,7 @@ static bool is_dmabuf_disjoint(const struct wlr_dmabuf_attributes *attribs) {
VkImage vulkan_import_dmabuf ( struct wlr_vk_renderer * renderer ,
const struct wlr_dmabuf_attributes * attribs ,
VkDeviceMemory mems [ static WLR_DMABUF_MAX_PLANES ] , uint32_t * n_mems ,
bool for_render ) {
bool for_render , bool * using_mutable_srgb ) {
VkResult res ;
VkDevice dev = renderer - > dev - > dev ;
* n_mems = 0u ;
@ -729,6 +730,7 @@ VkImage vulkan_import_dmabuf(struct wlr_vk_renderer *renderer,
goto error_image ;
}
* using_mutable_srgb = mod - > has_mutable_srgb ;
return image ;
error_image :
@ -760,13 +762,13 @@ static struct wlr_vk_texture *vulkan_texture_from_dmabuf(
return NULL ;
}
texture_set_format ( texture , & fmt - > format ) ;
bool using_mutable_srgb = false ;
texture - > image = vulkan_import_dmabuf ( renderer , attribs ,
texture - > memories , & texture - > mem_count , false );
texture - > memories , & texture - > mem_count , false , & using_mutable_srgb );
if ( ! texture - > image ) {
goto error ;
}
texture_set_format ( texture , & fmt - > format , using_mutable_srgb ) ;
texture - > dmabuf_imported = true ;