X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglx%2Fdri3_glx.c;h=a0929316778b9cf51555053c1ec89533d5ff2cad;hb=37be01bff776c85d89cd33ec5fae2e179748e475;hp=298adc80ef162740912fa179595d634d99210a12;hpb=c2b515379bfc669660133bb2d25e50bb04ac0d66;p=mesa.git diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c index 298adc80ef1..a0929316778 100644 --- a/src/glx/dri3_glx.c +++ b/src/glx/dri3_glx.c @@ -147,7 +147,7 @@ glx_dri3_show_fps(struct loader_dri3_drawable *draw, uint64_t current_ust) /* DRI3+Present together uses microseconds for UST. */ if (priv->previous_ust + interval * 1000000 <= current_ust) { if (priv->previous_ust) { - fprintf(stderr, "libGL: FPS = %.1f\n", + fprintf(stderr, "libGL: FPS = %.2f\n", ((uint64_t) priv->frames * 1000000) / (double)(current_ust - priv->previous_ust)); } @@ -211,9 +211,9 @@ dri3_bind_context(struct glx_context *context, struct glx_context *old, return GLXBadContext; if (dri_draw) - (*psc->f->invalidate)(dri_draw); + psc->f->invalidate(dri_draw); if (dri_read && dri_read != dri_draw) - (*psc->f->invalidate)(dri_read); + psc->f->invalidate(dri_read); return Success; } @@ -259,6 +259,10 @@ dri3_create_context_attribs(struct glx_screen *base, &reset, &release, error)) goto error_exit; + if (!dri2_check_no_error(flags, shareList, major_ver, error)) { + goto error_exit; + } + /* Check the renderType value */ if (!validate_renderType_against_config(config_base, render_type)) goto error_exit; @@ -303,6 +307,9 @@ dri3_create_context_attribs(struct glx_screen *base, * GLX_CONTEXT_*_BIT values. */ ctx_attribs[num_ctx_attribs++] = flags; + + if (flags & __DRI_CTX_FLAG_NO_ERROR) + pcp->base.noError = GL_TRUE; } pcp->driContext = @@ -495,7 +502,7 @@ dri3_flush_front_buffer(__DRIdrawable *driDrawable, void *loaderPrivate) loader_dri3_flush(draw, __DRI2_FLUSH_DRAWABLE, __DRI2_THROTTLE_FLUSHFRONT); - (*psc->f->invalidate)(driDrawable); + psc->f->invalidate(driDrawable); loader_dri3_wait_gl(draw); } @@ -642,7 +649,6 @@ dri3_set_swap_interval(__GLXDRIdrawable *pdraw, int interval) break; } - priv->swap_interval = interval; loader_dri3_set_swap_interval(&priv->loader_drawable, interval); return 0; @@ -659,7 +665,7 @@ dri3_get_swap_interval(__GLXDRIdrawable *pdraw) struct dri3_drawable *priv = (struct dri3_drawable *) pdraw; - return priv->swap_interval; + return priv->loader_drawable.swap_interval; } static void @@ -676,7 +682,7 @@ dri3_bind_tex_image(Display * dpy, if (pdraw != NULL) { psc = (struct dri3_screen *) base->psc; - (*psc->f->invalidate)(pdraw->loader_drawable.dri_drawable); + psc->f->invalidate(pdraw->loader_drawable.dri_drawable); XSync(dpy, false); @@ -780,6 +786,10 @@ dri3_bind_extensions(struct dri3_screen *psc, struct glx_display * priv, __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_robustness"); + if (strcmp(extensions[i]->name, __DRI2_NO_ERROR) == 0) + __glXEnableDirectExtension(&psc->base, + "GLX_ARB_create_context_no_error"); + if (strcmp(extensions[i]->name, __DRI2_RENDERER_QUERY) == 0) { psc->rendererQuery = (__DRI2rendererQueryExtension *) extensions[i]; __glXEnableDirectExtension(&psc->base, "GLX_MESA_query_renderer"); @@ -989,7 +999,7 @@ dri3_create_screen(int screen, struct glx_display * priv) return &psc->base; handle_error: - CriticalErrorMessageF("failed to load driver: %s\n", driverName); + CriticalErrorMessageF("failed to load driver: %s\n", driverName ? driverName : "(null)"); if (configs) glx_config_destroy_list(configs); @@ -1095,8 +1105,6 @@ dri3_create_display(Display * dpy) pdp->base.destroyDisplay = dri3_destroy_display; pdp->base.createScreen = dri3_create_screen; - loader_set_logger(dri_message); - pdp->loader_extensions = loader_extensions; return &pdp->base;