mirror of
https://github.com/JesseTG/melonds-ds.git
synced 2024-11-23 14:40:04 +00:00
Rearrange some Tracy-related files
- This way, changes to `OpenGlTracyCapture` don't invalidate the entire ccache
This commit is contained in:
parent
50d1294fe8
commit
6b40c4518a
@ -96,9 +96,12 @@ add_library(melondsds_libretro ${LIBRARY_TYPE}
|
|||||||
sram.cpp
|
sram.cpp
|
||||||
sram.hpp
|
sram.hpp
|
||||||
tracy.hpp
|
tracy.hpp
|
||||||
|
tracy/client.hpp
|
||||||
|
tracy/opengl.hpp
|
||||||
utils.cpp
|
utils.cpp
|
||||||
utils.hpp
|
utils.hpp
|
||||||
../pntr/pntr.c
|
../pntr/pntr.c
|
||||||
|
tracy/memory.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(melondsds_libretro SYSTEM PUBLIC
|
target_include_directories(melondsds_libretro SYSTEM PUBLIC
|
||||||
@ -175,7 +178,11 @@ if (HAVE_NETWORKING)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (TRACY_ENABLE)
|
if (TRACY_ENABLE)
|
||||||
target_sources(melondsds_libretro PRIVATE tracy.cpp)
|
target_sources(melondsds_libretro PRIVATE tracy/memory.cpp)
|
||||||
|
|
||||||
|
if (HAVE_OPENGL OR HAVE_OPENGLES)
|
||||||
|
target_sources(melondsds_libretro PRIVATE tracy/opengl.cpp)
|
||||||
|
endif()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (HAVE_OPENGL OR HAVE_OPENGLES)
|
if (HAVE_OPENGL OR HAVE_OPENGLES)
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#ifdef HAVE_TRACY
|
#ifdef HAVE_TRACY
|
||||||
#include "tracy.hpp"
|
#include "tracy.hpp"
|
||||||
|
#include "tracy/opengl.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace MelonDsDs {
|
namespace MelonDsDs {
|
||||||
|
@ -17,158 +17,9 @@
|
|||||||
#ifndef MELONDS_DS_TRACY_HPP
|
#ifndef MELONDS_DS_TRACY_HPP
|
||||||
#define MELONDS_DS_TRACY_HPP
|
#define MELONDS_DS_TRACY_HPP
|
||||||
|
|
||||||
#if defined(__clang__) || defined(__GNUC__)
|
#include "tracy/client.hpp"
|
||||||
# define TracyFunction __PRETTY_FUNCTION__
|
// All Tracy-related declarations were originally in this header,
|
||||||
#elif defined(_MSC_VER)
|
// but I moved them to a new directory to keep the codebase clean.
|
||||||
# define TracyFunction __FUNCSIG__
|
// This file still exists to keep the diff smaller.
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_TRACY
|
|
||||||
|
|
||||||
#include <tracy/Tracy.hpp>
|
|
||||||
#else
|
|
||||||
#define ZoneNamed(x,y)
|
|
||||||
#define ZoneNamedN(x,y,z)
|
|
||||||
#define ZoneNamedC(x,y,z)
|
|
||||||
#define ZoneNamedNC(x,y,z,w)
|
|
||||||
|
|
||||||
#define ZoneTransient(x,y)
|
|
||||||
#define ZoneTransientN(x,y,z)
|
|
||||||
|
|
||||||
#define ZoneScoped
|
|
||||||
#define ZoneScopedN(x)
|
|
||||||
#define ZoneScopedC(x)
|
|
||||||
#define ZoneScopedNC(x,y)
|
|
||||||
|
|
||||||
#define ZoneText(x,y)
|
|
||||||
#define ZoneTextV(x,y,z)
|
|
||||||
#define ZoneName(x,y)
|
|
||||||
#define ZoneNameV(x,y,z)
|
|
||||||
#define ZoneColor(x)
|
|
||||||
#define ZoneColorV(x,y)
|
|
||||||
#define ZoneValue(x)
|
|
||||||
#define ZoneValueV(x,y)
|
|
||||||
#define ZoneIsActive false
|
|
||||||
#define ZoneIsActiveV(x) false
|
|
||||||
|
|
||||||
#define FrameMark
|
|
||||||
#define FrameMarkNamed(x)
|
|
||||||
#define FrameMarkStart(x)
|
|
||||||
#define FrameMarkEnd(x)
|
|
||||||
|
|
||||||
#define FrameImage(x,y,z,w,a)
|
|
||||||
|
|
||||||
#define TracyLockable( type, varname ) type varname
|
|
||||||
#define TracyLockableN( type, varname, desc ) type varname
|
|
||||||
#define TracySharedLockable( type, varname ) type varname
|
|
||||||
#define TracySharedLockableN( type, varname, desc ) type varname
|
|
||||||
#define LockableBase( type ) type
|
|
||||||
#define SharedLockableBase( type ) type
|
|
||||||
#define LockMark(x) (void)x
|
|
||||||
#define LockableName(x,y,z)
|
|
||||||
|
|
||||||
#define TracyPlot(x,y)
|
|
||||||
#define TracyPlotConfig(x,y,z,w,a)
|
|
||||||
|
|
||||||
#define TracyMessage(x,y)
|
|
||||||
#define TracyMessageL(x)
|
|
||||||
#define TracyMessageC(x,y,z)
|
|
||||||
#define TracyMessageLC(x,y)
|
|
||||||
#define TracyAppInfo(x,y)
|
|
||||||
|
|
||||||
#define TracyAlloc(x,y)
|
|
||||||
#define TracyFree(x)
|
|
||||||
#define TracySecureAlloc(x,y)
|
|
||||||
#define TracySecureFree(x)
|
|
||||||
|
|
||||||
#define TracyAllocN(x,y,z)
|
|
||||||
#define TracyFreeN(x,y)
|
|
||||||
#define TracySecureAllocN(x,y,z)
|
|
||||||
#define TracySecureFreeN(x,y)
|
|
||||||
|
|
||||||
#define ZoneNamedS(x,y,z)
|
|
||||||
#define ZoneNamedNS(x,y,z,w)
|
|
||||||
#define ZoneNamedCS(x,y,z,w)
|
|
||||||
#define ZoneNamedNCS(x,y,z,w,a)
|
|
||||||
|
|
||||||
#define ZoneTransientS(x,y,z)
|
|
||||||
#define ZoneTransientNS(x,y,z,w)
|
|
||||||
|
|
||||||
#define ZoneScopedS(x)
|
|
||||||
#define ZoneScopedNS(x,y)
|
|
||||||
#define ZoneScopedCS(x,y)
|
|
||||||
#define ZoneScopedNCS(x,y,z)
|
|
||||||
|
|
||||||
#define TracyAllocS(x,y,z)
|
|
||||||
#define TracyFreeS(x,y)
|
|
||||||
#define TracySecureAllocS(x,y,z)
|
|
||||||
#define TracySecureFreeS(x,y)
|
|
||||||
|
|
||||||
#define TracyAllocNS(x,y,z,w)
|
|
||||||
#define TracyFreeNS(x,y,z)
|
|
||||||
#define TracySecureAllocNS(x,y,z,w)
|
|
||||||
#define TracySecureFreeNS(x,y,z)
|
|
||||||
|
|
||||||
#define TracyMessageS(x,y,z)
|
|
||||||
#define TracyMessageLS(x,y)
|
|
||||||
#define TracyMessageCS(x,y,z,w)
|
|
||||||
#define TracyMessageLCS(x,y,z)
|
|
||||||
|
|
||||||
#define TracySourceCallbackRegister(x,y)
|
|
||||||
#define TracyParameterRegister(x,y)
|
|
||||||
#define TracyParameterSetup(x,y,z,w)
|
|
||||||
#define TracyIsConnected false
|
|
||||||
#define TracySetProgramName(x)
|
|
||||||
|
|
||||||
#define TracyFiberEnter(x)
|
|
||||||
#define TracyFiberLeave
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(HAVE_TRACY) && (defined(HAVE_OPENGL) || defined(HAVE_OPENGLES))
|
|
||||||
#include <array>
|
|
||||||
#include <queue>
|
|
||||||
|
|
||||||
#include "PlatformOGLPrivate.h"
|
|
||||||
#include <tracy/TracyOpenGL.hpp>
|
|
||||||
|
|
||||||
namespace MelonDsDs {
|
|
||||||
/// \brief Class for capturing OpenGL frames for Tracy.
|
|
||||||
/// Suitable for both OpenGL renderers.
|
|
||||||
class OpenGlTracyCapture {
|
|
||||||
public:
|
|
||||||
OpenGlTracyCapture();
|
|
||||||
~OpenGlTracyCapture() noexcept;
|
|
||||||
|
|
||||||
// Copying the OpenGL objects is too much of a hassle.
|
|
||||||
OpenGlTracyCapture(const OpenGlTracyCapture&) = delete;
|
|
||||||
OpenGlTracyCapture& operator=(const OpenGlTracyCapture&) = delete;
|
|
||||||
OpenGlTracyCapture(OpenGlTracyCapture&&) = delete;
|
|
||||||
OpenGlTracyCapture& operator=(OpenGlTracyCapture&&) = delete;
|
|
||||||
void CaptureFrame(float scale) noexcept;
|
|
||||||
private:
|
|
||||||
std::array<GLuint, 4> _tracyTextures;
|
|
||||||
std::array<GLuint, 4> _tracyFbos;
|
|
||||||
std::array<GLuint, 4> _tracyPbos;
|
|
||||||
std::array<GLsync, 4> _tracyFences;
|
|
||||||
int _tracyIndex = 0;
|
|
||||||
std::queue<int> _tracyQueue;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define TracyGpuContext
|
|
||||||
#define TracyGpuContextName(x,y)
|
|
||||||
#define TracyGpuNamedZone(x,y,z)
|
|
||||||
#define TracyGpuNamedZoneC(x,y,z,w)
|
|
||||||
#define TracyGpuZone(x)
|
|
||||||
#define TracyGpuZoneC(x,y)
|
|
||||||
#define TracyGpuZoneTransient(x,y,z)
|
|
||||||
#define TracyGpuCollect
|
|
||||||
|
|
||||||
#define TracyGpuNamedZoneS(x,y,z,w)
|
|
||||||
#define TracyGpuNamedZoneCS(x,y,z,w,a)
|
|
||||||
#define TracyGpuZoneS(x,y)
|
|
||||||
#define TracyGpuZoneCS(x,y,z)
|
|
||||||
#define TracyGpuZoneTransientS(x,y,z,w)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif //MELONDS_DS_TRACY_HPP
|
#endif //MELONDS_DS_TRACY_HPP
|
||||||
|
144
src/libretro/tracy/client.hpp
Normal file
144
src/libretro/tracy/client.hpp
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2024 Jesse Talavera
|
||||||
|
|
||||||
|
melonDS DS is free software: you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
melonDS DS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with melonDS DS. If not, see http://www.gnu.org/licenses/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__clang__) || defined(__GNUC__)
|
||||||
|
# define TracyFunction __PRETTY_FUNCTION__
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# define TracyFunction __FUNCSIG__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_TRACY
|
||||||
|
#include <tracy/Tracy.hpp>
|
||||||
|
#else
|
||||||
|
#define ZoneNamed(x,y)
|
||||||
|
#define ZoneNamedN(x,y,z)
|
||||||
|
#define ZoneNamedC(x,y,z)
|
||||||
|
#define ZoneNamedNC(x,y,z,w)
|
||||||
|
|
||||||
|
#define ZoneTransient(x,y)
|
||||||
|
#define ZoneTransientN(x,y,z)
|
||||||
|
|
||||||
|
#define ZoneScoped
|
||||||
|
#define ZoneScopedN(x)
|
||||||
|
#define ZoneScopedC(x)
|
||||||
|
#define ZoneScopedNC(x,y)
|
||||||
|
|
||||||
|
#define ZoneText(x,y)
|
||||||
|
#define ZoneTextV(x,y,z)
|
||||||
|
#define ZoneName(x,y)
|
||||||
|
#define ZoneNameV(x,y,z)
|
||||||
|
#define ZoneColor(x)
|
||||||
|
#define ZoneColorV(x,y)
|
||||||
|
#define ZoneValue(x)
|
||||||
|
#define ZoneValueV(x,y)
|
||||||
|
#define ZoneIsActive false
|
||||||
|
#define ZoneIsActiveV(x) false
|
||||||
|
|
||||||
|
#define FrameMark
|
||||||
|
#define FrameMarkNamed(x)
|
||||||
|
#define FrameMarkStart(x)
|
||||||
|
#define FrameMarkEnd(x)
|
||||||
|
|
||||||
|
#define FrameImage(x,y,z,w,a)
|
||||||
|
|
||||||
|
#define TracyLockable( type, varname ) type varname
|
||||||
|
#define TracyLockableN( type, varname, desc ) type varname
|
||||||
|
#define TracySharedLockable( type, varname ) type varname
|
||||||
|
#define TracySharedLockableN( type, varname, desc ) type varname
|
||||||
|
#define LockableBase( type ) type
|
||||||
|
#define SharedLockableBase( type ) type
|
||||||
|
#define LockMark(x) (void)x
|
||||||
|
#define LockableName(x,y,z)
|
||||||
|
|
||||||
|
#define TracyPlot(x,y)
|
||||||
|
#define TracyPlotConfig(x,y,z,w,a)
|
||||||
|
|
||||||
|
#define TracyMessage(x,y)
|
||||||
|
#define TracyMessageL(x)
|
||||||
|
#define TracyMessageC(x,y,z)
|
||||||
|
#define TracyMessageLC(x,y)
|
||||||
|
#define TracyAppInfo(x,y)
|
||||||
|
|
||||||
|
#define TracyAlloc(x,y)
|
||||||
|
#define TracyFree(x)
|
||||||
|
#define TracySecureAlloc(x,y)
|
||||||
|
#define TracySecureFree(x)
|
||||||
|
|
||||||
|
#define TracyAllocN(x,y,z)
|
||||||
|
#define TracyFreeN(x,y)
|
||||||
|
#define TracySecureAllocN(x,y,z)
|
||||||
|
#define TracySecureFreeN(x,y)
|
||||||
|
|
||||||
|
#define ZoneNamedS(x,y,z)
|
||||||
|
#define ZoneNamedNS(x,y,z,w)
|
||||||
|
#define ZoneNamedCS(x,y,z,w)
|
||||||
|
#define ZoneNamedNCS(x,y,z,w,a)
|
||||||
|
|
||||||
|
#define ZoneTransientS(x,y,z)
|
||||||
|
#define ZoneTransientNS(x,y,z,w)
|
||||||
|
|
||||||
|
#define ZoneScopedS(x)
|
||||||
|
#define ZoneScopedNS(x,y)
|
||||||
|
#define ZoneScopedCS(x,y)
|
||||||
|
#define ZoneScopedNCS(x,y,z)
|
||||||
|
|
||||||
|
#define TracyAllocS(x,y,z)
|
||||||
|
#define TracyFreeS(x,y)
|
||||||
|
#define TracySecureAllocS(x,y,z)
|
||||||
|
#define TracySecureFreeS(x,y)
|
||||||
|
|
||||||
|
#define TracyAllocNS(x,y,z,w)
|
||||||
|
#define TracyFreeNS(x,y,z)
|
||||||
|
#define TracySecureAllocNS(x,y,z,w)
|
||||||
|
#define TracySecureFreeNS(x,y,z)
|
||||||
|
|
||||||
|
#define TracyMessageS(x,y,z)
|
||||||
|
#define TracyMessageLS(x,y)
|
||||||
|
#define TracyMessageCS(x,y,z,w)
|
||||||
|
#define TracyMessageLCS(x,y,z)
|
||||||
|
|
||||||
|
#define TracySourceCallbackRegister(x,y)
|
||||||
|
#define TracyParameterRegister(x,y)
|
||||||
|
#define TracyParameterSetup(x,y,z,w)
|
||||||
|
#define TracyIsConnected false
|
||||||
|
#define TracySetProgramName(x)
|
||||||
|
|
||||||
|
#define TracyFiberEnter(x)
|
||||||
|
#define TracyFiberLeave
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_TRACY) && (defined(HAVE_OPENGL) || defined(HAVE_OPENGLES))
|
||||||
|
#include "PlatformOGLPrivate.h"
|
||||||
|
#include <tracy/TracyOpenGL.hpp>
|
||||||
|
#else
|
||||||
|
#define TracyGpuContext
|
||||||
|
#define TracyGpuContextName(x,y)
|
||||||
|
#define TracyGpuNamedZone(x,y,z)
|
||||||
|
#define TracyGpuNamedZoneC(x,y,z,w)
|
||||||
|
#define TracyGpuZone(x)
|
||||||
|
#define TracyGpuZoneC(x,y)
|
||||||
|
#define TracyGpuZoneTransient(x,y,z)
|
||||||
|
#define TracyGpuCollect
|
||||||
|
|
||||||
|
#define TracyGpuNamedZoneS(x,y,z,w)
|
||||||
|
#define TracyGpuNamedZoneCS(x,y,z,w,a)
|
||||||
|
#define TracyGpuZoneS(x,y)
|
||||||
|
#define TracyGpuZoneCS(x,y,z)
|
||||||
|
#define TracyGpuZoneTransientS(x,y,z,w)
|
||||||
|
#endif
|
40
src/libretro/tracy/memory.cpp
Normal file
40
src/libretro/tracy/memory.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2024 Jesse Talavera
|
||||||
|
|
||||||
|
melonDS DS is free software: you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
melonDS DS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with melonDS DS. If not, see http://www.gnu.org/licenses/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <tracy/Tracy.hpp>
|
||||||
|
|
||||||
|
// Defining these functions in the global scope
|
||||||
|
// overrides operator new and operator delete
|
||||||
|
// for all linked translation units.
|
||||||
|
|
||||||
|
void* operator new(std::size_t count)
|
||||||
|
{
|
||||||
|
if (count == 0)
|
||||||
|
++count; // avoid std::malloc(0) which may return nullptr on success
|
||||||
|
|
||||||
|
if (void *ptr = std::malloc(count)) {
|
||||||
|
TracySecureAlloc(ptr, count);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw std::bad_alloc{}; // required by [new.delete.single]/3
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete(void* ptr) noexcept
|
||||||
|
{
|
||||||
|
TracySecureFree(ptr);
|
||||||
|
std::free(ptr);
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2023 Jesse Talavera-Greenberg
|
Copyright 2024 Jesse Talavera
|
||||||
|
|
||||||
melonDS DS is free software: you can redistribute it and/or modify it under
|
melonDS DS is free software: you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free
|
the terms of the GNU General Public License as published by the Free
|
||||||
@ -14,32 +14,9 @@
|
|||||||
with melonDS DS. If not, see http://www.gnu.org/licenses/.
|
with melonDS DS. If not, see http://www.gnu.org/licenses/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "tracy.hpp"
|
#include "opengl.hpp"
|
||||||
|
|
||||||
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
|
|
||||||
#include "screenlayout.hpp"
|
#include "screenlayout.hpp"
|
||||||
#endif
|
|
||||||
|
|
||||||
void* operator new(std::size_t count)
|
|
||||||
{
|
|
||||||
if (count == 0)
|
|
||||||
++count; // avoid std::malloc(0) which may return nullptr on success
|
|
||||||
|
|
||||||
if (void *ptr = std::malloc(count)) {
|
|
||||||
TracySecureAlloc(ptr, count);
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw std::bad_alloc{}; // required by [new.delete.single]/3
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator delete(void* ptr) noexcept
|
|
||||||
{
|
|
||||||
TracySecureFree(ptr);
|
|
||||||
std::free(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
|
|
||||||
MelonDsDs::OpenGlTracyCapture::OpenGlTracyCapture() {
|
MelonDsDs::OpenGlTracyCapture::OpenGlTracyCapture() {
|
||||||
if (!tracy::ProfilerAvailable()) {
|
if (!tracy::ProfilerAvailable()) {
|
||||||
throw std::runtime_error("Tracy not available");
|
throw std::runtime_error("Tracy not available");
|
||||||
@ -140,6 +117,4 @@ void MelonDsDs::OpenGlTracyCapture::CaptureFrame(float scale) noexcept {
|
|||||||
_tracyFences[_tracyIndex] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
_tracyFences[_tracyIndex] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||||
_tracyQueue.push(_tracyIndex);
|
_tracyQueue.push(_tracyIndex);
|
||||||
_tracyIndex = (_tracyIndex + 1) % 4;
|
_tracyIndex = (_tracyIndex + 1) % 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
|
|
49
src/libretro/tracy/opengl.hpp
Normal file
49
src/libretro/tracy/opengl.hpp
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2024 Jesse Talavera
|
||||||
|
|
||||||
|
melonDS DS is free software: you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
melonDS DS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with melonDS DS. If not, see http://www.gnu.org/licenses/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if defined(HAVE_TRACY) && (defined(HAVE_OPENGL) || defined(HAVE_OPENGLES))
|
||||||
|
#include <array>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
|
#include "PlatformOGLPrivate.h"
|
||||||
|
#include <tracy/TracyOpenGL.hpp>
|
||||||
|
|
||||||
|
namespace MelonDsDs {
|
||||||
|
/// \brief Class for capturing OpenGL frames for Tracy.
|
||||||
|
/// Suitable for both OpenGL renderers.
|
||||||
|
class OpenGlTracyCapture {
|
||||||
|
public:
|
||||||
|
OpenGlTracyCapture();
|
||||||
|
~OpenGlTracyCapture() noexcept;
|
||||||
|
|
||||||
|
// Copying the OpenGL objects is too much of a hassle.
|
||||||
|
OpenGlTracyCapture(const OpenGlTracyCapture&) = delete;
|
||||||
|
OpenGlTracyCapture& operator=(const OpenGlTracyCapture&) = delete;
|
||||||
|
OpenGlTracyCapture(OpenGlTracyCapture&&) = delete;
|
||||||
|
OpenGlTracyCapture& operator=(OpenGlTracyCapture&&) = delete;
|
||||||
|
void CaptureFrame(float scale) noexcept;
|
||||||
|
private:
|
||||||
|
std::array<GLuint, 4> _tracyTextures;
|
||||||
|
std::array<GLuint, 4> _tracyFbos;
|
||||||
|
std::array<GLuint, 4> _tracyPbos;
|
||||||
|
std::array<GLsync, 4> _tracyFences;
|
||||||
|
int _tracyIndex = 0;
|
||||||
|
std::queue<int> _tracyQueue;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user