mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-14 22:29:15 +01:00
[dxgi] Implement IDXGISwapChain4
This commit is contained in:
parent
5cb7f26bb7
commit
32410a4f2b
@ -62,7 +62,8 @@ namespace dxvk {
|
|||||||
|| riid == __uuidof(IDXGISwapChain)
|
|| riid == __uuidof(IDXGISwapChain)
|
||||||
|| riid == __uuidof(IDXGISwapChain1)
|
|| riid == __uuidof(IDXGISwapChain1)
|
||||||
|| riid == __uuidof(IDXGISwapChain2)
|
|| riid == __uuidof(IDXGISwapChain2)
|
||||||
|| riid == __uuidof(IDXGISwapChain3)) {
|
|| riid == __uuidof(IDXGISwapChain3)
|
||||||
|
|| riid == __uuidof(IDXGISwapChain4)) {
|
||||||
*ppvObject = ref(this);
|
*ppvObject = ref(this);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
@ -466,18 +467,59 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE DxgiSwapChain::CheckColorSpaceSupport(
|
HRESULT STDMETHODCALLTYPE DxgiSwapChain::CheckColorSpaceSupport(
|
||||||
DXGI_COLOR_SPACE_TYPE ColorSpace,
|
DXGI_COLOR_SPACE_TYPE ColorSpace,
|
||||||
UINT* pColorSpaceSupport) {
|
UINT* pColorSpaceSupport) {
|
||||||
Logger::err("DxgiSwapChain::CheckColorSpaceSupport: Not implemented");
|
if (!pColorSpaceSupport)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
UINT supportFlags = 0;
|
||||||
|
|
||||||
*pColorSpaceSupport = 0;
|
if (ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709)
|
||||||
return E_NOTIMPL;
|
supportFlags |= DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT;
|
||||||
|
|
||||||
|
*pColorSpaceSupport = supportFlags;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE DxgiSwapChain::SetColorSpace1(DXGI_COLOR_SPACE_TYPE ColorSpace) {
|
HRESULT STDMETHODCALLTYPE DxgiSwapChain::SetColorSpace1(DXGI_COLOR_SPACE_TYPE ColorSpace) {
|
||||||
Logger::err("DxgiSwapChain::SetColorSpace1: Not implemented");
|
UINT support = 0;
|
||||||
return E_NOTIMPL;
|
|
||||||
|
HRESULT hr = CheckColorSpaceSupport(ColorSpace, &support);
|
||||||
|
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
if (!support)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE DxgiSwapChain::SetHDRMetaData(
|
||||||
|
DXGI_HDR_METADATA_TYPE Type,
|
||||||
|
UINT Size,
|
||||||
|
void* pMetaData) {
|
||||||
|
if (Size && !pMetaData)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
switch (Type) {
|
||||||
|
case DXGI_HDR_METADATA_TYPE_NONE:
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
case DXGI_HDR_METADATA_TYPE_HDR10:
|
||||||
|
if (Size != sizeof(DXGI_HDR_METADATA_HDR10))
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
// For some reason this always seems to succeed on Windows
|
||||||
|
Logger::warn("DXGI: HDR not supported");
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Logger::err(str::format("DXGI: Invalid HDR metadata type: ", Type));
|
||||||
|
return E_INVALIDARG;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ namespace dxvk {
|
|||||||
class DxgiFactory;
|
class DxgiFactory;
|
||||||
class DxgiOutput;
|
class DxgiOutput;
|
||||||
|
|
||||||
class DxgiSwapChain : public DxgiObject<IDXGISwapChain3> {
|
class DxgiSwapChain : public DxgiObject<IDXGISwapChain4> {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -156,6 +156,11 @@ namespace dxvk {
|
|||||||
HRESULT STDMETHODCALLTYPE SetColorSpace1(
|
HRESULT STDMETHODCALLTYPE SetColorSpace1(
|
||||||
DXGI_COLOR_SPACE_TYPE ColorSpace) final;
|
DXGI_COLOR_SPACE_TYPE ColorSpace) final;
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE SetHDRMetaData(
|
||||||
|
DXGI_HDR_METADATA_TYPE Type,
|
||||||
|
UINT Size,
|
||||||
|
void* pMetaData) final;
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE SetGammaControl(
|
HRESULT STDMETHODCALLTYPE SetGammaControl(
|
||||||
UINT NumPoints,
|
UINT NumPoints,
|
||||||
const DXGI_RGB* pGammaCurve);
|
const DXGI_RGB* pGammaCurve);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user