- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to encode a series of frames from a D3D10Texture2D using the Intel Media SDK. I have the pipeline all setup and that works with test data and I am now trying to transfer data from my D3D10Texture2D to my VPP surface to start processing. I am able to get a DirectX reference to the VPP surface using:
(IDirect3DSurface9 *)_mfxSurfacesVPPIn[nVPPSurfIdx]->Data.MemId
I am now trying to write to this surface from my D3D10Texture2D without using a system copy step and have it all in the GPU. I am trying to do this by creating a texture from the surface and then open this DirectX 9 Texture as a shared resource from my DirectX 10 device.
void fun(IDirect3DSurface9 * pSurface)
{
D3D10_TEXTURE2D_DESC desc;
_sharedTexture->GetDesc(&desc);
// Create D3D9 texture of the surface to copy to
IDirect3DDevice9 * d3d9;
pSurface->GetDevice(&d3d9);
int width = desc.Width;
int height = desc.Height;
HANDLE SharedHandle = NULL;
LPDIRECT3DTEXTURE9 pTexture9 = NULL;
HRESULT hr = d3d9->CreateTexture(width, height, 0, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTexture9, &SharedHandle);
if (SUCCEEDED(hr))
{
IDirect3DSurface9* dest = NULL; // to be our level0 surface of the texture
hr = pTexture9->GetSurfaceLevel(0, &dest);
if (FAILED(hr))
{
return;
}
hr = d3d9->StretchRect(pSurface, NULL, dest, NULL, D3DTEXF_NONE);
if (FAILED(hr))
{
return;
}
// Create a D3D10 reference to our texture
ID3D10Texture2D* destTexture = NULL;
hr = _d3dDevice->OpenSharedResource(SharedHandle, __uuidof(ID3D10Texture2D), (LPVOID*)&destTexture);
if (FAILED(hr))
{
return;
}
if (destTexture != nullptr)
{
// Copy to the shared resource
_d3dDevice->CopyResource(destTexture, _sharedTexture);
}
}
}
At the moment it is failing at the StretchRect function and I am unsure why. I want to continue using DirectX 9 support as I would like to support Windows 7.
Is this the way to go with moving data a DirectX 10 resource to a DirectX 9 resource? Is there some other technique to do this? Any ideas why the above copy of the surfaces is failing?
Link Copied
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page