[Mesa-stable] [Mesa-dev] [PATCH 3/4] nine: handle D3DISSUE_END without previous D3DISSUE_BEGIN
Ilia Mirkin
imirkin at alum.mit.edu
Fri Nov 21 22:36:29 PST 2014
On Sat, Nov 22, 2014 at 1:28 AM, John Ettedgui <john.ettedgui at gmail.com> wrote:
> On Fri Nov 21 2014 at 10:14:19 PM Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>>
>> Oh, I think i see the problem.
>>
>> In GetData:
>>
>> user_assert(This->state != NINE_QUERY_STATE_RUNNING,
>> D3DERR_INVALIDCALL);
>>
>> should be
>>
>> user_assert(This->state != ... || This->state |= FRESH,
>> D3DERR_INVALIDCALL)
>>
>> This will allow someone to call GetData without first having done an
>> Issue() but... meh.
>
> Not saying your idea is wrong but Issue was called before GetData in my
> case.
> It was just called on D3DISSUE_END, with no call on D3DISSUE_BEGIN.
Right, I figured as much. My point is that doing what I'm proposing
there would allow such usage even though it is illegal based on the
API description.
>>
>> You could alternatively rejigger the state
>> variables, but that seems excessive.
>>
>> Actually.... perhaps it's supposed to actually call ->end_query()
>> unconditionally in ->Issue even though it hasn't called
>> ->begin_query()? That might make even more sense...
>
> I thought about that as well, though I thought that end_query() would
> require a begin_query() first (though issue does not so maybe...)
It requires a begin_query for some but not all queries.
Perhaps the code should read like
} else {
if (This->state != NINE_QUERY_STATE_RUNNING)
pipe->begin_query(pipe, This->pq);
pipe->end_query(pipe, This->pq);
This->state = NINE_QUERY_STATE_ENDED;
}
This seems like it would also take care of the Ended -> Ended
transition which is supposed to restart the query.
More information about the mesa-stable
mailing list