DeferredBarrierFactory.inl.h 1.2 KB

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