From bfbe2eb6e99b5ed33329ede0dcdabdc991bd7e1b Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 14 Mar 2006 23:36:10 +0000 Subject: [PATCH] new intel_set_span_functions(), bridge to new code --- src/mesa/drivers/dri/i915/intel_screen.c | 36 ++++++++++------------- src/mesa/drivers/dri/i915/intel_span.c | 37 +++++++++++------------- src/mesa/drivers/dri/i915/intel_span.h | 2 +- 3 files changed, 34 insertions(+), 41 deletions(-) diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c index 98c358354bd..cc2b1ba5103 100644 --- a/src/mesa/drivers/dri/i915/intel_screen.c +++ b/src/mesa/drivers/dri/i915/intel_screen.c @@ -41,11 +41,11 @@ #include "intel_span.h" #include "intel_tris.h" #include "intel_ioctl.h" - - +#include "intel_fbo.h" #include "i830_dri.h" + PUBLIC const char __driConfigOptions[] = DRI_CONF_BEGIN DRI_CONF_SECTION_PERFORMANCE @@ -234,49 +234,44 @@ static GLboolean intelCreateBuffer( __DRIscreenPrivate *driScrnPriv, } else { GLboolean swStencil = (mesaVis->stencilBits > 0 && mesaVis->depthBits != 24); + GLenum rgbFormat = (mesaVis->redBits == 5 ? GL_RGB5 : GL_RGBA8); struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis); + /* setup the hardware-based renderbuffers */ { driRenderbuffer *frontRb - = driNewRenderbuffer(GL_RGBA, + = driNewRenderbuffer(rgbFormat, driScrnPriv->pFB, screen->cpp, screen->front.offset, screen->front.pitch, driDrawPriv); - intelSetSpanFunctions(frontRb, mesaVis); + intel_set_span_functions(&frontRb->Base); _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base); } if (mesaVis->doubleBufferMode) { driRenderbuffer *backRb - = driNewRenderbuffer(GL_RGBA, + = driNewRenderbuffer(rgbFormat, screen->back.map, screen->cpp, screen->back.offset, screen->back.pitch, driDrawPriv); - intelSetSpanFunctions(backRb, mesaVis); + intel_set_span_functions(&backRb->Base); _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base); } - if (mesaVis->depthBits == 16) { + if (mesaVis->depthBits > 0) { + /* XXX if 32bpp, this should probably be a GL_DEPTH_STENCIL buffer */ + GLenum depthFormat = (mesaVis->depthBits == 16) + ? GL_DEPTH_COMPONENT16 : GL_DEPTH_COMPONENT24; driRenderbuffer *depthRb - = driNewRenderbuffer(GL_DEPTH_COMPONENT16, + = driNewRenderbuffer(depthFormat, screen->depth.map, screen->cpp, screen->depth.offset, screen->depth.pitch, driDrawPriv); - intelSetSpanFunctions(depthRb, mesaVis); - _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base); - } - else if (mesaVis->depthBits == 24) { - driRenderbuffer *depthRb - = driNewRenderbuffer(GL_DEPTH_COMPONENT24, - screen->depth.map, - screen->cpp, - screen->depth.offset, screen->depth.pitch, - driDrawPriv); - intelSetSpanFunctions(depthRb, mesaVis); + intel_set_span_functions(&depthRb->Base); _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base); } @@ -287,10 +282,11 @@ static GLboolean intelCreateBuffer( __DRIscreenPrivate *driScrnPriv, screen->cpp, screen->depth.offset, screen->depth.pitch, driDrawPriv); - intelSetSpanFunctions(stencilRb, mesaVis); + intel_set_span_functions(&stencilRb->Base); _mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base); } + /* now add any/all software-based renderbuffers we may need */ _mesa_add_soft_renderbuffers(fb, GL_FALSE, /* color */ GL_FALSE, /* depth */ diff --git a/src/mesa/drivers/dri/i915/intel_span.c b/src/mesa/drivers/dri/i915/intel_span.c index 129f04beab1..f1cde0d3cef 100644 --- a/src/mesa/drivers/dri/i915/intel_span.c +++ b/src/mesa/drivers/dri/i915/intel_span.c @@ -199,30 +199,27 @@ void intelInitSpanFuncs( GLcontext *ctx ) } -/** - * Plug in the Get/Put routines for the given driRenderbuffer. - */ void -intelSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis) +intel_set_span_functions(struct gl_renderbuffer *rb) { - if (drb->Base.InternalFormat == GL_RGBA) { - if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) { - intelInitPointers_RGB565(&drb->Base); - } - else { - assert(vis->redBits == 8); - assert(vis->greenBits == 8); - assert(vis->blueBits == 8); - intelInitPointers_ARGB8888(&drb->Base); - } + if (rb->InternalFormat == GL_RGB5) { + /* 565 RGB */ + intelInitPointers_RGB565(rb); } - else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT16) { - intelInitDepthPointers_z16(&drb->Base); + else if (rb->InternalFormat == GL_RGBA8) { + /* 8888 RGBA */ + intelInitPointers_ARGB8888(rb); } - else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT24) { - intelInitDepthPointers_z24_s8(&drb->Base); + else if (rb->InternalFormat == GL_DEPTH_COMPONENT16) { + intelInitDepthPointers_z16(rb); } - else if (drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) { - intelInitStencilPointers_z24_s8(&drb->Base); + else if (rb->InternalFormat == GL_DEPTH_COMPONENT24) { + intelInitDepthPointers_z24_s8(rb); + } + else if (rb->InternalFormat == GL_STENCIL_INDEX8_EXT) { + intelInitStencilPointers_z24_s8(rb); + } + else { + _mesa_problem(NULL, "Unexpected InternalFormat in intelSetSpanFunctions"); } } diff --git a/src/mesa/drivers/dri/i915/intel_span.h b/src/mesa/drivers/dri/i915/intel_span.h index 2d4f8589d0f..254be5a1ba6 100644 --- a/src/mesa/drivers/dri/i915/intel_span.h +++ b/src/mesa/drivers/dri/i915/intel_span.h @@ -36,6 +36,6 @@ extern void intelSpanRenderFinish( GLcontext *ctx ); extern void intelSpanRenderStart( GLcontext *ctx ); extern void -intelSetSpanFunctions(driRenderbuffer *rb, const GLvisual *vis); +intel_set_span_functions(struct gl_renderbuffer *rb); #endif