mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-10-11 01:48:09 +00:00
[idd] rewrite to support DirectX12 copy
This commit is contained in:
@@ -20,8 +20,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Direct3DDevice.h"
|
||||
#include "CD3D11Device.h"
|
||||
#include "CD3D12Device.h"
|
||||
#include "CIndirectDeviceContext.h"
|
||||
#include "CInteropResourcePool.h"
|
||||
#include "CFrameBufferPool.h"
|
||||
|
||||
#include <Windows.h>
|
||||
#include <wrl.h>
|
||||
@@ -37,45 +40,29 @@ class CSwapChainProcessor
|
||||
private:
|
||||
CIndirectDeviceContext * m_devContext;
|
||||
IDDCX_SWAPCHAIN m_hSwapChain;
|
||||
std::shared_ptr<Direct3DDevice> m_device;
|
||||
std::shared_ptr<CD3D11Device> m_dx11Device;
|
||||
std::shared_ptr<CD3D12Device> m_dx12Device;
|
||||
HANDLE m_newFrameEvent;
|
||||
|
||||
CInteropResourcePool m_resPool;
|
||||
CFrameBufferPool m_fbPool;
|
||||
|
||||
Wrappers::HandleT<Wrappers::HandleTraits::HANDLENullTraits> m_thread[2];
|
||||
Wrappers::Event m_terminateEvent;
|
||||
|
||||
static DWORD CALLBACK _SwapChainThread(LPVOID arg);
|
||||
static DWORD CALLBACK _FrameThread(LPVOID arg);
|
||||
|
||||
|
||||
void SwapChainThread();
|
||||
void SwapChainThreadCore();
|
||||
void SwapChainNewFrame(ComPtr<IDXGIResource> acquiredBuffer);
|
||||
|
||||
void FrameThread();
|
||||
|
||||
struct StagingTexture
|
||||
{
|
||||
volatile LONG lock = 0;
|
||||
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN;
|
||||
Microsoft::WRL::ComPtr<ID3D11Texture2D> tex;
|
||||
D3D11_MAPPED_SUBRESOURCE map = {};
|
||||
};
|
||||
|
||||
StagingTexture m_cpuTex[STAGING_TEXTURES] = {};
|
||||
volatile LONG m_copyCount = 0;
|
||||
volatile LONG m_contextLock = 0;
|
||||
int m_texRIndex = 0;
|
||||
int m_texWIndex = 0;
|
||||
int m_lastIndex = 0;
|
||||
|
||||
bool SetupStagingTexture(StagingTexture & st, int width, int height, DXGI_FORMAT format);
|
||||
|
||||
public:
|
||||
CSwapChainProcessor(CIndirectDeviceContext * devContext, IDDCX_SWAPCHAIN hSwapChain,
|
||||
std::shared_ptr<Direct3DDevice> device, HANDLE newFrameEvent);
|
||||
std::shared_ptr<CD3D11Device> dx11Device, std::shared_ptr<CD3D12Device> dx12Device, HANDLE newFrameEvent);
|
||||
~CSwapChainProcessor();
|
||||
|
||||
CIndirectDeviceContext * GetDevice() { return m_devContext; }
|
||||
std::shared_ptr<CD3D12Device> GetD3D12Device() { return m_dx12Device; }
|
||||
|
||||
void ResendLastFrame();
|
||||
};
|
Reference in New Issue
Block a user