RendererObject.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Copyright (C) 2009-2022, 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/Renderer/RendererObject.h>
  6. #include <AnKi/Renderer/Renderer.h>
  7. #include <AnKi/Util/Enum.h>
  8. #include <AnKi/Util/ThreadHive.h>
  9. namespace anki {
  10. GrManager& RendererObject::getGrManager()
  11. {
  12. return m_r->getGrManager();
  13. }
  14. const GrManager& RendererObject::getGrManager() const
  15. {
  16. return m_r->getGrManager();
  17. }
  18. HeapAllocator<U8> RendererObject::getAllocator() const
  19. {
  20. return m_r->getAllocator();
  21. }
  22. ResourceManager& RendererObject::getResourceManager()
  23. {
  24. return m_r->getResourceManager();
  25. }
  26. void* RendererObject::allocateFrameStagingMemory(PtrSize size, StagingGpuMemoryType usage, StagingGpuMemoryToken& token)
  27. {
  28. return m_r->getStagingGpuMemory().allocateFrame(size, usage, token);
  29. }
  30. void RendererObject::bindUniforms(CommandBufferPtr& cmdb, U32 set, U32 binding,
  31. const StagingGpuMemoryToken& token) const
  32. {
  33. if(!token.isUnused())
  34. {
  35. cmdb->bindUniformBuffer(set, binding, token.m_buffer, token.m_offset, token.m_range);
  36. }
  37. else
  38. {
  39. cmdb->bindUniformBuffer(set, binding, m_r->getDummyBuffer(), 0, m_r->getDummyBuffer()->getSize());
  40. }
  41. }
  42. void RendererObject::bindStorage(CommandBufferPtr& cmdb, U32 set, U32 binding, const StagingGpuMemoryToken& token) const
  43. {
  44. if(!token.isUnused())
  45. {
  46. cmdb->bindStorageBuffer(set, binding, token.m_buffer, token.m_offset, token.m_range);
  47. }
  48. else
  49. {
  50. cmdb->bindStorageBuffer(set, binding, m_r->getDummyBuffer(), 0, m_r->getDummyBuffer()->getSize());
  51. }
  52. }
  53. U32 RendererObject::computeNumberOfSecondLevelCommandBuffers(U32 drawcallCount) const
  54. {
  55. const U32 drawcallsPerThread = drawcallCount / m_r->getThreadHive().getThreadCount();
  56. U32 secondLevelCmdbCount;
  57. if(drawcallsPerThread < kMinDrawcallsPerSecondaryCommandBuffer)
  58. {
  59. secondLevelCmdbCount = max(1u, drawcallCount / kMinDrawcallsPerSecondaryCommandBuffer);
  60. }
  61. else
  62. {
  63. secondLevelCmdbCount = m_r->getThreadHive().getThreadCount();
  64. }
  65. return secondLevelCmdbCount;
  66. }
  67. void RendererObject::registerDebugRenderTarget(CString rtName)
  68. {
  69. m_r->registerDebugRenderTarget(this, rtName);
  70. }
  71. const ConfigSet& RendererObject::getConfig() const
  72. {
  73. return m_r->getConfig();
  74. }
  75. } // end namespace anki