DX12TLAS.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. #include "Array.h"
  3. #include "DX12Buffer.h"
  4. namespace Framework
  5. {
  6. class DX12DirectCommandQueue;
  7. class DX12TLAS : public ReferenceCounter
  8. {
  9. private:
  10. DX12Buffer* scratchBuffer;
  11. DX12Buffer* resultBuffer;
  12. DX12Buffer* descriptorBuffer;
  13. ID3D12Device5* zDevice;
  14. DX12DirectCommandQueue* zDirectQueue;
  15. Array<D3D12_RAYTRACING_INSTANCE_DESC*> overflowInstanceDescs;
  16. ArrayIterator<D3D12_RAYTRACING_INSTANCE_DESC*> overflowInstanceIterator;
  17. __int64 currentInstanceIndex;
  18. __int64 lastInstanceCount;
  19. D3D12_RAYTRACING_INSTANCE_DESC* mappedDescriptorBuffer;
  20. ID3D12Resource* lastResultBuffer;
  21. ID3D12Resource* lastScratchBuffer;
  22. bool bufferChanged;
  23. public:
  24. DLLEXPORT DX12TLAS(
  25. ID3D12Device5* zDevice, DX12DirectCommandQueue* zDirectQueue);
  26. DLLEXPORT virtual ~DX12TLAS();
  27. DLLEXPORT void startUpdate();
  28. DLLEXPORT D3D12_RAYTRACING_INSTANCE_DESC* nextInstanceDesc();
  29. DLLEXPORT void endUpdate();
  30. DLLEXPORT DX12Buffer* zResultBuffer() const;
  31. DLLEXPORT bool hasBufferChanged() const;
  32. DLLEXPORT void setBufferChanged(bool changed);
  33. };
  34. } // namespace Framework