965: Fix incorrect backface culling
Fix incorrect backface culling for OGL tunnel in wireframe and point mode.
This commit is contained in:
committed by
Ian Romanick
parent
6f4fd3a432
commit
a35002c167
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user