Skip to content
  • Gert Wollny's avatar
    mesa: Reference count shaders that are used by transform feedback objects · caa964b4
    Gert Wollny authored and Gert Wollny's avatar Gert Wollny committed
    Transform feedback objects may hold a pointer to a shader program, and
    at least in Gallium, this must be a valid pointer until
    ctx->Driver.EndTransformFeedback in glEndTransformFeedback has been called
    - which is conform with the spec that any program that is part of a
    current rendering state should only be flagged for deletion by glDeleteProgram.
    This was not handled properly for the transform feedback objects so that
    a call sequence
    
      glUseProgram(x)
      glBeginTransformFreedback(...)
      glPauseTransformFeedback(...)
      glDeleteProgram(x)
      glEndTransformFeedback(...)
    
    would result in a use after free bug. With this patch the transform
    feedback object also updates the reference count to the used program
    thereby keeping the program valid as long as the transform feedback
    objects links to it.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108713
    Fixes: 65458769
    
    
           mesa: add end_transform_feedback() helper
    
    Signed-off-by: default avatarGert Wollny <gert.wollny@collabora.com>
    Reviewed-by: default avatarEmil Velikov <emil.velikov@collabora.com>
    caa964b4