[PATCH 1/5] winmm: Improve MCI's Sysinfo command.

2010-03-30 Thread Joerg-Cyril.Hoehle
Hi,

Eric Pouech wrote:
did you test the 16 = 32 bit conversion for the MCI_ALL_DEVICE ?

Which ones do you have in mind? There are tests involving MCI_ALL_DEVICE_ID
that pass on both win9x and later (also in patch #5).  I wrote a few
more MCI tests privately.  Generally, I added (UINT16) casts in Wine
when I saw test failures on Win9x platforms, then kept doing so (i.e.
I'm not sure I've tested SYSINFO with a  deviceID on Win9x in
particular or whether I simply use that pattern everywhere now after
having been burnt once).  There are a few patches already in
git that fix a few MCI_ALL_DEVICE_ID here and there, but as you wrote
yourself in the TODO header long ago, support for it is incomplete.
Making close all, play all etc. work is on my private TODO list, but
I never started working on this particular item.

actually, I'd say it belongs to the 16=32 mci message mapper, not in 
generic 32bit code
Do you mean dlls/mmsystem.dll16? I never looked at it but I
 don't think that's the correct place, see below.
Do you mean the A/W (un)mapping? That's distinct, because it deals
 with string conversions only, as the name suggests, and it does
 not mogrify dwParam1.

Current test results suggest that MCI_ALL_DEVICE_ID is not only a 16/32
issue -- at least when I equate 16 with MS-Windows 3.x -- Have a look
at the mciGetDeviceID(all) test case, which returns a 16bit  on Win9x,
not .  Therefore I believe Wine must be prepared for receiving
 as ALL_ID from old Win9X apps or drivers -- possibly regardless
of them using the A or W function entry points.

Of course, a single (or few) central place(s) to convert
wDeviceID=(MCIDEVICEID)(WORD)wDeviceID or
wDeviceID= wDeviceID==0x ? MCI_DEVICE_ALL_ID : wDeviceID
is a nice idea.  That could be a distinct patch.  I'm convinced this
handle is truly a 16 bit entity, even after it has been upgraded to a UINT/DWORD
type at some time in the past.  Still, SYSINFO is a special case, as it
receives a device ID not only as function argument but also in its PARMS 
structure.

Regards,
 Jörg Höhle.




Summer of Code applicant with ambition!

2010-03-30 Thread John Koelndorfer
Hello wine-devel,

My name is John and I'm a computer science major at the University of
Minnesota, Twin Cities campus. I've made quite a bit of use of Wine before
(and I have purchased Crossover) and I'm inspired to give something back to
the project.

I have fairly ambitious goals for myself (maybe too much so) so I wanted to
let you guys know who I am and what I'd like to do, then hopefully gain some
insight into whether or not what I am considering is reasonable. My
experience is roughly as follows:

* I am familiar with C. I'm not an expert developer by any stretch but I can
certainly get by. I have some knowledge of Git.
* I don't have any Windows development experience outside of some exposure
to .NET a long time ago.
* I have not submitted a patch to the Wine project. I hope to change this in
the near future. I've looked at a little bit of the source code.
* I have high standards for myself. Whether or not they are high enough to
meet Alexandre's expectations... perhaps time will tell. :-)
* I'm a really fast learner. Maybe this is my single most redeeming quality.

All that being said, my goal for the summer would be to really dig into the
D3D stuff, optimizing what is already completed and adding to what is not.
I'm a gamer myself, so I have an arsenal of programs with which to test (and
a Windows installation to compare to). Do you think this goal is reasonable?
If not, I could start somewhere smaller and work my way up. I'm certainly
open to suggestions.

Thanks!

John



winmm: For MCI parsing, use 64bit compatible structures.

2010-03-30 Thread Joerg-Cyril.Hoehle
Hi,

Eric Pouech wrote:
this patch is ugly as hell...
Please qualify.  To me,
-   data[3] = (DWORD_PTR)dev;
+   parms.open.lpstrElementName = dev;
looks more robust than before:
 - no magic offsets,
 - no casts that may silence warnings.

The one #ifdef WIN64 is a pure performance optimization on Win32.
The other one with the TRACE() is indeed ugly, but I don't feel
it's safe to call debugstr_w() on misaligned data in Wine64. Even
if it were, printing data[3] as string may be wrong, because it
may be data[4] (+5) that holds a pointer, not (3+4).  Therefore I
decided to renounce to print string contents on 64bit, despite
their value in the logs.

 and it still believe we can do the MCI 
