Removed the JIT calculation of the tile_shift value and replaced it by a

* app/image_render.c:
 * app/tile.h: Removed the JIT calculation of the tile_shift
 value and replaced it by a constant called TILE_SHIFT in tile.h.
 This gives the compiler a better chance to optimize the code.
 Also added a few consts all over the place to give the compiler
 some hints.
This commit is contained in:
Daniel Egger 2000-10-25 19:35:08 +00:00
parent 5be2937c0a
commit 65f1edb172
6 changed files with 53 additions and 78 deletions

View File

@ -1,3 +1,12 @@
2000-10-24 Daniel Egger <egger@suse.de>
* app/image_render.c:
* app/tile.h: Removed the JIT calculation of the tile_shift
value and replaced it by a constant called TILE_SHIFT in tile.h.
This gives the compiler a better chance to optimize the code.
Also added a few consts all over the place to give the compiler
some hints.
2000-10-24 Simon Budig <simon@gimp.org>
* gimp_splash.ppm A new splash-screen (not for 1.2...) :-)

View File

@ -2,8 +2,12 @@
#define __TILE_H__
/* We make one big assumptions about the tilesize at several places
in the code: All tiles are squares! */
#define TILE_WIDTH 64
#define TILE_HEIGHT 64
#define TILE_SHIFT 6 /* This has to be the lg(TILE_WIDTH) to the base of 2 */
/* Uncomment for verbose debugging on copy-on-write logic
#define TILE_DEBUG

View File

@ -61,7 +61,6 @@ guchar *temp_buf = NULL;
static guint check_mod;
static guint check_shift;
static guint tile_shift;
static guchar check_combos[6][2] =
{
{ 204, 255 },
@ -83,9 +82,6 @@ render_setup (int check_type,
/* based on the tile size, determine the tile shift amount
* (assume here that tile_height and tile_width are equal)
*/
tile_shift = 0;
while ((1 << tile_shift) < TILE_WIDTH)
tile_shift++;
/* allocate a buffer for arranging information from a row of tiles */
if (!tile_buf)
@ -560,24 +556,19 @@ render_image_rgb (RenderInfo *info)
{
guchar *src;
guchar *dest;
int byte_order;
int y, ye;
int x, xe;
int initial;
int y, x;
gboolean initial;
float error;
float step;
const int ye = info->y + info->h;
const int xe = info->x + info->w;
const float step = 1.0 / info->scaley;
y = info->y;
ye = info->y + info->h;
xe = info->x + info->w;
step = 1.0 / info->scaley;
error = y * step;
error -= (int)error - step;
initial = TRUE;
byte_order = info->byte_order;
info->src = render_image_tile_fault (info);
for (; y < ye; y++)
@ -630,20 +621,17 @@ render_image_rgb_a (RenderInfo *info)
gulong r, g, b;
guint a;
int dark_light;
int byte_order;
int y, ye;
int x, xe;
gboolean byte_order;
int y, x;
int initial;
float error;
float step;
const int ye = info->y + info->h;
const int xe = info->x + info->w;
const float step = 1.0 / info->scaley;
alpha = info->alpha;
y = info->y;
ye = info->y + info->h;
xe = info->x + info->w;
step = 1.0 / info->scaley;
error = y * step;
error -= ((int)error) - step;
@ -840,16 +828,14 @@ render_image_tile_fault (RenderInfo *info)
x += step;
data += step * bpp;
if ((x >> tile_shift) != tilex)
if ((x >> TILE_SHIFT) != tilex)
{
tile_release (tile, FALSE);
tilex += 1;
tile = tile_manager_get_tile (info->src_tiles, srctilex=x,
srctiley=info->src_y, TRUE, FALSE);
if (!tile)
return tile_buf;
data = tile_data_pointer (tile,
x % TILE_WIDTH,
info->src_y % TILE_HEIGHT);

View File

@ -61,7 +61,6 @@ guchar *temp_buf = NULL;
static guint check_mod;
static guint check_shift;
static guint tile_shift;
static guchar check_combos[6][2] =
{
{ 204, 255 },
@ -83,9 +82,6 @@ render_setup (int check_type,
/* based on the tile size, determine the tile shift amount
* (assume here that tile_height and tile_width are equal)
*/
tile_shift = 0;
while ((1 << tile_shift) < TILE_WIDTH)
tile_shift++;
/* allocate a buffer for arranging information from a row of tiles */
if (!tile_buf)
@ -560,24 +556,19 @@ render_image_rgb (RenderInfo *info)
{
guchar *src;
guchar *dest;
int byte_order;
int y, ye;
int x, xe;
int initial;
int y, x;
gboolean initial;
float error;
float step;
const int ye = info->y + info->h;
const int xe = info->x + info->w;
const float step = 1.0 / info->scaley;
y = info->y;
ye = info->y + info->h;
xe = info->x + info->w;
step = 1.0 / info->scaley;
error = y * step;
error -= (int)error - step;
initial = TRUE;
byte_order = info->byte_order;
info->src = render_image_tile_fault (info);
for (; y < ye; y++)
@ -630,20 +621,17 @@ render_image_rgb_a (RenderInfo *info)
gulong r, g, b;
guint a;
int dark_light;
int byte_order;
int y, ye;
int x, xe;
gboolean byte_order;
int y, x;
int initial;
float error;
float step;
const int ye = info->y + info->h;
const int xe = info->x + info->w;
const float step = 1.0 / info->scaley;
alpha = info->alpha;
y = info->y;
ye = info->y + info->h;
xe = info->x + info->w;
step = 1.0 / info->scaley;
error = y * step;
error -= ((int)error) - step;
@ -840,16 +828,14 @@ render_image_tile_fault (RenderInfo *info)
x += step;
data += step * bpp;
if ((x >> tile_shift) != tilex)
if ((x >> TILE_SHIFT) != tilex)
{
tile_release (tile, FALSE);
tilex += 1;
tile = tile_manager_get_tile (info->src_tiles, srctilex=x,
srctiley=info->src_y, TRUE, FALSE);
if (!tile)
return tile_buf;
data = tile_data_pointer (tile,
x % TILE_WIDTH,
info->src_y % TILE_HEIGHT);

View File

@ -61,7 +61,6 @@ guchar *temp_buf = NULL;
static guint check_mod;
static guint check_shift;
static guint tile_shift;
static guchar check_combos[6][2] =
{
{ 204, 255 },
@ -83,9 +82,6 @@ render_setup (int check_type,
/* based on the tile size, determine the tile shift amount
* (assume here that tile_height and tile_width are equal)
*/
tile_shift = 0;
while ((1 << tile_shift) < TILE_WIDTH)
tile_shift++;
/* allocate a buffer for arranging information from a row of tiles */
if (!tile_buf)
@ -560,24 +556,19 @@ render_image_rgb (RenderInfo *info)
{
guchar *src;
guchar *dest;
int byte_order;
int y, ye;
int x, xe;
int initial;
int y, x;
gboolean initial;
float error;
float step;
const int ye = info->y + info->h;
const int xe = info->x + info->w;
const float step = 1.0 / info->scaley;
y = info->y;
ye = info->y + info->h;
xe = info->x + info->w;
step = 1.0 / info->scaley;
error = y * step;
error -= (int)error - step;
initial = TRUE;
byte_order = info->byte_order;
info->src = render_image_tile_fault (info);
for (; y < ye; y++)
@ -630,20 +621,17 @@ render_image_rgb_a (RenderInfo *info)
gulong r, g, b;
guint a;
int dark_light;
int byte_order;
int y, ye;
int x, xe;
gboolean byte_order;
int y, x;
int initial;
float error;
float step;
const int ye = info->y + info->h;
const int xe = info->x + info->w;
const float step = 1.0 / info->scaley;
alpha = info->alpha;
y = info->y;
ye = info->y + info->h;
xe = info->x + info->w;
step = 1.0 / info->scaley;
error = y * step;
error -= ((int)error) - step;
@ -840,16 +828,14 @@ render_image_tile_fault (RenderInfo *info)
x += step;
data += step * bpp;
if ((x >> tile_shift) != tilex)
if ((x >> TILE_SHIFT) != tilex)
{
tile_release (tile, FALSE);
tilex += 1;
tile = tile_manager_get_tile (info->src_tiles, srctilex=x,
srctiley=info->src_y, TRUE, FALSE);
if (!tile)
return tile_buf;
data = tile_data_pointer (tile,
x % TILE_WIDTH,
info->src_y % TILE_HEIGHT);

View File

@ -2,8 +2,12 @@
#define __TILE_H__
/* We make one big assumptions about the tilesize at several places
in the code: All tiles are squares! */
#define TILE_WIDTH 64
#define TILE_HEIGHT 64
#define TILE_SHIFT 6 /* This has to be the lg(TILE_WIDTH) to the base of 2 */
/* Uncomment for verbose debugging on copy-on-write logic
#define TILE_DEBUG