D3DXHANDLE for ID3DXConstantTable

Rico Schüller kgbricola at web.de
Thu Jan 5 10:36:55 CST 2012


Am 04.01.2012 17:26, schrieb Henri Verbeet:
> 2012/1/5 Rico Schüller<kgbricola at web.de>:
>> I'm not sure what you mean by a "normal handle table".
>>
>> Do you mean a list?
>>
> It's pretty much just a table of handles. There are a couple of
> different variants spread over the Wine source. For example,
> http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ddraw/main.c#l50
> is what ddraw uses.
Well that's a list, isn't it? So we are talking about the same thing. 
I'm not sure that's the best solution. Since you could pass pointers to 
strings as handles, I'd like to show the following example:
char *name="test"; address may be: name -> 0x80484c4
Now what happens if the address is equal the index of another variable? 
You'd get the wrong variable. You couldn't safely say from the value if 
it is a name or a handle! So the only option I see is to use the address 
of the handle as index, which would require a sorted list or something 
like a rbtree and also would be cpu expensive for comparison if the 
"index" is in the list. Keep in mind the list could get big and the 
handles have to be compared every usage (maybe several times per frame). 
You'd have to compare against all handles, not only the small amount in 
one shader... and each element and struct member has it's own handle. 
That's why I think a table wouldn't do the trick. What do you think?

The detection by something like the address //((UINT_PTR)ptr) & (1 << 
(sizeof(UINT_PTR)*8-1))// (see 
http://www.winehq.org/pipermail/wine-devel/2010-April/082900.html ) may 
not be save either, but it is a lot better in concerns of speed and it 
is what some people think native does! So it might be the most 
compatible way to do it.

Cheers
Rico



More information about the wine-devel mailing list