parser without knowing about MCI structures internals
What do you mean?
Quite to the contrary, the parser depends on knowing the internals
of some commands (like MCI_OPEN) as well as the convention about the
return value as 2nd (+3rd) slot after the callback.

The parser bridges the gap between the resource definition files
winmm_res.rc that are now in git and are known to work well with
32bit and the mixed DWORD/DWORD_PTR MCI_..._PARMS definitions whose
correctness has been (partially) validated by tests.

What we don't know is whether Win64 introduced a different winmm_res.rc.
I'd sure would be pleased if somebody could describe whether there
have been changes to the resources to accommodate 64bit pointers in MS-Windows.

Everybody, please visit bug #22146 if you can contribute such knowledge.
(Part of) my patch is needed even if there were (thanks to lack of magic 
offsets).

Regards,
 Jörg Höhle





Re: Summer of Code applicant with ambition!

2010-03-30 Thread Roderick Colenbrander
On Tue, Mar 30, 2010 at 4:34 PM, John Koelndorfer
jkoelndor...@gmail.com wrote:
 Hello wine-devel,

 My name is John and I'm a computer science major at the University of
 Minnesota, Twin Cities campus. I've made quite a bit of use of Wine before
 (and I have purchased Crossover) and I'm inspired to give something back to
 the project.

 I have fairly ambitious goals for myself (maybe too much so) so I wanted to
 let you guys know who I am and what I'd like to do, then hopefully gain some
 insight into whether or not what I am considering is reasonable. My
 experience is roughly as follows:

 * I am familiar with C. I'm not an expert developer by any stretch but I can
 certainly get by. I have some knowledge of Git.
 * I don't have any Windows development experience outside of some exposure
 to .NET a long time ago.
 * I have not submitted a patch to the Wine project. I hope to change this in
 the near future. I've looked at a little bit of the source code.
 * I have high standards for myself. Whether or not they are high enough to
 meet Alexandre's expectations... perhaps time will tell. :-)
 * I'm a really fast learner. Maybe this is my single most redeeming quality.

 All that being said, my goal for the summer would be to really dig into the
 D3D stuff, optimizing what is already completed and adding to what is not.
 I'm a gamer myself, so I have an arsenal of programs with which to test (and
 a Windows installation to compare to). Do you think this goal is reasonable?
 If not, I could start somewhere smaller and work my way up. I'm certainly
 open to suggestions.

 Thanks!

 John


First of all welcome to Wine. For a gsoc project I would try to work
on a somewhat isolated piece of code, so that your work won't break
daily and it is also easier to see what you are doing (and writing a
good project description might be easier for an isolated project as
well). Regarding the Direct3D code, it is quite complex and I don't
think it is well suited for a gsoc project (it has a really steep
learning curve). A project like 'optimizing Direct3D' is a bit vague
and this would also make it hard to see whether you met your goals or
not. Last year I would have said that if this area interests you, work
on the D3DX9 helper dlls. Right now we have most of the easy 'bits'
(though not all parts have been merged) and mainly lack the difficult
part namely the HLSL shader compiler, but it is not suited for a GSOC
project.

I would think about an area which you like to work on (or perhaps a
specific app which you really want to improve). Take into account that
GSOC is quite short and realize that getting code into Wine can also
take time because you might need multiple iterations of a patch and
you have to write a lot of unit tests. So try to pick something which
is realistic to improve in such an amount of time.

Good luck!
Roderick




Re: 10/10 wined3d: use RECT instead of WINED3DRECT in stretch_rect_fbo [try2]

2010-03-30 Thread Alexandre Julliard
Roderick Colenbrander thunderbir...@gmail.com writes:

 Hi,

 While working on some other patches, I spotted a small error in the
 call to surface_get_rect for the source rectangle. I was passing
 'This' (destination) instead of Src.

It doesn't work:

../../../tools/runtest -q -P wine -M ddraw.dll -T ../../.. -p ddraw_test.exe.so 
visual.c  touch visual.ok
wine: Unhandled page fault on read access to 0x0050 at address 0x68e87fc9 
(thread 0024), starting debugger...
Unhandled exception: page fault on read access to 0x0050 in 32-bit code 
(0x68e87fc9).
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
 EIP:68e87fc9 ESP:0032f110 EBP:0032f248 EFLAGS:00010246(  R- --  I  Z- -P- )
 EAX:0001 EBX:68ed8d20 ECX:0280 EDX:
 ESI: EDI:01e0
