intel: Implement EGL_KHR_surfaceless extension
This commit is contained in:
@@ -418,7 +418,7 @@ intel_prepare_render(struct intel_context *intel)
|
|||||||
__DRIdrawable *drawable;
|
__DRIdrawable *drawable;
|
||||||
|
|
||||||
drawable = driContext->driDrawablePriv;
|
drawable = driContext->driDrawablePriv;
|
||||||
if (drawable->dri2.stamp != driContext->dri2.draw_stamp) {
|
if (drawable && drawable->dri2.stamp != driContext->dri2.draw_stamp) {
|
||||||
if (drawable->lastStamp != drawable->dri2.stamp)
|
if (drawable->lastStamp != drawable->dri2.stamp)
|
||||||
intel_update_renderbuffers(driContext, drawable);
|
intel_update_renderbuffers(driContext, drawable);
|
||||||
intel_draw_buffer(&intel->ctx, intel->ctx.DrawBuffer);
|
intel_draw_buffer(&intel->ctx, intel->ctx.DrawBuffer);
|
||||||
@@ -426,7 +426,7 @@ intel_prepare_render(struct intel_context *intel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
drawable = driContext->driReadablePriv;
|
drawable = driContext->driReadablePriv;
|
||||||
if (drawable->dri2.stamp != driContext->dri2.read_stamp) {
|
if (drawable && drawable->dri2.stamp != driContext->dri2.read_stamp) {
|
||||||
if (drawable->lastStamp != drawable->dri2.stamp)
|
if (drawable->lastStamp != drawable->dri2.stamp)
|
||||||
intel_update_renderbuffers(driContext, drawable);
|
intel_update_renderbuffers(driContext, drawable);
|
||||||
driContext->dri2.read_stamp = drawable->dri2.stamp;
|
driContext->dri2.read_stamp = drawable->dri2.stamp;
|
||||||
@@ -611,6 +611,7 @@ intelInitContext(struct intel_context *intel,
|
|||||||
__DRIscreen *sPriv = driContextPriv->driScreenPriv;
|
__DRIscreen *sPriv = driContextPriv->driScreenPriv;
|
||||||
struct intel_screen *intelScreen = sPriv->private;
|
struct intel_screen *intelScreen = sPriv->private;
|
||||||
int bo_reuse_mode;
|
int bo_reuse_mode;
|
||||||
|
__GLcontextModes visual;
|
||||||
|
|
||||||
/* we can't do anything without a connection to the device */
|
/* we can't do anything without a connection to the device */
|
||||||
if (intelScreen->bufmgr == NULL)
|
if (intelScreen->bufmgr == NULL)
|
||||||
@@ -622,6 +623,11 @@ intelInitContext(struct intel_context *intel,
|
|||||||
functions->Viewport = intel_viewport;
|
functions->Viewport = intel_viewport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mesaVis == NULL) {
|
||||||
|
memset(&visual, 0, sizeof visual);
|
||||||
|
mesaVis = &visual;
|
||||||
|
}
|
||||||
|
|
||||||
if (!_mesa_initialize_context_for_api(&intel->ctx, api, mesaVis, shareCtx,
|
if (!_mesa_initialize_context_for_api(&intel->ctx, api, mesaVis, shareCtx,
|
||||||
functions, (void *) intel)) {
|
functions, (void *) intel)) {
|
||||||
printf("%s: failed to init mesa context\n", __FUNCTION__);
|
printf("%s: failed to init mesa context\n", __FUNCTION__);
|
||||||
@@ -888,11 +894,18 @@ intelMakeCurrent(__DRIcontext * driContextPriv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (driContextPriv) {
|
if (driContextPriv) {
|
||||||
struct gl_framebuffer *fb = driDrawPriv->driverPrivate;
|
struct gl_framebuffer *fb, *readFb;
|
||||||
struct gl_framebuffer *readFb = driReadPriv->driverPrivate;
|
|
||||||
|
|
||||||
|
if (driDrawPriv == NULL && driReadPriv == NULL) {
|
||||||
|
fb = _mesa_get_incomplete_framebuffer();
|
||||||
|
readFb = _mesa_get_incomplete_framebuffer();
|
||||||
|
} else {
|
||||||
|
fb = driDrawPriv->driverPrivate;
|
||||||
|
readFb = driReadPriv->driverPrivate;
|
||||||
driContextPriv->dri2.draw_stamp = driDrawPriv->dri2.stamp - 1;
|
driContextPriv->dri2.draw_stamp = driDrawPriv->dri2.stamp - 1;
|
||||||
driContextPriv->dri2.read_stamp = driReadPriv->dri2.stamp - 1;
|
driContextPriv->dri2.read_stamp = driReadPriv->dri2.stamp - 1;
|
||||||
|
}
|
||||||
|
|
||||||
intel_prepare_render(intel);
|
intel_prepare_render(intel);
|
||||||
_mesa_make_current(&intel->ctx, fb, readFb);
|
_mesa_make_current(&intel->ctx, fb, readFb);
|
||||||
|
|
||||||
|
@@ -97,6 +97,11 @@ _mesa_init_fbobjects(GLcontext *ctx)
|
|||||||
DummyRenderbuffer.Delete = delete_dummy_renderbuffer;
|
DummyRenderbuffer.Delete = delete_dummy_renderbuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct gl_framebuffer *
|
||||||
|
_mesa_get_incomplete_framebuffer(void)
|
||||||
|
{
|
||||||
|
return &DummyFramebuffer;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper routine for getting a gl_renderbuffer.
|
* Helper routine for getting a gl_renderbuffer.
|
||||||
|
@@ -30,6 +30,9 @@
|
|||||||
extern void
|
extern void
|
||||||
_mesa_init_fbobjects(GLcontext *ctx);
|
_mesa_init_fbobjects(GLcontext *ctx);
|
||||||
|
|
||||||
|
extern struct gl_framebuffer *
|
||||||
|
_mesa_get_incomplete_framebuffer(void);
|
||||||
|
|
||||||
extern struct gl_renderbuffer *
|
extern struct gl_renderbuffer *
|
||||||
_mesa_lookup_renderbuffer(GLcontext *ctx, GLuint id);
|
_mesa_lookup_renderbuffer(GLcontext *ctx, GLuint id);
|
||||||
|
|
||||||
|
@@ -75,7 +75,6 @@ compute_depth_max(struct gl_framebuffer *fb)
|
|||||||
fb->_MRD = (GLfloat)1.0 / fb->_DepthMaxF;
|
fb->_MRD = (GLfloat)1.0 / fb->_DepthMaxF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and initialize a gl_framebuffer object.
|
* Create and initialize a gl_framebuffer object.
|
||||||
* This is intended for creating _window_system_ framebuffers, not generic
|
* This is intended for creating _window_system_ framebuffers, not generic
|
||||||
|
Reference in New Issue
Block a user