[PATCH 4/5] wined3d: Move legacy texture image unit range allocation to wined3d_gl_limits_get_texture_unit_range().

Józef Kucia jkucia at codeweavers.com
Mon Mar 13 05:57:21 CDT 2017


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 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;
     }
 
-- 
2.10.2




More information about the wine-patches mailing list