]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/vulkan.h
Add a wrapper class for recording Vulkan commands
[libs/gl.git] / source / backends / vulkan / vulkan.h
index c41813fa8a588f4f822942b92eba72c859f913b9..d77e2cc424e852852adb7ac31e75eeb7b6d3569c 100644 (file)
@@ -417,6 +417,61 @@ public:
        { return { vkSetDebugUtilsObjectName(device, &rNameInfo), "vkSetDebugUtilsObjectName" }; }
 };
 
+class VulkanCommandRecorder
+{
+private:
+       const VulkanFunctions &vk;
+       VkCommandBuffer commandBuffer;
+
+public:
+       VulkanCommandRecorder(const VulkanFunctions &v, VkCommandBuffer b): vk(v), commandBuffer(b) { }
+
+       void ExecuteCommands(std::uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers) const
+       { vk.CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers); }
+
+       void PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) const
+       { vk.CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); }
+
+       void BeginRenderPass(const VkRenderPassBeginInfo &rRenderPassBegin, VkSubpassContents contents) const
+       { vk.CmdBeginRenderPass(commandBuffer, rRenderPassBegin, contents); }
+
+       void EndRenderPass() const
+       { vk.CmdEndRenderPass(commandBuffer); }
+
+       void BindPipeline(VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const
+       { vk.CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); }
+
+       void BindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, std::uint32_t firstSet, std::uint32_t descriptorSetCount, const VkDescriptorSet *pDescriptorSets, std::uint32_t dynamicOffsetCount, const std::uint32_t *pDynamicOffsets) const
+       { vk.CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); }
+
+       void PushConstants(VkPipelineLayout layout, VkShaderStageFlags stageFlags, std::uint32_t offset, std::uint32_t size, const void *pValues) const
+       { vk.CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); }
+
+       void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, std::uint32_t regionCount, const VkBufferCopy *pRegions) const
+       { vk.CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); }
+
+       void CopyBufferToImage(VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, std::uint32_t regionCount, const VkBufferImageCopy *pRegions) const
+       { vk.CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); }
+
+       void BlitImage(VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit *pRegions, VkFilter filter) const
+       { vk.CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); }
+
+       void BindIndexBuffer(VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const
+       { vk.CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType); }
+
+       void DrawIndexed(std::uint32_t indexCount, std::uint32_t instanceCount, std::uint32_t firstIndex, std::int32_t vertexOffset, std::uint32_t firstInstance) const
+       { vk.CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); }
+
+       void BindVertexBuffers(std::uint32_t firstBinding, std::uint32_t bindingCount, const VkBuffer *pBuffers, const VkDeviceSize *pOffsets) const
+       { vk.CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets); }
+
+       void SetViewport(std::uint32_t firstViewport, std::uint32_t viewportCount, const VkViewport *pViewports) const
+       { vk.CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports); }
+
+       void SetScissor(std::uint32_t firstScissor, std::uint32_t scissorCount, const VkRect2D *pScissors) const
+       { vk.CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors); }
+};
+
 } // namespace GL
 } // namespace Msp