diff --git a/render/vulkan/pixel_format.c b/render/vulkan/pixel_format.c index e75d9104c..0e7d9a220 100644 --- a/render/vulkan/pixel_format.c +++ b/render/vulkan/pixel_format.c @@ -437,9 +437,13 @@ void vulkan_format_props_query(struct wlr_vk_device *dev, const struct wlr_pixel_format_info *format_info = drm_get_pixel_format_info(format->drm); // non-dmabuf texture properties + VkFormatFeatureFlags features = shm_tex_features; + if (format->is_ycbcr) { + features |= ycbcr_tex_features; + } const char *shm_texture_status; - if ((fmtp.formatProperties.optimalTilingFeatures & shm_tex_features) == shm_tex_features && - !format->is_ycbcr && format_info != NULL) { + if ((fmtp.formatProperties.optimalTilingFeatures & features) == features && + format_info != NULL) { VkPhysicalDeviceImageFormatInfo2 fmti = { .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, .type = VK_IMAGE_TYPE_2D, diff --git a/render/vulkan/texture.c b/render/vulkan/texture.c index 71903d26a..7be9852f7 100644 --- a/render/vulkan/texture.c +++ b/render/vulkan/texture.c @@ -346,7 +346,7 @@ static struct wlr_texture *vulkan_texture_from_pixels( const struct wlr_vk_format_props *fmt = vulkan_format_props_from_drm(renderer->dev, drm_fmt); - if (fmt == NULL || fmt->format.is_ycbcr) { + if (fmt == NULL) { char *format_name = drmGetFormatName(drm_fmt); wlr_log(WLR_ERROR, "Unsupported pixel format %s (0x%08"PRIX32")", format_name, drm_fmt); @@ -360,7 +360,10 @@ static struct wlr_texture *vulkan_texture_from_pixels( } texture->format = &fmt->format; - texture->pipeline_layout = &renderer->default_pipeline_layout; + texture->pipeline_layout = vulkan_get_pipeline_layout(renderer, texture->format); + if (texture->pipeline_layout == NULL) { + goto error; + } VkImageCreateInfo img_info = { .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,