llvmpipe: hook up some state, add stub line and point functions
This commit is contained in:
@@ -48,6 +48,9 @@ llvmpipe = env.ConvenienceLibrary(
|
||||
'lp_prim_vbuf.c',
|
||||
'lp_query.c',
|
||||
'lp_setup.c',
|
||||
'lp_setup_tri.c',
|
||||
'lp_setup_line.c',
|
||||
'lp_setup_point.c',
|
||||
'lp_screen.c',
|
||||
'lp_state_blend.c',
|
||||
'lp_state_clip.c',
|
||||
|
||||
@@ -148,7 +148,7 @@ static void bin_everywhere( struct setup_context *setup,
|
||||
unsigned i, j;
|
||||
for (i = 0; i < setup->tiles_x; i++)
|
||||
for (j = 0; j < setup->tiles_y; j++)
|
||||
bin_cmd( &setup->tile[i][j], cmd, arg );
|
||||
bin_command( &setup->tile[i][j], cmd, arg );
|
||||
}
|
||||
|
||||
|
||||
@@ -382,6 +382,19 @@ lp_setup_clear( struct setup_context *setup,
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
lp_setup_set_tri_state( struct setup_context *setup,
|
||||
unsigned cull_mode,
|
||||
boolean ccw_is_frontface)
|
||||
{
|
||||
setup->ccw_is_frontface = ccw_is_frontface;
|
||||
setup->cullmode = cull_mode;
|
||||
setup->triangle = first_triangle;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
lp_setup_set_fs_inputs( struct setup_context *setup,
|
||||
const struct lp_shader_input *input,
|
||||
@@ -432,6 +445,14 @@ lp_setup_tri(struct setup_context *setup,
|
||||
void
|
||||
lp_setup_destroy( struct setup_context *setup )
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
reset_context( setup );
|
||||
|
||||
for (i = 0; i < TILES_X; i++)
|
||||
for (j = 0; j < TILES_Y; j++)
|
||||
FREE(setup->tile[i][j].head);
|
||||
|
||||
lp_rast_destroy( setup->rast );
|
||||
FREE( setup );
|
||||
}
|
||||
|
||||
@@ -83,6 +83,9 @@ struct setup_context {
|
||||
|
||||
unsigned tiles_x;
|
||||
unsigned tiles_y;
|
||||
|
||||
boolean ccw_is_frontface;
|
||||
unsigned cullmode;
|
||||
|
||||
struct {
|
||||
struct pipe_surface *cbuf;
|
||||
@@ -147,9 +150,9 @@ static INLINE void *get_data( struct data_block_list *list,
|
||||
|
||||
/* Add a command to a given bin.
|
||||
*/
|
||||
static INLINE void bin_cmd( struct cmd_block_list *list,
|
||||
lp_rast_cmd cmd,
|
||||
const union lp_rast_cmd_arg *arg )
|
||||
static INLINE void bin_command( struct cmd_block_list *list,
|
||||
lp_rast_cmd cmd,
|
||||
const union lp_rast_cmd_arg *arg )
|
||||
{
|
||||
if (list->tail->count == CMD_BLOCK_MAX) {
|
||||
lp_setup_new_cmd_block( list );
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
||||
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
|
||||
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
/*
|
||||
* Binning code for lines
|
||||
*/
|
||||
|
||||
#include "lp_setup_context.h"
|
||||
|
||||
static void line_nop( struct setup_context *setup,
|
||||
const float (*v0)[4],
|
||||
const float (*v1)[4] )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
lp_setup_choose_line( struct setup_context *setup )
|
||||
{
|
||||
setup->line = line_nop;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
||||
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
|
||||
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
/*
|
||||
* Binning code for points
|
||||
*/
|
||||
|
||||
#include "lp_setup_context.h"
|
||||
|
||||
static void point_nop( struct setup_context *setup,
|
||||
const float (*v0)[4] )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
lp_setup_choose_point( struct setup_context *setup )
|
||||
{
|
||||
setup->point = point_nop;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
*/
|
||||
|
||||
#include "lp_setup_context.h"
|
||||
#include "lp_rast.h"
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_memory.h"
|
||||
|
||||
@@ -263,10 +264,9 @@ do_triangle_ccw(struct setup_context *setup,
|
||||
const float x2 = subpixel_snap(v2[0][0]);
|
||||
const float x3 = subpixel_snap(v3[0][0]);
|
||||
|
||||
struct lp_setup_triangle *tri = get_data( setup, sizeof *tri );
|
||||
struct lp_rast_triangle *tri = get_data( &setup->data, sizeof *tri );
|
||||
float area;
|
||||
float c1, c2, c3;
|
||||
int i;
|
||||
int minx, maxx, miny, maxy;
|
||||
|
||||
tri->dx12 = x1 - x2;
|
||||
@@ -363,7 +363,7 @@ do_triangle_ccw(struct setup_context *setup,
|
||||
{
|
||||
/* Triangle is contained in a single tile:
|
||||
*/
|
||||
bin_command(setup->tile[minx][miny], lp_rast_triangle, tri );
|
||||
bin_command( &setup->tile[minx][miny], lp_rast_triangle, tri );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -412,12 +412,12 @@ do_triangle_ccw(struct setup_context *setup,
|
||||
cx3 + ei3 > 0)
|
||||
{
|
||||
/* shade whole tile */
|
||||
bin_command(setup->tile[x][y], lp_rast_shade_tile, &tri->inputs );
|
||||
bin_command( &setup->tile[x][y], lp_rast_shade_tile, &tri->inputs );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* shade partial tile */
|
||||
bin_command(setup->tile[x][y], lp_rast_triangle, tri );
|
||||
bin_command( &setup->tile[x][y], lp_rast_triangle, tri );
|
||||
}
|
||||
|
||||
/* Iterate cx values across the region:
|
||||
@@ -477,13 +477,11 @@ static void triangle_nop( struct setup_context *setup,
|
||||
{
|
||||
}
|
||||
|
||||
void setup_set_tri_state( struct setup_context *setup,
|
||||
unsigned cull_mode,
|
||||
boolean ccw_is_frontface)
|
||||
{
|
||||
setup->ccw_is_frontface = ccw_is_frontface;
|
||||
|
||||
switch (cull_mode) {
|
||||
void
|
||||
lp_setup_choose_triangle( struct setup_context *setup )
|
||||
{
|
||||
switch (setup->cull_mode) {
|
||||
case PIPE_WINDING_NONE:
|
||||
setup->triangle = triangle_both;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user