c/layers: Don't build equirect code if not enabled.

This commit is contained in:
Lubosz Sarnecki 2020-12-11 15:58:07 +01:00 committed by Jakob Bornecrantz
parent 4995854d06
commit 200fb5aeed
5 changed files with 46 additions and 10 deletions

View file

@ -522,6 +522,7 @@ compositor_layer_commit(struct xrt_compositor *xc, int64_t frame_id)
image = &layer->scs[0]->images[cyl->sub.image_index]; image = &layer->scs[0]->images[cyl->sub.image_index];
comp_renderer_set_cylinder_layer(c->r, i, image, data); comp_renderer_set_cylinder_layer(c->r, i, image, data);
} break; } break;
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
case XRT_LAYER_EQUIRECT1: { case XRT_LAYER_EQUIRECT1: {
struct xrt_layer_equirect1_data *eq = struct xrt_layer_equirect1_data *eq =
&layer->data.equirect1; &layer->data.equirect1;
@ -529,6 +530,8 @@ compositor_layer_commit(struct xrt_compositor *xc, int64_t frame_id)
image = &layer->scs[0]->images[eq->sub.image_index]; image = &layer->scs[0]->images[eq->sub.image_index];
comp_renderer_set_equirect1_layer(c->r, i, image, data); comp_renderer_set_equirect1_layer(c->r, i, image, data);
} break; } break;
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
case XRT_LAYER_EQUIRECT2: { case XRT_LAYER_EQUIRECT2: {
struct xrt_layer_equirect2_data *eq = struct xrt_layer_equirect2_data *eq =
&layer->data.equirect2; &layer->data.equirect2;
@ -536,6 +539,7 @@ compositor_layer_commit(struct xrt_compositor *xc, int64_t frame_id)
image = &layer->scs[0]->images[eq->sub.image_index]; image = &layer->scs[0]->images[eq->sub.image_index];
comp_renderer_set_equirect2_layer(c->r, i, image, data); comp_renderer_set_equirect2_layer(c->r, i, image, data);
} break; } break;
#endif
case XRT_LAYER_CUBE: case XRT_LAYER_CUBE:
// Should never end up here. // Should never end up here.
assert(false); assert(false);

View file

