I had a quick look at this tonight given that Baldurs gate now plays. It would appear that the problem is scaling. Just looking at the menu screen, you have a 640 pixel wide texture that is drawn onto a 1024 wide render target texture. This is done with an x scale of 2 though, so pretty much all the right hand half is cut off. The 1024 render target (containing now the left hand side of the screen) is then rendered to the screen window with a scaling of 1/2 ... so you get the half screen effect.
I think it may be something to do with a TBW value of 20 being set in the texture along with a TW of 10 (so, one says 1280 wide and the other 640).
The hack below results in the full scene being displayed in half the window ... so, not a fix ... but at least you see the full scene. Unfortunately I don't know gsdx well enough to reason any more but hopefully this provide some info for someone more knowledgeable.
I know quite a bit about the innards of BGDA and the snowblind engine though... https://code.google.com/p/bgda-explorer/
Ian
Index: GSRendererDX.cpp
===================================================================
--- GSRendererDX.cpp (revision 5732)
+++ GSRendererDX.cpp (working copy)
@@ -186,7 +186,8 @@
GSDeviceDX::VSConstantBuffer vs_cb;
- float sx = 2.0f * rtscale.x / (rtsize.x << 4);
+ // IJB: BGDA half screen hack
+ float sx = (context->TEX0.TBW == 20 ? 2.0f : 1.0f)* rtscale.x / (rtsize.x << 4);
float sy = 2.0f * rtscale.y / (rtsize.y << 4);
float ox = (float)(int)context->XYOFFSET.OFX;
float oy = (float)(int)context->XYOFFSET.OFY;
I should also mention, that the following settings in gsdx.ini help illustrate the issue by dumping out the contents of the various render targets into c:\temp2
dump=1
save=1
saven=300
savez=0
I think it may be something to do with a TBW value of 20 being set in the texture along with a TW of 10 (so, one says 1280 wide and the other 640).
The hack below results in the full scene being displayed in half the window ... so, not a fix ... but at least you see the full scene. Unfortunately I don't know gsdx well enough to reason any more but hopefully this provide some info for someone more knowledgeable.
I know quite a bit about the innards of BGDA and the snowblind engine though... https://code.google.com/p/bgda-explorer/
Ian
Index: GSRendererDX.cpp
===================================================================
--- GSRendererDX.cpp (revision 5732)
+++ GSRendererDX.cpp (working copy)
@@ -186,7 +186,8 @@
GSDeviceDX::VSConstantBuffer vs_cb;
- float sx = 2.0f * rtscale.x / (rtsize.x << 4);
+ // IJB: BGDA half screen hack
+ float sx = (context->TEX0.TBW == 20 ? 2.0f : 1.0f)* rtscale.x / (rtsize.x << 4);
float sy = 2.0f * rtscale.y / (rtsize.y << 4);
float ox = (float)(int)context->XYOFFSET.OFX;
float oy = (float)(int)context->XYOFFSET.OFY;
I should also mention, that the following settings in gsdx.ini help illustrate the issue by dumping out the contents of the various render targets into c:\temp2
dump=1
save=1
saven=300
savez=0