D3D12Texture2D.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #pragma once
  2. #include <d3d11.h>
  3. #include "D3D12ResourceFootprint.h"
  4. #include "GraphicsDevice/ITexture2D.h"
  5. #include "PlatformBase.h"
  6. #include "WebRTCMacros.h"
  7. namespace unity
  8. {
  9. namespace webrtc
  10. {
  11. class D3D12Texture2D : public ITexture2D
  12. {
  13. public:
  14. D3D12Texture2D(uint32_t w, uint32_t h, ID3D12Resource* nativeTex, HANDLE handle, ID3D11Texture2D* sharedTex);
  15. virtual ~D3D12Texture2D() override
  16. {
  17. SAFE_RELEASE(m_readbackResource)
  18. SAFE_RELEASE(m_sharedTexture)
  19. CloseHandle(m_sharedHandle);
  20. SAFE_RELEASE(m_nativeTexture)
  21. }
  22. inline void* GetNativeTexturePtrV() override;
  23. inline const void* GetNativeTexturePtrV() const override;
  24. inline void* GetEncodeTexturePtrV() override;
  25. inline const void* GetEncodeTexturePtrV() const override;
  26. HRESULT CreateReadbackResource(ID3D12Device* device);
  27. inline ID3D12Resource* GetReadbackResource() const;
  28. inline const D3D12ResourceFootprint* GetNativeTextureFootprint() const;
  29. HANDLE GetHandle() const { return m_sharedHandle; }
  30. D3D12_RESOURCE_DESC GetDesc() const { return m_nativeTexture->GetDesc(); }
  31. private:
  32. ID3D12Resource* m_nativeTexture;
  33. HANDLE m_sharedHandle;
  34. ID3D11Texture2D* m_sharedTexture; // Shared between DX11 and DX12
  35. // For CPU Read
  36. ID3D12Resource* m_readbackResource;
  37. D3D12ResourceFootprint m_nativeTextureFootprint;
  38. };
  39. //---------------------------------------------------------------------------------------------------------------------
  40. void* D3D12Texture2D::GetNativeTexturePtrV() { return m_nativeTexture; }
  41. const void* D3D12Texture2D::GetNativeTexturePtrV() const { return m_nativeTexture; };
  42. void* D3D12Texture2D::GetEncodeTexturePtrV() { return m_sharedTexture; }
  43. const void* D3D12Texture2D::GetEncodeTexturePtrV() const { return m_sharedTexture; }
  44. ID3D12Resource* D3D12Texture2D::GetReadbackResource() const { return m_readbackResource; }
  45. const D3D12ResourceFootprint* D3D12Texture2D::GetNativeTextureFootprint() const { return &m_nativeTextureFootprint; }
  46. } // end namespace webrtc
  47. } // end namespace unity