コード例 #1
0
ファイル: intel_screen.c プロジェクト: NatTuck/mesa
static void
set_max_gl_versions(struct intel_screen *screen)
{
   int gl_version_override = _mesa_get_gl_version_override();

   switch (screen->gen) {
   case 7:
      screen->max_gl_core_version = 31;
      screen->max_gl_compat_version = 30;
      screen->max_gl_es1_version = 11;
      screen->max_gl_es2_version = 30;
      break;
   case 6:
      screen->max_gl_core_version = 31;
      screen->max_gl_compat_version = 30;
      screen->max_gl_es1_version = 11;
      screen->max_gl_es2_version = 30;
      break;
   case 5:
   case 4:
      screen->max_gl_core_version = 0;
      screen->max_gl_compat_version = 21;
      screen->max_gl_es1_version = 11;
      screen->max_gl_es2_version = 20;
      break;
   default:
      assert(!"unrecognized intel_screen::gen");
      break;
   }

   if (gl_version_override >= 31) {
      screen->max_gl_core_version = MAX2(screen->max_gl_core_version,
                                         gl_version_override);
   } else {
      screen->max_gl_compat_version = MAX2(screen->max_gl_compat_version,
                                           gl_version_override);
   }

#ifndef FEATURE_ES1
   screen->max_gl_es1_version = 0;
#endif

#ifndef FEATURE_ES2
   screen->max_gl_es2_version = 0;
#endif
}
コード例 #2
0
ファイル: dri_util.c プロジェクト: haiku/mesa_legacy
/**
 * This is the first entrypoint in the driver called by the DRI driver loader
 * after dlopen()ing it.
 *
 * It's used to create global state for the driver across contexts on the same
 * Display.
 */
static __DRIscreen *
driCreateNewScreen2(int scrn, int fd,
                    const __DRIextension **extensions,
                    const __DRIextension **driver_extensions,
                    const __DRIconfig ***driver_configs, void *data)
{
    static const __DRIextension *emptyExtensionList[] = { NULL };
    __DRIscreen *psp;

    psp = calloc(1, sizeof(*psp));
    if (!psp)
	return NULL;

    /* By default, use the global driDriverAPI symbol (non-megadrivers). */
    psp->driver = globalDriverAPI;

    /* If the driver exposes its vtable through its extensions list
     * (megadrivers), use that instead.
     */
    if (driver_extensions) {
       for (int i = 0; driver_extensions[i]; i++) {
          if (strcmp(driver_extensions[i]->name, __DRI_DRIVER_VTABLE) == 0) {
             psp->driver =
                ((__DRIDriverVtableExtension *)driver_extensions[i])->vtable;
          }
       }
    }

    setupLoaderExtensions(psp, extensions);

#ifndef __NOT_HAVE_DRM_H
    if (fd != -1) {
       drmVersionPtr version = drmGetVersion(fd);
       if (version) {
          psp->drm_version.major = version->version_major;
          psp->drm_version.minor = version->version_minor;
          psp->drm_version.patch = version->version_patchlevel;
          drmFreeVersion(version);
       }
    }
#endif

    psp->loaderPrivate = data;

    psp->extensions = emptyExtensionList;
    psp->fd = fd;
    psp->myNum = scrn;

    *driver_configs = psp->driver->InitScreen(psp);
    if (*driver_configs == NULL) {
	free(psp);
	return NULL;
    }

    int gl_version_override = _mesa_get_gl_version_override();
    if (gl_version_override >= 31) {
       psp->max_gl_core_version = MAX2(psp->max_gl_core_version,
                                       gl_version_override);
    } else {
       psp->max_gl_compat_version = MAX2(psp->max_gl_compat_version,
                                         gl_version_override);
    }

    psp->api_mask = (1 << __DRI_API_OPENGL);
    if (psp->max_gl_core_version > 0)
       psp->api_mask |= (1 << __DRI_API_OPENGL_CORE);
    if (psp->max_gl_es1_version > 0)
       psp->api_mask |= (1 << __DRI_API_GLES);
    if (psp->max_gl_es2_version > 0)
       psp->api_mask |= (1 << __DRI_API_GLES2);
    if (psp->max_gl_es2_version >= 30)
       psp->api_mask |= (1 << __DRI_API_GLES3);

    driParseOptionInfo(&psp->optionInfo, __dri2ConfigOptions);
    driParseConfigFiles(&psp->optionCache, &psp->optionInfo, psp->myNum, "dri2");


    return psp;
}