st/nine: Fix remaining swapchain tests
Return D3DERR_INVALIDCALL instead of E_POINTER. On error set ppBackBuffer to NULL. Multiple swapchains can only be created in windowed mode as windowed swapchain. Set backbuffer to NULL in NineDevice9_GetBackBuffer, but not in NineSwapChain9_GetBackBuffer. This fixes all WINE's device.c test_swapchain() tests. Signed-off-by: Patrick Rudolph <siro@das-labor.org> Reviewed-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
parent
cbbd3c65cc
commit
f481b9b952
|
@ -710,6 +710,7 @@ NineDevice9_CreateAdditionalSwapChain( struct NineDevice9 *This,
|
|||
This, pPresentationParameters, pSwapChain);
|
||||
|
||||
user_assert(pPresentationParameters, D3DERR_INVALIDCALL);
|
||||
user_assert(tmplt->params.Windowed && pPresentationParameters->Windowed, D3DERR_INVALIDCALL);
|
||||
|
||||
/* TODO: this deserves more tests */
|
||||
if (!pPresentationParameters->hDeviceWindow)
|
||||
|
@ -811,6 +812,8 @@ NineDevice9_GetBackBuffer( struct NineDevice9 *This,
|
|||
IDirect3DSurface9 **ppBackBuffer )
|
||||
{
|
||||
user_assert(ppBackBuffer != NULL, D3DERR_INVALIDCALL);
|
||||
/* return NULL on error */
|
||||
*ppBackBuffer = NULL;
|
||||
user_assert(iSwapChain < This->nswapchains, D3DERR_INVALIDCALL);
|
||||
|
||||
return NineSwapChain9_GetBackBuffer(This->swapchains[iSwapChain],
|
||||
|
|
|
@ -910,8 +910,9 @@ NineSwapChain9_GetBackBuffer( struct NineSwapChain9 *This,
|
|||
DBG("GetBackBuffer: This=%p iBackBuffer=%d Type=%d ppBackBuffer=%p\n",
|
||||
This, iBackBuffer, Type, ppBackBuffer);
|
||||
(void)user_error(Type == D3DBACKBUFFER_TYPE_MONO);
|
||||
/* don't touch ppBackBuffer on error */
|
||||
user_assert(ppBackBuffer != NULL, D3DERR_INVALIDCALL);
|
||||
user_assert(iBackBuffer < This->params.BackBufferCount, D3DERR_INVALIDCALL);
|
||||
user_assert(ppBackBuffer != NULL, E_POINTER);
|
||||
|
||||
NineUnknown_AddRef(NineUnknown(This->buffers[iBackBuffer]));
|
||||
*ppBackBuffer = (IDirect3DSurface9 *)This->buffers[iBackBuffer];
|
||||
|
|
Loading…
Reference in New Issue