summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuc Verhaegen <libv@skynet.be>2009-11-22 18:11:28 +0100
committerLuc Verhaegen <libv@skynet.be>2009-11-22 18:11:28 +0100
commit84c6d56d1ec6d8e42b08020c376ad08fdbe8c854 (patch)
tree70c2c83639d9d69dd4bae6902ea2c7c2c3c11baa
parentb7571ef081f90c4994b465349372371eff863cd5 (diff)
DRI: Fix build against debian Lenny's Mesa 7.0.3.
-rw-r--r--configure.ac74
-rw-r--r--dri/Makefile.am1
-rw-r--r--dri/via_context.c51
-rw-r--r--dri/via_context.h5
-rw-r--r--dri/via_ioctl.c48
-rw-r--r--dri/via_screen.c179
-rw-r--r--dri/via_screen.h2
-rw-r--r--dri/via_span.c1
-rw-r--r--dri/via_state.c18
9 files changed, 334 insertions, 45 deletions
diff --git a/configure.ac b/configure.ac
index 093d28c..37fdd64 100644
--- a/configure.ac
+++ b/configure.ac
@@ -395,8 +395,10 @@ fi
if test "x$build_dri_driver" = xyes; then
AC_CHECK_FILE([${mesa_build_dir}/src/mesa/drivers/dri/common/dri_metaops.c],
[mesa_have_dri_metaops=yes],)
- AM_CONDITIONAL(MESA_HAVE_DRI_METAOPS, test "x$mesa_have_dri_metaops" = xyes)
+fi
+AM_CONDITIONAL(MESA_HAVE_DRI_METAOPS, test "x$mesa_have_dri_metaops" = xyes)
+if test "x$build_dri_driver" = xyes; then
AC_EGREP_HEADER([msaa_samples], [${mesa_build_dir}/src/mesa/drivers/dri/common/utils.h],
[mesa_have_msaa=yes],)
if test "x$mesa_have_msaa" = xyes; then
@@ -404,14 +406,72 @@ if test "x$build_dri_driver" = xyes; then
fi
SAVED_CFLAGS="$CFLAGS"
- CFLAGS="-I${mesa_build_dir}/src/mesa/"
- AC_CHECK_MEMBER([struct gl_stencil_attrib._Enabled],
- [mesa_gl_stencil_attrib__enabled=yes], ,
- [#include "${mesa_build_dir}/src/mesa/main/mtypes.h"])
- CFLAGS="$SAVED_CFLAGS"
+
+ CFLAGS="-I${mesa_build_dir}/src/mesa/ $DRI_CFLAGS -I${mesa_build_dir}/include/"
+ AC_CHECK_MEMBER([struct __DRIextensionRec.name],
+ [mesa_dri_screen_extension="yes"], ,
+ [#include "GL/gl.h"
+ #include "GL/internal/dri_interface.h"])
+
+ if test "x$mesa_dri_screen_extension" = xyes; then
+ AC_DEFINE(MESA_DRI_SCREEN_EXTENSION, 1,
+ [Does MESA have the newer screen Extension API?])
+
+ # only run this test if the previous succeeded.
+ AC_CHECK_MEMBER([struct __DRImediaStreamCounterExtensionRec.getDrawableMSC],
+ [mesa_dri_reworked_vblank="yes"], ,
+ [#include "GL/gl.h"
+ #include "GL/internal/dri_interface.h"])
+ fi
+
+ if test "x$mesa_dri_reworked_vblank" = xyes; then
+ AC_DEFINE(MESA_DRI_REWORKED_VBLANK, 1,
+ [Was the DRI VBlank infrastructure reworked?])
+
+ # only run this test if the previous succeeded.
+ AC_CHECK_MEMBER([struct gl_framebuffer._ColorDrawBufferIndexes],
+ [mesa_gl_framebuffer_colordrawbufferindexes="yes"], ,
+ [#include "${mesa_build_dir}/src/mesa/main/mtypes.h"])
+ fi
+
+ if test "x$mesa_gl_framebuffer_colordrawbufferindexes" = xyes; then
+ AC_DEFINE(MESA_GL_FRAMEBUFFER_COLORDRAWBUFFERINDEXES, 1,
+ [Does the gl_framebuffer struct have the _ColorDrawBufferIndexes member.])
+
+ # only run this test if the previous succeeded.
+ AC_CHECK_MEMBER([struct __DRIsystemTimeExtensionRec.base],
+ [mesa_dri_screen_extension_loader="yes"], ,
+ [#include "GL/gl.h"
+ #include "GL/internal/dri_interface.h"])
+ fi
+
+ if test "x$mesa_dri_screen_extension_loader" = xyes; then
+ AC_DEFINE(MESA_DRI_SCREEN_EXTENSION_LOADER, 1,
+ [Is the new screen Extension used as a loader interface?])
+
+ # only run this test if the previous succeeded.
+ AC_CHECK_DECL([__DRI_LEGACY_VERSION],
+ [mesa_dri2_interface="yes"], ,
+ [#include "GL/gl.h"
+ #include "GL/internal/dri_interface.h"])
+ fi
+
+ if test "x$mesa_dri2_interface" = xyes; then
+ AC_DEFINE(MESA_DRI2_INTERFACE, 1,
+ [DRI interface get reworked in the run-up to dri2?])
+
+ # only run this test if the previous succeeded.
+ AC_CHECK_MEMBER([struct gl_stencil_attrib._Enabled],
+ [mesa_gl_stencil_attrib__enabled=yes], ,
+ [#include "${mesa_build_dir}/src/mesa/main/mtypes.h"])
+ fi
+
if test "x$mesa_gl_stencil_attrib__enabled" = xyes; then
- AC_DEFINE(MESA_GL_STENCIL_ATTRIB__ENABLED, 1, [Does struct gl_stencil_attrib have _Enabled])
+ AC_DEFINE(MESA_GL_STENCIL_ATTRIB__ENABLED, 1,
+ [Does struct gl_stencil_attrib have _Enabled])
fi
+
+ CFLAGS="$SAVED_CFLAGS"
fi
AC_SUBST([DRI_CFLAGS])
diff --git a/dri/Makefile.am b/dri/Makefile.am
index b40e242..dd0f568 100644
--- a/dri/Makefile.am
+++ b/dri/Makefile.am
@@ -11,6 +11,7 @@ AM_CFLAGS += -I@MESA_DIR@/src/mesa/main -I@MESA_DIR@/src/mesa/glapi
# convenience library
noinst_LTLIBRARIES = libdricommon.la
+libdricommon_la_CFLAGS = $(AM_CFLAGS) -I@MESA_DIR@/src/mesa/shader
libdricommon_la_SOURCES = \
$(MESA_DRI_DIR)/common/utils.c \
$(MESA_DRI_DIR)/common/texmem.c \
diff --git a/dri/via_context.c b/dri/via_context.c
index 2d301d4..63a804b 100644
--- a/dri/via_context.c
+++ b/dri/via_context.c
@@ -30,6 +30,8 @@
* \author Others at S3 Graphics?
*/
+#include "config.h"
+
#include "main/macros.h"
#include "main/context.h"
#include "main/framebuffer.h"
@@ -634,7 +636,7 @@ viaCreateContext(const __GLcontextModes *visual,
viaInitSpanFuncs(ctx);
viaInitIoctlFuncs(ctx);
viaInitState(ctx);
-
+
if (getenv("VIA_DEBUG"))
VIA_DEBUG = driParseDebugString( getenv( "VIA_DEBUG" ),
debug_control );
@@ -643,10 +645,20 @@ viaCreateContext(const __GLcontextModes *visual,
driQueryOptionb(&vmesa->optionCache, "no_rast"))
FALLBACK(vmesa, VIA_FALLBACK_USER_DISABLE, 1);
+#ifndef MESA_DRI_REWORKED_VBLANK
+ vmesa->vblank_flags =
+ vmesa->viaScreen->irqEnabled ?
+ driGetDefaultVBlankFlags(&vmesa->optionCache) : VBLANK_FLAG_NO_IRQ;
+#endif
+
if (getenv("VIA_PAGEFLIP"))
vmesa->allowPageFlip = 1;
+#ifdef MESA_DRI_SCREEN_EXTENSION_LOADER
(*sPriv->systemTime->getUST)( &vmesa->swap_ust );
+#else
+ (*dri_interface->getUST)( &vmesa->swap_ust );
+#endif
vmesa->regMMIOBase = (GLuint *)((unsigned long)viaScreen->reg);
@@ -722,22 +734,35 @@ void viaXMesaWindowMoved(struct via_context *vmesa)
draw_buffer = (struct via_renderbuffer *) drawable->driverPrivate;
read_buffer = (struct via_renderbuffer *) readable->driverPrivate;
-
- switch (vmesa->glCtx->DrawBuffer->_ColorDrawBufferIndexes[0]) {
- case BUFFER_BACK_LEFT:
+
+ switch (
+#ifdef MESA_GL_FRAMEBUFFER_COLORDRAWBUFFERINDEXES
+ vmesa->glCtx->DrawBuffer->_ColorDrawBufferIndexes[0]
+#else
+ vmesa->glCtx->DrawBuffer->_ColorDrawBufferMask[0]
+#endif
+ ) {
+#ifdef MESA_GL_FRAMEBUFFER_COLORDRAWBUFFERINDEXES
+ case BUFFER_BACK_LEFT:
+#else
+ case BUFFER_BIT_BACK_LEFT:
+#endif
if (drawable->numBackClipRects == 0) {
vmesa->numClipRects = drawable->numClipRects;
vmesa->pClipRects = drawable->pClipRects;
- }
- else {
+ } else {
vmesa->numClipRects = drawable->numBackClipRects;
vmesa->pClipRects = drawable->pBackClipRects;
}
break;
+#ifdef MESA_GL_FRAMEBUFFER_COLORDRAWBUFFERINDEXES
case BUFFER_FRONT_LEFT:
- vmesa->numClipRects = drawable->numClipRects;
- vmesa->pClipRects = drawable->pClipRects;
- break;
+#else
+ case BUFFER_BIT_FRONT_LEFT:
+#endif
+ vmesa->numClipRects = drawable->numClipRects;
+ vmesa->pClipRects = drawable->pClipRects;
+ break;
default:
vmesa->numClipRects = 0;
break;
@@ -820,8 +845,15 @@ viaMakeCurrent(__DRIcontextPrivate *driContextPriv,
drawBuffer = (GLframebuffer *)driDrawPriv->driverPrivate;
readBuffer = (GLframebuffer *)driReadPriv->driverPrivate;
+#ifndef MESA_DRI_REWORKED_VBLANK
+ if (vmesa->driDrawable != driDrawPriv)
+ driDrawableInitVBlank(driDrawPriv, vmesa->vblank_flags,
+ &vmesa->vbl_seq);
+#endif
+
if ((vmesa->driDrawable != driDrawPriv)
|| (vmesa->driReadable != driReadPriv)) {
+#ifdef MESA_DRI_REWORKED_VBLANK
if (driDrawPriv->swap_interval == (unsigned)-1) {
driDrawPriv->vblFlags =
vmesa->viaScreen->irqEnabled ?
@@ -830,6 +862,7 @@ viaMakeCurrent(__DRIcontextPrivate *driContextPriv,
driDrawableInitVBlank(driDrawPriv);
}
+#endif
vmesa->driDrawable = driDrawPriv;
vmesa->driReadable = driReadPriv;
diff --git a/dri/via_context.h b/dri/via_context.h
index b22d28f..63db99d 100644
--- a/dri/via_context.h
+++ b/dri/via_context.h
@@ -266,6 +266,11 @@ struct via_context {
/* Configuration cache */
driOptionCache optionCache;
+#ifndef MESA_DRI_REWORKED_VBLANK
+ GLuint vblank_flags;
+ GLuint vbl_seq;
+#endif
+
int64_t swap_ust;
int64_t swap_missed_ust;
diff --git a/dri/via_ioctl.c b/dri/via_ioctl.c
index 590288d..326b9a0 100644
--- a/dri/via_ioctl.c
+++ b/dri/via_ioctl.c
@@ -22,6 +22,8 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include "config.h"
+
#include <errno.h>
#include "swrast/swrast.h"
@@ -508,7 +510,9 @@ static void viaWaitIdleVBlank( __DRIdrawablePrivate *dPriv,
GLuint value )
{
GLboolean missed_target;
+#ifdef MESA_DRI_SCREEN_EXTENSION_LOADER
__DRIscreenPrivate *psp = dPriv->driScreenPriv;
+#endif
VIA_FLUSH_DMA(vmesa);
@@ -520,10 +524,21 @@ static void viaWaitIdleVBlank( __DRIdrawablePrivate *dPriv,
vmesa->thrashing)
viaSwapOutWork(vmesa);
- driWaitForVBlank( dPriv, & missed_target );
+#ifdef MESA_DRI_REWORKED_VBLANK
+ driWaitForVBlank(dPriv, &missed_target);
+#else
+ driWaitForVBlank(dPriv, &vmesa->vbl_seq, vmesa->vblank_flags,
+ &missed_target);
+#endif
+
if ( missed_target ) {
vmesa->swap_missed_count++;
+
+#ifdef MESA_DRI_SCREEN_EXTENSION_LOADER
(*psp->systemTime->getUST)( &vmesa->swap_missed_ust );
+#else
+ (*dri_interface->getUST)( &vmesa->swap_missed_ust );
+#endif
}
}
while (!viaCheckBreadcrumb(vmesa, value));
@@ -591,7 +606,9 @@ void viaCopyBuffer(__DRIdrawablePrivate *dPriv)
{
struct via_context *vmesa =
(struct via_context *)dPriv->driContextPriv->driverPrivate;
+#ifdef MESA_DRI_SCREEN_EXTENSION_LOADER
__DRIscreenPrivate *psp = dPriv->driScreenPriv;
+#endif
if (VIA_DEBUG & DEBUG_IOCTL)
fprintf(stderr,
@@ -604,8 +621,13 @@ void viaCopyBuffer(__DRIdrawablePrivate *dPriv)
VIA_FLUSH_DMA(vmesa);
- if (dPriv->vblFlags == VBLANK_FLAG_SYNC &&
- vmesa->lastBreadcrumbWrite > 1)
+ if (
+#ifdef MESA_DRI_REWORKED_VBLANK
+ (dPriv->vblFlags == VBLANK_FLAG_SYNC)
+#else
+ (vmesa->vblank_flags == VBLANK_FLAG_SYNC)
+#endif
+ && (vmesa->lastBreadcrumbWrite > 1))
viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastBreadcrumbWrite-1);
else
viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastSwap[1]);
@@ -627,7 +649,11 @@ void viaCopyBuffer(__DRIdrawablePrivate *dPriv)
viaEmitBreadcrumbLocked(vmesa);
UNLOCK_HARDWARE(vmesa);
+#ifdef MESA_DRI_SCREEN_EXTENSION_LOADER
(*psp->systemTime->getUST)( &vmesa->swap_ust );
+#else
+ (*dri_interface->getUST)( &vmesa->swap_ust );
+#endif
}
@@ -636,11 +662,18 @@ void viaPageFlip(__DRIdrawablePrivate *dPriv)
struct via_context *vmesa =
(struct via_context *)dPriv->driContextPriv->driverPrivate;
struct via_renderbuffer buffer_tmp;
+#ifdef MESA_DRI_SCREEN_EXTENSION_LOADER
__DRIscreenPrivate *psp = dPriv->driScreenPriv;
+#endif
VIA_FLUSH_DMA(vmesa);
- if (dPriv->vblFlags == VBLANK_FLAG_SYNC &&
- vmesa->lastBreadcrumbWrite > 1)
+ if (
+#ifdef MESA_DRI_REWORKED_VBLANK
+ (dPriv->vblFlags == VBLANK_FLAG_SYNC)
+#else
+ (vmesa->vblank_flags == VBLANK_FLAG_SYNC)
+#endif
+ && (vmesa->lastBreadcrumbWrite > 1))
viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastBreadcrumbWrite - 1);
else
viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastSwap[0]);
@@ -652,8 +685,11 @@ void viaPageFlip(__DRIdrawablePrivate *dPriv)
viaEmitBreadcrumbLocked(vmesa);
UNLOCK_HARDWARE(vmesa);
+#ifdef MESA_DRI_SCREEN_EXTENSION_LOADER
(*psp->systemTime->getUST)( &vmesa->swap_ust );
-
+#else
+ (*dri_interface->getUST)( &vmesa->swap_ust );
+#endif
/* KW: FIXME: When buffers are freed, could free frontbuffer by
* accident:
diff --git a/dri/via_screen.c b/dri/via_screen.c
index 843934e..b0a81bd 100644
--- a/dri/via_screen.c
+++ b/dri/via_screen.c
@@ -66,16 +66,15 @@ static drmBufMapPtr via_create_empty_buffers(void)
{
drmBufMapPtr retval;
- retval = (drmBufMapPtr)MALLOC(sizeof(drmBufMap));
- if (retval == NULL) return NULL;
- memset(retval, 0, sizeof(drmBufMap));
+ retval = (drmBufMapPtr)CALLOC(sizeof(drmBufMap));
+ if (!retval)
+ return NULL;
- retval->list = (drmBufPtr)MALLOC(sizeof(drmBuf) * VIA_DMA_BUF_NR);
- if (retval->list == NULL) {
+ retval->list = (drmBufPtr)CALLOC(sizeof(drmBuf) * VIA_DMA_BUF_NR);
+ if (!retval->list) {
FREE(retval);
return NULL;
}
- memset(retval->list, 0, sizeof(drmBuf) * VIA_DMA_BUF_NR);
return retval;
}
@@ -94,7 +93,6 @@ viaInitDriver(__DRIscreenPrivate *sPriv)
{
viaScreenPrivate *viaScreen;
VIADRIPtr gDRIPriv = (VIADRIPtr)sPriv->pDevPriv;
- int i;
if (sPriv->devPrivSize != sizeof(VIADRIRec)) {
fprintf(stderr,"\nERROR! sizeof(VIADRIRec) does not match passed size from device driver\n");
@@ -112,7 +110,6 @@ viaInitDriver(__DRIscreenPrivate *sPriv)
driParseOptionInfo (&viaScreen->optionCache,
__driConfigOptions, __driNConfigOptions);
-
sPriv->private = (void *)viaScreen;
viaScreen->width = gDRIPriv->width;
@@ -123,14 +120,15 @@ viaInitDriver(__DRIscreenPrivate *sPriv)
viaScreen->irqEnabled = gDRIPriv->irqEnabled;
if (VIA_DEBUG & DEBUG_DRI) {
- fprintf(stderr, "width = %08x\n", viaScreen->width);
- fprintf(stderr, "height = %08x\n", viaScreen->height);
+ fprintf(stderr, "width = %08x\n", viaScreen->width);
+ fprintf(stderr, "height = %08x\n", viaScreen->height);
}
viaScreen->bufs = via_create_empty_buffers();
if (viaScreen->bufs == NULL) {
__driUtilMessage("viaInitDriver: via_create_empty_buffers() failed");
FREE(viaScreen);
+ sPriv->private = NULL;
return GL_FALSE;
}
@@ -158,16 +156,37 @@ viaInitDriver(__DRIscreenPrivate *sPriv)
viaScreen->sareaPrivOffset = gDRIPriv->sarea_priv_offset;
- i = 0;
- viaScreen->extensions[i++] = &driFrameTrackingExtension.base;
- viaScreen->extensions[i++] = &driReadDrawableExtension;
- if (gDRIPriv->irqEnabled) {
- viaScreen->extensions[i++] = &driSwapControlExtension.base;
- viaScreen->extensions[i++] = &driMediaStreamCounterExtension.base;
- }
+ {
+#ifdef MESA_DRI_SCREEN_EXTENSION
+ int i = 0;
+
+ viaScreen->extensions[i++] = &driFrameTrackingExtension.base;
+ viaScreen->extensions[i++] = &driReadDrawableExtension;
+ if (gDRIPriv->irqEnabled) {
+ viaScreen->extensions[i++] = &driSwapControlExtension.base;
+ viaScreen->extensions[i++] = &driMediaStreamCounterExtension.base;
+ }
- viaScreen->extensions[i++] = NULL;
- sPriv->extensions = viaScreen->extensions;
+ viaScreen->extensions[i++] = NULL;
+ sPriv->extensions = viaScreen->extensions;
+#else
+ PFNGLXSCRENABLEEXTENSIONPROC glx_enable_extension =
+ (PFNGLXSCRENABLEEXTENSIONPROC)
+ (*dri_interface->getProcAddress("glxEnableExtension"));
+ void * const ScreenConfigs = sPriv->psc->screenConfigs;
+
+ if (glx_enable_extension) {
+ if ( viaScreen->irqEnabled ) {
+ (*glx_enable_extension)(ScreenConfigs, "GLX_SGI_swap_control");
+ (*glx_enable_extension)(ScreenConfigs, "GLX_SGI_video_sync");
+ (*glx_enable_extension)(ScreenConfigs, "GLX_MESA_swap_control");
+ }
+
+ (*glx_enable_extension)(ScreenConfigs, "GLX_SGI_make_current_read");
+ (*glx_enable_extension)(ScreenConfigs, "GLX_MESA_swap_frame_usage");
+ }
+#endif
+ }
return GL_TRUE;
}
@@ -308,11 +327,22 @@ viaDestroyBuffer(__DRIdrawablePrivate *driDrawPriv)
_mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
}
-static const __DRIconfig **
+static
+#ifdef MESA_DRI2_INTERFACE
+const __DRIconfig **
+#else
+__GLcontextModes *
+#endif
+
viaFillInModes( __DRIscreenPrivate *psp,
unsigned pixel_bits, GLboolean have_back_buffer )
{
+#ifdef MESA_DRI2_INTERFACE
__DRIconfig **configs;
+#else
+ __GLcontextModes *modes, *m;
+ unsigned num_modes;
+#endif
const unsigned back_buffer_factor = (have_back_buffer) ? 2 : 1;
GLenum fb_format;
GLenum fb_type;
@@ -345,6 +375,7 @@ viaFillInModes( __DRIscreenPrivate *psp,
fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
}
+#ifdef MESA_DRI2_INTERFACE
#ifdef MESA_HAVE_MSAA
configs = driCreateConfigs(fb_format, fb_type,
depth_bits_array, stencil_bits_array,
@@ -365,9 +396,37 @@ viaFillInModes( __DRIscreenPrivate *psp,
}
return (const __DRIconfig **) configs;
-}
+#else /* !MESA_DRI2_INTERFACE */
+ num_modes = depth_buffer_factor * back_buffer_factor * 4;
+
+#ifdef MESA_DRI_SCREEN_EXTENSION_LOADER
+ modes = (*psp->contextModes->createContextModes)(num_modes, sizeof(__GLcontextModes));
+#else
+ modes = (*dri_interface->createContextModes)( num_modes, sizeof( __GLcontextModes ) );
+#endif
+
+ m = modes;
+ if (!driFillInModes(&m, fb_format, fb_type, depth_bits_array, stencil_bits_array,
+ depth_buffer_factor, back_buffer_modes, back_buffer_factor,
+ GLX_TRUE_COLOR)) {
+ fprintf(stderr, "[%s:%u] Error creating FBConfig!\n",
+ __func__, __LINE__);
+ return NULL;
+ }
+ if (!driFillInModes(&m, fb_format, fb_type, depth_bits_array, stencil_bits_array,
+ depth_buffer_factor, back_buffer_modes, back_buffer_factor,
+ GLX_DIRECT_COLOR)) {
+ fprintf(stderr, "[%s:%u] Error creating FBConfig!\n",
+ __func__, __LINE__ );
+ return NULL;
+ }
+
+ return modes;
+#endif /* MESA_DRI2_INTERFACE */
+}
+#ifdef MESA_DRI_SCREEN_EXTENSION
/**
* This is the driver specific part of the createNewScreen entry point.
*
@@ -375,7 +434,12 @@ viaFillInModes( __DRIscreenPrivate *psp,
*
* \return the __GLcontextModes supported by this driver
*/
-static const __DRIconfig **
+static
+#ifdef MESA_DRI2_INTERFACE
+const __DRIconfig **
+#else
+__GLcontextModes *
+#endif
viaInitScreen(__DRIscreenPrivate *psp)
{
static const __DRIversion ddx_expected = { VIA_DRIDDX_VERSION_MAJOR,
@@ -412,7 +476,71 @@ viaInitScreen(__DRIscreenPrivate *psp)
return viaFillInModes( psp, dri_priv->bytesPerPixel * 8, GL_TRUE );
}
+#else
+/* defined below */
+const struct __DriverAPIRec driDriverAPI;
+
+/*
+ * 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.
+ */
+PUBLIC void *
+__driCreateNewScreen_20050727(__DRInativeDisplay *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,
+ const __DRIinterfaceMethods *interface,
+ __GLcontextModes **driver_modes )
+{
+ __DRIscreenPrivate *psp;
+ static const __DRIversion ddx_expected = {VIA_DRIDDX_VERSION_MAJOR,
+ VIA_DRIDDX_VERSION_MINOR,
+ VIA_DRIDDX_VERSION_PATCH };
+ static const __DRIversion dri_expected = { 4, 0, 0 };
+ static const __DRIversion drm_expected = { 2, 3, 0 };
+ static const char *driver_name = "Unichrome";
+
+ dri_interface = interface;
+
+ if (!driCheckDriDdxDrmVersions2(driver_name,
+ dri_version, &dri_expected,
+ ddx_version, &ddx_expected,
+ drm_version, &drm_expected))
+ return NULL;
+
+ psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
+ ddx_version, dri_version, drm_version,
+ frame_buffer, pSAREA, fd,
+ internal_api_version, &driDriverAPI);
+ if (psp) {
+ VIADRIPtr dri_priv = (VIADRIPtr) psp->pDevPriv;
+ *driver_modes = viaFillInModes(psp, dri_priv->bytesPerPixel * 8, GL_TRUE);
+
+ /* 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, card_extensions, GL_FALSE );
+ }
+ return (void *) psp;
+}
+#endif /* MESA_DRI_SCREENEXTENSION */
/**
* Get information about previous buffer swaps.
@@ -441,7 +569,12 @@ getSwapInfo( __DRIdrawablePrivate *dPriv, __DRIswapInfo * sInfo )
}
const struct __DriverAPIRec driDriverAPI = {
+#ifndef MESA_DRI_SCREEN_EXTENSION
+ .InitDriver = viaInitDriver,
+#endif
+#ifdef MESA_DRI2_INTERFACE
.InitScreen = viaInitScreen,
+#endif
.DestroyScreen = viaDestroyScreen,
.CreateContext = viaCreateContext,
.DestroyContext = viaDestroyContext,
@@ -451,7 +584,9 @@ const struct __DriverAPIRec driDriverAPI = {
.MakeCurrent = viaMakeCurrent,
.UnbindContext = viaUnbindContext,
.GetSwapInfo = getSwapInfo,
+#ifdef MESA_DRI_REWORKED_VBLANK
.GetDrawableMSC = driDrawableGetMSC32,
+#endif
.WaitForMSC = driWaitForMSC32,
.WaitForSBC = NULL,
.SwapBuffersMSC = NULL
diff --git a/dri/via_screen.h b/dri/via_screen.h
index 6d20521..7c31607 100644
--- a/dri/via_screen.h
+++ b/dri/via_screen.h
@@ -43,7 +43,9 @@ typedef struct viaScreenPrivate {
/* Configuration cache with default values for all contexts */
driOptionCache optionCache;
+#ifdef MESA_DRI_SCREEN_EXTENSION
const __DRIextension *extensions[5];
+#endif
} viaScreenPrivate;
diff --git a/dri/via_span.c b/dri/via_span.c
index 566190d..2b7efa7 100644
--- a/dri/via_span.c
+++ b/dri/via_span.c
@@ -103,6 +103,7 @@
/* 32 bit depthbuffer functions.
*/
+#undef VALUE_TYPE
#define VALUE_TYPE GLuint
#define WRITE_DEPTH(_x, _y, d) \
diff --git a/dri/via_state.c b/dri/via_state.c
index ca44dd1..65544b1 100644
--- a/dri/via_state.c
+++ b/dri/via_state.c
@@ -614,18 +614,34 @@ viaDrawBuffer(GLcontext *ctx, GLenum mode)
if (!ctx->DrawBuffer)
return;
+#ifdef MESA_GL_FRAMEBUFFER_COLORDRAWBUFFERINDEXES
if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_TRUE);
return;
}
+#endif
- switch (ctx->DrawBuffer->_ColorDrawBufferIndexes[0]) {
+ switch (
+#ifdef MESA_GL_FRAMEBUFFER_COLORDRAWBUFFERINDEXES
+ ctx->DrawBuffer->_ColorDrawBufferIndexes[0]
+#else
+ ctx->DrawBuffer->_ColorDrawBufferMask[0]
+#endif
+ ) {
+#ifdef MESA_GL_FRAMEBUFFER_COLORDRAWBUFFERINDEXES
case BUFFER_FRONT_LEFT:
+#else
+ case BUFFER_BIT_FRONT_LEFT:
+#endif
VIA_FLUSH_DMA(vmesa);
vmesa->drawBuffer = &vmesa->front;
FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_FALSE);
break;
+#ifdef MESA_GL_FRAMEBUFFER_COLORDRAWBUFFERINDEXES
case BUFFER_BACK_LEFT:
+#else
+ case BUFFER_BIT_BACK_LEFT:
+#endif
VIA_FLUSH_DMA(vmesa);
vmesa->drawBuffer = &vmesa->back;
FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_FALSE);