summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/drm/radeon/radeon_screen.c
diff options
context:
space:
mode:
authorCorbin Simpson <MostAwesomeDude@gmail.com>2009-03-04 15:36:42 -0800
committerCorbin Simpson <MostAwesomeDude@gmail.com>2009-03-04 15:50:00 -0800
commit07ffb00d30c750f85047485dbf091c3196a2abbf (patch)
tree1df007cd115e88ec27cc3d2b3d7949d827195890 /src/gallium/winsys/drm/radeon/radeon_screen.c
parent04ae9c3fdd62831485b7384da62566a0b82b84af (diff)
radeon-gallium: DRI2 state tracker, part 3.
Properly setup the build process for adding in xorg and egl trackers, and finally put radeon_context and radeon_screen to bed.
Diffstat (limited to 'src/gallium/winsys/drm/radeon/radeon_screen.c')
-rw-r--r--src/gallium/winsys/drm/radeon/radeon_screen.c288
1 files changed, 0 insertions, 288 deletions
diff --git a/src/gallium/winsys/drm/radeon/radeon_screen.c b/src/gallium/winsys/drm/radeon/radeon_screen.c
deleted file mode 100644
index e31caff0bf..0000000000
--- a/src/gallium/winsys/drm/radeon/radeon_screen.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright © 2008 Jérôme Glisse
- * All Rights Reserved.
- *
- * 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, sub license, 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 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
- * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
- * AND/OR ITS SUPPLIERS 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.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- */
-/*
- * Authors:
- * Jérôme Glisse <glisse@freedesktop.org>
- */
-#include <stdio.h>
-#include "pipe/p_screen.h"
-#include "pipe/p_defines.h"
-#include "pipe/p_inlines.h"
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "state_tracker/st_public.h"
-#include "state_tracker/st_context.h"
-#include "utils.h"
-#include "xf86drm.h"
-#include "drm.h"
-#include "dri_util.h"
-#include "radeon_screen.h"
-#include "radeon_context.h"
-#include "radeon_buffer.h"
-#include "radeon_bo.h"
-#include "radeon_bo_gem.h"
-#include "radeon_drm.h"
-
-extern const struct dri_extension radeon_card_extensions[];
-
-static const __DRIextension *radeon_screen_extensions[] = {
- &driReadDrawableExtension,
- &driCopySubBufferExtension.base,
- &driSwapControlExtension.base,
- &driFrameTrackingExtension.base,
- &driMediaStreamCounterExtension.base,
- NULL
-};
-
-static __DRIconfig **radeon_fill_in_modes(unsigned pixel_bits,
- unsigned depth_bits,
- GLboolean have_back_buffer)
-{
- __DRIconfig **configs;
- unsigned depth_buffer_factor;
- unsigned back_buffer_factor;
- unsigned num_modes;
- GLenum fb_format;
- GLenum fb_type;
- uint8_t depth_bits_array[3];
- uint8_t stencil_bits_array[3];
- uint8_t msaa_samples_array[1];
- /* TODO: pageflipping ? */
- static const GLenum back_buffer_modes[] = {
- GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
- };
-
- stencil_bits_array[0] = 0;
- stencil_bits_array[1] = 0;
- if (depth_bits == 24) {
- stencil_bits_array[2] = 8;
- num_modes = 3;
- }
-
- depth_bits_array[0] = 0;
- depth_bits_array[1] = depth_bits;
- depth_bits_array[2] = depth_bits;
- depth_buffer_factor = (depth_bits == 24) ? 3 : 2;
-
- back_buffer_factor = (have_back_buffer) ? 3 : 1;
-
- msaa_samples_array[0] = 0;
-
- if (pixel_bits == 16) {
- fb_format = GL_RGB;
- fb_type = GL_UNSIGNED_SHORT_5_6_5;
- } else {
- fb_format = GL_BGRA;
- fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- configs = (__DRIconfig **)driCreateConfigs(fb_format,
- fb_type,
- depth_bits_array,
- stencil_bits_array,
- depth_buffer_factor,
- back_buffer_modes,
- back_buffer_factor,
- msaa_samples_array,
- 1);
- if (configs == NULL) {
- fprintf(stderr, "[%s:%u] Error creating FBConfig!\n",
- __FILE__, __LINE__);
- return NULL;
- }
- return configs;
-}
-
-static void radeon_screen_destroy(__DRIscreenPrivate *dri_screen)
-{
- struct radeon_screen *radeon_screen = (struct radeon_screen*)dri_screen->private;
-
- radeon_bo_manager_gem_dtor(radeon_screen->bom);
- dri_screen = NULL;
- free(radeon_screen);
-}
-
-static const __DRIconfig **radeon_screen_init(__DRIscreenPrivate *dri_screen)
-{
- struct radeon_screen *radeon_screen;
-
- /* Calling driInitExtensions here, with a NULL context pointer,
- * does not actually enable the extensions. It just makes sure
- * that all the dispatch offsets for all the extensions that
- * *might* be enables are known. This is needed because the
- * dispatch offsets need to be known when _mesa_context_create is
- * called, but we can't enable the extensions until we have a
- * context pointer.
- *
- * Hello chicken. Hello egg. How are you two today?
- */
- driInitExtensions(NULL, radeon_card_extensions, GL_FALSE);
-
- radeon_screen = calloc(1, sizeof(struct radeon_screen));
- if (radeon_screen == NULL) {
- fprintf(stderr, "\nERROR! Allocating private area failed\n");
- return NULL;
- }
- dri_screen->private = (void*)radeon_screen;
- dri_screen->extensions = radeon_screen_extensions;
- radeon_screen->dri_screen = dri_screen;
-
- radeon_screen->bom = radeon_bo_manager_gem_ctor(dri_screen->fd);
- if (radeon_screen->bom == NULL) {
- radeon_screen_destroy(dri_screen);
- return NULL;
- }
-
- return driConcatConfigs(radeon_fill_in_modes(16, 16, 1),
- radeon_fill_in_modes(32, 24, 1));
-}
-
-static boolean radeon_buffer_create(__DRIscreenPrivate *dri_screen,
- __DRIdrawablePrivate *dri_drawable,
- const __GLcontextModes *visual,
- boolean is_pixmap)
-{
- if (is_pixmap) {
- /* TODO: implement ? */
- return GL_FALSE;
- } else {
- enum pipe_format color_format, depth_format, stencil_format;
- struct radeon_framebuffer *radeon_fb;
-
- radeon_fb = calloc(1, sizeof(struct radeon_framebuffer));
- if (radeon_fb == NULL) {
- return GL_FALSE;
- }
-
- switch (visual->redBits) {
- case 5:
- color_format = PIPE_FORMAT_R5G6B5_UNORM;
- break;
- default:
- color_format = PIPE_FORMAT_A8R8G8B8_UNORM;
- break;
- }
-
- switch (visual->depthBits) {
- case 24:
- depth_format = PIPE_FORMAT_S8Z24_UNORM;
- break;
- case 16:
- depth_format = PIPE_FORMAT_Z16_UNORM;
- break;
- default:
- depth_format = PIPE_FORMAT_NONE;
- break;
- }
-
- switch (visual->stencilBits) {
- case 8:
- /* force depth format */
- depth_format = PIPE_FORMAT_S8Z24_UNORM;
- stencil_format = PIPE_FORMAT_S8Z24_UNORM;
- break;
- default:
- stencil_format = PIPE_FORMAT_NONE;
- break;
- }
-
- radeon_fb->st_framebuffer = st_create_framebuffer(visual,
- color_format,
- depth_format,
- stencil_format,
- dri_drawable->w,
- dri_drawable->h,
- (void*)radeon_fb);
- if (radeon_fb->st_framebuffer == NULL) {
- free(radeon_fb);
- return GL_FALSE;
- }
- dri_drawable->driverPrivate = (void *) radeon_fb;
-
- radeon_fb->attachments = (1 << __DRI_BUFFER_FRONT_LEFT);
- if (visual->doubleBufferMode) {
- radeon_fb->attachments |= (1 << __DRI_BUFFER_BACK_LEFT);
- }
- if (visual->depthBits || visual->stencilBits) {
- radeon_fb->attachments |= (1 << __DRI_BUFFER_DEPTH);
- }
-
- return GL_TRUE;
- }
-}
-
-static void radeon_buffer_destroy(__DRIdrawablePrivate * dri_drawable)
-{
- struct radeon_framebuffer *radeon_fb;
-
- radeon_fb = dri_drawable->driverPrivate;
- assert(radeon_fb->st_framebuffer);
- st_unreference_framebuffer(radeon_fb->st_framebuffer);
- free(radeon_fb);
-}
-
-static void radeon_swap_buffers(__DRIdrawablePrivate *dri_drawable)
-{
- struct radeon_framebuffer *radeon_fb;
- struct pipe_surface *back_surf = NULL;
-
- radeon_fb = dri_drawable->driverPrivate;
- assert(radeon_fb);
- assert(radeon_fb->st_framebuffer);
-
- st_get_framebuffer_surface(radeon_fb->st_framebuffer,
- ST_SURFACE_BACK_LEFT,
- &back_surf);
- if (back_surf) {
- st_notify_swapbuffers(radeon_fb->st_framebuffer);
- /* TODO: do we want to do anythings ? */
- st_notify_swapbuffers_complete(radeon_fb->st_framebuffer);
- }
-}
-
-/**
- * Called via glXCopySubBufferMESA() to copy a subrect of the back
- * buffer to the front buffer/screen.
- */
-static void radeon_copy_sub_buffer(__DRIdrawablePrivate *dri_drawable,
- int x, int y, int w, int h)
-{
- /* TODO: ... */
-}
-
-const struct __DriverAPIRec driDriverAPI = {
- .InitScreen = NULL,
- .DestroyScreen = radeon_screen_destroy,
- .CreateContext = radeon_context_create,
- .DestroyContext = radeon_context_destroy,
- .CreateBuffer = radeon_buffer_create,
- .DestroyBuffer = radeon_buffer_destroy,
- .SwapBuffers = radeon_swap_buffers,
- .MakeCurrent = radeon_context_bind,
- .UnbindContext = radeon_context_unbind,
- .CopySubBuffer = radeon_copy_sub_buffer,
- .InitScreen2 = radeon_screen_init,
-};