wined3d: Use a lookup table to select the sampler function name.
This commit is contained in:
parent
7e83d413a2
commit
8839e7fb94
|
@ -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,
|
static void shader_glsl_get_sample_function(const struct wined3d_shader_context *ctx,
|
||||||
DWORD resource_idx, DWORD flags, struct glsl_sample_function *sample_function)
|
DWORD resource_idx, DWORD flags, struct glsl_sample_function *sample_function)
|
||||||
{
|
{
|
||||||
static const unsigned int type_coord_size[] =
|
static const struct
|
||||||
{
|
{
|
||||||
0, /* WINED3D_SHADER_RESOURCE_NONE */
|
unsigned int coord_size;
|
||||||
1, /* WINED3D_SHADER_RESOURCE_BUFFER */
|
const char *type_part;
|
||||||
1, /* WINED3D_SHADER_RESOURCE_TEXTURE_1D */
|
}
|
||||||
2, /* WINED3D_SHADER_RESOURCE_TEXTURE_2D */
|
resource_types[] =
|
||||||
2, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMS */
|
{
|
||||||
3, /* WINED3D_SHADER_RESOURCE_TEXTURE_3D */
|
{0, ""}, /* WINED3D_SHADER_RESOURCE_NONE */
|
||||||
3, /* WINED3D_SHADER_RESOURCE_TEXTURE_CUBE */
|
{1, ""}, /* WINED3D_SHADER_RESOURCE_BUFFER */
|
||||||
2, /* WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY */
|
{1, "1D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_1D */
|
||||||
3, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY */
|
{2, "2D"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2D */
|
||||||
3, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY */
|
{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;
|
struct shader_glsl_ctx_priv *priv = ctx->backend_data;
|
||||||
enum wined3d_shader_resource_type resource_type = ctx->reg_maps->resource_info[resource_idx].type;
|
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;
|
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. */
|
/* Note that there's no such thing as a projected cube texture. */
|
||||||
if (resource_type == WINED3D_SHADER_RESOURCE_TEXTURE_CUBE)
|
if (resource_type == WINED3D_SHADER_RESOURCE_TEXTURE_CUBE)
|
||||||
projected = FALSE;
|
projected = FALSE;
|
||||||
|
@ -2550,26 +2561,11 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context
|
||||||
if (shadow)
|
if (shadow)
|
||||||
base = "shadow";
|
base = "shadow";
|
||||||
|
|
||||||
switch (resource_type)
|
type_part = resource_types[resource_type].type_part;
|
||||||
{
|
if (resource_type == WINED3D_SHADER_RESOURCE_TEXTURE_2D && texrect)
|
||||||
case WINED3D_SHADER_RESOURCE_TEXTURE_1D:
|
type_part = "2DRect";
|
||||||
type_part = "1D";
|
if (!type_part[0])
|
||||||
break;
|
FIXME("Unhandled resource type %#x.\n", resource_type);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lod && grad && !gl_info->supported[EXT_GPU_SHADER4])
|
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" : "",
|
string_buffer_sprintf(sample_function->name, "%s%s%s%s%s", base, type_part, projected ? "Proj" : "",
|
||||||
lod ? "Lod" : grad ? "Grad" : "", suffix);
|
lod ? "Lod" : grad ? "Grad" : "", suffix);
|
||||||
|
|
||||||
if (resource_type >= ARRAY_SIZE(type_coord_size))
|
coord_size = resource_types[resource_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];
|
|
||||||
if (shadow)
|
if (shadow)
|
||||||
++coord_size;
|
++coord_size;
|
||||||
sample_function->coord_mask = (1 << coord_size) - 1;
|
sample_function->coord_mask = (1 << coord_size) - 1;
|
||||||
|
|
Loading…
Reference in New Issue