mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
swrast: Use fixed-function processing instead _TexEnvProgram for DrawPixels
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.
Even on platforms that don't need this, the software fixed-function
code is much faster than the software shader code.
NOTE: This is a candidate for the 8.0 branch.
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44749
(cherry picked from commit 9be3be3c66)
This commit is contained in:
parent
05b7f13af1
commit
85a52bf7b5
1 changed files with 21 additions and 2 deletions
|
|
@ -52,6 +52,7 @@
|
|||
#include "s_stencil.h"
|
||||
#include "s_texcombine.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* Set default fragment attributes for the span using the
|
||||
|
|
@ -970,7 +971,25 @@ 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.
|
||||
*
|
||||
* It is also worth noting that the software fixed-function path is
|
||||
* much faster than the software shader path.
|
||||
*/
|
||||
const bool use_fragment_program =
|
||||
ctx->FragmentProgram._Current
|
||||
&& ctx->FragmentProgram._Current != ctx->FragmentProgram._TexEnvProgram;
|
||||
|
||||
if (use_fragment_program ||
|
||||
ctx->ATIFragmentShader._Enabled) {
|
||||
/* programmable shading */
|
||||
if (span->primitive == GL_BITMAP && span->array->ChanType != GL_FLOAT) {
|
||||
|
|
@ -999,7 +1018,7 @@ shade_texture_span(struct gl_context *ctx, SWspan *span)
|
|||
interpolate_wpos(ctx, span);
|
||||
|
||||
/* Run fragment program/shader now */
|
||||
if (ctx->FragmentProgram._Current) {
|
||||
if (use_fragment_program) {
|
||||
_swrast_exec_fragment_program(ctx, span);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue