DeferredBarrierFactory.inl.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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/Vulkan/DeferredBarrierFactory.h>
  6. namespace anki
  7. {
  8. inline MicroDeferredBarrier::MicroDeferredBarrier(DeferredBarrierFactory* factory)
  9. : m_factory(factory)
  10. {
  11. ANKI_ASSERT(factory);
  12. VkEventCreateInfo ci = {};
  13. ci.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO;
  14. ANKI_VK_CHECKF(vkCreateEvent(factory->m_dev, &ci, nullptr, &m_handle));
  15. }
  16. inline MicroDeferredBarrier::~MicroDeferredBarrier()
  17. {
  18. if(m_handle)
  19. {
  20. vkDestroyEvent(m_factory->m_dev, m_handle, nullptr);
  21. m_handle = VK_NULL_HANDLE;
  22. }
  23. }
  24. inline GrAllocator<U8> MicroDeferredBarrier::getAllocator() const
  25. {
  26. return m_factory->m_alloc;
  27. }
  28. inline void MicroDeferredBarrierPtrDeleter::operator()(MicroDeferredBarrier* s)
  29. {
  30. ANKI_ASSERT(s);
  31. s->m_factory->m_recycler.recycle(s);
  32. }
  33. inline MicroDeferredBarrierPtr DeferredBarrierFactory::newInstance()
  34. {
  35. MicroDeferredBarrier* out = m_recycler.findToReuse();
  36. if(out == nullptr)
  37. {
  38. // Create a new one
  39. out = m_alloc.newInstance<MicroDeferredBarrier>(this);
  40. }
  41. return MicroDeferredBarrierPtr(out);
  42. }
  43. } // end namespace anki