=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Move legacy texture image unit range allocation to wined3d_gl_limits_get_texture_unit_range ().

Alexandre Julliard julliard at winehq.org
Mon Mar 13 15:40:32 CDT 2017


Module: wine
Branch: master
Commit: d89ee7aaaafb46c0e0067085b27b50c65a12fc94
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d89ee7aaaafb46c0e0067085b27b50c65a12fc94

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Mon Mar 13 11:57:21 2017 +0100

wined3d: Move legacy texture image unit range allocation to wined3d_gl_limits_get_texture_unit_range().

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/context.c     | 18 ++++--------------
 dlls/wined3d/glsl_shader.c | 23 +++++------------------
 dlls/wined3d/utils.c       | 24 +++++++++++++++++++++++-
 3 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index a423fac..8059461 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -3385,23 +3385,13 @@ static void context_bind_shader_resources(struct wined3d_context *context,
 static void context_bind_graphics_shader_resources(struct wined3d_context *context,
         const struct wined3d_state *state)
 {
-    unsigned int i;
+    unsigned int i, base_idx, count;
 
-    static const struct
+    for (i = 0; i < WINED3D_SHADER_TYPE_GRAPHICS_COUNT; ++i)
     {
-        enum wined3d_shader_type type;
-        unsigned int base_idx;
-        unsigned int count;
+        wined3d_gl_limits_get_texture_unit_range(&context->gl_info->limits, i, &base_idx, &count);
+        context_bind_shader_resources(context, state, i, base_idx, count);
     }
-    shader_types[] =
-    {
-        {WINED3D_SHADER_TYPE_PIXEL,     0,                      MAX_FRAGMENT_SAMPLERS},
-        {WINED3D_SHADER_TYPE_VERTEX,    MAX_FRAGMENT_SAMPLERS,  MAX_VERTEX_SAMPLERS},
-    };
-
-    for (i = 0; i < ARRAY_SIZE(shader_types); ++i)
-        context_bind_shader_resources(context, state, shader_types[i].type,
-                shader_types[i].base_idx, shader_types[i].count);
 }
 
 static void context_load_unordered_access_resources(struct wined3d_context *context,
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 16cf6b0..f82d861 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -592,26 +592,13 @@ static void shader_glsl_load_samplers(const struct wined3d_gl_info *gl_info,
 static void shader_glsl_load_graphics_samplers(const struct wined3d_gl_info *gl_info,
         struct shader_glsl_priv *priv, const DWORD *tex_unit_map, GLuint program_id)
 {
-    const char *prefix;
-    unsigned int i;
-
-    static const struct
-    {
-        enum wined3d_shader_type type;
-        unsigned int base_idx;
-        unsigned int count;
-    }
-    sampler_info[] =
-    {
-        {WINED3D_SHADER_TYPE_PIXEL,     0,                      MAX_FRAGMENT_SAMPLERS},
-        {WINED3D_SHADER_TYPE_VERTEX,    MAX_FRAGMENT_SAMPLERS,  MAX_VERTEX_SAMPLERS},
-    };
+    unsigned int i, base_idx, count;
 
-    for (i = 0; i < ARRAY_SIZE(sampler_info); ++i)
+    for (i = 0; i < WINED3D_SHADER_TYPE_GRAPHICS_COUNT; ++i)
     {
-        prefix = shader_glsl_get_prefix(sampler_info[i].type);
-        shader_glsl_load_samplers(gl_info, priv, prefix,
-                sampler_info[i].base_idx, sampler_info[i].count, tex_unit_map, program_id);
+        wined3d_gl_limits_get_texture_unit_range(&gl_info->limits, i, &base_idx, &count);
+        shader_glsl_load_samplers(gl_info, priv, shader_glsl_get_prefix(i),
+                base_idx, count, tex_unit_map, program_id);
     }
 }
 
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 04317f1..b1cda46 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -5994,10 +5994,32 @@ void wined3d_gl_limits_get_uniform_block_range(const struct wined3d_gl_limits *g
 void wined3d_gl_limits_get_texture_unit_range(const struct wined3d_gl_limits *gl_limits,
         enum wined3d_shader_type shader_type, unsigned int *base, unsigned int *count)
 {
+    static const struct
+    {
+        enum wined3d_shader_type type;
+        unsigned int base_idx;
+        unsigned int count;
+    }
+    legacy_sampler_info[] =
+    {
+        {WINED3D_SHADER_TYPE_PIXEL,  0,                     MAX_FRAGMENT_SAMPLERS},
+        {WINED3D_SHADER_TYPE_VERTEX, MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS},
+    };
+    unsigned int i;
+
+    for (i = 0; i < ARRAY_SIZE(legacy_sampler_info); ++i)
+    {
+        if (legacy_sampler_info[i].type == shader_type)
+        {
+            *base = legacy_sampler_info[i].base_idx;
+            *count = legacy_sampler_info[i].count;
+            return;
+        }
+    }
+
     if (shader_type != WINED3D_SHADER_TYPE_COMPUTE)
     {
         *base = *count = 0;
-        ERR("Unhandled shader type %#x.\n", shader_type);
         return;
     }
 




More information about the wine-cvs mailing list