Hi, I've done some more work on my state management, and I uploaded an updated patch to http://stud4.tuwien.ac.at/~e0526822/wined3d-statemgmt-2.tar.bz2 .
Ok, so what's updated: * Pixel shaders: Should work now * GLSL shaders: Working too. Henris shader backend stuff is integrated in a messy way. * Offscreen rendering: Works with back buffer and pbuffer rendering, fbos not yet. * Stateblocks: Brute force integration by just scheduling all modified states for a reset. No display list yet * Blitting, render target unlocking: Enabled again, sets new gl states and schedules a reapplication of the modified states. Not a nice solution yet
What is still missing: * Nv register combiners. I haven't found a way yet to build a texture stage -> texture unit mapping which I like. All the ways I could think of could potentially cause lots of unneccessary state changes.
One nice thing I have noticed is that this changes give a huge performance gain in Half-Life 2(dxlevel 80, and 90). Dxlevel 80 is accelerated to approximately 150-200% of the former performance, and especially slow parts are faster now. This makes a really huge playability difference :-)
There are some regressions too, especially related to texture loading(3Dmark2000), and some glsl crashes. The good part about this change is that I can send it in in very small patches, making regression testing much easier, contrary to the huge ddraw rewrite.
Where to go from here? As long as nobody screams I'd start sending patches now. Its easier to catch regressions while sending small patches instead of hunting them on the blob I have here(and my messy patch history in my git tree). I'm also afraid that I get too far away from the main wined3d code(See the shader backend integration). We can discuss the code based on the small changes I'll send.
Stefan
Amorphous made me aware that git can do a full diff against 2 branches, so I have a single big diff attached now :-)
Hi, I've done some more work on my state management, and I uploaded an updated patch to http://stud4.tuwien.ac.at/~e0526822/wined3d-statemgmt-2.tar.bz2 .
Ok, so what's updated:
- Pixel shaders: Should work now
- GLSL shaders: Working too. Henris shader backend stuff is integrated in a
messy way.
- Offscreen rendering: Works with back buffer and pbuffer rendering, fbos
not yet.
- Stateblocks: Brute force integration by just scheduling all modified
states for a reset. No display list yet
- Blitting, render target unlocking: Enabled again, sets new gl states and
schedules a reapplication of the modified states. Not a nice solution yet
What is still missing:
- Nv register combiners. I haven't found a way yet to build a texture stage
-> texture unit mapping which I like. All the ways I could think of could potentially cause lots of unneccessary state changes.
One nice thing I have noticed is that this changes give a huge performance gain in Half-Life 2(dxlevel 80, and 90). Dxlevel 80 is accelerated to approximately 150-200% of the former performance, and especially slow parts are faster now. This makes a really huge playability difference :-)
There are some regressions too, especially related to texture loading(3Dmark2000), and some glsl crashes. The good part about this change is that I can send it in in very small patches, making regression testing much easier, contrary to the huge ddraw rewrite.
Where to go from here? As long as nobody screams I'd start sending patches now. Its easier to catch regressions while sending small patches instead of hunting them on the blob I have here(and my messy patch history in my git tree). I'm also afraid that I get too far away from the main wined3d code(See the shader backend integration). We can discuss the code based on the small changes I'll send.
Stefan