On Sun, 17 Oct 2021 at 22:25, Zebediah Figura zfigura@codeweavers.com wrote:
The buffer might not be bound anymore at the d3d level but that doesn't mean it's not still bound in GL.
Given the amount of effort you put in figuring out why this was needed, I would have expected a somewhat more elaborate commit message, or a (preferably) a comment in the code itself. And in that regard, it wouldn't seem inappropriate to merge patch 5/5 with this one.
- if (context_gl->c.transform_feedback_active && resource->bind_count
&& resource->bind_flags & WINED3D_BIND_STREAM_OUTPUT)
- if (context_gl->c.transform_feedback_active && resource->bind_flags & WINED3D_BIND_STREAM_OUTPUT) { /* We have to make sure that transform feedback is not active * when deleting a potentially bound transform feedback buffer.
It seems a little unfortunate to (potentially) end transform feedback any time a WINED3D_BIND_STREAM_OUTPUT buffer is destroyed. Perhaps it's fine in practice, but it also seems to be the case that we can only get in this particular situation when STATE_STREAM_OUTPUT has been invalidated, in which case we'd end transform feedback later anyway. I.e., calling wined3d_context_gl_end_transform_feedback() here would effectively be free when STATE_STREAM_OUTPUT has been invalidated.