aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/render/vulkan.h2
-rw-r--r--render/vulkan/pixel_format.c24
-rw-r--r--render/vulkan/renderer.c2
-rw-r--r--render/vulkan/texture.c3
4 files changed, 16 insertions, 15 deletions
diff --git a/include/render/vulkan.h b/include/render/vulkan.h
index a518ee4a..17f1c3bb 100644
--- a/include/render/vulkan.h
+++ b/include/render/vulkan.h
@@ -87,7 +87,7 @@ int vulkan_find_mem_type(struct wlr_vk_device *device,
struct wlr_vk_format {
uint32_t drm;
VkFormat vk;
- bool is_srgb;
+ VkFormat vk_srgb; // sRGB version of the format, or 0 if nonexistent
bool is_ycbcr;
};
diff --git a/render/vulkan/pixel_format.c b/render/vulkan/pixel_format.c
index 67f5a893..895ca40c 100644
--- a/render/vulkan/pixel_format.c
+++ b/render/vulkan/pixel_format.c
@@ -14,33 +14,33 @@ static const struct wlr_vk_format formats[] = {
// order.
{
.drm = DRM_FORMAT_R8,
- .vk = VK_FORMAT_R8_SRGB,
- .is_srgb = true,
+ .vk = VK_FORMAT_R8_UNORM,
+ .vk_srgb = VK_FORMAT_R8_SRGB,
},
{
.drm = DRM_FORMAT_GR88,
- .vk = VK_FORMAT_R8G8_SRGB,
- .is_srgb = true,
+ .vk = VK_FORMAT_R8G8_UNORM,
+ .vk_srgb = VK_FORMAT_R8G8_SRGB,
},
{
.drm = DRM_FORMAT_RGB888,
- .vk = VK_FORMAT_B8G8R8_SRGB,
- .is_srgb = true,
+ .vk = VK_FORMAT_B8G8R8_UNORM,
+ .vk_srgb = VK_FORMAT_B8G8R8_SRGB,
},
{
.drm = DRM_FORMAT_BGR888,
- .vk = VK_FORMAT_R8G8B8_SRGB,
- .is_srgb = true,
+ .vk = VK_FORMAT_R8G8B8_UNORM,
+ .vk_srgb = VK_FORMAT_R8G8B8_SRGB,
},
{
.drm = DRM_FORMAT_XRGB8888,
- .vk = VK_FORMAT_B8G8R8A8_SRGB,
- .is_srgb = true,
+ .vk = VK_FORMAT_B8G8R8A8_UNORM,
+ .vk_srgb = VK_FORMAT_B8G8R8A8_SRGB,
},
{
.drm = DRM_FORMAT_XBGR8888,
- .vk = VK_FORMAT_R8G8B8A8_SRGB,
- .is_srgb = true,
+ .vk = VK_FORMAT_R8G8B8A8_UNORM,
+ .vk_srgb = VK_FORMAT_R8G8B8A8_SRGB,
},
// The Vulkan _SRGB formats correspond to unpremultiplied alpha, but
// the Wayland protocol specifies premultiplied alpha on electrical values
diff --git a/render/vulkan/renderer.c b/render/vulkan/renderer.c
index b3f76401..33601732 100644
--- a/render/vulkan/renderer.c
+++ b/render/vulkan/renderer.c
@@ -768,7 +768,7 @@ static struct wlr_vk_render_buffer *create_render_buffer(
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(
renderer, &fmt->format, has_blending_buffer);
diff --git a/render/vulkan/texture.c b/render/vulkan/texture.c
index 20aa12f1..036d5f73 100644
--- a/render/vulkan/texture.c
+++ b/render/vulkan/texture.c
@@ -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,
const struct wlr_vk_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;
const struct wlr_pixel_format_info *format_info =