]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/pipelinestate_backend.h
Rebind all descriptor sets if push constant layout changes
[libs/gl.git] / source / backends / vulkan / pipelinestate_backend.h
index 19f7f902d1e7257ba4430a4dd7d7af8b9244a12d..d033fbb8591897309cd4e7c106a204600cd19063 100644 (file)
@@ -11,14 +11,18 @@ class Device;
 
 class VulkanPipelineState: public NonCopyable
 {
+       friend class DescriptorPool;
        friend class PipelineCache;
        friend class VulkanCommands;
 
 protected:
        Device &device;
        mutable unsigned changes = 0;
-       mutable VkPipeline handle;
-       mutable std::vector<VkDescriptorSet> descriptor_set_handles;
+       mutable unsigned unapplied = 0;
+       mutable VkPipeline handle = 0;
+       mutable std::vector<unsigned> descriptor_set_slots;
+       mutable unsigned first_changed_desc_set = 0;
+       mutable std::uint32_t push_const_compat = 0;
 
        VulkanPipelineState();
        VulkanPipelineState(VulkanPipelineState &&);
@@ -30,10 +34,11 @@ protected:
        std::uint64_t compute_hash() const;
        void fill_creation_info(std::vector<char> &) const;
        std::uint64_t compute_descriptor_set_hash(unsigned) const;
+       bool is_descriptor_set_dynamic(unsigned) const;
        VkDescriptorSetLayout get_descriptor_set_layout(unsigned) const;
-       unsigned fill_descriptor_writes(unsigned, std::vector<char> &) const;
+       unsigned fill_descriptor_writes(unsigned, unsigned, std::vector<char> &) const;
 
-       void apply(VkCommandBuffer, bool) const;
+       void apply(VkCommandBuffer, const VulkanPipelineState *, unsigned, bool) const;
 };
 
 using PipelineStateBackend = VulkanPipelineState;