Merge branch 'dri2'
authorKristian Høgsberg <krh@redhat.com>
Fri, 12 Oct 2007 23:35:04 +0000 (19:35 -0400)
committerKristian Høgsberg <krh@redhat.com>
Fri, 12 Oct 2007 23:35:04 +0000 (19:35 -0400)
Conflicts:

src/mesa/drivers/dri/i915/intel_screen.c

1  2 
src/mesa/drivers/dri/i915/intel_screen.c

index 0934213c135bfa74da46954e4def347e3b8530c0,df616f43b93020815f7c86d1467045fc94476775..291441b36080382d1dc1863acd240c37a3e9ca95
@@@ -50,8 -50,6 +50,8 @@@
  #include "intel_regions.h"
  #include "intel_batchbuffer.h"
  
 +#include "intel_bufmgr_ttm.h"
 +
  PUBLIC const char __driConfigOptions[] =
     DRI_CONF_BEGIN DRI_CONF_SECTION_PERFORMANCE
     DRI_CONF_FTHROTTLE_MODE(DRI_CONF_FTHROTTLE_IRQS)
@@@ -219,7 -217,7 +219,7 @@@ intel_recreate_static_regions(intelScre
     /* The rotated region is only used for old DDXes that didn't handle rotation
  \    * on their own.
      */
-    if (intelScreen->driScrnPriv->ddxMinor < 8) {
+    if (intelScreen->driScrnPriv->ddx_version.minor < 8) {
        intelScreen->rotated_region =
         intel_recreate_static(intelScreen,
                               intelScreen->rotated_region,
@@@ -379,7 -377,7 +379,7 @@@ intelUpdateScreenFromSAREA(intelScreenP
     intelScreen->back.handle = sarea->back_handle;
     intelScreen->back.size = sarea->back_size;
  
-    if (intelScreen->driScrnPriv->ddxMinor >= 8) {
+    if (intelScreen->driScrnPriv->ddx_version.minor >= 8) {
        intelScreen->third.offset = sarea->third_offset;
        intelScreen->third.pitch = sarea->pitch * intelScreen->cpp;
        intelScreen->third.handle = sarea->third_handle;
     intelScreen->depth.handle = sarea->depth_handle;
     intelScreen->depth.size = sarea->depth_size;
  
-    if (intelScreen->driScrnPriv->ddxMinor >= 9) {
+    if (intelScreen->driScrnPriv->ddx_version.minor >= 9) {
        intelScreen->front.bo_handle = sarea->front_bo_handle;
        intelScreen->back.bo_handle = sarea->back_bo_handle;
        intelScreen->third.bo_handle = sarea->third_bo_handle;
        intelPrintSAREA(sarea);
  }
  
+ static const __DRIextension *intelExtensions[] = {
+     &driReadDrawableExtension,
+     &driCopySubBufferExtension.base,
+     &driSwapControlExtension.base,
+     &driFrameTrackingExtension.base,
+     &driMediaStreamCounterExtension.base,
+     NULL
+ };
  
- static GLboolean
intelInitDriver(__DRIscreenPrivate * sPriv)
static GLboolean intelInitDriver(__DRIscreenPrivate *sPriv)
  {
     intelScreenPrivate *intelScreen;
     I830DRIPtr gDRIPriv = (I830DRIPtr) sPriv->pDevPriv;
     drmI830Sarea *sarea;
  
-    PFNGLXSCRENABLEEXTENSIONPROC glx_enable_extension =
-       (PFNGLXSCRENABLEEXTENSIONPROC) (*dri_interface->
-                                       getProcAddress("glxEnableExtension"));
-    void *const psc = sPriv->psc->screenConfigs;
     if (sPriv->devPrivSize != sizeof(I830DRIRec)) {
        fprintf(stderr,
                "\nERROR!  sizeof(I830DRIRec) does not match passed size from device driver\n");
     if (0)
        intelPrintDRIInfo(intelScreen, sPriv, gDRIPriv);
  
-    intelScreen->drmMinor = sPriv->drmMinor;
+    intelScreen->drmMinor = sPriv->drm_version.minor;
  
     /* Determine if IRQs are active? */
     {
        }
     }
  
-    if (glx_enable_extension != NULL) {
-       (*glx_enable_extension) (psc, "GLX_SGI_swap_control");
-       (*glx_enable_extension) (psc, "GLX_SGI_video_sync");
-       (*glx_enable_extension) (psc, "GLX_MESA_swap_control");
-       (*glx_enable_extension) (psc, "GLX_MESA_swap_frame_usage");
-       (*glx_enable_extension) (psc, "GLX_SGI_make_current_read");
-    }
+    sPriv->extensions = intelExtensions;
  
     /* If we've got a new enough DDX that's initializing TTM and giving us
      * object handles for the shared buffers, use that.
      */
     intelScreen->ttm = GL_FALSE;
     if (getenv("INTEL_NO_TTM") == NULL &&
-        intelScreen->driScrnPriv->ddxMinor >= 9 &&
+        intelScreen->driScrnPriv->ddx_version.minor >= 9 &&
 +       intelScreen->drmMinor >= 11 &&
         intelScreen->front.bo_handle != -1) {
 -      intelScreen->bufmgr = dri_bufmgr_ttm_init(sPriv->fd,
 -                                              DRM_FENCE_TYPE_EXE,
 -                                              DRM_FENCE_TYPE_EXE |
 -                                              DRM_I915_FENCE_TYPE_RW);
 +      intelScreen->bufmgr = intel_bufmgr_ttm_init(sPriv->fd,
 +                                                DRM_FENCE_TYPE_EXE,
 +                                                DRM_FENCE_TYPE_EXE |
 +                                                DRM_I915_FENCE_TYPE_RW,
 +                                                BATCH_SZ);
        if (intelScreen->bufmgr != NULL)
         intelScreen->ttm = GL_TRUE;
     }
@@@ -776,7 -769,6 +773,6 @@@ intelCreateContext(const __GLcontextMod
  
  
  static const struct __DriverAPIRec intelAPI = {
-    .InitDriver = intelInitDriver,
     .DestroyScreen = intelDestroyScreen,
     .CreateContext = intelCreateContext,
     .DestroyContext = intelDestroyContext,
@@@ -881,65 -873,46 +877,46 @@@ intelFillInModes(unsigned pixel_bits, u
  
  
  /**
-  * 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.
+  * This is the driver specific part of the createNewScreen entry point.
   * 
-  * \return A pointer to a \c __DRIscreenPrivate on success, or \c NULL on 
-  *         failure.
+  * \todo maybe fold this into intelInitDriver
+  *
+  * \return the __GLcontextModes supported by this driver
   */
- 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)
+ PUBLIC __GLcontextModes *__driDriverInitScreen(__DRIscreenPrivate *psp)
  {
-    __DRIscreenPrivate *psp;
     static const __DRIversion ddx_expected = { 1, 5, 0 };
     static const __DRIversion dri_expected = { 4, 0, 0 };
     static const __DRIversion drm_expected = { 1, 5, 0 };
+    I830DRIPtr dri_priv = (I830DRIPtr) psp->pDevPriv;
  
-    dri_interface = interface;
+    psp->DriverAPI = intelAPI;
  
     if (!driCheckDriDdxDrmVersions2("i915",
-                                    dri_version, &dri_expected,
-                                    ddx_version, &ddx_expected,
-                                    drm_version, &drm_expected)) {
+                                    &psp->dri_version, &dri_expected,
+                                    &psp->ddx_version, &ddx_expected,
+                                    &psp->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, &intelAPI);
-    if (psp != NULL) {
-       I830DRIPtr dri_priv = (I830DRIPtr) psp->pDevPriv;
-       *driver_modes = intelFillInModes(dri_priv->cpp * 8,
-                                        (dri_priv->cpp == 2) ? 16 : 24,
-                                        (dri_priv->cpp == 2) ? 0 : 8, 1);
-       /* 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);
-    }
+    /* 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);
+    if (!intelInitDriver(psp))
+        return NULL;
  
-    return (void *) psp;
+    return intelFillInModes(dri_priv->cpp * 8,
+                          (dri_priv->cpp == 2) ? 16 : 24,
+                          (dri_priv->cpp == 2) ? 0  : 8, 1);
  }
  
  struct intel_context *intelScreenContext(intelScreenPrivate *intelScreen)