#include "main/hash.h"
#include "main/fbobject.h"
#include "main/mfeatures.h"
+#include "main/version.h"
+#include "swrast/s_renderbuffer.h"
#include "utils.h"
#include "xmlpool.h"
}
/* now add any/all software-based renderbuffers we may need */
- _mesa_add_soft_renderbuffers(fb,
- false, /* never sw color */
- false, /* never sw depth */
- false, /* never sw stencil */
- mesaVis->accumRedBits > 0,
- false, /* never sw alpha */
- false /* never sw aux */ );
+ _swrast_add_soft_renderbuffers(fb,
+ false, /* never sw color */
+ false, /* never sw depth */
+ false, /* never sw stencil */
+ mesaVis->accumRedBits > 0,
+ false, /* never sw alpha */
+ false /* never sw aux */ );
driDrawPriv->driverPrivate = fb;
return true;
intelCreateContext(gl_api api,
const struct gl_config * mesaVis,
__DRIcontext * driContextPriv,
+ unsigned major_version,
+ unsigned minor_version,
+ uint32_t flags,
+ unsigned *error,
void *sharedContextPrivate)
{
__DRIscreen *sPriv = driContextPriv->driScreenPriv;
struct intel_screen *intelScreen = sPriv->driverPrivate;
+ bool success;
#ifdef I915
if (IS_9XX(intelScreen->deviceID)) {
if (!IS_965(intelScreen->deviceID)) {
- return i915CreateContext(api, mesaVis, driContextPriv,
- sharedContextPrivate);
+ success = i915CreateContext(api, mesaVis, driContextPriv,
+ sharedContextPrivate);
}
} else {
intelScreen->no_vbo = true;
- return i830CreateContext(mesaVis, driContextPriv, sharedContextPrivate);
+ success = i830CreateContext(mesaVis, driContextPriv,
+ sharedContextPrivate);
}
#else
if (IS_965(intelScreen->deviceID))
- return brwCreateContext(api, mesaVis,
- driContextPriv, sharedContextPrivate);
+ success = brwCreateContext(api, mesaVis,
+ driContextPriv,
+ sharedContextPrivate);
#endif
- fprintf(stderr, "Unrecognized deviceID 0x%x\n", intelScreen->deviceID);
+
+ if (success) {
+ struct gl_context *ctx =
+ (struct gl_context *) driContextPriv->driverPrivate;
+
+ _mesa_compute_version(ctx);
+ if (ctx->VersionMajor > major_version
+ || (ctx->VersionMajor == major_version
+ && ctx->VersionMinor >= minor_version)) {
+ *error = __DRI_CTX_ERROR_BAD_VERSION;
+ return true;
+ }
+
+ intelDestroyContext(driContextPriv);
+ } else {
+ *error = __DRI_CTX_ERROR_NO_MEMORY;
+ fprintf(stderr, "Unrecognized deviceID 0x%x\n", intelScreen->deviceID);
+ }
+
return false;
}
intelScreen->deviceID = strtod(devid_override, NULL);
}
+ intelScreen->kernel_has_gen7_sol_reset =
+ intel_get_boolean(intelScreen->driScrnPriv,
+ I915_PARAM_HAS_GEN7_SOL_RESET);
+
if (IS_GEN7(intelScreen->deviceID)) {
intelScreen->gen = 7;
} else if (IS_GEN6(intelScreen->deviceID)) {
intelScreen->hw_has_separate_stencil = intelScreen->gen >= 6;
intelScreen->hw_must_use_separate_stencil = intelScreen->gen >= 7;
- intelScreen->hw_has_hiz = intelScreen->gen == 6; /* Not yet for gen7. */
+ intelScreen->hw_has_hiz = intelScreen->gen >= 6;
intelScreen->dri2_has_hiz = INTEL_DRI2_HAS_HIZ_UNKNOWN;
intel_override_hiz(intelScreen);