Skip to content
Snippets Groups Projects
Verified Commit 0809cf99 authored by Tobias Frisch's avatar Tobias Frisch
Browse files

Adjusted some doxygen comments and fixed multi-usage of descriptor set layouts

parent 2bf5952e
No related branches found
No related tags found
1 merge request!97Resolve "Dokumentation vervollständigen"
......@@ -85,7 +85,7 @@ namespace vkcv
uint32_t m_currentSwapchainImageIndex;
/**
* sets up swapchain images
* Sets up swapchain images
* @param handle Handle of swapchain
*/
void setSwapchainImages(SwapchainHandle handle);
......@@ -234,7 +234,7 @@ namespace vkcv
Multisampling multisampling = Multisampling::None);
/**
* creates a new window and returns it's handle
* Creates a new window and returns it's handle
* @param applicationName window name
* @param windowWidth
* @param windowHeight
......@@ -249,7 +249,7 @@ namespace vkcv
bool resizeable);
/**
* getter for window reference
* Getter for window reference
* @param handle of the window
* @return the window
*/
......@@ -257,14 +257,14 @@ namespace vkcv
Window& getWindow(const WindowHandle& handle );
/**
* gets the swapchain of the current focused window
* Gets the swapchain of the current focused window
* @return swapchain
*/
[[nodiscard]]
Swapchain& getSwapchainOfCurrentWindow();
/**
* returns the swapchain reference
* Returns the swapchain reference
* @param handle of the swapchain
* @return swapchain
*/
......@@ -272,7 +272,7 @@ namespace vkcv
Swapchain& getSwapchain(const SwapchainHandle& handle);
/**
* gets the swapchain handle from the window
* Gets the swapchain handle from the window
* @param handle of the window
* @return the swapchain from getSwapchain( SwapchainHandle )
*/
......@@ -280,7 +280,7 @@ namespace vkcv
Swapchain& getSwapchain(const WindowHandle& handle);
/**
* returns the image width
* Returns the image width
* @param image handle
* @return imageWidth
*/
......@@ -288,7 +288,7 @@ namespace vkcv
uint32_t getImageWidth(const ImageHandle& image);
/**
* returns the image height
* Returns the image height
* @param image handle
* @return imageHeight
*/
......@@ -296,19 +296,28 @@ namespace vkcv
uint32_t getImageHeight(const ImageHandle& image);
/**
* returns the image format of the image
* Returns the image format of the image
* @param image handle
* @return imageFormat
*/
[[nodiscard]]
vk::Format getImageFormat(const ImageHandle& image);
/** TODO:
* @param bindings
* @return
/**
* @brief Creates a descriptor set layout handle by a set of descriptor bindings.
*
* @param bindings Descriptor bindings
* @return Descriptor set layout handle
*/
[[nodiscard]]
DescriptorSetLayoutHandle createDescriptorSetLayout(const std::unordered_map<uint32_t, DescriptorBinding> &bindingsMap);
DescriptorSetLayoutHandle createDescriptorSetLayout(const DescriptorBindings &bindings);
/**
* @brief Returns the descriptor set layout of a descriptor set layout handle.
*
* @param handle Descriptor set layout handle
* @return Descriptor set layout
*/
DescriptorSetLayout getDescriptorSetLayout(const DescriptorSetLayoutHandle handle) const;
// TODO: existsDescriptorSetLayout function that checks and returns fitting layout upon existence.
......@@ -341,7 +350,7 @@ namespace vkcv
/**
* @brief start recording command buffers and increment frame index
* @brief Start recording command buffers and increment frame index
*/
bool beginFrame(uint32_t& width, uint32_t& height, const WindowHandle &windowHandle);
......@@ -415,6 +424,7 @@ namespace vkcv
/**
* Records the rtx ray generation to the @p cmdStreamHandle.
* Currently only supports @p closestHit, @p rayGen and @c miss shaderstages @c.
*
* @param cmdStreamHandle The command stream handle which receives relevant commands for drawing.
* @param rtxPipeline The raytracing pipeline from the RTXModule.
* @param rtxPipelineLayout The raytracing pipeline layout from the RTXModule.
......@@ -491,7 +501,7 @@ namespace vkcv
const PushConstants& pushConstants);
/**
* @brief end recording and present image
* @brief End recording and present image
*/
void endFrame( const WindowHandle& windowHandle );
......@@ -635,13 +645,68 @@ namespace vkcv
void recordBlitImage(const CommandStreamHandle& cmdStream, const ImageHandle& src, const ImageHandle& dst,
SamplerFilterType filterType);
/**
* @brief Sets a debug label to a buffer handle.
*
* @param handle Buffer handle
* @param label Debug label
*/
void setDebugLabel(const BufferHandle &handle, const std::string &label);
/**
* @brief Sets a debug label to a pass handle.
*
* @param handle Pass handle
* @param label Debug label
*/
void setDebugLabel(const PassHandle &handle, const std::string &label);
/**
* @brief Sets a debug label to a graphics pipeline handle.
*
* @param handle Graphics pipeline handle
* @param label Debug label
*/
void setDebugLabel(const GraphicsPipelineHandle &handle, const std::string &label);
/**
* @brief Sets a debug label to a compute pipeline handle.
*
* @param handle Compute pipeline handle
* @param label Debug label
*/
void setDebugLabel(const ComputePipelineHandle &handle, const std::string &label);
/**
* @brief Sets a debug label to a descriptor set handle.
*
* @param handle Descriptor set handle
* @param label Debug label
*/
void setDebugLabel(const DescriptorSetHandle &handle, const std::string &label);
/**
* @brief Sets a debug label to a sampler handle.
*
* @param handle Sampler handle
* @param label Debug label
*/
void setDebugLabel(const SamplerHandle &handle, const std::string &label);
/**
* @brief Sets a debug label to an image handle.
*
* @param handle Image handle
* @param label Debug label
*/
void setDebugLabel(const ImageHandle &handle, const std::string &label);
/**
* @brief Sets a debug label to a command stream handle.
*
* @param handle Command stream handle
* @param label Debug label
*/
void setDebugLabel(const CommandStreamHandle &handle, const std::string &label);
};
......
......@@ -80,7 +80,8 @@ namespace vkcv
struct DescriptorSetLayout
{
vk::DescriptorSetLayout vulkanHandle;
DescriptorBindings descriptorBindings;
DescriptorBindings descriptorBindings;
size_t layoutUsageCount;
};
struct DescriptorSet
......
......@@ -889,9 +889,9 @@ namespace vkcv
return getSwapchain(swapchainHandle);
}
DescriptorSetLayoutHandle Core::createDescriptorSetLayout(const DescriptorBindings &bindingsMap)
DescriptorSetLayoutHandle Core::createDescriptorSetLayout(const DescriptorBindings &bindings)
{
return m_DescriptorManager->createDescriptorSetLayout(bindingsMap);
return m_DescriptorManager->createDescriptorSetLayout(bindings);
}
DescriptorSetLayout Core::getDescriptorSetLayout(const DescriptorSetLayoutHandle handle) const
......
......@@ -35,6 +35,8 @@ namespace vkcv
}
for (uint64_t id = 0; id < m_DescriptorSetLayouts.size(); id++) {
// Resets the usage count to zero for destruction.
m_DescriptorSetLayouts[id].layoutUsageCount = 0;
destroyDescriptorSetLayoutById(id);
}
......@@ -48,15 +50,16 @@ namespace vkcv
}
}
DescriptorSetLayoutHandle DescriptorManager::createDescriptorSetLayout(const DescriptorBindings &setBindingsMap)
DescriptorSetLayoutHandle DescriptorManager::createDescriptorSetLayout(const DescriptorBindings &bindings)
{
for (size_t i = 0; i < m_DescriptorSetLayouts.size(); i++)
{
if(m_DescriptorSetLayouts[i].descriptorBindings.size() != setBindingsMap.size())
if(m_DescriptorSetLayouts[i].descriptorBindings.size() != bindings.size())
continue;
if (m_DescriptorSetLayouts[i].descriptorBindings == setBindingsMap)
if (m_DescriptorSetLayouts[i].descriptorBindings == bindings)
{
m_DescriptorSetLayouts[i].layoutUsageCount++;
return DescriptorSetLayoutHandle(i, [&](uint64_t id) { destroyDescriptorSetLayoutById(id); });
}
}
......@@ -65,7 +68,7 @@ namespace vkcv
std::vector<vk::DescriptorSetLayoutBinding> bindingsVector = {};
std::vector<vk::DescriptorBindingFlags> bindingsFlags = {};
for (auto bindingElem : setBindingsMap)
for (auto bindingElem : bindings)
{
DescriptorBinding binding = bindingElem.second;
uint32_t bindingID = bindingElem.first;
......@@ -104,7 +107,7 @@ namespace vkcv
};
const uint64_t id = m_DescriptorSetLayouts.size();
m_DescriptorSetLayouts.push_back({vulkanHandle, setBindingsMap});
m_DescriptorSetLayouts.push_back({vulkanHandle, bindings, 1});
return DescriptorSetLayoutHandle(id, [&](uint64_t id) { destroyDescriptorSetLayoutById(id); });
}
......@@ -341,6 +344,13 @@ namespace vkcv
}
auto& layout = m_DescriptorSetLayouts[id];
if (layout.layoutUsageCount > 1) {
layout.layoutUsageCount--;
return;
} else {
layout.layoutUsageCount = 0;
}
if (layout.vulkanHandle){
m_Device.destroy(layout.vulkanHandle);
......
#pragma once
/**
* @authors Artur Wasmut, Susanne D�tsch, Simeon Hermann
* @authors Artur Wasmut, Susanne D�tsch, Simeon Hermann, Tobias Frisch
* @file src/vkcv/DescriptorManager.cpp
* @brief Creation and handling of descriptor sets and the respective descriptor pools
*/
......@@ -23,7 +23,7 @@ namespace vkcv
explicit DescriptorManager(vk::Device device) noexcept;
~DescriptorManager() noexcept;
DescriptorSetLayoutHandle createDescriptorSetLayout(const DescriptorBindings &setBindingsMap);
DescriptorSetLayoutHandle createDescriptorSetLayout(const DescriptorBindings &bindings);
DescriptorSetHandle createDescriptorSet(const DescriptorSetLayoutHandle &setLayoutHandle);
void writeDescriptorSet(
......@@ -45,33 +45,38 @@ namespace vkcv
vk::DescriptorPoolCreateInfo m_PoolInfo;
/**
* Contains all the descriptor set layout descriptions
* that were requested by the user in calls of createDescriptorSetLayout.
*/
* Contains all the descriptor set layout descriptions
* that were requested by the user in calls of createDescriptorSetLayout.
*/
std::vector<DescriptorSetLayout> m_DescriptorSetLayouts;
/**
* Contains all the descriptor sets that were created by the user in calls of createDescriptorSet.
*/
* Contains all the descriptor sets that were created by the user in calls of createDescriptorSet.
*/
std::vector<DescriptorSet> m_DescriptorSets;
/**
* Destroys a specific descriptor set
* @param[in] the DescriptorSetHandle
*/
* @brief Destroys a specific descriptor set.
*
* @param[in] the DescriptorSetHandle
*/
void destroyDescriptorSetById(uint64_t id);
/**
* Destroys a specific descriptor set LAYOUT (not the set)
* @param[in] the DescriptorSetLayoutHandle
*/
* @brief Revokes the usage of a specific descriptor set layout and
* destroys it once the usage count is at zero.
*
* @param[in] the DescriptorSetLayoutHandle
*/
void destroyDescriptorSetLayoutById(uint64_t id);
/**
* creates a descriptor pool based on the poolSizes and poolInfo defined in the constructor
* is called initially in the constructor and then every time the pool runs out memory
* @return a DescriptorPool object
*/
* @brief Creates a descriptor pool based on the poolSizes and poolInfo defined in the
* constructor is called initially in the constructor and then every time the pool runs
* out memory.
*
* @return a DescriptorPool object
*/
vk::DescriptorPool allocateDescriptorPool();
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment