mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-31 22:25:21 -04:00
render/vulkan: add wlr_vk_texture_has_alpha
Allow to get whether has alpha channel of the VkImage, it can help an optimization to disable blending when the texture doesn't have alpha. Because the VkFormat isn't enough because it's always set to VK_FORMAT_B8G8R8A8_SRGB or VK_FORMAT_R8G8B8A8_SRGB.
This commit is contained in:
parent
65836ce357
commit
5b34fe5513
3 changed files with 11 additions and 2 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue