From 7186bddf60a236f4f46a4e82cf1bf44d97430eea Mon Sep 17 00:00:00 2001 From: Lubosz Sarnecki Date: Tue, 2 Jun 2020 12:29:54 +0200 Subject: [PATCH] c/comp+ipc: Use array indices again. This fixes a regression introduced by the IPC and layer rendering patchsets and passes the array_index to the correct places, so the correct VkImageView is used instead of the one with index 0. --- src/xrt/compositor/main/comp_compositor.c | 7 ++++--- src/xrt/compositor/main/comp_renderer.c | 12 ++++++++---- src/xrt/compositor/main/comp_renderer.h | 7 +++++-- src/xrt/ipc/ipc_server.h | 2 ++ src/xrt/ipc/ipc_server_client.c | 4 ++++ src/xrt/ipc/ipc_server_process.c | 6 ++++-- 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/xrt/compositor/main/comp_compositor.c b/src/xrt/compositor/main/comp_compositor.c index 6910c3625..414b47ea5 100644 --- a/src/xrt/compositor/main/comp_compositor.c +++ b/src/xrt/compositor/main/comp_compositor.c @@ -390,7 +390,7 @@ compositor_layer_commit(struct xrt_compositor *xc) image = &quad->sc->images[quad->image_index]; comp_renderer_set_quad_layer(c->r, image, &quad->pose, &quad->size, layer->flip_y, - i); + i, quad->array_index); } break; case COMP_LAYER_STEREO_PROJECTION: { struct comp_layer_stereo *stereo = &layer->stereo; @@ -399,8 +399,9 @@ compositor_layer_commit(struct xrt_compositor *xc) left = &stereo->l.sc->images[stereo->l.image_index]; right = &stereo->l.sc->images[stereo->r.image_index]; - comp_renderer_set_projection_layer(c->r, left, right, - layer->flip_y, i); + comp_renderer_set_projection_layer( + c->r, left, right, layer->flip_y, i, + stereo->l.array_index, stereo->r.array_index); } break; } } diff --git a/src/xrt/compositor/main/comp_renderer.c b/src/xrt/compositor/main/comp_renderer.c index 7595b93d9..3b980b2d9 100644 --- a/src/xrt/compositor/main/comp_renderer.c +++ b/src/xrt/compositor/main/comp_renderer.c @@ -478,10 +478,11 @@ comp_renderer_set_quad_layer(struct comp_renderer *r, struct xrt_pose *pose, struct xrt_vec2 *size, bool flip_y, - uint32_t layer) + uint32_t layer, + uint32_t array_index) { comp_layer_update_descriptors(r->lr->layers[layer], image->sampler, - image->views[0]); + image->views[array_index]); struct xrt_matrix_4x4 model_matrix; math_matrix_4x4_quad_model(pose, size, &model_matrix); @@ -499,11 +500,14 @@ comp_renderer_set_projection_layer(struct comp_renderer *r, struct comp_swapchain_image *left_image, struct comp_swapchain_image *right_image, bool flip_y, - uint32_t layer) + uint32_t layer, + uint32_t left_array_index, + uint32_t right_array_index) { comp_layer_update_stereo_descriptors( r->lr->layers[layer], left_image->sampler, right_image->sampler, - left_image->views[0], right_image->views[0]); + left_image->views[left_array_index], + right_image->views[right_array_index]); comp_layer_set_flip_y(r->lr->layers[layer], flip_y); diff --git a/src/xrt/compositor/main/comp_renderer.h b/src/xrt/compositor/main/comp_renderer.h index 9de098ea9..ec3d60748 100644 --- a/src/xrt/compositor/main/comp_renderer.h +++ b/src/xrt/compositor/main/comp_renderer.h @@ -59,7 +59,9 @@ comp_renderer_set_projection_layer(struct comp_renderer *r, struct comp_swapchain_image *left_image, struct comp_swapchain_image *right_image, bool flip_y, - uint32_t layer); + uint32_t layer, + uint32_t left_array_index, + uint32_t right_array_index); void comp_renderer_set_quad_layer(struct comp_renderer *r, @@ -67,7 +69,8 @@ comp_renderer_set_quad_layer(struct comp_renderer *r, struct xrt_pose *pose, struct xrt_vec2 *size, bool flip_y, - uint32_t layer); + uint32_t layer, + uint32_t array_index); void diff --git a/src/xrt/ipc/ipc_server.h b/src/xrt/ipc/ipc_server.h index 3eeecf48a..b34e9154d 100644 --- a/src/xrt/ipc/ipc_server.h +++ b/src/xrt/ipc/ipc_server.h @@ -87,6 +87,7 @@ struct ipc_quad_render_state { uint32_t swapchain_index; uint32_t image_index; + uint32_t array_index; struct xrt_pose pose; struct xrt_vec2 size; @@ -98,6 +99,7 @@ struct ipc_stereo_projection_render_state { uint32_t swapchain_index; uint32_t image_index; + uint32_t array_index; } l, r; }; diff --git a/src/xrt/ipc/ipc_server_client.c b/src/xrt/ipc/ipc_server_client.c index 9744c08eb..e7cefca4f 100644 --- a/src/xrt/ipc/ipc_server_client.c +++ b/src/xrt/ipc/ipc_server_client.c @@ -119,12 +119,16 @@ ipc_handle_compositor_layer_sync(volatile struct ipc_client_state *cs, rl->stereo.r.swapchain_index = sl->stereo.r.swapchain_id; rl->stereo.r.image_index = sl->stereo.r.image_index; + rl->stereo.l.array_index = sl->stereo.l.array_index; + rl->stereo.r.array_index = sl->stereo.r.array_index; + break; case IPC_LAYER_QUAD: rl->quad.swapchain_index = sl->quad.swapchain_id; rl->quad.image_index = sl->quad.image_index; rl->quad.pose = sl->quad.pose; rl->quad.size = sl->quad.size; + rl->quad.array_index = sl->quad.array_index; break; } } diff --git a/src/xrt/ipc/ipc_server_process.c b/src/xrt/ipc/ipc_server_process.c index a4bf12ca9..66f167169 100644 --- a/src/xrt/ipc/ipc_server_process.c +++ b/src/xrt/ipc/ipc_server_process.c @@ -538,7 +538,9 @@ _update_projection_layer(struct comp_compositor *c, l = &cl->images[layer->stereo.l.image_index]; r = &cr->images[layer->stereo.r.image_index]; - comp_renderer_set_projection_layer(c->r, l, r, layer->flip_y, i); + comp_renderer_set_projection_layer(c->r, l, r, layer->flip_y, i, + layer->stereo.l.array_index, + layer->stereo.r.array_index); return true; } @@ -564,7 +566,7 @@ _update_quad_layer(struct comp_compositor *c, struct xrt_vec2 size = layer->quad.size; comp_renderer_set_quad_layer(c->r, image, &pose, &size, layer->flip_y, - i); + i, layer->quad.array_index); return true; }