[Mesa-dev] [shader-db PATCH 1/5] run: create debug contexts
Ian Romanick
idr at freedesktop.org
Mon Jan 4 18:42:24 PST 2016
On 12/31/2015 09:36 AM, Matt Turner wrote:
> On Thu, Dec 31, 2015 at 12:25 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>> On Thu, Dec 31, 2015 at 12:17 PM, Matt Turner <mattst88 at gmail.com> wrote:
>>> On Thu, Dec 31, 2015 at 9:45 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>>>> On Dec 31, 2015 9:32 AM, "Matt Turner" <mattst88 at gmail.com> wrote:
>>>>>
>>>>> On Wed, Dec 30, 2015 at 9:32 PM, Nicolai Hähnle <nhaehnle at gmail.com>
>>>>> wrote:
>>>>>> For Gallium-based drivers, this is required for receiving shader
>>>>>> information
>>>>>> via debug messages.
>>>>>> ---
>>>>>
>>>>> But that's a Gallium bug, right?
>>>>>
>>>>> Ilia sent a similar patch, and in the discussion I think we decided
>>>>> that what run.c is doing is perfectly fine.
>>>>
>>>> It's not a bug at all. Behavioural difference from i965 though. I was happy
>>>> to let the matter drop as I was the sole user of it. Sounds like there are
>>>> going to be more now, so this has to be addressed one way or the other.
>>>
>>> Could you summarize what that difference is?
>>
>> Sure. i965 always generates messages to be sent to KHR_debug
>> (potentially restricted by some env vars as well). st/mesa only passes
>> the callback info through for GL debug contexts. The drivers, in turn,
>> can use the presence/absence of the callback as an indicator as to
>> whether to perform extra work. Mildly relatedly, currently GL context
>> flags are not made available in pipe contexts.
>
> Okay, I checked the spec again:
>
> Debug output functionality is controlled with the DEBUG_OUTPUT enable
> state. If the context is created with the CONTEXT_FLAG_DEBUG_BIT set then
> the initial state of DEBUG_OUTPUT is TRUE, otherwise the initial state of
> DEBUG_OUTPUT is FALSE. In a debug context, if DEBUG_OUTPUT is disabled the
> GL will not generate any debug output logs or callbacks. Enabling
> DEBUG_OUTPUT again will enable full debug output functionality. If the
> context was created without the CONTEXT_FLAG_DEBUG_BIT and the
> DEBUG_OUTPUT is later enabled, the level of debug output logging is
> defined by the GL implementation, which may have zero debug output. To
> guarantee the full debug output support of the GL implementation the
> context should be created with CONTEXT_FLAG_DEBUG_BIT context flag bit
> set.
>
> I was somewhat surprised to see that it is implementation-defined
> whether *any* debugging information gets out if a debug context is not
> created.
>
> I'd rather that the "implementation" be "Mesa" and not "i965" or "Gallium".
>
> Ian, Timothy, others: Are other people okay with changing core-Mesa to
> not emit any debug messages if not in a debug context?
>
> This would mean that, even if the program has called
> glEnable(GL_DEBUG_OUTPUT), if not in a debug context there are no
> debug messages. This is apparently the route Gallium is taking.
Are there no messages, or are there just no messages of certain types?
Does _mesa_error still generate a message? Unless there's a compelling
performance case somewhere, I see much benefit in not generating the
same (or nearly same) messages always. It sure makes it easier to debug
application problems. :)
More information about the mesa-dev
mailing list