RECT sr2, dr2, zr2;
int guimode;
+ bool delayedfs;
int ledwidth, ledheight;
int statusbar_hx, statusbar_vx;
struct apmode *apm = picasso_on ? &currprefs.gfx_apmode[APMODE_RTG] : &currprefs.gfx_apmode[APMODE_NATIVE];
// It is recommended to always use the tearing flag when it is supported.
d3d->swapChainDesc.Flags &= ~DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING;
+ // tearing flag is not fullscreen compatible
if (d3d->m_tearingSupport && (d3d->swapChainDesc.SwapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL || d3d->swapChainDesc.SwapEffect == DXGI_SWAP_EFFECT_FLIP_DISCARD) && !apm->gfx_vflip) {
d3d->swapChainDesc.Flags |= DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING;
}
d3d->swapChainDesc.Flags &= ~DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
if (fs) {
d3d->swapChainDesc.Flags |= DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
+ d3d->swapChainDesc.Flags &= ~DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING;
}
d3d->fsSwapChainDesc.Windowed = TRUE;
filterd3didx = picasso_on;
filterd3d = &currprefs.gf[filterd3didx];
+ d3d->delayedfs = false;
+
if (depth != 32 && depth != 16)
return false;
}
}
+static void recheck(struct d3d11struct *d3d)
+{
+ if (d3d->delayedfs) {
+ d3d->delayedfs = false;
+ ShowWindow(d3d->ahwnd, SW_SHOWNORMAL);
+ if (!xxD3D11_init2(d3d->ahwnd, d3d->m_screenWidth, d3d->m_screenHeight, d3d->m_bitmapWidth2, d3d->m_bitmapHeight2, 32, NULL, 1))
+ d3d->invalidmode = true;
+ }
+}
+
static bool xD3D11_alloctexture(int w, int h)
{
struct d3d11struct *d3d = &d3d11data[0];
bool v;
+ recheck(d3d);
+
if (d3d->invalidmode)
return false;
d3d->m_bitmapWidth = w;
{
struct d3d11struct *d3d = &d3d11data[0];
- if (d3d->invalidmode)
+ recheck(d3d);
+
+ if (d3d->invalidmode || !d3d->texture2d)
return NULL;
D3D11_MAPPED_SUBRESOURCE map;
HRESULT hr = d3d->m_deviceContext->Map(d3d->texture2dstaging, 0, D3D11_MAP_WRITE, 0, &map);
write_log(_T("D3D11_resize %d %d %d (%d)\n"), activate, d3d->fsmodechange, d3d->fsmode, d3d->guimode);
+ if (d3d->delayedfs)
+ return;
+
if (d3d->guimode && isfullscreen() > 0)
return;
xD3D11_free(d3d);
ShowWindow(d3d->ahwnd, SW_HIDE);
} else if (guion == 0) {
- ShowWindow(d3d->ahwnd, SW_SHOWNORMAL);
- if (!xxD3D11_init2(d3d->ahwnd, d3d->m_screenWidth, d3d->m_screenHeight, d3d->m_bitmapWidth2, d3d->m_bitmapHeight2, 32, NULL, 1))
- d3d->invalidmode = true;
+ d3d->delayedfs = true;
}
write_log(_T("fs guimode end\n"));
}
static uae_u8 *xD3D_setcursorsurface(int *pitch)
{
struct d3d11struct *d3d = &d3d11data[0];
+ if (!d3d->hwsprite.texture)
+ return NULL;
if (pitch) {
D3D11_MAPPED_SUBRESOURCE map;
HRESULT hr = d3d->m_deviceContext->Map(d3d->hwsprite.texture, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);