Stack dump:
0x0032f110:  00146350 68ed2dbc 0032f228 00110014
0x0032f120:  beef0202 7d7fb5c0 7bc4907b 68ed8d20
0x0032f130:  00147240 0072 0032f198 68df9e66
0x0032f140:  00147240 0080 0080 0001
0x0032f150:  0012fc70  0072 
0x0032f160:  00147000 686cb060  0001
Backtrace:
=0 0x68e87fc9 IWineD3DSurfaceImpl_BltOverride+0x1529(This=is not available, 
DestRect=is not available, SrcSurface=(nil), SrcRect=(nil), Flags=0x1000400, 
DDBltFx=0x32fa9c, Filter=WINED3DTEXF_POINT) 
[/home/julliard/wine/wine/dlls/wined3d/surface.c:284] in wined3d (0x0032f248)
  1 0x68e8b1e7 IWineD3DSurfaceImpl_Blt+0xb7(iface=register ESI not in topmost 
frame, DestRect=(nil), SrcSurface=register EDI not in topmost frame, 
SrcRect=(nil), Flags=0x1000400, DDBltFx=0x32fa9c, Filter=WINED3DTEXF_POINT) 
[/home/julliard/wine/wine/dlls/wined3d/surface.c:4271] in wined3d (0x0032f2d8)
  2 0x686ae1bb IDirectDrawSurfaceImpl_Blt+0x1ab(iface=0x12b888, 
DestRect=register ESI not in topmost frame, SrcSurface=(nil), SrcRect=(nil), 
Flags=register EDI not in topmost frame, DDBltFx=0x32fa9c) 
[/home/julliard/wine/wine/dlls/ddraw/surface.c:806] in ddraw (0x0032f348)
  3 0x686b0717 IDirectDrawSurface3Impl_Blt+0x47(This=0x12b88c, prcDst=(nil), 
pSrcSurf=(nil), prcSrc=(nil), dwFlags=0x1000400, pFX=0x32fa9c) 
[/home/julliard/wine/wine/dlls/ddraw/surface_thunks.c:113] in ddraw (0x0032f378)
  4 0x68663213 D3D1_TextureMapBlendTest+0x263() 
[/home/julliard/wine/wine/dlls/ddraw/tests/visual.c:1302] in ddraw_test 
(0x0032fb88)
  5 0x68669bb5 func_visual+0x1375() 
[/home/julliard/wine/wine/dlls/ddraw/tests/visual.c:2979] in ddraw_test 
(0x0032fd48)
  6 0x6866a82e run_test+0x14e(name=is not available) 
[/home/julliard/wine/wine/dlls/ddraw/tests/../../../include/wine/test.h:543] in 
ddraw_test (0x0032fd98)
  7 0x6866aa02 main+0x132(argc=couldn't compute location, argv=couldn't 
compute location) 
[/home/julliard/wine/wine/dlls/ddraw/tests/../../../include/wine/test.h:592] in 
ddraw_test (0x0032fe58)
  8 0x6866ab9c __wine_spec_exe_entry+0x7c(peb=0x7ffdf000) 
[/home/julliard/wine/wine/dlls/winecrt0/exe_entry.c:37] in ddraw_test 
(0x0032fea8)
  9 0x7b8584c4 start_process+0x54(peb=register ESI not in topmost frame) 
[/home/julliard/wine/wine/dlls/kernel32/process.c:989] in kernel32 (0x0032fee8)
  10 0x7bc71344 call_thread_func+0xc() in ntdll (0x0032fef8)
  11 0x7bc71510 call_thread_entry_point+0x70(entry=0x7b858470, arg=0x7ffdf000) 
[/home/julliard/wine/wine/dlls/ntdll/signal_i386.c:2459] in ntdll (0x0032ffc8)
  12 0x7bc4cfca in ntdll (+0x3cfca) (0x0032ffe8)
0x68e87fc9 IWineD3DSurfaceImpl_BltOverride+0x1529 
[/home/julliard/wine/wine/dlls/wined3d/surface.c:284] in wined3d: movl
0x50(%edx),%eax
284 rect_out-right = This-currentDesc.Width;

-- 
Alexandre Julliard
julli...@winehq.org




Re: winedump: code cleanup

2010-03-30 Thread Alexandre Julliard
Mikhail Maroukhine mik...@yandex.ru writes:

  - winedump/search.c::get_type - cleanup variable usage

That's not much better. It would be cleaner to stop abusing the passed
argument as a local variable.

-- 
Alexandre Julliard
julli...@winehq.org




