diff options
author | Patrick Rudolph <siro@das-labor.org> | 2016-08-04 18:38:52 +0200 |
---|---|---|
committer | Jose Fonseca <jfonseca@vmware.com> | 2016-09-21 11:48:49 +0100 |
commit | dc940a3610ebbf54099c709416ba50364d6a8233 (patch) | |
tree | 7087f1064f7003a7e2009ddebc546beb17683404 | |
parent | b35dbe08d201198e614764c502ceb72ce970399b (diff) |
d3dretrace: Dump D3DFORMAT in D3D9 traces
Dump the texture, framebuffer and depth D3DFORMAT.
The format is displayed in qapitrace instead format UNKNOWN.
Tested on D3D9 trace.
Signed-off-by: Patrick Rudolph <siro@das-labor.org>
-rw-r--r-- | retrace/d3d9state_images.cpp | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/retrace/d3d9state_images.cpp b/retrace/d3d9state_images.cpp index 79ad0744..6ceb5149 100644 --- a/retrace/d3d9state_images.cpp +++ b/retrace/d3d9state_images.cpp @@ -40,7 +40,8 @@ namespace d3dstate { static image::Image * getSurfaceImage(IDirect3DDevice9 *pDevice, - IDirect3DSurface9 *pSurface) { + IDirect3DSurface9 *pSurface, + struct StateWriter::ImageDesc &imageDesc) { image::Image *image = NULL; HRESULT hr; @@ -62,13 +63,16 @@ getSurfaceImage(IDirect3DDevice9 *pDevice, pSurface->UnlockRect(); + imageDesc.format = formatToString(Desc.Format); + return image; } static image::Image * getRenderTargetImage(IDirect3DDevice9 *pDevice, - IDirect3DSurface9 *pRenderTarget) { + IDirect3DSurface9 *pRenderTarget, + struct StateWriter::ImageDesc &imageDesc) { HRESULT hr; if (!pRenderTarget) { @@ -91,13 +95,14 @@ getRenderTargetImage(IDirect3DDevice9 *pDevice, return NULL; } - return getSurfaceImage(pDevice, pStagingSurface); + return getSurfaceImage(pDevice, pStagingSurface, imageDesc); } image::Image * getRenderTargetImage(IDirect3DDevice9 *pDevice) { HRESULT hr; + struct StateWriter::ImageDesc imageDesc; com_ptr<IDirect3DSurface9> pRenderTarget; hr = pDevice->GetRenderTarget(0, &pRenderTarget); @@ -106,13 +111,14 @@ getRenderTargetImage(IDirect3DDevice9 *pDevice) { } assert(pRenderTarget); - return getRenderTargetImage(pDevice, pRenderTarget); + return getRenderTargetImage(pDevice, pRenderTarget, imageDesc); } image::Image * getRenderTargetImage(IDirect3DSwapChain9 *pSwapChain) { HRESULT hr; + struct StateWriter::ImageDesc imageDesc; com_ptr<IDirect3DDevice9> pDevice; hr = pSwapChain->GetDevice(&pDevice); @@ -128,7 +134,7 @@ getRenderTargetImage(IDirect3DSwapChain9 *pSwapChain) { } assert(pBackBuffer); - return getRenderTargetImage(pDevice, pBackBuffer); + return getRenderTargetImage(pDevice, pBackBuffer, imageDesc); } @@ -136,7 +142,8 @@ static image::Image * getTextureImage(IDirect3DDevice9 *pDevice, IDirect3DBaseTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, - UINT Level) + UINT Level, + struct StateWriter::ImageDesc &imageDesc) { HRESULT hr; @@ -170,10 +177,10 @@ getTextureImage(IDirect3DDevice9 *pDevice, if (Desc.Pool != D3DPOOL_DEFAULT || Desc.Usage & D3DUSAGE_DYNAMIC) { // Lockable texture - return getSurfaceImage(pDevice, pSurface); + return getSurfaceImage(pDevice, pSurface, imageDesc); } else if (Desc.Usage & D3DUSAGE_RENDERTARGET) { // Rendertarget texture - return getRenderTargetImage(pDevice, pSurface); + return getRenderTargetImage(pDevice, pSurface, imageDesc); } else { // D3D constraints are such there is not much else that can be done. return NULL; @@ -208,7 +215,8 @@ dumpTextures(StateWriter &writer, IDirect3DDevice9 *pDevice) for (DWORD Face = 0; Face < NumFaces; ++Face) { for (DWORD Level = 0; Level < NumLevels; ++Level) { image::Image *image; - image = getTextureImage(pDevice, pTexture, static_cast<D3DCUBEMAP_FACES>(Face), Level); + struct StateWriter::ImageDesc imageDesc; + image = getTextureImage(pDevice, pTexture, static_cast<D3DCUBEMAP_FACES>(Face), Level, imageDesc); if (image) { char label[128]; if (Type == D3DRTYPE_CUBETEXTURE) { @@ -217,7 +225,7 @@ dumpTextures(StateWriter &writer, IDirect3DDevice9 *pDevice) _snprintf(label, sizeof label, "PS_RESOURCE_%lu_LEVEL_%lu", Stage, Level); } writer.beginMember(label); - writer.writeImage(image); + writer.writeImage(image, imageDesc); writer.endMember(); // PS_RESOURCE_* delete image; } @@ -253,12 +261,13 @@ dumpFramebuffer(StateWriter &writer, IDirect3DDevice9 *pDevice) } image::Image *image; - image = getRenderTargetImage(pDevice, pRenderTarget); + struct StateWriter::ImageDesc imageDesc; + image = getRenderTargetImage(pDevice, pRenderTarget, imageDesc); if (image) { char label[64]; _snprintf(label, sizeof label, "RENDER_TARGET_%u", i); writer.beginMember(label); - writer.writeImage(image); + writer.writeImage(image, imageDesc); writer.endMember(); // RENDER_TARGET_* delete image; } @@ -268,11 +277,12 @@ dumpFramebuffer(StateWriter &writer, IDirect3DDevice9 *pDevice) hr = pDevice->GetDepthStencilSurface(&pDepthStencil); if (SUCCEEDED(hr) && pDepthStencil) { image::Image *image; - image = getSurfaceImage(pDevice, pDepthStencil); + struct StateWriter::ImageDesc imageDesc; + image = getSurfaceImage(pDevice, pDepthStencil, imageDesc); if (image) { writer.beginMember("DEPTH_STENCIL"); - writer.writeImage(image); - writer.endMember(); // RENDER_TARGET_* + writer.writeImage(image, imageDesc); + writer.endMember(); // DEPTH_STENCIL delete image; } } |