|
@@ -5,8 +5,11 @@
|
|
|
#include <algorithm>
|
|
#include <algorithm>
|
|
|
#include <cstddef>
|
|
#include <cstddef>
|
|
|
#include <cstdlib>
|
|
#include <cstdlib>
|
|
|
|
|
+#include <cstring>
|
|
|
#include <memory>
|
|
#include <memory>
|
|
|
|
|
+
|
|
|
#include <glad/glad.h>
|
|
#include <glad/glad.h>
|
|
|
|
|
+
|
|
|
#include "common/assert.h"
|
|
#include "common/assert.h"
|
|
|
#include "common/logging/log.h"
|
|
#include "common/logging/log.h"
|
|
|
#include "common/microprofile.h"
|
|
#include "common/microprofile.h"
|
|
@@ -25,6 +28,24 @@
|
|
|
|
|
|
|
|
namespace OpenGL {
|
|
namespace OpenGL {
|
|
|
|
|
|
|
|
|
|
+/// Returns true if any debug tool is attached
|
|
|
|
|
+bool HasDebugTool() {
|
|
|
|
|
+ const bool nsight = std::getenv("NVTX_INJECTION64_PATH") || std::getenv("NSIGHT_LAUNCHED");
|
|
|
|
|
+ if (nsight) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ GLint num_extensions;
|
|
|
|
|
+ glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
|
|
|
|
|
+ for (GLuint index = 0; index < static_cast<GLuint>(num_extensions); ++index) {
|
|
|
|
|
+ const auto name = reinterpret_cast<const char*>(glGetStringi(GL_EXTENSIONS, index));
|
|
|
|
|
+ if (!std::strcmp(name, "GL_EXT_debug_tool")) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// If the size of this is too small, it ends up creating a soft cap on FPS as the renderer will have
|
|
// If the size of this is too small, it ends up creating a soft cap on FPS as the renderer will have
|
|
|
// to wait on available presentation frames.
|
|
// to wait on available presentation frames.
|
|
|
constexpr std::size_t SWAP_CHAIN_SIZE = 3;
|
|
constexpr std::size_t SWAP_CHAIN_SIZE = 3;
|
|
@@ -56,7 +77,7 @@ public:
|
|
|
std::deque<Frame*> present_queue;
|
|
std::deque<Frame*> present_queue;
|
|
|
Frame* previous_frame{};
|
|
Frame* previous_frame{};
|
|
|
|
|
|
|
|
- FrameMailbox() : has_debug_tool{Device().HasDebugTool()} {
|
|
|
|
|
|
|
+ FrameMailbox() : has_debug_tool{HasDebugTool()} {
|
|
|
for (auto& frame : swap_chain) {
|
|
for (auto& frame : swap_chain) {
|
|
|
free_queue.push(&frame);
|
|
free_queue.push(&frame);
|
|
|
}
|
|
}
|