gecko-dev/gfx/layers/d3d11/HelpersD3D11.h
David Anderson ce7cc32129 Improve pixel fill statistics in the D3D11 compositor overlay. (bug 1352151 part 6, r=bas)
This introduces two new statistics to the overlay. The first is the ratio of
pixel shader invocations (as determined by the GPU) to the number of pixels we
determined need to be redrawn. The ideal ratio is 1.0, indicating that we
filled every pixel exactly once. Anything over 1.0 indicates overdraw.

We also add the ratio of shaded pixels to window size. This indicates how well
we computed the invalid region, and whether or not we overfilled that
region.

Note that the OpenGL and Basic compositors do not yet query the GPU for
this statistic, so they will estimate shader invocations by the area of
DrawQuad calls.

Finally, we remove the feature where layout can request the most
recent overdraw statistic. It was not implemented on all compositors, and the
only test that used it was disabled.

--HG--
extra : rebase_source : 448a162998921974575a1a988bcfde52c959d3ed
2017-04-10 19:44:46 -07:00

35 lines
1023 B
C++

/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_gfx_layers_d3d11_HelpersD3D11_h
#define mozilla_gfx_layers_d3d11_HelpersD3D11_h
#include <d3d11.h>
#include "mozilla/TimeStamp.h"
namespace mozilla {
namespace layers {
template <typename T> static inline bool
WaitForGPUQuery(ID3D11Device* aDevice, ID3D11DeviceContext* aContext, ID3D11Query* aQuery, T* aOut)
{
TimeStamp start = TimeStamp::Now();
while (aContext->GetData(aQuery, aOut, sizeof(*aOut), 0) != S_OK) {
if (aDevice->GetDeviceRemovedReason() != S_OK) {
return false;
}
if (TimeStamp::Now() - start > TimeDuration::FromSeconds(2)) {
return false;
}
Sleep(0);
}
return true;
}
} // namespace layers
} // namespace gfx
#endif // mozilla_gfx_layers_d3d11_HelpersD3D11_h