=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Store texture swizzle capability in struct wined3d_d3d_info.

Alexandre Julliard julliard at winehq.org
Tue May 7 17:32:45 CDT 2019


Module: wine
Branch: master
Commit: 446a2422a97bd6b35d840373be22b6289047d2a0
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=446a2422a97bd6b35d840373be22b6289047d2a0

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue May  7 11:03:38 2019 +0200

wined3d: Store texture swizzle capability in struct wined3d_d3d_info.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/adapter_gl.c      | 1 +
 dlls/wined3d/adapter_vk.c      | 1 +
 dlls/wined3d/cs.c              | 3 +--
 dlls/wined3d/shader.c          | 2 +-
 dlls/wined3d/texture.c         | 2 +-
 dlls/wined3d/utils.c           | 2 +-
 dlls/wined3d/view.c            | 2 +-
 dlls/wined3d/wined3d_private.h | 6 +++---
 8 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index 866cfec..1555ba4 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -3729,6 +3729,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
 
     d3d_info->draw_base_vertex_offset = !!gl_info->supported[ARB_DRAW_ELEMENTS_BASE_VERTEX];
     d3d_info->vertex_bgra = !!gl_info->supported[ARB_VERTEX_ARRAY_BGRA];
+    d3d_info->texture_swizzle = !!gl_info->supported[ARB_TEXTURE_SWIZZLE];
 
     if (gl_info->supported[ARB_TEXTURE_MULTISAMPLE])
         d3d_info->multisample_draw_location = WINED3D_LOCATION_TEXTURE_RGB;
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c
index 0d5e2f5..87a1112 100644
--- a/dlls/wined3d/adapter_vk.c
+++ b/dlls/wined3d/adapter_vk.c
@@ -729,6 +729,7 @@ static BOOL wined3d_adapter_vk_init(struct wined3d_adapter_vk *adapter_vk,
     adapter->shader_backend = &none_shader_backend;
 
     adapter->d3d_info.wined3d_creation_flags = wined3d_creation_flags;
+    adapter->d3d_info.texture_swizzle = TRUE;
 
     return TRUE;
 
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 9960d06..b2a2b1a 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -1348,7 +1348,6 @@ void wined3d_cs_emit_set_constant_buffer(struct wined3d_cs *cs, enum wined3d_sha
 
 static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data)
 {
-    const struct wined3d_gl_info *gl_info = &cs->device->adapter->gl_info;
     const struct wined3d_d3d_info *d3d_info = &cs->device->adapter->d3d_info;
     const struct wined3d_cs_set_texture *op = data;
     struct wined3d_texture *prev;
@@ -1369,7 +1368,7 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data)
 
         if (!prev || wined3d_texture_gl(op->texture)->target != wined3d_texture_gl(prev)->target
                 || (!is_same_fixup(new_format->color_fixup, old_format->color_fixup)
-                && !(can_use_texture_swizzle(gl_info, new_format) && can_use_texture_swizzle(gl_info, old_format)))
+                && !(can_use_texture_swizzle(d3d_info, new_format) && can_use_texture_swizzle(d3d_info, old_format)))
                 || (new_fmt_flags & WINED3DFMT_FLAG_SHADOW) != (old_fmt_flags & WINED3DFMT_FLAG_SHADOW))
             device_invalidate_state(cs->device, STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL));
 
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index 7ebfd4d..609b574 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -4025,7 +4025,7 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3
                 args->color_fixup[i] = COLOR_FIXUP_IDENTITY;
                 continue;
             }
-            if (can_use_texture_swizzle(gl_info, texture->resource.format))
+            if (can_use_texture_swizzle(d3d_info, texture->resource.format))
                 args->color_fixup[i] = COLOR_FIXUP_IDENTITY;
             else
                 args->color_fixup[i] = texture->resource.format->color_fixup;
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 9494920..664f8a9 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -1037,7 +1037,7 @@ void wined3d_texture_gl_bind(struct wined3d_texture_gl *texture_gl,
         checkGLcall("glTexParameteri(GL_DEPTH_TEXTURE_MODE_ARB, GL_INTENSITY)");
     }
 
-    if (!is_identity_fixup(fixup) && can_use_texture_swizzle(gl_info, format))
+    if (!is_identity_fixup(fixup) && can_use_texture_swizzle(context->d3d_info, format))
     {
         GLint swizzle[4];
 
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index e54eec2..2ec3546 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -5988,7 +5988,7 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d
 
         if ((texture = state->textures[i]))
         {
-            if (can_use_texture_swizzle(gl_info, texture->resource.format))
+            if (can_use_texture_swizzle(d3d_info, texture->resource.format))
                 settings->op[i].color_fixup = COLOR_FIXUP_IDENTITY;
             else
                 settings->op[i].color_fixup = texture->resource.format->color_fixup;
diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c
index 0cfadf7..ec9df71 100644
--- a/dlls/wined3d/view.c
+++ b/dlls/wined3d/view.c
@@ -226,7 +226,7 @@ static void create_texture_view(struct wined3d_gl_view *view, GLenum view_target
         context_invalidate_compute_state(context, STATE_COMPUTE_SHADER_RESOURCE_BINDING);
         context_invalidate_state(context, STATE_GRAPHICS_SHADER_RESOURCE_BINDING);
     }
-    else if (!is_identity_fixup(view_format->color_fixup) && can_use_texture_swizzle(gl_info, view_format))
+    else if (!is_identity_fixup(view_format->color_fixup) && can_use_texture_swizzle(context->d3d_info, view_format))
     {
         GLint swizzle[4];
 
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 221ca6e..875c33b 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -209,6 +209,7 @@ struct wined3d_d3d_info
     unsigned int texture_npot_conditional : 1;
     unsigned int draw_base_vertex_offset : 1;
     unsigned int vertex_bgra : 1;
+    unsigned int texture_swizzle : 1;
     enum wined3d_feature_level feature_level;
 
     DWORD multisample_draw_location;
@@ -4739,10 +4740,9 @@ static inline GLuint wined3d_texture_gl_get_texture_name(const struct wined3d_te
             ? texture_gl->texture_srgb.name : texture_gl->texture_rgb.name;
 }
 
-static inline BOOL can_use_texture_swizzle(const struct wined3d_gl_info *gl_info, const struct wined3d_format *format)
+static inline BOOL can_use_texture_swizzle(const struct wined3d_d3d_info *d3d_info, const struct wined3d_format *format)
 {
-    return gl_info->supported[ARB_TEXTURE_SWIZZLE] && !is_complex_fixup(format->color_fixup)
-            && !is_scaling_fixup(format->color_fixup);
+    return d3d_info->texture_swizzle && !is_complex_fixup(format->color_fixup) && !is_scaling_fixup(format->color_fixup);
 }
 
 static inline BOOL needs_interpolation_qualifiers_for_shader_outputs(const struct wined3d_gl_info *gl_info)




More information about the wine-cvs mailing list