[Mesa-dev] [PATCH] dri_util: Don't assume __DRIcontext->driverPrivate is a gl_context

Kristian Høgsberg krh at bitplanet.net
Mon Dec 9 14:53:42 PST 2013


On Mon, Dec 9, 2013 at 12:41 PM, Ian Romanick <idr at freedesktop.org> wrote:
> On 12/09/2013 10:53 AM, Ian Romanick wrote:
>> On 12/07/2013 10:02 PM, Kristian Høgsberg wrote:
>>> The driverPrivate pointer is opaque to the driver and we can't assume
>>> it's a struct gl_context in dri_util.c.  Instead provide a helper function
>>> to set the struct gl_context flags from the incoming DRI context flags.
>>>
>>> Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>
>>> Cc: "10.0" <mesa-stable at lists.freedesktop.org>
>>
>> Comparing with 95bd8a33, this seems like the obviously correct patch.
>
> Actually... the reason Eric originally made this refactor was so that
> all classic drivers would handle __DRI_CTX_FLAG_DEBUG.  It looks like
> all of those drivers no need to call driContextSetFlags from the right
> place.  Yeah?

That is correct.

Kristian

>> Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
>>
>>> ---
>>>  src/mesa/drivers/dri/common/dri_util.c  | 11 +++++++----
>>>  src/mesa/drivers/dri/common/dri_util.h  |  3 +++
>>>  src/mesa/drivers/dri/i965/brw_context.c |  2 ++
>>>  3 files changed, 12 insertions(+), 4 deletions(-)
>>>
>>> I'd suggest something like this... I haven't verified that it actually fixes
>>> the problem, I just wanted to illustrate what the fix would look like and
>>> ended up writing the full patch after all.
>>>
>>> Kristian
>>>
>>> diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
>>> index 0bce77e..9134a94 100644
>>> --- a/src/mesa/drivers/dri/common/dri_util.c
>>> +++ b/src/mesa/drivers/dri/common/dri_util.c
>>> @@ -438,16 +438,19 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
>>>          return NULL;
>>>      }
>>>
>>> -    struct gl_context *ctx = context->driverPrivate;
>>> +    *error = __DRI_CTX_ERROR_SUCCESS;
>>> +    return context;
>>> +}
>>> +
>>> +void
>>> +driContextSetFlags(struct gl_context *ctx, uint32_t flags)
>>> +{
>>>      if ((flags & __DRI_CTX_FLAG_FORWARD_COMPATIBLE) != 0)
>>>          ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
>>>      if ((flags & __DRI_CTX_FLAG_DEBUG) != 0) {
>>>          ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
>>>          ctx->Debug.DebugOutput = GL_TRUE;
>>>      }
>>> -
>>> -    *error = __DRI_CTX_ERROR_SUCCESS;
>>> -    return context;
>>>  }
>>>
>>>  static __DRIcontext *
>>> diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h
>>> index 79a8564..35f674e 100644
>>> --- a/src/mesa/drivers/dri/common/dri_util.h
>>> +++ b/src/mesa/drivers/dri/common/dri_util.h
>>> @@ -289,6 +289,9 @@ dri2InvalidateDrawable(__DRIdrawable *drawable);
>>>  extern void
>>>  driUpdateFramebufferSize(struct gl_context *ctx, const __DRIdrawable *dPriv);
>>>
>>> +extern void
>>> +driContextSetFlags(struct gl_context *ctx, uint32_t flags);
>>> +
>>>  extern const __DRIimageDriverExtension driImageDriverExtension;
>>>
>>>  #endif /* _DRI_UTIL_H_ */
>>> diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
>>> index 6de6759..46ae086 100644
>>> --- a/src/mesa/drivers/dri/i965/brw_context.c
>>> +++ b/src/mesa/drivers/dri/i965/brw_context.c
>>> @@ -631,6 +631,8 @@ brwCreateContext(gl_api api,
>>>        return false;
>>>     }
>>>
>>> +   driContextSetFlags(ctx, flags);
>>> +
>>>     /* Initialize the software rasterizer and helper modules.
>>>      *
>>>      * As of GL 3.1 core, the gen4+ driver doesn't need the swrast context for
>>>
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>


More information about the mesa-dev mailing list