Allow the palette to be set and retrieved.

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 6ed7f97..d4ba7a4 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4463,25 +4463,62 @@
 
 HRESULT  WINAPI  IWineD3DDeviceImpl_SetPaletteEntries(IWineD3DDevice *iface, UINT PaletteNumber, CONST PALETTEENTRY* pEntries) {
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
-    FIXME("(%p) : stub\n", This);
+    int j;
+    TRACE("(%p) : PaletteNumber %u\n", This, PaletteNumber);
+    if ( PaletteNumber < 0 || PaletteNumber >= MAX_PALETTES) {
+        WARN("(%p) : (%u) Out of range 0-%u, returning Invalid Call\n", This, PaletteNumber, MAX_PALETTES);
+        return D3DERR_INVALIDCALL;
+    }
+    for (j = 0; j < 256; ++j) {
+        This->palettes[PaletteNumber][j].peRed   = pEntries[j].peRed;
+        This->palettes[PaletteNumber][j].peGreen = pEntries[j].peGreen;
+        This->palettes[PaletteNumber][j].peBlue  = pEntries[j].peBlue;
+        This->palettes[PaletteNumber][j].peFlags = pEntries[j].peFlags;
+    }
+    TRACE("(%p) : returning\n", This);
     return D3D_OK;
 }
 
 HRESULT  WINAPI  IWineD3DDeviceImpl_GetPaletteEntries(IWineD3DDevice *iface, UINT PaletteNumber, PALETTEENTRY* pEntries) {
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
-    FIXME("(%p) : stub\n", This);
+    int j;
+    TRACE("(%p) : PaletteNumber %u\n", This, PaletteNumber);
+    if ( PaletteNumber < 0 || PaletteNumber >= MAX_PALETTES) {
+        WARN("(%p) : (%u) Out of range 0-%u, returning Invalid Call\n", This, PaletteNumber, MAX_PALETTES);
+        return D3DERR_INVALIDCALL;
+    }
+    for (j = 0; j < 256; ++j) {
+        pEntries[j].peRed   = This->palettes[PaletteNumber][j].peRed;
+        pEntries[j].peGreen = This->palettes[PaletteNumber][j].peGreen;
+        pEntries[j].peBlue  = This->palettes[PaletteNumber][j].peBlue;
+        pEntries[j].peFlags = This->palettes[PaletteNumber][j].peFlags;
+    }
+    TRACE("(%p) : returning\n", This);
     return D3D_OK;
 }
 
 HRESULT  WINAPI  IWineD3DDeviceImpl_SetCurrentTexturePalette(IWineD3DDevice *iface, UINT PaletteNumber) {
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
-    FIXME("(%p) : stub\n", This);
+    TRACE("(%p) : PaletteNumber %u\n", This, PaletteNumber);
+    if ( PaletteNumber < 0 || PaletteNumber >= MAX_PALETTES) {
+        WARN("(%p) : (%u) Out of range 0-%u, returning Invalid Call\n", This, PaletteNumber, MAX_PALETTES);
+        return D3DERR_INVALIDCALL;
+    }
+    /*TODO: stateblocks */
+    This->currentPalette = PaletteNumber;
+    TRACE("(%p) : returning\n", This);
     return D3D_OK;
 }
 
 HRESULT  WINAPI  IWineD3DDeviceImpl_GetCurrentTexturePalette(IWineD3DDevice *iface, UINT* PaletteNumber) {
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
-    FIXME("(%p) : stub\n", This);
+    if (PaletteNumber == NULL) {
+        WARN("(%p) : returning Invalid Call\n", This);
+        return D3DERR_INVALIDCALL;
+    }
+    /*TODO: stateblocks */
+    *PaletteNumber = This->currentPalette;
+    TRACE("(%p) : returning  %u\n", This, *PaletteNumber);
     return D3D_OK;
 }