Matteo Bruni : wined3d: Use a lookup table to select the sampler function name.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jul 7 08:11:58 CDT 2015
Module: wine
Branch: master
Commit: 8839e7fb94b93fe4d669f7ad8db6ae1439a9e7cc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8839e7fb94b93fe4d669f7ad8db6ae1439a9e7cc
Author: Matteo Bruni <mbruni at codeweavers.com>
Date: Mon Jul 6 22:20:11 2015 +0200
wined3d: Use a lookup table to select the sampler function name.
---
dlls/wined3d/glsl_shader.c | 67 ++++++++++++++++++++--------------------------
1 file changed, 29 insertions(+), 38 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index b465c0f..2770ab9 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -2516,18 +2516,23 @@ static const char *shader_glsl_get_rel_op(enum wined3d_shader_rel_op op)
static void shader_glsl_get_sample_function(const struct wined3d_shader_context *ctx,
DWORD resource_idx, DWORD flags, struct glsl_sample_function *sample_function)
{
- static const unsigned int type_coord_size[] =
- {
- 0, /* WINED3D_SHADER_RESOURCE_NONE */
- 1, /* WINED3D_SHADER_RESOURCE_BUFFER */
- 1, /* WINED3D_SHADER_RESOURCE_TEXTURE_1D */
- 2, /* WINED3D_SHADER_RESOURCE_TEXTURE_2D */
- 2, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMS */
- 3, /* WINED3D_SHADER_RESOURCE_TEXTURE_3D */
- 3, /* WINED3D_SHADER_RESOURCE_TEXTURE_CUBE */
- 2, /* WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY */
- 3, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY */
- 3, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY */
+ static const struct
+ {
+ unsigned int coord_size;
+ const char *type_part;
+ }
+ resource_types[] =
+ {
+ {0, ""}, /* WINED3D_SHADER_RESOURCE_NONE */
+ {1, ""}, /* WINED3D_SHADER_RESOURCE_BUFFER */
+ {1, "1D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_1D */
+ {2, "2D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2D */
+ {2, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMS */
+ {3, "3D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_3D */
+ {3, "Cube"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_CUBE */
+ {2, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY */
+ {3, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY */
+ {3, ""}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY */
};
struct shader_glsl_ctx_priv *priv = ctx->backend_data;
enum wined3d_shader_resource_type resource_type = ctx->reg_maps->resource_info[resource_idx].type;
@@ -2543,6 +2548,12 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context
sample_function->data_type = ctx->reg_maps->resource_info[resource_idx].data_type;
+ if (resource_type >= ARRAY_SIZE(resource_types))
+ {
+ ERR("Unexpected resource type %#x.\n", resource_type);
+ resource_type = WINED3D_SHADER_RESOURCE_TEXTURE_2D;
+ }
+
/* Note that there's no such thing as a projected cube texture. */
if (resource_type == WINED3D_SHADER_RESOURCE_TEXTURE_CUBE)
projected = FALSE;
@@ -2550,26 +2561,11 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context
if (shadow)
base = "shadow";
- switch (resource_type)
- {
- case WINED3D_SHADER_RESOURCE_TEXTURE_1D:
- type_part = "1D";
- break;
- case WINED3D_SHADER_RESOURCE_TEXTURE_2D:
- if (texrect)
- type_part = "2DRect";
- else
- type_part = "2D";
- break;
- case WINED3D_SHADER_RESOURCE_TEXTURE_3D:
- type_part = "3D";
- break;
- case WINED3D_SHADER_RESOURCE_TEXTURE_CUBE:
- type_part = "Cube";
- break;
- default:
- FIXME("Unhandled resource type %#x.\n", resource_type);
- }
+ type_part = resource_types[resource_type].type_part;
+ if (resource_type == WINED3D_SHADER_RESOURCE_TEXTURE_2D && texrect)
+ type_part = "2DRect";
+ if (!type_part[0])
+ FIXME("Unhandled resource type %#x.\n", resource_type);
if (!lod && grad && !gl_info->supported[EXT_GPU_SHADER4])
{
@@ -2583,12 +2579,7 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context
string_buffer_sprintf(sample_function->name, "%s%s%s%s%s", base, type_part, projected ? "Proj" : "",
lod ? "Lod" : grad ? "Grad" : "", suffix);
- if (resource_type >= ARRAY_SIZE(type_coord_size))
- {
- ERR("Unexpected resource type %#x.\n", resource_type);
- resource_type = WINED3D_SHADER_RESOURCE_TEXTURE_2D;
- }
- coord_size = type_coord_size[resource_type];
+ coord_size = resource_types[resource_type].coord_size;
if (shadow)
++coord_size;
sample_function->coord_mask = (1 << coord_size) - 1;
More information about the wine-cvs
mailing list