The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

c/render: Refactor gfx distortion dispatch

+57 -70
+7 -13
src/xrt/compositor/main/comp_renderer.c
··· 816 816 i, // view_index 817 817 &viewport_datas[i]); // viewport_data 818 818 819 - struct render_gfx_mesh_ubo_data data = { 820 - .vertex_rot = vertex_rots[i], 821 - .post_transform = src_norm_rects[i], 822 - }; 823 - 824 - render_gfx_update_distortion( // 825 - rr, // rr 826 - i, // view, 827 - src_samplers[i], // sampler, 828 - src_image_views[i], // image_view, 829 - &data); // data 830 - 831 - render_gfx_distortion(rr); 819 + render_gfx_distortion( // 820 + rr, // 821 + i, // 822 + &vertex_rots[i], // 823 + src_samplers[i], // 824 + src_image_views[i], // 825 + &src_norm_rects[i]); // 832 826 833 827 render_gfx_end_view(rr); 834 828 }
+42 -35
src/xrt/compositor/render/render_gfx.c
··· 711 711 } 712 712 713 713 void 714 - render_gfx_distortion(struct render_gfx *rr) 714 + render_gfx_distortion(struct render_gfx *rr, 715 + uint32_t view_index, 716 + const struct xrt_matrix_2x2 *vertex_rot, 717 + VkSampler sampler, 718 + VkImageView image_view, 719 + const struct xrt_normalized_rect *src_rect) 715 720 { 716 721 struct vk_bundle *vk = vk_from_rr(rr); 717 722 struct render_resources *r = rr->r; 718 723 719 - uint32_t view = rr->current_view; 720 - struct render_gfx_view *v = &rr->views[view]; 724 + assert(view_index == rr->current_view); 725 + 726 + struct render_gfx_view *v = &rr->views[view_index]; 727 + 728 + struct render_buffer *ubo = &r->mesh.ubos[view_index]; 729 + VkDescriptorSet descriptor_set = v->mesh.descriptor_set; 730 + 731 + /* 732 + * UBO data. 733 + */ 734 + 735 + struct render_gfx_mesh_ubo_data data = { 736 + .vertex_rot = *vertex_rot, 737 + .post_transform = *src_rect, 738 + }; 739 + 740 + render_buffer_write(vk, ubo, &data, sizeof(struct render_gfx_mesh_ubo_data)); 741 + 721 742 722 743 /* 723 744 * Descriptors and pipeline. 724 745 */ 725 746 726 - VkDescriptorSet descriptor_sets[1] = {v->mesh.descriptor_set}; 747 + update_mesh_discriptor_set( // 748 + vk, // vk_bundle 749 + r->mesh.src_binding, // src_binding 750 + sampler, // sampler 751 + image_view, // image_view 752 + r->mesh.ubo_binding, // ubo_binding 753 + ubo->buffer, // buffer 754 + VK_WHOLE_SIZE, // size 755 + descriptor_set); // descriptor_set 756 + 757 + VkDescriptorSet descriptor_sets[1] = {descriptor_set}; 727 758 vk->vkCmdBindDescriptorSets( // 728 759 r->cmd, // commandBuffer 729 760 VK_PIPELINE_BIND_POINT_GRAPHICS, // pipelineBindPoint ··· 767 798 0, // offset 768 799 VK_INDEX_TYPE_UINT32); // indexType 769 800 770 - vk->vkCmdDrawIndexed( // 771 - r->cmd, // commandBuffer 772 - r->mesh.index_counts[view], // indexCount 773 - 1, // instanceCount 774 - r->mesh.index_offsets[view], // firstIndex 775 - 0, // vertexOffset 776 - 0); // firstInstance 801 + vk->vkCmdDrawIndexed( // 802 + r->cmd, // commandBuffer 803 + r->mesh.index_counts[view_index], // indexCount 804 + 1, // instanceCount 805 + r->mesh.index_offsets[view_index], // firstIndex 806 + 0, // vertexOffset 807 + 0); // firstInstance 777 808 } else { 778 809 vk->vkCmdDraw( // 779 810 r->cmd, // commandBuffer ··· 783 814 0); // firstInstance 784 815 } 785 816 } 786 - 787 - void 788 - render_gfx_update_distortion(struct render_gfx *rr, 789 - uint32_t view_index, 790 - VkSampler sampler, 791 - VkImageView image_view, 792 - struct render_gfx_mesh_ubo_data *data) 793 - { 794 - struct vk_bundle *vk = vk_from_rr(rr); 795 - struct render_resources *r = rr->r; 796 - struct render_gfx_view *v = &rr->views[view_index]; 797 - 798 - render_buffer_write(vk, &r->mesh.ubos[view_index], data, sizeof(struct render_gfx_mesh_ubo_data)); 799 - 800 - update_mesh_discriptor_set( // 801 - vk, // vk_bundle 802 - r->mesh.src_binding, // src_binding 803 - sampler, // sampler 804 - image_view, // image_view 805 - r->mesh.ubo_binding, // ubo_binding 806 - r->mesh.ubos[view_index].buffer, // buffer 807 - VK_WHOLE_SIZE, // size 808 - v->mesh.descriptor_set); // descriptor_set 809 - }
+8 -22
src/xrt/compositor/render/render_interface.h
··· 759 759 render_gfx_end_view(struct render_gfx *rr); 760 760 761 761 /*! 762 + * Dispatch one mesh shader instance into the current view. 763 + * 762 764 * @public @memberof render_gfx 763 765 */ 764 766 void 765 - render_gfx_distortion(struct render_gfx *rr); 767 + render_gfx_distortion(struct render_gfx *rr, 768 + uint32_t view_index, 769 + const struct xrt_matrix_2x2 *vertex_rot, 770 + VkSampler sampler, 771 + VkImageView image_view, 772 + const struct xrt_normalized_rect *src_rect); 766 773 767 774 /*! 768 775 * @} 769 776 */ 770 - 771 - /* 772 - * 773 - * Update functions. 774 - * 775 - */ 776 - 777 - /*! 778 - * @name Update functions 779 - * @{ 780 - */ 781 - /*! 782 - * @public @memberof render_gfx 783 - */ 784 - void 785 - render_gfx_update_distortion(struct render_gfx *rr, 786 - uint32_t view, 787 - VkSampler sampler, 788 - VkImageView image_view, 789 - struct render_gfx_mesh_ubo_data *data); 790 - //! @} 791 777 792 778 793 779 /*