Congratulations!

2010-03-30 Thread Juan Lang
Hi Matteo, just wanted to congratulate you on getting your
DRDXAssembleShader patches accepted.  I know it can take a fair amount
of persistence to get something substantial committed, and it seems
that many lack the patience.  Well done!
--Juan




Implementation of WIndows Gaming APIs as GSoC project

2010-03-30 Thread Mariusz Pluciński
Hello

I'm Mariusz Pluciński, student of Information Technology in Gdańsk
University of Technology (Poland). I decided to apply to Google Summer of
Code in your project, cause I've been fascinated in Wine for a long time
(without Wine, migration to open source OS would not be possible for me). In
my opinion, one of the biggest problem for Wine is problems with support
games written for MS Windows, so making progress in this area is something
which I want to work on.

I know C programming language very well, just as programming in Microsoft
Windows APIs and Microsoft's COM technology. I also have some experience in
working on open source - in Kdenlive project (video editor). I do a polish
translation there, but I have also sent several patches to source code. In
the past I was also reading some parts of Wine source code, so I know
somewhat about how Wine's works and how it's code looks.

In Google Summer of Code, I'm interested in implementation of new gaming
APIs created by Microsoft for Windows Vista and enlarged in Windows 7. Main
part of this is implementation of four COM interfaces: IGameExplorer,
IGameExplorer2, IGameStatistics and IGameStatisticsMgr. In the bugzilla
there's stub implementation of IGameExplorer interface, which may be good
start point for me in development. Main parts of task will probably be
creation of database to store games' data and parser of GDF files (Game
Definition File).

In favorable circumstances, if the APIs implementation is done fast enough,
I will start work on simple equivalent of Windows Game Explorer application.
It would be nice for Wine's users to control their games from one
application, similar way as they do it in MS Windows. Also, application will
use Game Statistics interfaces, so it will be good practical test for these
interfaces.

I hope my idea will get your acceptance.

Thanks



[PATCH 1/5] winmm: Improve MCI's Sysinfo command.

2010-03-30 Thread Joerg-Cyril.Hoehle
Hi,

Eric Pouech wrote:
did you test the 16 = 32 bit conversion for the MCI_ALL_DEVICE ?

It's good you asked.  Upon closer inspection, MCI_Sysinfo appears to
behave differently.  I'd say it's even a bug in MS that setting
SYSINFO_PARMS.wDeviceType = MCI_ALL_DEVICE_ID is not recognized! Only
sendCommand(MCI_ALL_DEVICE_ID, MCI_SYSINFO ...) appears usable to
obtain the functionality of sysinfo all ... :-(

I'll supersede the patch ASAP.
Grr, that's not going to simplify the parser.

Regards,
 Jögr Höhle




Re: Summer of Code applicant with ambition!

2010-03-30 Thread John Koelndorfer
snip quoted text

Firstly, thanks to Roderick for the prompt reply. I had a feeling that
my ideas were a little much. :-)

That being said, I've again gone over the list of possible projects on
the Summer of Code page and one that particularly piqued my interest
was Direct3D - Conformance / Performance / Interactive tests. This
seems like it may be a good fit given my lack of previous experience
in the Wine codebase. I haven't written any code for 3D-ish games but
I can't imagine that would be a huge setback. Maybe Dan Kegel or
someone else who has worked on D3D can comment here?

If that is not feasible, I think I would be a strong candidate for the
Test Suite project since my scripting-fu is fairly strong.

I've been looking through open Wine bugs but I've yet to find
something that fits with GSOC and my skill level. If there are any
suggestions for specific bugs to look into maybe I could build a
project around one.

Thanks!

John




re: Summer of Code applicant with ambition!

2010-03-30 Thread Dan Kegel
John Koelndorfer wrote:
I've again gone over the list of possible projects on
the Summer of Code page and one that particularly piqued my interest
was Direct3D - Conformance / Performance / Interactive tests. This
seems like it may be a good fit given my lack of previous experience
in the Wine codebase. I haven't written any code for 3D-ish games but
I can't imagine that would be a huge setback. Maybe Dan Kegel or
someone else who has worked on D3D can comment here?

