BsVulkanTextureManager.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. namespace ct
  19. {
  20. void VulkanTextureManager::onStartUp()
  21. {
  22. TextureManager::onStartUp();
  23. SPtr<PixelData> whitePixelData = PixelData::create(2, 2, 1, PF_R8G8B8A8);
  24. whitePixelData->setColorAt(Color::White, 0, 0);
  25. whitePixelData->setColorAt(Color::White, 0, 1);
  26. whitePixelData->setColorAt(Color::White, 1, 0);
  27. whitePixelData->setColorAt(Color::White, 1, 1);
  28. TEXTURE_DESC desc;
  29. desc.type = TEX_TYPE_2D;
  30. desc.width = 2;
  31. desc.height = 2;
  32. desc.format = PF_R8G8B8A8;
  33. desc.usage = TU_STATIC;
  34. // Note: When multi-GPU is properly tested, make sure to create these textures on all GPUs
  35. mDummyReadTexture = std::static_pointer_cast<VulkanTexture>(createTexture(desc));
  36. mDummyReadTexture->writeData(*whitePixelData);
  37. desc.usage = TU_LOADSTORE;
  38. mDummyStorageTexture = std::static_pointer_cast<VulkanTexture>(createTexture(desc));
  39. }
  40. VkImageView VulkanTextureManager::getDummyReadImageView(UINT32 deviceIdx) const
  41. {
  42. return mDummyReadTexture->getResource(deviceIdx)->getView(false);
  43. }
  44. VkImageView VulkanTextureManager::getDummyStorageImageView(UINT32 deviceIdx) const
  45. {
  46. return mDummyStorageTexture->getResource(deviceIdx)->getView(false);
  47. }
  48. SPtr<TextureCore> VulkanTextureManager::createTextureInternal(const TEXTURE_DESC& desc,
  49. const SPtr<PixelData>& initialData, GpuDeviceFlags deviceMask)
  50. {
  51. VulkanTexture* tex = new (bs_alloc<VulkanTexture>()) VulkanTexture(desc, initialData, deviceMask);
  52. SPtr<VulkanTexture> texPtr = bs_shared_ptr<VulkanTexture>(tex);
  53. texPtr->_setThisPtr(texPtr);
  54. return texPtr;
  55. }
  56. SPtr<RenderTextureCore> VulkanTextureManager::createRenderTextureInternal(const RENDER_TEXTURE_DESC& desc,
  57. UINT32 deviceIdx)
  58. {
  59. SPtr<VulkanRenderTexture> texPtr = bs_shared_ptr_new<VulkanRenderTexture>(desc, deviceIdx);
  60. texPtr->_setThisPtr(texPtr);
  61. return texPtr;
  62. }
  63. }
  64. }