On Thu, 19 Jan 2012 17:53:12 -0800, "Ian Romanick" <[email protected]> wrote:
> From: Ian Romanick <[email protected]>
> 
> This is a hack to work around drivers such as i965 that:
> 
>     - Set _MaintainTexEnvProgram to generate GLSL IR for
>       fixed-function fragment processing.
>     - Don't call _mesa_ir_link_shader to generate Mesa IR from the
>       GLSL IR.
>     - May use swrast to handle glDrawPixels.
> 
> Since _mesa_ir_link_shader is never called, there is no Mesa IR to
> execute.  Instead do regular fixed-function processing.
> 
> NOTE: This is a candidate for the 8.0 branch.
> 
> Signed-off-by: Ian Romanick <[email protected]>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44749
> ---
>  src/mesa/swrast/s_span.c |   21 +++++++++++++++++++--
>  1 files changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
> index e899303..439b0e9 100644
> --- a/src/mesa/swrast/s_span.c
> +++ b/src/mesa/swrast/s_span.c
> @@ -50,6 +50,7 @@
>  #include "s_stencil.h"
>  #include "s_texcombine.h"
>  
> +#include <stdbool.h>
>  
>  /**
>   * Set default fragment attributes for the span using the
> @@ -968,7 +969,23 @@ convert_color_type(SWspan *span, GLenum newType, GLuint 
> output)
>  static inline void
>  shade_texture_span(struct gl_context *ctx, SWspan *span)
>  {
> -   if (ctx->FragmentProgram._Current ||
> +   /* This is a hack to work around drivers such as i965 that:
> +    *
> +    *     - Set _MaintainTexEnvProgram to generate GLSL IR for
> +    *       fixed-function fragment processing.
> +    *     - Don't call _mesa_ir_link_shader to generate Mesa IR from
> +    *       the GLSL IR.
> +    *     - May use swrast to handle glDrawPixels.
> +    *
> +    * Since _mesa_ir_link_shader is never called, there is no Mesa IR
> +    * to execute.  Instead do regular fixed-function processing.
> +    */
> +   const bool use_fragment_program =
> +      ctx->FragmentProgram._Current
> +      && (ctx->FragmentProgram._Current != 
> ctx->FragmentProgram._TexEnvProgram
> +       || ctx->FragmentProgram._Current->Base.NumInstructions != 0);

We used to have a hack like this in the driver just to reduce the
performance penalty.  I think you could just drop the NumInstructions
check to duplicate that.

Attachment: pgpvQXGqOADHn.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to