@ -718,6 +718,7 @@ gl_renderer_send_shader_error(struct weston_view *view) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  void  
					 
					 
					 
					static  void  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					triangle_fan_debug ( struct  gl_renderer  * gr ,  
					 
					 
					 
					triangle_fan_debug ( struct  gl_renderer  * gr ,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							   const  struct  gl_shader_config  * sconf ,   
					 
					 
					 
							   const  struct  gl_shader_config  * sconf ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							   struct  weston_output  * output ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							   int  first ,  int  count )   
					 
					 
					 
							   int  first ,  int  count )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						int  i ;   
					 
					 
					 
						int  i ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -739,13 +740,19 @@ triangle_fan_debug(struct gl_renderer *gr, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							. req  =  {   
					 
					 
					 
							. req  =  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								. variant  =  SHADER_VARIANT_SOLID ,   
					 
					 
					 
								. variant  =  SHADER_VARIANT_SOLID ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								. input_is_premult  =  true ,   
					 
					 
					 
								. input_is_premult  =  true ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								. color_pre_curve  =  SHADER_COLOR_CURVE_IDENTITY ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							} ,   
					 
					 
					 
							} ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							. projection  =  sconf - > projection ,   
					 
					 
					 
							. projection  =  sconf - > projection ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							. view_alpha  =  1.0f ,   
					 
					 
					 
							. view_alpha  =  1.0f ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							. unicolor  =  {  col [ 0 ] ,  col [ 1 ] ,  col [ 2 ] ,  col [ 3 ]  } ,   
					 
					 
					 
							. unicolor  =  {  col [ 0 ] ,  col [ 1 ] ,  col [ 2 ] ,  col [ 3 ]  } ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						} ;   
					 
					 
					 
						} ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						if  ( ! gl_shader_config_set_color_transform ( & alt ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
											  output - > from_sRGB_to_blend ) )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							weston_log ( " GL-renderer: %s failed to generate a color transformation. \n " ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								   __func__ ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							return ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						gl_renderer_use_program ( gr ,  & alt ) ;   
					 
					 
					 
						gl_renderer_use_program ( gr ,  & alt ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						nelems  =  ( count  -  1  +  count  -  2 )  *  2 ;   
					 
					 
					 
						nelems  =  ( count  -  1  +  count  -  2 )  *  2 ;   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -773,6 +780,7 @@ triangle_fan_debug(struct gl_renderer *gr, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  void  
					 
					 
					 
					static  void  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					repaint_region ( struct  gl_renderer  * gr ,  
					 
					 
					 
					repaint_region ( struct  gl_renderer  * gr ,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						       struct  weston_view  * ev ,   
					 
					 
					 
						       struct  weston_view  * ev ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						       struct  weston_output  * output ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						       pixman_region32_t  * region ,   
					 
					 
					 
						       pixman_region32_t  * region ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						       pixman_region32_t  * surf_region ,   
					 
					 
					 
						       pixman_region32_t  * surf_region ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						       const  struct  gl_shader_config  * sconf )   
					 
					 
					 
						       const  struct  gl_shader_config  * sconf )   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -810,7 +818,7 @@ repaint_region(struct gl_renderer *gr, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						for  ( i  =  0 ,  first  =  0 ;  i  <  nfans ;  i + + )  {   
					 
					 
					 
						for  ( i  =  0 ,  first  =  0 ;  i  <  nfans ;  i + + )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							glDrawArrays ( GL_TRIANGLE_FAN ,  first ,  vtxcnt [ i ] ) ;   
					 
					 
					 
							glDrawArrays ( GL_TRIANGLE_FAN ,  first ,  vtxcnt [ i ] ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if  ( gr - > fan_debug )   
					 
					 
					 
							if  ( gr - > fan_debug )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								triangle_fan_debug ( gr ,  sconf ,  first ,  vtxcnt [ i ] ) ;   
					 
					 
					 
								triangle_fan_debug ( gr ,  sconf ,  output ,  first ,  vtxcnt [ i ] ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							first  + =  vtxcnt [ i ] ;   
					 
					 
					 
							first  + =  vtxcnt [ i ] ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -910,6 +918,28 @@ ensure_surface_buffer_is_ready(struct gl_renderer *gr, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						return  ( wait_ret  = =  EGL_TRUE  & &  destroy_ret  = =  EGL_TRUE )  ?  0  :  - 1 ;   
					 
					 
					 
						return  ( wait_ret  = =  EGL_TRUE  & &  destroy_ret  = =  EGL_TRUE )  ?  0  :  - 1 ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					static  void  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					censor_override ( struct  gl_shader_config  * sconf ,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							struct  weston_output  * output )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						struct  gl_shader_config  alt  =  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							. req  =  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								. variant  =  SHADER_VARIANT_SOLID ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								. input_is_premult  =  true ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							} ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							. projection  =  sconf - > projection ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							. view_alpha  =  sconf - > view_alpha ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							. unicolor  =  {  0.40 ,  0.0 ,  0.0 ,  1.0  } ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						} ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						if  ( ! gl_shader_config_set_color_transform ( & alt ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
											  output - > from_sRGB_to_blend ) )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							weston_log ( " GL-renderer: %s failed to generate a color transformation. \n " ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								   __func__ ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						* sconf  =  alt ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 /* Checks if a view needs to be censored on an output
   
					 
					 
					 
					 /* Checks if a view needs to be censored on an output
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  *  Checks  for  2  types  of  censor  requirements   
					 
					 
					 
					  *  Checks  for  2  types  of  censor  requirements   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -924,16 +954,6 @@ maybe_censor_override(struct gl_shader_config *sconf, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							      struct  weston_output  * output ,   
					 
					 
					 
							      struct  weston_output  * output ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							      struct  weston_view  * ev )   
					 
					 
					 
							      struct  weston_view  * ev )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						const  struct  gl_shader_config  alt  =  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							. req  =  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								. variant  =  SHADER_VARIANT_SOLID ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								. input_is_premult  =  true ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								. color_pre_curve  =  SHADER_COLOR_CURVE_IDENTITY ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							} ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							. projection  =  sconf - > projection ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							. view_alpha  =  sconf - > view_alpha ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							. unicolor  =  {  0.40 ,  0.0 ,  0.0 ,  1.0  } ,   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						} ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  gl_surface_state  * gs  =  get_surface_state ( ev - > surface ) ;   
					 
					 
					 
						struct  gl_surface_state  * gs  =  get_surface_state ( ev - > surface ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						bool  recording_censor  =   
					 
					 
					 
						bool  recording_censor  =   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							( output - > disable_planes  >  0 )  & &   
					 
					 
					 
							( output - > disable_planes  >  0 )  & &   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -943,7 +963,7 @@ maybe_censor_override(struct gl_shader_config *sconf, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							( ev - > surface - > desired_protection  >  output - > current_protection ) ;   
					 
					 
					 
							( ev - > surface - > desired_protection  >  output - > current_protection ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						if  ( gs - > direct_display )  {   
					 
					 
					 
						if  ( gs - > direct_display )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							* sconf  =  alt ;   
					 
					 
					 
							censor_override ( sconf ,  output ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							return ;   
					 
					 
					 
							return ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -954,7 +974,7 @@ maybe_censor_override(struct gl_shader_config *sconf, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return ;   
					 
					 
					 
							return ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						if  ( recording_censor  | |  unprotected_censor )   
					 
					 
					 
						if  ( recording_censor  | |  unprotected_censor )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							* sconf  =  alt ;   
					 
					 
					 
							censor_override ( sconf ,  output ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  void  
					 
					 
					 
					static  void  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1044,9 +1064,6 @@ draw_paint_node(struct weston_paint_node *pnode, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						else   
					 
					 
					 
						else   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							filter  =  GL_NEAREST ;   
					 
					 
					 
							filter  =  GL_NEAREST ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/* for triangle_fan_debug(), maybe_censor_override() */   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						assert ( pnode - > output - > from_sRGB_to_blend  = =  NULL ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						if  ( ! gl_shader_config_init_for_paint_node ( & sconf ,  pnode ,  filter ) )   
					 
					 
					 
						if  ( ! gl_shader_config_init_for_paint_node ( & sconf ,  pnode ,  filter ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							goto  out ;   
					 
					 
					 
							goto  out ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1087,13 +1104,15 @@ draw_paint_node(struct weston_paint_node *pnode, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							else   
					 
					 
					 
							else   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								glDisable ( GL_BLEND ) ;   
					 
					 
					 
								glDisable ( GL_BLEND ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							repaint_region ( gr ,  pnode - > view ,  & repaint ,  & surface_opaque ,  & alt ) ;   
					 
					 
					 
							repaint_region ( gr ,  pnode - > view ,  pnode - > output ,   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								       & repaint ,  & surface_opaque ,  & alt ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							gs - > used_in_output_repaint  =  true ;   
					 
					 
					 
							gs - > used_in_output_repaint  =  true ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						if  ( pixman_region32_not_empty ( & surface_blend ) )  {   
					 
					 
					 
						if  ( pixman_region32_not_empty ( & surface_blend ) )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							glEnable ( GL_BLEND ) ;   
					 
					 
					 
							glEnable ( GL_BLEND ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							repaint_region ( gr ,  pnode - > view ,  & repaint ,  & surface_blend ,  & sconf ) ;   
					 
					 
					 
							repaint_region ( gr ,  pnode - > view ,  pnode - > output ,   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								       & repaint ,  & surface_blend ,  & sconf ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							gs - > used_in_output_repaint  =  true ;   
					 
					 
					 
							gs - > used_in_output_repaint  =  true ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}