]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/vulkan.h
Only mark Result as checked if that specific value was checked
[libs/gl.git] / source / backends / vulkan / vulkan.h
index 60de01d18ba103006275f0605793dc2b2851306a..c41813fa8a588f4f822942b92eba72c859f913b9 100644 (file)
@@ -85,7 +85,7 @@ public:
        Result(Result &&r): result(r.result), function(r.function) { r.result = VK_SUCCESS; }
        ~Result() noexcept(false) { if(!checked) check(); }
 
-       bool operator==(VkResult r) { checked = true; return result==r; }
+       bool operator==(VkResult r) { bool m = (result==r); checked |= m; return m; }
        void check() { if(result!=VK_SUCCESS) throw Graphics::vulkan_error(result, function); }
 };
 
@@ -106,6 +106,7 @@ private:
        PFN_vkBeginCommandBuffer vkBeginCommandBuffer = 0;  // 6.4
        PFN_vkEndCommandBuffer vkEndCommandBuffer = 0;  // 6.4
        PFN_vkQueueSubmit vkQueueSubmit = 0;  // 6.5
+       PFN_vkCmdExecuteCommands vkCmdExecuteCommands = 0;  // 6.7
        PFN_vkCreateFence vkCreateFence = 0;  // 7.3
        PFN_vkDestroyFence vkDestroyFence = 0;  // 7.3
        PFN_vkGetFenceStatus vkGetFenceStatus = 0;  // 7.3
@@ -201,6 +202,9 @@ public:
        Result QueueSubmit(std::uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence) const
        { return { vkQueueSubmit(graphicsQueue, submitCount, pSubmits, handle_cast<::VkFence>(fence)), "vkQueueSubmit" }; }
 
+       void CmdExecuteCommands(VkCommandBuffer commandBuffer, std::uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers) const
+       { vkCmdExecuteCommands(handle_cast<::VkCommandBuffer>(commandBuffer), commandBufferCount, handle_cast<const ::VkCommandBuffer *>(pCommandBuffers)); }
+
        // Chapter 7: Synchronization and Cache Control
        Result CreateFence(const VkFenceCreateInfo &rCreateInfo, VkFence &rFence) const
        { return { vkCreateFence(device, &rCreateInfo, 0, handle_cast<::VkFence *>(&rFence)), "vkCreateFence" }; }