diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp')
-rw-r--r-- | gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp new file mode 100644 index 0000000000..2b947d8957 --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp @@ -0,0 +1,148 @@ +// +// Copyright 2015 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// DebugAnnotator11.cpp: D3D11 helpers for adding trace annotations. +// + +#include "libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h" + +#include "libANGLE/renderer/d3d/d3d11/Context11.h" +#include "libANGLE/renderer/d3d/d3d11/Renderer11.h" +#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" + +#include <versionhelpers.h> + +#include "common/system_utils.h" + +namespace rx +{ + +// DebugAnnotator11 implementation +DebugAnnotator11::DebugAnnotator11() {} + +DebugAnnotator11::~DebugAnnotator11() {} + +void DebugAnnotator11::beginEvent(gl::Context *context, + angle::EntryPoint entryPoint, + const char *eventName, + const char *eventMessage) +{ + angle::LoggingAnnotator::beginEvent(context, entryPoint, eventName, eventMessage); + if (!context) + { + return; + } + Renderer11 *renderer11 = GetImplAs<Context11>(context)->getRenderer(); + renderer11->getDebugAnnotatorContext()->beginEvent(entryPoint, eventName, eventMessage); +} + +void DebugAnnotator11::endEvent(gl::Context *context, + const char *eventName, + angle::EntryPoint entryPoint) +{ + angle::LoggingAnnotator::endEvent(context, eventName, entryPoint); + if (!context) + { + return; + } + Renderer11 *renderer11 = GetImplAs<Context11>(context)->getRenderer(); + renderer11->getDebugAnnotatorContext()->endEvent(eventName, entryPoint); +} + +void DebugAnnotator11::setMarker(gl::Context *context, const char *markerName) +{ + angle::LoggingAnnotator::setMarker(context, markerName); + if (!context) + { + return; + } + Renderer11 *renderer11 = GetImplAs<Context11>(context)->getRenderer(); + renderer11->getDebugAnnotatorContext()->setMarker(markerName); +} + +bool DebugAnnotator11::getStatus(const gl::Context *context) +{ + if (!context) + { + return false; + } + Renderer11 *renderer11 = GetImplAs<Context11>(context)->getRenderer(); + return renderer11->getDebugAnnotatorContext()->getStatus(); +} + +// DebugAnnotatorContext11 implemenetation +DebugAnnotatorContext11::DebugAnnotatorContext11() = default; + +DebugAnnotatorContext11::~DebugAnnotatorContext11() = default; + +void DebugAnnotatorContext11::beginEvent(angle::EntryPoint entryPoint, + const char *eventName, + const char *eventMessage) +{ + if (loggingEnabledForThisThread()) + { + std::mbstate_t state = std::mbstate_t(); + std::mbsrtowcs(mWCharMessage, &eventMessage, kMaxMessageLength, &state); + mUserDefinedAnnotation->BeginEvent(mWCharMessage); + } +} + +void DebugAnnotatorContext11::endEvent(const char *eventName, angle::EntryPoint entryPoint) +{ + if (loggingEnabledForThisThread()) + { + mUserDefinedAnnotation->EndEvent(); + } +} + +void DebugAnnotatorContext11::setMarker(const char *markerName) +{ + if (loggingEnabledForThisThread()) + { + std::mbstate_t state = std::mbstate_t(); + std::mbsrtowcs(mWCharMessage, &markerName, kMaxMessageLength, &state); + mUserDefinedAnnotation->SetMarker(mWCharMessage); + } +} + +bool DebugAnnotatorContext11::getStatus() const +{ + if (loggingEnabledForThisThread()) + { + return !!(mUserDefinedAnnotation->GetStatus()); + } + + return false; +} + +bool DebugAnnotatorContext11::loggingEnabledForThisThread() const +{ + return mUserDefinedAnnotation != nullptr && + angle::GetCurrentThreadUniqueId() == mAnnotationThread; +} + +void DebugAnnotatorContext11::initialize(ID3D11DeviceContext *context) +{ +#if !defined(ANGLE_ENABLE_WINDOWS_UWP) + // ID3DUserDefinedAnnotation.GetStatus only works on Windows10 or greater. + // Returning true unconditionally from DebugAnnotatorContext11::getStatus() means + // writing out all compiled shaders to temporary files even if debugging + // tools are not attached. See rx::ShaderD3D::prepareSourceAndReturnOptions. + // If you want debug annotations, you must use Windows 10. + if (IsWindows10OrGreater()) +#endif + { + mAnnotationThread = angle::GetCurrentThreadUniqueId(); + mUserDefinedAnnotation.Attach( + d3d11::DynamicCastComObject<ID3DUserDefinedAnnotation>(context)); + } +} + +void DebugAnnotatorContext11::release() +{ + mUserDefinedAnnotation.Reset(); +} + +} // namespace rx |