mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-25 14:57:20 +00:00
[host] d12: disable RGB24 if the capture is HDR
This commit is contained in:
parent
5c4540ed8b
commit
b87d8d2f33
@ -66,9 +66,10 @@ struct D12Backend
|
|||||||
|
|
||||||
struct D12FetchDesc
|
struct D12FetchDesc
|
||||||
{
|
{
|
||||||
CaptureRotation rotation;
|
CaptureRotation rotation;
|
||||||
RECT * dirtyRects;
|
RECT * dirtyRects;
|
||||||
unsigned nbDirtyRects;
|
unsigned nbDirtyRects;
|
||||||
|
DXGI_COLOR_SPACE_TYPE colorSpace;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline bool d12_backendCreate(const D12Backend * backend,
|
static inline bool d12_backendCreate(const D12Backend * backend,
|
||||||
|
@ -67,6 +67,7 @@ typedef struct DDInstance
|
|||||||
ID3D11DeviceContext4 ** context;
|
ID3D11DeviceContext4 ** context;
|
||||||
IDXGIOutputDuplication ** dup;
|
IDXGIOutputDuplication ** dup;
|
||||||
CaptureRotation rotation;
|
CaptureRotation rotation;
|
||||||
|
DXGI_COLOR_SPACE_TYPE colorSpace;
|
||||||
bool release;
|
bool release;
|
||||||
|
|
||||||
DDCacheInfo cache[CACHE_SIZE];
|
DDCacheInfo cache[CACHE_SIZE];
|
||||||
@ -284,6 +285,17 @@ static bool d12_dd_init(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
comRef_defineLocal(IDXGIOutput6, output6);
|
||||||
|
hr = IDXGIOutput_QueryInterface(output, &IID_IDXGIOutput6, (void **)output6);
|
||||||
|
if (FAILED(hr))
|
||||||
|
this->colorSpace = DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DXGI_OUTPUT_DESC1 desc1;
|
||||||
|
IDXGIOutput6_GetDesc1(*output6, &desc1);
|
||||||
|
this->colorSpace = desc1.ColorSpace;
|
||||||
|
}
|
||||||
|
|
||||||
ID3D12Device3_AddRef(device);
|
ID3D12Device3_AddRef(device);
|
||||||
comRef_toGlobal(this->d12device, &device );
|
comRef_toGlobal(this->d12device, &device );
|
||||||
comRef_toGlobal(this->device , d11device5 );
|
comRef_toGlobal(this->device , d11device5 );
|
||||||
@ -451,6 +463,7 @@ static ID3D12Resource * d12_dd_fetch(D12Backend * instance,
|
|||||||
desc->dirtyRects = this->current->dirtyRects;
|
desc->dirtyRects = this->current->dirtyRects;
|
||||||
desc->nbDirtyRects = this->current->nbDirtyRects;
|
desc->nbDirtyRects = this->current->nbDirtyRects;
|
||||||
desc->rotation = this->rotation;
|
desc->rotation = this->rotation;
|
||||||
|
desc->colorSpace = this->colorSpace;
|
||||||
|
|
||||||
ID3D12Resource_AddRef(*this->current->d12Res);
|
ID3D12Resource_AddRef(*this->current->d12Res);
|
||||||
return *this->current->d12Res;
|
return *this->current->d12Res;
|
||||||
|
@ -499,7 +499,8 @@ static CaptureResult d12_waitFrame(unsigned frameBufferIndex,
|
|||||||
frame->stride = layout.Footprint.RowPitch / 4;
|
frame->stride = layout.Footprint.RowPitch / 4;
|
||||||
frame->format = this->allowRGB24 ?
|
frame->format = this->allowRGB24 ?
|
||||||
CAPTURE_FMT_BGR_32 : CAPTURE_FMT_BGRA;
|
CAPTURE_FMT_BGR_32 : CAPTURE_FMT_BGRA;
|
||||||
frame->hdr = false;
|
frame->hdr = desc.colorSpace ==
|
||||||
|
DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020;
|
||||||
frame->hdrPQ = false;
|
frame->hdrPQ = false;
|
||||||
frame->rotation = desc.rotation;
|
frame->rotation = desc.rotation;
|
||||||
|
|
||||||
@ -565,8 +566,10 @@ static CaptureResult d12_getFrame(unsigned frameBufferIndex,
|
|||||||
if (result != CAPTURE_RESULT_OK)
|
if (result != CAPTURE_RESULT_OK)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
|
const bool isSDR = desc.colorSpace == DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709;
|
||||||
|
|
||||||
ID3D12Resource * next = *src;
|
ID3D12Resource * next = *src;
|
||||||
if (this->allowRGB24)
|
if (this->allowRGB24 && isSDR)
|
||||||
{
|
{
|
||||||
next = d12_effectRun(
|
next = d12_effectRun(
|
||||||
this->effectRGB24, *this->device, *this->computeCommand.gfxList, next,
|
this->effectRGB24, *this->device, *this->computeCommand.gfxList, next,
|
||||||
@ -671,7 +674,7 @@ static CaptureResult d12_getFrame(unsigned frameBufferIndex,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// execute the compute commands
|
// execute the compute commands
|
||||||
if (this->allowRGB24)
|
if (this->allowRGB24 && isSDR)
|
||||||
{
|
{
|
||||||
d12_commandGroupExecute(*this->computeQueue, &this->computeCommand);
|
d12_commandGroupExecute(*this->computeQueue, &this->computeCommand);
|
||||||
|
|
||||||
@ -691,7 +694,7 @@ static CaptureResult d12_getFrame(unsigned frameBufferIndex,
|
|||||||
this->dstFormat.Height * this->pitch);
|
this->dstFormat.Height * this->pitch);
|
||||||
|
|
||||||
// reset the command queues
|
// reset the command queues
|
||||||
if (this->allowRGB24)
|
if (this->allowRGB24 && isSDR)
|
||||||
if (!d12_commandGroupReset(&this->computeCommand))
|
if (!d12_commandGroupReset(&this->computeCommand))
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user