mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-12-20 13:50:14 +01:00
render/vulkan: fix single-pass linear path
Fixes d1c88e9 "render/vulkan: add linear single-subpass"
`find_or_create_render_setup` still assumed a single-buffer setup
always implied use of an srgb format
This commit is contained in:
parent
106f0f9506
commit
b98904705d
2 changed files with 13 additions and 7 deletions
|
|
@ -203,6 +203,7 @@ struct wlr_vk_render_format_setup {
|
||||||
struct wl_list link; // wlr_vk_renderer.render_format_setups
|
struct wl_list link; // wlr_vk_renderer.render_format_setups
|
||||||
const struct wlr_vk_format *render_format; // used in renderpass
|
const struct wlr_vk_format *render_format; // used in renderpass
|
||||||
bool use_blending_buffer;
|
bool use_blending_buffer;
|
||||||
|
bool use_srgb;
|
||||||
VkRenderPass render_pass;
|
VkRenderPass render_pass;
|
||||||
|
|
||||||
VkPipeline output_pipe_identity;
|
VkPipeline output_pipe_identity;
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ struct wlr_vk_renderer *vulkan_get_renderer(struct wlr_renderer *wlr_renderer) {
|
||||||
|
|
||||||
static struct wlr_vk_render_format_setup *find_or_create_render_setup(
|
static struct wlr_vk_render_format_setup *find_or_create_render_setup(
|
||||||
struct wlr_vk_renderer *renderer, const struct wlr_vk_format *format,
|
struct wlr_vk_renderer *renderer, const struct wlr_vk_format *format,
|
||||||
bool has_blending_buffer);
|
bool has_blending_buffer, bool srgb);
|
||||||
|
|
||||||
static struct wlr_vk_descriptor_pool *alloc_ds(
|
static struct wlr_vk_descriptor_pool *alloc_ds(
|
||||||
struct wlr_vk_renderer *renderer, VkDescriptorSet *ds,
|
struct wlr_vk_renderer *renderer, VkDescriptorSet *ds,
|
||||||
|
|
@ -690,7 +690,7 @@ bool vulkan_setup_two_pass_framebuffer(struct wlr_vk_render_buffer *buffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer->two_pass.render_setup = find_or_create_render_setup(
|
buffer->two_pass.render_setup = find_or_create_render_setup(
|
||||||
renderer, &fmt->format, true);
|
renderer, &fmt->format, true, false);
|
||||||
if (!buffer->two_pass.render_setup) {
|
if (!buffer->two_pass.render_setup) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
@ -862,7 +862,7 @@ bool vulkan_setup_one_pass_framebuffer(struct wlr_vk_render_buffer *buffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_vk_render_format_setup *render_setup =
|
struct wlr_vk_render_format_setup *render_setup =
|
||||||
find_or_create_render_setup(renderer, &fmt->format, false);
|
find_or_create_render_setup(renderer, &fmt->format, false, srgb);
|
||||||
if (!render_setup) {
|
if (!render_setup) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
@ -2225,11 +2225,12 @@ static bool init_static_render_data(struct wlr_vk_renderer *renderer) {
|
||||||
|
|
||||||
static struct wlr_vk_render_format_setup *find_or_create_render_setup(
|
static struct wlr_vk_render_format_setup *find_or_create_render_setup(
|
||||||
struct wlr_vk_renderer *renderer, const struct wlr_vk_format *format,
|
struct wlr_vk_renderer *renderer, const struct wlr_vk_format *format,
|
||||||
bool use_blending_buffer) {
|
bool use_blending_buffer, bool srgb) {
|
||||||
struct wlr_vk_render_format_setup *setup;
|
struct wlr_vk_render_format_setup *setup;
|
||||||
wl_list_for_each(setup, &renderer->render_format_setups, link) {
|
wl_list_for_each(setup, &renderer->render_format_setups, link) {
|
||||||
if (setup->render_format == format &&
|
if (setup->render_format == format &&
|
||||||
setup->use_blending_buffer == use_blending_buffer) {
|
setup->use_blending_buffer == use_blending_buffer &&
|
||||||
|
setup->use_srgb == srgb) {
|
||||||
return setup;
|
return setup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2242,6 +2243,7 @@ static struct wlr_vk_render_format_setup *find_or_create_render_setup(
|
||||||
|
|
||||||
setup->render_format = format;
|
setup->render_format = format;
|
||||||
setup->use_blending_buffer = use_blending_buffer;
|
setup->use_blending_buffer = use_blending_buffer;
|
||||||
|
setup->use_srgb = srgb;
|
||||||
setup->renderer = renderer;
|
setup->renderer = renderer;
|
||||||
wl_list_init(&setup->pipelines);
|
wl_list_init(&setup->pipelines);
|
||||||
|
|
||||||
|
|
@ -2390,9 +2392,8 @@ static struct wlr_vk_render_format_setup *find_or_create_render_setup(
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
assert(format->vk_srgb);
|
|
||||||
VkAttachmentDescription attachment = {
|
VkAttachmentDescription attachment = {
|
||||||
.format = format->vk_srgb,
|
.format = format->vk,
|
||||||
.samples = VK_SAMPLE_COUNT_1_BIT,
|
.samples = VK_SAMPLE_COUNT_1_BIT,
|
||||||
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||||
|
|
@ -2401,6 +2402,10 @@ static struct wlr_vk_render_format_setup *find_or_create_render_setup(
|
||||||
.initialLayout = VK_IMAGE_LAYOUT_GENERAL,
|
.initialLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||||
.finalLayout = VK_IMAGE_LAYOUT_GENERAL,
|
.finalLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||||
};
|
};
|
||||||
|
if (srgb) {
|
||||||
|
assert(format->vk_srgb);
|
||||||
|
attachment.format = format->vk_srgb;
|
||||||
|
}
|
||||||
|
|
||||||
VkAttachmentReference color_ref = {
|
VkAttachmentReference color_ref = {
|
||||||
.attachment = 0u,
|
.attachment = 0u,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue