2
0

RendererObject.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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/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->getStagingGpuMemoryManager().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 < MIN_DRAWCALLS_PER_2ND_LEVEL_COMMAND_BUFFER)
  58. {
  59. secondLevelCmdbCount = max(1u, drawcallCount / MIN_DRAWCALLS_PER_2ND_LEVEL_COMMAND_BUFFER);
  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. } // end namespace anki