RendererObject.cpp 2.2 KB

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