diff options
-rw-r--r-- | docs/relnotes-7.5.1.html | 1 | ||||
-rw-r--r-- | src/mesa/shader/prog_print.c | 16 | ||||
-rw-r--r-- | src/mesa/swrast/s_feedback.c | 4 | ||||
-rw-r--r-- | src/mesa/swrast/s_triangle.c | 12 |
4 files changed, 18 insertions, 15 deletions
diff --git a/docs/relnotes-7.5.1.html b/docs/relnotes-7.5.1.html index 1a327577bac..df06302624b 100644 --- a/docs/relnotes-7.5.1.html +++ b/docs/relnotes-7.5.1.html @@ -53,6 +53,7 @@ tbd <li>Empty glBegin/glEnd() pair could cause divide by zero (bug 23489) <li>Fixed Gallium glBitmap() Z position bug <li>Setting arrays of sampler uniforms did not work +<li>Selection/Feedback mode didn't handle polygon culling correctly (bug 16866) </ul> diff --git a/src/mesa/shader/prog_print.c b/src/mesa/shader/prog_print.c index c8346d4293c..b71735aa80e 100644 --- a/src/mesa/shader/prog_print.c +++ b/src/mesa/shader/prog_print.c @@ -533,7 +533,7 @@ void _mesa_print_alu_instruction(const struct prog_instruction *inst, const char *opcode_string, GLuint numRegs) { - fprint_alu_instruction(stdout, inst, opcode_string, + fprint_alu_instruction(stderr, inst, opcode_string, numRegs, PROG_PRINT_DEBUG, NULL); } @@ -757,7 +757,7 @@ _mesa_print_instruction_opt(const struct prog_instruction *inst, gl_prog_print_mode mode, const struct gl_program *prog) { - return _mesa_fprint_instruction_opt(stdout, inst, indent, mode, prog); + return _mesa_fprint_instruction_opt(stderr, inst, indent, mode, prog); } @@ -765,7 +765,7 @@ void _mesa_print_instruction(const struct prog_instruction *inst) { /* note: 4th param should be ignored for PROG_PRINT_DEBUG */ - _mesa_fprint_instruction_opt(stdout, inst, 0, PROG_PRINT_DEBUG, NULL); + _mesa_fprint_instruction_opt(stderr, inst, 0, PROG_PRINT_DEBUG, NULL); } @@ -811,7 +811,7 @@ _mesa_fprint_program_opt(FILE *f, /** - * Print program to stdout, default options. + * Print program to stderr, default options. */ void _mesa_print_program(const struct gl_program *prog) @@ -884,12 +884,12 @@ _mesa_fprint_program_parameters(FILE *f, /** - * Print all of a program's parameters/fields to stdout. + * Print all of a program's parameters/fields to stderr. */ void _mesa_print_program_parameters(GLcontext *ctx, const struct gl_program *prog) { - _mesa_fprint_program_parameters(stdout, ctx, prog); + _mesa_fprint_program_parameters(stderr, ctx, prog); } @@ -929,12 +929,12 @@ _mesa_fprint_parameter_list(FILE *f, /** - * Print a program parameter list to stdout. + * Print a program parameter list to stderr. */ void _mesa_print_parameter_list(const struct gl_program_parameter_list *list) { - _mesa_fprint_parameter_list(stdout, list); + _mesa_fprint_parameter_list(stderr, list); } diff --git a/src/mesa/swrast/s_feedback.c b/src/mesa/swrast/s_feedback.c index 7bb914b6589..47ed25ee100 100644 --- a/src/mesa/swrast/s_feedback.c +++ b/src/mesa/swrast/s_feedback.c @@ -58,7 +58,7 @@ void _swrast_feedback_triangle(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1, const SWvertex *v2) { - if (_swrast_culltriangle(ctx, v0, v1, v2)) { + if (!_swrast_culltriangle(ctx, v0, v1, v2)) { _mesa_feedback_token(ctx, (GLfloat) (GLint) GL_POLYGON_TOKEN); _mesa_feedback_token(ctx, (GLfloat) 3); /* three vertices */ @@ -113,7 +113,7 @@ void _swrast_select_triangle(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1, const SWvertex *v2) { - if (_swrast_culltriangle(ctx, v0, v1, v2)) { + if (!_swrast_culltriangle(ctx, v0, v1, v2)) { const GLfloat zs = 1.0F / ctx->DrawBuffer->_DepthMaxF; _mesa_update_hitflag( ctx, v0->attrib[FRAG_ATTRIB_WPOS][2] * zs ); diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c index 9260e35066f..1d2fed71691 100644 --- a/src/mesa/swrast/s_triangle.c +++ b/src/mesa/swrast/s_triangle.c @@ -44,8 +44,9 @@ #include "s_triangle.h" -/* - * Just used for feedback mode. +/** + * Test if a triangle should be culled. Used for feedback and selection mode. + * \return GL_TRUE if the triangle is to be culled, GL_FALSE otherwise. */ GLboolean _swrast_culltriangle( GLcontext *ctx, @@ -53,16 +54,17 @@ _swrast_culltriangle( GLcontext *ctx, const SWvertex *v1, const SWvertex *v2 ) { + SWcontext *swrast = SWRAST_CONTEXT(ctx); GLfloat ex = v1->attrib[FRAG_ATTRIB_WPOS][0] - v0->attrib[FRAG_ATTRIB_WPOS][0]; GLfloat ey = v1->attrib[FRAG_ATTRIB_WPOS][1] - v0->attrib[FRAG_ATTRIB_WPOS][1]; GLfloat fx = v2->attrib[FRAG_ATTRIB_WPOS][0] - v0->attrib[FRAG_ATTRIB_WPOS][0]; GLfloat fy = v2->attrib[FRAG_ATTRIB_WPOS][1] - v0->attrib[FRAG_ATTRIB_WPOS][1]; GLfloat c = ex*fy-ey*fx; - if (c * SWRAST_CONTEXT(ctx)->_BackfaceCullSign > 0) - return 0; + if (c * swrast->_BackfaceSign * swrast->_BackfaceCullSign < 0.0F) + return GL_FALSE; - return 1; + return GL_TRUE; } |