mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-22 12:55:58 +01:00
render/vulkan: track and use _UNORM variants of _SRGB formats
Later commits will start using _SRGB image views again, where appropriate.
This commit is contained in:
parent
6287b61025
commit
eab89d6c76
4 changed files with 16 additions and 15 deletions
|
@ -87,7 +87,7 @@ int vulkan_find_mem_type(struct wlr_vk_device *device,
|
||||||
struct wlr_vk_format {
|
struct wlr_vk_format {
|
||||||
uint32_t drm;
|
uint32_t drm;
|
||||||
VkFormat vk;
|
VkFormat vk;
|
||||||
bool is_srgb;
|
VkFormat vk_srgb; // sRGB version of the format, or 0 if nonexistent
|
||||||
bool is_ycbcr;
|
bool is_ycbcr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -14,33 +14,33 @@ static const struct wlr_vk_format formats[] = {
|
||||||
// order.
|
// order.
|
||||||
{
|
{
|
||||||
.drm = DRM_FORMAT_R8,
|
.drm = DRM_FORMAT_R8,
|
||||||
.vk = VK_FORMAT_R8_SRGB,
|
.vk = VK_FORMAT_R8_UNORM,
|
||||||
.is_srgb = true,
|
.vk_srgb = VK_FORMAT_R8_SRGB,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm = DRM_FORMAT_GR88,
|
.drm = DRM_FORMAT_GR88,
|
||||||
.vk = VK_FORMAT_R8G8_SRGB,
|
.vk = VK_FORMAT_R8G8_UNORM,
|
||||||
.is_srgb = true,
|
.vk_srgb = VK_FORMAT_R8G8_SRGB,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm = DRM_FORMAT_RGB888,
|
.drm = DRM_FORMAT_RGB888,
|
||||||
.vk = VK_FORMAT_B8G8R8_SRGB,
|
.vk = VK_FORMAT_B8G8R8_UNORM,
|
||||||
.is_srgb = true,
|
.vk_srgb = VK_FORMAT_B8G8R8_SRGB,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm = DRM_FORMAT_BGR888,
|
.drm = DRM_FORMAT_BGR888,
|
||||||
.vk = VK_FORMAT_R8G8B8_SRGB,
|
.vk = VK_FORMAT_R8G8B8_UNORM,
|
||||||
.is_srgb = true,
|
.vk_srgb = VK_FORMAT_R8G8B8_SRGB,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm = DRM_FORMAT_XRGB8888,
|
.drm = DRM_FORMAT_XRGB8888,
|
||||||
.vk = VK_FORMAT_B8G8R8A8_SRGB,
|
.vk = VK_FORMAT_B8G8R8A8_UNORM,
|
||||||
.is_srgb = true,
|
.vk_srgb = VK_FORMAT_B8G8R8A8_SRGB,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm = DRM_FORMAT_XBGR8888,
|
.drm = DRM_FORMAT_XBGR8888,
|
||||||
.vk = VK_FORMAT_R8G8B8A8_SRGB,
|
.vk = VK_FORMAT_R8G8B8A8_UNORM,
|
||||||
.is_srgb = true,
|
.vk_srgb = VK_FORMAT_R8G8B8A8_SRGB,
|
||||||
},
|
},
|
||||||
// The Vulkan _SRGB formats correspond to unpremultiplied alpha, but
|
// The Vulkan _SRGB formats correspond to unpremultiplied alpha, but
|
||||||
// the Wayland protocol specifies premultiplied alpha on electrical values
|
// the Wayland protocol specifies premultiplied alpha on electrical values
|
||||||
|
|
|
@ -768,7 +768,7 @@ static struct wlr_vk_render_buffer *create_render_buffer(
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool has_blending_buffer = !fmt->format.is_srgb;
|
bool has_blending_buffer = !fmt->format.vk_srgb || true /* temporary */;
|
||||||
|
|
||||||
buffer->render_setup = find_or_create_render_setup(
|
buffer->render_setup = find_or_create_render_setup(
|
||||||
renderer, &fmt->format, has_blending_buffer);
|
renderer, &fmt->format, has_blending_buffer);
|
||||||
|
|
|
@ -374,7 +374,8 @@ 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,
|
static void texture_set_format(struct wlr_vk_texture *texture,
|
||||||
const struct wlr_vk_format *format) {
|
const struct wlr_vk_format *format) {
|
||||||
texture->format = format;
|
texture->format = format;
|
||||||
texture->transform = !format->is_ycbcr && format->is_srgb ?
|
texture->transform = !format->is_ycbcr &&
|
||||||
|
(format->vk_srgb && false /* temporary */) ?
|
||||||
WLR_VK_TEXTURE_TRANSFORM_IDENTITY : WLR_VK_TEXTURE_TRANSFORM_SRGB;
|
WLR_VK_TEXTURE_TRANSFORM_IDENTITY : WLR_VK_TEXTURE_TRANSFORM_SRGB;
|
||||||
|
|
||||||
const struct wlr_pixel_format_info *format_info =
|
const struct wlr_pixel_format_info *format_info =
|
||||||
|
|
Loading…
Reference in a new issue