Module: wine
Branch: master
Commit: b8a57423586123438c529a808a735b46b982ee43
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b8a57423586123438c529a808…
Author: Alexander Dorofeyev <alexd4(a)inbox.lv>
Date: Fri May 9 01:12:39 2008 +0300
wined3d: Set alpha to index even when there is no palette.
Fixes a failure in p8_primary_test when running with opengl ddraw renderer.
---
dlls/wined3d/surface.c | 26 +++++++++++++++-----------
1 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 3a7fc4b..40626d6 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -2088,17 +2088,21 @@ static void d3dfmt_p8_init_palette(IWineD3DSurfaceImpl *This, BYTE table[256][4]
/* In DirectDraw the palette is a property of the surface, there are no such things as device palettes. */
if(dxVersion <= 7) {
ERR("This code should never get entered for DirectDraw!, expect problems\n");
- return;
- }
-
- /* Direct3D >= 8 palette usage style: P8 textures use device palettes, palette entry format is A8R8G8B8,
- alpha is stored in peFlags and may be used by the app if D3DPTEXTURECAPS_ALPHAPALETTE device
- capability flag is present (wine does advertise this capability) */
- for (i = 0; i < 256; i++) {
- table[i][0] = device->palettes[device->currentPalette][i].peRed;
- table[i][1] = device->palettes[device->currentPalette][i].peGreen;
- table[i][2] = device->palettes[device->currentPalette][i].peBlue;
- table[i][3] = device->palettes[device->currentPalette][i].peFlags;
+ if(index_in_alpha) {
+ /* Guarantees that memory representation remains correct after sysmem<->texture transfers even if
+ there's no palette at this time. */
+ for (i = 0; i < 256; i++) table[i][3] = i;
+ }
+ } else {
+ /* Direct3D >= 8 palette usage style: P8 textures use device palettes, palette entry format is A8R8G8B8,
+ alpha is stored in peFlags and may be used by the app if D3DPTEXTURECAPS_ALPHAPALETTE device
+ capability flag is present (wine does advertise this capability) */
+ for (i = 0; i < 256; i++) {
+ table[i][0] = device->palettes[device->currentPalette][i].peRed;
+ table[i][1] = device->palettes[device->currentPalette][i].peGreen;
+ table[i][2] = device->palettes[device->currentPalette][i].peBlue;
+ table[i][3] = device->palettes[device->currentPalette][i].peFlags;
+ }
}
} else {
TRACE("Using surface palette %p\n", pal);