D3D11GraphicsDevice.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #include <d3d11.h>
  3. #include <memory>
  4. #include <wrl/client.h>
  5. #include "GraphicsDevice/Cuda/CudaContext.h"
  6. #include "GraphicsDevice/IGraphicsDevice.h"
  7. #include "nvEncodeAPI.h"
  8. using namespace Microsoft::WRL;
  9. namespace unity
  10. {
  11. namespace webrtc
  12. {
  13. class D3D11GraphicsDevice : public IGraphicsDevice
  14. {
  15. public:
  16. D3D11GraphicsDevice(ID3D11Device* nativeDevice, UnityGfxRenderer renderer, ProfilerMarkerFactory* profiler);
  17. virtual ~D3D11GraphicsDevice() override;
  18. virtual bool InitV() override;
  19. virtual void ShutdownV() override;
  20. inline virtual void* GetEncodeDevicePtrV() override;
  21. virtual ITexture2D*
  22. CreateDefaultTextureV(uint32_t w, uint32_t h, UnityRenderingExtTextureFormat textureFormat) override;
  23. virtual ITexture2D*
  24. CreateCPUReadTextureV(uint32_t w, uint32_t h, UnityRenderingExtTextureFormat textureFormat) override;
  25. virtual bool CopyResourceV(ITexture2D* dest, ITexture2D* src) override;
  26. virtual bool CopyResourceFromNativeV(ITexture2D* dest, void* nativeTexturePtr) override;
  27. std::unique_ptr<GpuMemoryBufferHandle> Map(ITexture2D* texture) override;
  28. virtual rtc::scoped_refptr<::webrtc::I420Buffer> ConvertRGBToI420(ITexture2D* tex) override;
  29. bool IsCudaSupport() override { return m_isCudaSupport; }
  30. CUcontext GetCUcontext() override { return m_cudaContext.GetContext(); }
  31. NV_ENC_BUFFER_FORMAT GetEncodeBufferFormat() override { return NV_ENC_BUFFER_FORMAT_ARGB; }
  32. private:
  33. HRESULT WaitFlush();
  34. ID3D11Device* m_d3d11Device;
  35. bool m_isCudaSupport;
  36. CudaContext m_cudaContext;
  37. };
  38. //---------------------------------------------------------------------------------------------------------------------
  39. void* D3D11GraphicsDevice::GetEncodeDevicePtrV() { return reinterpret_cast<void*>(m_d3d11Device); }
  40. } // end namespace webrtc
  41. } // end namespace unity