void dumpFramebuffer(JSONWriter &json, ID3D11DeviceContext *pDevice) { json.beginMember("framebuffer"); json.beginObject(); ID3D11RenderTargetView *pRenderTargetViews[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT]; ID3D11DepthStencilView *pDepthStencilView; pDevice->OMGetRenderTargets(ARRAYSIZE(pRenderTargetViews), pRenderTargetViews, &pDepthStencilView); for (UINT i = 0; i < ARRAYSIZE(pRenderTargetViews); ++i) { if (!pRenderTargetViews[i]) { continue; } image::Image *image; DXGI_FORMAT dxgiFormat; image = getRenderTargetViewImage(pDevice, pRenderTargetViews[i], &dxgiFormat); if (image) { char label[64]; _snprintf(label, sizeof label, "RENDER_TARGET_%u", i); JSONWriter::ImageDesc imgDesc; imgDesc.depth = 1; imgDesc.format = getDXGIFormatName(dxgiFormat); json.beginMember(label); json.writeImage(image, imgDesc); json.endMember(); // RENDER_TARGET_* delete image; } pRenderTargetViews[i]->Release(); } if (pDepthStencilView) { image::Image *image; DXGI_FORMAT dxgiFormat; image = getDepthStencilViewImage(pDevice, pDepthStencilView, &dxgiFormat); if (image) { JSONWriter::ImageDesc imgDesc; imgDesc.depth = 1; imgDesc.format = getDXGIFormatName(dxgiFormat); json.beginMember("DEPTH_STENCIL"); json.writeImage(image, imgDesc); json.endMember(); delete image; } pDepthStencilView->Release(); } json.endObject(); json.endMember(); // framebuffer }
void dumpFramebuffer(JSONWriter &json, IDirect3DDevice9 *pDevice) { HRESULT hr; json.beginMember("framebuffer"); json.beginObject(); D3DCAPS9 Caps; pDevice->GetDeviceCaps(&Caps); for (UINT i = 0; i < Caps.NumSimultaneousRTs; ++i) { IDirect3DSurface9 *pRenderTarget = NULL; hr = pDevice->GetRenderTarget(i, &pRenderTarget); if (FAILED(hr)) { continue; } if (!pRenderTarget) { continue; } image::Image *image; image = getRenderTargetImage(pDevice, pRenderTarget); if (image) { char label[64]; _snprintf(label, sizeof label, "RENDER_TARGET_%u", i); json.beginMember(label); json.writeImage(image, "UNKNOWN"); json.endMember(); // RENDER_TARGET_* } pRenderTarget->Release(); } IDirect3DSurface9 *pDepthStencil = NULL; hr = pDevice->GetDepthStencilSurface(&pDepthStencil); if (SUCCEEDED(hr) && pDepthStencil) { image::Image *image; image = getSurfaceImage(pDevice, pDepthStencil); if (image) { json.beginMember("DEPTH_STENCIL"); json.writeImage(image, "UNKNOWN"); json.endMember(); // RENDER_TARGET_* } } json.endObject(); json.endMember(); // framebuffer }
void dumpFramebuffer(JSONWriter &json, ID3D10Device *pDevice) { json.beginMember("framebuffer"); json.beginObject(); ID3D10RenderTargetView *pRenderTargetViews[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT]; ID3D10DepthStencilView *pDepthStencilView; pDevice->OMGetRenderTargets(ARRAYSIZE(pRenderTargetViews), pRenderTargetViews, &pDepthStencilView); for (UINT i = 0; i < ARRAYSIZE(pRenderTargetViews); ++i) { if (!pRenderTargetViews[i]) { continue; } image::Image *image; image = getRenderTargetViewImage(pDevice, pRenderTargetViews[i]); if (image) { char label[64]; _snprintf(label, sizeof label, "RENDER_TARGET_%u", i); json.beginMember(label); json.writeImage(image); json.endMember(); // RENDER_TARGET_* delete image; } pRenderTargetViews[i]->Release(); } if (pDepthStencilView) { image::Image *image; image = getDepthStencilViewImage(pDevice, pDepthStencilView); if (image) { json.beginMember("DEPTH_STENCIL"); json.writeImage(image); json.endMember(); delete image; } pDepthStencilView->Release(); } json.endObject(); json.endMember(); // framebuffer }
void dumpFramebuffer(JSONWriter &json, IDirect3DDevice7 *pDevice) { HRESULT hr; json.beginMember("framebuffer"); json.beginObject(); com_ptr<IDirectDrawSurface7> pRenderTarget; hr = pDevice->GetRenderTarget(&pRenderTarget); if (SUCCEEDED(hr) && pRenderTarget) { image::Image *image; image = getSurfaceImage(pDevice, pRenderTarget); if (image) { json.beginMember("RENDER_TARGET_0"); json.writeImage(image); json.endMember(); // RENDER_TARGET_* } // Search for a depth-stencil attachment DDSCAPS2 ddsCaps; ZeroMemory(&ddsCaps, sizeof ddsCaps); ddsCaps.dwCaps = DDSCAPS_ZBUFFER; com_ptr<IDirectDrawSurface7> pDepthStencil; hr = pRenderTarget->GetAttachedSurface(&ddsCaps, &pDepthStencil); if (SUCCEEDED(hr) && pDepthStencil) { std::cerr << "found ZS!!\n"; image = getSurfaceImage(pDevice, pDepthStencil); if (image) { json.beginMember("DEPTH_STENCIL"); json.writeImage(image); json.endMember(); // DEPTH_STENCIL } } } json.endObject(); json.endMember(); // framebuffer }
void dumpTextures(JSONWriter &json, IDirect3DDevice9 *pDevice) { HRESULT hr; json.beginMember("textures"); json.beginObject(); for (DWORD Stage = 0; Stage < 16; ++Stage) { com_ptr<IDirect3DBaseTexture9> pTexture; hr = pDevice->GetTexture(Stage, &pTexture); if (FAILED(hr)) { continue; } if (!pTexture) { continue; } D3DRESOURCETYPE Type = pTexture->GetType(); DWORD NumFaces = Type == D3DRTYPE_CUBETEXTURE ? 6 : 1; DWORD NumLevels = pTexture->GetLevelCount(); 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); if (image) { char label[128]; if (Type == D3DRTYPE_CUBETEXTURE) { _snprintf(label, sizeof label, "PS_RESOURCE_%lu_FACE_%lu_LEVEL_%lu", Stage, Face, Level); } else { _snprintf(label, sizeof label, "PS_RESOURCE_%lu_LEVEL_%lu", Stage, Level); } json.beginMember(label); json.writeImage(image); json.endMember(); // PS_RESOURCE_* } } } } json.endObject(); json.endMember(); // textures }
static void dumpShaderResourceViewImage(JSONWriter &json, ID3D10Device *pDevice, ID3D10ShaderResourceView *pShaderResourceView, const char *shader, UINT stage) { if (!pShaderResourceView) { return; } com_ptr<ID3D10Resource> pResource; pShaderResourceView->GetResource(&pResource); assert(pResource); D3D10_SHADER_RESOURCE_VIEW_DESC Desc; pShaderResourceView->GetDesc(&Desc); UINT MipSlice = 0; UINT FirstArraySlice = 0; UINT ArraySize = 1; switch (Desc.ViewDimension) { case D3D10_SRV_DIMENSION_BUFFER: break; case D3D10_SRV_DIMENSION_TEXTURE1D: MipSlice = Desc.Texture1D.MostDetailedMip; break; case D3D10_SRV_DIMENSION_TEXTURE1DARRAY: MipSlice = Desc.Texture1DArray.MostDetailedMip; FirstArraySlice = Desc.Texture1DArray.FirstArraySlice; ArraySize = Desc.Texture1DArray.ArraySize; break; case D3D10_SRV_DIMENSION_TEXTURE2D: MipSlice = Desc.Texture2D.MostDetailedMip; break; case D3D10_SRV_DIMENSION_TEXTURE2DARRAY: MipSlice = Desc.Texture2DArray.MostDetailedMip; FirstArraySlice = Desc.Texture2DArray.FirstArraySlice; ArraySize = Desc.Texture2DArray.ArraySize; break; case D3D10_SRV_DIMENSION_TEXTURE2DMS: break; case D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY: FirstArraySlice = Desc.Texture2DMSArray.FirstArraySlice; ArraySize = Desc.Texture2DMSArray.ArraySize; break; case D3D10_SRV_DIMENSION_TEXTURE3D: MipSlice = Desc.Texture3D.MostDetailedMip; break; case D3D10_SRV_DIMENSION_TEXTURECUBE: MipSlice = Desc.TextureCube.MostDetailedMip; ArraySize = 6; break; case D3D10_SRV_DIMENSION_UNKNOWN: default: assert(0); return; } for (UINT ArraySlice = FirstArraySlice; ArraySlice < FirstArraySlice + ArraySize; ++ArraySlice) { image::Image *image; image = getSubResourceImage(pDevice, pResource, Desc.Format, ArraySlice, MipSlice); if (image) { char label[64]; _snprintf(label, sizeof label, "%s_RESOURCE_%u_ARRAY_%u_LEVEL_%u", shader, stage, ArraySlice, MipSlice); json.beginMember(label); json.writeImage(image); json.endMember(); // *_RESOURCE_* delete image; } } }