(Correction: I've never worked on D3D :-)

Offhand, if you're not already a 3d person, that might be kind of hard?
Although maybe the get dxdiag working task might be easy
enough.  (The only problem with that is it involves committing
someone else's code, which isn't a good focus for a GSOC project.)

If that is not feasible, I think I would be a strong candidate for the
Test Suite project since my scripting-fu is fairly strong.

Sure, you could find and fix tons of problems that way, I bet.
- Dan




Re: [PATCH 6/7] Use surface_is_offscreen instead of directly looking at the swapchain.

2010-03-30 Thread Henri Verbeet
On 30 March 2010 21:19, Roderick Colenbrander thunderbir...@gmail.com wrote:
 @@ -4062,7 +4062,7 @@ static HRESULT 
 IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
          * Also beware that the front buffer's surface size is screen width x 
 screen height,
          * whereas the real gl drawable size is the size of the window.
          */
 -        if (dstSwapchain  (IWineD3DSurface *)This == 
 dstSwapchain-frontBuffer) {
 +        if (!surface_is_offscreen((IWineD3DSurface *)This)) {
             RECT windowsize;
             POINT offset = {0,0};
             UINT h;
This looks wrong, the code is checking if the surface is the front
buffer, not if it's onscreen.




Re: Summer of Code applicant with ambition!

2010-03-30 Thread John Koelndorfer
 (Correction: I've never worked on D3D :-)

Fair enough, I just noted that you were listed as a possible mentor
for that project so I figured you'd be the person to ask.

 Sure, you could find and fix tons of problems that way, I bet.

Well that's good to hear. If that can help the Wine hackers work
faster and it's a low-grade learning curve then we might have a
winner. Of course, I am still open to other suggestions if there are
any.




Re: Summer of Code applicant with ambition!

2010-03-30 Thread Roderick Colenbrander
On Tue, Mar 30, 2010 at 11:04 PM, John Koelndorfer
jkoelndor...@gmail.com wrote:
 (Correction: I've never worked on D3D :-)

 Fair enough, I just noted that you were listed as a possible mentor
 for that project so I figured you'd be the person to ask.

 Sure, you could find and fix tons of problems that way, I bet.

 Well that's good to hear. If that can help the Wine hackers work
 faster and it's a low-grade learning curve then we might have a
 winner. Of course, I am still open to other suggestions if there are
 any.



One useful project could be to finish the DirectShow/Gstreamer work.
You would have to ask Edward Hervey about it. A few days ago he
mentioned on IRC that he was planning to check the status of the code
again and he had suggestions for future work about a generic
dshow/gstreamer wrapper. This area is a challenging area though but I
think there is not that much porcelain you can break.

Roderick




Re: Congratulations!

2010-03-30 Thread Matteo Bruni
2010/3/30 Juan Lang juan.l...@gmail.com:
 Hi Matteo, just wanted to congratulate you on getting your
 DRDXAssembleShader patches accepted.  I know it can take a fair amount
 of persistence to get something substantial committed, and it seems
 that many lack the patience.  Well done!
 --Juan


Thank you very much! It required quite some time (mostly because of
other things stealing time from Wine hacking) and this is not the end
of the story, many more (smaller) patches will be needed to complete
the implementation.
Anyway I really appreciate this, I think I'm going to print your email
and hang it somewhere in my room. :)




Re: Summer of Code applicant with ambition!

2010-03-30 Thread John Koelndorfer
I've done a little bit of research on Direct3D. Having seen how easy
the tutorial at http://www.directxtutorial.com/ is, I think I'd like
to propose the following: a 3D benchmarking program that would allow
users and developers to determine what aspects of WineD3D are the
slowest so that they can be improved.

My high level idea is that a user would be able to set graphics
options (similar to a game -- or maybe automatically test many
configurations) and a 3D demo would run. It would time D3D function
calls so that we can get an idea for which functions need
optimization, report FPS at points in time, and whatever else makes
sense as I learn more about it.

As I mentioned before, I haven't really done anything w/ 3D but in my
endeavors as a student I've taken up through calculus 4 (including
linear algebra) so I think that will give me a leg up here. I plan to
do some research on D3D before SOC begins.

Does this sound like it would be useful to work on? Working on 3D
sounds like a particularly fun project to me and I don't think I'd
mind spending some extra hours on it if need be.

Sorry for hitting the list so hard -- SOC was only recently suggested
to me and I am really set on contributing to Wine if that's possible.

Again, thanks for your support and suggestions.

John




Re: Summer of Code applicant with ambition!

2010-03-30 Thread Austin English
On Tue, Mar 30, 2010 at 4:13 PM, John Koelndorfer
jkoelndor...@gmail.com wrote:
 I've done a little bit of research on Direct3D. Having seen how easy
 the tutorial at http://www.directxtutorial.com/ is, I think I'd like
 to propose the following: a 3D benchmarking program that would allow
 users and developers to determine what aspects of WineD3D are the
 slowest so that they can be improved.

 My high level idea is that a user would be able to set graphics
 options (similar to a game -- or maybe automatically test many
 configurations) and a 3D demo would run. It would time D3D function
 calls so that we can get an idea for which functions need
 optimization, report FPS at points in time, and whatever else makes
 sense as I learn more about it.

Ideally that would be part of wine's dxdiag.exe. Windows' has 'Test
DirectDraw' and 'Test Direct3D' options, which would be useful to do
in wine as well.

See also http://bugs.winehq.org/show_bug.cgi?id=14118.

-- 
-Austin




Re: Summer of Code applicant with ambition!

2010-03-30 Thread Roderick Colenbrander
On Wed, Mar 31, 2010 at 12:13 AM, John Koelndorfer
jkoelndor...@gmail.com wrote:
 I've done a little bit of research on Direct3D. Having seen how easy
 the tutorial at http://www.directxtutorial.com/ is, I think I'd like
 to propose the following: a 3D benchmarking program that would allow
 users and developers to determine what aspects of WineD3D are the
 slowest so that they can be improved.

 My high level idea is that a user would be able to set graphics
 options (similar to a game -- or maybe automatically test many
 configurations) and a 3D demo would run. It would time D3D function
 calls so that we can get an idea for which functions need
 optimization, report FPS at points in time, and whatever else makes
 sense as I learn more about it.


Note, I don't want to discourage you but I'm not sure if we should
write any benchmark app to be bundled with Wine. When a game is slow
it can be due to a lot of factors:
- quality of the display drivers, basically only Nvidia's drivers
(though AMD is catching up) are well optimized
- opengl extensions supported by the display driver, not all drivers
support functionality like FBOs, GLSL and other stuff which is needed
to run games at good speeds
- behavior of the app, if unlucky the app makes calls which are
inefficient to emulate (on newer cards, modern opengl extensions can
remove some of the limitations and we use such extensions where we
can)

So when you encounter a 3D performance issue, it is not necessarily a
Wine issue. Profiling using a tool like oprofile/sysprof can shine
some light on the problem. Typically it is not that a huge part of the
time is spent in a specific Wine call though. A lot of CPU time might
be spend in display drivers. Whether that is because we are using it
in an inefficient way or whether the driver is not well optimized is
hard to say because typically drives don't contain debug symbols.

I think that a Wine 3D demo is not sufficient to properly test for
performance issues. If you want to work in this area, perhaps a more
generic 3d testing framework is a better project which uses real games
(or demos). Codeweavers uses I believe cxtest to monitor performance
regressions in 3dmark 2003, half-life 2 and other apps. I have no idea
how robust this framework is. Perhaps it can be improved (or
rewritten). We have some basic fps dumping code using WINEDEBUG=+fps
which could be used if a game doesn't provide a way to retrieve
results. Nvidia (perfkit/perfhud for NV) and AMD drivers offer
performance counters which give indications on how busy parts of the
GPU are. Perhaps that stuff could be used to improve results.

Roderick




[GSoC] IUri Implementations

2010-03-30 Thread Thomas Mullaly
Hi, my name is Thomas Mullaly and I am a undergraduate in the Computer 
Science department at Kent State University and I would very much like 
to participate in this years GSoC. I saw under your project ideas page 
that the IUri API still needs implemented and I thought that this would 
be a good project for me, but, before I submit a proposal on it I have a 
few questions about the project itself.


Firstly, on the project page it says that the main goal is to have the 
IUri interface and CreateUri function implemented, but, on MSDN they 
also have functions and interfaces for creating/manipulating 
IUriBuilder's and I was wondering if these were also part of the project 
goals. If not can they be or would this be to ambitious to have finished 
by the end of the summer.



Secondly (more of a design question), I see that the Uri structure and 
functions are already stubbed out in the dlls/urlmon/uri.c file and I 
was thinking for my implementation I would add another BSTR* member to 
the Uri struct, which will point to the encoded version of the URI 
(which will be generated during the CreateUri() call). Since most of the 
functions that interact with the IUri return components of the URI (e.g. 
scheme, host, query, etc.) I was thinking about adding more data members 
to the Uri struct which store the location in the encoded Uri string 
where each component exists (or -1 if it does not exist) and by doing 
this the runtimes of the IUri functions will be reduced since the 
function will already know where to look inside the encoded string for 
the component it needs. A drawback to this design is that each Uri 
struct will be bloated with a decent amount of ints which may or may not 
be used depending on the type of the URI that the IUri represents. The 
second approach I was thinking of is to not store any locations inside 
the Uri struct and to compute them on the fly every time the IUri is 
queried for one of its components, this would result in a smaller memory 
footprint of the Uri structure but will increase the runtimes of all the 
functions that access the URI. I was wondering if anyone might have 
suggestions for which way they think might be better.


Any input will be greatly appreciated!


-Thomas Mullaly




Re: Summer of Code applicant with ambition!

2010-03-30 Thread Edward Savage
snip thread

Sorry this is a little off topic from D3D but maybe what the OP is
looking for.

I'm not sure how easy it is but .net 3.5 sp1 is currently a blocker
for several high profile games that would otherwise work well with
Wine, and many others that may work.  .net needs to install correctly
and function well enough so that generic .net game lunchers run and
(importantly) Games for Windows Live runs and authenticates.  GFWL is
what many of these games rely on and it is currently blocked by .net
so it's unknown how well it runs under Wine but it does install
properly.

This maybe suited to a GSoC project and in my opinion would have the
greatest positive outcome for gamers.

Edward




Re: [GSoC] IUri Implementations

2010-03-30 Thread Nikolay Sivov

On 3/31/2010 02:57, Thomas Mullaly wrote:

Hi, my name is Thomas Mullaly and I am a undergraduate in the Computer 
Science department at Kent State University and I would very much like 
to participate in this years GSoC. I saw under your project ideas page 
that the IUri API still needs implemented and I thought that this 
would be a good project for me, but, before I submit a proposal on it 
I have a few questions about the project itself.

Hi, Thomas, and welcome.


Firstly, on the project page it says that the main goal is to have the 
IUri interface and CreateUri function implemented, but, on MSDN they 
also have functions and interfaces for creating/manipulating 
IUriBuilder's and I was wondering if these were also part of the 
project goals. If not can they be or would this be to ambitious to 
have finished by the end of the summer.
Right, a complete IUri with corresponding tests will be enough for a 
summer project I think. After a brief look at IUriBuilder I think it 
doesn't depend on a IUri implementation details so much. For IUriBuilder 
one way I see is to track changed properties and store only new data, 
using unchanged properties from supplied IUri, but this needs some tests 
(does it keep reference for IUri for example or not).



Secondly (more of a design question), I see that the Uri structure and 
functions are already stubbed out in the dlls/urlmon/uri.c file and 
I was thinking for my implementation I would add another BSTR* member 
to the Uri struct, which will point to the encoded version of the URI 
(which will be generated during the CreateUri() call). Since most of 
the functions that interact with the IUri return components of the URI 
(e.g. scheme, host, query, etc.) I was thinking about adding more data 
members to the Uri struct which store the location in the encoded Uri 
string where each component exists (or -1 if it does not exist) and by 
doing this the runtimes of the IUri functions will be reduced since 
the function will already know where to look inside the encoded string 
for the component it needs. A drawback to this design is that each Uri 
struct will be bloated with a decent amount of ints which may or may 
not be used depending on the type of the URI that the IUri represents. 
The second approach I was thinking of is to not store any locations 
inside the Uri struct and to compute them on the fly every time the 
IUri is queried for one of its components, this would result in a 
smaller memory footprint of the Uri structure but will increase the 
runtimes of all the functions that access the URI. I was wondering if 
anyone might have suggestions for which way they think might be better.
You could use dynamic array for that or a list with a Uri_PROPERTY value 
as a key for example and a data as an offset and length. Another way is 
to compute each property offset only when it's requested and store it. 
An obvious bad case for that is a long uri. So probably one pass 
property computation while building IUri instance is not bad.


Waiting for Jacek comments.


Any input will be greatly appreciated!


-Thomas Mullaly









Re: Summer of Code applicant with ambition!

2010-03-30 Thread John Koelndorfer
On Tue, Mar 30, 2010 at 6:11 PM, Edward Savage epss...@gmail.com wrote:
 snip thread

 Sorry this is a little off topic from D3D but maybe what the OP is
 looking for.

 I'm not sure how easy it is but .net 3.5 sp1 is currently a blocker
 for several high profile games that would otherwise work well with
 Wine, and many others that may work.  .net needs to install correctly
 and function well enough so that generic .net game lunchers run and
 (importantly) Games for Windows Live runs and authenticates.  GFWL is
 what many of these games rely on and it is currently blocked by .net
 so it's unknown how well it runs under Wine but it does install
 properly.

 This maybe suited to a GSoC project and in my opinion would have the
 greatest positive outcome for gamers.

 Edward

Edward seems to know what I'm after. :-) As I mentioned originally, I'm a
gamer and so that's where I'd like to lend my coding arm. If .net is doable,
 I'd certainly look into that too.

 Note, I don't want to discourage you but I'm not sure if we should
 write any benchmark app to be bundled with Wine. When a game is slow
 it can be due to a lot of factors:
 - quality of the display drivers, basically only Nvidia's drivers
 (though AMD is catching up) are well optimized
 - opengl extensions supported by the display driver, not all drivers
 support functionality like FBOs, GLSL and other stuff which is needed
 to run games at good speeds
 - behavior of the app, if unlucky the app makes calls which are
 inefficient to emulate (on newer cards, modern opengl extensions can
 remove some of the limitations and we use such extensions where we
 can)

 So when you encounter a 3D performance issue, it is not necessarily a
 Wine issue.

I certainly agree here 100% -- however, my own previous experiences have
led me to conclude that there are Wine performance deficiencies *somewhere*
(maybe not necessarily D3D, but it seems the likely candidate). See e.g.
Warcraft 3 and World of Warcraft. Both of these games have Direct3D and OpenGL
modes. Running each game in Wine (at least in my testing from several months
to a year ago) D3D was anywhere from 40-60% slower than OpenGL mode. I'd be
happy to test with the latest Wine, too. The point is, all things
being held constant,
calls that had to go through WineD3D were much slower. That's where
the spirit of
my proposal came from, anyways.

Now, you might say does Wine need some sort of benchmarking? That's debatable.
Maybe it could be a part of dxdiag? My goal for this proposal was to
create something
that developers could use to assess performance deficiencies, or that
end users (maybe)
could use to figure out what type of effects ought to be turned
off/down on their systems.
Essentially, answer the question what's making my FPS drop? Is it
AF, AA, specular
lighting, HDR?

There's been a lot of feedback so far (thanks!) So far, the projects
I'd like most are roughly:

* Get .net 3.5 working
* Implement dxdiag
* DirectShow/Gstreamer
* The Direct3D - Conformance / Performance / Interactive tests given @
  
http://wiki.winehq.org/SummerOfCode#head-8d0895f237c9c3579ffe4282412bbbf2c8cd019b

Again, many thanks for all the helpful feedback. I look forward to
(hopefully) being able
to work with you all in the near future. :-)

John




Re: [GSoC] IUri Implementations

2010-03-30 Thread Thomas Mullaly


You could use dynamic array for that or a list with a Uri_PROPERTY 
value as a key for example and a data as an offset and length. Another 
way is to compute each property offset only when it's requested and 
store it. An obvious bad case for that is a long uri. So probably one 
pass property computation while building IUri instance is not bad.


I like the idea of making a lightweight data structure which stores the 
offset and length for each component property. I'd imagine it would look 
something like this:


typedef struct  {
   DWORD offset;
   DWORD length;
} UriComponent;

Although it becomes a little more tricky on how to store the 
UriComponents, but, I have a few ideas if anyone has any suggestions.


I do like the idea of using an array inside the Uri struct to store the 
UriComponents but not all of the values in the Uri_PROPERTY enum 
actually mean anything (at least thats what I have gathered from reading 
the MSDN docs), like the  Uri_PROPERTY_STRING_START and the 
Uri_PROPERTY_STRING_LAST are just there to say all the enum values 
between  = START and  = LAST correspond the string components of the URI.


So I'm thinking the Uri struct should have a constant size array of 
UriComponents of length Uri_PROPERTY_STRING_LAST (which would be 15.. 
correct me if I'm wrong).


So it would look something like...

typedef struct {
   /** The other stuff */

   BSTR *uri;
   UriComponents components[15];
} Uri;

and then for the GetPropertyBSTR(BSTR *component, Uri_PROPERTY prop) 
function you could just have something like.


if(prop = Uri_PROPERTY_START  prop = Uri_PROPERTY_LAST) {
   UriComponent comp;
   comp = uri-components[prop];

   /** Parse the component out */
}

And that should get you the necessary offsets and lengths for the 
component you need.


I also like the idea suggested before using a one-pass solution to find 
everything when the Uri is constructed.



Thank you for the quick responses and suggestions, I hope to have a 
proposal ready in the next few days.