aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/shadingcontext.hpp
blob: 7b8d5f0306fb913072190698e18b67d96edd4abd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#pragma once

#include "vke.h"

namespace vke {
    struct BindingSlot {
        uint layoutIdx;
        uint descriptorIdx;
        Resource* pResource;
    };

    //should be thread safe with dedicate desc and cmd pools
    class ShadingContext
    {
        device_t*               			device;
        VkDescriptorPool					descriptorPool;
        VkCommandPool                       cmdPool;//?


        std::vector<std::vector<VkDescriptorSetLayoutBinding>> descriptorSetLayoutBindings;

        uint32_t                maxSets;

    public:
        std::vector<VkDescriptorSetLayout>	layouts;

        ShadingContext(device_t* _device, uint32_t maxDescriptorSet = 1);
        virtual ~ShadingContext();

        uint32_t addDescriptorSetLayout (const std::vector<VkDescriptorSetLayoutBinding>& descriptorSetLayoutBinding);

        void prepare ();

        VkDescriptorSet allocateDescriptorSet (uint32_t layoutIndex);
        void updateDescriptorSet (VkDescriptorSet ds, const std::vector<BindingSlot>& slots);
    };
}