2
0

BsVulkanHardwareBufferManager.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Managers/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 "RenderAPI/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. mDummyStructuredBuffer = bs_new<VulkanHardwareBuffer>(
  23. VulkanHardwareBuffer::BT_STRUCTURED, BF_UNKNOWN, GBU_STATIC, 16, GDF_DEFAULT);
  24. }
  25. VulkanHardwareBufferManager::~VulkanHardwareBufferManager()
  26. {
  27. bs_delete(mDummyReadBuffer);
  28. bs_delete(mDummyStorageBuffer);
  29. bs_delete(mDummyUniformBuffer);
  30. bs_delete(mDummyStructuredBuffer);
  31. }
  32. VkBufferView VulkanHardwareBufferManager::getDummyReadBufferView(UINT32 deviceIdx) const
  33. {
  34. return mDummyReadBuffer->getResource(deviceIdx)->getView();
  35. }
  36. VkBufferView VulkanHardwareBufferManager::getDummyStorageBufferView(UINT32 deviceIdx) const
  37. {
  38. return mDummyStorageBuffer->getResource(deviceIdx)->getView();
  39. }
  40. VkBuffer VulkanHardwareBufferManager::getDummyUniformBuffer(UINT32 deviceIdx) const
  41. {
  42. return mDummyUniformBuffer->getResource(deviceIdx)->getHandle();
  43. }
  44. VkBuffer VulkanHardwareBufferManager::getDummyStructuredBuffer(UINT32 deviceIdx) const
  45. {
  46. return mDummyStructuredBuffer->getResource(deviceIdx)->getHandle();
  47. }
  48. SPtr<VertexBuffer> VulkanHardwareBufferManager::createVertexBufferInternal(const VERTEX_BUFFER_DESC& desc,
  49. GpuDeviceFlags deviceMask)
  50. {
  51. SPtr<VulkanVertexBuffer> ret = bs_shared_ptr_new<VulkanVertexBuffer>(desc, deviceMask);
  52. ret->_setThisPtr(ret);
  53. return ret;
  54. }
  55. SPtr<IndexBuffer> VulkanHardwareBufferManager::createIndexBufferInternal(const INDEX_BUFFER_DESC& desc,
  56. GpuDeviceFlags deviceMask)
  57. {
  58. SPtr<VulkanIndexBuffer> ret = bs_shared_ptr_new<VulkanIndexBuffer>( desc, deviceMask);
  59. ret->_setThisPtr(ret);
  60. return ret;
  61. }
  62. SPtr<GpuParamBlockBuffer> VulkanHardwareBufferManager::createGpuParamBlockBufferInternal(UINT32 size,
  63. GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
  64. {
  65. VulkanGpuParamBlockBuffer* paramBlockBuffer =
  66. new (bs_alloc<VulkanGpuParamBlockBuffer>()) VulkanGpuParamBlockBuffer(size, usage, deviceMask);
  67. SPtr<GpuParamBlockBuffer> paramBlockBufferPtr = bs_shared_ptr<VulkanGpuParamBlockBuffer>(paramBlockBuffer);
  68. paramBlockBufferPtr->_setThisPtr(paramBlockBufferPtr);
  69. return paramBlockBufferPtr;
  70. }
  71. SPtr<GpuBuffer> VulkanHardwareBufferManager::createGpuBufferInternal(const GPU_BUFFER_DESC& desc,
  72. GpuDeviceFlags deviceMask)
  73. {
  74. VulkanGpuBuffer* buffer = new (bs_alloc<VulkanGpuBuffer>()) VulkanGpuBuffer(desc, deviceMask);
  75. SPtr<VulkanGpuBuffer> bufferPtr = bs_shared_ptr<VulkanGpuBuffer>(buffer);
  76. bufferPtr->_setThisPtr(bufferPtr);
  77. return bufferPtr;
  78. }
  79. SPtr<GpuParams> VulkanHardwareBufferManager::createGpuParamsInternal(
  80. const SPtr<GpuPipelineParamInfo>& paramInfo, GpuDeviceFlags deviceMask)
  81. {
  82. VulkanGpuParams* params = new (bs_alloc<VulkanGpuParams>()) VulkanGpuParams(paramInfo, deviceMask);
  83. SPtr<GpuParams> paramsPtr = bs_shared_ptr<GpuParams>(params);
  84. paramsPtr->_setThisPtr(paramsPtr);
  85. return paramsPtr;
  86. }
  87. }}