[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