X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fcommon%2Fdrirenderbuffer.c;h=d4f7f2527bbd077f21f0ff830f51fe15cce41c85;hb=9273150f9a8394f4ef630a96f0089ad8cad607f5;hp=29ba1ea8a3032bf932745d3ba8a4cdbbe8eaaa99;hpb=663138a9510be5d2f3ee2bda41e3a8c86ab688b5;p=mesa.git diff --git a/src/mesa/drivers/dri/common/drirenderbuffer.c b/src/mesa/drivers/dri/common/drirenderbuffer.c index 29ba1ea8a30..d4f7f2527bb 100644 --- a/src/mesa/drivers/dri/common/drirenderbuffer.c +++ b/src/mesa/drivers/dri/common/drirenderbuffer.c @@ -40,6 +40,10 @@ driDeleteRenderbuffer(struct gl_renderbuffer *rb) * Allocate a new driRenderbuffer object. * Individual drivers are free to implement different versions of * this function. + * + * At this time, this function can only be used for window-system + * renderbuffers, not user-created RBOs. + * * \param format Either GL_RGBA, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, * GL_DEPTH_COMPONENT32, or GL_STENCIL_INDEX8_EXT (for now). * \param addr address in main memory of the buffer. Probably a memory @@ -56,6 +60,8 @@ driNewRenderbuffer(GLenum format, GLvoid *addr, driRenderbuffer *drb; assert(format == GL_RGBA || + format == GL_RGB5 || + format == GL_RGBA8 || format == GL_DEPTH_COMPONENT16 || format == GL_DEPTH_COMPONENT24 || format == GL_DEPTH_COMPONENT32 || @@ -75,34 +81,49 @@ driNewRenderbuffer(GLenum format, GLvoid *addr, drb->Base.InternalFormat = format; - if (format == GL_RGBA) { + if (format == GL_RGBA || format == GL_RGB5 || format == GL_RGBA8) { /* Color */ drb->Base._BaseFormat = GL_RGBA; drb->Base.DataType = GL_UNSIGNED_BYTE; + if (format == GL_RGB5) { + drb->Base.RedBits = 5; + drb->Base.GreenBits = 6; + drb->Base.BlueBits = 5; + } + else { + drb->Base.RedBits = + drb->Base.GreenBits = + drb->Base.BlueBits = + drb->Base.AlphaBits = 8; + } } else if (format == GL_DEPTH_COMPONENT16) { /* Depth */ drb->Base._BaseFormat = GL_DEPTH_COMPONENT; /* we always Get/Put 32-bit Z values */ drb->Base.DataType = GL_UNSIGNED_INT; + drb->Base.DepthBits = 16; } else if (format == GL_DEPTH_COMPONENT24) { /* Depth */ drb->Base._BaseFormat = GL_DEPTH_COMPONENT; /* we always Get/Put 32-bit Z values */ drb->Base.DataType = GL_UNSIGNED_INT; + drb->Base.DepthBits = 24; } else if (format == GL_DEPTH_COMPONENT32) { /* Depth */ drb->Base._BaseFormat = GL_DEPTH_COMPONENT; /* we always Get/Put 32-bit Z values */ drb->Base.DataType = GL_UNSIGNED_INT; + drb->Base.DepthBits = 32; } else { /* Stencil */ ASSERT(format == GL_STENCIL_INDEX8_EXT); drb->Base._BaseFormat = GL_STENCIL_INDEX; drb->Base.DataType = GL_UNSIGNED_BYTE; + drb->Base.StencilBits = 8; } /* XXX if we were allocating a user-created renderbuffer, we'd have @@ -187,8 +208,12 @@ driUpdateFramebufferSize(GLcontext *ctx, const __DRIdrawablePrivate *dPriv) { struct gl_framebuffer *fb = (struct gl_framebuffer *) dPriv->driverPrivate; if (fb && (dPriv->w != fb->Width || dPriv->h != fb->Height)) { - _mesa_resize_framebuffer(ctx, fb, dPriv->w, dPriv->h); + ctx->Driver.ResizeBuffers(ctx, fb, dPriv->w, dPriv->h); +#if 0 + /* if the driver needs the hw lock for ResizeBuffers, the drawable + might have changed again by now */ assert(fb->Width == dPriv->w); assert(fb->Height == dPriv->h); +#endif } }