mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
use new interface for tdfx (phase 2)
This commit is contained in:
parent
cd630037a2
commit
2ac56c66d2
1 changed files with 123 additions and 0 deletions
|
|
@ -316,6 +316,129 @@ static const struct __DriverAPIRec tdfxAPI = {
|
|||
.SwapBuffersMSC = NULL
|
||||
};
|
||||
|
||||
#ifdef USE_NEW_INTERFACE
|
||||
/*
|
||||
* new interface code, derived from radeon_screen.c
|
||||
* XXX this may still be wrong
|
||||
*/
|
||||
static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
|
||||
|
||||
static __GLcontextModes *tdfxFillInModes(unsigned pixel_bits,
|
||||
unsigned depth_bits,
|
||||
unsigned stencil_bits,
|
||||
GLboolean have_back_buffer)
|
||||
{
|
||||
__GLcontextModes *modes;
|
||||
__GLcontextModes *m;
|
||||
unsigned num_modes;
|
||||
unsigned vis[2] = { GLX_TRUE_COLOR, GLX_DIRECT_COLOR };
|
||||
unsigned deep = (depth_bits > 17);
|
||||
unsigned i, db, depth, accum, stencil;
|
||||
|
||||
/* Right now GLX_SWAP_COPY_OML isn't supported, but it would be easy
|
||||
* enough to add support. Basically, if a context is created with an
|
||||
* fbconfig where the swap method is GLX_SWAP_COPY_OML, pageflipping
|
||||
* will never be used.
|
||||
*/
|
||||
|
||||
num_modes = (depth_bits == 16) ? 32 : 16;
|
||||
|
||||
modes = (*create_context_modes)(num_modes, sizeof(__GLcontextModes));
|
||||
m = modes;
|
||||
|
||||
for (i = 0; i <= 1; i++) {
|
||||
for (db = 0; db <= 1; db++) {
|
||||
for (depth = 0; depth <= 1; depth++) {
|
||||
for (accum = 0; accum <= 1; accum++) {
|
||||
for (stencil = 0; stencil <= !deep; stencil++) {
|
||||
if (deep) stencil = depth;
|
||||
m->redBits = deep ? 8 : 5;
|
||||
m->greenBits = deep ? 8 : 6;
|
||||
m->blueBits = deep ? 8 : 5;
|
||||
m->alphaBits = deep ? 8 : 0;
|
||||
m->redMask = deep ?0xFF000000 :0x0000F800;
|
||||
m->greenMask = deep ?0x00FF0000 :0x000007E0;
|
||||
m->blueMask = deep ?0x0000FF00 :0x0000001F;
|
||||
m->alphaMask = deep ? 0x000000FF : 0;
|
||||
m->rgbBits = m->redBits + m->greenBits +
|
||||
m->blueBits + m->alphaBits;
|
||||
m->accumRedBits = accum ? 16 : 0;
|
||||
m->accumGreenBits = accum ? 16 : 0;
|
||||
m->accumBlueBits = accum ? 16 : 0;
|
||||
m->accumAlphaBits = accum ? 16 : 0;
|
||||
m->stencilBits = stencil ? 8 : 0;
|
||||
m->depthBits = deep
|
||||
? (depth ? 24 : 0)
|
||||
: (depth ? 0 : depth_bits);
|
||||
m->visualType = i ? GLX_TRUE_COLOR
|
||||
: GLX_DIRECT_COLOR;
|
||||
m->renderType = GLX_RGBA_BIT;
|
||||
m->drawableType = GLX_WINDOW_BIT;
|
||||
m->rgbMode = GL_TRUE;
|
||||
m->doubleBufferMode = db ? GL_TRUE : GL_FALSE;
|
||||
if (db)
|
||||
m->swapMethod = GLX_SWAP_UNDEFINED_OML;
|
||||
m->visualRating = ((stencil && !deep) || accum)
|
||||
? GLX_SLOW_CONFIG
|
||||
: GLX_NONE;
|
||||
m = m->next;
|
||||
if (deep) stencil = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return modes;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the bootstrap function for the driver. libGL supplies all of the
|
||||
* requisite information about the system, and the driver initializes itself.
|
||||
* This routine also fills in the linked list pointed to by \c driver_modes
|
||||
* with the \c __GLcontextModes that the driver can support for windows or
|
||||
* pbuffers.
|
||||
*
|
||||
* \return A pointer to a \c __DRIscreenPrivate on success, or \c NULL on
|
||||
* failure.
|
||||
*/
|
||||
void * __driCreateNewScreen( Display *dpy, int scrn, __DRIscreen *psc,
|
||||
const __GLcontextModes * modes,
|
||||
const __DRIversion * ddx_version,
|
||||
const __DRIversion * dri_version,
|
||||
const __DRIversion * drm_version,
|
||||
const __DRIframebuffer * frame_buffer,
|
||||
drmAddress pSAREA, int fd,
|
||||
int internal_api_version,
|
||||
__GLcontextModes ** driver_modes )
|
||||
{
|
||||
__DRIscreenPrivate *psp;
|
||||
|
||||
psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
|
||||
ddx_version, dri_version, drm_version,
|
||||
frame_buffer, pSAREA, fd,
|
||||
internal_api_version, &tdfxAPI);
|
||||
|
||||
create_context_modes = (PFNGLXCREATECONTEXTMODES)
|
||||
glXGetProcAddress((const GLubyte *)"__glXCreateContextModes");
|
||||
|
||||
if (create_context_modes != NULL) {
|
||||
/* divined from tdfx_dri.c, sketchy */
|
||||
TDFXDRIPtr dri_priv = (TDFXDRIPtr) psp->pDevPriv;
|
||||
int bpp = (dri_priv->cpp > 2) ? 24 : 16;
|
||||
|
||||
/* XXX i wish it was like this */
|
||||
/* bpp = dri_priv->bpp */
|
||||
|
||||
*driver_modes = tdfxFillInModes(bpp, (bpp == 16) ? 16 : 24,
|
||||
(bpp == 16) ? 0 : 8,
|
||||
(dri_priv->backOffset!=dri_priv->depthOffset));
|
||||
}
|
||||
|
||||
return (void *)psp;
|
||||
}
|
||||
#endif /* USE_NEW_INTERFACE */
|
||||
|
||||
|
||||
/*
|
||||
* This is the bootstrap function for the driver.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue