From d4fa7e4cfcfe6e2d4c2bead0d4460dbcdc77366a Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 6 Aug 2019 01:23:15 +0430 Subject: [PATCH] wined3d: Store sRGB write control support in struct wined3d_d3d_info. Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/adapter_gl.c | 1 + dlls/wined3d/shader.c | 2 +- dlls/wined3d/utils.c | 2 +- dlls/wined3d/wined3d_private.h | 31 ++++++++++++++++--------------- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c index 8e06bf28897..abfa31b324a 100644 --- a/dlls/wined3d/adapter_gl.c +++ b/dlls/wined3d/adapter_gl.c @@ -3795,6 +3795,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter, d3d_info->vertex_bgra = !!gl_info->supported[ARB_VERTEX_ARRAY_BGRA]; d3d_info->texture_swizzle = !!gl_info->supported[ARB_TEXTURE_SWIZZLE]; d3d_info->srgb_read_control = !!gl_info->supported[EXT_TEXTURE_SRGB_DECODE]; + d3d_info->srgb_write_control = !!gl_info->supported[ARB_FRAMEBUFFER_SRGB]; if (gl_info->supported[ARB_TEXTURE_MULTISAMPLE]) d3d_info->multisample_draw_location = WINED3D_LOCATION_TEXTURE_RGB; diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c index 1d8540e5e94..ac3de3d776e 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c @@ -3902,7 +3902,7 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3 unsigned int i; memset(args, 0, sizeof(*args)); /* FIXME: Make sure all bits are set. */ - if (!gl_info->supported[ARB_FRAMEBUFFER_SRGB] && needs_srgb_write(context, state, state->fb)) + if (!d3d_info->srgb_write_control && needs_srgb_write(context, state, state->fb)) { static unsigned int warned = 0; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 0872b1007a4..1e99deb079d 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -6167,7 +6167,7 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d break; } } - settings->sRGB_write = !gl_info->supported[ARB_FRAMEBUFFER_SRGB] && needs_srgb_write(context, state, state->fb); + settings->sRGB_write = !d3d_info->srgb_write_control && needs_srgb_write(context, state, state->fb); if (d3d_info->vs_clipping || !use_vs(state) || !state->render_states[WINED3D_RS_CLIPPING] || !state->render_states[WINED3D_RS_CLIPPLANEENABLE]) { diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index fe4510e01bf..a21721a675e 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -198,21 +198,22 @@ struct wined3d_d3d_info { struct wined3d_d3d_limits limits; struct wined3d_ffp_attrib_ops ffp_attrib_ops; - unsigned int wined3d_creation_flags; - unsigned int xyzrhw : 1; - unsigned int emulated_flatshading : 1; - unsigned int ffp_generic_attributes : 1; - unsigned int vs_clipping : 1; - unsigned int shader_color_key : 1; - unsigned int shader_double_precision : 1; - unsigned int shader_output_interpolation : 1; - unsigned int viewport_array_index_any_shader : 1; - unsigned int texture_npot : 1; - unsigned int texture_npot_conditional : 1; - unsigned int draw_base_vertex_offset : 1; - unsigned int vertex_bgra : 1; - unsigned int texture_swizzle : 1; - unsigned int srgb_read_control : 1; + uint32_t wined3d_creation_flags; + uint32_t xyzrhw : 1; + uint32_t emulated_flatshading : 1; + uint32_t ffp_generic_attributes : 1; + uint32_t vs_clipping : 1; + uint32_t shader_color_key : 1; + uint32_t shader_double_precision : 1; + uint32_t shader_output_interpolation : 1; + uint32_t viewport_array_index_any_shader : 1; + uint32_t texture_npot : 1; + uint32_t texture_npot_conditional : 1; + uint32_t draw_base_vertex_offset : 1; + uint32_t vertex_bgra : 1; + uint32_t texture_swizzle : 1; + uint32_t srgb_read_control : 1; + uint32_t srgb_write_control : 1; enum wined3d_feature_level feature_level; DWORD multisample_draw_location;