llvmpipe: Remove x/y from cmd_bin
These were mostly just a waste of memory and cache pressure, and were really only used for debugging. This change reduces instruction count (as measured by callgrind's Ir event) of gnome-shell-perf-tool on Ivybridge by 3.5% ± 0.015% (n=20). Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:

committed by
Roland Scheidegger

parent
eb4c992ea5
commit
e881c9a5dc
@@ -87,13 +87,14 @@ lp_rast_end( struct lp_rasterizer *rast )
|
||||
*/
|
||||
static void
|
||||
lp_rast_tile_begin(struct lp_rasterizer_task *task,
|
||||
const struct cmd_bin *bin)
|
||||
const struct cmd_bin *bin,
|
||||
int x, int y)
|
||||
{
|
||||
LP_DBG(DEBUG_RAST, "%s %d,%d\n", __FUNCTION__, bin->x, bin->y);
|
||||
LP_DBG(DEBUG_RAST, "%s %d,%d\n", __FUNCTION__, x, y);
|
||||
|
||||
task->bin = bin;
|
||||
task->x = bin->x * TILE_SIZE;
|
||||
task->y = bin->y * TILE_SIZE;
|
||||
task->x = x * TILE_SIZE;
|
||||
task->y = y * TILE_SIZE;
|
||||
|
||||
/* reset pointers to color and depth tile(s) */
|
||||
memset(task->color_tiles, 0, sizeof(task->color_tiles));
|
||||
@@ -575,13 +576,14 @@ static lp_rast_cmd_func dispatch[LP_RAST_OP_MAX] =
|
||||
|
||||
static void
|
||||
do_rasterize_bin(struct lp_rasterizer_task *task,
|
||||
const struct cmd_bin *bin)
|
||||
const struct cmd_bin *bin,
|
||||
int x, int y)
|
||||
{
|
||||
const struct cmd_block *block;
|
||||
unsigned k;
|
||||
|
||||
if (0)
|
||||
lp_debug_bin(bin);
|
||||
lp_debug_bin(bin, x, y);
|
||||
|
||||
for (block = bin->head; block; block = block->next) {
|
||||
for (k = 0; k < block->count; k++) {
|
||||
@@ -600,11 +602,11 @@ do_rasterize_bin(struct lp_rasterizer_task *task,
|
||||
*/
|
||||
static void
|
||||
rasterize_bin(struct lp_rasterizer_task *task,
|
||||
const struct cmd_bin *bin )
|
||||
const struct cmd_bin *bin, int x, int y )
|
||||
{
|
||||
lp_rast_tile_begin( task, bin );
|
||||
lp_rast_tile_begin( task, bin, x, y );
|
||||
|
||||
do_rasterize_bin(task, bin);
|
||||
do_rasterize_bin(task, bin, x, y);
|
||||
|
||||
lp_rast_tile_end(task);
|
||||
|
||||
@@ -646,28 +648,17 @@ rasterize_scene(struct lp_rasterizer_task *task,
|
||||
|
||||
if (!task->rast->no_rast && !scene->discard) {
|
||||
/* loop over scene bins, rasterize each */
|
||||
#if 0
|
||||
{
|
||||
unsigned i, j;
|
||||
for (i = 0; i < scene->tiles_x; i++) {
|
||||
for (j = 0; j < scene->tiles_y; j++) {
|
||||
struct cmd_bin *bin = lp_scene_get_bin(scene, i, j);
|
||||
struct cmd_bin *bin;
|
||||
int i, j;
|
||||
|
||||
assert(scene);
|
||||
while ((bin = lp_scene_bin_iter_next(scene, &i, &j))) {
|
||||
if (!is_empty_bin( bin ))
|
||||
rasterize_bin(task, bin, i, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
{
|
||||
struct cmd_bin *bin;
|
||||
|
||||
assert(scene);
|
||||
while ((bin = lp_scene_bin_iter_next(scene))) {
|
||||
if (!is_empty_bin( bin ))
|
||||
rasterize_bin(task, bin);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
if (scene->fence) {
|
||||
|
@@ -90,13 +90,13 @@ is_blend( const struct lp_rast_state *state,
|
||||
|
||||
|
||||
static void
|
||||
debug_bin( const struct cmd_bin *bin )
|
||||
debug_bin( const struct cmd_bin *bin, int x, int y )
|
||||
{
|
||||
const struct lp_rast_state *state = NULL;
|
||||
const struct cmd_block *head = bin->head;
|
||||
int i, j = 0;
|
||||
|
||||
debug_printf("bin %d,%d:\n", bin->x, bin->y);
|
||||
debug_printf("bin %d,%d:\n", x, y);
|
||||
|
||||
while (head) {
|
||||
for (i = 0; i < head->count; i++, j++) {
|
||||
@@ -231,13 +231,14 @@ debug_triangle(int tilex, int tiley,
|
||||
static void
|
||||
do_debug_bin( struct tile *tile,
|
||||
const struct cmd_bin *bin,
|
||||
int x, int y,
|
||||
boolean print_cmds)
|
||||
{
|
||||
unsigned k, j = 0;
|
||||
const struct cmd_block *block;
|
||||
|
||||
int tx = bin->x * TILE_SIZE;
|
||||
int ty = bin->y * TILE_SIZE;
|
||||
int tx = x * TILE_SIZE;
|
||||
int ty = y * TILE_SIZE;
|
||||
|
||||
memset(tile->data, ' ', sizeof tile->data);
|
||||
tile->coverage = 0;
|
||||
@@ -286,13 +287,13 @@ do_debug_bin( struct tile *tile,
|
||||
}
|
||||
|
||||
void
|
||||
lp_debug_bin( const struct cmd_bin *bin)
|
||||
lp_debug_bin( const struct cmd_bin *bin, int i, int j)
|
||||
{
|
||||
struct tile tile;
|
||||
int x,y;
|
||||
|
||||
if (bin->head) {
|
||||
do_debug_bin(&tile, bin, TRUE);
|
||||
do_debug_bin(&tile, bin, i, j, TRUE);
|
||||
|
||||
debug_printf("------------------------------------------------------------------\n");
|
||||
for (y = 0; y < TILE_SIZE; y++) {
|
||||
@@ -349,9 +350,9 @@ lp_debug_draw_bins_by_coverage( struct lp_scene *scene )
|
||||
struct tile tile;
|
||||
|
||||
if (bin->head) {
|
||||
//lp_debug_bin(bin);
|
||||
//lp_debug_bin(bin, x, y);
|
||||
|
||||
do_debug_bin(&tile, bin, FALSE);
|
||||
do_debug_bin(&tile, bin, x, y, FALSE);
|
||||
|
||||
total += tile.coverage;
|
||||
possible += 64*64;
|
||||
@@ -419,7 +420,7 @@ lp_debug_bins( struct lp_scene *scene )
|
||||
for (x = 0; x < scene->tiles_x; x++) {
|
||||
struct cmd_bin *bin = lp_scene_get_bin(scene, x, y);
|
||||
if (bin->head) {
|
||||
debug_bin(bin);
|
||||
debug_bin(bin, x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -341,6 +341,6 @@ lp_rast_set_state(struct lp_rasterizer_task *task,
|
||||
const union lp_rast_cmd_arg arg);
|
||||
|
||||
void
|
||||
lp_debug_bin( const struct cmd_bin *bin );
|
||||
lp_debug_bin( const struct cmd_bin *bin, int x, int y );
|
||||
|
||||
#endif
|
||||
|
@@ -468,7 +468,7 @@ lp_scene_bin_iter_begin( struct lp_scene *scene )
|
||||
* of work (a bin) to work on.
|
||||
*/
|
||||
struct cmd_bin *
|
||||
lp_scene_bin_iter_next( struct lp_scene *scene )
|
||||
lp_scene_bin_iter_next( struct lp_scene *scene , int *x, int *y)
|
||||
{
|
||||
struct cmd_bin *bin = NULL;
|
||||
|
||||
@@ -485,6 +485,8 @@ lp_scene_bin_iter_next( struct lp_scene *scene )
|
||||
}
|
||||
|
||||
bin = lp_scene_get_bin(scene, scene->curr_x, scene->curr_y);
|
||||
*x = scene->curr_x;
|
||||
*y = scene->curr_y;
|
||||
|
||||
end:
|
||||
/*printf("return bin %p at %d, %d\n", (void *) bin, *bin_x, *bin_y);*/
|
||||
|
@@ -94,8 +94,6 @@ struct data_block {
|
||||
* For each screen tile we have one of these bins.
|
||||
*/
|
||||
struct cmd_bin {
|
||||
ushort x;
|
||||
ushort y;
|
||||
const struct lp_rast_state *last_state; /* most recent state set in bin */
|
||||
struct cmd_block *head;
|
||||
struct cmd_block *tail;
|
||||
@@ -375,7 +373,7 @@ void
|
||||
lp_scene_bin_iter_begin( struct lp_scene *scene );
|
||||
|
||||
struct cmd_bin *
|
||||
lp_scene_bin_iter_next( struct lp_scene *scene );
|
||||
lp_scene_bin_iter_next( struct lp_scene *scene, int *x, int *y );
|
||||
|
||||
|
||||
|
||||
|
@@ -181,7 +181,7 @@ begin_binning( struct lp_setup_context *setup )
|
||||
struct lp_scene *scene = setup->scene;
|
||||
boolean need_zsload = FALSE;
|
||||
boolean ok;
|
||||
unsigned i, j;
|
||||
unsigned i;
|
||||
|
||||
assert(scene);
|
||||
assert(scene->fence == NULL);
|
||||
@@ -192,15 +192,6 @@ begin_binning( struct lp_setup_context *setup )
|
||||
if (!scene->fence)
|
||||
return FALSE;
|
||||
|
||||
/* Initialize the bin flags and x/y coords:
|
||||
*/
|
||||
for (i = 0; i < scene->tiles_x; i++) {
|
||||
for (j = 0; j < scene->tiles_y; j++) {
|
||||
scene->tile[i][j].x = i;
|
||||
scene->tile[i][j].y = j;
|
||||
}
|
||||
}
|
||||
|
||||
ok = try_update_scene_state(setup);
|
||||
if (!ok)
|
||||
return FALSE;
|
||||
|
Reference in New Issue
Block a user