Fixed bug with multiple contexts.

Added support for ARGB4444 and ARGB2554.
Added hardware accelerated Clear().
This commit is contained in:
Claudio Ciccani 2006-05-31 17:00:10 +00:00
parent 55ad3cc055
commit 9400550c16

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2004-2005 Claudio Ciccani <klan@users.sf.net>
* Copyright (C) 2004-2006 Claudio Ciccani <klan@users.sf.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@ -70,7 +70,7 @@ DIRECT_INTERFACE_IMPLEMENTATION( IDirectFBGL, Mesa )
typedef struct {
int ref; /* reference counter */
bool locked;
int locked;
IDirectFBSurface *surface;
DFBSurfacePixelFormat format;
@ -90,15 +90,15 @@ typedef struct {
} IDirectFBGL_data;
static bool dfb_mesa_setup_visual ( GLvisual *visual,
DFBSurfacePixelFormat format );
static bool dfb_mesa_create_context ( GLcontext *context,
GLframebuffer *framebuffer,
GLvisual *visual,
DFBSurfacePixelFormat format,
IDirectFBGL_data *data );
static void dfb_mesa_destroy_context( GLcontext *context,
GLframebuffer *framebuffer );
static bool directfbgl_init_visual ( GLvisual *visual,
DFBSurfacePixelFormat format );
static bool directfbgl_create_context ( GLcontext *context,
GLframebuffer *framebuffer,
GLvisual *visual,
DFBSurfacePixelFormat format,
IDirectFBGL_data *data );
static void directfbgl_destroy_context( GLcontext *context,
GLframebuffer *framebuffer );
static void
@ -106,7 +106,7 @@ IDirectFBGL_Destruct( IDirectFBGL *thiz )
{
IDirectFBGL_data *data = (IDirectFBGL_data*) thiz->priv;
dfb_mesa_destroy_context( &data->context, &data->framebuffer );
directfbgl_destroy_context( &data->context, &data->framebuffer );
data->surface->Release( data->surface );
@ -145,14 +145,14 @@ IDirectFBGL_Lock( IDirectFBGL *thiz )
DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
if (data->locked)
return DFB_LOCKED;
if (data->locked++)
return DFB_OK;
surface = data->surface;
surface->GetSize( surface, &width, &height );
err = surface->Lock( surface, DSLF_READ | DSLF_WRITE,
(void**) &data->video.start, &data->video.pitch );
(void*)&data->video.start, &data->video.pitch );
if (err != DFB_OK) {
D_ERROR( "DirectFBGL/Mesa: couldn't lock surface.\n" );
return err;
@ -160,6 +160,9 @@ IDirectFBGL_Lock( IDirectFBGL *thiz )
data->video.end = data->video.start + (height-1) * data->video.pitch;
data->render.Data = data->video.start;
_mesa_make_current( &data->context,
&data->framebuffer, &data->framebuffer );
if (data->width != width || data->height != height) {
data->width = width;
@ -167,8 +170,6 @@ IDirectFBGL_Lock( IDirectFBGL *thiz )
_mesa_ResizeBuffersMESA();
}
data->locked = true;
return DFB_OK;
}
@ -180,11 +181,10 @@ IDirectFBGL_Unlock( IDirectFBGL *thiz )
if (!data->locked)
return DFB_OK;
data->surface->Unlock( data->surface );
data->video.start = NULL;
data->video.end = NULL;
data->locked = false;
if (--data->locked == 0) {
_mesa_make_current( NULL, NULL, NULL );
data->surface->Unlock( data->surface );
}
return DFB_OK;
}
@ -193,13 +193,16 @@ static DFBResult
IDirectFBGL_GetAttributes( IDirectFBGL *thiz,
DFBGLAttributes *attributes )
{
GLvisual *visual;
DFBSurfaceCapabilities caps;
GLvisual *visual;
DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
if (!attributes)
return DFB_INVARG;
data->surface->GetCapabilities( data->surface, &caps );
visual = &data->visual;
attributes->buffer_size = visual->rgbBits ? : visual->indexBits;
@ -214,7 +217,7 @@ IDirectFBGL_GetAttributes( IDirectFBGL *thiz,
attributes->accum_green_size = visual->accumGreenBits;
attributes->accum_blue_size = visual->accumBlueBits;
attributes->accum_alpha_size = visual->accumAlphaBits;
attributes->double_buffer = (visual->doubleBufferMode != 0);
attributes->double_buffer = (caps & DSCAPS_FLIPPING) ? 1 : 0;
attributes->stereo = (visual->stereoMode != 0);
return DFB_OK;
@ -245,15 +248,15 @@ Construct( IDirectFBGL *thiz,
surface->GetSize( surface, &data->width, &data->height );
/* Configure visual. */
if (!dfb_mesa_setup_visual( &data->visual, data->format )) {
if (!directfbgl_init_visual( &data->visual, data->format )) {
D_ERROR( "DirectFBGL/Mesa: failed to initialize visual.\n" );
surface->Release( surface );
return DFB_UNSUPPORTED;
}
/* Create context. */
if (!dfb_mesa_create_context( &data->context, &data->framebuffer,
&data->visual, data->format, data )) {
if (!directfbgl_create_context( &data->context, &data->framebuffer,
&data->visual, data->format, data )) {
D_ERROR( "DirectFBGL/Mesa: failed to create context.\n" );
surface->Release( surface );
return DFB_UNSUPPORTED;
@ -270,23 +273,21 @@ Construct( IDirectFBGL *thiz,
}
/* internal functions */
/***************************** Driver functions ******************************/
static const GLubyte*
get_string( GLcontext *ctx, GLenum pname )
dfbGetString( GLcontext *ctx, GLenum pname )
{
switch (pname) {
case GL_VENDOR:
return "Claudio Ciccani";
case GL_VERSION:
return "1.0";
default:
return NULL;
}
}
static void
update_state( GLcontext *ctx, GLuint new_state )
dfbUpdateState( GLcontext *ctx, GLuint new_state )
{
_swrast_InvalidateState( ctx, new_state );
_swsetup_InvalidateState( ctx, new_state );
@ -295,7 +296,7 @@ update_state( GLcontext *ctx, GLuint new_state )
}
static void
get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
dfbGetBufferSize( GLframebuffer *buffer, GLuint *width, GLuint *height )
{
GLcontext *ctx = _mesa_get_current_context();
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
@ -305,42 +306,86 @@ get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
}
static void
set_viewport( GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h )
dfbSetViewport( GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h )
{
_mesa_ResizeBuffersMESA();
}
/* required but not used */
static void
set_buffer( GLcontext *ctx, GLframebuffer *buffer, GLuint bufferBit )
dfbClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
GLint x, GLint y, GLint width, GLint height )
{
return;
}
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
if (mask & BUFFER_BIT_FRONT_LEFT &&
ctx->Color.ColorMask[0] &&
ctx->Color.ColorMask[1] &&
ctx->Color.ColorMask[2] &&
ctx->Color.ColorMask[3])
{
__u8 a, r, g, b;
UNCLAMPED_FLOAT_TO_UBYTE( a, ctx->Color.ClearColor[ACOMP] );
UNCLAMPED_FLOAT_TO_UBYTE( r, ctx->Color.ClearColor[RCOMP] );
UNCLAMPED_FLOAT_TO_UBYTE( g, ctx->Color.ClearColor[GCOMP] );
UNCLAMPED_FLOAT_TO_UBYTE( b, ctx->Color.ClearColor[BCOMP] );
data->surface->Unlock( data->surface );
if (all) {
data->surface->SetClip( data->surface, NULL );
data->surface->Clear( data->surface, r, g, b, a );
}
else {
DFBRegion reg = { x1:x, y1:y, x2:x+width-1, y2:y+height-1 };
data->surface->SetClip( data->surface, &reg );
data->surface->Clear( data->surface, r, g, b, a );
data->surface->SetClip( data->surface, NULL );
}
data->surface->Lock( data->surface, DSLF_READ | DSLF_WRITE,
(void*)&data->video.start, &data->video.pitch );
mask &= ~BUFFER_BIT_FRONT_LEFT;
}
if (mask)
_swrast_Clear( ctx, mask, all, x, y, width, height );
}
/************************ RenderBuffer functions *****************************/
static void
delete_renderbuffer( struct gl_renderbuffer *render )
dfbDeleteRenderbuffer( struct gl_renderbuffer *render )
{
return;
}
static GLboolean
renderbuffer_storage( GLcontext *ctx, struct gl_renderbuffer *render,
GLenum internalFormat, GLuint width, GLuint height )
dfbRenderbufferStorage( GLcontext *ctx, struct gl_renderbuffer *render,
GLenum internalFormat, GLuint width, GLuint height )
{
return GL_TRUE;
}
/***************************** Span functions ********************************/
/* RGB332 */
#define NAME(PREFIX) PREFIX##_RGB332
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLubyte *P = data->video.end - (Y) * data->video.pitch + (X);
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL(P, X, Y, S) \
*P = ( (((S[RCOMP]) & 0xe0)) | (((S[GCOMP]) & 0xe0) >> 3) | ((S[BCOMP]) >> 6) )
*P = ( (((S[RCOMP]) & 0xe0) ) | \
(((S[GCOMP]) & 0xe0) >> 3) | \
(((S[BCOMP]) ) >> 6) )
#define FETCH_PIXEL(D, P) \
D[RCOMP] = ((*P & 0xe0) ); \
D[GCOMP] = ((*P & 0x1c) << 3); \
@ -349,16 +394,79 @@ renderbuffer_storage( GLcontext *ctx, struct gl_renderbuffer *render,
#include "swrast/s_spantemp.h"
/* ARGB1555 */
#define NAME(PREFIX) PREFIX##_ARGB1555
/* ARGB4444 */
#define NAME(PREFIX) PREFIX##_ARGB4444
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL_RGB(P, X, Y, S) \
*P = ( 0xf000 | \
(((S[RCOMP]) & 0xf0) << 4) | \
(((S[GCOMP]) & 0xf0) ) | \
(((S[BCOMP]) & 0xf0) >> 4) )
#define STORE_PIXEL(P, X, Y, S) \
*P = ( (((S[RCOMP]) & 0xf8) << 7) | (((S[GCOMP]) & 0xf8) << 2) | ((S[BCOMP]) >> 3) )
*P = ( (((S[ACOMP]) & 0xf0) << 8) | \
(((S[RCOMP]) & 0xf0) << 4) | \
(((S[GCOMP]) & 0xf0) ) | \
(((S[BCOMP]) & 0xf0) >> 4) )
#define FETCH_PIXEL(D, P) \
D[RCOMP] = ((*P & 0x0f00) >> 4); \
D[GCOMP] = ((*P & 0x00f0) ); \
D[BCOMP] = ((*P & 0x000f) << 4); \
D[ACOMP] = ((*P & 0xf000) >> 8)
#include "swrast/s_spantemp.h"
/* ARGB2554 */
#define NAME(PREFIX) PREFIX##_ARGB2554
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL_RGB(P, X, Y, S) \
*P = ( 0xc000 | \
(((S[RCOMP]) & 0xf8) << 6) | \
(((S[GCOMP]) & 0xf8) << 1) | \
(((S[BCOMP]) & 0xf0) >> 4) )
#define STORE_PIXEL(P, X, Y, S) \
*P = ( (((S[ACOMP]) & 0xc0) << 8) | \
(((S[RCOMP]) & 0xf8) << 6) | \
(((S[GCOMP]) & 0xf8) << 1) | \
(((S[BCOMP]) & 0xf0) >> 4) )
#define FETCH_PIXEL(D, P) \
D[RCOMP] = ((*P & 0x3e00) >> 9); \
D[GCOMP] = ((*P & 0x01f0) >> 4); \
D[BCOMP] = ((*P & 0x000f) << 4); \
D[ACOMP] = ((*P & 0xc000) >> 14)
#include "swrast/s_spantemp.h"
/* ARGB1555 */
#define NAME(PREFIX) PREFIX##_ARGB1555
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL_RGB(P, X, Y, S) \
*P = ( 0x8000 | \
(((S[RCOMP]) & 0xf8) << 7) | \
(((S[GCOMP]) & 0xf8) << 2) | \
(((S[BCOMP]) ) >> 3) )
#define STORE_PIXEL(P, X, Y, S) \
*P = ( (((S[ACOMP]) & 0x80) << 16) | \
(((S[RCOMP]) & 0xf8) << 7) | \
(((S[GCOMP]) & 0xf8) << 2) | \
(((S[BCOMP]) ) >> 3) )
#define FETCH_PIXEL(D, P) \
D[RCOMP] = ((*P & 0x7c00) >> 7); \
D[GCOMP] = ((*P & 0x03e0) >> 2); \
@ -370,13 +478,16 @@ renderbuffer_storage( GLcontext *ctx, struct gl_renderbuffer *render,
/* RGB16 */
#define NAME(PREFIX) PREFIX##_RGB16
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL(P, X, Y, S) \
*P = ( (((S[RCOMP]) & 0xf8) << 8) | (((S[GCOMP]) & 0xfc) << 3) | ((S[BCOMP]) >> 3) )
*P = ( (((S[RCOMP]) & 0xf8) << 8) | \
(((S[GCOMP]) & 0xfc) << 3) | \
(((S[BCOMP]) ) >> 3) )
#define FETCH_PIXEL(D, P) \
D[RCOMP] = ((*P & 0xf800) >> 8); \
D[GCOMP] = ((*P & 0x07e0) >> 3); \
@ -388,6 +499,7 @@ renderbuffer_storage( GLcontext *ctx, struct gl_renderbuffer *render,
/* RGB24 */
#define NAME(PREFIX) PREFIX##_RGB24
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
@ -403,13 +515,16 @@ renderbuffer_storage( GLcontext *ctx, struct gl_renderbuffer *render,
/* RGB32 */
#define NAME(PREFIX) PREFIX##_RGB32
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL(P, X, Y, S) \
*P = ( ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
*P = ( ((S[RCOMP]) << 16) | \
((S[GCOMP]) << 8) | \
((S[BCOMP]) ) )
#define FETCH_PIXEL(D, P) \
D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
D[GCOMP] = ((*P & 0x0000ff00) >> 8); \
@ -421,15 +536,22 @@ renderbuffer_storage( GLcontext *ctx, struct gl_renderbuffer *render,
/* ARGB */
#define NAME(PREFIX) PREFIX##_ARGB
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL_RGB(P, X, Y, S) \
*P = ( 0xff000000 | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
*P = ( 0xff000000 | \
((S[RCOMP]) << 16) | \
((S[GCOMP]) << 8) | \
((S[BCOMP]) ) )
#define STORE_PIXEL(P, X, Y, S) \
*P = ( ((S[ACOMP]) << 24) | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
*P = ( ((S[ACOMP]) << 24) | \
((S[RCOMP]) << 16) | \
((S[GCOMP]) << 8) | \
((S[BCOMP]) ) )
#define FETCH_PIXEL(D, P) \
D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
D[GCOMP] = ((*P & 0x0000ff00) >> 8); \
@ -441,27 +563,35 @@ renderbuffer_storage( GLcontext *ctx, struct gl_renderbuffer *render,
/* AiRGB */
#define NAME(PREFIX) PREFIX##_AiRGB
#define FORMAT GL_RGBA8
#define RB_TYPE GLubyte
#define SPAN_VARS \
IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL_RGB(P, X, Y, S) \
*P = ( ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
*P = ( ((S[RCOMP]) << 16) | \
((S[GCOMP]) << 8) | \
((S[BCOMP]) ) )
#define STORE_PIXEL(P, X, Y, S) \
*P = ( ((0xff - (S[ACOMP])) << 24) | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )
*P = ( (((S[ACOMP]) ^ 0xff) << 24) | \
(((S[RCOMP]) ) << 16) | \
(((S[GCOMP]) ) << 8) | \
(((S[BCOMP]) ) ) )
#define FETCH_PIXEL(D, P) \
D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
D[GCOMP] = ((*P & 0x0000ff00) >> 8); \
D[BCOMP] = ((*P & 0x000000ff) ); \
D[ACOMP] = (0xff - ((*P & 0xff000000) >> 24))
D[RCOMP] = ((*P & 0x00ff0000) >> 16); \
D[GCOMP] = ((*P & 0x0000ff00) >> 8); \
D[BCOMP] = ((*P & 0x000000ff) ); \
D[ACOMP] = (((*P & 0xff000000) >> 24) ^ 0xff)
#include "swrast/s_spantemp.h"
/*****************************************************************************/
static bool
dfb_mesa_setup_visual( GLvisual *visual,
DFBSurfacePixelFormat format )
directfbgl_init_visual( GLvisual *visual,
DFBSurfacePixelFormat format )
{
GLboolean rgbFlag = GL_TRUE;
GLboolean dbFlag = GL_FALSE;
@ -486,6 +616,18 @@ dfb_mesa_setup_visual( GLvisual *visual,
greenBits = 3;
blueBits = 2;
break;
case DSPF_ARGB4444:
redBits = 4;
greenBits = 4;
blueBits = 4;
alphaBits = 4;
break;
case DSPF_ARGB2554:
redBits = 5;
greenBits = 5;
blueBits = 4;
alphaBits = 2;
break;
case DSPF_ARGB1555:
redBits = 5;
greenBits = 5;
@ -531,22 +673,22 @@ dfb_mesa_setup_visual( GLvisual *visual,
}
static bool
dfb_mesa_create_context( GLcontext *context,
GLframebuffer *framebuffer,
GLvisual *visual,
DFBSurfacePixelFormat format,
IDirectFBGL_data *data )
directfbgl_create_context( GLcontext *context,
GLframebuffer *framebuffer,
GLvisual *visual,
DFBSurfacePixelFormat format,
IDirectFBGL_data *data )
{
struct dd_function_table functions;
struct swrast_device_driver *swdd;
struct dd_function_table functions;
_mesa_initialize_framebuffer( framebuffer, visual );
_mesa_init_driver_functions( &functions );
functions.GetString = get_string;
functions.UpdateState = update_state;
functions.GetBufferSize = get_buffer_size;
functions.Viewport = set_viewport;
functions.GetString = dfbGetString;
functions.UpdateState = dfbUpdateState;
functions.GetBufferSize = dfbGetBufferSize;
functions.Viewport = dfbSetViewport;
functions.Clear = dfbClear;
if (!_mesa_initialize_context( context, visual, NULL,
&functions, (void*) data )) {
@ -560,17 +702,14 @@ dfb_mesa_create_context( GLcontext *context,
_tnl_CreateContext( context );
_swsetup_CreateContext( context );
_swsetup_Wakeup( context );
swdd = _swrast_GetDeviceDriverReference( context );
swdd->SetBuffer = set_buffer;
_mesa_init_renderbuffer( &data->render, 0 );
data->render.InternalFormat = GL_RGBA;
data->render._BaseFormat = GL_RGBA;
data->render.DataType = GL_UNSIGNED_BYTE;
data->render.Data = data->video.start;
data->render.Delete = delete_renderbuffer;
data->render.AllocStorage = renderbuffer_storage;
data->render.Delete = dfbDeleteRenderbuffer;
data->render.AllocStorage = dfbRenderbufferStorage;
switch (format) {
case DSPF_RGB332:
@ -581,6 +720,22 @@ dfb_mesa_create_context( GLcontext *context,
data->render.PutValues = put_values_RGB332;
data->render.PutMonoValues = put_mono_values_RGB332;
break;
case DSPF_ARGB4444:
data->render.GetRow = get_row_ARGB4444;
data->render.GetValues = get_values_ARGB4444;
data->render.PutRow = put_row_ARGB4444;
data->render.PutMonoRow = put_mono_row_ARGB4444;
data->render.PutValues = put_values_ARGB4444;
data->render.PutMonoValues = put_mono_values_ARGB4444;
break;
case DSPF_ARGB2554:
data->render.GetRow = get_row_ARGB2554;
data->render.GetValues = get_values_ARGB2554;
data->render.PutRow = put_row_ARGB2554;
data->render.PutMonoRow = put_mono_row_ARGB2554;
data->render.PutValues = put_values_ARGB2554;
data->render.PutMonoValues = put_mono_values_ARGB2554;
break;
case DSPF_ARGB1555:
data->render.GetRow = get_row_ARGB1555;
data->render.GetValues = get_values_ARGB1555;
@ -647,17 +802,14 @@ dfb_mesa_create_context( GLcontext *context,
TNL_CONTEXT( context )->Driver.RunPipeline = _tnl_run_pipeline;
_mesa_enable_sw_extensions( context );
_mesa_make_current( context, framebuffer, framebuffer );
return true;
}
static void
dfb_mesa_destroy_context( GLcontext *context,
GLframebuffer *framebuffer )
directfbgl_destroy_context( GLcontext *context,
GLframebuffer *framebuffer )
{
_mesa_make_current( NULL, NULL, NULL );
_mesa_free_framebuffer_data( framebuffer );
_mesa_notifyDestroy( context );
_mesa_free_context_data( context );