//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// #include "Managers/BsVulkanHardwareBufferManager.h" #include "BsVulkanVertexBuffer.h" #include "BsVulkanIndexBuffer.h" #include "BsVulkanGpuBuffer.h" #include "BsVulkanGpuParamBlockBuffer.h" #include "BsVulkanGpuParams.h" #include "BsVulkanHardwareBuffer.h" #include "Renderapi/BsGpuParamDesc.h" namespace bs { namespace ct { VulkanHardwareBufferManager::VulkanHardwareBufferManager() { // Note: When multi-GPU is properly tested, make sure to create these textures on all GPUs mDummyReadBuffer = bs_new( VulkanHardwareBuffer::BT_GENERIC, BF_32X1F, GBU_STATIC, 16, GDF_DEFAULT); mDummyStorageBuffer = bs_new( VulkanHardwareBuffer::BT_STORAGE, BF_32X1F, GBU_STATIC, 16, GDF_DEFAULT); mDummyUniformBuffer = bs_new( VulkanHardwareBuffer::BT_UNIFORM, BF_UNKNOWN, GBU_STATIC, 16, GDF_DEFAULT); mDummyStructuredBuffer = bs_new( VulkanHardwareBuffer::BT_STRUCTURED, BF_UNKNOWN, GBU_STATIC, 16, GDF_DEFAULT); } VulkanHardwareBufferManager::~VulkanHardwareBufferManager() { bs_delete(mDummyReadBuffer); bs_delete(mDummyStorageBuffer); bs_delete(mDummyUniformBuffer); bs_delete(mDummyStructuredBuffer); } VkBufferView VulkanHardwareBufferManager::getDummyReadBufferView(UINT32 deviceIdx) const { return mDummyReadBuffer->getResource(deviceIdx)->getView(); } VkBufferView VulkanHardwareBufferManager::getDummyStorageBufferView(UINT32 deviceIdx) const { return mDummyStorageBuffer->getResource(deviceIdx)->getView(); } VkBuffer VulkanHardwareBufferManager::getDummyUniformBuffer(UINT32 deviceIdx) const { return mDummyUniformBuffer->getResource(deviceIdx)->getHandle(); } VkBuffer VulkanHardwareBufferManager::getDummyStructuredBuffer(UINT32 deviceIdx) const { return mDummyStructuredBuffer->getResource(deviceIdx)->getHandle(); } SPtr VulkanHardwareBufferManager::createVertexBufferInternal(const VERTEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask) { SPtr ret = bs_shared_ptr_new(desc, deviceMask); ret->_setThisPtr(ret); return ret; } SPtr VulkanHardwareBufferManager::createIndexBufferInternal(const INDEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask) { SPtr ret = bs_shared_ptr_new( desc, deviceMask); ret->_setThisPtr(ret); return ret; } SPtr VulkanHardwareBufferManager::createGpuParamBlockBufferInternal(UINT32 size, GpuParamBlockUsage usage, GpuDeviceFlags deviceMask) { VulkanGpuParamBlockBuffer* paramBlockBuffer = new (bs_alloc()) VulkanGpuParamBlockBuffer(size, usage, deviceMask); SPtr paramBlockBufferPtr = bs_shared_ptr(paramBlockBuffer); paramBlockBufferPtr->_setThisPtr(paramBlockBufferPtr); return paramBlockBufferPtr; } SPtr VulkanHardwareBufferManager::createGpuBufferInternal(const GPU_BUFFER_DESC& desc, GpuDeviceFlags deviceMask) { VulkanGpuBuffer* buffer = new (bs_alloc()) VulkanGpuBuffer(desc, deviceMask); SPtr bufferPtr = bs_shared_ptr(buffer); bufferPtr->_setThisPtr(bufferPtr); return bufferPtr; } SPtr VulkanHardwareBufferManager::createGpuParamsInternal( const SPtr& paramInfo, GpuDeviceFlags deviceMask) { VulkanGpuParams* params = new (bs_alloc()) VulkanGpuParams(paramInfo, deviceMask); SPtr paramsPtr = bs_shared_ptr(params); paramsPtr->_setThisPtr(paramsPtr); return paramsPtr; } }}