diff options
Diffstat (limited to 'src/mesa/drivers/dri/glamo/glamo_screen.c')
-rw-r--r-- | src/mesa/drivers/dri/glamo/glamo_screen.c | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/glamo/glamo_screen.c b/src/mesa/drivers/dri/glamo/glamo_screen.c new file mode 100644 index 0000000000..7ec44ac161 --- /dev/null +++ b/src/mesa/drivers/dri/glamo/glamo_screen.c @@ -0,0 +1,170 @@ +/* + * Direct Rendering Support for SMedia Glamo 336x/337x + * + * (c) 2009 Thomas White <taw@bitwiz.org.uk> + * Roughly based on sis_screen.c (c) 2003 Eric Anholt + * + * 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 "dri_util.h" +#include "utils.h" +#include "xmlconfig.h" +#include "GL/internal/dri_interface.h" +#include "framebuffer.h" +#include "renderbuffer.h" + +#include "glamo_screen.h" +#include "glamo_context.h" + + +static int glamoInitDriver(__DRIscreenPrivate *psp) +{ + return 0; +} + + +static glamoScreenPtr glamoCreateScreen(__DRIscreenPrivate *sPriv) +{ + glamoScreenPtr glamoScreen; + + /* Allocate the private area */ + glamoScreen = (glamoScreenPtr)CALLOC(sizeof(*glamoScreen)); + if ( glamoScreen == NULL ) + return NULL; + + glamoScreen->driScreen = sPriv; + + /* parse information in __driConfigOptions */ +// driParseOptionInfo(&glamoScreen->optionCache, +// __driConfigOptions, __driNConfigOptions); + + return glamoScreen; +} + + +static void glamoDestroyScreen(__DRIscreenPrivate *sPriv) +{ + glamoScreenPtr glamoScreen = (glamoScreenPtr)sPriv->private; + + if ( glamoScreen == NULL ) + return; + + FREE(glamoScreen); + sPriv->private = NULL; +} + + +static const __DRIconfig **glamoInitScreen(__DRIscreenPrivate *sPriv) +{ + __DRIconfig **configs; + uint8_t depth_bits_array[2]; + uint8_t stencil_bits_array[2]; + static const GLenum db_modes[] = { GLX_SWAP_COPY_OML, GLX_NONE }; + + /* Driver initialisation */ + if ( glamoInitDriver(sPriv) ) { + return NULL; + } + + /* Screen-specific initialisation */ + sPriv->private = glamoCreateScreen(sPriv); + if ( !sPriv->private ) { + glamoDestroyScreen(sPriv); + return NULL; + } + + depth_bits_array[0] = 0; + stencil_bits_array[0] = 0; + depth_bits_array[1] = 16; + stencil_bits_array[1] = 0; + + configs = driCreateConfigs(GL_RGB, GL_UNSIGNED_SHORT_5_6_5, + depth_bits_array, stencil_bits_array, 2, + db_modes, 2); + + if ( configs == NULL ) { + fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__, __LINE__); + return NULL; + } + + return (const __DRIconfig **)configs; +} + + +static GLboolean glamoCreateBuffer(__DRIscreen *driScrnPriv, + __DRIdrawable *driDrawPriv, + const __GLcontextModes *glVis, + GLboolean pixmapBuffer) +{ + struct gl_framebuffer *fb; + + if ( pixmapBuffer ) + return GL_FALSE; /* not implemented */ + + fb = _mesa_create_framebuffer(glVis); + + _mesa_add_soft_renderbuffers(fb, + GL_FALSE, /* color */ + GL_FALSE, /* depth */ + glVis->stencilBits > 0, + glVis->accumRedBits > 0, + GL_FALSE, /* alpha */ + GL_FALSE /* aux */); + driDrawPriv->driverPrivate = (void *)fb; + + return (driDrawPriv->driverPrivate != NULL); +} + + +static void glamoDestroyBuffer(__DRIdrawable *driDrawPriv) +{ +} + + +static void glamoSwapBuffers(__DRIdrawable *driDrawPriv) +{ +} + + +/* + * Mesa entry points + * + * See src/mesa/drivers/dri/common/dri_util.h for information about these + */ +const struct __DriverAPIRec driDriverAPI = { + .InitScreen = glamoInitScreen, + .DestroyScreen = glamoDestroyScreen, + .CreateContext = glamoCreateContext, + .DestroyContext = glamoDestroyContext, + .CreateBuffer = glamoCreateBuffer, + .DestroyBuffer = glamoDestroyBuffer, + .SwapBuffers = glamoSwapBuffers, + .MakeCurrent = glamoMakeCurrent, + .UnbindContext = glamoUnbindContext, + .GetSwapInfo = NULL, /* Not used */ + .WaitForMSC = NULL, + .WaitForSBC = NULL, + .SwapBuffersMSC = NULL, + .CopySubBuffer = NULL, + .GetDrawableMSC = NULL, /* Not used */ + .InitScreen2 = NULL /* For DRI2 */ +}; + +/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */ |