From bd9aca2cc8066c4a2abeeda458ce43c044f4c5ee Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Thu, 25 Mar 2021 16:46:44 +0100 Subject: [PATCH] wined3d: Implement wined3d_swapchain_set_gamma_ramp() on top of wined3d_output_set_gamma_ramp(). Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/directx.c | 13 +++++++++++++ dlls/wined3d/swapchain.c | 24 ++++++++++++++---------- dlls/wined3d/wined3d_private.h | 2 ++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 95fa744d64d..7287b333f97 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -1509,6 +1509,19 @@ HRESULT CDECL wined3d_output_set_gamma_ramp(struct wined3d_output *output, const return WINED3D_OK; } +HRESULT wined3d_output_get_gamma_ramp(struct wined3d_output *output, struct wined3d_gamma_ramp *ramp) +{ + HDC dc; + + TRACE("output %p, ramp %p.\n", output, ramp); + + dc = CreateDCW(output->device_name, NULL, NULL, NULL); + GetDeviceGammaRamp(dc, ramp); + DeleteDC(dc); + + return WINED3D_OK; +} + HRESULT CDECL wined3d_adapter_get_identifier(const struct wined3d_adapter *adapter, DWORD flags, struct wined3d_adapter_identifier *identifier) { diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index 95db586c697..b575baa19ef 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -363,18 +363,20 @@ void CDECL wined3d_swapchain_get_desc(const struct wined3d_swapchain *swapchain, HRESULT CDECL wined3d_swapchain_set_gamma_ramp(const struct wined3d_swapchain *swapchain, DWORD flags, const struct wined3d_gamma_ramp *ramp) { - HDC dc; + struct wined3d_output *output; TRACE("swapchain %p, flags %#x, ramp %p.\n", swapchain, flags, ramp); if (flags) FIXME("Ignoring flags %#x.\n", flags); - dc = GetDCEx(swapchain->state.device_window, 0, DCX_USESTYLE | DCX_CACHE); - SetDeviceGammaRamp(dc, (void *)ramp); - ReleaseDC(swapchain->state.device_window, dc); + if (!(output = wined3d_swapchain_get_output(swapchain))) + { + ERR("Failed to get output from swapchain %p.\n", swapchain); + return E_FAIL; + } - return WINED3D_OK; + return wined3d_output_set_gamma_ramp(output, ramp); } void CDECL wined3d_swapchain_set_palette(struct wined3d_swapchain *swapchain, struct wined3d_palette *palette) @@ -389,15 +391,17 @@ void CDECL wined3d_swapchain_set_palette(struct wined3d_swapchain *swapchain, st HRESULT CDECL wined3d_swapchain_get_gamma_ramp(const struct wined3d_swapchain *swapchain, struct wined3d_gamma_ramp *ramp) { - HDC dc; + struct wined3d_output *output; TRACE("swapchain %p, ramp %p.\n", swapchain, ramp); - dc = GetDCEx(swapchain->state.device_window, 0, DCX_USESTYLE | DCX_CACHE); - GetDeviceGammaRamp(dc, ramp); - ReleaseDC(swapchain->state.device_window, dc); + if (!(output = wined3d_swapchain_get_output(swapchain))) + { + ERR("Failed to get output from swapchain %p.\n", swapchain); + return E_FAIL; + } - return WINED3D_OK; + return wined3d_output_get_gamma_ramp(output, ramp); } /* The is a fallback for cases where we e.g. can't create a GL context or diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index c15765af0e8..4c15f6ab178 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -3367,6 +3367,8 @@ struct wined3d_output D3DDDI_VIDEO_PRESENT_SOURCE_ID vidpn_source_id; }; +HRESULT wined3d_output_get_gamma_ramp(struct wined3d_output *output, struct wined3d_gamma_ramp *ramp) DECLSPEC_HIDDEN; + /* The adapter structure */ struct wined3d_adapter {