965: Fix incorrect backface culling

Fix incorrect backface culling for OGL tunnel in wireframe and
point mode.
This commit is contained in:
Krzysztof Czurylo
2008-08-21 15:01:36 -07:00
committed by Ian Romanick
parent 6f4fd3a432
commit a35002c167
4 changed files with 29 additions and 15 deletions
+5
View File
@@ -167,4 +167,9 @@ void brw_clip_copy_colors( struct brw_clip_compile *c,
void brw_clip_init_clipmask( struct brw_clip_compile *c );
struct brw_reg get_tmp( struct brw_clip_compile *c );
void brw_clip_project_position(struct brw_clip_compile *c,
struct brw_reg pos );
#endif
-10
View File
@@ -42,16 +42,6 @@
#include "brw_util.h"
#include "brw_clip.h"
static struct brw_reg get_tmp( struct brw_clip_compile *c )
{
struct brw_reg tmp = brw_vec4_grf(c->last_tmp, 0);
if (++c->last_tmp > c->prog_data.total_grf)
c->prog_data.total_grf = c->last_tmp;
return tmp;
}
static void release_tmps( struct brw_clip_compile *c )
{
c->last_tmp = c->first_tmp;
+22 -2
View File
@@ -58,10 +58,30 @@ static void compute_tri_direction( struct brw_clip_compile *c )
struct brw_reg v2 = byte_offset(c->reg.vertex[2], c->offset[VERT_RESULT_HPOS]);
struct brw_reg v0n = get_tmp(c);
struct brw_reg v1n = get_tmp(c);
struct brw_reg v2n = get_tmp(c);
/* Convert to NDC.
* NOTE: We can't modify the original vertex coordinates,
* as it may impact further operations.
* So, we have to keep normalized coordinates in temp registers.
*
* TBD-KC
* Try to optimize unnecessary MOV's.
*/
brw_MOV(p, v0n, v0);
brw_MOV(p, v1n, v1);
brw_MOV(p, v2n, v2);
brw_clip_project_position(c, v0n);
brw_clip_project_position(c, v1n);
brw_clip_project_position(c, v2n);
/* Calculate the vectors of two edges of the triangle:
*/
brw_ADD(p, e, v0, negate(v2));
brw_ADD(p, f, v1, negate(v2));
brw_ADD(p, e, v0n, negate(v2n));
brw_ADD(p, f, v1n, negate(v2n));
/* Take their crossproduct:
*/
+2 -3
View File
@@ -46,8 +46,7 @@
static struct brw_reg get_tmp( struct brw_clip_compile *c )
struct brw_reg get_tmp( struct brw_clip_compile *c )
{
struct brw_reg tmp = brw_vec4_grf(c->last_tmp, 0);
@@ -90,7 +89,7 @@ void brw_clip_init_planes( struct brw_clip_compile *c )
/* Project 'pos' to screen space (or back again), overwrite with results:
*/
static void brw_clip_project_position(struct brw_clip_compile *c, struct brw_reg pos )
void brw_clip_project_position(struct brw_clip_compile *c, struct brw_reg pos )
{
struct brw_compile *p = &c->func;