I've programmed a streaming texture with the Map method. It works ok with mapFlags set to 0.
Now i'm trying to optimize it with D3D11_MAP_FLAG_DO_NOT_WAIT
But cannot make it work, the map() method returns error code E_INVALIDARG = 0x80070057
Here is how i call map function:
// update texture
D3D11_MAPPED_SUBRESOURCE sub;
HRESULT hr = pImmediateContext->Map(s_pTexture, 0, D3D11_MAP_WRITE_DISCARD, /*D3D11_MAP_FLAG_DO_NOT_WAIT*/ 0 , &sub);
if ( SUCCEEDED( hr ) ) {
memcpy(sub.pData,screen,512*512*4);
pImmediateContext->Unmap(s_pTexture,0);
} else {
if ( hr == D3DERR_WASSTILLDRAWING ) OutputDebugString("D3DERR_WASSTILLDRAWING");
char c[256];
wsprintf(c,"error 0x%x ", hr);
OutputDebugString(c);
}
And the texture creation :
// Create the texture
D3D11_TEXTURE2D_DESC desc;
ZeroMemory(&desc,sizeof(desc));
desc.Width = 512;
desc.Height = 512;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_B8G8R8X8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.MiscFlags = 0;
pd3dDevice->CreateTexture2D( &desc, NULL, &s_pTexture );