Program Listing for File D3D12Renderer.h

Return to documentation for file (Source\Azura\RenderSystem\Inc\D3D12\D3D12Renderer.h)

#pragma once
#include "Generic/Renderer.h"
#include "Generic/Window.h"

#include "Log/Log.h"
#include "D3D12/D3D12DrawablePool.h"
#include "D3D12/D3D12Core.h"
#include "D3D12/D3D12ScopedShader.h"

#include "Memory/MonotonicAllocator.h"
#include "Memory/HeapMemoryBuffer.h"
#include "D3D12/D3D12ScopedCommandBuffer.h"
#include "D3D12/D3D12ScopedSwapChain.h"
#include "D3D12/D3D12ScopedRenderPass.h"
#include "D3D12/D3D12ScopedComputePass.h"
#include "D3D12/D3D12ComputePool.h"


namespace Azura {
namespace D3D12 {

class D3D12Renderer : public Renderer {

public:
  D3D12Renderer(const ApplicationInfo& appInfo,
                const DeviceRequirements& deviceRequirements,
                const ApplicationRequirements& appRequirements,
                const SwapChainRequirements& swapChainRequirements,
                const RenderPassRequirements& renderPassRequirements,
                const DescriptorRequirements& descriptorRequirements,
                const ShaderRequirements& shaderRequirements,
                Memory::Allocator& mainAllocator,
                Memory::Allocator& drawAllocator,
                Window& window);

  String GetRenderingAPI() const override;

  DrawablePool& CreateDrawablePool(const DrawablePoolCreateInfo& createInfo) override;
  ComputePool& CreateComputePool(const ComputePoolCreateInfo& createInfo) override;

  void Submit() override;
  void RenderFrame() override;

  void SnapshotFrame(const String& exportPath) const override;

  void BindRenderTarget(U32 renderTargetId, const TextureDesc& desc, const U8* buffer) override;
  void BindBufferTarget(U32 bufferTargetId, const U8* buffer) override;

private:
  void AddShader(const ShaderCreateInfo& info) override;

  Log log_D3D12RenderSystem;

  Memory::HeapMemoryBuffer m_perFrameBuffer;
  Memory::MonotonicAllocator m_perFrameAllocator;

  Memory::HeapMemoryBuffer m_initBuffer;
  Memory::MonotonicAllocator m_initAllocator;

  D3D12ScopedSwapChain m_swapChain;
  Microsoft::WRL::ComPtr<ID3D12Device> m_device;

  Microsoft::WRL::ComPtr<ID3D12CommandAllocator> m_commandAllocator;
  Microsoft::WRL::ComPtr<ID3D12CommandQueue> m_mainGraphicsCommandQueue;
  Microsoft::WRL::ComPtr<ID3D12CommandQueue> m_mainComputeCommandQueue;

  UINT m_rtvDescriptorSize;
  UINT m_dsvDescriptorSize;

  CD3DX12_VIEWPORT m_viewport;
  CD3DX12_RECT m_scissorRect;

  D3D12ScopedImage m_depthTexture{};

  D3D12ScopedBuffer m_stagingBuffer;

  Containers::Vector<TextureBufferInfo> m_renderTargetUpdates;
  Containers::Vector<BufferTargetInfo> m_bufferTargetUpdates;

  Containers::Vector<std::pair<U32, RenderPassType>> m_renderSequence;

  Containers::Vector<D3D12ScopedImage> m_targetImages;
  Containers::Vector<D3D12ScopedBuffer> m_targetBuffers;

  Containers::Vector<D3D12ScopedRenderPass> m_renderPasses;
  Containers::Vector<D3D12ScopedComputePass> m_computePasses;

  Containers::Vector<D3D12DrawablePool> m_drawablePools;
  Containers::Vector<D3D12ComputePool> m_computePools;
  Containers::Vector<D3D12ScopedShader> m_shaders;
};

} // namespace D3D12
} // namespace Azura