Program Listing for File ComputePool.h¶
↰ Return to documentation for file (Source\Azura\RenderSystem\Inc\Generic\ComputePool.h
)
#pragma once
#include "Containers/Vector.h"
#include "GenericTypes.h"
#include "Types.h"
namespace Azura {
struct TextureDesc;
class Shader;
struct ComputePoolCreateInfo {
U32 m_byteSize{0};
Containers::Vector<U32> m_computePasses;
ThreadGroupDimensions m_launchDims;
~ComputePoolCreateInfo() = default;
ComputePoolCreateInfo(const ComputePoolCreateInfo& other) = delete;
ComputePoolCreateInfo(ComputePoolCreateInfo&& other) noexcept = delete;
ComputePoolCreateInfo& operator=(const ComputePoolCreateInfo& other) = delete;
ComputePoolCreateInfo& operator=(ComputePoolCreateInfo&& other) noexcept = delete;
ComputePoolCreateInfo(Memory::Allocator& alloc);
};
class ComputePool {
public:
explicit ComputePool(const ComputePoolCreateInfo& createInfo,
DescriptorCount descriptorCount,
Memory::Allocator& allocator);
virtual ~ComputePool() = default;
ComputePool(const ComputePool& other) = delete;
ComputePool(ComputePool&& other) noexcept = default;
ComputePool& operator=(const ComputePool& other) = delete;
ComputePool& operator=(ComputePool&& other) noexcept = default;
// Drawable Scope Binds
void BindUniformData(SlotID slot, const Containers::Vector<U8>& buffer);
virtual void BindUniformData(SlotID slot, const U8* buffer, U32 size) = 0;
// Pool Scope Binds
virtual void AddShader(U32 shaderId) = 0;
virtual void BindTextureData(SlotID slot, const TextureDesc& desc, const U8* buffer) = 0;
virtual void BindSampler(SlotID slot, const SamplerDesc& desc) = 0;
virtual void BeginUpdates() = 0;
void UpdateUniformData(SlotID slot, const Containers::Vector<U8>& buffer);
virtual void UpdateUniformData(SlotID slot, const U8* buffer, U32 size) = 0;
virtual void UpdateTextureData(SlotID slot, const U8* buffer) = 0;
virtual void Submit() = 0;
virtual void SubmitUpdates() = 0;
U32 GetSize() const;
bool CanRenderInPass(U32 renderPassId) const;
protected:
U32 GetSingleUniformBufferInfo(const DescriptorSlot& slot);
U32 GetSingleTextureBufferInfo(const DescriptorSlot& slot);
Memory::Allocator& GetAllocator() const;
DescriptorCount m_descriptorCount;
Containers::Vector<U32> m_computePasses;
Containers::Vector<UniformBufferInfo> m_uniformBufferInfos;
Containers::Vector<TextureBufferInfo> m_textureBufferInfos;
Containers::Vector<SamplerInfo> m_samplerInfos;
Containers::Vector<BufferUpdate> m_bufferUpdates;
ThreadGroupDimensions m_launchDims;
private:
U32 m_byteSize;
std::reference_wrapper<Memory::Allocator> m_allocator;
};
} // namespace Azura