mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
very simple texture cache implementation
This commit is contained in:
parent
c8cc1e86f6
commit
267cf16e06
2 changed files with 29 additions and 2 deletions
|
|
@ -471,12 +471,34 @@ sp_get_sample_2d(struct tgsi_sampler *sampler,
|
|||
switch (sampler->state->min_filter) {
|
||||
case PIPE_TEX_FILTER_NEAREST:
|
||||
{
|
||||
GLint x, y;
|
||||
GLint x, y, cx, cy;
|
||||
const GLfloat *src;
|
||||
x = nearest_texcoord(sampler->state->wrap_s, strq[0],
|
||||
sampler->texture->width0);
|
||||
y = nearest_texcoord(sampler->state->wrap_t, strq[1],
|
||||
sampler->texture->height0);
|
||||
ps->get_tile(ps, x, y, 1, 1, rgba);
|
||||
|
||||
cx = x / SAMPLER_CACHE_SIZE;
|
||||
cy = y / SAMPLER_CACHE_SIZE;
|
||||
if (cx != sampler->cache_x || cy != sampler->cache_y) {
|
||||
/* cache miss, replace cache with new tile */
|
||||
sampler->cache_x = cx;
|
||||
sampler->cache_y = cy;
|
||||
ps->get_tile(ps,
|
||||
cx * SAMPLER_CACHE_SIZE,
|
||||
cy * SAMPLER_CACHE_SIZE,
|
||||
SAMPLER_CACHE_SIZE, SAMPLER_CACHE_SIZE,
|
||||
(GLfloat *) sampler->cache);
|
||||
/*printf("cache miss (%d, %d)\n", x, y);*/
|
||||
}
|
||||
else {
|
||||
/*printf("cache hit (%d, %d)\n", x, y);*/
|
||||
}
|
||||
|
||||
cx = x % SAMPLER_CACHE_SIZE;
|
||||
cy = y % SAMPLER_CACHE_SIZE;
|
||||
src = sampler->cache[cy][cx];
|
||||
COPY_4V(rgba, src);
|
||||
}
|
||||
break;
|
||||
case PIPE_TEX_FILTER_LINEAR:
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ struct tgsi_exec_vector
|
|||
union tgsi_exec_channel xyzw[4];
|
||||
};
|
||||
|
||||
#define SAMPLER_CACHE_SIZE 8
|
||||
|
||||
struct tgsi_sampler
|
||||
{
|
||||
const struct pipe_sampler_state *state;
|
||||
|
|
@ -28,6 +30,9 @@ struct tgsi_sampler
|
|||
void (*get_sample)(struct tgsi_sampler *sampler,
|
||||
const GLfloat strq[4], GLfloat lambda, GLfloat rgba[4]);
|
||||
void *pipe; /*XXX temporary*/
|
||||
|
||||
GLint cache_x, cache_y;
|
||||
GLfloat cache[SAMPLER_CACHE_SIZE][SAMPLER_CACHE_SIZE][4];
|
||||
};
|
||||
|
||||
struct tgsi_exec_labels
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue