[Glamor] [PATCH 10/34] glamor: Don't bother keeping references to shader stages for gradients.

Alex Deucher alexdeucher at gmail.com
Fri Feb 28 10:02:05 PST 2014


From: Eric Anholt <eric at anholt.net>

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

Ported from Eric's xserver glamor tree.

Signed-off-by: Eric Anholt <eric at anholt.net>
Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
---
 src/glamor_gradient.c | 66 +++++----------------------------------------------
 src/glamor_priv.h     |  9 -------
 2 files changed, 6 insertions(+), 69 deletions(-)

diff --git a/src/glamor_gradient.c b/src/glamor_gradient.c
index 3648ade..06515b8 100644
--- a/src/glamor_gradient.c
+++ b/src/glamor_gradient.c
@@ -354,18 +354,6 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, int dy
 	dispatch = glamor_get_dispatch(glamor_priv);
 
 	if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]) {
-		dispatch->glDeleteShader(
-		    glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2]);
-		glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0;
-
-		dispatch->glDeleteShader(
-		    glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2]);
-		glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = 0;
-
-		dispatch->glDeleteShader(
-		    glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2]);
-		glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0;
-
 		dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]);
 		glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2] = 0;
 	}
@@ -390,6 +378,9 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, int dy
 	dispatch->glAttachShader(gradient_prog, vs_prog);
 	dispatch->glAttachShader(gradient_prog, fs_getcolor_prog);
 	dispatch->glAttachShader(gradient_prog, fs_main_prog);
+	dispatch->glDeleteShader(vs_prog);
+	dispatch->glDeleteShader(fs_getcolor_prog);
+	dispatch->glDeleteShader(fs_main_prog);
 
 	dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_position");
 	dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord");
@@ -408,9 +399,6 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, int dy
 	}
 
 	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_dispatch(glamor_priv);
 }
@@ -578,18 +566,6 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, int dy
 
 	dispatch = glamor_get_dispatch(glamor_priv);
 	if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]) {
-		dispatch->glDeleteShader(
-		    glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2]);
-		glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0;
-
-		dispatch->glDeleteShader(
-		    glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2]);
-		glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = 0;
-
-		dispatch->glDeleteShader(
-		    glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2]);
-		glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0;
-
 		dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]);
 		glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2] = 0;
 	}
@@ -613,6 +589,9 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, int dy
 	dispatch->glAttachShader(gradient_prog, vs_prog);
 	dispatch->glAttachShader(gradient_prog, fs_getcolor_prog);
 	dispatch->glAttachShader(gradient_prog, fs_main_prog);
+	dispatch->glDeleteShader(vs_prog);
+	dispatch->glDeleteShader(fs_getcolor_prog);
+	dispatch->glDeleteShader(fs_main_prog);
 
 	dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_position");
 	dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord");
@@ -631,9 +610,6 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, int dy
 	}
 
 	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_dispatch(glamor_priv);
 }
@@ -648,14 +624,8 @@ 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;
@@ -679,34 +649,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])
-			dispatch->glDeleteShader(
-			    glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]);
-
-		if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i])
-			dispatch->glDeleteShader(
-			    glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]);
-
-		if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i])
-			dispatch->glDeleteShader(
-			    glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]);
-
 		if (glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i])
 			dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i]);
 
 		/* Radial Gradient */
-		if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i])
-			dispatch->glDeleteShader(
-			    glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]);
-
-		if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i])
-			dispatch->glDeleteShader(
-			    glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]);
-
-		if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i])
-			dispatch->glDeleteShader(
-			    glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]);
-
 		if (glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i])
 			dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i]);
 	}
diff --git a/src/glamor_priv.h b/src/glamor_priv.h
index d02bc43..39d09a6 100644
--- a/src/glamor_priv.h
+++ b/src/glamor_priv.h
@@ -167,13 +167,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;
 
@@ -279,9 +272,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. */
-- 
1.8.3.1



More information about the Glamor mailing list