<div class="gmail_quote">On Fri Nov 21 2014 at 9:57:46 PM Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sat, Nov 22, 2014 at 12:44 AM, John Ettedgui <<a href="mailto:john.ettedgui@gmail.com" target="_blank">john.ettedgui@gmail.com</a>> wrote:<br>
> On Fri Nov 21 2014 at 7:50:03 PM Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu" target="_blank">imirkin@alum.mit.edu</a>> wrote:<br>
>><br>
>> What's the actual problem?<br>
><br>
> If you mean in-game, a blocking black screen, the game wants to display<br>
> something but is unable to and keeps trying pretty much forever.<br>
<br>
I meant at the API level. i.e. what is the API call sequence leading<br>
to the problem, what is being returned, and what ought to be getting<br>
returned.<br>
<br></blockquote><div>I don't have the logs right now, but this I what I believe happened (I can dig them if you want):</div><div>- NineQuery9_new</div><div>- NineQuery9_Issue(This, D3DISSUE_END), which returned D3D_OK (and still does with my patch)</div><div>- NineQuery9_GetData(This, pData, dwSize, 0)</div><div><span style="font-size:13.3333330154419px">- NineQuery9_GetData(This, pData, dwSize, 0)</span><br></div><div><span style="font-size:13.3333330154419px">- NineQuery9_GetData(This, pData, dwSize, 0)</span><span style="font-size:13.3333330154419px"><br></span></div><div><span style="font-size:13.3333330154419px">etc...</span></div><div><span style="font-size:13.3333330154419px">GetData always returned </span>S_OK but never filled the pData with any data.</div><div><span style="font-size:13.3333330154419px">I assumed the game kept calling GetData again and again as it was not getting its data.</span></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
>><br>
>> If there's no begin, then a new query would<br>
>> remain marked as FRESH.<br>
><br>
> This is not my understanding of the Query on msdn:<br>
> <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb147308%28v=vs.85%29.aspx" target="_blank">http://msdn.microsoft.com/en-<u></u>us/library/windows/desktop/<u></u>bb147308%28v=vs.85%29.aspx</a><br>
> As you can see on the 1st diagram, we have either cases:<br>
> Signaled State moved to Building State on D3DISSUE_BEGIN and then to Issued<br>
> State on D3DISSUE_END (this part worked fine before).<br>
><br>
> Then we have Signaled Sated moved to Issued State on D3DISSUE_END, that's<br>
> the part I believe was not working before this patch.<br>
<br>
These are hidden states, and query9.c does not implement them<br>
directly. </blockquote><div>I see </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">What's the actual API call sequence, and what is being<br>
wrongly returned?<br></blockquote><div>As written above. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
><br>
> Of course all of that is based on me thinking FRESH is nine's version of<br>
> Signaled.<br>
<br>
>From my read of the code, FRESH is a newly constructed query, </blockquote><div>agreed </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">ENDED is<br>
when pipe->end_query was issued. </blockquote><div>That is not what I understood but you may be right. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">All the state usage is entirely<br>
contained in query9.c -- take a look at it. </blockquote><div>Right </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">However this is purely an<br>
implementation detail. At the end of the day, some API call is made<br>
and it's not returning the expected data. It's not clear from the<br>
commit log as to what you believe the issue is.<br>
<br></blockquote><div>I believed the issue was the lack of state transition of ISSUE(D3DISSUE_END) without a previous ISSUE(D3DISSUE_BEGIN) .</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
><br>
>><br>
>> Should _GetData 0 out the result in that case<br>
>> perhaps instead of insta-returning?<br>
>><br>
> You are correct that this is the exact reason why I made the change.<br>
> In my game, GetData kept getting called, and kept returning no data because<br>
> of the State the Queue was in (in its current implementation).<br>
><br>
> What do you mean by "0 out the result" though?<br>
<br>
memset(pData, 0, dwSize) in GetData if This->state == FRESH.<br>
<br></blockquote><div>I see, though I'm not sure how it would help.</div><div>What return value would you see for that?</div></div>