diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_vulkan/wrapper.h | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/wrapper.h b/src/video_core/renderer_vulkan/wrapper.h index 5d6a0227a..1f91cceb2 100644 --- a/src/video_core/renderer_vulkan/wrapper.h +++ b/src/video_core/renderer_vulkan/wrapper.h | |||
| @@ -789,4 +789,196 @@ private: | |||
| 789 | const InstanceDispatch* dld = nullptr; | 789 | const InstanceDispatch* dld = nullptr; |
| 790 | }; | 790 | }; |
| 791 | 791 | ||
| 792 | class CommandBuffer { | ||
| 793 | public: | ||
| 794 | CommandBuffer() noexcept = default; | ||
| 795 | |||
| 796 | explicit CommandBuffer(VkCommandBuffer handle, const DeviceDispatch& dld) noexcept | ||
| 797 | : handle{handle}, dld{&dld} {} | ||
| 798 | |||
| 799 | const VkCommandBuffer* address() const noexcept { | ||
| 800 | return &handle; | ||
| 801 | } | ||
| 802 | |||
| 803 | void Begin(const VkCommandBufferBeginInfo& begin_info) const { | ||
| 804 | Check(dld->vkBeginCommandBuffer(handle, &begin_info)); | ||
| 805 | } | ||
| 806 | |||
| 807 | void End() const { | ||
| 808 | Check(dld->vkEndCommandBuffer(handle)); | ||
| 809 | } | ||
| 810 | |||
| 811 | void BeginRenderPass(const VkRenderPassBeginInfo& renderpass_bi, | ||
| 812 | VkSubpassContents contents) const noexcept { | ||
| 813 | dld->vkCmdBeginRenderPass(handle, &renderpass_bi, contents); | ||
| 814 | } | ||
| 815 | |||
| 816 | void EndRenderPass() const noexcept { | ||
| 817 | dld->vkCmdEndRenderPass(handle); | ||
| 818 | } | ||
| 819 | |||
| 820 | void BeginQuery(VkQueryPool query_pool, u32 query, VkQueryControlFlags flags) const noexcept { | ||
| 821 | dld->vkCmdBeginQuery(handle, query_pool, query, flags); | ||
| 822 | } | ||
| 823 | |||
| 824 | void EndQuery(VkQueryPool query_pool, u32 query) const noexcept { | ||
| 825 | dld->vkCmdEndQuery(handle, query_pool, query); | ||
| 826 | } | ||
| 827 | |||
| 828 | void BindDescriptorSets(VkPipelineBindPoint bind_point, VkPipelineLayout layout, u32 first, | ||
| 829 | Span<VkDescriptorSet> sets, Span<u32> dynamic_offsets) const noexcept { | ||
| 830 | dld->vkCmdBindDescriptorSets(handle, bind_point, layout, first, sets.size(), sets.data(), | ||
| 831 | dynamic_offsets.size(), dynamic_offsets.data()); | ||
| 832 | } | ||
| 833 | |||
| 834 | void BindPipeline(VkPipelineBindPoint bind_point, VkPipeline pipeline) const noexcept { | ||
| 835 | dld->vkCmdBindPipeline(handle, bind_point, pipeline); | ||
| 836 | } | ||
| 837 | |||
| 838 | void BindIndexBuffer(VkBuffer buffer, VkDeviceSize offset, VkIndexType index_type) const | ||
| 839 | noexcept { | ||
| 840 | dld->vkCmdBindIndexBuffer(handle, buffer, offset, index_type); | ||
| 841 | } | ||
| 842 | |||
| 843 | void BindVertexBuffers(u32 first, u32 count, const VkBuffer* buffers, | ||
| 844 | const VkDeviceSize* offsets) const noexcept { | ||
| 845 | dld->vkCmdBindVertexBuffers(handle, first, count, buffers, offsets); | ||
| 846 | } | ||
| 847 | |||
| 848 | void BindVertexBuffer(u32 binding, VkBuffer buffer, VkDeviceSize offset) const noexcept { | ||
| 849 | BindVertexBuffers(binding, 1, &buffer, &offset); | ||
| 850 | } | ||
| 851 | |||
| 852 | void Draw(u32 vertex_count, u32 instance_count, u32 first_vertex, u32 first_instance) const | ||
| 853 | noexcept { | ||
| 854 | dld->vkCmdDraw(handle, vertex_count, instance_count, first_vertex, first_instance); | ||
| 855 | } | ||
| 856 | |||
| 857 | void DrawIndexed(u32 index_count, u32 instance_count, u32 first_index, u32 vertex_offset, | ||
| 858 | u32 first_instance) const noexcept { | ||
| 859 | dld->vkCmdDrawIndexed(handle, index_count, instance_count, first_index, vertex_offset, | ||
| 860 | first_instance); | ||
| 861 | } | ||
| 862 | |||
| 863 | void ClearAttachments(Span<VkClearAttachment> attachments, Span<VkClearRect> rects) const | ||
| 864 | noexcept { | ||
| 865 | dld->vkCmdClearAttachments(handle, attachments.size(), attachments.data(), rects.size(), | ||
| 866 | rects.data()); | ||
| 867 | } | ||
| 868 | |||
| 869 | void BlitImage(VkImage src_image, VkImageLayout src_layout, VkImage dst_image, | ||
| 870 | VkImageLayout dst_layout, Span<VkImageBlit> regions, VkFilter filter) const | ||
| 871 | noexcept { | ||
| 872 | dld->vkCmdBlitImage(handle, src_image, src_layout, dst_image, dst_layout, regions.size(), | ||
| 873 | regions.data(), filter); | ||
| 874 | } | ||
| 875 | |||
| 876 | void Dispatch(u32 x, u32 y, u32 z) const noexcept { | ||
| 877 | dld->vkCmdDispatch(handle, x, y, z); | ||
| 878 | } | ||
| 879 | |||
| 880 | void PipelineBarrier(VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, | ||
| 881 | VkDependencyFlags dependency_flags, Span<VkMemoryBarrier> memory_barriers, | ||
| 882 | Span<VkBufferMemoryBarrier> buffer_barriers, | ||
| 883 | Span<VkImageMemoryBarrier> image_barriers) const noexcept { | ||
| 884 | dld->vkCmdPipelineBarrier(handle, src_stage_mask, dst_stage_mask, dependency_flags, | ||
| 885 | memory_barriers.size(), memory_barriers.data(), | ||
| 886 | buffer_barriers.size(), buffer_barriers.data(), | ||
| 887 | image_barriers.size(), image_barriers.data()); | ||
| 888 | } | ||
| 889 | |||
| 890 | void CopyBufferToImage(VkBuffer src_buffer, VkImage dst_image, VkImageLayout dst_image_layout, | ||
| 891 | Span<VkBufferImageCopy> regions) const noexcept { | ||
| 892 | dld->vkCmdCopyBufferToImage(handle, src_buffer, dst_image, dst_image_layout, regions.size(), | ||
| 893 | regions.data()); | ||
| 894 | } | ||
| 895 | |||
| 896 | void CopyBuffer(VkBuffer src_buffer, VkBuffer dst_buffer, Span<VkBufferCopy> regions) const | ||
| 897 | noexcept { | ||
| 898 | dld->vkCmdCopyBuffer(handle, src_buffer, dst_buffer, regions.size(), regions.data()); | ||
| 899 | } | ||
| 900 | |||
| 901 | void CopyImage(VkImage src_image, VkImageLayout src_layout, VkImage dst_image, | ||
| 902 | VkImageLayout dst_layout, Span<VkImageCopy> regions) const noexcept { | ||
| 903 | dld->vkCmdCopyImage(handle, src_image, src_layout, dst_image, dst_layout, regions.size(), | ||
| 904 | regions.data()); | ||
| 905 | } | ||
| 906 | |||
| 907 | void CopyImageToBuffer(VkImage src_image, VkImageLayout src_layout, VkBuffer dst_buffer, | ||
| 908 | Span<VkBufferImageCopy> regions) const noexcept { | ||
| 909 | dld->vkCmdCopyImageToBuffer(handle, src_image, src_layout, dst_buffer, regions.size(), | ||
| 910 | regions.data()); | ||
| 911 | } | ||
| 912 | |||
| 913 | void FillBuffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize size, u32 data) const | ||
| 914 | noexcept { | ||
| 915 | dld->vkCmdFillBuffer(handle, dst_buffer, dst_offset, size, data); | ||
| 916 | } | ||
| 917 | |||
| 918 | void PushConstants(VkPipelineLayout layout, VkShaderStageFlags flags, u32 offset, u32 size, | ||
| 919 | const void* values) const noexcept { | ||
| 920 | dld->vkCmdPushConstants(handle, layout, flags, offset, size, values); | ||
| 921 | } | ||
| 922 | |||
| 923 | void SetCheckpointNV(const void* checkpoint_marker) const noexcept { | ||
| 924 | dld->vkCmdSetCheckpointNV(handle, checkpoint_marker); | ||
| 925 | } | ||
| 926 | |||
| 927 | void SetViewport(u32 first, Span<VkViewport> viewports) const noexcept { | ||
| 928 | dld->vkCmdSetViewport(handle, first, viewports.size(), viewports.data()); | ||
| 929 | } | ||
| 930 | |||
| 931 | void SetScissor(u32 first, Span<VkRect2D> scissors) const noexcept { | ||
| 932 | dld->vkCmdSetScissor(handle, first, scissors.size(), scissors.data()); | ||
| 933 | } | ||
| 934 | |||
| 935 | void SetBlendConstants(const float blend_constants[4]) const noexcept { | ||
| 936 | dld->vkCmdSetBlendConstants(handle, blend_constants); | ||
| 937 | } | ||
| 938 | |||
| 939 | void SetStencilCompareMask(VkStencilFaceFlags face_mask, u32 compare_mask) const noexcept { | ||
| 940 | dld->vkCmdSetStencilCompareMask(handle, face_mask, compare_mask); | ||
| 941 | } | ||
| 942 | |||
| 943 | void SetStencilReference(VkStencilFaceFlags face_mask, u32 reference) const noexcept { | ||
| 944 | dld->vkCmdSetStencilReference(handle, face_mask, reference); | ||
| 945 | } | ||
| 946 | |||
| 947 | void SetStencilWriteMask(VkStencilFaceFlags face_mask, u32 write_mask) const noexcept { | ||
| 948 | dld->vkCmdSetStencilWriteMask(handle, face_mask, write_mask); | ||
| 949 | } | ||
| 950 | |||
| 951 | void SetDepthBias(float constant_factor, float clamp, float slope_factor) const noexcept { | ||
| 952 | dld->vkCmdSetDepthBias(handle, constant_factor, clamp, slope_factor); | ||
| 953 | } | ||
| 954 | |||
| 955 | void SetDepthBounds(float min_depth_bounds, float max_depth_bounds) const noexcept { | ||
| 956 | dld->vkCmdSetDepthBounds(handle, min_depth_bounds, max_depth_bounds); | ||
| 957 | } | ||
| 958 | |||
| 959 | void BindTransformFeedbackBuffersEXT(u32 first, u32 count, const VkBuffer* buffers, | ||
| 960 | const VkDeviceSize* offsets, | ||
| 961 | const VkDeviceSize* sizes) const noexcept { | ||
| 962 | dld->vkCmdBindTransformFeedbackBuffersEXT(handle, first, count, buffers, offsets, sizes); | ||
| 963 | } | ||
| 964 | |||
| 965 | void BeginTransformFeedbackEXT(u32 first_counter_buffer, u32 counter_buffers_count, | ||
| 966 | const VkBuffer* counter_buffers, | ||
| 967 | const VkDeviceSize* counter_buffer_offsets) const noexcept { | ||
| 968 | dld->vkCmdBeginTransformFeedbackEXT(handle, first_counter_buffer, counter_buffers_count, | ||
| 969 | counter_buffers, counter_buffer_offsets); | ||
| 970 | } | ||
| 971 | |||
| 972 | void EndTransformFeedbackEXT(u32 first_counter_buffer, u32 counter_buffers_count, | ||
| 973 | const VkBuffer* counter_buffers, | ||
| 974 | const VkDeviceSize* counter_buffer_offsets) const noexcept { | ||
| 975 | dld->vkCmdEndTransformFeedbackEXT(handle, first_counter_buffer, counter_buffers_count, | ||
| 976 | counter_buffers, counter_buffer_offsets); | ||
| 977 | } | ||
| 978 | |||
| 979 | private: | ||
| 980 | VkCommandBuffer handle; | ||
| 981 | const DeviceDispatch* dld; | ||
| 982 | }; | ||
| 983 | |||
| 792 | } // namespace Vulkan::vk | 984 | } // namespace Vulkan::vk |