mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-13 19:29:14 +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(IDXGISwapChain1)
|
||||
|| riid == __uuidof(IDXGISwapChain2)
|
||||
|| riid == __uuidof(IDXGISwapChain3)) {
|
||||
|| riid == __uuidof(IDXGISwapChain3)
|
||||
|| riid == __uuidof(IDXGISwapChain4)) {
|
||||
*ppvObject = ref(this);
|
||||
return S_OK;
|
||||
}
|
||||
@ -466,18 +467,59 @@ namespace dxvk {
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE DxgiSwapChain::CheckColorSpaceSupport(
|
||||
DXGI_COLOR_SPACE_TYPE ColorSpace,
|
||||
UINT* pColorSpaceSupport) {
|
||||
Logger::err("DxgiSwapChain::CheckColorSpaceSupport: Not implemented");
|
||||
DXGI_COLOR_SPACE_TYPE ColorSpace,
|
||||
UINT* pColorSpaceSupport) {
|
||||
if (!pColorSpaceSupport)
|
||||
return E_INVALIDARG;
|
||||
|
||||
UINT supportFlags = 0;
|
||||
|
||||
*pColorSpaceSupport = 0;
|
||||
return E_NOTIMPL;
|
||||
if (ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709)
|
||||
supportFlags |= DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT;
|
||||
|
||||
*pColorSpaceSupport = supportFlags;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE DxgiSwapChain::SetColorSpace1(DXGI_COLOR_SPACE_TYPE ColorSpace) {
|
||||
Logger::err("DxgiSwapChain::SetColorSpace1: Not implemented");
|
||||
return E_NOTIMPL;
|
||||
UINT support = 0;
|
||||
|
||||
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 DxgiOutput;
|
||||
|
||||
class DxgiSwapChain : public DxgiObject<IDXGISwapChain3> {
|
||||
class DxgiSwapChain : public DxgiObject<IDXGISwapChain4> {
|
||||
|
||||
public:
|
||||
|
||||
@ -156,6 +156,11 @@ namespace dxvk {
|
||||
HRESULT STDMETHODCALLTYPE SetColorSpace1(
|
||||
DXGI_COLOR_SPACE_TYPE ColorSpace) final;
|
||||
|
||||
HRESULT STDMETHODCALLTYPE SetHDRMetaData(
|
||||
DXGI_HDR_METADATA_TYPE Type,
|
||||
UINT Size,
|
||||
void* pMetaData) final;
|
||||
|
||||
HRESULT STDMETHODCALLTYPE SetGammaControl(
|
||||
UINT NumPoints,
|
||||
const DXGI_RGB* pGammaCurve);
|
||||
|
Loading…
x
Reference in New Issue
Block a user