summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/glamo/glamo_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri/glamo/glamo_screen.c')
-rw-r--r--src/mesa/drivers/dri/glamo/glamo_screen.c170
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; */