[intel] Simplify intelCreateBuffer() a bit.

Drop a bunch of unused arguments from intel_create_renderbuffer() and
introduce intel_renderbuffer_set_region() to set the region for
a renderbuffer.
This commit is contained in:
Kristian Høgsberg
2008-01-09 16:55:32 -05:00
parent 33c42c1262
commit e131c46b20
4 changed files with 39 additions and 84 deletions

View File

@@ -634,23 +634,23 @@ intelMakeCurrent(__DRIcontextPrivate * driContextPriv,
struct intel_renderbuffer *irbStencil struct intel_renderbuffer *irbStencil
= intel_get_renderbuffer(&intel_fb->Base, BUFFER_STENCIL); = intel_get_renderbuffer(&intel_fb->Base, BUFFER_STENCIL);
if (intel_fb->color_rb[0] && !intel_fb->color_rb[0]->region) { if (intel_fb->color_rb[0]) {
intel_region_reference(&intel_fb->color_rb[0]->region, intel_renderbuffer_set_region(intel_fb->color_rb[0],
intel->front_region); intel->front_region);
} }
if (intel_fb->color_rb[1] && !intel_fb->color_rb[1]->region) { if (intel_fb->color_rb[1]) {
intel_region_reference(&intel_fb->color_rb[1]->region, intel_renderbuffer_set_region(intel_fb->color_rb[1],
intel->back_region); intel->back_region);
} }
if (intel_fb->color_rb[2] && !intel_fb->color_rb[2]->region) { if (intel_fb->color_rb[2]) {
intel_region_reference(&intel_fb->color_rb[2]->region, intel_renderbuffer_set_region(intel_fb->color_rb[2],
intel->third_region); intel->third_region);
} }
if (irbDepth && !irbDepth->region) { if (irbDepth) {
intel_region_reference(&irbDepth->region, intel->depth_region); intel_renderbuffer_set_region(irbDepth, intel->depth_region);
} }
if (irbStencil && !irbStencil->region) { if (irbStencil) {
intel_region_reference(&irbStencil->region, intel->depth_region); intel_renderbuffer_set_region(irbStencil, intel->depth_region);
} }
} }

View File

@@ -355,16 +355,27 @@ intel_nop_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
} }
void
intel_renderbuffer_set_region(struct intel_renderbuffer *rb,
struct intel_region *region)
{
struct intel_region *old;
old = rb->region;
rb->region = NULL;
intel_region_reference(&rb->region, region);
intel_region_release(&old);
rb->pfMap = region->map;
rb->pfPitch = region->pitch;
}
/** /**
* Create a new intel_renderbuffer which corresponds to an on-screen window, * Create a new intel_renderbuffer which corresponds to an on-screen window,
* not a user-created renderbuffer. * not a user-created renderbuffer.
* \param width the screen width
* \param height the screen height
*/ */
struct intel_renderbuffer * struct intel_renderbuffer *
intel_create_renderbuffer(GLenum intFormat, GLsizei width, GLsizei height, intel_create_renderbuffer(GLenum intFormat)
int offset, int pitch, int cpp, void *map)
{ {
GET_CURRENT_CONTEXT(ctx); GET_CURRENT_CONTEXT(ctx);
@@ -388,7 +399,6 @@ intel_create_renderbuffer(GLenum intFormat, GLsizei width, GLsizei height,
irb->Base.GreenBits = 6; irb->Base.GreenBits = 6;
irb->Base.BlueBits = 5; irb->Base.BlueBits = 5;
irb->Base.DataType = GL_UNSIGNED_BYTE; irb->Base.DataType = GL_UNSIGNED_BYTE;
cpp = 2;
break; break;
case GL_RGBA8: case GL_RGBA8:
irb->Base._ActualFormat = GL_RGBA8; irb->Base._ActualFormat = GL_RGBA8;
@@ -398,28 +408,24 @@ intel_create_renderbuffer(GLenum intFormat, GLsizei width, GLsizei height,
irb->Base.BlueBits = 8; irb->Base.BlueBits = 8;
irb->Base.AlphaBits = 8; irb->Base.AlphaBits = 8;
irb->Base.DataType = GL_UNSIGNED_BYTE; irb->Base.DataType = GL_UNSIGNED_BYTE;
cpp = 4;
break; break;
case GL_STENCIL_INDEX8_EXT: case GL_STENCIL_INDEX8_EXT:
irb->Base._ActualFormat = GL_STENCIL_INDEX8_EXT; irb->Base._ActualFormat = GL_STENCIL_INDEX8_EXT;
irb->Base._BaseFormat = GL_STENCIL_INDEX; irb->Base._BaseFormat = GL_STENCIL_INDEX;
irb->Base.StencilBits = 8; irb->Base.StencilBits = 8;
irb->Base.DataType = GL_UNSIGNED_BYTE; irb->Base.DataType = GL_UNSIGNED_BYTE;
cpp = 1;
break; break;
case GL_DEPTH_COMPONENT16: case GL_DEPTH_COMPONENT16:
irb->Base._ActualFormat = GL_DEPTH_COMPONENT16; irb->Base._ActualFormat = GL_DEPTH_COMPONENT16;
irb->Base._BaseFormat = GL_DEPTH_COMPONENT; irb->Base._BaseFormat = GL_DEPTH_COMPONENT;
irb->Base.DepthBits = 16; irb->Base.DepthBits = 16;
irb->Base.DataType = GL_UNSIGNED_SHORT; irb->Base.DataType = GL_UNSIGNED_SHORT;
cpp = 2;
break; break;
case GL_DEPTH_COMPONENT24: case GL_DEPTH_COMPONENT24:
irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT; irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
irb->Base._BaseFormat = GL_DEPTH_COMPONENT; irb->Base._BaseFormat = GL_DEPTH_COMPONENT;
irb->Base.DepthBits = 24; irb->Base.DepthBits = 24;
irb->Base.DataType = GL_UNSIGNED_INT; irb->Base.DataType = GL_UNSIGNED_INT;
cpp = 4;
break; break;
case GL_DEPTH24_STENCIL8_EXT: case GL_DEPTH24_STENCIL8_EXT:
irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT; irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
@@ -427,7 +433,6 @@ intel_create_renderbuffer(GLenum intFormat, GLsizei width, GLsizei height,
irb->Base.DepthBits = 24; irb->Base.DepthBits = 24;
irb->Base.StencilBits = 8; irb->Base.StencilBits = 8;
irb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT; irb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
cpp = 4;
break; break;
default: default:
_mesa_problem(NULL, _mesa_problem(NULL,
@@ -444,15 +449,6 @@ intel_create_renderbuffer(GLenum intFormat, GLsizei width, GLsizei height,
/* This sets the Get/PutRow/Value functions */ /* This sets the Get/PutRow/Value functions */
intel_set_span_functions(&irb->Base); intel_set_span_functions(&irb->Base);
irb->pfMap = map;
irb->pfPitch = pitch / cpp; /* in pixels */
#if 00
irb->region = intel_region_create_static(intel,
DRM_MM_TT,
offset, map, cpp, width, height);
#endif
return irb; return irb;
} }

View File

@@ -85,14 +85,12 @@ struct intel_renderbuffer
extern struct intel_renderbuffer *intel_renderbuffer(struct gl_renderbuffer extern struct intel_renderbuffer *intel_renderbuffer(struct gl_renderbuffer
*rb); *rb);
extern struct intel_renderbuffer *intel_create_renderbuffer(GLenum intFormat, extern void
GLsizei width, intel_renderbuffer_set_region(struct intel_renderbuffer *irb,
GLsizei height, struct intel_region *region);
int offset,
int pitch,
int cpp,
void *map);
extern struct intel_renderbuffer *
intel_create_renderbuffer(GLenum intFormat);
extern void intel_fbo_init(struct intel_context *intel); extern void intel_fbo_init(struct intel_context *intel);

View File

@@ -429,41 +429,20 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv,
/* setup the hardware-based renderbuffers */ /* setup the hardware-based renderbuffers */
{ {
intel_fb->color_rb[0] intel_fb->color_rb[0] = intel_create_renderbuffer(rgbFormat);
= intel_create_renderbuffer(rgbFormat,
screen->width, screen->height,
screen->front.offset,
screen->front.pitch,
screen->cpp,
screen->front.map);
intel_set_span_functions(&intel_fb->color_rb[0]->Base);
_mesa_add_renderbuffer(&intel_fb->Base, BUFFER_FRONT_LEFT, _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_FRONT_LEFT,
&intel_fb->color_rb[0]->Base); &intel_fb->color_rb[0]->Base);
} }
if (mesaVis->doubleBufferMode) { if (mesaVis->doubleBufferMode) {
intel_fb->color_rb[1] intel_fb->color_rb[1] = intel_create_renderbuffer(rgbFormat);
= intel_create_renderbuffer(rgbFormat,
screen->width, screen->height,
screen->back.offset,
screen->back.pitch,
screen->cpp,
screen->back.map);
intel_set_span_functions(&intel_fb->color_rb[1]->Base);
_mesa_add_renderbuffer(&intel_fb->Base, BUFFER_BACK_LEFT, _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_BACK_LEFT,
&intel_fb->color_rb[1]->Base); &intel_fb->color_rb[1]->Base);
if (screen->third.handle) { if (screen->third.handle) {
struct gl_renderbuffer *tmp_rb = NULL; struct gl_renderbuffer *tmp_rb = NULL;
intel_fb->color_rb[2] intel_fb->color_rb[2] = intel_create_renderbuffer(rgbFormat);
= intel_create_renderbuffer(rgbFormat,
screen->width, screen->height,
screen->third.offset,
screen->third.pitch,
screen->cpp,
screen->third.map);
intel_set_span_functions(&intel_fb->color_rb[2]->Base);
_mesa_reference_renderbuffer(&tmp_rb, &intel_fb->color_rb[2]->Base); _mesa_reference_renderbuffer(&tmp_rb, &intel_fb->color_rb[2]->Base);
} }
} }
@@ -472,13 +451,7 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv,
if (mesaVis->stencilBits == 8) { if (mesaVis->stencilBits == 8) {
/* combined depth/stencil buffer */ /* combined depth/stencil buffer */
struct intel_renderbuffer *depthStencilRb struct intel_renderbuffer *depthStencilRb
= intel_create_renderbuffer(GL_DEPTH24_STENCIL8_EXT, = intel_create_renderbuffer(GL_DEPTH24_STENCIL8_EXT);
screen->width, screen->height,
screen->depth.offset,
screen->depth.pitch,
screen->cpp, /* 4! */
screen->depth.map);
intel_set_span_functions(&depthStencilRb->Base);
/* note: bind RB to two attachment points */ /* note: bind RB to two attachment points */
_mesa_add_renderbuffer(&intel_fb->Base, BUFFER_DEPTH, _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_DEPTH,
&depthStencilRb->Base); &depthStencilRb->Base);
@@ -486,13 +459,7 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv,
&depthStencilRb->Base); &depthStencilRb->Base);
} else { } else {
struct intel_renderbuffer *depthRb struct intel_renderbuffer *depthRb
= intel_create_renderbuffer(GL_DEPTH_COMPONENT24, = intel_create_renderbuffer(GL_DEPTH_COMPONENT24);
screen->width, screen->height,
screen->depth.offset,
screen->depth.pitch,
screen->cpp, /* 4! */
screen->depth.map);
intel_set_span_functions(&depthRb->Base);
_mesa_add_renderbuffer(&intel_fb->Base, BUFFER_DEPTH, _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_DEPTH,
&depthRb->Base); &depthRb->Base);
} }
@@ -500,13 +467,7 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv,
else if (mesaVis->depthBits == 16) { else if (mesaVis->depthBits == 16) {
/* just 16-bit depth buffer, no hw stencil */ /* just 16-bit depth buffer, no hw stencil */
struct intel_renderbuffer *depthRb struct intel_renderbuffer *depthRb
= intel_create_renderbuffer(GL_DEPTH_COMPONENT16, = intel_create_renderbuffer(GL_DEPTH_COMPONENT16);
screen->width, screen->height,
screen->depth.offset,
screen->depth.pitch,
screen->cpp, /* 2! */
screen->depth.map);
intel_set_span_functions(&depthRb->Base);
_mesa_add_renderbuffer(&intel_fb->Base, BUFFER_DEPTH, &depthRb->Base); _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_DEPTH, &depthRb->Base);
} }