GrManager.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <AnKi/Gr/GrManager.h>
  6. #include <AnKi/Gr/Vulkan/GrManagerImpl.h>
  7. #include <AnKi/Gr/Buffer.h>
  8. #include <AnKi/Gr/Texture.h>
  9. #include <AnKi/Gr/TextureView.h>
  10. #include <AnKi/Gr/Sampler.h>
  11. #include <AnKi/Gr/Shader.h>
  12. #include <AnKi/Gr/ShaderProgram.h>
  13. #include <AnKi/Gr/CommandBuffer.h>
  14. #include <AnKi/Gr/Framebuffer.h>
  15. #include <AnKi/Gr/OcclusionQuery.h>
  16. #include <AnKi/Gr/TimestampQuery.h>
  17. #include <AnKi/Gr/RenderGraph.h>
  18. #include <AnKi/Gr/AccelerationStructure.h>
  19. namespace anki {
  20. GrManager::GrManager()
  21. {
  22. }
  23. GrManager::~GrManager()
  24. {
  25. // Destroy in reverse order
  26. m_cacheDir.destroy(m_alloc);
  27. }
  28. Error GrManager::newInstance(GrManagerInitInfo& init, GrManager*& gr)
  29. {
  30. auto alloc = HeapAllocator<U8>(init.m_allocCallback, init.m_allocCallbackUserData);
  31. GrManagerImpl* impl = alloc.newInstance<GrManagerImpl>();
  32. // Init
  33. impl->m_alloc = alloc;
  34. impl->m_cacheDir.create(alloc, init.m_cacheDirectory);
  35. Error err = impl->init(init);
  36. if(err)
  37. {
  38. alloc.deleteInstance(impl);
  39. gr = nullptr;
  40. }
  41. else
  42. {
  43. gr = impl;
  44. }
  45. return err;
  46. }
  47. void GrManager::deleteInstance(GrManager* gr)
  48. {
  49. if(gr == nullptr)
  50. {
  51. return;
  52. }
  53. auto alloc = gr->m_alloc;
  54. gr->~GrManager();
  55. alloc.deallocate(gr, 1);
  56. }
  57. TexturePtr GrManager::acquireNextPresentableTexture()
  58. {
  59. ANKI_VK_SELF(GrManagerImpl);
  60. return self.acquireNextPresentableTexture();
  61. }
  62. void GrManager::swapBuffers()
  63. {
  64. ANKI_VK_SELF(GrManagerImpl);
  65. self.endFrame();
  66. }
  67. void GrManager::finish()
  68. {
  69. ANKI_VK_SELF(GrManagerImpl);
  70. self.finish();
  71. }
  72. GrManagerStats GrManager::getStats() const
  73. {
  74. ANKI_VK_SELF_CONST(GrManagerImpl);
  75. GrManagerStats out;
  76. self.getGpuMemoryManager().getAllocatedMemory(out.m_gpuMemory, out.m_cpuMemory);
  77. out.m_commandBufferCount = self.getCommandBufferFactory().getCreatedCommandBufferCount();
  78. return out;
  79. }
  80. BufferPtr GrManager::newBuffer(const BufferInitInfo& init)
  81. {
  82. return BufferPtr(Buffer::newInstance(this, init));
  83. }
  84. TexturePtr GrManager::newTexture(const TextureInitInfo& init)
  85. {
  86. return TexturePtr(Texture::newInstance(this, init));
  87. }
  88. TextureViewPtr GrManager::newTextureView(const TextureViewInitInfo& init)
  89. {
  90. return TextureViewPtr(TextureView::newInstance(this, init));
  91. }
  92. SamplerPtr GrManager::newSampler(const SamplerInitInfo& init)
  93. {
  94. return SamplerPtr(Sampler::newInstance(this, init));
  95. }
  96. ShaderPtr GrManager::newShader(const ShaderInitInfo& init)
  97. {
  98. return ShaderPtr(Shader::newInstance(this, init));
  99. }
  100. ShaderProgramPtr GrManager::newShaderProgram(const ShaderProgramInitInfo& init)
  101. {
  102. return ShaderProgramPtr(ShaderProgram::newInstance(this, init));
  103. }
  104. CommandBufferPtr GrManager::newCommandBuffer(const CommandBufferInitInfo& init)
  105. {
  106. return CommandBufferPtr(CommandBuffer::newInstance(this, init));
  107. }
  108. FramebufferPtr GrManager::newFramebuffer(const FramebufferInitInfo& init)
  109. {
  110. return FramebufferPtr(Framebuffer::newInstance(this, init));
  111. }
  112. OcclusionQueryPtr GrManager::newOcclusionQuery()
  113. {
  114. return OcclusionQueryPtr(OcclusionQuery::newInstance(this));
  115. }
  116. TimestampQueryPtr GrManager::newTimestampQuery()
  117. {
  118. return TimestampQueryPtr(TimestampQuery::newInstance(this));
  119. }
  120. RenderGraphPtr GrManager::newRenderGraph()
  121. {
  122. return RenderGraphPtr(RenderGraph::newInstance(this));
  123. }
  124. AccelerationStructurePtr GrManager::newAccelerationStructure(const AccelerationStructureInitInfo& init)
  125. {
  126. return AccelerationStructurePtr(AccelerationStructure::newInstance(this, init));
  127. }
  128. } // end namespace anki