[PATCH] wined3d: Unbind the FBOs before glDispatchCompute

Henri Verbeet hverbeet at gmail.com
Fri Dec 1 06:49:59 CST 2017


On 25 November 2017 at 20:58, Fabian Maurer <dark.shadow4 at web.de> wrote:
> @@ -858,6 +858,10 @@ void dispatch_compute(struct wined3d_device *device, const struct wined3d_state
>          return;
>      }
>
> +    /* Unbind the FBOs to avoid have undefined behavior when reading data from it */
> +    GL_EXTCALL(glBindFramebuffer(GL_READ_FRAMEBUFFER, 0));
> +    GL_EXTCALL(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0));
> +
>      if (parameters->indirect)
>      {
>          const struct wined3d_indirect_dispatch_parameters *indirect = &parameters->u.indirect;
> @@ -875,6 +879,10 @@ void dispatch_compute(struct wined3d_device *device, const struct wined3d_state
>      }
>      checkGLcall("dispatch compute");
>
> +    /* Now rebind the FBOs to restore the original state */
> +    GL_EXTCALL(glBindFramebuffer(GL_READ_FRAMEBUFFER, context->fbo_read_binding));
> +    GL_EXTCALL(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, context->fbo_draw_binding));
> +
>      GL_EXTCALL(glMemoryBarrier(GL_ALL_BARRIER_BITS));
>      checkGLcall("glMemoryBarrier");
>
I think I'd feel better about this if context_apply_compute_state()
did a context_bind_fbo() followed by a context_invalidate_state()
instead.



More information about the wine-devel mailing list