glamor: Don't bother keeping references to shader stages for gradients.

They never get reattached to any other program, so saving them to
unreference later is a waste of code.

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Eric Anholt 2013-12-27 13:09:25 -08:00
parent 6e62cdf66d
commit 76bd0f9949
2 changed files with 6 additions and 91 deletions

View File

@ -356,20 +356,6 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
glamor_get_context(glamor_priv);
if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]) {
glDeleteShader(glamor_priv->radial_gradient_shaders
[SHADER_GRADIENT_VS_PROG][2]);
glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0;
glDeleteShader(glamor_priv->radial_gradient_shaders
[SHADER_GRADIENT_FS_MAIN_PROG][2]);
glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] =
0;
glDeleteShader(glamor_priv->radial_gradient_shaders
[SHADER_GRADIENT_FS_GETCOLOR_PROG][2]);
glamor_priv->
radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0;
glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]);
glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2] = 0;
}
@ -394,6 +380,9 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
glAttachShader(gradient_prog, vs_prog);
glAttachShader(gradient_prog, fs_getcolor_prog);
glAttachShader(gradient_prog, fs_main_prog);
glDeleteShader(vs_prog);
glDeleteShader(fs_getcolor_prog);
glDeleteShader(fs_main_prog);
glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_position");
glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord");
@ -414,13 +403,6 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
}
glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][index] = gradient_prog;
glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] =
vs_prog;
glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] =
fs_main_prog;
glamor_priv->
radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] =
fs_getcolor_prog;
glamor_put_context(glamor_priv);
}
@ -588,20 +570,6 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
glamor_get_context(glamor_priv);
if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]) {
glDeleteShader(glamor_priv->linear_gradient_shaders
[SHADER_GRADIENT_VS_PROG][2]);
glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0;
glDeleteShader(glamor_priv->linear_gradient_shaders
[SHADER_GRADIENT_FS_MAIN_PROG][2]);
glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] =
0;
glDeleteShader(glamor_priv->linear_gradient_shaders
[SHADER_GRADIENT_FS_GETCOLOR_PROG][2]);
glamor_priv->
linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0;
glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]);
glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2] = 0;
}
@ -624,6 +592,9 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
glAttachShader(gradient_prog, vs_prog);
glAttachShader(gradient_prog, fs_getcolor_prog);
glAttachShader(gradient_prog, fs_main_prog);
glDeleteShader(vs_prog);
glDeleteShader(fs_getcolor_prog);
glDeleteShader(fs_main_prog);
glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_position");
glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord");
@ -644,13 +615,6 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
}
glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][index] = gradient_prog;
glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] =
vs_prog;
glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] =
fs_main_prog;
glamor_priv->
linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] =
fs_getcolor_prog;
glamor_put_context(glamor_priv);
}
@ -665,18 +629,7 @@ glamor_init_gradient_shader(ScreenPtr screen)
for (i = 0; i < 3; i++) {
glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i] = 0;
glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0;
glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] =
0;
glamor_priv->
linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0;
glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i] = 0;
glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0;
glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] =
0;
glamor_priv->
radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0;
}
glamor_priv->linear_max_nstops = 0;
glamor_priv->radial_max_nstops = 0;
@ -699,39 +652,10 @@ glamor_fini_gradient_shader(ScreenPtr screen)
for (i = 0; i < 3; i++) {
/* Linear Gradient */
if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i])
glDeleteShader(glamor_priv->linear_gradient_shaders
[SHADER_GRADIENT_VS_PROG][i]);
if (glamor_priv->
linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i])
glDeleteShader(glamor_priv->linear_gradient_shaders
[SHADER_GRADIENT_FS_MAIN_PROG][i]);
if (glamor_priv->
linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i])
glDeleteShader(glamor_priv->linear_gradient_shaders
[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]);
if (glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i])
glDeleteProgram(glamor_priv->gradient_prog
[SHADER_GRADIENT_LINEAR][i]);
/* Radial Gradient */
if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i])
glDeleteShader(glamor_priv->radial_gradient_shaders
[SHADER_GRADIENT_VS_PROG][i]);
if (glamor_priv->
radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i])
glDeleteShader(glamor_priv->radial_gradient_shaders
[SHADER_GRADIENT_FS_MAIN_PROG][i]);
if (glamor_priv->
radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i])
glDeleteShader(glamor_priv->radial_gradient_shaders
[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]);
if (glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i])
glDeleteProgram(glamor_priv->gradient_prog
[SHADER_GRADIENT_RADIAL][i]);

View File

@ -141,13 +141,6 @@ enum gradient_shader {
SHADER_GRADIENT_COUNT,
};
enum gradient_shader_prog {
SHADER_GRADIENT_VS_PROG,
SHADER_GRADIENT_FS_MAIN_PROG,
SHADER_GRADIENT_FS_GETCOLOR_PROG,
SHADER_GRADIENT_PROG_COUNT,
};
struct glamor_screen_private;
struct glamor_pixmap_private;
@ -251,9 +244,7 @@ typedef struct glamor_screen_private {
/* glamor gradient, 0 for small nstops, 1 for
large nstops and 2 for dynamic generate. */
GLint gradient_prog[SHADER_GRADIENT_COUNT][3];
GLint linear_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3];
int linear_max_nstops;
GLint radial_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3];
int radial_max_nstops;
/* glamor trapezoid shader. */