BsVulkanHardwareBufferManager.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsVulkanHardwareBufferManager.h"
  4. #include "BsVulkanVertexBuffer.h"
  5. #include "BsVulkanIndexBuffer.h"
  6. #include "BsVulkanGpuBuffer.h"
  7. #include "BsVulkanGpuParamBlockBuffer.h"
  8. #include "BsVulkanGpuParams.h"
  9. #include "BsVulkanHardwareBuffer.h"
  10. #include "BsGpuParamDesc.h"
  11. namespace bs { namespace ct
  12. {
  13. VulkanHardwareBufferManager::VulkanHardwareBufferManager()
  14. {
  15. // Note: When multi-GPU is properly tested, make sure to create these textures on all GPUs
  16. mDummyReadBuffer = bs_new<VulkanHardwareBuffer>(
  17. VulkanHardwareBuffer::BT_GENERIC, BF_32X1F, GBU_STATIC, 16, GDF_DEFAULT);
  18. mDummyStorageBuffer = bs_new<VulkanHardwareBuffer>(
  19. VulkanHardwareBuffer::BT_STORAGE, BF_32X1F, GBU_STATIC, 16, GDF_DEFAULT);
  20. mDummyUniformBuffer = bs_new<VulkanHardwareBuffer>(
  21. VulkanHardwareBuffer::BT_UNIFORM, BF_UNKNOWN, GBU_STATIC, 16, GDF_DEFAULT);
  22. }
  23. VulkanHardwareBufferManager::~VulkanHardwareBufferManager()
  24. {
  25. bs_delete(mDummyReadBuffer);
  26. bs_delete(mDummyStorageBuffer);
  27. bs_delete(mDummyUniformBuffer);
  28. }
  29. VkBufferView VulkanHardwareBufferManager::getDummyReadBufferView(UINT32 deviceIdx) const
  30. {
  31. return mDummyReadBuffer->getResource(deviceIdx)->getView();
  32. }
  33. VkBufferView VulkanHardwareBufferManager::getDummyStorageBufferView(UINT32 deviceIdx) const
  34. {
  35. return mDummyStorageBuffer->getResource(deviceIdx)->getView();
  36. }
  37. VkBuffer VulkanHardwareBufferManager::getDummyUniformBuffer(UINT32 deviceIdx) const
  38. {
  39. return mDummyUniformBuffer->getResource(deviceIdx)->getHandle();
  40. }
  41. SPtr<VertexBuffer> VulkanHardwareBufferManager::createVertexBufferInternal(const VERTEX_BUFFER_DESC& desc,
  42. GpuDeviceFlags deviceMask)
  43. {
  44. SPtr<VulkanVertexBuffer> ret = bs_shared_ptr_new<VulkanVertexBuffer>(desc, deviceMask);
  45. ret->_setThisPtr(ret);
  46. return ret;
  47. }
  48. SPtr<IndexBuffer> VulkanHardwareBufferManager::createIndexBufferInternal(const INDEX_BUFFER_DESC& desc,
  49. GpuDeviceFlags deviceMask)
  50. {
  51. SPtr<VulkanIndexBuffer> ret = bs_shared_ptr_new<VulkanIndexBuffer>( desc, deviceMask);
  52. ret->_setThisPtr(ret);
  53. return ret;
  54. }
  55. SPtr<GpuParamBlockBuffer> VulkanHardwareBufferManager::createGpuParamBlockBufferInternal(UINT32 size,
  56. GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
  57. {
  58. VulkanGpuParamBlockBuffer* paramBlockBuffer =
  59. new (bs_alloc<VulkanGpuParamBlockBuffer>()) VulkanGpuParamBlockBuffer(size, usage, deviceMask);
  60. SPtr<GpuParamBlockBuffer> paramBlockBufferPtr = bs_shared_ptr<VulkanGpuParamBlockBuffer>(paramBlockBuffer);
  61. paramBlockBufferPtr->_setThisPtr(paramBlockBufferPtr);
  62. return paramBlockBufferPtr;
  63. }
  64. SPtr<GpuBuffer> VulkanHardwareBufferManager::createGpuBufferInternal(const GPU_BUFFER_DESC& desc,
  65. GpuDeviceFlags deviceMask)
  66. {
  67. VulkanGpuBuffer* buffer = new (bs_alloc<VulkanGpuBuffer>()) VulkanGpuBuffer(desc, deviceMask);
  68. SPtr<VulkanGpuBuffer> bufferPtr = bs_shared_ptr<VulkanGpuBuffer>(buffer);
  69. bufferPtr->_setThisPtr(bufferPtr);
  70. return bufferPtr;
  71. }
  72. SPtr<GpuParams> VulkanHardwareBufferManager::createGpuParamsInternal(
  73. const SPtr<GpuPipelineParamInfo>& paramInfo, GpuDeviceFlags deviceMask)
  74. {
  75. VulkanGpuParams* params = new (bs_alloc<VulkanGpuParams>()) VulkanGpuParams(paramInfo, deviceMask);
  76. SPtr<GpuParams> paramsPtr = bs_shared_ptr<GpuParams>(params);
  77. paramsPtr->_setThisPtr(paramsPtr);
  78. return paramsPtr;
  79. }
  80. }}