@ -83,6 +83,7 @@ _init_ubos(struct comp_render_layer *self)
return true; return true;
} }
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
static bool static bool
_init_equirect1_ubo(struct comp_render_layer *self) _init_equirect1_ubo(struct comp_render_layer *self)
{ {
@ -107,7 +108,8 @@ _init_equirect1_ubo(struct comp_render_layer *self)
return true; return true;
} }
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
static bool static bool
_init_equirect2_ubo(struct comp_render_layer *self) _init_equirect2_ubo(struct comp_render_layer *self)
{ {
@ -132,6 +134,7 @@ _init_equirect2_ubo(struct comp_render_layer *self)
return true; return true;
} }
#endif
static void static void
_update_descriptor(struct comp_render_layer *self, _update_descriptor(struct comp_render_layer *self,
@ -176,6 +179,8 @@ _update_descriptor(struct comp_render_layer *self,
vk->vkUpdateDescriptorSets(vk->device, 2, sets, 0, NULL); vk->vkUpdateDescriptorSets(vk->device, 2, sets, 0, NULL);
} }
#if defined(XRT_FEATURE_OPENXR_LAYER_EQUIRECT1) || \
defined(XRT_FEATURE_OPENXR_LAYER_EQUIRECT2)
static void static void
_update_descriptor_equirect(struct comp_render_layer *self, _update_descriptor_equirect(struct comp_render_layer *self,
VkDescriptorSet set, VkDescriptorSet set,
@ -200,6 +205,7 @@ _update_descriptor_equirect(struct comp_render_layer *self,
self->vk->vkUpdateDescriptorSets(self->vk->device, 1, sets, 0, NULL); self->vk->vkUpdateDescriptorSets(self->vk->device, 1, sets, 0, NULL);
} }
#endif
void void
comp_layer_update_descriptors(struct comp_render_layer *self, comp_layer_update_descriptors(struct comp_render_layer *self,
@ -212,6 +218,7 @@ comp_layer_update_descriptors(struct comp_render_layer *self,
sampler, image_view); sampler, image_view);
} }
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
void void
comp_layer_update_equirect1_descriptor(struct comp_render_layer *self, comp_layer_update_equirect1_descriptor(struct comp_render_layer *self,
struct xrt_layer_equirect1_data *data) struct xrt_layer_equirect1_data *data)
@ -227,7 +234,8 @@ comp_layer_update_equirect1_descriptor(struct comp_render_layer *self,
memcpy(self->equirect1_ubo.data, &self->equirect1_data, memcpy(self->equirect1_ubo.data, &self->equirect1_data,
sizeof(struct layer_equirect1_data)); sizeof(struct layer_equirect1_data));
} }
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
void void
comp_layer_update_equirect2_descriptor(struct comp_render_layer *self, comp_layer_update_equirect2_descriptor(struct comp_render_layer *self,
struct xrt_layer_equirect2_data *data) struct xrt_layer_equirect2_data *data)
@ -244,6 +252,7 @@ comp_layer_update_equirect2_descriptor(struct comp_render_layer *self,
memcpy(self->equirect2_ubo.data, &self->equirect2_data, memcpy(self->equirect2_ubo.data, &self->equirect2_data,
sizeof(struct layer_equirect2_data)); sizeof(struct layer_equirect2_data));
} }
#endif
void void
comp_layer_update_stereo_descriptors(struct comp_render_layer *self, comp_layer_update_stereo_descriptors(struct comp_render_layer *self,
@ -277,11 +286,14 @@ _init(struct comp_render_layer *self,
if (!_init_ubos(self)) if (!_init_ubos(self))
return false; return false;
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
if (!_init_equirect1_ubo(self)) if (!_init_equirect1_ubo(self))
return false; return false;
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
if (!_init_equirect2_ubo(self)) if (!_init_equirect2_ubo(self))
return false; return false;
#endif
VkDescriptorPoolSize pool_sizes[] = { VkDescriptorPoolSize pool_sizes[] = {
{ {
@ -305,11 +317,13 @@ _init(struct comp_render_layer *self,
&self->descriptor_sets[eye])) &self->descriptor_sets[eye]))
return false; return false;
#if defined(XRT_FEATURE_OPENXR_LAYER_EQUIRECT1) || \
defined(XRT_FEATURE_OPENXR_LAYER_EQUIRECT2)
if (!vk_allocate_descriptor_sets(self->vk, self->descriptor_pool, 1, if (!vk_allocate_descriptor_sets(self->vk, self->descriptor_pool, 1,
layout_equirect, layout_equirect,
&self->descriptor_equirect)) &self->descriptor_equirect))
return false; return false;
#endif
return true; return true;
} }
@ -523,9 +537,12 @@ comp_layer_destroy(struct comp_render_layer *self)
for (uint32_t eye = 0; eye < 2; eye++) for (uint32_t eye = 0; eye < 2; eye++)
vk_buffer_destroy(&self->transformation_ubos[eye], self->vk); vk_buffer_destroy(&self->transformation_ubos[eye], self->vk);
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
vk_buffer_destroy(&self->equirect1_ubo, self->vk); vk_buffer_destroy(&self->equirect1_ubo, self->vk);
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
vk_buffer_destroy(&self->equirect2_ubo, self->vk); vk_buffer_destroy(&self->equirect2_ubo, self->vk);
#endif
self->vk->vkDestroyDescriptorPool(self->vk->device, self->vk->vkDestroyDescriptorPool(self->vk->device,
self->descriptor_pool, NULL); self->descriptor_pool, NULL);

View file

@ -20,13 +20,16 @@ struct layer_transformation
bool flip_y; bool flip_y;
}; };
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
struct layer_equirect1_data struct layer_equirect1_data
{ {
struct xrt_vec2 scale; struct xrt_vec2 scale;
struct xrt_vec2 bias; struct xrt_vec2 bias;
float radius; float radius;
}; };
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
struct layer_equirect2_data struct layer_equirect2_data
{ {
float radius; float radius;
@ -34,6 +37,7 @@ struct layer_equirect2_data
float upper_vertical_angle; float upper_vertical_angle;
float lower_vertical_angle; float lower_vertical_angle;
}; };
#endif
struct comp_render_layer struct comp_render_layer
{ {
@ -48,12 +52,14 @@ struct comp_render_layer
struct layer_transformation transformation[2]; struct layer_transformation transformation[2];
struct vk_buffer transformation_ubos[2]; struct vk_buffer transformation_ubos[2];
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
struct layer_equirect1_data equirect1_data; struct layer_equirect1_data equirect1_data;
struct vk_buffer equirect1_ubo; struct vk_buffer equirect1_ubo;
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
struct layer_equirect2_data equirect2_data; struct layer_equirect2_data equirect2_data;
struct vk_buffer equirect2_ubo; struct vk_buffer equirect2_ubo;
#endif
VkDescriptorPool descriptor_pool; VkDescriptorPool descriptor_pool;
VkDescriptorSet descriptor_sets[2]; VkDescriptorSet descriptor_sets[2];
VkDescriptorSet descriptor_equirect; VkDescriptorSet descriptor_equirect;
@ -114,10 +120,13 @@ bool
comp_layer_update_cylinder_vertex_buffer(struct comp_render_layer *self, comp_layer_update_cylinder_vertex_buffer(struct comp_render_layer *self,
float central_angle); float central_angle);
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
void void
comp_layer_update_equirect1_descriptor(struct comp_render_layer *self, comp_layer_update_equirect1_descriptor(struct comp_render_layer *self,
struct xrt_layer_equirect1_data *data); struct xrt_layer_equirect1_data *data);
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
void void
comp_layer_update_equirect2_descriptor(struct comp_render_layer *self, comp_layer_update_equirect2_descriptor(struct comp_render_layer *self,
struct xrt_layer_equirect2_data *data); struct xrt_layer_equirect2_data *data);
#endif

View file

@ -574,6 +574,7 @@ comp_renderer_set_projection_layer(struct comp_renderer *r,
l->transformation[1].extent = data->stereo.r.sub.rect.extent; l->transformation[1].extent = data->stereo.r.sub.rect.extent;
} }
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
void void
comp_renderer_set_equirect1_layer(struct comp_renderer *r, comp_renderer_set_equirect1_layer(struct comp_renderer *r,
uint32_t layer, uint32_t layer,
@ -608,7 +609,8 @@ comp_renderer_set_equirect1_layer(struct comp_renderer *r,
l->transformation[i].extent = data->equirect1.sub.rect.extent; l->transformation[i].extent = data->equirect1.sub.rect.extent;
} }
} }
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
void void
comp_renderer_set_equirect2_layer(struct comp_renderer *r, comp_renderer_set_equirect2_layer(struct comp_renderer *r,
uint32_t layer, uint32_t layer,
@ -643,6 +645,7 @@ comp_renderer_set_equirect2_layer(struct comp_renderer *r,
l->transformation[i].extent = data->equirect2.sub.rect.extent; l->transformation[i].extent = data->equirect2.sub.rect.extent;
} }
} }
#endif
void void
comp_renderer_draw(struct comp_renderer *r) comp_renderer_draw(struct comp_renderer *r)

View file

@ -73,17 +73,20 @@ comp_renderer_set_cylinder_layer(struct comp_renderer *r,
struct comp_swapchain_image *image, struct comp_swapchain_image *image,
struct xrt_layer_data *data); struct xrt_layer_data *data);
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
void void
comp_renderer_set_equirect1_layer(struct comp_renderer *r, comp_renderer_set_equirect1_layer(struct comp_renderer *r,
uint32_t layer, uint32_t layer,
struct comp_swapchain_image *image, struct comp_swapchain_image *image,
struct xrt_layer_data *data); struct xrt_layer_data *data);
#endif
#ifdef XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
void void
comp_renderer_set_equirect2_layer(struct comp_renderer *r, comp_renderer_set_equirect2_layer(struct comp_renderer *r,
uint32_t layer, uint32_t layer,
struct comp_swapchain_image *image, struct comp_swapchain_image *image,
struct xrt_layer_data *data); struct xrt_layer_data *data);
#endif
void void
comp_renderer_allocate_layers(struct comp_renderer *self, uint32_t num_layers); comp_renderer_allocate_layers(struct comp_renderer *self, uint32_t num_layers);