diff options
| -rw-r--r-- | include/render/vulkan.h | 1 | ||||
| -rw-r--r-- | include/wlr/render/vulkan.h | 1 | ||||
| -rw-r--r-- | render/vulkan/texture.c | 11 | 
3 files changed, 11 insertions, 2 deletions
| diff --git a/include/render/vulkan.h b/include/render/vulkan.h index 716c5ace..5dfc3d37 100644 --- a/include/render/vulkan.h +++ b/include/render/vulkan.h @@ -253,6 +253,7 @@ struct wlr_vk_texture {  	bool dmabuf_imported;  	bool owned; // if dmabuf_imported: whether we have ownership of the image  	bool transitioned; // if dma_imported: whether we transitioned it away from preinit +	bool has_alpha; // whether the image is has alpha channel  	struct wl_list foreign_link; // wlr_vk_renderer.foreign_textures  	struct wl_list destroy_link; // wlr_vk_renderer.destroy_textures  	struct wl_list link; // wlr_vk_renderer.textures diff --git a/include/wlr/render/vulkan.h b/include/wlr/render/vulkan.h index aec3a3c2..04c877e4 100644 --- a/include/wlr/render/vulkan.h +++ b/include/wlr/render/vulkan.h @@ -32,6 +32,7 @@ bool wlr_texture_is_vk(struct wlr_texture *texture);  void wlr_vk_texture_get_image_attribs(struct wlr_texture *texture,  	struct wlr_vk_image_attribs *attribs); +bool wlr_vk_texture_has_alpha(struct wlr_texture *texture);  #endif diff --git a/render/vulkan/texture.c b/render/vulkan/texture.c index 1f70bc44..6c6e9825 100644 --- a/render/vulkan/texture.c +++ b/render/vulkan/texture.c @@ -322,6 +322,7 @@ static struct wlr_texture *vulkan_texture_from_pixels(  	const struct wlr_pixel_format_info *format_info = drm_get_pixel_format_info(drm_fmt);  	assert(format_info); +	texture->has_alpha = format_info->has_alpha;  	// view  	VkImageViewCreateInfo view_info = { @@ -331,7 +332,7 @@ static struct wlr_texture *vulkan_texture_from_pixels(  		.components.r = VK_COMPONENT_SWIZZLE_IDENTITY,  		.components.g = VK_COMPONENT_SWIZZLE_IDENTITY,  		.components.b = VK_COMPONENT_SWIZZLE_IDENTITY, -		.components.a = format_info->has_alpha +		.components.a = texture->has_alpha  			? VK_COMPONENT_SWIZZLE_IDENTITY  			: VK_COMPONENT_SWIZZLE_ONE, @@ -656,6 +657,7 @@ static struct wlr_vk_texture *vulkan_texture_from_dmabuf(  	const struct wlr_pixel_format_info *format_info = drm_get_pixel_format_info(attribs->format);  	assert(format_info); +	texture->has_alpha = format_info->has_alpha;  	// view  	VkImageViewCreateInfo view_info = { @@ -665,7 +667,7 @@ static struct wlr_vk_texture *vulkan_texture_from_dmabuf(  		.components.r = VK_COMPONENT_SWIZZLE_IDENTITY,  		.components.g = VK_COMPONENT_SWIZZLE_IDENTITY,  		.components.b = VK_COMPONENT_SWIZZLE_IDENTITY, -		.components.a = format_info->has_alpha +		.components.a = texture->has_alpha  			? VK_COMPONENT_SWIZZLE_IDENTITY  			: VK_COMPONENT_SWIZZLE_ONE, @@ -779,3 +781,8 @@ void wlr_vk_texture_get_image_attribs(struct wlr_texture *texture,  	attribs->layout = vk_texture->transitioned ?  		VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_UNDEFINED;  } + +bool wlr_vk_texture_has_alpha(struct wlr_texture *texture) { +	struct wlr_vk_texture *vk_texture = vulkan_get_texture(texture); +	return vk_texture->has_alpha; +} | 
