diff options
Diffstat (limited to 'src/mesa/drivers/dri/glamo/glamo_fbo.c')
-rw-r--r-- | src/mesa/drivers/dri/glamo/glamo_fbo.c | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/glamo/glamo_fbo.c b/src/mesa/drivers/dri/glamo/glamo_fbo.c new file mode 100644 index 0000000000..13de654577 --- /dev/null +++ b/src/mesa/drivers/dri/glamo/glamo_fbo.c @@ -0,0 +1,120 @@ +/* + * Direct Rendering Support for SMedia Glamo 336x/337x + * + * (c) 2009 Thomas White <taw@bitwiz.org.uk> + * Roughly based on radeon_fbo.c (c) 2008 Red Hat Inc + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#include "main/imports.h" +#include "main/macros.h" +#include "main/mtypes.h" +#include "main/fbobject.h" +#include "main/framebuffer.h" +#include "main/renderbuffer.h" +#include "main/context.h" +#include "dri_util.h" + +#include "glamo_fbo.h" + + +static void glamo_delete_renderbuffer(struct gl_renderbuffer *rb) +{ + struct glamo_renderbuffer *grb = glamo_renderbuffer(rb); + + ASSERT(grb); + + if ( grb && grb->bo ) { +// glamo_bo_unref(grb->bo); + } + _mesa_free(grb); +} + + +static void *glamo_get_pointer(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + return NULL; /* Can't be directly addressed */ +} + + +/* Called for each hardware renderbuffer when a _window_ is resized. + * Just update fields. + * Not used for user-created renderbuffers! + */ +static GLboolean glamo_alloc_window_storage(GLcontext *ctx, + struct gl_renderbuffer *rb, + GLenum internalFormat, + GLuint width, GLuint height) +{ + ASSERT(rb->Name == 0); + rb->Width = width; + rb->Height = height; + rb->_ActualFormat = internalFormat; + printf("alloc_window_storage\n");fflush(stdout); + return GL_TRUE; +} + + +/* Create a buffer, such as a colour or depth buffer */ +struct glamo_renderbuffer *glamo_create_renderbuffer(GLenum format, + __DRIdrawablePrivate *driDrawPriv) +{ + struct glamo_renderbuffer *grb; + + grb = CALLOC_STRUCT(glamo_renderbuffer); + if ( !grb ) return NULL; + + _mesa_init_renderbuffer(&grb->base, 0); + grb->base.ClassID = GLAMO_RB_CLASS; + + switch (format) { + case GL_RGB5: + grb->base._ActualFormat = GL_RGB5; + grb->base._BaseFormat = GL_RGBA; + grb->base.RedBits = 5; + grb->base.GreenBits = 6; + grb->base.BlueBits = 5; + grb->base.DataType = GL_UNSIGNED_BYTE; + break; + case GL_DEPTH_COMPONENT16: + grb->base._ActualFormat = GL_DEPTH_COMPONENT16; + grb->base._BaseFormat = GL_DEPTH_COMPONENT; + grb->base.DepthBits = 16; + grb->base.DataType = GL_UNSIGNED_SHORT; + break; + default: + fprintf(stderr, "%s: Unknown format 0x%04x\n", __FUNCTION__, format); + _mesa_delete_renderbuffer(&grb->base); + return NULL; + } + + grb->dPriv = driDrawPriv; + grb->base.InternalFormat = format; + + grb->base.Delete = glamo_delete_renderbuffer; + grb->base.AllocStorage = glamo_alloc_window_storage; + grb->base.GetPointer = glamo_get_pointer; + + return grb; +} + + +/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */ |