diff --git a/qrenderdoc/Code/Interface/ShaderProcessingTool.cpp b/qrenderdoc/Code/Interface/ShaderProcessingTool.cpp index a937cc6c1..ffb32e9c1 100644 --- a/qrenderdoc/Code/Interface/ShaderProcessingTool.cpp +++ b/qrenderdoc/Code/Interface/ShaderProcessingTool.cpp @@ -28,11 +28,11 @@ #include "Code/QRDUtils.h" #include "QRDInterface.h" -static const QString glsl_stage4[ENUM_ARRAY_SIZE(ShaderStage)] = { +static const QString glsl_stage4[arraydim()] = { lit("vert"), lit("tesc"), lit("tese"), lit("geom"), lit("frag"), lit("comp"), }; -static const QString hlsl_stage2[ENUM_ARRAY_SIZE(ShaderStage)] = { +static const QString hlsl_stage2[arraydim()] = { lit("vs"), lit("hs"), lit("ds"), lit("gs"), lit("ps"), lit("cs"), }; diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index eb69aed77..10efd195d 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -1134,7 +1134,7 @@ QString D3DSemanticString(const SigParameter &sig) if(sig.systemValue == ShaderBuiltin::Undefined) return sig.semanticIdxName; - QString sysValues[ENUM_ARRAY_SIZE(ShaderBuiltin)] = { + QString sysValues[arraydim()] = { lit("SV_Undefined"), lit("SV_Position"), lit("Unsupported (PointSize)"), diff --git a/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp index d3040f226..a9a924693 100644 --- a/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp @@ -643,7 +643,7 @@ QString PipelineStateViewer::GenerateHLSLStub(const ShaderBindpointMapping &bind { QString hlsl = lit("// HLSL function stub generated\n\n"); - const QString textureDim[ENUM_ARRAY_SIZE(TextureType)] = { + const QString textureDim[arraydim()] = { lit("Unknown"), lit("Buffer"), lit("Texture1D"), lit("Texture1DArray"), lit("Texture2D"), lit("TextureRect"), lit("Texture2DArray"), lit("Texture2DMS"), lit("Texture2DMSArray"), lit("Texture3D"), lit("TextureCube"), lit("TextureCubeArray"), diff --git a/qrenderdoc/Windows/StatisticsViewer.cpp b/qrenderdoc/Windows/StatisticsViewer.cpp index d65997a79..45d4ba8ee 100644 --- a/qrenderdoc/Windows/StatisticsViewer.cpp +++ b/qrenderdoc/Windows/StatisticsViewer.cpp @@ -221,7 +221,7 @@ void StatisticsViewer::AppendConstantBindStatistics() // structure for a given type with known integral types (or arrays // thereof), but given we're heading for a Qt/C++ rewrite of the UI // perhaps best not to dwell too long on that - ConstantBindStats totalConstantsPerStage[ENUM_ARRAY_SIZE(ShaderStage)]; + ConstantBindStats totalConstantsPerStage[arraydim()]; memset(&totalConstantsPerStage, 0, sizeof(totalConstantsPerStage)); for(auto s : indices()) { @@ -313,7 +313,7 @@ void StatisticsViewer::AppendSamplerBindStatistics() // #mivance see AppendConstantBindStatistics const SamplerBindStats &reference = frameInfo.stats.samplers[0]; - SamplerBindStats totalSamplersPerStage[ENUM_ARRAY_SIZE(ShaderStage)]; + SamplerBindStats totalSamplersPerStage[arraydim()]; memset(&totalSamplersPerStage, 0, sizeof(totalSamplersPerStage)); for(auto s : indices()) { @@ -379,7 +379,7 @@ void StatisticsViewer::AppendResourceBindStatistics() // #mivance see AppendConstantBindStatistics const ResourceBindStats &reference = frameInfo.stats.resources[0]; - ResourceBindStats totalResourcesPerStage[ENUM_ARRAY_SIZE(ShaderStage)]; + ResourceBindStats totalResourcesPerStage[arraydim()]; memset(&totalResourcesPerStage, 0, sizeof(totalResourcesPerStage)); for(auto s : indices()) { diff --git a/renderdoc/3rdparty/catch/catch.cpp b/renderdoc/3rdparty/catch/catch.cpp index 5240616c7..aa844bbca 100644 --- a/renderdoc/3rdparty/catch/catch.cpp +++ b/renderdoc/3rdparty/catch/catch.cpp @@ -319,7 +319,7 @@ extern "C" RENDERDOC_API int RENDERDOC_CC RENDERDOC_RunUnitTests(const rdcstr &c #else -#include "api/replay/renderdoc_replay.h" +#include "api/replay/apidefs.h" extern "C" RENDERDOC_API int RENDERDOC_CC RENDERDOC_RunUnitTests(const rdcstr &command, const rdcarray &args) diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt index d832f36dd..7d124bac9 100644 --- a/renderdoc/CMakeLists.txt +++ b/renderdoc/CMakeLists.txt @@ -165,6 +165,7 @@ set(sources maths/matrix.cpp maths/matrix.h maths/quat.h + maths/vec.cpp maths/vec.h os/os_specific.cpp os/os_specific.h diff --git a/renderdoc/android/android.cpp b/renderdoc/android/android.cpp index c15b8c0de..9e880f158 100644 --- a/renderdoc/android/android.cpp +++ b/renderdoc/android/android.cpp @@ -26,8 +26,10 @@ #include #include "api/replay/version.h" #include "common/formatting.h" +#include "common/threading.h" #include "core/core.h" #include "core/remote_server.h" +#include "replay/replay_driver.h" #include "strings/string_utils.h" #include "android_utils.h" diff --git a/renderdoc/android/android_patch.cpp b/renderdoc/android/android_patch.cpp index fcc8a0390..6b5635c01 100644 --- a/renderdoc/android/android_patch.cpp +++ b/renderdoc/android/android_patch.cpp @@ -25,6 +25,7 @@ #include "3rdparty/miniz/miniz.h" #include "api/replay/version.h" #include "core/core.h" +#include "replay/replay_driver.h" #include "strings/string_utils.h" #include "android_utils.h" diff --git a/renderdoc/android/android_utils.cpp b/renderdoc/android/android_utils.cpp index d00c797e9..568df6d21 100644 --- a/renderdoc/android/android_utils.cpp +++ b/renderdoc/android/android_utils.cpp @@ -25,6 +25,7 @@ #include "android_utils.h" #include #include "common/formatting.h" +#include "common/threading.h" #include "core/core.h" #include "strings/string_utils.h" diff --git a/renderdoc/api/replay/apidefs.h b/renderdoc/api/replay/apidefs.h index 938561dcd..ae82527ea 100644 --- a/renderdoc/api/replay/apidefs.h +++ b/renderdoc/api/replay/apidefs.h @@ -24,6 +24,8 @@ #pragma once +#include + // Guidelines for documentation: // // * If you only need a short string, use DOCUMENT("Here is my string"); @@ -183,12 +185,14 @@ constexpr inline IndexIterContainer indices() }; template -constexpr inline size_t arraydim() +constexpr inline unsigned int arraydim() { typedef typename std::underlying_type::type etype; - return (size_t)etype(enum_name::Count); + return (unsigned int)etype(enum_name::Count); }; +#define ENUM_ARRAY_SIZE(enum_name) int(enum_name::Count) + // clang-format makes a even more of a mess of this multi-line macro than it usually does, for some // reason. So we just disable it since it's still readable and this isn't really the intended case // we are using clang-format for. @@ -230,5 +234,3 @@ inline enum_name operator++(enum_name &a) \ // clang-format on #endif - -#define ENUM_ARRAY_SIZE(enum_name) size_t(enum_name::Count) diff --git a/renderdoc/api/replay/control_types.h b/renderdoc/api/replay/control_types.h index 0e47b8242..3b915aced 100644 --- a/renderdoc/api/replay/control_types.h +++ b/renderdoc/api/replay/control_types.h @@ -25,14 +25,15 @@ #pragma once +#include #include "apidefs.h" #include "data_types.h" #include "rdcarray.h" #include "replay_enums.h" -DOCUMENT(R"( -Contains the details of a single element of data (such as position or texture -co-ordinates) within a mesh.)"); +DOCUMENT(R"(Contains the details of a single element of data (such as position or texture +co-ordinates) within a mesh. +)"); struct MeshFormat { MeshFormat() @@ -917,3 +918,10 @@ went wrong. }; DECLARE_REFLECTION_STRUCT(ExecuteResult); + +// there's not a good way to document a callback, so for lack of a better place we declare these +// here and document them in the main IReplayController. They can be linked to from anywhere by +// name. +typedef std::function RENDERDOC_KillCallback; +typedef std::function RENDERDOC_ProgressCallback; +typedef std::function &)> RENDERDOC_PreviewWindowCallback; diff --git a/renderdoc/api/replay/renderdoc_replay.h b/renderdoc/api/replay/renderdoc_replay.h index 35ef3e1c6..a7f2a6221 100644 --- a/renderdoc/api/replay/renderdoc_replay.h +++ b/renderdoc/api/replay/renderdoc_replay.h @@ -27,7 +27,6 @@ #include #include -#include #include "apidefs.h" @@ -53,10 +52,8 @@ typedef void *(RENDERDOC_CC *pRENDERDOC_AllocArrayMem)(uint64_t sz); #include "rdcdatetime.h" #include "rdcpair.h" #include "rdcstr.h" -#include "stringise.h" - -// define ResourceId, because it's a base type for structured data but needs the stringise interface #include "resourceid.h" +#include "stringise.h" // include all API types now #include "capture_options.h" @@ -206,51 +203,12 @@ inline const WindowingData CreateMacOSWindowingData(void *view, void *layer) return ret; } -// there's not a good way to document a callback, so for lack of a better place we declare these -// here and document them immediately below. They can be linked to from anywhere by name. -typedef std::function RENDERDOC_KillCallback; -typedef std::function RENDERDOC_ProgressCallback; -typedef std::function &)> RENDERDOC_PreviewWindowCallback; - DOCUMENT(R"(A stateful output handle that contains the current configuration for one particular view of the capture. This allows multiple outputs to run independently without interfering with each other. The different types are enumerated in :class:`ReplayOutputType`. -.. function:: KillCallback() - - Not an actual member function - the signature for any ``KillCallback`` callbacks. - - Called whenever some on-going blocking process needs to determine if it should close. - - :return: Whether or not the process should be killed. - :rtype: ``bool`` - -.. function:: ProgressCallback() - - Not an actual member function - the signature for any ``ProgressCallback`` callbacks. - - Called by an on-going blocking process to update a progress bar or similar user feedback. - - The progress value will go from 0.0 to 1.0 as the process completes. Any other value will indicate - that the process has completed - - :param float progress: The latest progress amount. - -.. function:: PreviewWindowCallback() - - Not an actual member function - the signature for any ``PreviewWindowCallback`` callbacks. - - Called when a preview window could optionally be opened to display some information. It will be - called repeatedly with :paramref:`active` set to ``True`` to allow any platform-specific message - pumping. - - :param bool active: ``True`` if a preview window is active/opened, ``False`` if it has closed. - :return: The windowing data for a preview window, or empty/default values if no window should be - created. - :rtype: WindowingData - .. data:: NoResult No result was found in e.g. :meth:`PickVertex`. @@ -401,6 +359,39 @@ protected: DOCUMENT(R"(The primary interface to access the information in a capture and the current state, as well as control the replay and analysis functionality available. +.. function:: KillCallback() + + Not an actual member function - the signature for any ``KillCallback`` callbacks. + + Called whenever some on-going blocking process needs to determine if it should close. + + :return: Whether or not the process should be killed. + :rtype: ``bool`` + +.. function:: ProgressCallback() + + Not an actual member function - the signature for any ``ProgressCallback`` callbacks. + + Called by an on-going blocking process to update a progress bar or similar user feedback. + + The progress value will go from 0.0 to 1.0 as the process completes. Any other value will indicate + that the process has completed + + :param float progress: The latest progress amount. + +.. function:: PreviewWindowCallback() + + Not an actual member function - the signature for any ``PreviewWindowCallback`` callbacks. + + Called when a preview window could optionally be opened to display some information. It will be + called repeatedly with :paramref:`active` set to ``True`` to allow any platform-specific message + pumping. + + :param bool active: ``True`` if a preview window is active/opened, ``False`` if it has closed. + :return: The windowing data for a preview window, or empty/default values if no window should be + created. + :rtype: WindowingData + .. data:: NoPreference No preference for a particular value, see :meth:`ReplayController.DebugPixel`. diff --git a/renderdoc/api/replay/shader_types.h b/renderdoc/api/replay/shader_types.h index 9b18288d3..6cf41f790 100644 --- a/renderdoc/api/replay/shader_types.h +++ b/renderdoc/api/replay/shader_types.h @@ -30,6 +30,7 @@ #include "rdcarray.h" #include "rdcstr.h" #include "replay_enums.h" +#include "resourceid.h" #include "stringise.h" DOCUMENT("A ``float`` 4 component vector.") diff --git a/renderdoc/api/replay/structured_data.h b/renderdoc/api/replay/structured_data.h index eb232fcce..a28bd7f3e 100644 --- a/renderdoc/api/replay/structured_data.h +++ b/renderdoc/api/replay/structured_data.h @@ -25,8 +25,10 @@ #pragma once #include +#include "apidefs.h" #include "rdcarray.h" #include "rdcstr.h" +#include "resourceid.h" #include "stringise.h" DOCUMENT(R"(The basic irreducible type of an object. Every other more complex type is built on these. diff --git a/renderdoc/common/common.cpp b/renderdoc/common/common.cpp index 0915423c2..dd962ad52 100644 --- a/renderdoc/common/common.cpp +++ b/renderdoc/common/common.cpp @@ -31,52 +31,6 @@ #include "os/os_specific.h" #include "strings/string_utils.h" -// for(int i=0; i < 256; i++) -// { -// uint8_t comp = i&0xff; -// float srgbF = float(comp)/255.0f; -// -// if(srgbF <= 0.04045f) -// SRGB8_lookuptable[comp] = srgbF/12.92f; -// else -// SRGB8_lookuptable[comp] = powf((0.055f + srgbF) / 1.055f, 2.4f); -// } - -float SRGB8_lookuptable[256] = { - 0.000000f, 0.000304f, 0.000607f, 0.000911f, 0.001214f, 0.001518f, 0.001821f, 0.002125f, - 0.002428f, 0.002732f, 0.003035f, 0.003347f, 0.003677f, 0.004025f, 0.004391f, 0.004777f, - 0.005182f, 0.005605f, 0.006049f, 0.006512f, 0.006995f, 0.007499f, 0.008023f, 0.008568f, - 0.009134f, 0.009721f, 0.010330f, 0.010960f, 0.011612f, 0.012286f, 0.012983f, 0.013702f, - 0.014444f, 0.015209f, 0.015996f, 0.016807f, 0.017642f, 0.018500f, 0.019382f, 0.020289f, - 0.021219f, 0.022174f, 0.023153f, 0.024158f, 0.025187f, 0.026241f, 0.027321f, 0.028426f, - 0.029557f, 0.030713f, 0.031896f, 0.033105f, 0.034340f, 0.035601f, 0.036889f, 0.038204f, - 0.039546f, 0.040915f, 0.042311f, 0.043735f, 0.045186f, 0.046665f, 0.048172f, 0.049707f, - 0.051269f, 0.052861f, 0.054480f, 0.056128f, 0.057805f, 0.059511f, 0.061246f, 0.063010f, - 0.064803f, 0.066626f, 0.068478f, 0.070360f, 0.072272f, 0.074214f, 0.076185f, 0.078187f, - 0.080220f, 0.082283f, 0.084376f, 0.086500f, 0.088656f, 0.090842f, 0.093059f, 0.095307f, - 0.097587f, 0.099899f, 0.102242f, 0.104616f, 0.107023f, 0.109462f, 0.111932f, 0.114435f, - 0.116971f, 0.119538f, 0.122139f, 0.124772f, 0.127438f, 0.130136f, 0.132868f, 0.135633f, - 0.138432f, 0.141263f, 0.144128f, 0.147027f, 0.149960f, 0.152926f, 0.155926f, 0.158961f, - 0.162029f, 0.165132f, 0.168269f, 0.171441f, 0.174647f, 0.177888f, 0.181164f, 0.184475f, - 0.187821f, 0.191202f, 0.194618f, 0.198069f, 0.201556f, 0.205079f, 0.208637f, 0.212231f, - 0.215861f, 0.219526f, 0.223228f, 0.226966f, 0.230740f, 0.234551f, 0.238398f, 0.242281f, - 0.246201f, 0.250158f, 0.254152f, 0.258183f, 0.262251f, 0.266356f, 0.270498f, 0.274677f, - 0.278894f, 0.283149f, 0.287441f, 0.291771f, 0.296138f, 0.300544f, 0.304987f, 0.309469f, - 0.313989f, 0.318547f, 0.323143f, 0.327778f, 0.332452f, 0.337164f, 0.341914f, 0.346704f, - 0.351533f, 0.356400f, 0.361307f, 0.366253f, 0.371238f, 0.376262f, 0.381326f, 0.386430f, - 0.391573f, 0.396755f, 0.401978f, 0.407240f, 0.412543f, 0.417885f, 0.423268f, 0.428691f, - 0.434154f, 0.439657f, 0.445201f, 0.450786f, 0.456411f, 0.462077f, 0.467784f, 0.473532f, - 0.479320f, 0.485150f, 0.491021f, 0.496933f, 0.502887f, 0.508881f, 0.514918f, 0.520996f, - 0.527115f, 0.533276f, 0.539480f, 0.545725f, 0.552011f, 0.558340f, 0.564712f, 0.571125f, - 0.577581f, 0.584078f, 0.590619f, 0.597202f, 0.603827f, 0.610496f, 0.617207f, 0.623960f, - 0.630757f, 0.637597f, 0.644480f, 0.651406f, 0.658375f, 0.665387f, 0.672443f, 0.679543f, - 0.686685f, 0.693872f, 0.701102f, 0.708376f, 0.715694f, 0.723055f, 0.730461f, 0.737911f, - 0.745404f, 0.752942f, 0.760525f, 0.768151f, 0.775822f, 0.783538f, 0.791298f, 0.799103f, - 0.806952f, 0.814847f, 0.822786f, 0.830770f, 0.838799f, 0.846873f, 0.854993f, 0.863157f, - 0.871367f, 0.879622f, 0.887923f, 0.896269f, 0.904661f, 0.913099f, 0.921582f, 0.930111f, - 0.938686f, 0.947307f, 0.955974f, 0.964686f, 0.973445f, 0.982251f, 0.991102f, 1.000000f, -}; - void rdcassert(const char *msg, const char *file, unsigned int line, const char *func) { rdclog_direct(FILL_AUTO_VALUE, FILL_AUTO_VALUE, LogType::Error, RDCLOG_PROJECT, file, line, diff --git a/renderdoc/common/dds_readwrite.h b/renderdoc/common/dds_readwrite.h index 1a6434ee6..735fa03bd 100644 --- a/renderdoc/common/dds_readwrite.h +++ b/renderdoc/common/dds_readwrite.h @@ -24,7 +24,7 @@ #pragma once -#include "api/replay/renderdoc_replay.h" +#include "api/replay/data_types.h" struct dds_data { diff --git a/renderdoc/common/shader_cache.h b/renderdoc/common/shader_cache.h index dc493d8f6..223106831 100644 --- a/renderdoc/common/shader_cache.h +++ b/renderdoc/common/shader_cache.h @@ -24,6 +24,8 @@ #pragma once +#include +#include "common/common.h" #include "os/os_specific.h" template diff --git a/renderdoc/core/core.cpp b/renderdoc/core/core.cpp index 152f35568..ac68aba6d 100644 --- a/renderdoc/core/core.cpp +++ b/renderdoc/core/core.cpp @@ -28,6 +28,7 @@ #include #include "api/replay/version.h" #include "common/common.h" +#include "common/threading.h" #include "hooks/hooks.h" #include "maths/formatpacking.h" #include "replay/replay_driver.h" @@ -1031,20 +1032,9 @@ void RenderDoc::ResamplePixels(const FramePixels &in, RDCThumb &out) float linearG = RDCCLAMP(ConvertFromHalf(src16[1]), 0.0f, 1.0f); float linearB = RDCCLAMP(ConvertFromHalf(src16[2]), 0.0f, 1.0f); - if(linearR < 0.0031308f) - dst[0] = byte(255.0f * (12.92f * linearR)); - else - dst[0] = byte(255.0f * (1.055f * powf(linearR, 1.0f / 2.4f) - 0.055f)); - - if(linearG < 0.0031308f) - dst[1] = byte(255.0f * (12.92f * linearG)); - else - dst[1] = byte(255.0f * (1.055f * powf(linearG, 1.0f / 2.4f) - 0.055f)); - - if(linearB < 0.0031308f) - dst[2] = byte(255.0f * (12.92f * linearB)); - else - dst[2] = byte(255.0f * (1.055f * powf(linearB, 1.0f / 2.4f) - 0.055f)); + dst[0] = byte(255.0f * ConvertLinearToSRGB(linearR)); + dst[1] = byte(255.0f * ConvertLinearToSRGB(linearG)); + dst[2] = byte(255.0f * ConvertLinearToSRGB(linearB)); } else { @@ -1653,6 +1643,33 @@ void RenderDoc::FinishCaptureWriting(RDCFile *rdc, uint32_t frameNumber) RenderDoc::Inst().SetProgress(CaptureProgress::FileWriting, 1.0f); } +void RenderDoc::AddChildProcess(uint32_t pid, uint32_t ident) +{ + SCOPED_LOCK(m_ChildLock); + m_Children.push_back(make_rdcpair(pid, ident)); +} + +std::vector > RenderDoc::GetChildProcesses() +{ + SCOPED_LOCK(m_ChildLock); + return m_Children; +} + +std::vector RenderDoc::GetCaptures() +{ + SCOPED_LOCK(m_CaptureLock); + return m_Captures; +} + +void RenderDoc::MarkCaptureRetrieved(uint32_t idx) +{ + SCOPED_LOCK(m_CaptureLock); + if(idx < m_Captures.size()) + { + m_Captures[idx].retrieved = true; + } +} + void RenderDoc::AddDeviceFrameCapturer(void *dev, IFrameCapturer *cap) { if(IsReplayApp()) diff --git a/renderdoc/core/core.h b/renderdoc/core/core.h index 21ac306a5..ddb706eed 100644 --- a/renderdoc/core/core.h +++ b/renderdoc/core/core.h @@ -30,14 +30,16 @@ #include #include #include "api/app/renderdoc_app.h" -#include "api/replay/renderdoc_replay.h" -#include "common/threading.h" +#include "api/replay/apidefs.h" +#include "api/replay/capture_options.h" +#include "api/replay/control_types.h" +#include "api/replay/stringise.h" #include "common/timing.h" -#include "maths/vec.h" #include "os/os_specific.h" class Chunk; struct RDCThumb; +struct ReplayOptions; // not provided by tinyexr, just do by hand bool is_exr_file(FILE *f); @@ -45,6 +47,19 @@ void LogReplayOptions(const ReplayOptions &opts); enum class RDCDriver : uint32_t; +class IRemoteDriver; +class IReplayDriver; + +class StreamReader; +class RDCFile; +struct SDFile; +enum class VulkanLayerFlags : uint32_t; + +namespace Callstack +{ +class StackResolver; +} + struct ICrashHandler { virtual ~ICrashHandler() {} @@ -60,23 +75,7 @@ struct IFrameCapturer virtual bool DiscardFrameCapture(void *dev, void *wnd) = 0; }; -// for protocols, we extend the public interface a bit to add callbacks for remapping connection -// ports (typically to some port forwarded on localhost) -struct IDeviceProtocolHandler : public IDeviceProtocolController -{ - virtual rdcstr GetDeviceID(const rdcstr &URL) - { - rdcstr ret = URL; - int offs = ret.find("://"); - if(offs > 0) - ret.erase(0, offs + 3); - return ret; - } - - virtual rdcstr RemapHostname(const rdcstr &deviceID) = 0; - virtual uint16_t RemapPort(const rdcstr &deviceID, uint16_t srcPort) = 0; - virtual IRemoteServer *CreateRemoteServer(Network::Socket *sock, const rdcstr &deviceID) = 0; -}; +struct IDeviceProtocolHandler; // In most cases you don't need to check these individually, use the utility functions below // to determine if you're in a capture or replay state. There are utility functions for each @@ -204,11 +203,6 @@ enum class RDCDriver : uint32_t DECLARE_REFLECTION_ENUM(RDCDriver); -namespace Callstack -{ -class StackResolver; -} - enum ReplayLogType { eReplay_Full, @@ -328,12 +322,6 @@ inline constexpr float FakeProgress(uint32_t x, uint32_t maxX) return 1.0f - (1.0f / (x * (4.0f / float(maxX)) + 1)); } -class IRemoteDriver; -class IReplayDriver; - -class StreamReader; -class RDCFile; - typedef ReplayStatus (*RemoteDriverProvider)(RDCFile *rdc, const ReplayOptions &opts, IRemoteDriver **driver); typedef ReplayStatus (*ReplayDriverProvider)(RDCFile *rdc, const ReplayOptions &opts, @@ -422,7 +410,7 @@ public: void Shutdown(); uint64_t GetMicrosecondTimestamp() { return uint64_t(m_Timer.GetMicroseconds()); } - const GlobalEnvironment GetGlobalEnvironment() { return m_GlobalEnv; } + const GlobalEnvironment &GetGlobalEnvironment() { return m_GlobalEnv; } void ProcessGlobalEnvironment(GlobalEnvironment env, const std::vector &args); int32_t GetForwardedPortSlot() { return Atomic::Inc32(&m_PortSlot); } @@ -451,31 +439,12 @@ public: RDCFile *CreateRDC(RDCDriver driver, uint32_t frameNum, const FramePixels &fp); void FinishCaptureWriting(RDCFile *rdc, uint32_t frameNumber); - void AddChildProcess(uint32_t pid, uint32_t ident) - { - SCOPED_LOCK(m_ChildLock); - m_Children.push_back(make_rdcpair(pid, ident)); - } - std::vector > GetChildProcesses() - { - SCOPED_LOCK(m_ChildLock); - return m_Children; - } + void AddChildProcess(uint32_t pid, uint32_t ident); + std::vector > GetChildProcesses(); - std::vector GetCaptures() - { - SCOPED_LOCK(m_CaptureLock); - return m_Captures; - } + std::vector GetCaptures(); - void MarkCaptureRetrieved(uint32_t idx) - { - SCOPED_LOCK(m_CaptureLock); - if(idx < m_Captures.size()) - { - m_Captures[idx].retrieved = true; - } - } + void MarkCaptureRetrieved(uint32_t idx); void RegisterReplayProvider(RDCDriver driver, ReplayDriverProvider provider); void RegisterRemoteProvider(RDCDriver driver, RemoteDriverProvider provider); @@ -515,10 +484,10 @@ public: m_VulkanInstall(systemLevel); } - Vec4f LightCheckerboardColor() { return m_LightChecker; } - Vec4f DarkCheckerboardColor() { return m_DarkChecker; } - void SetLightCheckerboardColor(const Vec4f &col) { m_LightChecker = col; } - void SetDarkCheckerboardColor(const Vec4f &col) { m_DarkChecker = col; } + FloatVector LightCheckerboardColor() { return m_LightChecker; } + FloatVector DarkCheckerboardColor() { return m_DarkChecker; } + void SetLightCheckerboardColor(const FloatVector &col) { m_LightChecker = col; } + void SetDarkCheckerboardColor(const FloatVector &col) { m_DarkChecker = col; } bool IsDarkTheme() { return m_DarkTheme; } void SetDarkTheme(bool dark) { m_DarkTheme = dark; } ReplayStatus CreateProxyReplayDriver(RDCDriver proxyDriver, IReplayDriver **driver); @@ -701,8 +670,8 @@ private: } }; - Vec4f m_LightChecker = Vec4f(0.81f, 0.81f, 0.81f, 1.0f); - Vec4f m_DarkChecker = Vec4f(0.57f, 0.57f, 0.57f, 1.0f); + FloatVector m_LightChecker = FloatVector(0.81f, 0.81f, 0.81f, 1.0f); + FloatVector m_DarkChecker = FloatVector(0.57f, 0.57f, 0.57f, 1.0f); bool m_DarkTheme = false; int m_CapturesActive; @@ -713,7 +682,7 @@ private: IFrameCapturer *MatchFrameCapturer(void *dev, void *wnd); - bool m_VendorExts[ENUM_ARRAY_SIZE(VendorExtensions)] = {}; + bool m_VendorExts[arraydim()] = {}; volatile bool m_TargetControlThreadShutdown; volatile bool m_ControlClientThreadShutdown; diff --git a/renderdoc/core/remote_server.cpp b/renderdoc/core/remote_server.cpp index 3776dc504..55f91ca54 100644 --- a/renderdoc/core/remote_server.cpp +++ b/renderdoc/core/remote_server.cpp @@ -895,7 +895,7 @@ static void ActiveRemoteClientThread(ClientThread *threadData, } void RenderDoc::BecomeRemoteServer(const char *listenhost, uint16_t port, - RENDERDOC_KillCallback killReplay, + std::function killReplay, RENDERDOC_PreviewWindowCallback previewWindow) { Network::Socket *sock = Network::CreateServerSocket(listenhost, port, 1); diff --git a/renderdoc/core/resource_manager.h b/renderdoc/core/resource_manager.h index 2d97535e0..109b08cd8 100644 --- a/renderdoc/core/resource_manager.h +++ b/renderdoc/core/resource_manager.h @@ -27,7 +27,7 @@ #include #include -#include "api/replay/renderdoc_replay.h" +#include "api/replay/resourceid.h" #include "common/threading.h" #include "core/core.h" #include "os/os_specific.h" diff --git a/renderdoc/core/target_control.cpp b/renderdoc/core/target_control.cpp index f52768b27..d131e404e 100644 --- a/renderdoc/core/target_control.cpp +++ b/renderdoc/core/target_control.cpp @@ -25,9 +25,11 @@ #include "android/android.h" #include "api/replay/renderdoc_replay.h" +#include "common/threading.h" #include "core/core.h" #include "jpeg-compressor/jpgd.h" #include "os/os_specific.h" +#include "replay/replay_driver.h" #include "serialise/serialiser.h" static const uint32_t TargetControlProtocolVersion = 5; diff --git a/renderdoc/driver/d3d11/d3d11_common.cpp b/renderdoc/driver/d3d11/d3d11_common.cpp index 9361f6a7b..a9dc43f8c 100644 --- a/renderdoc/driver/d3d11/d3d11_common.cpp +++ b/renderdoc/driver/d3d11/d3d11_common.cpp @@ -25,10 +25,10 @@ #include "d3d11_common.h" #include "core/core.h" -#include "driver/d3d11/d3d11_renderstate.h" -#include "driver/d3d11/d3d11_resources.h" #include "serialise/serialiser.h" #include "strings/string_utils.h" +#include "d3d11_renderstate.h" +#include "d3d11_resources.h" WrappedID3D11Device *D3D11MarkerRegion::device; diff --git a/renderdoc/driver/d3d11/d3d11_common.h b/renderdoc/driver/d3d11/d3d11_common.h index f493c50c0..6999f780d 100644 --- a/renderdoc/driver/d3d11/d3d11_common.h +++ b/renderdoc/driver/d3d11/d3d11_common.h @@ -27,7 +27,6 @@ #define INITGUID -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "driver/dx/official/d3d11_4.h" #include "driver/dx/official/dxgi1_3.h" diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index f51f8e8ef..38a2a30a3 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -23,13 +23,14 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/d3d11/d3d11_context.h" +#include "d3d11_context.h" #include -#include "driver/d3d11/d3d11_device.h" -#include "driver/d3d11/d3d11_manager.h" -#include "driver/d3d11/d3d11_renderstate.h" -#include "driver/d3d11/d3d11_resources.h" #include "strings/string_utils.h" +#include "d3d11_device.h" +#include "d3d11_manager.h" +#include "d3d11_renderstate.h" +#include "d3d11_replay.h" +#include "d3d11_resources.h" WRAPPED_POOL_INST(WrappedID3D11DeviceContext); WRAPPED_POOL_INST(WrappedID3D11CommandList); @@ -1220,8 +1221,9 @@ ReplayStatus WrappedID3D11DeviceContext::ReplayLog(CaptureState readType, uint32 if(IsLoading(m_State)) { - m_pDevice->GetFrameRecord().drawcallList = m_ParentDrawcall.children; - m_pDevice->GetFrameRecord().frameInfo.debugMessages = m_pDevice->GetDebugMessages(); + m_pDevice->GetReplay()->WriteFrameRecord().drawcallList = m_ParentDrawcall.children; + m_pDevice->GetReplay()->WriteFrameRecord().frameInfo.debugMessages = + m_pDevice->GetDebugMessages(); for(auto it = WrappedID3D11Buffer::m_BufferList.begin(); it != WrappedID3D11Buffer::m_BufferList.end(); ++it) diff --git a/renderdoc/driver/d3d11/d3d11_context.h b/renderdoc/driver/d3d11/d3d11_context.h index 1319e5c4b..0a3112721 100644 --- a/renderdoc/driver/d3d11/d3d11_context.h +++ b/renderdoc/driver/d3d11/d3d11_context.h @@ -27,7 +27,6 @@ #include #include -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "d3d11_common.h" #include "d3d11_manager.h" diff --git a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp index 01a9887f6..77c033bc2 100644 --- a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp @@ -5321,11 +5321,11 @@ bool WrappedID3D11DeviceContext::Serialise_FinishCommandList(SerialiserType &ser m_pDevice->AddResource(pCommandList, ResourceType::CommandBuffer, "Command List"); // add the current deferred context ID as a parent - m_pDevice->GetReplay()->GetResourceDesc(m_CurContextId).derivedResources.push_back(pCommandList); - m_pDevice->GetReplay()->GetResourceDesc(pCommandList).parentResources.push_back(m_CurContextId); + m_pDevice->GetResourceDesc(m_CurContextId).derivedResources.push_back(pCommandList); + m_pDevice->GetResourceDesc(pCommandList).parentResources.push_back(m_CurContextId); // don't include this as an 'initialisation chunk' - m_pDevice->GetReplay()->GetResourceDesc(pCommandList).initialisationChunks.clear(); + m_pDevice->GetResourceDesc(pCommandList).initialisationChunks.clear(); } return true; diff --git a/renderdoc/driver/d3d11/d3d11_counters.cpp b/renderdoc/driver/d3d11/d3d11_counters.cpp index 456aab6dd..a707dc0fb 100644 --- a/renderdoc/driver/d3d11/d3d11_counters.cpp +++ b/renderdoc/driver/d3d11/d3d11_counters.cpp @@ -31,6 +31,7 @@ #include "d3d11_context.h" #include "d3d11_debug.h" #include "d3d11_device.h" +#include "d3d11_replay.h" rdcarray D3D11Replay::EnumerateCounters() { @@ -487,8 +488,7 @@ rdcarray D3D11Replay::FetchCountersAMD(const rdcarray rdcarray D3D11Replay::FetchCountersNV(const rdcarray &counters) { - const FrameRecord &frameRecord = m_pDevice->GetFrameRecord(); - const FrameStatistics &frameStats = frameRecord.frameInfo.stats; + const FrameStatistics &frameStats = m_FrameRecord.frameInfo.stats; const uint32_t objectsCount = frameStats.draws.calls + frameStats.dispatches.calls + 1; diff --git a/renderdoc/driver/d3d11/d3d11_debug.cpp b/renderdoc/driver/d3d11/d3d11_debug.cpp index ea06004f1..096aa37bc 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.cpp +++ b/renderdoc/driver/d3d11/d3d11_debug.cpp @@ -26,13 +26,13 @@ #include "d3d11_debug.h" #include "common/shader_cache.h" #include "data/resource.h" -#include "driver/d3d11/d3d11_resources.h" -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "d3d11_context.h" #include "d3d11_manager.h" #include "d3d11_renderstate.h" +#include "d3d11_replay.h" +#include "d3d11_resources.h" #include "d3d11_shader_cache.h" #include "data/hlsl/hlsl_cbuffers.h" diff --git a/renderdoc/driver/d3d11/d3d11_debug.h b/renderdoc/driver/d3d11/d3d11_debug.h index 0e229023f..49b4cc2df 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.h +++ b/renderdoc/driver/d3d11/d3d11_debug.h @@ -27,9 +27,9 @@ #include #include -#include "api/replay/renderdoc_replay.h" #include "driver/dx/official/d3d11_4.h" #include "replay/replay_driver.h" +#include "d3d11_common.h" class Camera; class Vec3f; @@ -95,7 +95,7 @@ struct TextureShaderDetails ID3D11ShaderResourceView *srv[eTexType_Max]; }; -struct D3D11DebugManager +class D3D11DebugManager { public: D3D11DebugManager(WrappedID3D11Device *wrapper); diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index c25c7a399..6dd013d51 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -34,6 +34,7 @@ #include "d3d11_debug.h" #include "d3d11_renderstate.h" #include "d3d11_rendertext.h" +#include "d3d11_replay.h" #include "d3d11_resources.h" #include "d3d11_shader_cache.h" @@ -188,6 +189,8 @@ WrappedID3D11Device::WrappedID3D11Device(ID3D11Device *realDevice, D3D11InitPara m_pImmediateContext->GetScratchSerialiser().SetChunkMetadataRecording( m_ScratchSerialiser.GetChunkMetadataRecording()); + m_Replay = new D3D11Replay(this); + m_pInfoQueue = NULL; if(realDevice) { @@ -235,8 +238,6 @@ WrappedID3D11Device::WrappedID3D11Device(ID3D11Device *realDevice, D3D11InitPara RDCDEBUG("Couldn't get ID3D11InfoQueue."); } - m_Replay.SetDevice(this); - if(realDevice) m_DebugManager = new D3D11DebugManager(this); @@ -292,7 +293,7 @@ WrappedID3D11Device::~WrappedID3D11Device() for(auto it = m_SwapChains.begin(); it != m_SwapChains.end(); ++it) SAFE_RELEASE(it->second); - m_Replay.DestroyResources(); + m_Replay->DestroyResources(); SAFE_DELETE(m_DebugManager); SAFE_DELETE(m_TextRenderer); @@ -329,6 +330,8 @@ WrappedID3D11Device::~WrappedID3D11Device() RDCASSERT(WrappedID3D11Texture3D1::m_TextureList.empty()); } + delete m_Replay; + if(RenderDoc::Inst().GetCrashHandler()) RenderDoc::Inst().GetCrashHandler()->UnregisterMemoryRegion(this); } @@ -1084,9 +1087,9 @@ bool WrappedID3D11Device::Serialise_CaptureScope(SerialiserType &ser) if(IsReplayMode(m_State)) { - m_FrameRecord.frameInfo.frameNumber = frameNumber; + GetReplay()->WriteFrameRecord().frameInfo.frameNumber = frameNumber; - FrameStatistics &stats = m_FrameRecord.frameInfo.stats; + FrameStatistics &stats = GetReplay()->WriteFrameRecord().frameInfo.stats; RDCEraseEl(stats); // #mivance GL/Vulkan don't set this so don't get stats in window @@ -1196,7 +1199,7 @@ ReplayStatus WrappedID3D11Device::ReadLogInitialisation(RDCFile *rdc, bool store if((SystemChunk)context == SystemChunk::CaptureScope) { - m_FrameRecord.frameInfo.fileOffset = offsetStart; + GetReplay()->WriteFrameRecord().frameInfo.fileOffset = offsetStart; // read the remaining data into memory and pass to immediate context frameDataSize = reader->GetSize() - reader->GetOffset(); @@ -1239,7 +1242,7 @@ ReplayStatus WrappedID3D11Device::ReadLogInitialisation(RDCFile *rdc, bool store if(!IsStructuredExporting(m_State)) { - SetupDrawcallPointers(m_Drawcalls, GetFrameRecord().drawcallList); + SetupDrawcallPointers(m_Drawcalls, GetReplay()->WriteFrameRecord().drawcallList); // propagate any UAV names onto counter buffers std::vector counterBuffers; @@ -1280,15 +1283,16 @@ ReplayStatus WrappedID3D11Device::ReadLogInitialisation(RDCFile *rdc, bool store } #endif - m_FrameRecord.frameInfo.uncompressedFileSize = + GetReplay()->WriteFrameRecord().frameInfo.uncompressedFileSize = rdc->GetSectionProperties(sectionIdx).uncompressedSize; - m_FrameRecord.frameInfo.compressedFileSize = rdc->GetSectionProperties(sectionIdx).compressedSize; - m_FrameRecord.frameInfo.persistentSize = frameDataSize; - m_FrameRecord.frameInfo.initDataSize = + GetReplay()->WriteFrameRecord().frameInfo.compressedFileSize = + rdc->GetSectionProperties(sectionIdx).compressedSize; + GetReplay()->WriteFrameRecord().frameInfo.persistentSize = frameDataSize; + GetReplay()->WriteFrameRecord().frameInfo.initDataSize = chunkInfos[(D3D11Chunk)SystemChunk::InitialContents].totalsize; RDCDEBUG("Allocating %llu persistant bytes of memory for the log.", - m_FrameRecord.frameInfo.persistentSize); + GetReplay()->WriteFrameRecord().frameInfo.persistentSize); return ReplayStatus::Succeeded; } @@ -2538,3 +2542,13 @@ const DrawcallDescription *WrappedID3D11Device::GetDrawcall(uint32_t eventId) return m_Drawcalls[eventId]; } + +ResourceDescription &WrappedID3D11Device::GetResourceDesc(ResourceId id) +{ + return GetReplay()->GetResourceDesc(id); +} + +FrameStatistics &WrappedID3D11Device::GetFrameStats() +{ + return GetReplay()->WriteFrameRecord().frameInfo.stats; +} diff --git a/renderdoc/driver/d3d11/d3d11_device.h b/renderdoc/driver/d3d11/d3d11_device.h index 214daf783..b3d8b4869 100644 --- a/renderdoc/driver/d3d11/d3d11_device.h +++ b/renderdoc/driver/d3d11/d3d11_device.h @@ -27,18 +27,18 @@ #include #include -#include "api/replay/renderdoc_replay.h" #include "common/threading.h" #include "common/timing.h" #include "core/core.h" #include "driver/dxgi/dxgi_wrapped.h" #include "d3d11_common.h" #include "d3d11_manager.h" -#include "d3d11_replay.h" #include "d3d11_video.h" +class D3D11DebugManager; class D3D11TextRenderer; class D3D11ShaderCache; +class D3D11Replay; #ifndef D3D11_1_UAV_SLOT_COUNT #define D3D11_1_UAV_SLOT_COUNT 64 @@ -291,7 +291,7 @@ private: eInitialContents_ClearDSV = 2, }; - D3D11Replay m_Replay; + D3D11Replay *m_Replay; WrappedD3D11Multithread m_WrappedMultithread; DummyID3D11InfoQueue m_DummyInfoQueue; @@ -387,7 +387,6 @@ private: std::vector m_DebugMessages; std::vector m_CapturedFrames; - FrameRecord m_FrameRecord; std::vector m_Drawcalls; public: @@ -420,7 +419,7 @@ public: D3D11ShaderCache *GetShaderCache() { return m_ShaderCache; } D3D11ResourceManager *GetResourceManager() { return m_ResourceManager; } D3D11DebugManager *GetDebugManager() { return m_DebugManager; } - D3D11Replay *GetReplay() { return &m_Replay; } + D3D11Replay *GetReplay() { return m_Replay; } Threading::CriticalSection &D3DLock() { return m_D3DLock; } bool D3DThreadSafe() const { return m_D3DThreadSafe; } void SetD3DThreadSafe(bool safe) { m_D3DThreadSafe = safe; } @@ -433,9 +432,9 @@ public: void ReleaseResource(ID3D11DeviceChild *pResource); ResourceId GetResourceID() { return m_ResourceID; } - FrameRecord &GetFrameRecord() { return m_FrameRecord; } - FrameStatistics &GetFrameStats() { return m_FrameRecord.frameInfo.stats; } const DrawcallDescription *GetDrawcall(uint32_t eventId); + ResourceDescription &GetResourceDesc(ResourceId id); + FrameStatistics &GetFrameStats(); void ReplayPushEvent() { m_ReplayEventCount++; } void ReplayPopEvent() { m_ReplayEventCount = RDCMAX(0, m_ReplayEventCount - 1); } diff --git a/renderdoc/driver/d3d11/d3d11_hooks.cpp b/renderdoc/driver/d3d11/d3d11_hooks.cpp index d82c2d418..206783816 100644 --- a/renderdoc/driver/d3d11/d3d11_hooks.cpp +++ b/renderdoc/driver/d3d11/d3d11_hooks.cpp @@ -23,10 +23,10 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/d3d11/d3d11_device.h" #include "driver/dxgi/dxgi_wrapped.h" #include "driver/ihv/amd/official/DXExt/AmdDxExtApi.h" #include "hooks/hooks.h" +#include "d3d11_device.h" #if ENABLED(RDOC_X64) diff --git a/renderdoc/driver/d3d11/d3d11_manager.cpp b/renderdoc/driver/d3d11/d3d11_manager.cpp index ee700175e..f898217f5 100644 --- a/renderdoc/driver/d3d11/d3d11_manager.cpp +++ b/renderdoc/driver/d3d11/d3d11_manager.cpp @@ -23,9 +23,9 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/d3d11/d3d11_manager.h" -#include "driver/d3d11/d3d11_context.h" -#include "driver/d3d11/d3d11_resources.h" +#include "d3d11_manager.h" +#include "d3d11_context.h" +#include "d3d11_resources.h" byte D3D11ResourceRecord::ShadowPointerData::markerValue[32] = { 0xaa, 0xbb, 0xcc, 0xdd, 0x88, 0x77, 0x66, 0x55, 0x01, 0x23, 0x45, 0x67, 0x98, 0x76, 0x54, 0x32, diff --git a/renderdoc/driver/d3d11/d3d11_manager.h b/renderdoc/driver/d3d11/d3d11_manager.h index 86c1353a4..b4670e9f6 100644 --- a/renderdoc/driver/d3d11/d3d11_manager.h +++ b/renderdoc/driver/d3d11/d3d11_manager.h @@ -25,7 +25,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "common/wrapped_pool.h" #include "core/core.h" #include "core/resource_manager.h" diff --git a/renderdoc/driver/d3d11/d3d11_msaa_array_conv.cpp b/renderdoc/driver/d3d11/d3d11_msaa_array_conv.cpp index eb98757ce..777c0fce7 100644 --- a/renderdoc/driver/d3d11/d3d11_msaa_array_conv.cpp +++ b/renderdoc/driver/d3d11/d3d11_msaa_array_conv.cpp @@ -24,6 +24,7 @@ #include "d3d11_context.h" #include "d3d11_debug.h" +#include "d3d11_renderstate.h" #include "d3d11_resources.h" struct Tex2DMSToArrayStateTracker diff --git a/renderdoc/driver/d3d11/d3d11_outputwindow.cpp b/renderdoc/driver/d3d11/d3d11_outputwindow.cpp index f04638dd0..dcc12c1a4 100644 --- a/renderdoc/driver/d3d11/d3d11_outputwindow.cpp +++ b/renderdoc/driver/d3d11/d3d11_outputwindow.cpp @@ -25,6 +25,7 @@ #include "d3d11_context.h" #include "d3d11_debug.h" #include "d3d11_device.h" +#include "d3d11_replay.h" void D3D11Replay::OutputWindow::MakeRTV() { diff --git a/renderdoc/driver/d3d11/d3d11_overlay.cpp b/renderdoc/driver/d3d11/d3d11_overlay.cpp index c5260cb08..3337d7501 100644 --- a/renderdoc/driver/d3d11/d3d11_overlay.cpp +++ b/renderdoc/driver/d3d11/d3d11_overlay.cpp @@ -24,9 +24,6 @@ ******************************************************************************/ #include "data/resource.h" -#include "driver/d3d11/d3d11_renderstate.h" -#include "driver/d3d11/d3d11_resources.h" -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "maths/vec.h" @@ -35,6 +32,9 @@ #include "d3d11_context.h" #include "d3d11_debug.h" #include "d3d11_manager.h" +#include "d3d11_renderstate.h" +#include "d3d11_replay.h" +#include "d3d11_resources.h" #include "data/hlsl/hlsl_cbuffers.h" diff --git a/renderdoc/driver/d3d11/d3d11_pixelhistory.cpp b/renderdoc/driver/d3d11/d3d11_pixelhistory.cpp index d0f0d6c62..146b9e54b 100644 --- a/renderdoc/driver/d3d11/d3d11_pixelhistory.cpp +++ b/renderdoc/driver/d3d11/d3d11_pixelhistory.cpp @@ -23,15 +23,17 @@ ******************************************************************************/ #include "data/resource.h" -#include "driver/d3d11/d3d11_renderstate.h" -#include "driver/d3d11/d3d11_resources.h" #include "maths/formatpacking.h" #include "maths/vec.h" #include "serialise/serialiser.h" #include "strings/string_utils.h" #include "d3d11_context.h" #include "d3d11_debug.h" +#include "d3d11_device.h" #include "d3d11_manager.h" +#include "d3d11_renderstate.h" +#include "d3d11_replay.h" +#include "d3d11_resources.h" /* * The general algorithm for pixel history is this: diff --git a/renderdoc/driver/d3d11/d3d11_postvs.cpp b/renderdoc/driver/d3d11/d3d11_postvs.cpp index a4d516ca0..83952d4d9 100644 --- a/renderdoc/driver/d3d11/d3d11_postvs.cpp +++ b/renderdoc/driver/d3d11/d3d11_postvs.cpp @@ -24,12 +24,13 @@ #include #include "data/resource.h" -#include "driver/d3d11/d3d11_resources.h" #include "strings/string_utils.h" #include "d3d11_context.h" #include "d3d11_debug.h" #include "d3d11_manager.h" #include "d3d11_renderstate.h" +#include "d3d11_replay.h" +#include "d3d11_resources.h" void D3D11Replay::InitStreamOut() { diff --git a/renderdoc/driver/d3d11/d3d11_rendermesh.cpp b/renderdoc/driver/d3d11/d3d11_rendermesh.cpp index bb6c659cc..342d2844a 100644 --- a/renderdoc/driver/d3d11/d3d11_rendermesh.cpp +++ b/renderdoc/driver/d3d11/d3d11_rendermesh.cpp @@ -28,6 +28,7 @@ #include "d3d11_context.h" #include "d3d11_debug.h" #include "d3d11_device.h" +#include "d3d11_replay.h" #include "d3d11_resources.h" #include "data/hlsl/hlsl_cbuffers.h" diff --git a/renderdoc/driver/d3d11/d3d11_renderstate.cpp b/renderdoc/driver/d3d11/d3d11_renderstate.cpp index 9c0fa001f..188f290c9 100644 --- a/renderdoc/driver/d3d11/d3d11_renderstate.cpp +++ b/renderdoc/driver/d3d11/d3d11_renderstate.cpp @@ -23,10 +23,10 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/d3d11/d3d11_renderstate.h" -#include "driver/d3d11/d3d11_context.h" -#include "driver/d3d11/d3d11_device.h" -#include "driver/d3d11/d3d11_resources.h" +#include "d3d11_renderstate.h" +#include "d3d11_context.h" +#include "d3d11_device.h" +#include "d3d11_resources.h" D3D11RenderState::D3D11RenderState(D3D11RenderState::EmptyInit) { diff --git a/renderdoc/driver/d3d11/d3d11_renderstate.h b/renderdoc/driver/d3d11/d3d11_renderstate.h index 12b7959c6..f9f9ab46d 100644 --- a/renderdoc/driver/d3d11/d3d11_renderstate.h +++ b/renderdoc/driver/d3d11/d3d11_renderstate.h @@ -27,7 +27,7 @@ #include "common/common.h" #include "core/core.h" -#include "driver/d3d11/d3d11_manager.h" +#include "d3d11_manager.h" class WrappedID3D11Device; class WrappedID3D11DeviceContext; diff --git a/renderdoc/driver/d3d11/d3d11_rendertext.h b/renderdoc/driver/d3d11/d3d11_rendertext.h index 2aac26f06..cf6d28c74 100644 --- a/renderdoc/driver/d3d11/d3d11_rendertext.h +++ b/renderdoc/driver/d3d11/d3d11_rendertext.h @@ -24,6 +24,7 @@ #pragma once +#include "common/common.h" #include "driver/dx/official/d3d11_4.h" class WrappedID3D11Device; diff --git a/renderdoc/driver/d3d11/d3d11_rendertexture.cpp b/renderdoc/driver/d3d11/d3d11_rendertexture.cpp index 8d8ab7860..198ed6ad1 100644 --- a/renderdoc/driver/d3d11/d3d11_rendertexture.cpp +++ b/renderdoc/driver/d3d11/d3d11_rendertexture.cpp @@ -22,12 +22,12 @@ * THE SOFTWARE. ******************************************************************************/ -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "d3d11_context.h" #include "d3d11_debug.h" #include "d3d11_device.h" +#include "d3d11_replay.h" #include "d3d11_resources.h" #include "data/hlsl/hlsl_cbuffers.h" diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index cd26a64d1..5019e20ef 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -44,12 +44,14 @@ static const char *DXBCDisassemblyTarget = "DXBC"; -D3D11Replay::D3D11Replay() +D3D11Replay::D3D11Replay(WrappedID3D11Device *d) { if(RenderDoc::Inst().GetCrashHandler()) RenderDoc::Inst().GetCrashHandler()->RegisterMemoryRegion(this, sizeof(D3D11Replay)); - m_pDevice = NULL; + m_pDevice = d; + m_pImmediateContext = d->GetImmediateContext(); + m_Proxy = false; m_WARP = false; @@ -73,12 +75,6 @@ void D3D11Replay::Shutdown() m_pDevice->Release(); } -void D3D11Replay::SetDevice(WrappedID3D11Device *d) -{ - m_pDevice = d; - m_pImmediateContext = d->GetImmediateContext(); -} - void D3D11Replay::CreateResources(IDXGIFactory *factory) { bool wrapped = RefCountDXGIObject::HandleWrap(__uuidof(IDXGIFactory), (void **)&factory); @@ -506,11 +502,6 @@ void D3D11Replay::FreeCustomShader(ResourceId id) } } -FrameRecord D3D11Replay::GetFrameRecord() -{ - return m_pDevice->GetFrameRecord(); -} - std::vector D3D11Replay::GetUsage(ResourceId id) { return m_pDevice->GetImmediateContext()->GetUsage(id); diff --git a/renderdoc/driver/d3d11/d3d11_replay.h b/renderdoc/driver/d3d11/d3d11_replay.h index 2088e9ff4..6278ced12 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.h +++ b/renderdoc/driver/d3d11/d3d11_replay.h @@ -31,7 +31,7 @@ #include "d3d11_common.h" #include "d3d11_renderstate.h" -struct D3D11DebugManager; +class D3D11DebugManager; class WrappedID3D11Device; class WrappedID3D11DeviceContext; @@ -98,7 +98,7 @@ enum TexDisplayFlags class D3D11Replay : public IReplayDriver { public: - D3D11Replay(); + D3D11Replay(WrappedID3D11Device *d); ~D3D11Replay(); void SetProxy(bool p, bool warp) @@ -109,7 +109,6 @@ public: bool IsRemoteProxy() { return m_Proxy; } void Shutdown(); - void SetDevice(WrappedID3D11Device *d); void CreateResources(IDXGIFactory *factory); void DestroyResources(); @@ -137,8 +136,8 @@ public: std::vector GetUsage(ResourceId id); - FrameRecord GetFrameRecord(); - + FrameRecord &WriteFrameRecord() { return m_FrameRecord; } + FrameRecord GetFrameRecord() { return m_FrameRecord; } void SavePipelineState(uint32_t eventId); const D3D11Pipe::State *GetD3D11PipelineState() { return &m_CurPipelineState; } const D3D12Pipe::State *GetD3D12PipelineState() { return NULL; } @@ -483,5 +482,7 @@ private: std::vector m_Resources; std::map m_ResourceIdx; + FrameRecord m_FrameRecord; + D3D11Pipe::State m_CurPipelineState; }; diff --git a/renderdoc/driver/d3d11/d3d11_resources.cpp b/renderdoc/driver/d3d11/d3d11_resources.cpp index 6395c908d..f5b7dbc2f 100644 --- a/renderdoc/driver/d3d11/d3d11_resources.cpp +++ b/renderdoc/driver/d3d11/d3d11_resources.cpp @@ -23,13 +23,13 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/d3d11/d3d11_resources.h" +#include "d3d11_resources.h" #include "3rdparty/lz4/lz4.h" #include "api/app/renderdoc_app.h" -#include "driver/d3d11/d3d11_context.h" -#include "driver/d3d11/d3d11_renderstate.h" #include "driver/dxgi/dxgi_wrapped.h" #include "driver/shaders/dxbc/dxbc_reflect.h" +#include "d3d11_context.h" +#include "d3d11_renderstate.h" WRAPPED_POOL_INST(WrappedID3D11Buffer); WRAPPED_POOL_INST(WrappedID3D11Texture1D); diff --git a/renderdoc/driver/d3d11/d3d11_resources.h b/renderdoc/driver/d3d11/d3d11_resources.h index a7681bd8b..b1159f0d0 100644 --- a/renderdoc/driver/d3d11/d3d11_resources.h +++ b/renderdoc/driver/d3d11/d3d11_resources.h @@ -25,9 +25,9 @@ #pragma once -#include "driver/d3d11/d3d11_device.h" -#include "driver/d3d11/d3d11_manager.h" #include "driver/shaders/dxbc/dxbc_container.h" +#include "d3d11_device.h" +#include "d3d11_manager.h" D3D11ResourceType IdentifyTypeByPtr(IUnknown *ptr); ResourceId GetIDForDeviceChild(ID3D11DeviceChild *ptr); diff --git a/renderdoc/driver/d3d11/d3d11_shader_cache.h b/renderdoc/driver/d3d11/d3d11_shader_cache.h index 948ec1f6b..09a869e75 100644 --- a/renderdoc/driver/d3d11/d3d11_shader_cache.h +++ b/renderdoc/driver/d3d11/d3d11_shader_cache.h @@ -27,7 +27,6 @@ #include #include #include -#include "api/replay/renderdoc_replay.h" #include "driver/dx/official/d3d11_4.h" class WrappedID3D11Device; diff --git a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp index 81d70eb79..c9034f7c9 100644 --- a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp +++ b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp @@ -24,8 +24,6 @@ ******************************************************************************/ #include "data/resource.h" -#include "driver/d3d11/d3d11_renderstate.h" -#include "driver/d3d11/d3d11_resources.h" #include "driver/shaders/dxbc/dxbc_bytecode.h" #include "driver/shaders/dxbc/dxbc_debug.h" #include "maths/formatpacking.h" @@ -34,6 +32,9 @@ #include "d3d11_context.h" #include "d3d11_debug.h" #include "d3d11_manager.h" +#include "d3d11_renderstate.h" +#include "d3d11_replay.h" +#include "d3d11_resources.h" #include "d3d11_shader_cache.h" struct DebugHit diff --git a/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj b/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj index 869ed399d..154998d82 100644 --- a/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj +++ b/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj @@ -164,6 +164,9 @@ {7fcb5fc5-1dbd-4da6-83a0-6ba4e945bda5} + + {40349ad9-5558-4df4-84e2-11934de90a11} + {c43ff27e-a155-4852-88ec-5ce9334c07a8} false diff --git a/renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp index 36e8ee0ea..e8cea78f4 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp @@ -90,11 +90,10 @@ bool WrappedID3D12GraphicsCommandList::Serialise_BeginRenderPass( (D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *)pDepthStencil; for(UINT i = 0; i < NumRenderTargets; i++) - rts[i].cpuDescriptor = - Unwrap(m_pDevice->GetReplay()->GetDebugManager()->GetTempDescriptor(RTVs[i], i)); + rts[i].cpuDescriptor = Unwrap(m_pDevice->GetDebugManager()->GetTempDescriptor(RTVs[i], i)); if(ds) - ds->cpuDescriptor = Unwrap(m_pDevice->GetReplay()->GetDebugManager()->GetTempDescriptor(DSV)); + ds->cpuDescriptor = Unwrap(m_pDevice->GetDebugManager()->GetTempDescriptor(DSV)); } if(IsActiveReplaying(m_State)) diff --git a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp index e77fed434..c91bec939 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp @@ -312,7 +312,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_Reset(SerialiserType &ser, RDCASSERTEQUAL(hr, S_OK); m_pDevice->AddResource(BakedCommandList, ResourceType::CommandBuffer, "Baked Command List"); - m_pDevice->GetReplay()->GetResourceDesc(BakedCommandList).initialisationChunks.clear(); + m_pDevice->GetResourceDesc(BakedCommandList).initialisationChunks.clear(); m_pDevice->DerivedResource(CommandList, BakedCommandList); m_pDevice->DerivedResource(pAllocator, BakedCommandList); if(pInitialState) @@ -380,7 +380,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_Reset(SerialiserType &ser, // reset state D3D12RenderState &state = m_Cmd->m_BakedCmdListInfo[BakedCommandList].state; state.m_ResourceManager = GetResourceManager(); - state.m_DebugManager = m_pDevice->GetReplay()->GetDebugManager(); + state.m_DebugManager = m_pDevice->GetDebugManager(); state.pipe = GetResID(pInitialState); } } @@ -1433,14 +1433,13 @@ bool WrappedID3D12GraphicsCommandList::Serialise_OMSetRenderTargets( unwrappedRTs.resize(RTVs.size()); for(size_t i = 0; i < RTVs.size(); i++) { - unwrappedRTs[i] = - Unwrap(m_pDevice->GetReplay()->GetDebugManager()->GetTempDescriptor(RTVs[i], i)); + unwrappedRTs[i] = Unwrap(m_pDevice->GetDebugManager()->GetTempDescriptor(RTVs[i], i)); } D3D12_CPU_DESCRIPTOR_HANDLE unwrappedDSV = {}; if(DSV.GetResResourceId() != ResourceId()) { - unwrappedDSV = Unwrap(m_pDevice->GetReplay()->GetDebugManager()->GetTempDescriptor(DSV)); + unwrappedDSV = Unwrap(m_pDevice->GetDebugManager()->GetTempDescriptor(DSV)); } if(IsActiveReplaying(m_State)) @@ -3457,7 +3456,7 @@ void WrappedID3D12GraphicsCommandList::PatchExecuteIndirect(BakedCmdListInfo &in if(exec.countBuf) { bytebuf data; - m_pDevice->GetReplay()->GetDebugManager()->GetBufferData(exec.countBuf, exec.countOffs, 4, data); + m_pDevice->GetDebugManager()->GetBufferData(exec.countBuf, exec.countOffs, 4, data); count = RDCMIN(count, *(uint32_t *)&data[0]); } @@ -3865,8 +3864,8 @@ void WrappedID3D12GraphicsCommandList::ReplayExecuteIndirect(ID3D12GraphicsComma } bytebuf data; - m_pDevice->GetReplay()->GetDebugManager()->GetBufferData(exec.argBuf, exec.argOffs, - count * comSig->sig.ByteStride, data); + m_pDevice->GetDebugManager()->GetBufferData(exec.argBuf, exec.argOffs, + count * comSig->sig.ByteStride, data); byte *dataPtr = &data[0]; @@ -4382,7 +4381,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ClearDepthStencilView( SERIALISE_ELEMENT_LOCAL(DSV, *GetWrapped(DepthStencilView)).Named("DepthStencilView"_lit); if(IsReplayingAndReading()) - DepthStencilView = m_pDevice->GetReplay()->GetDebugManager()->GetTempDescriptor(DSV); + DepthStencilView = m_pDevice->GetDebugManager()->GetTempDescriptor(DSV); } else { @@ -4479,7 +4478,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ClearRenderTargetView( SERIALISE_ELEMENT_LOCAL(RTV, *GetWrapped(RenderTargetView)).Named("RenderTargetView"_lit); if(IsReplayingAndReading()) - RenderTargetView = m_pDevice->GetReplay()->GetDebugManager()->GetTempDescriptor(RTV); + RenderTargetView = m_pDevice->GetDebugManager()->GetTempDescriptor(RTV); } else { @@ -4572,7 +4571,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ClearUnorderedAccessViewUint( SERIALISE_ELEMENT_LOCAL(UAV, *GetWrapped(ViewCPUHandle)).Named("ViewCPUHandle"_lit); if(IsReplayingAndReading()) - ViewCPUHandle = m_pDevice->GetReplay()->GetDebugManager()->GetTempDescriptor(UAV); + ViewCPUHandle = m_pDevice->GetDebugManager()->GetTempDescriptor(UAV); } else { @@ -4677,7 +4676,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ClearUnorderedAccessViewFloat( SERIALISE_ELEMENT_LOCAL(UAV, *GetWrapped(ViewCPUHandle)).Named("ViewCPUHandle"_lit); if(IsReplayingAndReading()) - ViewCPUHandle = m_pDevice->GetReplay()->GetDebugManager()->GetTempDescriptor(UAV); + ViewCPUHandle = m_pDevice->GetDebugManager()->GetTempDescriptor(UAV); } else { diff --git a/renderdoc/driver/d3d12/d3d12_commands.h b/renderdoc/driver/d3d12/d3d12_commands.h index 83ba1dbf4..b8d075fa6 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.h +++ b/renderdoc/driver/d3d12/d3d12_commands.h @@ -24,7 +24,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "common/common.h" #include "d3d12_common.h" #include "d3d12_state.h" diff --git a/renderdoc/driver/d3d12/d3d12_common.h b/renderdoc/driver/d3d12/d3d12_common.h index a47e46f63..73badfd30 100644 --- a/renderdoc/driver/d3d12/d3d12_common.h +++ b/renderdoc/driver/d3d12/d3d12_common.h @@ -26,7 +26,6 @@ #define INITGUID -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "driver/dx/official/D3D12Downlevel.h" #include "driver/dx/official/d3d12.h" diff --git a/renderdoc/driver/d3d12/d3d12_counters.cpp b/renderdoc/driver/d3d12/d3d12_counters.cpp index ddfc4e001..8c8d69b47 100644 --- a/renderdoc/driver/d3d12/d3d12_counters.cpp +++ b/renderdoc/driver/d3d12/d3d12_counters.cpp @@ -29,6 +29,7 @@ #include "d3d12_command_queue.h" #include "d3d12_common.h" #include "d3d12_device.h" +#include "d3d12_replay.h" rdcarray D3D12Replay::EnumerateCounters() { diff --git a/renderdoc/driver/d3d12/d3d12_debug.cpp b/renderdoc/driver/d3d12/d3d12_debug.cpp index d297d91b1..22547fee1 100644 --- a/renderdoc/driver/d3d12/d3d12_debug.cpp +++ b/renderdoc/driver/d3d12/d3d12_debug.cpp @@ -27,7 +27,6 @@ #include "data/resource.h" #include "driver/dx/official/d3dcompiler.h" #include "driver/dxgi/dxgi_common.h" -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "maths/vec.h" @@ -35,6 +34,7 @@ #include "d3d12_command_list.h" #include "d3d12_command_queue.h" #include "d3d12_device.h" +#include "d3d12_replay.h" #include "d3d12_shader_cache.h" #include "data/hlsl/hlsl_cbuffers.h" diff --git a/renderdoc/driver/d3d12/d3d12_debug.h b/renderdoc/driver/d3d12/d3d12_debug.h index af44c1e75..96be9cdcd 100644 --- a/renderdoc/driver/d3d12/d3d12_debug.h +++ b/renderdoc/driver/d3d12/d3d12_debug.h @@ -24,7 +24,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "replay/replay_driver.h" #include "d3d12_common.h" diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 9c795e5cf..0117b7505 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -36,6 +36,7 @@ #include "d3d12_command_list.h" #include "d3d12_command_queue.h" #include "d3d12_rendertext.h" +#include "d3d12_replay.h" #include "d3d12_resources.h" #include "d3d12_shader_cache.h" @@ -63,6 +64,11 @@ std::string WrappedID3D12Device::GetChunkName(uint32_t idx) return ToStr((D3D12Chunk)idx); } +D3D12DebugManager *WrappedID3D12Device::GetDebugManager() +{ + return m_Replay->GetDebugManager(); +} + ULONG STDMETHODCALLTYPE DummyID3D12InfoQueue::AddRef() { m_pDevice->AddRef(); @@ -206,6 +212,8 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara m_SectionVersion = D3D12InitParams::CurrentVersion; + m_Replay = new D3D12Replay(this); + m_StructuredFile = &m_StoredStructuredData; RDCEraseEl(m_D3D12Opts); @@ -263,8 +271,6 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara m_DummyDebug.m_pDevice = this; m_WrappedDebug.m_pDevice = this; - m_Replay.SetDevice(this); - threadSerialiserTLSSlot = Threading::AllocateTLSSlot(); tempMemoryTLSSlot = Threading::AllocateTLSSlot(); @@ -485,7 +491,7 @@ WrappedID3D12Device::~WrappedID3D12Device() SAFE_RELEASE(it->second); } - m_Replay.DestroyResources(); + m_Replay->DestroyResources(); DestroyInternalResources(); @@ -535,6 +541,8 @@ WrappedID3D12Device::~WrappedID3D12Device() SAFE_DELETE(m_ResourceList); SAFE_DELETE(m_PipelineList); + delete m_Replay; + if(RenderDoc::Inst().GetCrashHandler()) RenderDoc::Inst().GetCrashHandler()->UnregisterMemoryRegion(this); } @@ -1699,8 +1707,8 @@ bool WrappedID3D12Device::Serialise_CaptureScope(SerialiserType &ser) if(IsReplayMode(m_State)) { - m_FrameRecord.frameInfo.frameNumber = frameNumber; - RDCEraseEl(m_FrameRecord.frameInfo.stats); + GetReplay()->WriteFrameRecord().frameInfo.frameNumber = frameNumber; + RDCEraseEl(GetReplay()->WriteFrameRecord().frameInfo.stats); } return true; @@ -2743,7 +2751,7 @@ void WrappedID3D12Device::CreateInternalResources() if(m_TextRenderer == NULL) m_TextRenderer = new D3D12TextRenderer(this); - m_Replay.CreateResources(); + m_Replay->CreateResources(); WrappedID3D12Shader::InternalResources(false); } @@ -3060,6 +3068,11 @@ bool WrappedID3D12Device::ProcessChunk(ReadSerialiser &ser, D3D12Chunk context) return true; } +ResourceDescription &WrappedID3D12Device::GetResourceDesc(ResourceId id) +{ + return GetReplay()->GetResourceDesc(id); +} + void WrappedID3D12Device::AddResource(ResourceId id, ResourceType type, const char *defaultNamePrefix) { ResourceDescription &descr = GetReplay()->GetResourceDesc(id); @@ -3171,7 +3184,7 @@ ReplayStatus WrappedID3D12Device::ReadLogInitialisation(RDCFile *rdc, bool store if((SystemChunk)context == SystemChunk::CaptureScope) { - m_FrameRecord.frameInfo.fileOffset = offsetStart; + GetReplay()->WriteFrameRecord().frameInfo.fileOffset = offsetStart; // read the remaining data into memory and pass to immediate context frameDataSize = reader->GetSize() - reader->GetOffset(); @@ -3220,11 +3233,11 @@ ReplayStatus WrappedID3D12Device::ReadLogInitialisation(RDCFile *rdc, bool store if(!IsStructuredExporting(m_State)) { - GetFrameRecord().drawcallList = m_Queue->GetParentDrawcall().Bake(); + GetReplay()->WriteFrameRecord().drawcallList = m_Queue->GetParentDrawcall().Bake(); m_Queue->GetParentDrawcall().children.clear(); - SetupDrawcallPointers(m_Drawcalls, GetFrameRecord().drawcallList); + SetupDrawcallPointers(m_Drawcalls, GetReplay()->WriteFrameRecord().drawcallList); D3D12CommandData &cmd = *m_Queue->GetCommandData(); @@ -3253,15 +3266,16 @@ ReplayStatus WrappedID3D12Device::ReadLogInitialisation(RDCFile *rdc, bool store } #endif - m_FrameRecord.frameInfo.uncompressedFileSize = + GetReplay()->WriteFrameRecord().frameInfo.uncompressedFileSize = rdc->GetSectionProperties(sectionIdx).uncompressedSize; - m_FrameRecord.frameInfo.compressedFileSize = rdc->GetSectionProperties(sectionIdx).compressedSize; - m_FrameRecord.frameInfo.persistentSize = frameDataSize; - m_FrameRecord.frameInfo.initDataSize = + GetReplay()->WriteFrameRecord().frameInfo.compressedFileSize = + rdc->GetSectionProperties(sectionIdx).compressedSize; + GetReplay()->WriteFrameRecord().frameInfo.persistentSize = frameDataSize; + GetReplay()->WriteFrameRecord().frameInfo.initDataSize = chunkInfos[(D3D12Chunk)SystemChunk::InitialContents].totalsize; RDCDEBUG("Allocating %llu persistant bytes of memory for the log.", - m_FrameRecord.frameInfo.persistentSize); + GetReplay()->WriteFrameRecord().frameInfo.persistentSize); return ReplayStatus::Succeeded; } @@ -3328,7 +3342,7 @@ void WrappedID3D12Device::ReplayLog(uint32_t startEventID, uint32_t endEventID, cmd.m_Partial[D3D12CommandData::Secondary].Reset(); cmd.m_RenderState = D3D12RenderState(); cmd.m_RenderState.m_ResourceManager = GetResourceManager(); - cmd.m_RenderState.m_DebugManager = m_Replay.GetDebugManager(); + cmd.m_RenderState.m_DebugManager = m_Replay->GetDebugManager(); } // we'll need our own command list if we're replaying just a subsection diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index 237d4f381..64f75619c 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -26,7 +26,6 @@ #include #include -#include "api/replay/renderdoc_replay.h" #include "common/threading.h" #include "common/timing.h" #include "common/wrapped_pool.h" @@ -35,7 +34,6 @@ #include "replay/replay_driver.h" #include "d3d12_common.h" #include "d3d12_manager.h" -#include "d3d12_replay.h" struct IAmdExtD3DFactory; @@ -57,6 +55,7 @@ class WrappedID3D12Device; class WrappedID3D12Resource1; class WrappedID3D12PipelineState; +class D3D12Replay; class D3D12TextRenderer; class D3D12ShaderCache; class D3D12DebugManager; @@ -394,7 +393,7 @@ private: DummyID3D12DebugDevice m_DummyDebug; WrappedID3D12DebugDevice m_WrappedDebug; - D3D12Replay m_Replay; + D3D12Replay *m_Replay; D3D12ShaderCache *m_ShaderCache = NULL; D3D12TextRenderer *m_TextRenderer = NULL; @@ -433,7 +432,6 @@ private: uint32_t m_FrameCounter = 0; std::vector m_CapturedFrames; - FrameRecord m_FrameRecord; std::vector m_Drawcalls; ReplayStatus m_FailedReplayStatus = ReplayStatus::APIReplayFailed; @@ -545,12 +543,11 @@ public: static std::string GetChunkName(uint32_t idx); D3D12ResourceManager *GetResourceManager() { return m_ResourceManager; } D3D12ShaderCache *GetShaderCache() { return m_ShaderCache; } - D3D12DebugManager *GetDebugManager() { return m_Replay.GetDebugManager(); } + D3D12DebugManager *GetDebugManager(); ResourceId GetResourceID() { return m_ResourceID; } Threading::RWLock &GetCapTransitionLock() { return m_CapTransitionLock; } void ReleaseSwapchainResources(IDXGISwapChain *swap, IUnknown **backbuffers, int numBackbuffers); void FirstFrame(IDXGISwapper *swapper); - FrameRecord &GetFrameRecord() { return m_FrameRecord; } const DrawcallDescription *GetDrawcall(uint32_t eventId); ResourceId GetFrameCaptureResourceId() { return m_FrameCaptureRecord->GetResourceID(); } @@ -558,6 +555,7 @@ public: void AddDebugMessage(const DebugMessage &msg); std::vector GetDebugMessages(); + ResourceDescription &GetResourceDesc(ResourceId id); void AddResource(ResourceId id, ResourceType type, const char *defaultNamePrefix); void DerivedResource(ResourceId parent, ResourceId child); void DerivedResource(ID3D12DeviceChild *parent, ResourceId child); @@ -584,7 +582,7 @@ public: const ReplayOptions &GetReplayOptions() { return m_ReplayOptions; } uint64_t GetLogVersion() { return m_SectionVersion; } CaptureState GetState() { return m_State; } - D3D12Replay *GetReplay() { return &m_Replay; } + D3D12Replay *GetReplay() { return m_Replay; } WrappedID3D12CommandQueue *GetQueue() { return m_Queue; } ID3D12CommandAllocator *GetAlloc() { return m_Alloc; } void ApplyBarriers(std::vector &barriers); diff --git a/renderdoc/driver/d3d12/d3d12_manager.h b/renderdoc/driver/d3d12/d3d12_manager.h index 98c9a679f..066500b34 100644 --- a/renderdoc/driver/d3d12/d3d12_manager.h +++ b/renderdoc/driver/d3d12/d3d12_manager.h @@ -24,7 +24,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "common/wrapped_pool.h" #include "core/core.h" #include "core/resource_manager.h" diff --git a/renderdoc/driver/d3d12/d3d12_msaa_array_conv.cpp b/renderdoc/driver/d3d12/d3d12_msaa_array_conv.cpp index 7dcf89916..03dfe7644 100644 --- a/renderdoc/driver/d3d12/d3d12_msaa_array_conv.cpp +++ b/renderdoc/driver/d3d12/d3d12_msaa_array_conv.cpp @@ -22,13 +22,14 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/dx/official/d3dcompiler.h" #include "driver/dxgi/dxgi_common.h" #include "d3d12_command_list.h" #include "d3d12_command_queue.h" #include "d3d12_debug.h" #include "d3d12_device.h" +#include "driver/dx/official/d3dcompiler.h" + void D3D12DebugManager::CopyTex2DMSToArray(ID3D12Resource *destArray, ID3D12Resource *srcMS) { // this function operates during capture so we work on unwrapped objects diff --git a/renderdoc/driver/d3d12/d3d12_outputwindow.cpp b/renderdoc/driver/d3d12/d3d12_outputwindow.cpp index 7b01d7731..592633326 100644 --- a/renderdoc/driver/d3d12/d3d12_outputwindow.cpp +++ b/renderdoc/driver/d3d12/d3d12_outputwindow.cpp @@ -25,6 +25,7 @@ #include "d3d12_command_queue.h" #include "d3d12_debug.h" #include "d3d12_device.h" +#include "d3d12_replay.h" void D3D12Replay::OutputWindow::MakeRTV(bool msaa) { diff --git a/renderdoc/driver/d3d12/d3d12_overlay.cpp b/renderdoc/driver/d3d12/d3d12_overlay.cpp index 46e32b670..70b808752 100644 --- a/renderdoc/driver/d3d12/d3d12_overlay.cpp +++ b/renderdoc/driver/d3d12/d3d12_overlay.cpp @@ -26,7 +26,6 @@ #include "data/resource.h" #include "driver/dx/official/d3dcompiler.h" #include "driver/dxgi/dxgi_common.h" -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "maths/vec.h" @@ -36,6 +35,7 @@ #include "d3d12_command_queue.h" #include "d3d12_debug.h" #include "d3d12_device.h" +#include "d3d12_replay.h" #include "d3d12_shader_cache.h" #include "data/hlsl/hlsl_cbuffers.h" diff --git a/renderdoc/driver/d3d12/d3d12_postvs.cpp b/renderdoc/driver/d3d12/d3d12_postvs.cpp index d8fb6b683..510821480 100644 --- a/renderdoc/driver/d3d12/d3d12_postvs.cpp +++ b/renderdoc/driver/d3d12/d3d12_postvs.cpp @@ -29,6 +29,7 @@ #include "d3d12_command_queue.h" #include "d3d12_debug.h" #include "d3d12_device.h" +#include "d3d12_replay.h" #include "d3d12_shader_cache.h" bool D3D12Replay::CreateSOBuffers() diff --git a/renderdoc/driver/d3d12/d3d12_rendermesh.cpp b/renderdoc/driver/d3d12/d3d12_rendermesh.cpp index 52c2347b8..b510a447b 100644 --- a/renderdoc/driver/d3d12/d3d12_rendermesh.cpp +++ b/renderdoc/driver/d3d12/d3d12_rendermesh.cpp @@ -31,6 +31,7 @@ #include "d3d12_command_queue.h" #include "d3d12_debug.h" #include "d3d12_device.h" +#include "d3d12_replay.h" #include "data/hlsl/hlsl_cbuffers.h" diff --git a/renderdoc/driver/d3d12/d3d12_rendertexture.cpp b/renderdoc/driver/d3d12/d3d12_rendertexture.cpp index c0bbd25c8..5a3a9c07d 100644 --- a/renderdoc/driver/d3d12/d3d12_rendertexture.cpp +++ b/renderdoc/driver/d3d12/d3d12_rendertexture.cpp @@ -29,6 +29,7 @@ #include "d3d12_command_queue.h" #include "d3d12_debug.h" #include "d3d12_device.h" +#include "d3d12_replay.h" #include "data/hlsl/hlsl_cbuffers.h" diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 06eeb4877..5bea9babb 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -81,9 +81,9 @@ D3D12Pipe::RegisterSpace &get_space(rdcarray &dstSpace return dstSpaces.back(); } -D3D12Replay::D3D12Replay() +D3D12Replay::D3D12Replay(WrappedID3D12Device *d) { - m_pDevice = NULL; + m_pDevice = d; m_Proxy = false; m_HighlightCache.driver = this; @@ -633,11 +633,6 @@ void D3D12Replay::FreeCustomShader(ResourceId id) } } -FrameRecord D3D12Replay::GetFrameRecord() -{ - return m_pDevice->GetFrameRecord(); -} - ResourceId D3D12Replay::GetLiveID(ResourceId id) { if(!m_pDevice->GetResourceManager()->HasLiveResource(id)) diff --git a/renderdoc/driver/d3d12/d3d12_replay.h b/renderdoc/driver/d3d12/d3d12_replay.h index 4dbd3bf94..ce6625c0e 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.h +++ b/renderdoc/driver/d3d12/d3d12_replay.h @@ -53,7 +53,7 @@ enum TexDisplayFlags class D3D12Replay : public IReplayDriver { public: - D3D12Replay(); + D3D12Replay(WrappedID3D12Device *d); D3D12DebugManager *GetDebugManager() { return m_DebugManager; } void SetRGP(AMDRGPControl *rgp) { m_RGP = rgp; } @@ -63,7 +63,6 @@ public: void Initialise(IDXGIFactory1 *factory); void Shutdown(); - void SetDevice(WrappedID3D12Device *d) { m_pDevice = d; } void CreateResources(); void DestroyResources(); DriverInformation GetDriverInfo() { return m_DriverInfo; } @@ -90,8 +89,8 @@ public: std::vector GetUsage(ResourceId id); - FrameRecord GetFrameRecord(); - + FrameRecord &WriteFrameRecord() { return m_FrameRecord; } + FrameRecord GetFrameRecord() { return m_FrameRecord; } void SavePipelineState(uint32_t eventId); const D3D11Pipe::State *GetD3D11PipelineState() { return NULL; } const D3D12Pipe::State *GetD3D12PipelineState() { return &m_PipelineState; } @@ -422,6 +421,8 @@ private: D3D12Pipe::State m_PipelineState; + FrameRecord m_FrameRecord; + WrappedID3D12Device *m_pDevice = NULL; D3D12DebugManager *m_DebugManager = NULL; diff --git a/renderdoc/driver/d3d12/d3d12_resources.h b/renderdoc/driver/d3d12/d3d12_resources.h index 5049eb6a8..6906d20a2 100644 --- a/renderdoc/driver/d3d12/d3d12_resources.h +++ b/renderdoc/driver/d3d12/d3d12_resources.h @@ -693,7 +693,7 @@ public: { device->AddResource(GetResourceID(), ResourceType::Shader, "Shader"); - ResourceDescription &desc = device->GetReplay()->GetResourceDesc(GetResourceID()); + ResourceDescription &desc = device->GetResourceDesc(GetResourceID()); // this will be appended to in the function above. desc.initialisationChunks.clear(); diff --git a/renderdoc/driver/d3d12/d3d12_shader_cache.h b/renderdoc/driver/d3d12/d3d12_shader_cache.h index 2df9b6705..189d003c5 100644 --- a/renderdoc/driver/d3d12/d3d12_shader_cache.h +++ b/renderdoc/driver/d3d12/d3d12_shader_cache.h @@ -27,8 +27,8 @@ #include #include #include -#include "api/replay/renderdoc_replay.h" #include "driver/dx/official/d3d11_4.h" +#include "d3d12_common.h" class WrappedID3D11Device; diff --git a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp index 72d52415e..9ba39e698 100644 --- a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp +++ b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp @@ -26,6 +26,7 @@ #include "driver/shaders/dxbc/dxbc_debug.h" #include "d3d12_command_queue.h" #include "d3d12_debug.h" +#include "d3d12_replay.h" #include "d3d12_resources.h" #include "d3d12_shader_cache.h" diff --git a/renderdoc/driver/d3d8/d3d8_common.h b/renderdoc/driver/d3d8/d3d8_common.h index 9069377c7..7e380028f 100644 --- a/renderdoc/driver/d3d8/d3d8_common.h +++ b/renderdoc/driver/d3d8/d3d8_common.h @@ -24,7 +24,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "driver/dx/official/d3d8.h" diff --git a/renderdoc/driver/d3d8/d3d8_manager.h b/renderdoc/driver/d3d8/d3d8_manager.h index 6632ea7de..bdd1f3a28 100644 --- a/renderdoc/driver/d3d8/d3d8_manager.h +++ b/renderdoc/driver/d3d8/d3d8_manager.h @@ -24,7 +24,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "common/wrapped_pool.h" #include "core/core.h" #include "core/resource_manager.h" diff --git a/renderdoc/driver/d3d9/d3d9_common.h b/renderdoc/driver/d3d9/d3d9_common.h index 04c228af7..20994b817 100644 --- a/renderdoc/driver/d3d9/d3d9_common.h +++ b/renderdoc/driver/d3d9/d3d9_common.h @@ -24,7 +24,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "driver/dx/official/d3d9.h" diff --git a/renderdoc/driver/dx/official/d3dcompiler.h b/renderdoc/driver/dx/official/d3dcompiler.h index 2031c9724..6bc42c33d 100644 --- a/renderdoc/driver/dx/official/d3dcompiler.h +++ b/renderdoc/driver/dx/official/d3dcompiler.h @@ -13,7 +13,7 @@ #include "winapifamily.h" // Current name of the DLL shipped in the same SDK as this header. - +#include "d3dcommon.h" #define D3DCOMPILER_DLL_W L"d3dcompiler_47.dll" diff --git a/renderdoc/driver/dxgi/dxgi_common.cpp b/renderdoc/driver/dxgi/dxgi_common.cpp index d45889d26..ddf1e2bc3 100644 --- a/renderdoc/driver/dxgi/dxgi_common.cpp +++ b/renderdoc/driver/dxgi/dxgi_common.cpp @@ -23,6 +23,7 @@ ******************************************************************************/ #include "dxgi_common.h" +#include "api/replay/control_types.h" #include "common/common.h" #include "common/threading.h" #include "serialise/serialiser.h" diff --git a/renderdoc/driver/dxgi/dxgi_common.h b/renderdoc/driver/dxgi/dxgi_common.h index 8dc29e655..7378ad387 100644 --- a/renderdoc/driver/dxgi/dxgi_common.h +++ b/renderdoc/driver/dxgi/dxgi_common.h @@ -24,7 +24,9 @@ #pragma once -#include "api/replay/renderdoc_replay.h" +#include "api/replay/data_types.h" +#include "api/replay/replay_enums.h" +#include "api/replay/stringise.h" #include "driver/dx/official/d3dcommon.h" #include "driver/dx/official/dxgi1_5.h" #include "maths/vec.h" @@ -68,6 +70,8 @@ D3D_PRIMITIVE_TOPOLOGY MakeD3DPrimitiveTopology(Topology Topo); void WarnUnknownGUID(const char *name, REFIID riid); +struct ReplayOptions; + std::string GetDriverVersion(DXGI_ADAPTER_DESC &desc); void ChooseBestMatchingAdapter(GraphicsAPI api, IDXGIFactory *factory, const DXGI_ADAPTER_DESC &AdapterDesc, const ReplayOptions &opts, diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.cpp b/renderdoc/driver/dxgi/dxgi_wrapped.cpp index fbda4affe..566de7c65 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.cpp +++ b/renderdoc/driver/dxgi/dxgi_wrapped.cpp @@ -23,9 +23,10 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/dxgi/dxgi_wrapped.h" +#include "dxgi_wrapped.h" #include "core/core.h" #include "serialise/serialiser.h" +#include "dxgi_common.h" ID3D11Resource *UnwrapDXResource(void *dxObject); IDXGIResource *UnwrapDXGIResource(void *dxgiObject); diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.h b/renderdoc/driver/dxgi/dxgi_wrapped.h index 62371c2da..937a90265 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.h +++ b/renderdoc/driver/dxgi/dxgi_wrapped.h @@ -25,6 +25,7 @@ #pragma once +#include "api/replay/stringise.h" #include "common/common.h" #include "common/wrapped_pool.h" #include "driver/dx/official/dxgi1_6.h" diff --git a/renderdoc/driver/gl/egl_hooks.cpp b/renderdoc/driver/gl/egl_hooks.cpp index cda152494..e68e436cc 100644 --- a/renderdoc/driver/gl/egl_hooks.cpp +++ b/renderdoc/driver/gl/egl_hooks.cpp @@ -22,9 +22,9 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/gl/egl_dispatch_table.h" -#include "driver/gl/gl_driver.h" #include "hooks/hooks.h" +#include "egl_dispatch_table.h" +#include "gl_driver.h" #if ENABLED(RDOC_POSIX) #include diff --git a/renderdoc/driver/gl/egl_platform.cpp b/renderdoc/driver/gl/egl_platform.cpp index e0df6d6fd..007fab32e 100644 --- a/renderdoc/driver/gl/egl_platform.cpp +++ b/renderdoc/driver/gl/egl_platform.cpp @@ -23,9 +23,9 @@ ******************************************************************************/ #include "core/plugins.h" -#include "driver/gl/egl_dispatch_table.h" -#include "driver/gl/gl_common.h" #include "strings/string_utils.h" +#include "egl_dispatch_table.h" +#include "gl_common.h" static void *GetEGLHandle() { diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 9250f20a4..8c3c6b30a 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -260,8 +260,6 @@ struct GLWindowingData #error "Unknown platform" #endif -#include "api/replay/renderdoc_replay.h" - struct GLPlatform { // simple wrapper for OS functions to make/delete a context @@ -383,8 +381,6 @@ typedef BOOL(APIENTRY *PFNWGLDXLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, H typedef BOOL(APIENTRY *PFNWGLDXUNLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE *hObjects); #endif -#include "api/replay/renderdoc_replay.h" - // bit of a hack, to work around C4127: conditional expression is constant // on template parameters template @@ -572,6 +568,9 @@ void ClearGLErrors(); GLuint GetBoundVertexBuffer(GLuint idx); GLint GetNumVertexBuffers(); +struct ShaderReflection; +struct ShaderBindpointMapping; + void EvaluateSPIRVBindpointMapping(GLuint curProg, int shadIdx, const ShaderReflection *refl, ShaderBindpointMapping &mapping); diff --git a/renderdoc/driver/gl/gl_counters.cpp b/renderdoc/driver/gl/gl_counters.cpp index b2b66c6cc..464cd3556 100644 --- a/renderdoc/driver/gl/gl_counters.cpp +++ b/renderdoc/driver/gl/gl_counters.cpp @@ -212,7 +212,7 @@ CounterDescription GLReplay::DescribeCounter(GPUCounter counterID) struct GPUQueries { - GLuint obj[ENUM_ARRAY_SIZE(GPUCounter)]; + GLuint obj[arraydim()]; uint32_t eventId; }; diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index da798ce8b..eb9d6ca2f 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -30,6 +30,7 @@ #include "jpeg-compressor/jpge.h" #include "serialise/rdcfile.h" #include "strings/string_utils.h" +#include "gl_replay.h" std::map WrappedOpenGL::m_ActiveContexts; @@ -615,7 +616,7 @@ WrappedOpenGL::WrappedOpenGL(GLPlatform &platform) // by default we assume OpenGL driver SetDriverType(RDCDriver::OpenGL); - m_Replay.SetDriver(this); + m_Replay = new GLReplay(this); m_StructuredFile = &m_StoredStructuredData; @@ -967,6 +968,8 @@ WrappedOpenGL::~WrappedOpenGL() if(RenderDoc::Inst().GetCrashHandler()) RenderDoc::Inst().GetCrashHandler()->UnregisterMemoryRegion(this); + + delete m_Replay; } ContextPair &WrappedOpenGL::GetCtx() @@ -2610,8 +2613,8 @@ bool WrappedOpenGL::Serialise_CaptureScope(SerialiserType &ser) if(IsReplayingAndReading()) { - m_FrameRecord.frameInfo.frameNumber = frameNumber; - RDCEraseEl(m_FrameRecord.frameInfo.stats); + GetReplay()->WriteFrameRecord().frameInfo.frameNumber = frameNumber; + RDCEraseEl(GetReplay()->WriteFrameRecord().frameInfo.stats); } return true; @@ -3269,7 +3272,7 @@ ReplayStatus WrappedOpenGL::ReadLogInitialisation(RDCFile *rdc, bool storeStruct if((SystemChunk)context == SystemChunk::CaptureScope) { - m_FrameRecord.frameInfo.fileOffset = offsetStart; + GetReplay()->WriteFrameRecord().frameInfo.fileOffset = offsetStart; // read the remaining data into memory and pass to immediate context frameDataSize = reader->GetSize() - reader->GetOffset(); @@ -3321,14 +3324,16 @@ ReplayStatus WrappedOpenGL::ReadLogInitialisation(RDCFile *rdc, bool storeStruct // and in future use this file. m_StructuredFile = &m_StoredStructuredData; - m_FrameRecord.frameInfo.uncompressedFileSize = + GetReplay()->WriteFrameRecord().frameInfo.uncompressedFileSize = rdc->GetSectionProperties(sectionIdx).uncompressedSize; - m_FrameRecord.frameInfo.compressedFileSize = rdc->GetSectionProperties(sectionIdx).compressedSize; - m_FrameRecord.frameInfo.persistentSize = frameDataSize; - m_FrameRecord.frameInfo.initDataSize = chunkInfos[(GLChunk)SystemChunk::InitialContents].totalsize; + GetReplay()->WriteFrameRecord().frameInfo.compressedFileSize = + rdc->GetSectionProperties(sectionIdx).compressedSize; + GetReplay()->WriteFrameRecord().frameInfo.persistentSize = frameDataSize; + GetReplay()->WriteFrameRecord().frameInfo.initDataSize = + chunkInfos[(GLChunk)SystemChunk::InitialContents].totalsize; RDCDEBUG("Allocating %llu persistant bytes of memory for the log.", - m_FrameRecord.frameInfo.persistentSize); + GetReplay()->WriteFrameRecord().frameInfo.persistentSize); return ReplayStatus::Succeeded; } @@ -5070,10 +5075,10 @@ ReplayStatus WrappedOpenGL::ContextReplayLog(CaptureState readType, uint32_t sta if(IsLoading(m_State)) { - GetFrameRecord().drawcallList = m_ParentDrawcall.children; - GetFrameRecord().frameInfo.debugMessages = GetDebugMessages(); + GetReplay()->WriteFrameRecord().drawcallList = m_ParentDrawcall.children; + GetReplay()->WriteFrameRecord().frameInfo.debugMessages = GetDebugMessages(); - SetupDrawcallPointers(m_Drawcalls, GetFrameRecord().drawcallList); + SetupDrawcallPointers(m_Drawcalls, GetReplay()->WriteFrameRecord().drawcallList); // it's easier to remove duplicate usages here than check it as we go. // this means if textures are bound in multiple places in the same draw diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index e6a631b42..3b552b936 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -30,14 +30,14 @@ #include "common/timing.h" #include "core/core.h" #include "driver/shaders/spirv/spirv_reflect.h" -#include "replay/replay_driver.h" #include "gl_common.h" #include "gl_dispatch_table.h" #include "gl_manager.h" #include "gl_renderstate.h" -#include "gl_replay.h" #include "gl_resources.h" +class GLReplay; + namespace glslang { class TShader; @@ -125,7 +125,7 @@ private: bool m_UsesVRMarkers; - GLReplay m_Replay; + GLReplay *m_Replay = NULL; RDCDriver m_DriverType; struct ArrayMSPrograms @@ -238,7 +238,6 @@ private: } std::vector m_CapturedFrames; - FrameRecord m_FrameRecord; std::vector m_Drawcalls; // replay @@ -573,7 +572,7 @@ public: static std::string GetChunkName(uint32_t idx); GLResourceManager *GetResourceManager() { return m_ResourceManager; } CaptureState GetState() { return m_State; } - GLReplay *GetReplay() { return &m_Replay; } + GLReplay *GetReplay() { return m_Replay; } WriteSerialiser &GetSerialiser() { return m_ScratchSerialiser; } void SetDriverType(RDCDriver type) { m_DriverType = type; } bool isGLESMode() { return m_DriverType == RDCDriver::OpenGLES; } @@ -614,7 +613,6 @@ public: GLuint GetFakeVAO0() { return m_Global_VAO0; } GLuint GetCurrentDefaultFBO() { return m_CurrentDefaultFBO; } - FrameRecord &GetFrameRecord() { return m_FrameRecord; } const APIEvent &GetEvent(uint32_t eventId); const DrawcallDescription &GetRootDraw() { return m_ParentDrawcall; } diff --git a/renderdoc/driver/gl/gl_hooks.cpp b/renderdoc/driver/gl/gl_hooks.cpp index 89a8c49a1..a81cf1e94 100644 --- a/renderdoc/driver/gl/gl_hooks.cpp +++ b/renderdoc/driver/gl/gl_hooks.cpp @@ -22,12 +22,12 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/gl/apple_gl_hook_defs.h" -#include "driver/gl/gl_common.h" -#include "driver/gl/gl_dispatch_table.h" -#include "driver/gl/gl_dispatch_table_defs.h" -#include "driver/gl/gl_driver.h" #include "hooks/hooks.h" +#include "apple_gl_hook_defs.h" +#include "gl_common.h" +#include "gl_dispatch_table.h" +#include "gl_dispatch_table_defs.h" +#include "gl_driver.h" #if ENABLED(RDOC_POSIX) #include diff --git a/renderdoc/driver/gl/gl_manager.cpp b/renderdoc/driver/gl/gl_manager.cpp index 6a185446a..bfb6a9352 100644 --- a/renderdoc/driver/gl/gl_manager.cpp +++ b/renderdoc/driver/gl/gl_manager.cpp @@ -23,9 +23,9 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/gl/gl_manager.h" +#include "gl_manager.h" #include -#include "driver/gl/gl_driver.h" +#include "gl_driver.h" GLResourceManager::GLResourceManager(CaptureState &state, WrappedOpenGL *driver) : ResourceManager(state), m_Driver(driver), m_SyncName(1) diff --git a/renderdoc/driver/gl/gl_overlay.cpp b/renderdoc/driver/gl/gl_overlay.cpp index 71b133550..2eef4c37d 100644 --- a/renderdoc/driver/gl/gl_overlay.cpp +++ b/renderdoc/driver/gl/gl_overlay.cpp @@ -26,7 +26,6 @@ #include #include "common/common.h" #include "data/glsl_shaders.h" -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "strings/string_utils.h" diff --git a/renderdoc/driver/gl/gl_postvs.cpp b/renderdoc/driver/gl/gl_postvs.cpp index fc5c81244..3b6c322e7 100644 --- a/renderdoc/driver/gl/gl_postvs.cpp +++ b/renderdoc/driver/gl/gl_postvs.cpp @@ -23,6 +23,7 @@ ******************************************************************************/ #include +#include #include #include "common/common.h" #include "strings/string_utils.h" diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 4229bf58e..064f1e77a 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -25,6 +25,7 @@ #include "gl_renderstate.h" #include "gl_driver.h" +#include "gl_replay.h" struct EnableDisableCap { diff --git a/renderdoc/driver/gl/gl_rendertexture.cpp b/renderdoc/driver/gl/gl_rendertexture.cpp index 5a0e4fd74..527cb069c 100644 --- a/renderdoc/driver/gl/gl_rendertexture.cpp +++ b/renderdoc/driver/gl/gl_rendertexture.cpp @@ -22,7 +22,6 @@ * THE SOFTWARE. ******************************************************************************/ -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "gl_driver.h" diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 02c9713dc..340819634 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -37,12 +37,13 @@ static const char *SPIRVDisassemblyTarget = "SPIR-V (RenderDoc)"; -GLReplay::GLReplay() +GLReplay::GLReplay(WrappedOpenGL *d) { + m_pDriver = d; + if(RenderDoc::Inst().GetCrashHandler()) RenderDoc::Inst().GetCrashHandler()->RegisterMemoryRegion(this, sizeof(GLReplay)); - m_pDriver = NULL; m_Proxy = false; m_Degraded = false; @@ -167,11 +168,6 @@ std::vector GLReplay::GetSupportedWindowSystems() return ret; } -FrameRecord GLReplay::GetFrameRecord() -{ - return m_pDriver->GetFrameRecord(); -} - ResourceId GLReplay::GetLiveID(ResourceId id) { if(!m_pDriver->GetResourceManager()->HasLiveResource(id)) diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index 50e0dcd6f..266578cea 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -93,13 +93,12 @@ enum TexDisplayFlags class GLReplay : public IReplayDriver { public: - GLReplay(); - + GLReplay(WrappedOpenGL *d); + virtual ~GLReplay() {} void SetProxy(bool p) { m_Proxy = p; } bool IsRemoteProxy() { return m_Proxy; } void Shutdown(); - void SetDriver(WrappedOpenGL *d) { m_pDriver = d; } DriverInformation GetDriverInfo() { return m_DriverInfo; } rdcarray GetAvailableGPUs(); APIProperties GetAPIProperties(); @@ -124,8 +123,8 @@ public: std::vector GetUsage(ResourceId id); - FrameRecord GetFrameRecord(); - + FrameRecord &WriteFrameRecord() { return m_FrameRecord; } + FrameRecord GetFrameRecord() { return m_FrameRecord; } void SavePipelineState(uint32_t eventId); const D3D11Pipe::State *GetD3D11PipelineState() { return NULL; } const D3D12Pipe::State *GetD3D12PipelineState() { return NULL; } @@ -433,6 +432,8 @@ private: GLPipe::State m_CurPipelineState; + FrameRecord m_FrameRecord; + DriverInformation m_DriverInfo; // AMD counter instance diff --git a/renderdoc/driver/gl/gl_resources.h b/renderdoc/driver/gl/gl_resources.h index 3495bc07f..78ab63f47 100644 --- a/renderdoc/driver/gl/gl_resources.h +++ b/renderdoc/driver/gl/gl_resources.h @@ -26,7 +26,7 @@ #pragma once #include "core/resource_manager.h" -#include "driver/gl/gl_common.h" +#include "gl_common.h" size_t GetCompressedByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum internalformat); size_t GetByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum format, GLenum type); diff --git a/renderdoc/driver/gl/gl_shader_refl.h b/renderdoc/driver/gl/gl_shader_refl.h index 2a85054ba..537ed2fee 100644 --- a/renderdoc/driver/gl/gl_shader_refl.h +++ b/renderdoc/driver/gl/gl_shader_refl.h @@ -22,7 +22,6 @@ * THE SOFTWARE. ******************************************************************************/ -#include "replay/replay_driver.h" #include "gl_dispatch_table.h" class WrappedOpenGL; diff --git a/renderdoc/driver/gl/glx_hooks.cpp b/renderdoc/driver/gl/glx_hooks.cpp index d041ef32d..376141be9 100644 --- a/renderdoc/driver/gl/glx_hooks.cpp +++ b/renderdoc/driver/gl/glx_hooks.cpp @@ -23,9 +23,9 @@ ******************************************************************************/ #include -#include "driver/gl/gl_driver.h" -#include "driver/gl/glx_dispatch_table.h" #include "hooks/hooks.h" +#include "gl_driver.h" +#include "glx_dispatch_table.h" namespace Keyboard { diff --git a/renderdoc/driver/gl/glx_platform.cpp b/renderdoc/driver/gl/glx_platform.cpp index 430fa60d7..0710a0776 100644 --- a/renderdoc/driver/gl/glx_platform.cpp +++ b/renderdoc/driver/gl/glx_platform.cpp @@ -22,8 +22,8 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/gl/gl_common.h" -#include "driver/gl/glx_dispatch_table.h" +#include "gl_common.h" +#include "glx_dispatch_table.h" static bool X11ErrorSeen = false; diff --git a/renderdoc/driver/gl/wgl_hooks.cpp b/renderdoc/driver/gl/wgl_hooks.cpp index 56d0c2a50..0551bf460 100644 --- a/renderdoc/driver/gl/wgl_hooks.cpp +++ b/renderdoc/driver/gl/wgl_hooks.cpp @@ -22,9 +22,9 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/gl/gl_driver.h" -#include "driver/gl/wgl_dispatch_table.h" #include "hooks/hooks.h" +#include "gl_driver.h" +#include "wgl_dispatch_table.h" class WGLHook : LibraryHook { diff --git a/renderdoc/driver/gl/wgl_platform.cpp b/renderdoc/driver/gl/wgl_platform.cpp index 6bef0d9b3..629c2cf0e 100644 --- a/renderdoc/driver/gl/wgl_platform.cpp +++ b/renderdoc/driver/gl/wgl_platform.cpp @@ -22,8 +22,8 @@ * THE SOFTWARE. ******************************************************************************/ -#include "driver/gl/gl_common.h" -#include "driver/gl/wgl_dispatch_table.h" +#include "gl_common.h" +#include "wgl_dispatch_table.h" #define WINDOW_CLASS_NAME L"renderdocGLclass" diff --git a/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp index 6f153deab..6798fba78 100644 --- a/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp @@ -24,6 +24,7 @@ ******************************************************************************/ #include "../gl_driver.h" +#include "../gl_replay.h" #include "common/common.h" #include "strings/string_utils.h" diff --git a/renderdoc/driver/gl/wrappers/gl_emulated.cpp b/renderdoc/driver/gl/wrappers/gl_emulated.cpp index 8a602f610..a732fdcf9 100644 --- a/renderdoc/driver/gl/wrappers/gl_emulated.cpp +++ b/renderdoc/driver/gl/wrappers/gl_emulated.cpp @@ -26,10 +26,10 @@ // emulated where possible, so we can simplify most codepaths by just assuming they're // present elsewhere and using them unconditionally. -#include "driver/gl/gl_common.h" -#include "driver/gl/gl_dispatch_table.h" -#include "driver/gl/gl_driver.h" -#include "driver/gl/gl_resources.h" +#include "../gl_common.h" +#include "../gl_dispatch_table.h" +#include "../gl_driver.h" +#include "../gl_resources.h" #include "driver/shaders/spirv/glslang_compile.h" namespace glEmulate @@ -3348,6 +3348,7 @@ void GLDispatchTable::DriverForEmulation(WrappedOpenGL *driver) #include "../gl_shader_refl.h" #include "3rdparty/catch/catch.hpp" #include "data/glsl_shaders.h" +#include "replay/replay_driver.h" #include "strings/string_utils.h" GLint APIENTRY _testStub_GetUniformLocation(GLuint program, const GLchar *name) diff --git a/renderdoc/driver/shaders/dxbc/dxbc_bytecode.cpp b/renderdoc/driver/shaders/dxbc/dxbc_bytecode.cpp index b9c103b6e..6d4dd0c2d 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_bytecode.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_bytecode.cpp @@ -23,6 +23,8 @@ ******************************************************************************/ #include "dxbc_bytecode.h" +#include "common/formatting.h" +#include "os/os_specific.h" #include "dxbc_container.h" namespace DXBCBytecode diff --git a/renderdoc/driver/shaders/dxbc/dxbc_bytecode.h b/renderdoc/driver/shaders/dxbc/dxbc_bytecode.h index 2a74ad4cc..f27fc7b19 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_bytecode.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_bytecode.h @@ -26,7 +26,6 @@ #include #include -#include "api/replay/renderdoc_replay.h" #include "common/common.h" #include "driver/dx/official/d3dcommon.h" #include "dxbc_common.h" diff --git a/renderdoc/driver/shaders/dxbc/dxbc_common.h b/renderdoc/driver/shaders/dxbc/dxbc_common.h index de5fd7616..c5e0cf140 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_common.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_common.h @@ -27,6 +27,7 @@ #include #include #include +#include "api/replay/shader_types.h" namespace DXBC { diff --git a/renderdoc/driver/shaders/dxbc/dxbc_compile.cpp b/renderdoc/driver/shaders/dxbc/dxbc_compile.cpp index 932647023..a1fcf067e 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_compile.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_compile.cpp @@ -24,6 +24,7 @@ #include "dxbc_compile.h" #include "common/common.h" +#include "os/os_specific.h" #include "strings/string_utils.h" // gives us an address to identify this dll with diff --git a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp index 47654f1c4..2a404b8c6 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp @@ -27,12 +27,13 @@ #include #include "api/app/renderdoc_app.h" #include "common/common.h" -#include "driver/dx/official/d3dcompiler.h" #include "driver/shaders/dxil/dxil_bytecode.h" #include "serialise/serialiser.h" #include "strings/string_utils.h" #include "dxbc_bytecode.h" +#include "driver/dx/official/d3dcompiler.h" + namespace DXBC { struct RDEFCBufferVariable diff --git a/renderdoc/driver/shaders/dxbc/dxbc_container.h b/renderdoc/driver/shaders/dxbc/dxbc_container.h index 5f5a72cf3..d62ccba30 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_container.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_container.h @@ -28,7 +28,9 @@ #include #include #include -#include "api/replay/renderdoc_replay.h" +#include "api/replay/rdcarray.h" +#include "api/replay/rdcpair.h" +#include "api/replay/rdcstr.h" #include "common/common.h" #include "driver/dx/official/d3dcommon.h" #include "dxbc_common.h" diff --git a/renderdoc/driver/shaders/dxbc/dxbc_debug.cpp b/renderdoc/driver/shaders/dxbc/dxbc_debug.cpp index 40027126f..287b4f152 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_debug.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_debug.cpp @@ -2868,9 +2868,9 @@ State State::GetNext(GlobalState &global, DebugAPIWrapper *apiWrapper, State qua case OPCODE_IMM_ATOMIC_IADD: case OPCODE_ATOMIC_IADD: *udst = *udst + *usrc0; break; case OPCODE_IMM_ATOMIC_IMAX: - case OPCODE_ATOMIC_IMAX: *idst = std::max(*idst, *isrc0); break; + case OPCODE_ATOMIC_IMAX: *idst = RDCMAX(*idst, *isrc0); break; case OPCODE_IMM_ATOMIC_IMIN: - case OPCODE_ATOMIC_IMIN: *idst = std::min(*idst, *isrc0); break; + case OPCODE_ATOMIC_IMIN: *idst = RDCMIN(*idst, *isrc0); break; case OPCODE_IMM_ATOMIC_AND: case OPCODE_ATOMIC_AND: *udst = *udst & *usrc0; break; case OPCODE_IMM_ATOMIC_OR: @@ -2884,9 +2884,9 @@ State State::GetNext(GlobalState &global, DebugAPIWrapper *apiWrapper, State qua *udst = *usrc0; break; case OPCODE_IMM_ATOMIC_UMAX: - case OPCODE_ATOMIC_UMAX: *udst = std::max(*udst, *usrc0); break; + case OPCODE_ATOMIC_UMAX: *udst = RDCMAX(*udst, *usrc0); break; case OPCODE_IMM_ATOMIC_UMIN: - case OPCODE_ATOMIC_UMIN: *udst = std::min(*udst, *usrc0); break; + case OPCODE_ATOMIC_UMIN: *udst = RDCMIN(*udst, *usrc0); break; } } diff --git a/renderdoc/driver/shaders/dxbc/dxbc_debug.h b/renderdoc/driver/shaders/dxbc/dxbc_debug.h index fc7efae20..5ec1516dc 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_debug.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_debug.h @@ -25,7 +25,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "common/common.h" #include "dxbc_bytecode.h" diff --git a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp index 823d3ae05..074d76b39 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp @@ -23,7 +23,6 @@ ******************************************************************************/ #include "dxbc_reflect.h" -#include "api/replay/renderdoc_replay.h" #include "common/formatting.h" #include "core/core.h" #include "dxbc_container.h" diff --git a/renderdoc/driver/shaders/dxil/llvm_decoder.h b/renderdoc/driver/shaders/dxil/llvm_decoder.h index 51065834c..88cebb5dc 100644 --- a/renderdoc/driver/shaders/dxil/llvm_decoder.h +++ b/renderdoc/driver/shaders/dxil/llvm_decoder.h @@ -25,6 +25,8 @@ #pragma once #include +#include "api/replay/rdcarray.h" +#include "api/replay/rdcstr.h" #include "llvm_bitreader.h" namespace LLVMBC diff --git a/renderdoc/driver/shaders/spirv/gen_spirv_code.py b/renderdoc/driver/shaders/spirv/gen_spirv_code.py index 819262f3f..4941077ba 100644 --- a/renderdoc/driver/shaders/spirv/gen_spirv_code.py +++ b/renderdoc/driver/shaders/spirv/gen_spirv_code.py @@ -113,7 +113,8 @@ header.write('''{copyright} // clang-format off #include -#include "api/replay/renderdoc_replay.h" +#include "api/replay/apidefs.h" +#include "api/replay/stringise.h" #undef None #undef CopyMemory @@ -174,9 +175,13 @@ ops_header.write('''{copyright} // We need to disable clang-format since this file is programmatically generated // clang-format off +#include #include #include -#include "api/replay/renderdoc_replay.h" +#include "api/replay/apidefs.h" +#include "api/replay/rdcstr.h" +#include "api/replay/rdcarray.h" +#include "api/replay/stringise.h" #undef None #undef CopyMemory @@ -654,7 +659,7 @@ for operand_kind in spirv['operand_kinds']: # and declare an array if the op wants many if value_enum: tostrs += '''template<> -std::string ParamToStr(const std::function &idName, const rdcspv::{name}AndParamData &el) +rdcstr ParamToStr(const std::function &idName, const rdcspv::{name}AndParamData &el) {{ rdcstr ret = ToStr(el.value); @@ -671,7 +676,7 @@ std::string ParamToStr(const std::function &idName, const rd '''.format(name=name, tostr_cases=tostr_cases.rstrip()) tostr_decls += '''template<> -std::string ParamToStr(const std::function &idName, const rdcspv::{name}AndParamData &el);'''.format(name=name) +rdcstr ParamToStr(const std::function &idName, const rdcspv::{name}AndParamData &el);'''.format(name=name) header.write('''struct {name}AndParamData {{ @@ -721,7 +726,7 @@ inline void EncodeParam(std::vector &words, const {name}AndParamData & # BitEnums are set up with one bitmask, and then a series of parameters, so we declare a struct with an array elif bit_enum: tostrs += '''template<> -std::string ParamToStr(const std::function &idName, const rdcspv::{name}AndParamDatas &el) +rdcstr ParamToStr(const std::function &idName, const rdcspv::{name}AndParamDatas &el) {{ rdcstr ret; @@ -737,7 +742,7 @@ std::string ParamToStr(const std::function &idName, const rd '''.format(name=name, tostr_cases=tostr_cases.rstrip()) tostr_decls += '''template<> -std::string ParamToStr(const std::function &idName, const rdcspv::{name}AndParamDatas &el);'''.format(name=name) +rdcstr ParamToStr(const std::function &idName, const rdcspv::{name}AndParamDatas &el);'''.format(name=name) header.write('''struct {name}AndParamDatas {{ @@ -1127,28 +1132,28 @@ ops_header.write(''' {op_structs} template -inline std::string ParamToStr(const std::function &idName, const T &el) +inline rdcstr ParamToStr(const std::function &idName, const T &el) {{ return ToStr(el); }} template<> -std::string ParamToStr(const std::function &idName, const Id &el); +rdcstr ParamToStr(const std::function &idName, const Id &el); template<> -std::string ParamToStr(const std::function &idName, const rdcstr &el); +rdcstr ParamToStr(const std::function &idName, const rdcstr &el); template<> -std::string ParamToStr(const std::function &idName, const PairLiteralIntegerIdRef &el); +rdcstr ParamToStr(const std::function &idName, const PairLiteralIntegerIdRef &el); template<> -std::string ParamToStr(const std::function &idName, const PairIdRefLiteralInteger &el); +rdcstr ParamToStr(const std::function &idName, const PairIdRefLiteralInteger &el); template<> -std::string ParamToStr(const std::function &idName, const PairIdRefIdRef &el); +rdcstr ParamToStr(const std::function &idName, const PairIdRefIdRef &el); {tostr_decls} template -inline std::string ParamsToStr(const std::function &idName, const rdcarray &ids) +inline rdcstr ParamsToStr(const std::function &idName, const rdcarray &ids) {{ - std::string ret = "{{"; + rdcstr ret = "{{"; for(size_t i=0; i < ids.size(); i++) {{ ret += ParamToStr(idName, ids[i]); @@ -1164,7 +1169,7 @@ struct OpDecoder OpDecoder(const ConstIter &it); static void AddUsedIDs(std::set &usedids, const ConstIter &it); - static std::string Disassemble(const ConstIter &it, const std::function &declName, const std::function &idName, const std::function &constIntVal); + static rdcstr Disassemble(const ConstIter &it, const std::function &declName, const std::function &idName, const std::function &constIntVal); Op op; uint16_t wordCount; @@ -1187,31 +1192,31 @@ namespace rdcspv {{ template<> -std::string ParamToStr(const std::function &idName, const Id &el) +rdcstr ParamToStr(const std::function &idName, const Id &el) {{ return idName(el); }} template<> -std::string ParamToStr(const std::function &idName, const rdcstr &el) +rdcstr ParamToStr(const std::function &idName, const rdcstr &el) {{ return "\\"" + el + "\\""; }} template<> -std::string ParamToStr(const std::function &idName, const PairLiteralIntegerIdRef &el) +rdcstr ParamToStr(const std::function &idName, const PairLiteralIntegerIdRef &el) {{ return StringFormat::Fmt("[%u, %s]", el.first, idName(el.second).c_str()); }} template<> -std::string ParamToStr(const std::function &idName, const PairIdRefLiteralInteger &el) +rdcstr ParamToStr(const std::function &idName, const PairIdRefLiteralInteger &el) {{ return StringFormat::Fmt("[%s, %u]", idName(el.first).c_str(), el.second); }} template<> -std::string ParamToStr(const std::function &idName, const PairIdRefIdRef &el) +rdcstr ParamToStr(const std::function &idName, const PairIdRefIdRef &el) {{ return StringFormat::Fmt("[%s, %s]", idName(el.first).c_str(), idName(el.second).c_str()); }} @@ -1227,9 +1232,9 @@ void OpDecoder::AddUsedIDs(std::set &usedids, const ConstIter &it) }} }} -std::string OpDecoder::Disassemble(const ConstIter &it, const std::function &declName, const std::function &idName, const std::function &constIntVal) +rdcstr OpDecoder::Disassemble(const ConstIter &it, const std::function &declName, const std::function &idName, const std::function &constIntVal) {{ - std::string ret; + rdcstr ret; switch(it.opcode()) {{ {disassemble} diff --git a/renderdoc/driver/shaders/spirv/spirv_common.h b/renderdoc/driver/shaders/spirv/spirv_common.h index da561cf98..587d15831 100644 --- a/renderdoc/driver/shaders/spirv/spirv_common.h +++ b/renderdoc/driver/shaders/spirv/spirv_common.h @@ -27,7 +27,7 @@ #include #include #include -#include "api/replay/renderdoc_replay.h" +#include "api/replay/stringise.h" #include "common/common.h" #include "spirv_gen.h" diff --git a/renderdoc/driver/shaders/spirv/spirv_editor.h b/renderdoc/driver/shaders/spirv/spirv_editor.h index b0d064e27..775e2d307 100644 --- a/renderdoc/driver/shaders/spirv/spirv_editor.h +++ b/renderdoc/driver/shaders/spirv/spirv_editor.h @@ -26,13 +26,8 @@ #include #include -#include -#include #include -#include "api/replay/renderdoc_replay.h" -#include "common/common.h" #include "spirv_common.h" -#include "spirv_op_helpers.h" #include "spirv_processor.h" namespace rdcspv @@ -219,6 +214,7 @@ private: std::vector &m_ExternalSPIRV; }; +/* inline bool operator<(const OpDecorate &a, const OpDecorate &b) { if(a.target != b.target) @@ -233,5 +229,6 @@ inline bool operator==(const OpDecorate &a, const OpDecorate &b) { return a.target == b.target && !memcmp(&a.decoration, &b.decoration, sizeof(a.decoration)); } +*/ }; // namespace rdcspv diff --git a/renderdoc/driver/shaders/spirv/spirv_gen.cpp b/renderdoc/driver/shaders/spirv/spirv_gen.cpp index 8f6037af6..7af15e784 100644 --- a/renderdoc/driver/shaders/spirv/spirv_gen.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_gen.cpp @@ -1466,37 +1466,37 @@ namespace rdcspv { template<> -std::string ParamToStr(const std::function &idName, const Id &el) +rdcstr ParamToStr(const std::function &idName, const Id &el) { return idName(el); } template<> -std::string ParamToStr(const std::function &idName, const rdcstr &el) +rdcstr ParamToStr(const std::function &idName, const rdcstr &el) { return "\"" + el + "\""; } template<> -std::string ParamToStr(const std::function &idName, const PairLiteralIntegerIdRef &el) +rdcstr ParamToStr(const std::function &idName, const PairLiteralIntegerIdRef &el) { return StringFormat::Fmt("[%u, %s]", el.first, idName(el.second).c_str()); } template<> -std::string ParamToStr(const std::function &idName, const PairIdRefLiteralInteger &el) +rdcstr ParamToStr(const std::function &idName, const PairIdRefLiteralInteger &el) { return StringFormat::Fmt("[%s, %u]", idName(el.first).c_str(), el.second); } template<> -std::string ParamToStr(const std::function &idName, const PairIdRefIdRef &el) +rdcstr ParamToStr(const std::function &idName, const PairIdRefIdRef &el) { return StringFormat::Fmt("[%s, %s]", idName(el.first).c_str(), idName(el.second).c_str()); } template<> -std::string ParamToStr(const std::function &idName, const rdcspv::ImageOperandsAndParamDatas &el) +rdcstr ParamToStr(const std::function &idName, const rdcspv::ImageOperandsAndParamDatas &el) { rdcstr ret; @@ -1539,7 +1539,7 @@ std::string ParamToStr(const std::function &idName, const rd } template<> -std::string ParamToStr(const std::function &idName, const rdcspv::LoopControlAndParamDatas &el) +rdcstr ParamToStr(const std::function &idName, const rdcspv::LoopControlAndParamDatas &el) { rdcstr ret; @@ -1572,7 +1572,7 @@ std::string ParamToStr(const std::function &idName, const rd } template<> -std::string ParamToStr(const std::function &idName, const rdcspv::MemoryAccessAndParamDatas &el) +rdcstr ParamToStr(const std::function &idName, const rdcspv::MemoryAccessAndParamDatas &el) { rdcstr ret; @@ -1599,7 +1599,7 @@ std::string ParamToStr(const std::function &idName, const rd } template<> -std::string ParamToStr(const std::function &idName, const rdcspv::ExecutionModeAndParamData &el) +rdcstr ParamToStr(const std::function &idName, const rdcspv::ExecutionModeAndParamData &el) { rdcstr ret = ToStr(el.value); @@ -1645,7 +1645,7 @@ std::string ParamToStr(const std::function &idName, const rd } template<> -std::string ParamToStr(const std::function &idName, const rdcspv::DecorationAndParamData &el) +rdcstr ParamToStr(const std::function &idName, const rdcspv::DecorationAndParamData &el) { rdcstr ret = ToStr(el.value); @@ -4629,9 +4629,9 @@ void OpDecoder::AddUsedIDs(std::set &usedids, const ConstIter &it) } } -std::string OpDecoder::Disassemble(const ConstIter &it, const std::function &declName, const std::function &idName, const std::function &constIntVal) +rdcstr OpDecoder::Disassemble(const ConstIter &it, const std::function &declName, const std::function &idName, const std::function &constIntVal) { - std::string ret; + rdcstr ret; switch(it.opcode()) { case rdcspv::Op::Nop: diff --git a/renderdoc/driver/shaders/spirv/spirv_gen.h b/renderdoc/driver/shaders/spirv/spirv_gen.h index a03b35c97..7fe040642 100644 --- a/renderdoc/driver/shaders/spirv/spirv_gen.h +++ b/renderdoc/driver/shaders/spirv/spirv_gen.h @@ -60,7 +60,8 @@ // clang-format off #include -#include "api/replay/renderdoc_replay.h" +#include "api/replay/apidefs.h" +#include "api/replay/stringise.h" #undef None #undef CopyMemory diff --git a/renderdoc/driver/shaders/spirv/spirv_op_helpers.h b/renderdoc/driver/shaders/spirv/spirv_op_helpers.h index a2d070d34..1f0e1e179 100644 --- a/renderdoc/driver/shaders/spirv/spirv_op_helpers.h +++ b/renderdoc/driver/shaders/spirv/spirv_op_helpers.h @@ -59,9 +59,13 @@ // We need to disable clang-format since this file is programmatically generated // clang-format off +#include #include #include -#include "api/replay/renderdoc_replay.h" +#include "api/replay/apidefs.h" +#include "api/replay/rdcstr.h" +#include "api/replay/rdcarray.h" +#include "api/replay/stringise.h" #undef None #undef CopyMemory @@ -16319,33 +16323,33 @@ struct OpSubgroupAvcSicGetInterRawSadsINTEL }; template -inline std::string ParamToStr(const std::function &idName, const T &el) +inline rdcstr ParamToStr(const std::function &idName, const T &el) { return ToStr(el); } template<> -std::string ParamToStr(const std::function &idName, const Id &el); +rdcstr ParamToStr(const std::function &idName, const Id &el); template<> -std::string ParamToStr(const std::function &idName, const rdcstr &el); +rdcstr ParamToStr(const std::function &idName, const rdcstr &el); template<> -std::string ParamToStr(const std::function &idName, const PairLiteralIntegerIdRef &el); +rdcstr ParamToStr(const std::function &idName, const PairLiteralIntegerIdRef &el); template<> -std::string ParamToStr(const std::function &idName, const PairIdRefLiteralInteger &el); +rdcstr ParamToStr(const std::function &idName, const PairIdRefLiteralInteger &el); template<> -std::string ParamToStr(const std::function &idName, const PairIdRefIdRef &el); +rdcstr ParamToStr(const std::function &idName, const PairIdRefIdRef &el); template<> -std::string ParamToStr(const std::function &idName, const rdcspv::ImageOperandsAndParamDatas &el);template<> -std::string ParamToStr(const std::function &idName, const rdcspv::LoopControlAndParamDatas &el);template<> -std::string ParamToStr(const std::function &idName, const rdcspv::MemoryAccessAndParamDatas &el);template<> -std::string ParamToStr(const std::function &idName, const rdcspv::ExecutionModeAndParamData &el);template<> -std::string ParamToStr(const std::function &idName, const rdcspv::DecorationAndParamData &el); +rdcstr ParamToStr(const std::function &idName, const rdcspv::ImageOperandsAndParamDatas &el);template<> +rdcstr ParamToStr(const std::function &idName, const rdcspv::LoopControlAndParamDatas &el);template<> +rdcstr ParamToStr(const std::function &idName, const rdcspv::MemoryAccessAndParamDatas &el);template<> +rdcstr ParamToStr(const std::function &idName, const rdcspv::ExecutionModeAndParamData &el);template<> +rdcstr ParamToStr(const std::function &idName, const rdcspv::DecorationAndParamData &el); template -inline std::string ParamsToStr(const std::function &idName, const rdcarray &ids) +inline rdcstr ParamsToStr(const std::function &idName, const rdcarray &ids) { - std::string ret = "{"; + rdcstr ret = "{"; for(size_t i=0; i < ids.size(); i++) { ret += ParamToStr(idName, ids[i]); @@ -16361,7 +16365,7 @@ struct OpDecoder OpDecoder(const ConstIter &it); static void AddUsedIDs(std::set &usedids, const ConstIter &it); - static std::string Disassemble(const ConstIter &it, const std::function &declName, const std::function &idName, const std::function &constIntVal); + static rdcstr Disassemble(const ConstIter &it, const std::function &declName, const std::function &idName, const std::function &constIntVal); Op op; uint16_t wordCount; diff --git a/renderdoc/driver/shaders/spirv/spirv_processor.h b/renderdoc/driver/shaders/spirv/spirv_processor.h index a1ad07472..5eb841851 100644 --- a/renderdoc/driver/shaders/spirv/spirv_processor.h +++ b/renderdoc/driver/shaders/spirv/spirv_processor.h @@ -29,6 +29,11 @@ #include #include #include +#include "api/replay/rdcarray.h" +#include "api/replay/rdcpair.h" +#include "api/replay/rdcstr.h" +#include "api/replay/replay_enums.h" +#include "api/replay/shader_types.h" #include "common/common.h" #include "spirv_common.h" diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp index 41ef95221..3a78b9b29 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp @@ -29,6 +29,7 @@ #include "maths/half_convert.h" #include "replay/replay_driver.h" #include "spirv_editor.h" +#include "spirv_op_helpers.h" void FillSpecConstantVariables(ResourceId shader, const rdcarray &invars, rdcarray &outvars, diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.h b/renderdoc/driver/shaders/spirv/spirv_reflect.h index 7e38172e1..3e4d5ae8a 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.h +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.h @@ -25,7 +25,6 @@ #pragma once #include -#include "api/replay/renderdoc_replay.h" #include "spirv_common.h" #include "spirv_processor.h" diff --git a/renderdoc/driver/shaders/spirv/spirv_stringise.cpp b/renderdoc/driver/shaders/spirv/spirv_stringise.cpp index 009589d15..0489a4494 100644 --- a/renderdoc/driver/shaders/spirv/spirv_stringise.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_stringise.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "3rdparty/glslang/SPIRV/spirv.hpp" -#include "api/replay/renderdoc_replay.h" +#include "api/replay/stringise.h" #include "common/common.h" template <> diff --git a/renderdoc/driver/vulkan/vk_bindless_feedback.cpp b/renderdoc/driver/vulkan/vk_bindless_feedback.cpp index 224134d5a..6338e819f 100644 --- a/renderdoc/driver/vulkan/vk_bindless_feedback.cpp +++ b/renderdoc/driver/vulkan/vk_bindless_feedback.cpp @@ -27,6 +27,7 @@ #include "driver/shaders/spirv/spirv_op_helpers.h" #include "vk_core.h" #include "vk_debug.h" +#include "vk_replay.h" #include "vk_shader_cache.h" struct feedbackData diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 2d4e123ee..2759e69db 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -55,7 +55,6 @@ #endif -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "core/resource_manager.h" #include "official/vk_layer.h" diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index babc84275..6136a4c75 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -31,6 +31,7 @@ #include "serialise/rdcfile.h" #include "strings/string_utils.h" #include "vk_debug.h" +#include "vk_replay.h" #include "stb/stb_image_write.h" @@ -115,7 +116,7 @@ WrappedVulkan::WrappedVulkan() : m_RenderState(this, &m_CreationInfo) rdcspv::Init(); RenderDoc::Inst().RegisterShutdownFunction(&rdcspv::Shutdown); - m_Replay.SetDriver(this); + m_Replay = new VulkanReplay(this); threadSerialiserTLSSlot = Threading::AllocateTLSSlot(); tempMemoryTLSSlot = Threading::AllocateTLSSlot(); @@ -193,6 +194,8 @@ WrappedVulkan::~WrappedVulkan() delete[] m_ThreadTempMem[i]->memory; delete m_ThreadTempMem[i]; } + + delete m_Replay; } VkCommandBuffer WrappedVulkan::GetNextCmd() @@ -1374,8 +1377,8 @@ bool WrappedVulkan::Serialise_CaptureScope(SerialiserType &ser) if(IsReplayingAndReading()) { - m_FrameRecord.frameInfo.frameNumber = frameNumber; - RDCEraseEl(m_FrameRecord.frameInfo.stats); + GetReplay()->WriteFrameRecord().frameInfo.frameNumber = frameNumber; + RDCEraseEl(GetReplay()->WriteFrameRecord().frameInfo.stats); } return true; @@ -2080,6 +2083,11 @@ void WrappedVulkan::Present(void *dev, void *wnd) } } +ResourceDescription &WrappedVulkan::GetResourceDesc(ResourceId id) +{ + return GetReplay()->GetResourceDesc(id); +} + void WrappedVulkan::AddResource(ResourceId id, ResourceType type, const char *defaultNamePrefix) { ResourceDescription &descr = GetReplay()->GetResourceDesc(id); @@ -2197,7 +2205,7 @@ ReplayStatus WrappedVulkan::ReadLogInitialisation(RDCFile *rdc, bool storeStruct if((SystemChunk)context == SystemChunk::CaptureScope) { - m_FrameRecord.frameInfo.fileOffset = offsetStart; + GetReplay()->WriteFrameRecord().frameInfo.fileOffset = offsetStart; // read the remaining data into memory and pass to immediate context frameDataSize = reader->GetSize() - reader->GetOffset(); @@ -2240,15 +2248,16 @@ ReplayStatus WrappedVulkan::ReadLogInitialisation(RDCFile *rdc, bool storeStruct // and in future use this file. m_StructuredFile = &m_StoredStructuredData; - m_FrameRecord.frameInfo.uncompressedFileSize = + GetReplay()->WriteFrameRecord().frameInfo.uncompressedFileSize = rdc->GetSectionProperties(sectionIdx).uncompressedSize; - m_FrameRecord.frameInfo.compressedFileSize = rdc->GetSectionProperties(sectionIdx).compressedSize; - m_FrameRecord.frameInfo.persistentSize = frameDataSize; - m_FrameRecord.frameInfo.initDataSize = + GetReplay()->WriteFrameRecord().frameInfo.compressedFileSize = + rdc->GetSectionProperties(sectionIdx).compressedSize; + GetReplay()->WriteFrameRecord().frameInfo.persistentSize = frameDataSize; + GetReplay()->WriteFrameRecord().frameInfo.initDataSize = chunkInfos[(VulkanChunk)SystemChunk::InitialContents].totalsize; RDCDEBUG("Allocating %llu persistant bytes of memory for the log.", - m_FrameRecord.frameInfo.persistentSize); + GetReplay()->WriteFrameRecord().frameInfo.persistentSize); // ensure the capture at least created a device and fetched a queue. if(!IsStructuredExporting(m_State)) @@ -2436,9 +2445,9 @@ ReplayStatus WrappedVulkan::ContextReplayLog(CaptureState readType, uint32_t sta if(IsLoading(m_State)) { - GetFrameRecord().drawcallList = m_ParentDrawcall.Bake(); + GetReplay()->WriteFrameRecord().drawcallList = m_ParentDrawcall.Bake(); - SetupDrawcallPointers(m_Drawcalls, GetFrameRecord().drawcallList); + SetupDrawcallPointers(m_Drawcalls, GetReplay()->WriteFrameRecord().drawcallList); m_ParentDrawcall.children.clear(); } diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 5317b6c02..375a5ac9b 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -26,16 +26,17 @@ #include #include "common/timing.h" -#include "replay/replay_driver.h" #include "serialise/serialiser.h" #include "vk_common.h" #include "vk_info.h" #include "vk_manager.h" -#include "vk_replay.h" #include "vk_state.h" class VulkanShaderCache; +class VulkanDebugManager; +class VulkanResourceManager; class VulkanTextRenderer; +class VulkanReplay; struct VkInitParams { @@ -298,7 +299,7 @@ private: Threading::CriticalSection m_ThreadTempMemLock; std::vector m_ThreadTempMem; - VulkanReplay m_Replay; + VulkanReplay *m_Replay; ReplayOptions m_ReplayOptions; VkInitParams m_InitParams; @@ -353,7 +354,6 @@ private: uint32_t m_FrameCounter = 0; std::vector m_CapturedFrames; - FrameRecord m_FrameRecord; std::vector m_Drawcalls; struct PhysicalDeviceData @@ -838,6 +838,8 @@ private: // replay + ResourceDescription &GetResourceDesc(ResourceId id); + bool Prepare_SparseInitialState(WrappedVkBuffer *buf); bool Prepare_SparseInitialState(WrappedVkImage *im); template @@ -936,7 +938,7 @@ public: VulkanDebugManager *GetDebugManager() { return m_DebugManager; } VulkanShaderCache *GetShaderCache() { return m_ShaderCache; } CaptureState GetState() { return m_State; } - VulkanReplay *GetReplay() { return &m_Replay; } + VulkanReplay *GetReplay() { return m_Replay; } // replay interface bool Prepare_InitialState(WrappedVkRes *res); uint64_t GetSize_InitialState(ResourceId id, const VkInitialContents &initial); @@ -963,7 +965,6 @@ public: ReplayStatus ReadLogInitialisation(RDCFile *rdc, bool storeStructuredBuffers); SDFile &GetStructuredFile() { return *m_StructuredFile; } - FrameRecord &GetFrameRecord() { return m_FrameRecord; } const APIEvent &GetEvent(uint32_t eventId); uint32_t GetMaxEID() { return m_Events.back().eventId; } const DrawcallDescription *GetDrawcall(uint32_t eventId); diff --git a/renderdoc/driver/vulkan/vk_debug.cpp b/renderdoc/driver/vulkan/vk_debug.cpp index 82c7a025a..95f3e05b2 100644 --- a/renderdoc/driver/vulkan/vk_debug.cpp +++ b/renderdoc/driver/vulkan/vk_debug.cpp @@ -32,6 +32,7 @@ #include "maths/formatpacking.h" #include "maths/matrix.h" #include "vk_core.h" +#include "vk_replay.h" #include "vk_shader_cache.h" #define VULKAN 1 diff --git a/renderdoc/driver/vulkan/vk_debug.h b/renderdoc/driver/vulkan/vk_debug.h index a1b2996d2..491fa845b 100644 --- a/renderdoc/driver/vulkan/vk_debug.h +++ b/renderdoc/driver/vulkan/vk_debug.h @@ -24,9 +24,7 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "core/core.h" -#include "replay/replay_driver.h" #include "vk_common.h" #include "vk_core.h" diff --git a/renderdoc/driver/vulkan/vk_ggp.cpp b/renderdoc/driver/vulkan/vk_ggp.cpp index b720c5fac..5f8a1828c 100644 --- a/renderdoc/driver/vulkan/vk_ggp.cpp +++ b/renderdoc/driver/vulkan/vk_ggp.cpp @@ -22,8 +22,6 @@ * THE SOFTWARE. ******************************************************************************/ -#include "api/replay/renderdoc_replay.h" - #include "vk_core.h" #include "vk_replay.h" diff --git a/renderdoc/driver/vulkan/vk_linux.cpp b/renderdoc/driver/vulkan/vk_linux.cpp index df6403b5f..5ca143718 100644 --- a/renderdoc/driver/vulkan/vk_linux.cpp +++ b/renderdoc/driver/vulkan/vk_linux.cpp @@ -22,8 +22,6 @@ * THE SOFTWARE. ******************************************************************************/ -#include "api/replay/renderdoc_replay.h" - #include "vk_core.h" #include "vk_replay.h" diff --git a/renderdoc/driver/vulkan/vk_overlay.cpp b/renderdoc/driver/vulkan/vk_overlay.cpp index 70d2603b8..5341d7885 100644 --- a/renderdoc/driver/vulkan/vk_overlay.cpp +++ b/renderdoc/driver/vulkan/vk_overlay.cpp @@ -23,16 +23,17 @@ ******************************************************************************/ #include +#include #include #include "data/glsl_shaders.h" #include "driver/shaders/spirv/spirv_common.h" #include "driver/shaders/spirv/spirv_gen.h" -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "strings/string_utils.h" #include "vk_core.h" #include "vk_debug.h" +#include "vk_replay.h" #include "vk_shader_cache.h" #define VULKAN 1 diff --git a/renderdoc/driver/vulkan/vk_pixelhistory.cpp b/renderdoc/driver/vulkan/vk_pixelhistory.cpp index 5d771dc91..5d2efd124 100644 --- a/renderdoc/driver/vulkan/vk_pixelhistory.cpp +++ b/renderdoc/driver/vulkan/vk_pixelhistory.cpp @@ -26,8 +26,8 @@ #include #include "driver/shaders/spirv/spirv_editor.h" #include "driver/shaders/spirv/spirv_op_helpers.h" -#include "driver/vulkan/vk_debug.h" -#include "driver/vulkan/vk_replay.h" +#include "vk_debug.h" +#include "vk_replay.h" #include "vk_shader_cache.h" bool isDirectWrite(ResourceUsage usage) diff --git a/renderdoc/driver/vulkan/vk_postvs.cpp b/renderdoc/driver/vulkan/vk_postvs.cpp index b8ecc78a4..59a43f2f2 100644 --- a/renderdoc/driver/vulkan/vk_postvs.cpp +++ b/renderdoc/driver/vulkan/vk_postvs.cpp @@ -23,11 +23,13 @@ ******************************************************************************/ #include +#include #include #include "driver/shaders/spirv/spirv_editor.h" #include "driver/shaders/spirv/spirv_op_helpers.h" #include "vk_core.h" #include "vk_debug.h" +#include "vk_replay.h" #include "vk_shader_cache.h" #undef None diff --git a/renderdoc/driver/vulkan/vk_rendermesh.cpp b/renderdoc/driver/vulkan/vk_rendermesh.cpp index f5c54ffac..8f9b22316 100644 --- a/renderdoc/driver/vulkan/vk_rendermesh.cpp +++ b/renderdoc/driver/vulkan/vk_rendermesh.cpp @@ -28,6 +28,7 @@ #include "maths/matrix.h" #include "vk_core.h" #include "vk_debug.h" +#include "vk_replay.h" #include "vk_shader_cache.h" #define VULKAN 1 diff --git a/renderdoc/driver/vulkan/vk_rendertext.h b/renderdoc/driver/vulkan/vk_rendertext.h index 321cc5e34..ef0fb179b 100644 --- a/renderdoc/driver/vulkan/vk_rendertext.h +++ b/renderdoc/driver/vulkan/vk_rendertext.h @@ -24,9 +24,7 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "core/core.h" -#include "replay/replay_driver.h" #include "vk_common.h" #include "vk_core.h" diff --git a/renderdoc/driver/vulkan/vk_rendertexture.cpp b/renderdoc/driver/vulkan/vk_rendertexture.cpp index 7a6b7a4e4..c71c6e150 100644 --- a/renderdoc/driver/vulkan/vk_rendertexture.cpp +++ b/renderdoc/driver/vulkan/vk_rendertexture.cpp @@ -22,11 +22,11 @@ * THE SOFTWARE. ******************************************************************************/ -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "vk_core.h" #include "vk_debug.h" +#include "vk_replay.h" #define VULKAN 1 #include "data/glsl/glsl_ubos_cpp.h" diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 6b3d2d2df..0bcd09862 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -24,10 +24,10 @@ #include "vk_replay.h" #include +#include #include #include "driver/ihv/amd/amd_rgp.h" #include "driver/shaders/spirv/spirv_compile.h" -#include "maths/camera.h" #include "maths/formatpacking.h" #include "maths/matrix.h" #include "serialise/rdcfile.h" @@ -44,12 +44,12 @@ static const char *SPIRVDisassemblyTarget = "SPIR-V (RenderDoc)"; static const char *AMDShaderInfoTarget = "AMD_shader_info disassembly"; static const char *KHRExecutablePropertiesTarget = "KHR_pipeline_executable_properties"; -VulkanReplay::VulkanReplay() +VulkanReplay::VulkanReplay(WrappedVulkan *d) { if(RenderDoc::Inst().GetCrashHandler()) RenderDoc::Inst().GetCrashHandler()->RegisterMemoryRegion(this, sizeof(VulkanReplay)); - m_pDriver = NULL; + m_pDriver = d; m_Proxy = false; m_HighlightCache.driver = this; @@ -271,11 +271,6 @@ ResourceId VulkanReplay::GetLiveID(ResourceId id) return m_pDriver->GetResourceManager()->GetLiveID(id); } -FrameRecord VulkanReplay::GetFrameRecord() -{ - return m_pDriver->GetFrameRecord(); -} - std::vector VulkanReplay::GetDebugMessages() { return m_pDriver->GetDebugMessages(); diff --git a/renderdoc/driver/vulkan/vk_replay.h b/renderdoc/driver/vulkan/vk_replay.h index c812aa596..c3803dc34 100644 --- a/renderdoc/driver/vulkan/vk_replay.h +++ b/renderdoc/driver/vulkan/vk_replay.h @@ -251,8 +251,8 @@ enum TexDisplayFlags class VulkanReplay : public IReplayDriver { public: - VulkanReplay(); - + VulkanReplay(WrappedVulkan *d); + virtual ~VulkanReplay() {} void SetRGP(AMDRGPControl *rgp) { m_RGP = rgp; } void SetProxy(bool p) { m_Proxy = p; } bool IsRemoteProxy() { return m_Proxy; } @@ -261,7 +261,6 @@ public: void CreateResources(); void DestroyResources(); - void SetDriver(WrappedVulkan *d) { m_pDriver = d; } DriverInformation GetDriverInfo() { return m_DriverInfo; } rdcarray GetAvailableGPUs(); APIProperties GetAPIProperties(); @@ -284,7 +283,8 @@ public: std::vector GetUsage(ResourceId id); - FrameRecord GetFrameRecord(); + FrameRecord &WriteFrameRecord() { return m_FrameRecord; } + FrameRecord GetFrameRecord() { return m_FrameRecord; } std::vector GetDebugMessages(); void SavePipelineState(uint32_t eventId); @@ -503,6 +503,8 @@ private: bool m_Proxy; + FrameRecord m_FrameRecord; + WrappedVulkan *m_pDriver = NULL; VkDevice m_Device = VK_NULL_HANDLE; diff --git a/renderdoc/driver/vulkan/vk_resources.cpp b/renderdoc/driver/vulkan/vk_resources.cpp index e73d69263..11758417f 100644 --- a/renderdoc/driver/vulkan/vk_resources.cpp +++ b/renderdoc/driver/vulkan/vk_resources.cpp @@ -23,6 +23,7 @@ ******************************************************************************/ #include "vk_resources.h" +#include "maths/vec.h" #include "vk_info.h" WRAPPED_POOL_INST(WrappedVkInstance) diff --git a/renderdoc/driver/vulkan/vk_resources.h b/renderdoc/driver/vulkan/vk_resources.h index 826728f31..adc42e3b4 100644 --- a/renderdoc/driver/vulkan/vk_resources.h +++ b/renderdoc/driver/vulkan/vk_resources.h @@ -1744,6 +1744,8 @@ VkFormat GetYUVViewPlaneFormat(VkFormat f, uint32_t plane); VkFormat GetDepthOnlyFormat(VkFormat f); VkFormat GetViewCastedFormat(VkFormat f, CompType typeCast); +struct Vec4u; + void GetYUVShaderParameters(VkFormat f, Vec4u &YUVDownsampleRate, Vec4u &YUVAChannels); uint32_t GetByteSize(uint32_t Width, uint32_t Height, uint32_t Depth, VkFormat Format, uint32_t mip); diff --git a/renderdoc/driver/vulkan/vk_shader_cache.h b/renderdoc/driver/vulkan/vk_shader_cache.h index 837cffaf6..a8ee5f590 100644 --- a/renderdoc/driver/vulkan/vk_shader_cache.h +++ b/renderdoc/driver/vulkan/vk_shader_cache.h @@ -24,7 +24,6 @@ #pragma once -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "driver/shaders/spirv/spirv_compile.h" #include "vk_core.h" diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 1cfa298ff..9443470d5 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -826,14 +826,14 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman } AddResource(BakedCommandBuffer, ResourceType::CommandBuffer, "Baked Command Buffer"); - GetReplay()->GetResourceDesc(BakedCommandBuffer).initialisationChunks.clear(); + GetResourceDesc(BakedCommandBuffer).initialisationChunks.clear(); DerivedResource(device, BakedCommandBuffer); DerivedResource(AllocateInfo.commandPool, BakedCommandBuffer); // do this one manually since there's no live version of the swapchain, and // DerivedResource() assumes we're passing it a live ID (or live resource) - GetReplay()->GetResourceDesc(CommandBuffer).derivedResources.push_back(BakedCommandBuffer); - GetReplay()->GetResourceDesc(BakedCommandBuffer).parentResources.push_back(CommandBuffer); + GetResourceDesc(CommandBuffer).derivedResources.push_back(BakedCommandBuffer); + GetResourceDesc(BakedCommandBuffer).parentResources.push_back(CommandBuffer); // whenever a vkCmd command-building chunk asks for the command buffer, it // will get our baked version. diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index cb39e96f8..9e3d2f8a1 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -26,6 +26,7 @@ #include "../vk_core.h" #include "../vk_debug.h" #include "../vk_rendertext.h" +#include "../vk_replay.h" #include "../vk_shader_cache.h" #include "api/replay/version.h" #include "strings/string_utils.h" @@ -259,7 +260,7 @@ ReplayStatus WrappedVulkan::Initialise(VkInitParams ¶ms, uint64_t sectionVer SAFE_DELETE_ARRAY(props); } - if(!m_Replay.IsRemoteProxy()) + if(!m_Replay->IsRemoteProxy()) { size_t i = 0; for(const std::string &ext : supportedExtensions) @@ -314,7 +315,7 @@ ReplayStatus WrappedVulkan::Initialise(VkInitParams ¶ms, uint64_t sectionVer std::find(params.Extensions.begin(), params.Extensions.end(), VK_EXT_DEBUG_UTILS_EXTENSION_NAME) == params.Extensions.end()) { - if(!m_Replay.IsRemoteProxy()) + if(!m_Replay->IsRemoteProxy()) RDCLOG("Enabling VK_EXT_debug_utils"); params.Extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); } @@ -322,7 +323,7 @@ ReplayStatus WrappedVulkan::Initialise(VkInitParams ¶ms, uint64_t sectionVer std::find(params.Extensions.begin(), params.Extensions.end(), VK_EXT_DEBUG_REPORT_EXTENSION_NAME) == params.Extensions.end()) { - if(!m_Replay.IsRemoteProxy()) + if(!m_Replay->IsRemoteProxy()) RDCLOG("Enabling VK_EXT_debug_report"); params.Extensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME); } @@ -343,7 +344,7 @@ ReplayStatus WrappedVulkan::Initialise(VkInitParams ¶ms, uint64_t sectionVer std::find(params.Extensions.begin(), params.Extensions.end(), VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME) == params.Extensions.end()) { - if(!m_Replay.IsRemoteProxy()) + if(!m_Replay->IsRemoteProxy()) RDCLOG("Enabling VK_EXT_validation_features"); params.Extensions.push_back(VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME); @@ -354,7 +355,7 @@ ReplayStatus WrappedVulkan::Initialise(VkInitParams ¶ms, uint64_t sectionVer std::find(params.Extensions.begin(), params.Extensions.end(), VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME) == params.Extensions.end()) { - if(!m_Replay.IsRemoteProxy()) + if(!m_Replay->IsRemoteProxy()) RDCLOG("Enabling VK_EXT_validation_flags"); params.Extensions.push_back(VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME); @@ -834,7 +835,7 @@ void WrappedVulkan::Shutdown() for(size_t i = 0; i < m_ReplayPhysicalDevices.size(); i++) GetResourceManager()->ReleaseWrappedResource(m_ReplayPhysicalDevices[i]); - m_Replay.DestroyResources(); + m_Replay->DestroyResources(); m_IndirectBuffer.Destroy(); @@ -2717,7 +2718,7 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi m_PhysicalDeviceData.driverInfo = VkDriverInfo(m_PhysicalDeviceData.props); - m_Replay.SetDriverInformation(m_PhysicalDeviceData.props); + m_Replay->SetDriverInformation(m_PhysicalDeviceData.props); // MoltenVK reports 0x3fffffff for this limit so just ignore that value if it comes up RDCASSERT(m_PhysicalDeviceData.props.limits.maxBoundDescriptorSets < @@ -2751,7 +2752,7 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi m_DebugManager = new VulkanDebugManager(this); - m_Replay.CreateResources(); + m_Replay->CreateResources(); SetDebugMessageSink(sink); } diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index cb64e55ea..e0e7cf248 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -1855,7 +1855,7 @@ bool WrappedVulkan::Serialise_vkDebugMarkerSetObjectNameEXT( else m_CreationInfo.m_Names[GetResourceManager()->GetLiveID(Object)] = ObjectName; - ResourceDescription &descr = GetReplay()->GetResourceDesc(Object); + ResourceDescription &descr = GetResourceDesc(Object); AddResourceCurChunk(descr); descr.SetCustomName(ObjectName); @@ -1964,7 +1964,7 @@ bool WrappedVulkan::Serialise_vkSetDebugUtilsObjectNameEXT( else m_CreationInfo.m_Names[GetResourceManager()->GetLiveID(Object)] = ObjectName; - ResourceDescription &descr = GetReplay()->GetResourceDesc(Object); + ResourceDescription &descr = GetResourceDesc(Object); AddResourceCurChunk(descr); descr.SetCustomName(ObjectName); diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index e1eea8c34..f3da48d31 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -909,8 +909,8 @@ bool WrappedVulkan::Serialise_vkBindBufferMemory(SerialiserType &ser, VkDevice d ObjDisp(device)->BindBufferMemory(Unwrap(device), Unwrap(buffer), Unwrap(memory), memoryOffset); - GetReplay()->GetResourceDesc(memOrigId).derivedResources.push_back(resOrigId); - GetReplay()->GetResourceDesc(resOrigId).parentResources.push_back(memOrigId); + GetResourceDesc(memOrigId).derivedResources.push_back(resOrigId); + GetResourceDesc(resOrigId).parentResources.push_back(memOrigId); AddResourceCurChunk(memOrigId); AddResourceCurChunk(resOrigId); @@ -1016,8 +1016,8 @@ bool WrappedVulkan::Serialise_vkBindImageMemory(SerialiserType &ser, VkDevice de layout.boundMemoryOffset = memoryOffset; layout.boundMemorySize = mrq.size; - GetReplay()->GetResourceDesc(memOrigId).derivedResources.push_back(resOrigId); - GetReplay()->GetResourceDesc(resOrigId).parentResources.push_back(memOrigId); + GetResourceDesc(memOrigId).derivedResources.push_back(resOrigId); + GetResourceDesc(resOrigId).parentResources.push_back(memOrigId); AddResourceCurChunk(memOrigId); AddResourceCurChunk(resOrigId); @@ -2017,8 +2017,8 @@ bool WrappedVulkan::Serialise_vkBindBufferMemory2(SerialiserType &ser, VkDevice if(!ok) return false; - GetReplay()->GetResourceDesc(memOrigId).derivedResources.push_back(resOrigId); - GetReplay()->GetResourceDesc(resOrigId).parentResources.push_back(memOrigId); + GetResourceDesc(memOrigId).derivedResources.push_back(resOrigId); + GetResourceDesc(resOrigId).parentResources.push_back(memOrigId); AddResourceCurChunk(memOrigId); AddResourceCurChunk(resOrigId); @@ -2138,8 +2138,8 @@ bool WrappedVulkan::Serialise_vkBindImageMemory2(SerialiserType &ser, VkDevice d imageLayouts.boundMemoryOffset = bindInfo.memoryOffset; imageLayouts.boundMemorySize = mrq.size; - GetReplay()->GetResourceDesc(memOrigId).derivedResources.push_back(resOrigId); - GetReplay()->GetResourceDesc(resOrigId).parentResources.push_back(memOrigId); + GetResourceDesc(memOrigId).derivedResources.push_back(resOrigId); + GetResourceDesc(resOrigId).parentResources.push_back(memOrigId); AddResourceCurChunk(memOrigId); AddResourceCurChunk(resOrigId); diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index 78a580ab4..b25007f07 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -240,8 +240,8 @@ bool WrappedVulkan::Serialise_vkGetSwapchainImagesKHR(SerialiserType &ser, VkDev // do this one manually since there's no live version of the swapchain, and DerivedResource() // assumes we're passing it a live ID (or live resource) - GetReplay()->GetResourceDesc(Swapchain).derivedResources.push_back(SwapchainImage); - GetReplay()->GetResourceDesc(SwapchainImage).parentResources.push_back(Swapchain); + GetResourceDesc(Swapchain).derivedResources.push_back(SwapchainImage); + GetResourceDesc(SwapchainImage).parentResources.push_back(Swapchain); m_CreationInfo.m_Image[GetResID(swapInfo.images[SwapchainImageIndex].im)] = m_CreationInfo.m_Image[Swapchain]; diff --git a/renderdoc/maths/formatpacking.cpp b/renderdoc/maths/formatpacking.cpp index d4bc0efe3..87177c389 100644 --- a/renderdoc/maths/formatpacking.cpp +++ b/renderdoc/maths/formatpacking.cpp @@ -25,9 +25,56 @@ #include "formatpacking.h" #include #include +#include "api/replay/data_types.h" #include "api/replay/rdcpair.h" #include "common/common.h" +// for(int i=0; i < 256; i++) +// { +// uint8_t comp = i&0xff; +// float srgbF = float(comp)/255.0f; +// +// if(srgbF <= 0.04045f) +// SRGB8_lookuptable[comp] = srgbF/12.92f; +// else +// SRGB8_lookuptable[comp] = powf((0.055f + srgbF) / 1.055f, 2.4f); +// } + +float SRGB8_lookuptable[256] = { + 0.000000f, 0.000304f, 0.000607f, 0.000911f, 0.001214f, 0.001518f, 0.001821f, 0.002125f, + 0.002428f, 0.002732f, 0.003035f, 0.003347f, 0.003677f, 0.004025f, 0.004391f, 0.004777f, + 0.005182f, 0.005605f, 0.006049f, 0.006512f, 0.006995f, 0.007499f, 0.008023f, 0.008568f, + 0.009134f, 0.009721f, 0.010330f, 0.010960f, 0.011612f, 0.012286f, 0.012983f, 0.013702f, + 0.014444f, 0.015209f, 0.015996f, 0.016807f, 0.017642f, 0.018500f, 0.019382f, 0.020289f, + 0.021219f, 0.022174f, 0.023153f, 0.024158f, 0.025187f, 0.026241f, 0.027321f, 0.028426f, + 0.029557f, 0.030713f, 0.031896f, 0.033105f, 0.034340f, 0.035601f, 0.036889f, 0.038204f, + 0.039546f, 0.040915f, 0.042311f, 0.043735f, 0.045186f, 0.046665f, 0.048172f, 0.049707f, + 0.051269f, 0.052861f, 0.054480f, 0.056128f, 0.057805f, 0.059511f, 0.061246f, 0.063010f, + 0.064803f, 0.066626f, 0.068478f, 0.070360f, 0.072272f, 0.074214f, 0.076185f, 0.078187f, + 0.080220f, 0.082283f, 0.084376f, 0.086500f, 0.088656f, 0.090842f, 0.093059f, 0.095307f, + 0.097587f, 0.099899f, 0.102242f, 0.104616f, 0.107023f, 0.109462f, 0.111932f, 0.114435f, + 0.116971f, 0.119538f, 0.122139f, 0.124772f, 0.127438f, 0.130136f, 0.132868f, 0.135633f, + 0.138432f, 0.141263f, 0.144128f, 0.147027f, 0.149960f, 0.152926f, 0.155926f, 0.158961f, + 0.162029f, 0.165132f, 0.168269f, 0.171441f, 0.174647f, 0.177888f, 0.181164f, 0.184475f, + 0.187821f, 0.191202f, 0.194618f, 0.198069f, 0.201556f, 0.205079f, 0.208637f, 0.212231f, + 0.215861f, 0.219526f, 0.223228f, 0.226966f, 0.230740f, 0.234551f, 0.238398f, 0.242281f, + 0.246201f, 0.250158f, 0.254152f, 0.258183f, 0.262251f, 0.266356f, 0.270498f, 0.274677f, + 0.278894f, 0.283149f, 0.287441f, 0.291771f, 0.296138f, 0.300544f, 0.304987f, 0.309469f, + 0.313989f, 0.318547f, 0.323143f, 0.327778f, 0.332452f, 0.337164f, 0.341914f, 0.346704f, + 0.351533f, 0.356400f, 0.361307f, 0.366253f, 0.371238f, 0.376262f, 0.381326f, 0.386430f, + 0.391573f, 0.396755f, 0.401978f, 0.407240f, 0.412543f, 0.417885f, 0.423268f, 0.428691f, + 0.434154f, 0.439657f, 0.445201f, 0.450786f, 0.456411f, 0.462077f, 0.467784f, 0.473532f, + 0.479320f, 0.485150f, 0.491021f, 0.496933f, 0.502887f, 0.508881f, 0.514918f, 0.520996f, + 0.527115f, 0.533276f, 0.539480f, 0.545725f, 0.552011f, 0.558340f, 0.564712f, 0.571125f, + 0.577581f, 0.584078f, 0.590619f, 0.597202f, 0.603827f, 0.610496f, 0.617207f, 0.623960f, + 0.630757f, 0.637597f, 0.644480f, 0.651406f, 0.658375f, 0.665387f, 0.672443f, 0.679543f, + 0.686685f, 0.693872f, 0.701102f, 0.708376f, 0.715694f, 0.723055f, 0.730461f, 0.737911f, + 0.745404f, 0.752942f, 0.760525f, 0.768151f, 0.775822f, 0.783538f, 0.791298f, 0.799103f, + 0.806952f, 0.814847f, 0.822786f, 0.830770f, 0.838799f, 0.846873f, 0.854993f, 0.863157f, + 0.871367f, 0.879622f, 0.887923f, 0.896269f, 0.904661f, 0.913099f, 0.921582f, 0.930111f, + 0.938686f, 0.947307f, 0.955974f, 0.964686f, 0.973445f, 0.982251f, 0.991102f, 1.000000f, +}; + Vec3f ConvertFromR11G11B10(uint32_t data) { uint32_t mantissas[3] = { @@ -143,6 +190,167 @@ uint32_t ConvertToR11G11B10(Vec3f data) uint32_t(exponents[0]) << 6 | uint32_t(exponents[1]) << 17 | uint32_t(exponents[2]) << 27; } +float ConvertFromSRGB8(uint8_t comp) +{ + return SRGB8_lookuptable[comp]; +} + +float ConvertSRGBToLinear(float srgbF) +{ + if(srgbF <= 0.04045f) + return srgbF / 12.92f; + + if(srgbF < 0.0f) + srgbF = 0.0f; + else if(srgbF > 1.0f) + srgbF = 1.0f; + + return powf((0.055f + srgbF) / 1.055f, 2.4f); +} + +Vec4f ConvertSRGBToLinear(Vec4f srgbF) +{ + return Vec4f(ConvertSRGBToLinear(srgbF.x), ConvertSRGBToLinear(srgbF.y), + ConvertSRGBToLinear(srgbF.z), srgbF.w); +} + +float ConvertLinearToSRGB(float linear) +{ + if(linear <= 0.0031308f) + return 12.92f * linear; + + if(linear < 0.0f) + linear = 0.0f; + else if(linear > 1.0f) + linear = 1.0f; + + return 1.055f * powf(linear, 1.0f / 2.4f) - 0.055f; +} + +float ConvertComponent(const ResourceFormat &fmt, const byte *data) +{ + if(fmt.compByteWidth == 8) + { + // we just downcast + const uint64_t *u64 = (const uint64_t *)data; + const int64_t *i64 = (const int64_t *)data; + + if(fmt.compType == CompType::Double || fmt.compType == CompType::Float) + { + return float(*(const double *)u64); + } + else if(fmt.compType == CompType::UInt || fmt.compType == CompType::UScaled) + { + return float(*u64); + } + else if(fmt.compType == CompType::SInt || fmt.compType == CompType::SScaled) + { + return float(*i64); + } + } + else if(fmt.compByteWidth == 4) + { + const uint32_t *u32 = (const uint32_t *)data; + const int32_t *i32 = (const int32_t *)data; + + if(fmt.compType == CompType::Float || fmt.compType == CompType::Depth) + { + return *(const float *)u32; + } + else if(fmt.compType == CompType::UInt || fmt.compType == CompType::UScaled) + { + return float(*u32); + } + else if(fmt.compType == CompType::SInt || fmt.compType == CompType::SScaled) + { + return float(*i32); + } + } + else if(fmt.compByteWidth == 3 && fmt.compType == CompType::Depth) + { + // 24-bit depth is a weird edge case we need to assemble it by hand + const uint8_t *u8 = (const uint8_t *)data; + + uint32_t depth = 0; + depth |= uint32_t(u8[1]); + depth |= uint32_t(u8[2]) << 8; + depth |= uint32_t(u8[3]) << 16; + + return float(depth) / float(16777215.0f); + } + else if(fmt.compByteWidth == 2) + { + const uint16_t *u16 = (const uint16_t *)data; + const int16_t *i16 = (const int16_t *)data; + + if(fmt.compType == CompType::Float) + { + return ConvertFromHalf(*u16); + } + else if(fmt.compType == CompType::UInt || fmt.compType == CompType::UScaled) + { + return float(*u16); + } + else if(fmt.compType == CompType::SInt || fmt.compType == CompType::SScaled) + { + return float(*i16); + } + // 16-bit depth is UNORM + else if(fmt.compType == CompType::UNorm || fmt.compType == CompType::Depth) + { + return float(*u16) / 65535.0f; + } + else if(fmt.compType == CompType::SNorm) + { + float f = -1.0f; + + if(*i16 == -32768) + f = -1.0f; + else + f = ((float)*i16) / 32767.0f; + + return f; + } + } + else if(fmt.compByteWidth == 1) + { + const uint8_t *u8 = (const uint8_t *)data; + const int8_t *i8 = (const int8_t *)data; + + if(fmt.compType == CompType::UInt || fmt.compType == CompType::UScaled) + { + return float(*u8); + } + else if(fmt.compType == CompType::SInt || fmt.compType == CompType::SScaled) + { + return float(*i8); + } + else if(fmt.compType == CompType::UNormSRGB) + { + return SRGB8_lookuptable[*u8]; + } + else if(fmt.compType == CompType::UNorm) + { + return float(*u8) / 255.0f; + } + else if(fmt.compType == CompType::SNorm) + { + float f = -1.0f; + + if(*i8 == -128) + f = -1.0f; + else + f = ((float)*i8) / 127.0f; + + return f; + } + } + + RDCERR("Unexpected format to convert from %u %u", fmt.compByteWidth, fmt.compType); + + return 0.0f; +} + #if ENABLED(ENABLE_UNIT_TESTS) #undef None diff --git a/renderdoc/maths/formatpacking.h b/renderdoc/maths/formatpacking.h index 8099be310..05fa7f6c9 100644 --- a/renderdoc/maths/formatpacking.h +++ b/renderdoc/maths/formatpacking.h @@ -75,7 +75,6 @@ inline uint32_t ConvertToR10G10B10A2(Vec4f data) } Vec3f ConvertFromR11G11B10(uint32_t data); - uint32_t ConvertToR11G11B10(Vec3f data); inline Vec4f ConvertFromB5G5R5A1(uint16_t data) @@ -96,44 +95,10 @@ inline Vec4f ConvertFromB4G4R4A4(uint16_t data) (float)((data >> 8) & 0xf) / 15.0f, (float)((data >> 12) & 0xf) / 15.0f); } -extern float SRGB8_lookuptable[256]; - -inline float ConvertFromSRGB8(uint8_t comp) -{ - return SRGB8_lookuptable[comp]; -} - -inline float ConvertSRGBToLinear(float srgbF) -{ - if(srgbF <= 0.04045f) - return srgbF / 12.92f; - - if(srgbF < 0.0f) - srgbF = 0.0f; - else if(srgbF > 1.0f) - srgbF = 1.0f; - - return powf((0.055f + srgbF) / 1.055f, 2.4f); -} - -inline Vec4f ConvertSRGBToLinear(Vec4f srgbF) -{ - return Vec4f(ConvertSRGBToLinear(srgbF.x), ConvertSRGBToLinear(srgbF.y), - ConvertSRGBToLinear(srgbF.z), srgbF.w); -} - -inline float ConvertLinearToSRGB(float linear) -{ - if(linear <= 0.0031308f) - return 12.92f * linear; - - if(linear < 0.0f) - linear = 0.0f; - else if(linear > 1.0f) - linear = 1.0f; - - return 1.055f * powf(linear, 1.0f / 2.4f) - 0.055f; -} +float ConvertFromSRGB8(uint8_t comp); +float ConvertSRGBToLinear(float srgbF); +Vec4f ConvertSRGBToLinear(Vec4f srgbF); +float ConvertLinearToSRGB(float linear); typedef uint8_t byte; diff --git a/renderdoc/maths/vec.cpp b/renderdoc/maths/vec.cpp new file mode 100644 index 000000000..31b9e9703 --- /dev/null +++ b/renderdoc/maths/vec.cpp @@ -0,0 +1,45 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2019 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ + +#include "vec.h" +#include +#include "api/replay/data_types.h" + +float Vec3f::Length() const +{ + return sqrtf(Dot(*this)); +} + +Vec4f::Vec4f(const FloatVector &v) +{ + x = v.x; + y = v.y; + z = v.z; + w = v.w; +} + +Vec4f::operator FloatVector() const +{ + return FloatVector(x, y, z, w); +} diff --git a/renderdoc/maths/vec.h b/renderdoc/maths/vec.h index 502f77286..0761b42f5 100644 --- a/renderdoc/maths/vec.h +++ b/renderdoc/maths/vec.h @@ -25,7 +25,6 @@ #pragma once -#include #include struct Vec2f @@ -49,7 +48,7 @@ public: return Vec3f(y * o.z - z * o.y, z * o.x - x * o.z, x * o.y - y * o.x); } - inline float Length() const { return sqrtf(Dot(*this)); } + float Length() const; inline void Normalise() { float l = Length(); @@ -61,6 +60,8 @@ public: float x, y, z; }; +struct FloatVector; + struct Vec4f { Vec4f(float X = 0.0f, float Y = 0.0f, float Z = 0.0f, float W = 0.0f) @@ -70,7 +71,9 @@ struct Vec4f z = Z; w = W; } + Vec4f(const FloatVector &v); operator Vec3f() const { return Vec3f(x, y, z); } + operator FloatVector() const; float x, y, z, w; }; diff --git a/renderdoc/os/win32/sys_win32_hooks.cpp b/renderdoc/os/win32/sys_win32_hooks.cpp index abbfa824b..b9c0f6e6a 100644 --- a/renderdoc/os/win32/sys_win32_hooks.cpp +++ b/renderdoc/os/win32/sys_win32_hooks.cpp @@ -24,9 +24,9 @@ ******************************************************************************/ #include -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "hooks/hooks.h" +#include "os/os_specific.h" #include "strings/string_utils.h" typedef int(WSAAPI *PFN_WSASTARTUP)(__in WORD wVersionRequested, __out LPWSADATA lpWSAData); @@ -229,15 +229,13 @@ private: { RDCDEBUG("Intercepting %s", entryPoint); - rdcarray env; - // inherit logfile and capture options - ExecuteResult res = RENDERDOC_InjectIntoProcess(lpProcessInformation->dwProcessId, env, - RenderDoc::Inst().GetCaptureFileTemplate(), - RenderDoc::Inst().GetCaptureOptions(), false); + rdcpair res = Process::InjectIntoProcess( + lpProcessInformation->dwProcessId, {}, RenderDoc::Inst().GetCaptureFileTemplate(), + RenderDoc::Inst().GetCaptureOptions(), false); - if(res.status == ReplayStatus::Succeeded) - RenderDoc::Inst().AddChildProcess((uint32_t)lpProcessInformation->dwProcessId, res.ident); + if(res.first == ReplayStatus::Succeeded) + RenderDoc::Inst().AddChildProcess((uint32_t)lpProcessInformation->dwProcessId, res.second); } if(resume) diff --git a/renderdoc/renderdoc.vcxproj b/renderdoc/renderdoc.vcxproj index 9680a3924..7c0f9dd0e 100644 --- a/renderdoc/renderdoc.vcxproj +++ b/renderdoc/renderdoc.vcxproj @@ -436,6 +436,7 @@ + true diff --git a/renderdoc/renderdoc.vcxproj.filters b/renderdoc/renderdoc.vcxproj.filters index 0039bcd3e..0891c7abe 100644 --- a/renderdoc/renderdoc.vcxproj.filters +++ b/renderdoc/renderdoc.vcxproj.filters @@ -884,6 +884,9 @@ Common\Maths + + Common\Maths + diff --git a/renderdoc/replay/basic_types_tests.cpp b/renderdoc/replay/basic_types_tests.cpp index 1df9156df..b85d2f0ea 100644 --- a/renderdoc/replay/basic_types_tests.cpp +++ b/renderdoc/replay/basic_types_tests.cpp @@ -22,13 +22,17 @@ * THE SOFTWARE. ******************************************************************************/ -#include "api/replay/renderdoc_replay.h" +#include "common/globalconfig.h" + +#if ENABLED(ENABLE_UNIT_TESTS) + +#include "api/replay/rdcarray.h" +#include "api/replay/rdcpair.h" +#include "api/replay/rdcstr.h" #include "common/globalconfig.h" #include "common/timing.h" #include "os/os_specific.h" -#if ENABLED(ENABLE_UNIT_TESTS) - #include "3rdparty/catch/catch.hpp" static volatile int32_t constructor = 0; diff --git a/renderdoc/replay/capture_file.cpp b/renderdoc/replay/capture_file.cpp index a91cf1245..f6eca1093 100644 --- a/renderdoc/replay/capture_file.cpp +++ b/renderdoc/replay/capture_file.cpp @@ -22,7 +22,6 @@ * THE SOFTWARE. ******************************************************************************/ -#include "api/replay/renderdoc_replay.h" #include "core/core.h" #include "jpeg-compressor/jpgd.h" #include "jpeg-compressor/jpge.h" diff --git a/renderdoc/replay/capture_options.cpp b/renderdoc/replay/capture_options.cpp index c1cbf8e98..1795be521 100644 --- a/renderdoc/replay/capture_options.cpp +++ b/renderdoc/replay/capture_options.cpp @@ -22,9 +22,9 @@ * THE SOFTWARE. ******************************************************************************/ +#include "api/replay/capture_options.h" #include #include "api/app/renderdoc_app.h" -#include "api/replay/renderdoc_replay.h" #include "common/common.h" #include "core/core.h" @@ -171,6 +171,8 @@ float RENDERDOC_CC GetCaptureOptionF32(RENDERDOC_CaptureOption opt) CaptureOptions::CaptureOptions() { + // since we're reading from all bytes even padding etc, memset to 0 + RDCEraseEl(*this); allowVSync = true; allowFullscreen = true; apiValidation = false; diff --git a/renderdoc/replay/entry_points.cpp b/renderdoc/replay/entry_points.cpp index 1da2b2c54..37d90ef1c 100644 --- a/renderdoc/replay/entry_points.cpp +++ b/renderdoc/replay/entry_points.cpp @@ -32,6 +32,7 @@ #include "maths/camera.h" #include "maths/formatpacking.h" #include "miniz/miniz.h" +#include "replay/replay_driver.h" #include "strings/string_utils.h" // these entry points are for the replay/analysis side - not for the application. @@ -206,10 +207,8 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetColors(FloatVector darkC FloatVector lightChecker, bool darkTheme) { - RenderDoc::Inst().SetDarkCheckerboardColor( - Vec4f(darkChecker.x, darkChecker.y, darkChecker.z, darkChecker.w)); - RenderDoc::Inst().SetLightCheckerboardColor( - Vec4f(lightChecker.x, lightChecker.y, lightChecker.z, lightChecker.w)); + RenderDoc::Inst().SetDarkCheckerboardColor(darkChecker); + RenderDoc::Inst().SetLightCheckerboardColor(lightChecker); RenderDoc::Inst().SetDarkTheme(darkTheme); } @@ -248,8 +247,9 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_LogMessage(LogType type, co "External and internal LogType enums must match"); RDCCOMPILE_ASSERT((uint32_t)LogType::Fatal == (uint32_t)LogType__Internal::Fatal, "External and internal LogType enums must match"); - RDCCOMPILE_ASSERT(ENUM_ARRAY_SIZE(LogType) == 5, + RDCCOMPILE_ASSERT((uint32_t)LogType::Count == (uint32_t)LogType__Internal::Count, "External and internal LogType enums must match"); + RDCCOMPILE_ASSERT(arraydim() == 5, "External and internal LogType enums must match"); #if ENABLED(DEBUGBREAK_ON_ERROR_LOG) if(type == LogType::Error) diff --git a/renderdoc/replay/replay_controller.cpp b/renderdoc/replay/replay_controller.cpp index 10c8ef654..3ba9c2330 100644 --- a/renderdoc/replay/replay_controller.cpp +++ b/renderdoc/replay/replay_controller.cpp @@ -40,130 +40,6 @@ #include "strings/string_utils.h" #include "tinyexr/tinyexr.h" -float ConvertComponent(const ResourceFormat &fmt, const byte *data) -{ - if(fmt.compByteWidth == 8) - { - // we just downcast - const uint64_t *u64 = (const uint64_t *)data; - const int64_t *i64 = (const int64_t *)data; - - if(fmt.compType == CompType::Double || fmt.compType == CompType::Float) - { - return float(*(const double *)u64); - } - else if(fmt.compType == CompType::UInt || fmt.compType == CompType::UScaled) - { - return float(*u64); - } - else if(fmt.compType == CompType::SInt || fmt.compType == CompType::SScaled) - { - return float(*i64); - } - } - else if(fmt.compByteWidth == 4) - { - const uint32_t *u32 = (const uint32_t *)data; - const int32_t *i32 = (const int32_t *)data; - - if(fmt.compType == CompType::Float || fmt.compType == CompType::Depth) - { - return *(const float *)u32; - } - else if(fmt.compType == CompType::UInt || fmt.compType == CompType::UScaled) - { - return float(*u32); - } - else if(fmt.compType == CompType::SInt || fmt.compType == CompType::SScaled) - { - return float(*i32); - } - } - else if(fmt.compByteWidth == 3 && fmt.compType == CompType::Depth) - { - // 24-bit depth is a weird edge case we need to assemble it by hand - const uint8_t *u8 = (const uint8_t *)data; - - uint32_t depth = 0; - depth |= uint32_t(u8[1]); - depth |= uint32_t(u8[2]) << 8; - depth |= uint32_t(u8[3]) << 16; - - return float(depth) / float(16777215.0f); - } - else if(fmt.compByteWidth == 2) - { - const uint16_t *u16 = (const uint16_t *)data; - const int16_t *i16 = (const int16_t *)data; - - if(fmt.compType == CompType::Float) - { - return ConvertFromHalf(*u16); - } - else if(fmt.compType == CompType::UInt || fmt.compType == CompType::UScaled) - { - return float(*u16); - } - else if(fmt.compType == CompType::SInt || fmt.compType == CompType::SScaled) - { - return float(*i16); - } - // 16-bit depth is UNORM - else if(fmt.compType == CompType::UNorm || fmt.compType == CompType::Depth) - { - return float(*u16) / 65535.0f; - } - else if(fmt.compType == CompType::SNorm) - { - float f = -1.0f; - - if(*i16 == -32768) - f = -1.0f; - else - f = ((float)*i16) / 32767.0f; - - return f; - } - } - else if(fmt.compByteWidth == 1) - { - const uint8_t *u8 = (const uint8_t *)data; - const int8_t *i8 = (const int8_t *)data; - - if(fmt.compType == CompType::UInt || fmt.compType == CompType::UScaled) - { - return float(*u8); - } - else if(fmt.compType == CompType::SInt || fmt.compType == CompType::SScaled) - { - return float(*i8); - } - else if(fmt.compType == CompType::UNormSRGB) - { - return SRGB8_lookuptable[*u8]; - } - else if(fmt.compType == CompType::UNorm) - { - return float(*u8) / 255.0f; - } - else if(fmt.compType == CompType::SNorm) - { - float f = -1.0f; - - if(*i8 == -128) - f = -1.0f; - else - f = ((float)*i8) / 127.0f; - - return f; - } - } - - RDCERR("Unexpected format to convert from %u %u", fmt.compByteWidth, fmt.compType); - - return 0.0f; -} - static void fileWriteFunc(void *context, void *data, int size) { FileIO::fwrite(data, 1, size, (FILE *)context); @@ -1208,9 +1084,9 @@ bool ReplayController::SaveTexture(const TextureSave &saveData, const char *path : RenderDoc::Inst().DarkCheckerboardColor(); } - col.x = powf(col.x, 1.0f / 2.2f); - col.y = powf(col.y, 1.0f / 2.2f); - col.z = powf(col.z, 1.0f / 2.2f); + col.x = ConvertLinearToSRGB(col.x); + col.y = ConvertLinearToSRGB(col.y); + col.z = ConvertLinearToSRGB(col.z); FloatVector pixel = FloatVector(float(r) / 255.0f, float(g) / 255.0f, float(b) / 255.0f, float(a) / 255.0f); diff --git a/renderdoc/replay/replay_driver.h b/renderdoc/replay/replay_driver.h index 170f25133..7f6a84761 100644 --- a/renderdoc/replay/replay_driver.h +++ b/renderdoc/replay/replay_driver.h @@ -257,6 +257,24 @@ public: const MeshDisplay &cfg, uint32_t x, uint32_t y) = 0; }; +// for protocols, we extend the public interface a bit to add callbacks for remapping connection +// ports (typically to some port forwarded on localhost) +struct IDeviceProtocolHandler : public IDeviceProtocolController +{ + virtual rdcstr GetDeviceID(const rdcstr &URL) + { + rdcstr ret = URL; + int offs = ret.find("://"); + if(offs > 0) + ret.erase(0, offs + 3); + return ret; + } + + virtual rdcstr RemapHostname(const rdcstr &deviceID) = 0; + virtual uint16_t RemapPort(const rdcstr &deviceID, uint16_t srcPort) = 0; + virtual IRemoteServer *CreateRemoteServer(Network::Socket *sock, const rdcstr &deviceID) = 0; +}; + // utility functions useful in any driver implementation void SetupDrawcallPointers(std::vector &drawcallTable, rdcarray &draws); diff --git a/renderdoc/serialise/codecs/chrome_json_codec.cpp b/renderdoc/serialise/codecs/chrome_json_codec.cpp index 71bf2dea1..e9691b7a7 100644 --- a/renderdoc/serialise/codecs/chrome_json_codec.cpp +++ b/renderdoc/serialise/codecs/chrome_json_codec.cpp @@ -23,6 +23,7 @@ ******************************************************************************/ #include +#include "api/replay/structured_data.h" #include "common/common.h" #include "common/formatting.h" #include "serialise/rdcfile.h" diff --git a/renderdoc/serialise/codecs/xml_codec.cpp b/renderdoc/serialise/codecs/xml_codec.cpp index 702b4296f..bc6bbeefc 100644 --- a/renderdoc/serialise/codecs/xml_codec.cpp +++ b/renderdoc/serialise/codecs/xml_codec.cpp @@ -23,6 +23,7 @@ ******************************************************************************/ #include +#include "api/replay/structured_data.h" #include "common/common.h" #include "common/formatting.h" #include "serialise/rdcfile.h" diff --git a/renderdoc/serialise/serialiser.h b/renderdoc/serialise/serialiser.h index c2cfae924..f4fa9aa71 100644 --- a/renderdoc/serialise/serialiser.h +++ b/renderdoc/serialise/serialiser.h @@ -28,7 +28,7 @@ #include #include #include -#include "api/replay/renderdoc_replay.h" +#include "api/replay/structured_data.h" #include "common/formatting.h" #include "streamio.h"