BsVulkanTextureManager.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsVulkanTextureManager.h"
  4. #include "BsVulkanTexture.h"
  5. #include "BsVulkanRenderTexture.h"
  6. #include "BsVulkanResource.h"
  7. namespace bs
  8. {
  9. SPtr<RenderTexture> VulkanTextureManager::createRenderTextureImpl(const RENDER_TEXTURE_DESC& desc)
  10. {
  11. VulkanRenderTexture* tex = new (bs_alloc<VulkanRenderTexture>()) VulkanRenderTexture(desc);
  12. return bs_core_ptr<VulkanRenderTexture>(tex);
  13. }
  14. PixelFormat VulkanTextureManager::getNativeFormat(TextureType ttype, PixelFormat format, int usage, bool hwGamma)
  15. {
  16. return PF_R8G8B8A8;;
  17. }
  18. void VulkanTextureCoreManager::onStartUp()
  19. {
  20. TextureCoreManager::onStartUp();
  21. SPtr<PixelData> whitePixelData = PixelData::create(2, 2, 1, PF_R8G8B8A8);
  22. whitePixelData->setColorAt(Color::White, 0, 0);
  23. whitePixelData->setColorAt(Color::White, 0, 1);
  24. whitePixelData->setColorAt(Color::White, 1, 0);
  25. whitePixelData->setColorAt(Color::White, 1, 1);
  26. TEXTURE_DESC desc;
  27. desc.type = TEX_TYPE_2D;
  28. desc.width = 2;
  29. desc.height = 2;
  30. desc.format = PF_R8G8B8A8;
  31. desc.usage = TU_STATIC;
  32. // Note: When multi-GPU is properly tested, make sure to create these textures on all GPUs
  33. mDummyReadTexture = std::static_pointer_cast<VulkanTextureCore>(createTexture(desc));
  34. mDummyReadTexture->writeData(*whitePixelData);
  35. desc.usage = TU_LOADSTORE;
  36. mDummyStorageTexture = std::static_pointer_cast<VulkanTextureCore>(createTexture(desc));
  37. }
  38. VkImageView VulkanTextureCoreManager::getDummyReadImageView(UINT32 deviceIdx) const
  39. {
  40. return mDummyReadTexture->getResource(deviceIdx)->getView(false);
  41. }
  42. VkImageView VulkanTextureCoreManager::getDummyStorageImageView(UINT32 deviceIdx) const
  43. {
  44. return mDummyStorageTexture->getResource(deviceIdx)->getView(false);
  45. }
  46. SPtr<TextureCore> VulkanTextureCoreManager::createTextureInternal(const TEXTURE_DESC& desc,
  47. const SPtr<PixelData>& initialData, GpuDeviceFlags deviceMask)
  48. {
  49. VulkanTextureCore* tex = new (bs_alloc<VulkanTextureCore>()) VulkanTextureCore(desc, initialData, deviceMask);
  50. SPtr<VulkanTextureCore> texPtr = bs_shared_ptr<VulkanTextureCore>(tex);
  51. texPtr->_setThisPtr(texPtr);
  52. return texPtr;
  53. }
  54. SPtr<RenderTextureCore> VulkanTextureCoreManager::createRenderTextureInternal(const RENDER_TEXTURE_DESC_CORE& desc,
  55. UINT32 deviceIdx)
  56. {
  57. SPtr<VulkanRenderTextureCore> texPtr = bs_shared_ptr_new<VulkanRenderTextureCore>(desc, deviceIdx);
  58. texPtr->_setThisPtr(texPtr);
  59. return texPtr;
  60. }
  61. }