gallium: added fb_width/height fields to softpipe context

These are convenience fields.  Otherwise, we have to check cbuf[0] or zsbuf
in various places.
This commit is contained in:
Brian Paul 2008-03-19 18:10:09 -06:00
parent ba31cf6855
commit 122ed506f4
5 changed files with 18 additions and 13 deletions

View file

@ -84,6 +84,8 @@ struct softpipe_context {
unsigned num_samplers;
unsigned num_textures;
uint fb_width, fb_height;
/* Counter for occlusion queries. Note this supports overlapping
* queries.
*/

View file

@ -485,7 +485,7 @@ setup_fragcoord_coeff(struct setup_stage *setup, uint slot)
/*Y*/
if (setup->softpipe->rasterizer->origin_lower_left) {
/* y=0=bottom */
const int winHeight = setup->softpipe->framebuffer.cbufs[0]->height;
const int winHeight = setup->softpipe->fb_height;
setup->coef[slot].a0[1] = (float) (winHeight - 1);
setup->coef[slot].dady[1] = -1.0;
}

View file

@ -25,7 +25,7 @@ stipple_quad(struct quad_stage *qs, struct quad_header *quad)
int y0, y1;
uint stipple0, stipple1;
if (softpipe->rasterizer->origin_lower_left) {
y0 = softpipe->framebuffer.cbufs[0]->height - 1 - quad->y0;
y0 = softpipe->fb_height - 1 - quad->y0;
y1 = y0 - 1;
}
else {

View file

@ -171,17 +171,8 @@ softpipe_get_vbuf_vertex_info(struct softpipe_context *softpipe)
static void
compute_cliprect(struct softpipe_context *sp)
{
unsigned surfWidth, surfHeight;
if (sp->framebuffer.num_cbufs > 0) {
surfWidth = sp->framebuffer.cbufs[0]->width;
surfHeight = sp->framebuffer.cbufs[0]->height;
}
else {
/* no surface? */
surfWidth = sp->scissor.maxx;
surfHeight = sp->scissor.maxy;
}
uint surfWidth = sp->fb_width;
uint surfHeight = sp->fb_height;
if (sp->rasterizer->scissor) {
/* clip to scissor rect */

View file

@ -48,6 +48,9 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
struct softpipe_context *sp = softpipe_context(pipe);
uint i;
/* updated below */
sp->fb_width = sp->fb_height = 0;
for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
/* check if changing cbuf */
if (sp->framebuffer.cbufs[i] != fb->cbufs[i]) {
@ -60,6 +63,10 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
/* update cache */
sp_tile_cache_set_surface(sp->cbuf_cache[i], fb->cbufs[i]);
}
if (fb->cbufs[i]) {
sp->fb_width = fb->cbufs[i]->width;
sp->fb_height = fb->cbufs[i]->height;
}
}
sp->framebuffer.num_cbufs = fb->num_cbufs;
@ -74,6 +81,11 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
/* update cache */
sp_tile_cache_set_surface(sp->zsbuf_cache, fb->zsbuf);
if (!sp->fb_width && fb->zsbuf) {
sp->fb_width = fb->zsbuf->width;
sp->fb_height = fb->zsbuf->height;
}
}
#if 0