From fb496db7641eeeb6d6127dd7aff768f0498013f3 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 20 Aug 2015 23:33:05 +0200 Subject: [PATCH] Move ResourceId tracking to common location for all drivers to share --- renderdoc/core/resource_manager.cpp | 15 +++++++++++++++ renderdoc/core/resource_manager.h | 6 ++++++ renderdoc/driver/d3d11/d3d11_context.cpp | 2 +- renderdoc/driver/d3d11/d3d11_device.cpp | 4 ++-- renderdoc/driver/d3d11/d3d11_resources.cpp | 2 -- renderdoc/driver/d3d11/d3d11_resources.h | 15 +-------------- renderdoc/driver/gl/gl_common.cpp | 15 --------------- renderdoc/driver/gl/gl_driver.cpp | 2 +- renderdoc/driver/gl/gl_manager.h | 2 +- renderdoc/driver/gl/gl_resources.h | 6 ------ 10 files changed, 27 insertions(+), 42 deletions(-) diff --git a/renderdoc/core/resource_manager.cpp b/renderdoc/core/resource_manager.cpp index b7f2f21f3..9a6e0b3fd 100644 --- a/renderdoc/core/resource_manager.cpp +++ b/renderdoc/core/resource_manager.cpp @@ -25,6 +25,21 @@ #include "resource_manager.h" +namespace ResourceIDGen +{ + static volatile int64_t globalIDCounter = 1; + + ResourceId GetNewUniqueID() + { + return ResourceId(Atomic::Inc64(&globalIDCounter), true); + } + + void SetReplayResourceIDs() + { + globalIDCounter = RDCMAX(uint64_t(globalIDCounter), uint64_t(globalIDCounter|0x1000000000000000ULL)); + } +}; + void ResourceRecord::MarkResourceFrameReferenced(ResourceId id, FrameRefType refType) { ResourceManager::MarkReferenced(m_FrameRefs, id, refType); diff --git a/renderdoc/core/resource_manager.h b/renderdoc/core/resource_manager.h index 5bf8bb306..24ac42852 100644 --- a/renderdoc/core/resource_manager.h +++ b/renderdoc/core/resource_manager.h @@ -55,6 +55,12 @@ enum FrameRefType eFrameRef_ReadBeforeWrite, }; +namespace ResourceIDGen +{ + ResourceId GetNewUniqueID(); + void SetReplayResourceIDs(); +}; + class ResourceRecordHandler { public: diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index 45ebda31c..54d8cfc24 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -127,7 +127,7 @@ WrappedID3D11DeviceContext::WrappedID3D11DeviceContext(WrappedID3D11Device* real } // create a temporary and grab its resource ID - m_ResourceID = TrackedResource().GetResourceID(); + m_ResourceID = ResourceIDGen::GetNewUniqueID(); m_ContextRecord = NULL; diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index a322fb95a..e2ad3a13b 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -310,7 +310,7 @@ WrappedID3D11Device::WrappedID3D11Device(ID3D11Device* realDevice, D3D11InitPara m_pSerialiser = NULL; m_pDebugSerialiser = NULL; - TrackedResource::SetReplayResourceIDs(); + ResourceIDGen::SetReplayResourceIDs(); } else { @@ -330,7 +330,7 @@ WrappedID3D11Device::WrappedID3D11Device(ID3D11Device* realDevice, D3D11InitPara m_pSerialiser->SetChunkNameLookup(&GetChunkName); // create a temporary and grab its resource ID - m_ResourceID = TrackedResource().GetResourceID(); + m_ResourceID = ResourceIDGen::GetNewUniqueID(); m_DeviceRecord = NULL; diff --git a/renderdoc/driver/d3d11/d3d11_resources.cpp b/renderdoc/driver/d3d11/d3d11_resources.cpp index 0f38f13d1..d8c5ae724 100644 --- a/renderdoc/driver/d3d11/d3d11_resources.cpp +++ b/renderdoc/driver/d3d11/d3d11_resources.cpp @@ -56,8 +56,6 @@ WRAPPED_POOL_INST(WrappedID3D11RasterizerState1); WRAPPED_POOL_INST(WrappedID3D11BlendState1); #endif -volatile LONGLONG TrackedResource::globalIDCounter = 1; - map WrappedTexture::m_TextureList; map WrappedTexture::m_TextureList; map WrappedTexture::m_TextureList; diff --git a/renderdoc/driver/d3d11/d3d11_resources.h b/renderdoc/driver/d3d11/d3d11_resources.h index 3b6ef7578..88dff5d34 100644 --- a/renderdoc/driver/d3d11/d3d11_resources.h +++ b/renderdoc/driver/d3d11/d3d11_resources.h @@ -95,28 +95,15 @@ class TrackedResource public: TrackedResource() { - m_ID = GetNewUniqueID(); + m_ID = ResourceIDGen::GetNewUniqueID(); } ResourceId GetResourceID() { return m_ID; } - - static void SetReplayResourceIDs() - { - globalIDCounter = RDCMAX(uint64_t(globalIDCounter), uint64_t(globalIDCounter|0x1000000000000000ULL)); - } private: TrackedResource(const TrackedResource &); TrackedResource &operator =(const TrackedResource &); - - ResourceId GetNewUniqueID() - { - uint64_t newID = (uint64_t)InterlockedIncrement64(&globalIDCounter); - - return ResourceId(newID, true); // bool to make explicit - } - static volatile LONGLONG globalIDCounter; ResourceId m_ID; }; diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index e80e5d686..a496be0e5 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -28,21 +28,6 @@ #include "gl_common.h" #include "gl_driver.h" -namespace TrackedResource -{ - static volatile int64_t globalIDCounter = 0; - - ResourceId GetNewUniqueID() - { - return ResourceId(Atomic::Inc64(&globalIDCounter), true); - } - - void SetReplayResourceIDs() - { - globalIDCounter = RDCMAX(uint64_t(globalIDCounter), uint64_t(globalIDCounter|0x1000000000000000ULL)); - } -}; - bool ExtensionSupported[ExtensionSupported_Count]; bool VendorCheck[VendorCheck_Count]; diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index c248b5e0f..df6fdbe50 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -777,7 +777,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs) { m_DeviceRecord = m_ContextRecord = NULL; - TrackedResource::SetReplayResourceIDs(); + ResourceIDGen::SetReplayResourceIDs(); InitSPIRVCompiler(); RenderDoc::Inst().RegisterShutdownFunction(&ShutdownSPIRVCompiler); diff --git a/renderdoc/driver/gl/gl_manager.h b/renderdoc/driver/gl/gl_manager.h index ef9737937..e05bb3c2b 100644 --- a/renderdoc/driver/gl/gl_manager.h +++ b/renderdoc/driver/gl/gl_manager.h @@ -107,7 +107,7 @@ class GLResourceManager : public ResourceManager ResourceId RegisterResource(GLResource res) { - ResourceId id = TrackedResource::GetNewUniqueID(); + ResourceId id = ResourceIDGen::GetNewUniqueID(); m_CurrentResourceIds[res] = id; AddCurrentResource(id, res); return id; diff --git a/renderdoc/driver/gl/gl_resources.h b/renderdoc/driver/gl/gl_resources.h index 1fe271b32..af66b1088 100644 --- a/renderdoc/driver/gl/gl_resources.h +++ b/renderdoc/driver/gl/gl_resources.h @@ -211,9 +211,3 @@ struct GLResourceRecord : public ResourceRecord private: byte *ShadowPtr[2]; }; - -namespace TrackedResource -{ - ResourceId GetNewUniqueID(); - void SetReplayResourceIDs(); -};