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:
parent
6e62cdf66d
commit
76bd0f9949
|
@ -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]);
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in New Issue
Block a user