diff --git a/renderdoc/Makefile b/renderdoc/Makefile index df23a2f42..354e744a1 100644 --- a/renderdoc/Makefile +++ b/renderdoc/Makefile @@ -5,7 +5,7 @@ MACROS=-DLINUX \ -DRENDERDOC_PLATFORM=linux \ -DRENDERDOC_EXPORTS \ -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unknown-pragmas -Wno-error=format -fPIC $(MACROS) -I. -I3rdparty/ +CFLAGS=-c -Wall -Werror -Wno-unknown-pragmas -fPIC $(MACROS) -I. -I3rdparty/ CPPFLAGS=-std=c++11 -g -Wno-unused -Wno-unknown-pragmas -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden LDFLAGS=-lpthread -lrt -shared -ldl -lX11 OBJDIR=.obj @@ -16,6 +16,9 @@ replay/type_helpers.o \ hooks/hooks.o \ hooks/gl_linux_hooks.o \ serialise/serialiser.o \ +serialise/grisu2.o \ +serialise/utf8printf.o \ +serialise/string_utils.o \ common/common.o \ common/dds_readwrite.o \ core/remote_access.o \ diff --git a/renderdoc/api/app/renderdoc_app.h b/renderdoc/api/app/renderdoc_app.h index c0c39ef05..65969b11c 100644 --- a/renderdoc/api/app/renderdoc_app.h +++ b/renderdoc/api/app/renderdoc_app.h @@ -224,7 +224,9 @@ enum InAppOverlay eOverlay_None = 0, }; -#define RENDERDOC_API_VERSION 1 +// API breaking change history: +// Version 1 -> 2 - strings changed from wchar_t* to char* (UTF-8) +#define RENDERDOC_API_VERSION 2 ////////////////////////////////////////////////////////////////////////// // In-program functions @@ -233,14 +235,14 @@ enum InAppOverlay extern "C" RENDERDOC_API int RENDERDOC_CC RENDERDOC_GetAPIVersion(); typedef int (RENDERDOC_CC *pRENDERDOC_GetAPIVersion)(); -extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetLogFile(const wchar_t *logfile); -typedef void (RENDERDOC_CC *pRENDERDOC_SetLogFile)(const wchar_t *logfile); +extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetLogFile(const char *logfile); +typedef void (RENDERDOC_CC *pRENDERDOC_SetLogFile)(const char *logfile); -extern "C" RENDERDOC_API const wchar_t* RENDERDOC_CC RENDERDOC_GetLogFile(); -typedef const wchar_t* (RENDERDOC_CC *pRENDERDOC_GetLogFile)(); +extern "C" RENDERDOC_API const char* RENDERDOC_CC RENDERDOC_GetLogFile(); +typedef const char* (RENDERDOC_CC *pRENDERDOC_GetLogFile)(); -extern "C" RENDERDOC_API bool32 RENDERDOC_CC RENDERDOC_GetCapture(uint32_t idx, wchar_t *logfile, uint32_t *pathlength, uint64_t *timestamp); -typedef bool32 (RENDERDOC_CC *pRENDERDOC_GetCapture)(uint32_t idx, wchar_t *logfile, uint32_t *pathlength, uint64_t *timestamp); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC RENDERDOC_GetCapture(uint32_t idx, char *logfile, uint32_t *pathlength, uint64_t *timestamp); +typedef bool32 (RENDERDOC_CC *pRENDERDOC_GetCapture)(uint32_t idx, char *logfile, uint32_t *pathlength, uint64_t *timestamp); extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetCaptureOptions(const CaptureOptions *opts); typedef void (RENDERDOC_CC *pRENDERDOC_SetCaptureOptions)(const CaptureOptions *opts); diff --git a/renderdoc/api/replay/basic_types.h b/renderdoc/api/replay/basic_types.h index 6c54fd6d2..57d2a892d 100644 --- a/renderdoc/api/replay/basic_types.h +++ b/renderdoc/api/replay/basic_types.h @@ -138,34 +138,4 @@ struct str : public rdctype::array } }; -struct wstr : public rdctype::array -{ - wstr &operator =(const std::wstring &in); - wstr &operator =(const wchar_t *const in); - - wstr() : rdctype::array() {} - wstr(const wstr &o) { elems = 0; count = 0; *this = o; } - wstr &operator =(const wstr &o) - { - // do nothing if we're self-assigning - if(this == &o) return *this; - - Delete(); - count = o.count; - if(count == 0) - { - elems = (wchar_t*)allocate(sizeof(wchar_t)); - elems[0] = 0; - } - else - { - elems = (wchar_t*)allocate(sizeof(wchar_t)*(o.count+1)); - memcpy(elems, o.elems, sizeof(wchar_t)*o.count); - elems[count] = 0; - } - - return *this; - } -}; - }; // namespace rdctype diff --git a/renderdoc/api/replay/control_types.h b/renderdoc/api/replay/control_types.h index f2513da70..91036da5c 100644 --- a/renderdoc/api/replay/control_types.h +++ b/renderdoc/api/replay/control_types.h @@ -182,17 +182,17 @@ struct RemoteMessage uint32_t ID; uint64_t timestamp; rdctype::array thumbnail; - rdctype::wstr localpath; + rdctype::str localpath; } NewCapture; struct RegisterAPIData { - rdctype::wstr APIName; + rdctype::str APIName; } RegisterAPI; struct BusyData { - rdctype::wstr ClientName; + rdctype::str ClientName; } Busy; struct NewChildData diff --git a/renderdoc/api/replay/d3d11_pipestate.h b/renderdoc/api/replay/d3d11_pipestate.h index ef01c0e1e..e1124a9ab 100644 --- a/renderdoc/api/replay/d3d11_pipestate.h +++ b/renderdoc/api/replay/d3d11_pipestate.h @@ -35,7 +35,7 @@ struct D3D11PipelineState struct LayoutInput { LayoutInput() : SemanticIndex(0), InputSlot(0), ByteOffset(0), PerInstance(false), InstanceDataStepRate(0) {} - rdctype::wstr SemanticName; + rdctype::str SemanticName; uint32_t SemanticIndex; ResourceFormat Format; uint32_t InputSlot; @@ -71,7 +71,7 @@ struct D3D11PipelineState { ShaderStage() : Shader(), ShaderDetails(NULL) {} ResourceId Shader; - rdctype::wstr ShaderName; + rdctype::str ShaderName; bool32 customName; ShaderReflection *ShaderDetails; ShaderBindpointMapping BindpointMapping; @@ -91,7 +91,7 @@ struct D3D11PipelineState ResourceId View; ResourceId Resource; - rdctype::wstr Type; + rdctype::str Type; ResourceFormat Format; bool32 Structured; @@ -124,10 +124,10 @@ struct D3D11PipelineState Sampler() : Samp(), MaxAniso(0), MaxLOD(0.0f), MinLOD(0.0f), MipLODBias(0.0f) { BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 0.0f; } ResourceId Samp; - rdctype::wstr AddressU, AddressV, AddressW; + rdctype::str AddressU, AddressV, AddressW; float BorderColor[4]; - rdctype::wstr Comparison; - rdctype::wstr Filter; + rdctype::str Comparison; + rdctype::str Filter; uint32_t MaxAniso; float MaxLOD; float MinLOD; @@ -144,7 +144,7 @@ struct D3D11PipelineState }; rdctype::array ConstantBuffers; - rdctype::array ClassInstances; + rdctype::array ClassInstances; } m_VS, m_HS, m_DS, m_GS, m_PS, m_CS; struct Streamout @@ -209,7 +209,7 @@ struct D3D11PipelineState StencilReadMask(0), StencilWriteMask(0), StencilRef(0) {} ResourceId State; bool32 DepthEnable; - rdctype::wstr DepthFunc; + rdctype::str DepthFunc; bool32 DepthWrites; bool32 StencilEnable; byte StencilReadMask; @@ -217,10 +217,10 @@ struct D3D11PipelineState struct StencilOp { - rdctype::wstr FailOp; - rdctype::wstr DepthFailOp; - rdctype::wstr PassOp; - rdctype::wstr Func; + rdctype::str FailOp; + rdctype::str DepthFailOp; + rdctype::str PassOp; + rdctype::str Func; } m_FrontFace, m_BackFace; uint32_t StencilRef; @@ -241,12 +241,12 @@ struct D3D11PipelineState RTBlend() : Enabled(false), WriteMask(0) {} struct BlendOp { - rdctype::wstr Source; - rdctype::wstr Destination; - rdctype::wstr Operation; + rdctype::str Source; + rdctype::str Destination; + rdctype::str Operation; } m_Blend, m_AlphaBlend; - rdctype::wstr LogicOp; + rdctype::str LogicOp; bool32 Enabled; bool32 LogicEnabled; diff --git a/renderdoc/api/replay/data_types.h b/renderdoc/api/replay/data_types.h index b4a4f1dd2..b261f5c74 100644 --- a/renderdoc/api/replay/data_types.h +++ b/renderdoc/api/replay/data_types.h @@ -69,7 +69,7 @@ struct ResourceFormat bool32 special; SpecialFormat specialFormat; - rdctype::wstr strname; + rdctype::str strname; uint32_t compCount; uint32_t compByteWidth; @@ -81,7 +81,7 @@ struct ResourceFormat struct FetchBuffer { ResourceId ID; - rdctype::wstr name; + rdctype::str name; bool32 customName; uint32_t length; uint32_t structureSize; @@ -91,7 +91,7 @@ struct FetchBuffer struct FetchTexture { - rdctype::wstr name; + rdctype::str name; bool32 customName; ResourceFormat format; uint32_t dimension; @@ -123,7 +123,7 @@ struct FetchAPIEvent rdctype::array callstack; - rdctype::wstr eventDesc; + rdctype::str eventDesc; uint64_t fileOffset; }; @@ -175,7 +175,7 @@ struct FetchDrawcall uint32_t eventID, drawcallID; - rdctype::wstr name; + rdctype::str name; uint32_t flags; diff --git a/renderdoc/api/replay/renderdoc_replay.h b/renderdoc/api/replay/renderdoc_replay.h index da07a24cb..4ad2a8f06 100644 --- a/renderdoc/api/replay/renderdoc_replay.h +++ b/renderdoc/api/replay/renderdoc_replay.h @@ -137,10 +137,10 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SetFrameEvent(Replay extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetD3D11PipelineState(ReplayRenderer *rend, D3D11PipelineState *state); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetGLPipelineState(ReplayRenderer *rend, GLPipelineState *state); -extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildCustomShader(ReplayRenderer *rend, const wchar_t *entry, const wchar_t *source, const uint32_t compileFlags, ShaderStageType type, ResourceId *shaderID, rdctype::wstr *errors); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildCustomShader(ReplayRenderer *rend, const char *entry, const char *source, const uint32_t compileFlags, ShaderStageType type, ResourceId *shaderID, rdctype::str *errors); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_FreeCustomShader(ReplayRenderer *rend, ResourceId id); -extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildTargetShader(ReplayRenderer *rend, const wchar_t *entry, const wchar_t *source, const uint32_t compileFlags, ShaderStageType type, ResourceId *shaderID, rdctype::wstr *errors); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildTargetShader(ReplayRenderer *rend, const char *entry, const char *source, const uint32_t compileFlags, ShaderStageType type, ResourceId *shaderID, rdctype::str *errors); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_ReplaceResource(ReplayRenderer *rend, ResourceId from, ResourceId to); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_RemoveReplacement(ReplayRenderer *rend, ResourceId id); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_FreeTargetResource(ReplayRenderer *rend, ResourceId id); @@ -149,7 +149,7 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetFrameInfo(ReplayR extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetDrawcalls(ReplayRenderer *rend, uint32_t frameID, bool32 includeTimes, rdctype::array *draws); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetTextures(ReplayRenderer *rend, rdctype::array *texs); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetBuffers(ReplayRenderer *rend, rdctype::array *bufs); -extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetResolve(ReplayRenderer *rend, uint64_t *callstack, uint32_t callstackLen, rdctype::array *trace); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetResolve(ReplayRenderer *rend, uint64_t *callstack, uint32_t callstackLen, rdctype::array *trace); extern "C" RENDERDOC_API ShaderReflection* RENDERDOC_CC ReplayRenderer_GetShaderDetails(ReplayRenderer *rend, ResourceId shader); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_PixelHistory(ReplayRenderer *rend, ResourceId target, uint32_t x, uint32_t y, uint32_t sampleIdx, rdctype::array *history); @@ -161,7 +161,7 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetUsage(ReplayRende extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetCBufferVariableContents(ReplayRenderer *rend, ResourceId shader, uint32_t cbufslot, ResourceId buffer, uint32_t offs, rdctype::array *vars); -extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SaveTexture(ReplayRenderer *rend, const TextureSave &saveData, const wchar_t *path); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SaveTexture(ReplayRenderer *rend, const TextureSave &saveData, const char *path); extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetPostVSData(ReplayRenderer *rend, MeshDataStage stage, PostVSMeshData *data); @@ -178,14 +178,14 @@ struct RemoteAccess { }; extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_Shutdown(RemoteAccess *access); -extern "C" RENDERDOC_API const wchar_t* RENDERDOC_CC RemoteAccess_GetTarget(RemoteAccess *access); -extern "C" RENDERDOC_API const wchar_t* RENDERDOC_CC RemoteAccess_GetAPI(RemoteAccess *access); +extern "C" RENDERDOC_API const char* RENDERDOC_CC RemoteAccess_GetTarget(RemoteAccess *access); +extern "C" RENDERDOC_API const char* RENDERDOC_CC RemoteAccess_GetAPI(RemoteAccess *access); extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RemoteAccess_GetPID(RemoteAccess *access); -extern "C" RENDERDOC_API const wchar_t* RENDERDOC_CC RemoteAccess_GetBusyClient(RemoteAccess *access); +extern "C" RENDERDOC_API const char* RENDERDOC_CC RemoteAccess_GetBusyClient(RemoteAccess *access); extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_TriggerCapture(RemoteAccess *access); extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_QueueCapture(RemoteAccess *access, uint32_t frameNumber); -extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_CopyCapture(RemoteAccess *access, uint32_t remoteID, const wchar_t *localpath); +extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_CopyCapture(RemoteAccess *access, uint32_t remoteID, const char *localpath); extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_ReceiveMessage(RemoteAccess *access, RemoteMessage *msg); @@ -197,10 +197,10 @@ struct RemoteRenderer { }; extern "C" RENDERDOC_API void RENDERDOC_CC RemoteRenderer_Shutdown(RemoteRenderer *remote); -extern "C" RENDERDOC_API bool32 RENDERDOC_CC RemoteRenderer_LocalProxies(RemoteRenderer *remote, rdctype::array *out); -extern "C" RENDERDOC_API bool32 RENDERDOC_CC RemoteRenderer_RemoteSupportedReplays(RemoteRenderer *remote, rdctype::array *out); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC RemoteRenderer_LocalProxies(RemoteRenderer *remote, rdctype::array *out); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC RemoteRenderer_RemoteSupportedReplays(RemoteRenderer *remote, rdctype::array *out); -extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC RemoteRenderer_CreateProxyRenderer(RemoteRenderer *remote, uint32_t proxyid, const wchar_t *logfile, float *progress, ReplayRenderer **rend); +extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC RemoteRenderer_CreateProxyRenderer(RemoteRenderer *remote, uint32_t proxyid, const char *logfile, float *progress, ReplayRenderer **rend); ////////////////////////////////////////////////////////////////////////// // Maths/format related exports @@ -218,24 +218,24 @@ extern "C" RENDERDOC_API void RENDERDOC_CC Maths_CameraFPSLook(const FloatVector // Takes the filename of the log. Returns NULL in the case of any error. ////////////////////////////////////////////////////////////////////////// -extern "C" RENDERDOC_API bool32 RENDERDOC_CC RENDERDOC_SupportLocalReplay(const wchar_t *logfile, rdctype::wstr *driverName); -typedef bool32 (RENDERDOC_CC *pRENDERDOC_SupportLocalReplay)(const wchar_t *logfile, rdctype::wstr *driverName); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC RENDERDOC_SupportLocalReplay(const char *logfile, rdctype::str *driverName); +typedef bool32 (RENDERDOC_CC *pRENDERDOC_SupportLocalReplay)(const char *logfile, rdctype::str *driverName); -extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateReplayRenderer(const wchar_t *logfile, float *progress, ReplayRenderer **rend); -typedef ReplayCreateStatus (RENDERDOC_CC *pRENDERDOC_CreateReplayRenderer)(const wchar_t *logfile, float *progress, ReplayRenderer **rend); +extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateReplayRenderer(const char *logfile, float *progress, ReplayRenderer **rend); +typedef ReplayCreateStatus (RENDERDOC_CC *pRENDERDOC_CreateReplayRenderer)(const char *logfile, float *progress, ReplayRenderer **rend); ////////////////////////////////////////////////////////////////////////// // Remote access and control ////////////////////////////////////////////////////////////////////////// -extern "C" RENDERDOC_API RemoteAccess* RENDERDOC_CC RENDERDOC_CreateRemoteAccessConnection(const wchar_t *host, uint32_t ident, const wchar_t *clientName, bool32 forceConnection); -typedef RemoteAccess* (RENDERDOC_CC *pRENDERDOC_CreateRemoteAccessConnection)(const wchar_t *host, uint32_t ident, const wchar_t *clientName, bool32 forceConnection); +extern "C" RENDERDOC_API RemoteAccess* RENDERDOC_CC RENDERDOC_CreateRemoteAccessConnection(const char *host, uint32_t ident, const char *clientName, bool32 forceConnection); +typedef RemoteAccess* (RENDERDOC_CC *pRENDERDOC_CreateRemoteAccessConnection)(const char *host, uint32_t ident, const char *clientName, bool32 forceConnection); -extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_EnumerateRemoteConnections(const wchar_t *host, uint32_t *idents); -typedef uint32_t (RENDERDOC_CC *pRENDERDOC_EnumerateRemoteConnections)(const wchar_t *host, uint32_t *idents); +extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_EnumerateRemoteConnections(const char *host, uint32_t *idents); +typedef uint32_t (RENDERDOC_CC *pRENDERDOC_EnumerateRemoteConnections)(const char *host, uint32_t *idents); -extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateRemoteReplayConnection(const wchar_t *host, RemoteRenderer **rend); -typedef ReplayCreateStatus (RENDERDOC_CC *pRENDERDOC_CreateRemoteReplayConnection)(const wchar_t *host, RemoteRenderer **rend); +extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateRemoteReplayConnection(const char *host, RemoteRenderer **rend); +typedef ReplayCreateStatus (RENDERDOC_CC *pRENDERDOC_CreateRemoteReplayConnection)(const char *host, RemoteRenderer **rend); extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SpawnReplayHost(volatile bool32 *killReplay); typedef void (RENDERDOC_CC *pRENDERDOC_SpawnReplayHost)(volatile bool32 *killReplay); @@ -246,16 +246,16 @@ typedef void (RENDERDOC_CC *pRENDERDOC_SpawnReplayHost)(volatile bool32 *killRep struct CaptureOptions; -extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartGlobalHook(const wchar_t *pathmatch, const wchar_t *logfile, const CaptureOptions *opts); -typedef void (RENDERDOC_CC *pRENDERDOC_StartGlobalHook)(const wchar_t *pathmatch, const wchar_t *logfile, const CaptureOptions *opts); +extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartGlobalHook(const char *pathmatch, const char *logfile, const CaptureOptions *opts); +typedef void (RENDERDOC_CC *pRENDERDOC_StartGlobalHook)(const char *pathmatch, const char *logfile, const CaptureOptions *opts); -extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_ExecuteAndInject(const wchar_t *app, const wchar_t *workingDir, const wchar_t *cmdLine, - const wchar_t *logfile, const CaptureOptions *opts, bool32 waitForExit); -typedef uint32_t (RENDERDOC_CC *pRENDERDOC_ExecuteAndInject)(const wchar_t *app, const wchar_t *workingDir, const wchar_t *cmdLine, - const wchar_t *logfile, const CaptureOptions *opts, bool32 waitForExit); +extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_ExecuteAndInject(const char *app, const char *workingDir, const char *cmdLine, + const char *logfile, const CaptureOptions *opts, bool32 waitForExit); +typedef uint32_t (RENDERDOC_CC *pRENDERDOC_ExecuteAndInject)(const char *app, const char *workingDir, const char *cmdLine, + const char *logfile, const CaptureOptions *opts, bool32 waitForExit); -extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const CaptureOptions *opts, bool32 waitForExit); -typedef uint32_t (RENDERDOC_CC *pRENDERDOC_InjectIntoProcess)(uint32_t pid, const wchar_t *logfile, const CaptureOptions *opts, bool32 waitForExit); +extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_InjectIntoProcess(uint32_t pid, const char *logfile, const CaptureOptions *opts, bool32 waitForExit); +typedef uint32_t (RENDERDOC_CC *pRENDERDOC_InjectIntoProcess)(uint32_t pid, const char *logfile, const CaptureOptions *opts, bool32 waitForExit); ////////////////////////////////////////////////////////////////////////// // Miscellaneous! @@ -264,11 +264,11 @@ typedef uint32_t (RENDERDOC_CC *pRENDERDOC_InjectIntoProcess)(uint32_t pid, cons extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_TriggerExceptionHandler(void *exceptionPtrs, bool32 crashed); typedef void (RENDERDOC_CC *pRENDERDOC_TriggerExceptionHandler)(void *exceptionPtrs, bool32 crashed); -extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_LogText(const wchar_t *text); -typedef void (RENDERDOC_CC *pRENDERDOC_LogText)(const wchar_t *text); +extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_LogText(const char *text); +typedef void (RENDERDOC_CC *pRENDERDOC_LogText)(const char *text); -extern "C" RENDERDOC_API bool32 RENDERDOC_CC RENDERDOC_GetThumbnail(const wchar_t *filename, byte *buf, uint32_t &len); -typedef bool32 (RENDERDOC_CC *pRENDERDOC_GetThumbnail)(const wchar_t *filename, byte *buf, uint32_t &len); +extern "C" RENDERDOC_API bool32 RENDERDOC_CC RENDERDOC_GetThumbnail(const char *filename, byte *buf, uint32_t &len); +typedef bool32 (RENDERDOC_CC *pRENDERDOC_GetThumbnail)(const char *filename, byte *buf, uint32_t &len); extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_FreeArrayMem(const void *mem); typedef void (RENDERDOC_CC *pRENDERDOC_FreeArrayMem)(const void *mem); diff --git a/renderdoc/common/common.cpp b/renderdoc/common/common.cpp index 28bb2a4be..10d1542a1 100644 --- a/renderdoc/common/common.cpp +++ b/renderdoc/common/common.cpp @@ -30,7 +30,7 @@ #include "os/os_specific.h" #include "common/threading.h" -#include "string_utils.h" +#include "serialise/string_utils.h" #include using std::string; @@ -81,25 +81,9 @@ float SRGB8_lookuptable[256] = { 0.938686f, 0.947307f, 0.955974f, 0.964686f, 0.973445f, 0.982251f, 0.991102f, 1.000000f, }; -template<> const wchar_t* pathSeparator() { return L"\\/"; } -template<> const char* pathSeparator() { return "\\/"; } - -template<> const wchar_t* curdir() { return L"."; } -template<> const char* curdir() { return "."; } - -std::wstring widen(std::string str) -{ - return std::wstring(str.begin(), str.end()); -} - -std::string narrow(std::wstring str) -{ - return std::string(str.begin(), str.end()); -} - void rdcassert(const char *condition, const char *file, unsigned int line, const char *func) { - rdclog_int(RDCLog_Error, file, line, "Assertion failed: '%hs'", condition, file, line); + rdclog_int(RDCLog_Error, file, line, "Assertion failed: '%s'", condition, file, line); } #if 0 @@ -239,20 +223,20 @@ bool FindDiffRange(void *a, void *b, size_t bufSize, size_t &diffStart, size_t & return diffStart < bufSize; } -static wstring &logfile() +static string &logfile() { - static wstring fn; + static string fn; return fn; } -const wchar_t *rdclog_getfilename() +const char *rdclog_getfilename() { return logfile().c_str(); } -void rdclog_filename(const wchar_t *filename) +void rdclog_filename(const char *filename) { - logfile() = L""; + logfile() = ""; if(filename && filename[0]) logfile() = filename; } @@ -260,7 +244,7 @@ void rdclog_filename(const wchar_t *filename) void rdclog_delete() { if(!logfile().empty()) - FileIO::UnlinkFileW(logfile().c_str()); + FileIO::Delete(logfile().c_str()); } void rdclog_flush() @@ -285,7 +269,7 @@ void rdclogprint_int(const char *str) #if defined(OUTPUT_LOG_TO_DISK) if(!logfile().empty()) { - FILE *f = FileIO::fopen(logfile().c_str(), L"a"); + FILE *f = FileIO::fopen(logfile().c_str(), "a"); if(f) { // strlen used as byte length - str is UTF-8 so this is NOT number of characters diff --git a/renderdoc/common/common.h b/renderdoc/common/common.h index 0b8dfd5f5..4f8f29d67 100644 --- a/renderdoc/common/common.h +++ b/renderdoc/common/common.h @@ -61,9 +61,6 @@ #define CONCAT2(a, b) a##b #define CONCAT(a, b) CONCAT2(a, b) -#define WIDEN2(x) L ## x -#define WIDEN(x) WIDEN2(x) - #include "os/os_specific.h" #define RDCEraseMem(a, b) memset(a, 0, b) @@ -139,8 +136,8 @@ void rdclog_int(LogType type, const char *file, unsigned int line, const char *f #define rdclog(type, ...) rdclog_int(type, __FILE__, __LINE__, __VA_ARGS__) -const wchar_t *rdclog_getfilename(); -void rdclog_filename(const wchar_t *filename); +const char *rdclog_getfilename(); +void rdclog_filename(const char *filename); void rdclog_delete(); #define RDCLOGFILE(fn) rdclog_filename(fn) diff --git a/renderdoc/common/timing.h b/renderdoc/common/timing.h index fa479b505..3e482f74a 100644 --- a/renderdoc/common/timing.h +++ b/renderdoc/common/timing.h @@ -79,7 +79,7 @@ class ScopedTimer ~ScopedTimer() { - rdclog_int(RDCLog_Comment, m_File, m_Line, "Timer %hs - %.3lf ms", m_Message.c_str(), m_Timer.GetMilliseconds()); + rdclog_int(RDCLog_Comment, m_File, m_Line, "Timer %s - %.3lf ms", m_Message.c_str(), m_Timer.GetMilliseconds()); } private: const char *m_File; diff --git a/renderdoc/common/wrapped_pool.h b/renderdoc/common/wrapped_pool.h index a8e9cbd64..0be9ab0d2 100644 --- a/renderdoc/common/wrapped_pool.h +++ b/renderdoc/common/wrapped_pool.h @@ -63,7 +63,7 @@ class WrappingPool // warn when we need to allocate an additional pool #ifdef INCLUDE_TYPE_NAMES - RDCWARN("Ran out of free slots in %hs pool!", GetTypeName::Name()); + RDCWARN("Ran out of free slots in %s pool!", GetTypeName::Name()); #else RDCWARN("Ran out of free slots in pool 0x%p!", &m_ImmediatePool.items[0]); #endif @@ -72,7 +72,7 @@ class WrappingPool m_AdditionalPools.push_back(new ItemPool()); #ifdef INCLUDE_TYPE_NAMES - RDCDEBUG("WrappingPool[%d]<%hs>: %p -> %p", (uint32_t)m_AdditionalPools.size() - 1, GetTypeName::Name(), + RDCDEBUG("WrappingPool[%d]<%s>: %p -> %p", (uint32_t)m_AdditionalPools.size() - 1, GetTypeName::Name(), &m_AdditionalPools.back()->items[0], &m_AdditionalPools.back()->items[AllocCount-1]); #endif @@ -124,7 +124,7 @@ class WrappingPool // this is an error - deleting an object that we don't recognise #ifdef INCLUDE_TYPE_NAMES - RDCERR("Resource being deleted through wrong pool - 0x%p not a member of %hs", p, GetTypeName::Name()); + RDCERR("Resource being deleted through wrong pool - 0x%p not a member of %s", p, GetTypeName::Name()); #else RDCERR("Resource being deleted through wrong pool - 0x%p not a member of 0x%p", p, &m_ImmediatePool.items[0])); #endif @@ -134,7 +134,7 @@ class WrappingPool WrappingPool() { #ifdef INCLUDE_TYPE_NAMES - RDCDEBUG("WrappingPool<%hs>: %p -> %p", GetTypeName::Name(), &m_ImmediatePool.items[0], &m_ImmediatePool.items[AllocCount-1]); + RDCDEBUG("WrappingPool<%s>: %p -> %p", GetTypeName::Name(), &m_ImmediatePool.items[0], &m_ImmediatePool.items[AllocCount-1]); #endif RDCCOMPILE_ASSERT(PoolCount*AllocByteSize <= MaxPoolByteSize, "Pool is bigger than max pool size cap"); diff --git a/renderdoc/core/core.cpp b/renderdoc/core/core.cpp index cdc2f909a..9ea8aa5f9 100644 --- a/renderdoc/core/core.cpp +++ b/renderdoc/core/core.cpp @@ -24,7 +24,7 @@ #include "core/core.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "serialise/serialiser.h" #include "replay/replay_driver.h" @@ -139,7 +139,7 @@ void RenderDoc::UnloadCrashHandler() RenderDoc::RenderDoc() { - m_LogFile = L""; + m_LogFile = ""; m_MarkerIndentLevel = 0; m_CurrentDriver = RDC_Unknown; @@ -203,40 +203,40 @@ void RenderDoc::Initialise() // set default capture log - useful for when hooks aren't setup // through the UI (and a log file isn't set manually) { - wstring capture_filename, logging_filename; + string capture_filename, logging_filename; - const wchar_t *base = L"RenderDoc_app"; + const char *base = "RenderDoc_app"; if(IsReplayApp()) - base = L"RenderDoc_replay"; + base = "RenderDoc_replay"; FileIO::GetDefaultFiles(base, capture_filename, logging_filename, m_Target); if(m_LogFile.empty()) SetLogFile(capture_filename.c_str()); - wstring existingLog = RDCGETLOGFILE(); - FileIO::CopyFileW(existingLog.c_str(), logging_filename.c_str(), true); + string existingLog = RDCGETLOGFILE(); + FileIO::Copy(existingLog.c_str(), logging_filename.c_str(), true); RDCLOGFILE(logging_filename.c_str()); } if(IsReplayApp()) - RDCLOG("RenderDoc v%hs (%hs) loaded in replay application", RENDERDOC_VERSION_STRING, GIT_COMMIT_HASH); + RDCLOG("RenderDoc v%s (%s) loaded in replay application", RENDERDOC_VERSION_STRING, GIT_COMMIT_HASH); else - RDCLOG("RenderDoc v%hs (%hs) capturing application", RENDERDOC_VERSION_STRING, GIT_COMMIT_HASH); + RDCLOG("RenderDoc v%s (%s) capturing application", RENDERDOC_VERSION_STRING, GIT_COMMIT_HASH); Keyboard::Init(); m_ExHandler = NULL; { - wstring curFile; + string curFile; FileIO::GetExecutableFilename(curFile); - wstring f = strlower(curFile); + string f = strlower(curFile); // only create crash handler when we're not in renderdoccmd.exe (to prevent infinite loop as // the crash handler itself launches renderdoccmd.exe) - if(f.find(L"renderdoccmd.exe") == wstring::npos) + if(f.find("renderdoccmd.exe") == string::npos) { RecreateCrashHandler(); } @@ -254,12 +254,12 @@ RenderDoc::~RenderDoc() { if(m_Captures[i].retrieved) { - RDCLOG("Removing remotely retrieved capture %ls", m_Captures[i].path.c_str()); - FileIO::UnlinkFileW(m_Captures[i].path.c_str()); + RDCLOG("Removing remotely retrieved capture %s", m_Captures[i].path.c_str()); + FileIO::Delete(m_Captures[i].path.c_str()); } else { - RDCLOG("'Leaking' unretrieved capture %ls", m_Captures[i].path.c_str()); + RDCLOG("'Leaking' unretrieved capture %s", m_Captures[i].path.c_str()); } } @@ -368,7 +368,7 @@ Serialiser *RenderDoc::OpenWriteSerialiser(uint32_t frameNum, RDCInitParams *par const bool debugSerialiser = true; #endif - m_CurrentLogFile = StringFormat::WFmt(L"%ls_frame%u.rdc", m_LogFile.c_str(), frameNum); + m_CurrentLogFile = StringFormat::Fmt("%s_frame%u.rdc", m_LogFile.c_str(), frameNum); Serialiser *fileSerialiser = new Serialiser(m_CurrentLogFile.c_str(), Serialiser::WRITING, debugSerialiser); @@ -414,13 +414,13 @@ Serialiser *RenderDoc::OpenWriteSerialiser(uint32_t frameNum, RDCInitParams *par return fileSerialiser; } -ReplayCreateStatus RenderDoc::FillInitParams(const wchar_t *logFile, RDCDriver &driverType, wstring &driverName, RDCInitParams *params) +ReplayCreateStatus RenderDoc::FillInitParams(const char *logFile, RDCDriver &driverType, string &driverName, RDCInitParams *params) { Serialiser ser(logFile, Serialiser::READING, true); if(ser.HasError()) { - FILE *f = FileIO::fopen(logFile, L"rb"); + FILE *f = FileIO::fopen(logFile, "rb"); if(f) { int x = 0, y = 0, comp = 0; @@ -436,12 +436,12 @@ ReplayCreateStatus RenderDoc::FillInitParams(const wchar_t *logFile, RDCDriver & if(ret == 1 && x > 0 && y > 0 && comp > 0) { driverType = RDC_Image; - driverName = L"Image"; + driverName = "Image"; return eReplayCreate_Success; } } - RDCERR("Couldn't open '%ls'", logFile); + RDCERR("Couldn't open '%s'", logFile); switch(ser.ErrorCode()) { @@ -461,7 +461,7 @@ ReplayCreateStatus RenderDoc::FillInitParams(const wchar_t *logFile, RDCDriver & if(chunkType != THUMBNAIL_DATA) { - RDCERR("Malformed logfile '%ls', first chunk isn't thumbnail data", logFile); + RDCERR("Malformed logfile '%s', first chunk isn't thumbnail data", logFile); return eReplayCreate_FileCorrupted; } @@ -475,7 +475,7 @@ ReplayCreateStatus RenderDoc::FillInitParams(const wchar_t *logFile, RDCDriver & if(chunkType != CREATE_PARAMS) { - RDCERR("Malformed logfile '%ls', second chunk isn't create params", logFile); + RDCERR("Malformed logfile '%s', second chunk isn't create params", logFile); return eReplayCreate_FileCorrupted; } @@ -486,7 +486,7 @@ ReplayCreateStatus RenderDoc::FillInitParams(const wchar_t *logFile, RDCDriver & if(chunkType != DRIVER_INIT_PARAMS) { - RDCERR("Malformed logfile '%ls', chunk doesn't contain driver init params", logFile); + RDCERR("Malformed logfile '%s', chunk doesn't contain driver init params", logFile); return eReplayCreate_FileCorrupted; } @@ -515,29 +515,29 @@ bool RenderDoc::HasRemoteDriver(RDCDriver driver) const return HasReplayDriver(driver); } -void RenderDoc::RegisterReplayProvider(RDCDriver driver, const wchar_t *name, ReplayDriverProvider provider) +void RenderDoc::RegisterReplayProvider(RDCDriver driver, const char *name, ReplayDriverProvider provider) { if(HasReplayDriver(driver)) - RDCERR("Re-registering provider for %ls (was %ls)", name, m_DriverNames[driver].c_str()); + RDCERR("Re-registering provider for %s (was %s)", name, m_DriverNames[driver].c_str()); if(HasRemoteDriver(driver)) - RDCWARN("Registering local provider %ls for existing remote provider %ls", name, m_DriverNames[driver].c_str()); + RDCWARN("Registering local provider %s for existing remote provider %s", name, m_DriverNames[driver].c_str()); m_DriverNames[driver] = name; m_ReplayDriverProviders[driver] = provider; } -void RenderDoc::RegisterRemoteProvider(RDCDriver driver, const wchar_t *name, RemoteDriverProvider provider) +void RenderDoc::RegisterRemoteProvider(RDCDriver driver, const char *name, RemoteDriverProvider provider) { if(HasRemoteDriver(driver)) - RDCERR("Re-registering provider for %ls (was %ls)", name, m_DriverNames[driver].c_str()); + RDCERR("Re-registering provider for %s (was %s)", name, m_DriverNames[driver].c_str()); if(HasReplayDriver(driver)) - RDCWARN("Registering remote provider %ls for existing local provider %ls", name, m_DriverNames[driver].c_str()); + RDCWARN("Registering remote provider %s for existing local provider %s", name, m_DriverNames[driver].c_str()); m_DriverNames[driver] = name; m_RemoteDriverProviders[driver] = provider; } -ReplayCreateStatus RenderDoc::CreateReplayDriver(RDCDriver driverType, const wchar_t *logfile, IReplayDriver **driver) +ReplayCreateStatus RenderDoc::CreateReplayDriver(RDCDriver driverType, const char *logfile, IReplayDriver **driver) { if(driver == NULL) return eReplayCreate_InternalError; @@ -553,7 +553,7 @@ ReplayCreateStatus RenderDoc::CreateReplayDriver(RDCDriver driverType, const wch return eReplayCreate_APIUnsupported; } -ReplayCreateStatus RenderDoc::CreateRemoteDriver(RDCDriver driverType, const wchar_t *logfile, IRemoteDriver **driver) +ReplayCreateStatus RenderDoc::CreateRemoteDriver(RDCDriver driverType, const char *logfile, IRemoteDriver **driver) { if(driver == NULL) return eReplayCreate_InternalError; @@ -588,23 +588,23 @@ void RenderDoc::SetCurrentDriver(RDCDriver driver) m_CurrentDriverName = m_DriverNames[driver]; } -void RenderDoc::GetCurrentDriver(RDCDriver &driver, wstring &name) +void RenderDoc::GetCurrentDriver(RDCDriver &driver, string &name) { driver = m_CurrentDriver; name = m_CurrentDriverName; } -map RenderDoc::GetReplayDrivers() +map RenderDoc::GetReplayDrivers() { - map ret; + map ret; for(auto it=m_ReplayDriverProviders.begin(); it != m_ReplayDriverProviders.end(); ++it) ret[it->first] = m_DriverNames[it->first]; return ret; } -map RenderDoc::GetRemoteDrivers() +map RenderDoc::GetRemoteDrivers() { - map ret; + map ret; for(auto it=m_RemoteDriverProviders.begin(); it != m_RemoteDriverProviders.end(); ++it) ret[it->first] = m_DriverNames[it->first]; @@ -621,11 +621,11 @@ void RenderDoc::SetCaptureOptions(const CaptureOptions *opts) m_Options = *opts; } -void RenderDoc::SetLogFile(const wchar_t *logFile) +void RenderDoc::SetLogFile(const char *logFile) { m_LogFile = logFile; - if(m_LogFile.substr(m_LogFile.length()-4) == L".rdc") + if(m_LogFile.substr(m_LogFile.length()-4) == ".rdc") m_LogFile = m_LogFile.substr(0, m_LogFile.length()-4); } @@ -653,7 +653,7 @@ void RenderDoc::SetProgress(LoadProgressSection section, float delta) void RenderDoc::SuccessfullyWrittenLog() { - RDCLOG("Written to disk: %ls", m_CurrentLogFile.c_str()); + RDCLOG("Written to disk: %s", m_CurrentLogFile.c_str()); CaptureData cap(m_CurrentLogFile, Timing::GetUnixTimestamp()); { diff --git a/renderdoc/core/core.h b/renderdoc/core/core.h index eb37ba9bc..563197be0 100644 --- a/renderdoc/core/core.h +++ b/renderdoc/core/core.h @@ -32,7 +32,7 @@ #include #include #include -using std::wstring; +using std::string; using std::vector; using std::map; using std::pair; @@ -130,9 +130,9 @@ struct RDCInitParams struct CaptureData { - CaptureData(wstring p, uint64_t t) : path(p), timestamp(t), retrieved(false) {} + CaptureData(string p, uint64_t t) : path(p), timestamp(t), retrieved(false) {} - wstring path; + string path; uint64_t timestamp; bool retrieved; }; @@ -147,8 +147,8 @@ enum LoadProgressSection class IRemoteDriver; class IReplayDriver; -typedef ReplayCreateStatus (*RemoteDriverProvider)(const wchar_t *logfile, IRemoteDriver **driver); -typedef ReplayCreateStatus (*ReplayDriverProvider)(const wchar_t *logfile, IReplayDriver **driver); +typedef ReplayCreateStatus (*RemoteDriverProvider)(const char *logfile, IRemoteDriver **driver); +typedef ReplayCreateStatus (*ReplayDriverProvider)(const char *logfile, IReplayDriver **driver); // this class mediates everything and owns any 'global' resources such as the crash handler. // @@ -163,10 +163,10 @@ class RenderDoc void SetProgress(LoadProgressSection section, float delta); // set from outside of the device creation interface - void SetLogFile(const wchar_t *logFile); - const wchar_t *GetLogFile() const { return m_LogFile.c_str(); } + void SetLogFile(const char *logFile); + const char *GetLogFile() const { return m_LogFile.c_str(); } - const wchar_t *GetCurrentTarget() const { return m_Target.c_str(); } + const char *GetCurrentTarget() const { return m_Target.c_str(); } void Initialise(); @@ -211,22 +211,22 @@ class RenderDoc } } - ReplayCreateStatus FillInitParams(const wchar_t *logfile, RDCDriver &driverType, wstring &driverName, RDCInitParams *params); + ReplayCreateStatus FillInitParams(const char *logfile, RDCDriver &driverType, string &driverName, RDCInitParams *params); - void RegisterReplayProvider(RDCDriver driver, const wchar_t *name, ReplayDriverProvider provider); - void RegisterRemoteProvider(RDCDriver driver, const wchar_t *name, RemoteDriverProvider provider); + void RegisterReplayProvider(RDCDriver driver, const char *name, ReplayDriverProvider provider); + void RegisterRemoteProvider(RDCDriver driver, const char *name, RemoteDriverProvider provider); - ReplayCreateStatus CreateReplayDriver(RDCDriver driverType, const wchar_t *logfile, IReplayDriver **driver); - ReplayCreateStatus CreateRemoteDriver(RDCDriver driverType, const wchar_t *logfile, IRemoteDriver **driver); + ReplayCreateStatus CreateReplayDriver(RDCDriver driverType, const char *logfile, IReplayDriver **driver); + ReplayCreateStatus CreateRemoteDriver(RDCDriver driverType, const char *logfile, IRemoteDriver **driver); - map GetReplayDrivers(); - map GetRemoteDrivers(); + map GetReplayDrivers(); + map GetRemoteDrivers(); bool HasReplayDriver(RDCDriver driver) const; bool HasRemoteDriver(RDCDriver driver) const; void SetCurrentDriver(RDCDriver driver); - void GetCurrentDriver(RDCDriver &driver, wstring &name); + void GetCurrentDriver(RDCDriver &driver, string &name); uint32_t GetRemoteAccessIdent() const { return m_RemoteIdent; } @@ -279,9 +279,9 @@ class RenderDoc vector m_FocusKeys; vector m_CaptureKeys; - wstring m_Target; - wstring m_LogFile; - wstring m_CurrentLogFile; + string m_Target; + string m_LogFile; + string m_CurrentLogFile; CaptureOptions m_Options; uint32_t m_Overlay; @@ -292,7 +292,7 @@ class RenderDoc int32_t m_MarkerIndentLevel; RDCDriver m_CurrentDriver; - wstring m_CurrentDriverName; + string m_CurrentDriverName; float *m_ProgressPtr; @@ -302,7 +302,7 @@ class RenderDoc Threading::CriticalSection m_ChildLock; vector< pair > m_Children; - map m_DriverNames; + map m_DriverNames; map m_ReplayDriverProviders; map m_RemoteDriverProviders; @@ -318,7 +318,7 @@ class RenderDoc volatile bool m_RemoteServerThreadShutdown; volatile bool m_RemoteClientThreadShutdown; Threading::CriticalSection m_SingleClientLock; - wstring m_SingleClientName; + string m_SingleClientName; static void RemoteAccessServerThread(void *s); static void RemoteAccessClientThread(void *s); @@ -328,6 +328,6 @@ class RenderDoc struct DriverRegistration { - DriverRegistration(RDCDriver driver, const wchar_t *name, ReplayDriverProvider provider) { RenderDoc::Inst().RegisterReplayProvider(driver, name, provider); } - DriverRegistration(RDCDriver driver, const wchar_t *name, RemoteDriverProvider provider) { RenderDoc::Inst().RegisterRemoteProvider(driver, name, provider); } + DriverRegistration(RDCDriver driver, const char *name, ReplayDriverProvider provider) { RenderDoc::Inst().RegisterReplayProvider(driver, name, provider); } + DriverRegistration(RDCDriver driver, const char *name, RemoteDriverProvider provider) { RenderDoc::Inst().RegisterRemoteProvider(driver, name, provider); } }; diff --git a/renderdoc/core/crash_handler.h b/renderdoc/core/crash_handler.h index 721605fe4..12ca86ea8 100644 --- a/renderdoc/core/crash_handler.h +++ b/renderdoc/core/crash_handler.h @@ -48,7 +48,7 @@ class CrashHandler : public ICrashHandler /////////////////// - wchar_t tempPath[MAX_PATH] = {0}; + char tempPath[MAX_PATH] = {0}; GetTempPathW(MAX_PATH-1, tempPath); wstring dumpFolder = tempPath; @@ -66,12 +66,12 @@ class CrashHandler : public ICrashHandler HANDLE waitEvent = CreateEventA(NULL, TRUE, FALSE, "RENDERDOC_CRASHHANDLE"); - wchar_t radpath[MAX_PATH] = {0}; + char radpath[MAX_PATH] = {0}; GetModuleFileNameW(GetModuleHandleA("renderdoc.dll"), radpath, MAX_PATH-1); size_t len = wcslen(radpath); - wchar_t *slash = wcsrchr(radpath, L'\\'); + char *slash = wcsrchr(radpath, L'\\'); if(slash) { @@ -94,7 +94,7 @@ class CrashHandler : public ICrashHandler cmdline += radpath; cmdline += L"/renderdoccmd.exe\" --crashhandle"; - wchar_t *paramsAlloc = new wchar_t[512]; + char *paramsAlloc = new char[512]; wcscpy_s(paramsAlloc, 511, cmdline.c_str()); @@ -106,12 +106,17 @@ class CrashHandler : public ICrashHandler } static google_breakpad::CustomInfoEntry breakpadCustomInfo[] = { - google_breakpad::CustomInfoEntry(L"version", RENDERDOC_VERSION_STRING_W), - google_breakpad::CustomInfoEntry(L"logpath", RDCGETLOGFILE()), - google_breakpad::CustomInfoEntry(L"gitcommit", WIDEN(GIT_COMMIT_HASH)), + google_breakpad::CustomInfoEntry(L"version", L""), + google_breakpad::CustomInfoEntry(L"logpath", L""), + google_breakpad::CustomInfoEntry(L"gitcommit", L""), }; - breakpadCustomInfo[1].set_value(RDCGETLOGFILE()); + wstring wideStr = StringFormat::UTF82Wide(string(RENDERDOC_VERSION_STRING)); + breakpadCustomInfo[0].set_value(wideStr.c_str()); + wideStr = StringFormat::UTF82Wide(string(RDCGETLOGFILE())); + breakpadCustomInfo[1].set_value(wideStr.c_str()); + wideStr = StringFormat::UTF82Wide(string(GIT_COMMIT_HASH)); + breakpadCustomInfo[2].set_value(wideStr.c_str()); google_breakpad::CustomClientInfo custom = { &breakpadCustomInfo[0], ARRAY_COUNT(breakpadCustomInfo) }; diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index 628d3554a..8d7153579 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -32,7 +32,7 @@ class ImageViewer : public IReplayDriver { public: - ImageViewer(IReplayDriver *proxy, const wchar_t *filename, ResourceId texID) + ImageViewer(IReplayDriver *proxy, const char *filename, ResourceId texID) : m_Proxy(proxy) { if(m_Proxy == NULL) RDCERR("Unexpectedly NULL proxy at creation of ImageViewer"); @@ -154,9 +154,9 @@ class ImageViewer : public IReplayDriver IReplayDriver *m_Proxy; }; -ReplayCreateStatus IMG_CreateReplayDevice(const wchar_t *logfile, IReplayDriver **driver) +ReplayCreateStatus IMG_CreateReplayDevice(const char *logfile, IReplayDriver **driver) { - FILE *f = FileIO::fopen(logfile, L"rb"); + FILE *f = FileIO::fopen(logfile, "rb"); if(!f) return eReplayCreate_FileIOFailed; @@ -296,4 +296,4 @@ ReplayCreateStatus IMG_CreateReplayDevice(const wchar_t *logfile, IReplayDriver return eReplayCreate_Success; } -static DriverRegistration IMGDriverRegistration(RDC_Image, L"Image", &IMG_CreateReplayDevice); +static DriverRegistration IMGDriverRegistration(RDC_Image, "Image", &IMG_CreateReplayDevice); diff --git a/renderdoc/core/remote_access.cpp b/renderdoc/core/remote_access.cpp index 14377b1a2..286cf6b34 100644 --- a/renderdoc/core/remote_access.cpp +++ b/renderdoc/core/remote_access.cpp @@ -49,15 +49,15 @@ void RenderDoc::RemoteAccessClientThread(void *s) Network::Socket *client = (Network::Socket *)s; - Serialiser ser(L"", Serialiser::WRITING, false); + Serialiser ser("", Serialiser::WRITING, false); - wstring api = L""; + string api = ""; RDCDriver driver; RenderDoc::Inst().GetCurrentDriver(driver, api); ser.Rewind(); - wstring target = RenderDoc::Inst().GetCurrentTarget(); + string target = RenderDoc::Inst().GetCurrentTarget(); ser.Serialise("", target); ser.Serialise("", api); uint32_t mypid = Process::GetCurrentPID(); @@ -69,7 +69,7 @@ void RenderDoc::RemoteAccessClientThread(void *s) { SCOPED_LOCK(RenderDoc::Inst().m_SingleClientLock); - RenderDoc::Inst().m_SingleClientName = L""; + RenderDoc::Inst().m_SingleClientName = ""; } Threading::ReleaseModuleExitThread(); @@ -98,7 +98,7 @@ void RenderDoc::RemoteAccessClientThread(void *s) PacketType packetType = ePacket_Noop; - wstring curapi; + string curapi; RenderDoc::Inst().GetCurrentDriver(driver, curapi); vector caps = RenderDoc::Inst().GetCaptures(); @@ -218,7 +218,7 @@ void RenderDoc::RemoteAccessClientThread(void *s) // give up our connection { SCOPED_LOCK(RenderDoc::Inst().m_SingleClientLock); - RenderDoc::Inst().m_SingleClientName = L""; + RenderDoc::Inst().m_SingleClientName = ""; } Threading::ReleaseModuleExitThread(); @@ -230,7 +230,7 @@ void RenderDoc::RemoteAccessServerThread(void *s) Network::Socket *sock = (Network::Socket *)s; - RenderDoc::Inst().m_SingleClientName = L""; + RenderDoc::Inst().m_SingleClientName = ""; Threading::ThreadHandle clientThread = 0; @@ -256,8 +256,8 @@ void RenderDoc::RemoteAccessServerThread(void *s) continue; } - wstring existingClient; - wstring newClient; + string existingClient; + string newClient; bool kick = false; // receive handshake from client and get its name @@ -304,7 +304,7 @@ void RenderDoc::RemoteAccessServerThread(void *s) Threading::CloseThread(clientThread); clientThread = 0; RenderDoc::Inst().m_RemoteClientThreadShutdown = false; - existingClient = L""; + existingClient = ""; } if(existingClient.empty()) @@ -323,13 +323,13 @@ void RenderDoc::RemoteAccessServerThread(void *s) { // if we've been asked to kick the existing connection off // reject this connection and tell them who is busy - Serialiser ser(L"", Serialiser::WRITING, false); + Serialiser ser("", Serialiser::WRITING, false); - wstring api = L""; + string api = ""; RDCDriver driver; RenderDoc::Inst().GetCurrentDriver(driver, api); - wstring target = RenderDoc::Inst().GetCurrentTarget(); + string target = RenderDoc::Inst().GetCurrentTarget(); ser.Serialise("", target); ser.Serialise("", api); @@ -353,14 +353,14 @@ void RenderDoc::RemoteAccessServerThread(void *s) struct RemoteAccess { public: - RemoteAccess(Network::Socket *sock, wstring clientName, bool forceConnection, bool localhost) + RemoteAccess(Network::Socket *sock, string clientName, bool forceConnection, bool localhost) : m_Socket(sock), m_Local(localhost) { PacketType type; vector payload; { - Serialiser ser(L"", Serialiser::WRITING, false); + Serialiser ser("", Serialiser::WRITING, false); ser.SerialiseString("", clientName); ser.Serialise("", forceConnection); @@ -383,7 +383,7 @@ struct RemoteAccess ser->Serialise("", m_API); ser->Serialise("", m_PID); - RDCLOG("Got remote handshake: %ls (%ls) [%u]", m_Target.c_str(), m_API.c_str(), m_PID); + RDCLOG("Got remote handshake: %s (%s) [%u]", m_Target.c_str(), m_API.c_str(), m_PID); } else if(type == ePacket_Busy) { @@ -391,7 +391,7 @@ struct RemoteAccess ser->Serialise("", m_API); ser->Serialise("", m_BusyClient); - RDCLOG("Got remote busy signal: %ls (%ls) owned by %ls", m_Target.c_str(), m_API.c_str(), m_BusyClient.c_str()); + RDCLOG("Got remote busy signal: %s (%s) owned by %s", m_Target.c_str(), m_API.c_str(), m_BusyClient.c_str()); } SAFE_DELETE(ser); @@ -405,12 +405,12 @@ struct RemoteAccess delete this; } - const wchar_t *GetTarget() + const char *GetTarget() { return m_Target.c_str(); } - const wchar_t *GetAPI() + const char *GetAPI() { return m_API.c_str(); } @@ -420,7 +420,7 @@ struct RemoteAccess return m_PID; } - const wchar_t *GetBusyClient() + const char *GetBusyClient() { return m_BusyClient.c_str(); } @@ -433,7 +433,7 @@ struct RemoteAccess void QueueCapture(uint32_t frameNumber) { - Serialiser ser(L"", Serialiser::WRITING, false); + Serialiser ser("", Serialiser::WRITING, false); ser.Serialise("", frameNumber); @@ -444,9 +444,9 @@ struct RemoteAccess } } - void CopyCapture(uint32_t remoteID, const wchar_t *localpath) + void CopyCapture(uint32_t remoteID, const char *localpath) { - Serialiser ser(L"", Serialiser::WRITING, false); + Serialiser ser("", Serialiser::WRITING, false); ser.Serialise("", remoteID); @@ -507,14 +507,14 @@ struct RemoteAccess } else if(type == ePacket_Busy) { - wstring existingClient; + string existingClient; ser->Serialise("", existingClient); SAFE_DELETE(ser); SAFE_DELETE(m_Socket); - RDCLOG("Got busy signal: '%ls", existingClient.c_str()); + RDCLOG("Got busy signal: '%s", existingClient.c_str()); msg->Type = eRemoteMsg_Busy; msg->Busy.ClientName = existingClient; return; @@ -564,12 +564,12 @@ struct RemoteAccess ser->Serialise("", msg->NewCapture.ID); ser->Serialise("", msg->NewCapture.timestamp); - wstring path; + string path; ser->Serialise("", path); msg->NewCapture.localpath = path; if(!m_Local) - msg->NewCapture.localpath = L""; + msg->NewCapture.localpath = ""; uint32_t thumblen = 0; ser->Serialise("", thumblen); @@ -593,7 +593,7 @@ struct RemoteAccess ser->Serialise("", m_API); msg->RegisterAPI.APIName = m_API; - RDCLOG("Used API: %ls", m_API.c_str()); + RDCLOG("Used API: %s", m_API.c_str()); SAFE_DELETE(ser); @@ -609,10 +609,10 @@ struct RemoteAccess private: Network::Socket *m_Socket; bool m_Local; - wstring m_Target, m_API, m_BusyClient; + string m_Target, m_API, m_BusyClient; uint32_t m_PID; - map m_CaptureCopies; + map m_CaptureCopies; void GetPacket(PacketType &type, Serialiser *&ser) { @@ -624,33 +624,33 @@ struct RemoteAccess extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_Shutdown(RemoteAccess *access) { access->Shutdown(); } -extern "C" RENDERDOC_API const wchar_t* RENDERDOC_CC RemoteAccess_GetTarget(RemoteAccess *access) +extern "C" RENDERDOC_API const char* RENDERDOC_CC RemoteAccess_GetTarget(RemoteAccess *access) { return access->GetTarget(); } -extern "C" RENDERDOC_API const wchar_t* RENDERDOC_CC RemoteAccess_GetAPI(RemoteAccess *access) +extern "C" RENDERDOC_API const char* RENDERDOC_CC RemoteAccess_GetAPI(RemoteAccess *access) { return access->GetAPI(); } extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RemoteAccess_GetPID(RemoteAccess *access) { return access->GetPID(); } -extern "C" RENDERDOC_API const wchar_t* RENDERDOC_CC RemoteAccess_GetBusyClient(RemoteAccess *access) +extern "C" RENDERDOC_API const char* RENDERDOC_CC RemoteAccess_GetBusyClient(RemoteAccess *access) { return access->GetBusyClient(); } extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_TriggerCapture(RemoteAccess *access) { access->TriggerCapture(); } extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_QueueCapture(RemoteAccess *access, uint32_t frameNumber) { access->QueueCapture(frameNumber); } -extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_CopyCapture(RemoteAccess *access, uint32_t remoteID, const wchar_t *localpath) +extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_CopyCapture(RemoteAccess *access, uint32_t remoteID, const char *localpath) { access->CopyCapture(remoteID, localpath); } extern "C" RENDERDOC_API void RENDERDOC_CC RemoteAccess_ReceiveMessage(RemoteAccess *access, RemoteMessage *msg) { access->ReceiveMessage(msg); } extern "C" RENDERDOC_API -RemoteAccess * RENDERDOC_CC RENDERDOC_CreateRemoteAccessConnection(const wchar_t *host, uint32_t ident, const wchar_t *clientName, bool32 forceConnection) +RemoteAccess * RENDERDOC_CC RENDERDOC_CreateRemoteAccessConnection(const char *host, uint32_t ident, const char *clientName, bool32 forceConnection) { - wstring s = L"localhost"; - if(host != NULL && host[0] != L'\0') + string s = "localhost"; + if(host != NULL && host[0] != '\0') s = host; - bool localhost = (s == L"localhost"); + bool localhost = (s == "localhost"); Network::Socket *sock = Network::CreateClientSocket(s.c_str(), ident&0xffff, 3000); diff --git a/renderdoc/core/remote_replay.cpp b/renderdoc/core/remote_replay.cpp index 0383070fb..b948b5036 100644 --- a/renderdoc/core/remote_replay.cpp +++ b/renderdoc/core/remote_replay.cpp @@ -54,7 +54,7 @@ static void ProgressTicker(void *d) { ProgressLoopData *data = (ProgressLoopData *)d; - Serialiser ser(L"", Serialiser::WRITING, false); + Serialiser ser("", Serialiser::WRITING, false); while(!data->killsignal) { @@ -77,7 +77,7 @@ void RenderDoc::BecomeReplayHost(volatile bool32 &killReplay) if(sock == NULL) return; - Serialiser ser(L"", Serialiser::WRITING, false); + Serialiser ser("", Serialiser::WRITING, false); bool newlyReady = true; @@ -110,7 +110,7 @@ void RenderDoc::BecomeReplayHost(volatile bool32 &killReplay) RDCLOG("Connection received."); - map drivers = RenderDoc::Inst().GetRemoteDrivers(); + map drivers = RenderDoc::Inst().GetRemoteDrivers(); uint32_t count = (uint32_t)drivers.size(); ser.Serialise("", count); @@ -140,15 +140,15 @@ void RenderDoc::BecomeReplayHost(volatile bool32 &killReplay) continue; } - wstring cap_file; - wstring dummy, dummy2; - FileIO::GetDefaultFiles(L"remotecopy", cap_file, dummy, dummy2); + string cap_file; + string dummy, dummy2; + FileIO::GetDefaultFiles("remotecopy", cap_file, dummy, dummy2); Serialiser *ser = NULL; if(!RecvChunkedFile(client, ePacket_CopyCapture, cap_file.c_str(), ser, NULL)) { - FileIO::UnlinkFileW(cap_file.c_str()); + FileIO::Delete(cap_file.c_str()); RDCERR("Network error receiving file"); @@ -162,7 +162,7 @@ void RenderDoc::BecomeReplayHost(volatile bool32 &killReplay) SAFE_DELETE(ser); RDCDriver driverType = RDC_Unknown; - wstring driverName = L""; + string driverName = ""; RenderDoc::Inst().FillInitParams(cap_file.c_str(), driverType, driverName, NULL); if(RenderDoc::Inst().HasRemoteDriver(driverType)) @@ -182,7 +182,7 @@ void RenderDoc::BecomeReplayHost(volatile bool32 &killReplay) if(status != eReplayCreate_Success || driver == NULL) { - RDCERR("Failed to create remote driver for driver type %d name %ls", driverType, driverName.c_str()); + RDCERR("Failed to create remote driver for driver type %d name %s", driverType, driverName.c_str()); SAFE_DELETE(ser); SAFE_DELETE(client); continue; @@ -196,7 +196,7 @@ void RenderDoc::BecomeReplayHost(volatile bool32 &killReplay) Threading::JoinThread(ticker); Threading::CloseThread(ticker); - FileIO::UnlinkFileW(cap_file.c_str()); + FileIO::Delete(cap_file.c_str()); SendPacket(client, ePacket_LogReady); @@ -219,9 +219,9 @@ void RenderDoc::BecomeReplayHost(volatile bool32 &killReplay) } else { - RDCERR("File needs driver for %ls which isn't supported!", driverName.c_str()); + RDCERR("File needs driver for %s which isn't supported!", driverName.c_str()); - FileIO::UnlinkFileW(cap_file.c_str()); + FileIO::Delete(cap_file.c_str()); } SAFE_DELETE(client); @@ -234,7 +234,7 @@ struct RemoteRenderer RemoteRenderer(Network::Socket *sock) : m_Socket(sock) { - map m = RenderDoc::Inst().GetReplayDrivers(); + map m = RenderDoc::Inst().GetReplayDrivers(); m_Proxies.reserve(m.size()); for(auto it=m.begin(); it != m.end(); ++it) m_Proxies.push_back(*it); @@ -254,7 +254,7 @@ struct RemoteRenderer for(uint32_t i=0; i < count; i++) { RDCDriver driver = RDC_Unknown; - wstring name = L""; + string name = ""; ser->Serialise("", driver); ser->Serialise("", name); @@ -280,7 +280,7 @@ struct RemoteRenderer bool Connected() { return m_Socket != NULL && m_Socket->Connected(); } - bool LocalProxies(rdctype::array *out) + bool LocalProxies(rdctype::array *out) { if(out == NULL) return false; @@ -293,7 +293,7 @@ struct RemoteRenderer return true; } - bool RemoteSupportedReplays(rdctype::array *out) + bool RemoteSupportedReplays(rdctype::array *out) { if(out == NULL) return false; @@ -306,7 +306,7 @@ struct RemoteRenderer return true; } - ReplayCreateStatus CreateProxyRenderer(uint32_t proxyid, const wchar_t *logfile, float *progress, ReplayRenderer **rend) + ReplayCreateStatus CreateProxyRenderer(uint32_t proxyid, const char *logfile, float *progress, ReplayRenderer **rend) { if(rend == NULL) return eReplayCreate_InternalError; @@ -322,7 +322,7 @@ struct RemoteRenderer RDCDriver proxydrivertype = m_Proxies[proxyid].first; - Serialiser ser(L"", Serialiser::WRITING, false); + Serialiser ser("", Serialiser::WRITING, false); if(!SendChunkedFile(m_Socket, ePacket_CopyCapture, logfile, ser, progress)) { @@ -396,34 +396,34 @@ struct RemoteRenderer if(ser) *ser = new Serialiser(payload.size(), &payload[0], false); } - vector< pair > m_Proxies; - vector< pair > m_RemoteDrivers; + vector< pair > m_Proxies; + vector< pair > m_RemoteDrivers; }; extern "C" RENDERDOC_API void RENDERDOC_CC RemoteRenderer_Shutdown(RemoteRenderer *remote) { remote->Shutdown(); } -extern "C" RENDERDOC_API bool32 RENDERDOC_CC RemoteRenderer_LocalProxies(RemoteRenderer *remote, rdctype::array *out) +extern "C" RENDERDOC_API bool32 RENDERDOC_CC RemoteRenderer_LocalProxies(RemoteRenderer *remote, rdctype::array *out) { return remote->LocalProxies(out); } -extern "C" RENDERDOC_API bool32 RENDERDOC_CC RemoteRenderer_RemoteSupportedReplays(RemoteRenderer *remote, rdctype::array *out) +extern "C" RENDERDOC_API bool32 RENDERDOC_CC RemoteRenderer_RemoteSupportedReplays(RemoteRenderer *remote, rdctype::array *out) { return remote->RemoteSupportedReplays(out); } -extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC RemoteRenderer_CreateProxyRenderer(RemoteRenderer *remote, uint32_t proxyid, const wchar_t *logfile, float *progress, ReplayRenderer **rend) +extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC RemoteRenderer_CreateProxyRenderer(RemoteRenderer *remote, uint32_t proxyid, const char *logfile, float *progress, ReplayRenderer **rend) { return remote->CreateProxyRenderer(proxyid, logfile, progress, rend); } extern "C" RENDERDOC_API -ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateRemoteReplayConnection(const wchar_t *host, RemoteRenderer **rend) +ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateRemoteReplayConnection(const char *host, RemoteRenderer **rend) { if(rend == NULL) return eReplayCreate_InternalError; - wstring s = L"localhost"; - if(host != NULL && host[0] != L'\0') + string s = "localhost"; + if(host != NULL && host[0] != '\0') s = host; Network::Socket *sock = NULL; - if(s != L"-") + if(s != "-") { sock = Network::CreateClientSocket(s.c_str(), RenderDoc_ReplayNetworkPort, 3000); diff --git a/renderdoc/core/socket_helpers.h b/renderdoc/core/socket_helpers.h index 2020b6f94..68bc78e0f 100644 --- a/renderdoc/core/socket_helpers.h +++ b/renderdoc/core/socket_helpers.h @@ -106,7 +106,7 @@ bool SendPacket(Network::Socket *sock, PacketTypeEnum type, const Serialiser &se } template -bool RecvChunkedFile(Network::Socket *sock, PacketTypeEnum packetType, const wchar_t *logfile, Serialiser *&ser, float *progress) +bool RecvChunkedFile(Network::Socket *sock, PacketTypeEnum packetType, const char *logfile, Serialiser *&ser, float *progress) { if(sock == NULL) return false; @@ -134,7 +134,7 @@ bool RecvChunkedFile(Network::Socket *sock, PacketTypeEnum packetType, const wch ser->SetOffset(0); - FILE *f = FileIO::fopen(logfile, L"wb"); + FILE *f = FileIO::fopen(logfile, "wb"); if(f == NULL) { @@ -168,11 +168,11 @@ bool RecvChunkedFile(Network::Socket *sock, PacketTypeEnum packetType, const wch } template -bool SendChunkedFile(Network::Socket *sock, PacketTypeEnum type, const wchar_t *logfile, Serialiser &ser, float *progress) +bool SendChunkedFile(Network::Socket *sock, PacketTypeEnum type, const char *logfile, Serialiser &ser, float *progress) { if(sock == NULL) return false; - FILE *f = FileIO::fopen(logfile, L"rb"); + FILE *f = FileIO::fopen(logfile, "rb"); if(f == NULL) { diff --git a/renderdoc/data/version.h b/renderdoc/data/version.h index 77f90e174..96f7a678b 100644 --- a/renderdoc/data/version.h +++ b/renderdoc/data/version.h @@ -27,4 +27,3 @@ #define RENDERDOC_VERSION_MAJOR 0 #define RENDERDOC_VERSION_MINOR 22 #define RENDERDOC_VERSION_STRING STRINGIZE(RENDERDOC_VERSION_MAJOR) "." STRINGIZE(RENDERDOC_VERSION_MINOR) -#define RENDERDOC_VERSION_STRING_W WIDEN(STRINGIZE(RENDERDOC_VERSION_MAJOR)) L"." WIDEN(STRINGIZE(RENDERDOC_VERSION_MINOR)) diff --git a/renderdoc/driver/d3d11/d3d11_analyse.cpp b/renderdoc/driver/d3d11/d3d11_analyse.cpp index 464ed471c..b3bfad1fc 100644 --- a/renderdoc/driver/d3d11/d3d11_analyse.cpp +++ b/renderdoc/driver/d3d11/d3d11_analyse.cpp @@ -31,7 +31,7 @@ #include "maths/formatpacking.h" #include "data/resource.h" #include "serialise/serialiser.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "driver/d3d11/d3d11_resources.h" #include "driver/d3d11/d3d11_renderstate.h" @@ -288,9 +288,9 @@ void D3D11DebugManager::FillCBufferVariables(const string &prefix, size_t &offse for(size_t r=0; r < registers*elems; r++) { if(isArray && registers > 1) - StringFormat::snprintf(buf, 63, "[%d].%hs%d", r/registers, regName, r%registers); + StringFormat::snprintf(buf, 63, "[%d].%s%d", r/registers, regName, r%registers); else if(registers > 1) - StringFormat::snprintf(buf, 63, ".%hs%d", regName, r); + StringFormat::snprintf(buf, 63, ".%s%d", regName, r); else StringFormat::snprintf(buf, 63, "[%d]", r); @@ -380,7 +380,7 @@ ShaderDebug::State D3D11DebugManager::CreateShaderDebugState(ShaderDebugTrace &t ShaderVariable v; - v.name = StringFormat::Fmt("%hs (%hs)", buf, sig.semanticIdxName.elems); + v.name = StringFormat::Fmt("%s (%s)", buf, sig.semanticIdxName.elems); v.rows = 1; v.columns = sig.regChannelMask & 0x8 ? 4 : @@ -433,7 +433,7 @@ ShaderDebug::State D3D11DebugManager::CreateShaderDebugState(ShaderDebugTrace &t ShaderVariable v; - v.name = StringFormat::Fmt("%hs (%hs)", buf, sig.semanticIdxName.elems); + v.name = StringFormat::Fmt("%s (%s)", buf, sig.semanticIdxName.elems); v.rows = 1; v.columns = sig.regChannelMask & 0x8 ? 4 : @@ -467,7 +467,7 @@ ShaderDebug::State D3D11DebugManager::CreateShaderDebugState(ShaderDebugTrace &t //if(sig.systemValue == TYPE_OUTPUT_CONTROL_POINT) str = "oOutputControlPoint"; else { - RDCERR("Unhandled output: %hs (%d)", sig.semanticName, sig.systemValue); + RDCERR("Unhandled output: %s (%d)", sig.semanticName, sig.systemValue); continue; } @@ -496,7 +496,7 @@ ShaderDebug::State D3D11DebugManager::CreateShaderDebugState(ShaderDebugTrace &t trace.cbuffers[i] = vars; for(int32_t c=0; c < trace.cbuffers[i].count; c++) - trace.cbuffers[i][c].name = StringFormat::Fmt("cb%u[%u] (%hs)", (uint32_t)i, (uint32_t)c, trace.cbuffers[i][c].name.elems); + trace.cbuffers[i][c].name = StringFormat::Fmt("cb%u[%u] (%s)", (uint32_t)i, (uint32_t)c, trace.cbuffers[i][c].name.elems); } initialState.Init(); diff --git a/renderdoc/driver/d3d11/d3d11_common.cpp b/renderdoc/driver/d3d11/d3d11_common.cpp index 056a81653..ea5ce1cfc 100644 --- a/renderdoc/driver/d3d11/d3d11_common.cpp +++ b/renderdoc/driver/d3d11/d3d11_common.cpp @@ -25,7 +25,7 @@ #include "core/core.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "serialise/serialiser.h" @@ -273,7 +273,7 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt) ret.rawType = fmt; ret.special = false; - ret.strname = widen(ToStr::Get(fmt)).substr(12); // 12 == strlen("DXGI_FORMAT_") + ret.strname = ToStr::Get(fmt).substr(12); // 12 == strlen("DXGI_FORMAT_") ret.compCount = ret.compByteWidth = 0; ret.compType = eCompType_Float; diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index 8f9e40192..a6df3f615 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -29,7 +29,7 @@ #include "driver/d3d11/d3d11_manager.h" #include "driver/d3d11/d3d11_resources.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "replay/type_helpers.h" @@ -393,7 +393,7 @@ void WrappedID3D11DeviceContext::AttemptCapture() // successful. if(GetType() == D3D11_DEVICE_CONTEXT_DEFERRED) { - RDCDEBUG("Deferred Context %llu Attempting capture - initially %hs, %hs", GetResourceID(), m_SuccessfulCapture ? "successful" : "unsuccessful", m_EmptyCommandList ? "empty" : "non-empty"); + RDCDEBUG("Deferred Context %llu Attempting capture - initially %s, %s", GetResourceID(), m_SuccessfulCapture ? "successful" : "unsuccessful", m_EmptyCommandList ? "empty" : "non-empty"); m_SuccessfulCapture |= m_EmptyCommandList; @@ -402,7 +402,7 @@ void WrappedID3D11DeviceContext::AttemptCapture() else m_FailureReason = CaptureFailed_UncappedCmdlist; - RDCDEBUG("Deferred Context %llu Attempting capture - now %hs", GetResourceID(), m_SuccessfulCapture ? "successful" : "unsuccessful"); + RDCDEBUG("Deferred Context %llu Attempting capture - now %s", GetResourceID(), m_SuccessfulCapture ? "successful" : "unsuccessful"); } else { @@ -910,7 +910,7 @@ void WrappedID3D11DeviceContext::ProcessChunk(uint64_t offset, D3D11ChunkType ch AddEvent(CONTEXT_CAPTURE_FOOTER, "IDXGISwapChain::Present()"); FetchDrawcall draw; - draw.name = L"Present()"; + draw.name = "Present()"; draw.flags |= eDraw_Present; AddDrawcall(draw, true); @@ -1127,7 +1127,7 @@ void WrappedID3D11DeviceContext::AddEvent(D3D11ChunkType type, string descriptio apievent.fileOffset = m_CurChunkOffset; apievent.eventID = m_CurEventID; - apievent.eventDesc = widen(description); + apievent.eventDesc = description; Callstack::Stackwalk *stack = m_pSerialiser->GetLastCallstack(); if(stack) @@ -1351,7 +1351,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11DeviceContext::QueryInterface( REFIID rii else { string guid = ToStr::Get(riid); - RDCWARN("Querying ID3D11DeviceContext for interface: %hs", guid.c_str()); + RDCWARN("Querying ID3D11DeviceContext for interface: %s", guid.c_str()); } return RefCounter::QueryInterface(riid, ppvObject); diff --git a/renderdoc/driver/d3d11/d3d11_context.h b/renderdoc/driver/d3d11/d3d11_context.h index 4bb2d0da8..7a0a509d2 100644 --- a/renderdoc/driver/d3d11/d3d11_context.h +++ b/renderdoc/driver/d3d11/d3d11_context.h @@ -214,7 +214,7 @@ private: { enum { ANNOT_SETMARKER, ANNOT_BEGINEVENT, ANNOT_ENDEVENT } m_Type; uint32_t m_Col; - wstring m_Name; + std::wstring m_Name; }; vector m_AnnotationQueue; Threading::CriticalSection m_AnnotLock; diff --git a/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp index 67cd69af3..bac445a57 100644 --- a/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp @@ -27,7 +27,7 @@ #include "d3d11_resources.h" #include "d3d11_renderstate.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" bool WrappedID3D11DeviceContext::Serialise_UpdateSubresource1(ID3D11Resource *pDstResource, UINT DstSubresource, const D3D11_BOX *pDstBox, const void *pSrcData, UINT SrcRowPitch, UINT SrcDepthPitch, UINT CopyFlags) @@ -406,7 +406,7 @@ bool WrappedID3D11DeviceContext::Serialise_ClearView(ID3D11View *pView, const FL FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear; diff --git a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp index c068e704a..b907b1687 100644 --- a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp @@ -27,7 +27,7 @@ #include "driver/d3d11/d3d11_resources.h" #include "driver/d3d11/d3d11_renderstate.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" uint32_t NullCBOffsets[D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT]; uint32_t NullCBCounts[D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT]; @@ -37,8 +37,14 @@ uint32_t NullCBCounts[D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT]; bool WrappedID3D11DeviceContext::Serialise_SetMarker(uint32_t col, const wchar_t *name_) { SERIALISE_ELEMENT(uint32_t, colour, col); - - wstring name = name_ ? name_ : L""; + + string name; + + if(m_State >= WRITING) + { + wstring wname = name_ ? name_ : L""; + name = StringFormat::Wide2UTF8(wname); + } m_pSerialiser->Serialise("Name", name); @@ -57,8 +63,14 @@ bool WrappedID3D11DeviceContext::Serialise_SetMarker(uint32_t col, const wchar_t bool WrappedID3D11DeviceContext::Serialise_PushEvent(uint32_t col, const wchar_t *name_) { SERIALISE_ELEMENT(uint32_t, colour, col); - - wstring name = name_ ? name_ : L""; + + string name; + + if(m_State >= WRITING) + { + wstring wname = name_ ? name_ : L""; + name = StringFormat::Wide2UTF8(wname); + } m_pSerialiser->Serialise("Name", name); @@ -79,7 +91,7 @@ bool WrappedID3D11DeviceContext::Serialise_PopEvent() if(m_State == READING && !m_CurEvents.empty()) { FetchDrawcall draw; - draw.name = L"API Calls"; + draw.name = "API Calls"; draw.flags |= eDraw_SetMarker; AddDrawcall(draw, true); @@ -3361,7 +3373,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexedInstanced(UINT IndexCountP + ", " + ToStr::Get(InstanceCount) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = IndexCountPerInstance; draw.numInstances = InstanceCount; draw.indexOffset = StartIndexLocation; @@ -3426,7 +3438,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawInstanced(UINT VertexCountPerInst + ", " + ToStr::Get(InstanceCount) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = VertexCountPerInstance; draw.numInstances = InstanceCount; draw.vertexOffset = StartVertexLocation; @@ -3487,7 +3499,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexed(UINT IndexCount_, UINT St string name = "DrawIndexed(" + ToStr::Get(IndexCount) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = IndexCount; draw.vertexOffset = BaseVertexLocation; draw.indexOffset = StartIndexLocation; @@ -3546,7 +3558,7 @@ bool WrappedID3D11DeviceContext::Serialise_Draw(UINT VertexCount_, UINT StartVer string name = "Draw(" + ToStr::Get(VertexCount) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = VertexCount; draw.vertexOffset = StartVertexLocation; @@ -3650,7 +3662,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawAuto() string name = "DrawAuto(<" + ToStr::Get(numVerts) + ">)"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Drawcall|eDraw_Auto; draw.numIndices = (uint32_t)numVerts; draw.vertexOffset = 0; @@ -3731,7 +3743,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexedInstancedIndirect(ID3D11Bu draw.instanceOffset = uargs[4]; } - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_UseIBuffer|eDraw_Indirect; @@ -3807,7 +3819,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawInstancedIndirect(ID3D11Buffer *p draw.instanceOffset = uargs[3]; } - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_Indirect; @@ -4328,7 +4340,7 @@ bool WrappedID3D11DeviceContext::Serialise_ExecuteCommandList(ID3D11CommandList string name = "ExecuteCommandList(" + ToStr::Get(cmdList) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_CmdList|eDraw_PushMarker; draw.debugMessages = debugMessages; @@ -4430,7 +4442,7 @@ bool WrappedID3D11DeviceContext::Serialise_Dispatch(UINT ThreadGroupCountX_, UIN + ToStr::Get(ThreadGroupCountZ) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Dispatch; draw.debugMessages = debugMessages; @@ -4498,7 +4510,7 @@ bool WrappedID3D11DeviceContext::Serialise_DispatchIndirect(ID3D11Buffer *pBuffe + ", " + ToStr::Get(uargs[2]) + ">)"; } - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Dispatch|eDraw_Indirect; draw.debugMessages = debugMessages; @@ -4573,7 +4585,7 @@ bool WrappedID3D11DeviceContext::Serialise_FinishCommandList(BOOL RestoreDeferre string name = "FinishCommandList() -> " + ToStr::Get(cmdList); FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_CmdList; draw.debugMessages = debugMessages; @@ -5436,7 +5448,7 @@ bool WrappedID3D11DeviceContext::Serialise_ClearRenderTargetView(ID3D11RenderTar ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear|eDraw_ClearColour; draw.debugMessages = debugMessages; @@ -5560,7 +5572,7 @@ bool WrappedID3D11DeviceContext::Serialise_ClearUnorderedAccessViewUint(ID3D11Un ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear; @@ -5679,7 +5691,7 @@ bool WrappedID3D11DeviceContext::Serialise_ClearUnorderedAccessViewFloat(ID3D11U ")"; FetchDrawcall draw; - draw.name = (widen(name)); + draw.name = (name); draw.flags |= eDraw_Clear; AddDrawcall(draw, true); @@ -5793,7 +5805,7 @@ bool WrappedID3D11DeviceContext::Serialise_ClearDepthStencilView(ID3D11DepthSten ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear|eDraw_ClearDepth; draw.debugMessages = debugMessages; diff --git a/renderdoc/driver/d3d11/d3d11_debug.cpp b/renderdoc/driver/d3d11/d3d11_debug.cpp index 0a321e86e..fdc49f777 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.cpp +++ b/renderdoc/driver/d3d11/d3d11_debug.cpp @@ -30,7 +30,7 @@ #include "maths/matrix.h" #include "maths/camera.h" #include "data/resource.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "maths/formatpacking.h" #include "driver/d3d11/d3d11_resources.h" @@ -152,11 +152,11 @@ D3D11DebugManager::D3D11DebugManager(WrappedID3D11Device *wrapper) } } - wstring shadercache = FileIO::GetAppFolderFilename(L"shaders.cache"); + string shadercache = FileIO::GetAppFolderFilename("shaders.cache"); m_ShaderCacheDirty = true; - FILE *f = FileIO::fopen(shadercache.c_str(), L"rb"); + FILE *f = FileIO::fopen(shadercache.c_str(), "rb"); if(f) { FileIO::fseek64(f, 0, SEEK_END); @@ -281,9 +281,9 @@ D3D11DebugManager::~D3D11DebugManager() { if(m_ShaderCacheDirty) { - wstring shadercache = FileIO::GetAppFolderFilename(L"shaders.cache"); + string shadercache = FileIO::GetAppFolderFilename("shaders.cache"); - FILE *f = FileIO::fopen(shadercache.c_str(), L"wb"); + FILE *f = FileIO::fopen(shadercache.c_str(), "wb"); if(f) { uint32_t version = m_ShaderCacheVersion; @@ -421,7 +421,7 @@ string D3D11DebugManager::GetShaderBlob(const char *source, const char *entry, c if(logerror.length() > 1024) logerror = logerror.substr(0, 1024) + "..."; - RDCWARN("Shader compile error in '%hs':\n%hs", entry, logerror.c_str()); + RDCWARN("Shader compile error in '%s':\n%s", entry, logerror.c_str()); SAFE_RELEASE(errBlob); @@ -456,7 +456,7 @@ ID3D11VertexShader *D3D11DebugManager::MakeVShader(const char *source, const cha if(GetShaderBlob(source, entry, D3DCOMPILE_WARNINGS_ARE_ERRORS, profile, &byteBlob) != "") { - RDCERR("Couldn't get shader blob for %hs", entry); + RDCERR("Couldn't get shader blob for %s", entry); return NULL; } @@ -469,7 +469,7 @@ ID3D11VertexShader *D3D11DebugManager::MakeVShader(const char *source, const cha if(FAILED(hr)) { - RDCERR("Couldn't create vertex shader for %hs %08x", entry, hr); + RDCERR("Couldn't create vertex shader for %s %08x", entry, hr); SAFE_RELEASE(byteBlob); @@ -482,7 +482,7 @@ ID3D11VertexShader *D3D11DebugManager::MakeVShader(const char *source, const cha if(FAILED(hr)) { - RDCERR("Couldn't create input layout for %hs %08x", entry, hr); + RDCERR("Couldn't create input layout for %s %08x", entry, hr); } } @@ -517,7 +517,7 @@ ID3D11GeometryShader *D3D11DebugManager::MakeGShader(const char *source, const c if(FAILED(hr)) { - RDCERR("Couldn't create geometry shader for %hs %08x", entry, hr); + RDCERR("Couldn't create geometry shader for %s %08x", entry, hr); return NULL; } @@ -544,7 +544,7 @@ ID3D11PixelShader *D3D11DebugManager::MakePShader(const char *source, const char if(FAILED(hr)) { - RDCERR("Couldn't create pixel shader for %hs %08x", entry, hr); + RDCERR("Couldn't create pixel shader for %s %08x", entry, hr); return NULL; } @@ -571,7 +571,7 @@ ID3D11ComputeShader *D3D11DebugManager::MakeCShader(const char *source, const ch if(FAILED(hr)) { - RDCERR("Couldn't create compute shader for %hs %08x", entry, hr); + RDCERR("Couldn't create compute shader for %s %08x", entry, hr); return NULL; } @@ -3423,7 +3423,7 @@ bool D3D11DebugManager::RenderTexture(TextureDisplay cfg, bool blendAlpha) } else { - RDCWARN("Custom shader: Variable recognised but type wrong, expected uint4: %hs", var.name.c_str()); + RDCWARN("Custom shader: Variable recognised but type wrong, expected uint4: %s", var.name.c_str()); } } else if(var.name == "RENDERDOC_SelectedMip") @@ -3438,7 +3438,7 @@ bool D3D11DebugManager::RenderTexture(TextureDisplay cfg, bool blendAlpha) } else { - RDCWARN("Custom shader: Variable recognised but type wrong, expected uint: %hs", var.name.c_str()); + RDCWARN("Custom shader: Variable recognised but type wrong, expected uint: %s", var.name.c_str()); } } else if(var.name == "RENDERDOC_TextureType") @@ -3453,12 +3453,12 @@ bool D3D11DebugManager::RenderTexture(TextureDisplay cfg, bool blendAlpha) } else { - RDCWARN("Custom shader: Variable recognised but type wrong, expected uint: %hs", var.name.c_str()); + RDCWARN("Custom shader: Variable recognised but type wrong, expected uint: %s", var.name.c_str()); } } else { - RDCWARN("Custom shader: Variable not recognised: %hs", var.name.c_str()); + RDCWARN("Custom shader: Variable not recognised: %s", var.name.c_str()); } } diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index 0becc753f..64f782cc0 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -25,7 +25,7 @@ #include "core/core.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "maths/formatpacking.h" @@ -239,7 +239,7 @@ ReplayCreateStatus D3D11InitParams::Serialise() return eReplayCreate_Success; } -void WrappedID3D11Device::SetLogFile(const wchar_t *logfile) +void WrappedID3D11Device::SetLogFile(const char *logfile) { #if defined(RELEASE) const bool debugSerialiser = false; @@ -316,7 +316,7 @@ WrappedID3D11Device::WrappedID3D11Device(ID3D11Device* realDevice, D3D11InitPara m_pSerialiser = new Serialiser(NULL, Serialiser::WRITING, debugSerialiser); #ifdef DEBUG_TEXT_SERIALISER - m_pDebugSerialiser = new Serialiser(L"./debuglog.txt", Serialiser::DEBUGWRITING, true); + m_pDebugSerialiser = new Serialiser("./debuglog.txt", Serialiser::DEBUGWRITING, true); #else m_pDebugSerialiser = NULL; #endif @@ -571,7 +571,7 @@ HRESULT WrappedID3D11Device::QueryInterface(REFIID riid, void **ppvObject) else { string guid = ToStr::Get(riid); - RDCWARN("Querying ID3D11Device for interface: %hs", guid.c_str()); + RDCWARN("Querying ID3D11Device for interface: %s", guid.c_str()); } return m_RefCounter.QueryInterface(riid, ppvObject); @@ -587,7 +587,7 @@ NvPmApi *nvAPI = NULL; #if defined(ENABLE_NVIDIA_PERFKIT) int enumFunc(NVPMCounterID id, const char *name) { - RDCLOG("(% 4d): %hs", id, name); + RDCLOG("(% 4d): %s", id, name); return NVPM_OK; } @@ -1018,7 +1018,7 @@ void WrappedID3D11Device::ReadLogInitialisation() { double dcount = double(it->second.count); - RDCDEBUG("% 5d chunks - Time: %9.3fms total/%9.3fms avg - Size: %8.3fMB total/%7.3fMB avg - %hs (%u)", + RDCDEBUG("% 5d chunks - Time: %9.3fms total/%9.3fms avg - Size: %8.3fMB total/%7.3fMB avg - %s (%u)", it->second.count, it->second.total, it->second.total/dcount, double(it->second.totalsize)/(1024.0*1024.0), @@ -2809,7 +2809,7 @@ bool WrappedID3D11Device::EndFrameCapture(void *wnd) default: break; } - GetDebugManager()->RenderText(0.0f, 0.0f, "Failed to capture frame %u: %hs", m_FrameCounter, reasonString); + GetDebugManager()->RenderText(0.0f, 0.0f, "Failed to capture frame %u: %s", m_FrameCounter, reasonString); } old.ApplyState(m_pImmediateContext); @@ -3029,7 +3029,7 @@ HRESULT WrappedID3D11Device::Present(IDXGISwapChain *swap, UINT SyncInterval, UI GetDebugManager()->RenderText(0.0f, y, "Failed capture at frame %d:\n", m_FailedFrame); y += 1.0f; - GetDebugManager()->RenderText(0.0f, y, " %hs\n", reasonString); + GetDebugManager()->RenderText(0.0f, y, " %s\n", reasonString); y += 1.0f; } diff --git a/renderdoc/driver/d3d11/d3d11_device.h b/renderdoc/driver/d3d11/d3d11_device.h index a35a92949..75ff009d6 100644 --- a/renderdoc/driver/d3d11/d3d11_device.h +++ b/renderdoc/driver/d3d11/d3d11_device.h @@ -220,7 +220,7 @@ public: ALLOCATE_WITH_WRAPPED_POOL(WrappedID3D11Device, AllocPoolCount); WrappedID3D11Device(ID3D11Device* realDevice, D3D11InitParams *params); - void SetLogFile(const wchar_t *logfile); + void SetLogFile(const char *logfile); void SetLogVersion(uint32_t fileversion) { m_InitParams.SerialiseVersion = fileversion; } uint32_t GetLogVersion() { return m_InitParams.SerialiseVersion; } virtual ~WrappedID3D11Device(); diff --git a/renderdoc/driver/d3d11/d3d11_renderstate.cpp b/renderdoc/driver/d3d11/d3d11_renderstate.cpp index 7dc46cc5d..ec07ea697 100644 --- a/renderdoc/driver/d3d11/d3d11_renderstate.cpp +++ b/renderdoc/driver/d3d11/d3d11_renderstate.cpp @@ -906,7 +906,7 @@ bool D3D11RenderState::IsBoundIUnknownForWrite(IUnknown *resource, bool readDept if(found || resource == (IUnknown *)sh->UAVs[i]) { - //RDCDEBUG("Resource was bound on %hs UAV %u", names[s], i); + //RDCDEBUG("Resource was bound on %s UAV %u", names[s], i); return true; } } @@ -1139,7 +1139,7 @@ void D3D11RenderState::UnbindIUnknownForRead(IUnknown *resource, bool allowDepth { if(resource == (IUnknown *)sh->ConstantBuffers[i]) { - //RDCDEBUG("Resource was bound on %hs CB %u", names[s], i); + //RDCDEBUG("Resource was bound on %s CB %u", names[s], i); ReleaseRef(sh->ConstantBuffers[i]); sh->ConstantBuffers[i] = NULL; } @@ -1203,7 +1203,7 @@ void D3D11RenderState::UnbindIUnknownForRead(IUnknown *resource, bool allowDepth if(found || resource == (IUnknown *)sh->SRVs[i]) { - //RDCDEBUG("Resource was bound on %hs SRV %u", names[s], i); + //RDCDEBUG("Resource was bound on %s SRV %u", names[s], i); if(allowDepthOnly && readDepthOnly) { diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index f56fbeb92..ed98a6876 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -33,7 +33,7 @@ #include "shaders/dxbc_debug.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" D3D11Replay::D3D11Replay() { @@ -110,7 +110,7 @@ FetchTexture D3D11Replay::GetTexture(ResourceId id) str = StringFormat::Fmt("Texture1D%s %llu", suffix, tex.ID); } - tex.name = widen(str); + tex.name = str; tex.byteSize = 0; for(uint32_t s=0; s < tex.numSubresources; s++) @@ -200,7 +200,7 @@ FetchTexture D3D11Replay::GetTexture(ResourceId id) } } - tex.name = widen(str); + tex.name = str; tex.byteSize = 0; for(uint32_t s=0; s < tex.numSubresources; s++) @@ -263,7 +263,7 @@ FetchTexture D3D11Replay::GetTexture(ResourceId id) str = StringFormat::Fmt("Texture3D%s %llu", suffix, tex.ID); } - tex.name = widen(str); + tex.name = str; tex.byteSize = 0; for(uint32_t s=0; s < tex.numSubresources; s++) @@ -364,7 +364,7 @@ FetchBuffer D3D11Replay::GetBuffer(ResourceId id) D3D11_BUFFER_DESC desc; it->second.m_Buffer->GetDesc(&desc); - ret.name = widen(str); + ret.name = str; ret.length = it->second.length; ret.structureSize = desc.StructureByteStride; ret.byteSize = desc.ByteWidth; @@ -433,7 +433,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState() l.PerInstance = vec[i].InputSlotClass == D3D11_INPUT_PER_INSTANCE_DATA; l.InstanceDataStepRate = vec[i].InstanceDataStepRate; l.SemanticIndex = vec[i].SemanticIndex; - l.SemanticName = widen(vec[i].SemanticName); + l.SemanticName = vec[i].SemanticName; } } @@ -480,10 +480,10 @@ D3D11PipelineState D3D11Replay::MakePipelineState() if(str == "" && dst.Shader != ResourceId()) { dst.customName = false; - str = StringFormat::Fmt("%hs Shader %llu", stageNames[i], dst.Shader); + str = StringFormat::Fmt("%s Shader %llu", stageNames[i], dst.Shader); } - dst.ShaderName = widen(str); + dst.ShaderName = str; // create identity bindpoint mapping create_array_uninit(dst.BindpointMapping.ConstantBlocks, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT); @@ -520,14 +520,14 @@ D3D11PipelineState D3D11Replay::MakePipelineState() D3D11_SAMPLER_DESC desc; src.Samplers[s]->GetDesc(&desc); - samp.AddressU = widen(ToStr::Get(desc.AddressU)); - samp.AddressV = widen(ToStr::Get(desc.AddressV)); - samp.AddressW = widen(ToStr::Get(desc.AddressW)); + samp.AddressU = ToStr::Get(desc.AddressU); + samp.AddressV = ToStr::Get(desc.AddressV); + samp.AddressW = ToStr::Get(desc.AddressW); memcpy(samp.BorderColor, desc.BorderColor, sizeof(FLOAT)*4); - samp.Comparison = widen(ToStr::Get(desc.ComparisonFunc)); - samp.Filter = widen(ToStr::Get(desc.Filter)); + samp.Comparison = ToStr::Get(desc.ComparisonFunc); + samp.Filter = ToStr::Get(desc.Filter); samp.MaxAniso = desc.MaxAnisotropy; samp.MaxLOD = desc.MaxLOD; samp.MinLOD = desc.MinLOD; @@ -557,7 +557,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState() view.Resource = rm->GetOriginalID(GetIDForResource(res)); - view.Type = widen(ToStr::Get(desc.ViewDimension)); + view.Type = ToStr::Get(desc.ViewDimension); if(desc.ViewDimension == D3D11_SRV_DIMENSION_BUFFER) { @@ -654,7 +654,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState() view.Resource = rm->GetOriginalID(GetIDForResource(res)); view.Format = MakeResourceFormat(desc.Format); - view.Type = widen(ToStr::Get(desc.ViewDimension)); + view.Type = ToStr::Get(desc.ViewDimension); if(desc.ViewDimension == D3D11_RTV_DIMENSION_BUFFER) { @@ -711,7 +711,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState() count = 255; src.Instances[s]->GetInstanceName(instName, &count); - dst.ClassInstances[s] = widen(instName); + dst.ClassInstances[s] = instName; } } } @@ -832,7 +832,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState() view.Resource = rm->GetOriginalID(GetIDForResource(res)); view.Format = MakeResourceFormat(desc.Format); - view.Type = widen(ToStr::Get(desc.ViewDimension)); + view.Type = ToStr::Get(desc.ViewDimension); if(desc.ViewDimension == D3D11_RTV_DIMENSION_BUFFER) { @@ -904,7 +904,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState() view.Resource = rm->GetOriginalID(GetIDForResource(res)); view.Format = MakeResourceFormat(desc.Format); - view.Type = widen(ToStr::Get(desc.ViewDimension)); + view.Type = ToStr::Get(desc.ViewDimension); if(desc.ViewDimension == D3D11_UAV_DIMENSION_BUFFER) { @@ -977,7 +977,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState() view.Resource = rm->GetOriginalID(GetIDForResource(res)); view.Format = MakeResourceFormat(desc.Format); - view.Type = widen(ToStr::Get(desc.ViewDimension)); + view.Type = ToStr::Get(desc.ViewDimension); if(desc.ViewDimension == D3D11_DSV_DIMENSION_TEXTURE1D) { @@ -1042,19 +1042,19 @@ D3D11PipelineState D3D11Replay::MakePipelineState() #if defined(INCLUDE_D3D_11_1) blend.LogicEnabled = state1 && desc1.RenderTarget[i].LogicOpEnable == TRUE; - blend.LogicOp = state1 ? widen(ToStr::Get(desc1.RenderTarget[i].LogicOp)) : widen(ToStr::Get(D3D11_LOGIC_OP_NOOP)); + blend.LogicOp = state1 ? ToStr::Get(desc1.RenderTarget[i].LogicOp) : "NOOP"; #else blend.LogicEnabled = false; - blend.LogicOp = L"NOOP"; + blend.LogicOp = "NOOP"; #endif - blend.m_AlphaBlend.Source = widen(ToStr::Get(desc.RenderTarget[i].SrcBlendAlpha)); - blend.m_AlphaBlend.Destination = widen(ToStr::Get(desc.RenderTarget[i].DestBlendAlpha)); - blend.m_AlphaBlend.Operation = widen(ToStr::Get(desc.RenderTarget[i].BlendOpAlpha)); + blend.m_AlphaBlend.Source = ToStr::Get(desc.RenderTarget[i].SrcBlendAlpha); + blend.m_AlphaBlend.Destination = ToStr::Get(desc.RenderTarget[i].DestBlendAlpha); + blend.m_AlphaBlend.Operation = ToStr::Get(desc.RenderTarget[i].BlendOpAlpha); - blend.m_Blend.Source = widen(ToStr::Get(desc.RenderTarget[i].SrcBlend)); - blend.m_Blend.Destination = widen(ToStr::Get(desc.RenderTarget[i].DestBlend)); - blend.m_Blend.Operation = widen(ToStr::Get(desc.RenderTarget[i].BlendOp)); + blend.m_Blend.Source = ToStr::Get(desc.RenderTarget[i].SrcBlend); + blend.m_Blend.Destination = ToStr::Get(desc.RenderTarget[i].DestBlend); + blend.m_Blend.Operation = ToStr::Get(desc.RenderTarget[i].BlendOp); blend.WriteMask = desc.RenderTarget[i].RenderTargetWriteMask; } @@ -1073,20 +1073,20 @@ D3D11PipelineState D3D11Replay::MakePipelineState() blend.Enabled = false; - blend.m_AlphaBlend.Source = widen(ToStr::Get(D3D11_BLEND_ONE)); - blend.m_AlphaBlend.Destination = widen(ToStr::Get(D3D11_BLEND_ZERO)); - blend.m_AlphaBlend.Operation = widen(ToStr::Get(D3D11_BLEND_OP_ADD)); + blend.m_AlphaBlend.Source = ToStr::Get(D3D11_BLEND_ONE); + blend.m_AlphaBlend.Destination = ToStr::Get(D3D11_BLEND_ZERO); + blend.m_AlphaBlend.Operation = ToStr::Get(D3D11_BLEND_OP_ADD); - blend.m_Blend.Source = widen(ToStr::Get(D3D11_BLEND_ONE)); - blend.m_Blend.Destination = widen(ToStr::Get(D3D11_BLEND_ZERO)); - blend.m_Blend.Operation = widen(ToStr::Get(D3D11_BLEND_OP_ADD)); + blend.m_Blend.Source = ToStr::Get(D3D11_BLEND_ONE); + blend.m_Blend.Destination = ToStr::Get(D3D11_BLEND_ZERO); + blend.m_Blend.Operation = ToStr::Get(D3D11_BLEND_OP_ADD); #if defined(INCLUDE_D3D_11_1) blend.LogicEnabled = false; - blend.LogicOp = widen(ToStr::Get(D3D11_LOGIC_OP_NOOP)); + blend.LogicOp = ToStr::Get(D3D11_LOGIC_OP_NOOP); #else blend.LogicEnabled = false; - blend.LogicOp = L"NOOP"; + blend.LogicOp = "NOOP"; #endif blend.WriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; @@ -1102,7 +1102,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState() rs->OM.DepthStencilState->GetDesc(&desc); ret.m_OM.m_State.DepthEnable = desc.DepthEnable == TRUE; - ret.m_OM.m_State.DepthFunc = widen(ToStr::Get(desc.DepthFunc)); + ret.m_OM.m_State.DepthFunc = ToStr::Get(desc.DepthFunc); ret.m_OM.m_State.DepthWrites = desc.DepthWriteMask == D3D11_DEPTH_WRITE_MASK_ALL; ret.m_OM.m_State.StencilEnable = desc.StencilEnable == TRUE; ret.m_OM.m_State.StencilRef = rs->OM.StencRef; @@ -1110,21 +1110,21 @@ D3D11PipelineState D3D11Replay::MakePipelineState() ret.m_OM.m_State.StencilWriteMask = desc.StencilWriteMask; ret.m_OM.m_State.State = rm->GetOriginalID(GetIDForResource(rs->OM.DepthStencilState)); - ret.m_OM.m_State.m_FrontFace.Func = widen(ToStr::Get(desc.FrontFace.StencilFunc)); - ret.m_OM.m_State.m_FrontFace.DepthFailOp = widen(ToStr::Get(desc.FrontFace.StencilDepthFailOp)); - ret.m_OM.m_State.m_FrontFace.PassOp = widen(ToStr::Get(desc.FrontFace.StencilPassOp)); - ret.m_OM.m_State.m_FrontFace.FailOp = widen(ToStr::Get(desc.FrontFace.StencilFailOp)); + ret.m_OM.m_State.m_FrontFace.Func = ToStr::Get(desc.FrontFace.StencilFunc); + ret.m_OM.m_State.m_FrontFace.DepthFailOp = ToStr::Get(desc.FrontFace.StencilDepthFailOp); + ret.m_OM.m_State.m_FrontFace.PassOp = ToStr::Get(desc.FrontFace.StencilPassOp); + ret.m_OM.m_State.m_FrontFace.FailOp = ToStr::Get(desc.FrontFace.StencilFailOp); - ret.m_OM.m_State.m_BackFace.Func = widen(ToStr::Get(desc.BackFace.StencilFunc)); - ret.m_OM.m_State.m_BackFace.DepthFailOp = widen(ToStr::Get(desc.BackFace.StencilDepthFailOp)); - ret.m_OM.m_State.m_BackFace.PassOp = widen(ToStr::Get(desc.BackFace.StencilPassOp)); - ret.m_OM.m_State.m_BackFace.FailOp = widen(ToStr::Get(desc.BackFace.StencilFailOp)); + ret.m_OM.m_State.m_BackFace.Func = ToStr::Get(desc.BackFace.StencilFunc); + ret.m_OM.m_State.m_BackFace.DepthFailOp = ToStr::Get(desc.BackFace.StencilDepthFailOp); + ret.m_OM.m_State.m_BackFace.PassOp = ToStr::Get(desc.BackFace.StencilPassOp); + ret.m_OM.m_State.m_BackFace.FailOp = ToStr::Get(desc.BackFace.StencilFailOp); } else { ret.m_OM.m_State.DepthEnable = true; - ret.m_OM.m_State.DepthFunc = widen(ToStr::Get(D3D11_COMPARISON_LESS)); + ret.m_OM.m_State.DepthFunc = ToStr::Get(D3D11_COMPARISON_LESS); ret.m_OM.m_State.DepthWrites = true; ret.m_OM.m_State.StencilEnable = false; ret.m_OM.m_State.StencilRef = rs->OM.StencRef; @@ -1132,15 +1132,15 @@ D3D11PipelineState D3D11Replay::MakePipelineState() ret.m_OM.m_State.StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK; ret.m_OM.m_State.State = ResourceId(); - ret.m_OM.m_State.m_FrontFace.Func = widen(ToStr::Get(D3D11_COMPARISON_ALWAYS)); - ret.m_OM.m_State.m_FrontFace.DepthFailOp = widen(ToStr::Get(D3D11_STENCIL_OP_KEEP)); - ret.m_OM.m_State.m_FrontFace.PassOp = widen(ToStr::Get(D3D11_STENCIL_OP_KEEP)); - ret.m_OM.m_State.m_FrontFace.FailOp = widen(ToStr::Get(D3D11_STENCIL_OP_KEEP)); + ret.m_OM.m_State.m_FrontFace.Func = ToStr::Get(D3D11_COMPARISON_ALWAYS); + ret.m_OM.m_State.m_FrontFace.DepthFailOp = ToStr::Get(D3D11_STENCIL_OP_KEEP); + ret.m_OM.m_State.m_FrontFace.PassOp = ToStr::Get(D3D11_STENCIL_OP_KEEP); + ret.m_OM.m_State.m_FrontFace.FailOp = ToStr::Get(D3D11_STENCIL_OP_KEEP); - ret.m_OM.m_State.m_BackFace.Func = widen(ToStr::Get(D3D11_COMPARISON_ALWAYS)); - ret.m_OM.m_State.m_BackFace.DepthFailOp = widen(ToStr::Get(D3D11_STENCIL_OP_KEEP)); - ret.m_OM.m_State.m_BackFace.PassOp = widen(ToStr::Get(D3D11_STENCIL_OP_KEEP)); - ret.m_OM.m_State.m_BackFace.FailOp = widen(ToStr::Get(D3D11_STENCIL_OP_KEEP)); + ret.m_OM.m_State.m_BackFace.Func = ToStr::Get(D3D11_COMPARISON_ALWAYS); + ret.m_OM.m_State.m_BackFace.DepthFailOp = ToStr::Get(D3D11_STENCIL_OP_KEEP); + ret.m_OM.m_State.m_BackFace.PassOp = ToStr::Get(D3D11_STENCIL_OP_KEEP); + ret.m_OM.m_State.m_BackFace.FailOp = ToStr::Get(D3D11_STENCIL_OP_KEEP); } } @@ -1488,8 +1488,8 @@ ResourceId D3D11Replay::CreateProxyTexture(FetchTexture templateTex) if(resource != NULL && templateTex.customName) { - string name = narrow(wstring(templateTex.name.elems)); - SetDebugName(resource, name.c_str()); + string name = templateTex.name.elems; + SetDebugName(resource, templateTex.name.elems); } return ret; @@ -1586,7 +1586,7 @@ void D3D11Replay::SetProxyTextureData(ResourceId texid, uint32_t arrayIdx, uint3 } } -ReplayCreateStatus D3D11_CreateReplayDevice(const wchar_t *logfile, IReplayDriver **driver) +ReplayCreateStatus D3D11_CreateReplayDevice(const char *logfile, IReplayDriver **driver) { RDCDEBUG("Creating a D3D11 replay device"); @@ -1633,7 +1633,7 @@ ReplayCreateStatus D3D11_CreateReplayDevice(const wchar_t *logfile, IReplayDrive D3D11InitParams initParams; RDCDriver driverFileType = RDC_D3D11; - wstring driverName = L"D3D11"; + string driverName = "D3D11"; if(logfile) { auto status = RenderDoc::Inst().FillInitParams(logfile, driverFileType, driverName, (RDCInitParams *)&initParams); @@ -1741,4 +1741,4 @@ ReplayCreateStatus D3D11_CreateReplayDevice(const wchar_t *logfile, IReplayDrive return eReplayCreate_APIHardwareUnsupported; } -static DriverRegistration D3D11DriverRegistration(RDC_D3D11, L"D3D11", &D3D11_CreateReplayDevice); +static DriverRegistration D3D11DriverRegistration(RDC_D3D11, "D3D11", &D3D11_CreateReplayDevice); diff --git a/renderdoc/driver/d3d11/d3d11_resources.h b/renderdoc/driver/d3d11/d3d11_resources.h index def50d0b3..94ff49d4b 100644 --- a/renderdoc/driver/d3d11/d3d11_resources.h +++ b/renderdoc/driver/d3d11/d3d11_resources.h @@ -479,7 +479,7 @@ protected: bool ret = m_pDevice->GetResourceManager()->AddWrapper(this, real); if(!ret) - RDCERR("Error adding wrapper for type %hs", ToStr::Get(__uuidof(NestedType)).c_str()); + RDCERR("Error adding wrapper for type %s", ToStr::Get(__uuidof(NestedType)).c_str()); m_pDevice->GetResourceManager()->AddCurrentResource(GetResourceID(), this); } diff --git a/renderdoc/driver/d3d11/shaders/dxbc_debug.cpp b/renderdoc/driver/d3d11/shaders/dxbc_debug.cpp index 5e13521ea..99233cf1b 100644 --- a/renderdoc/driver/d3d11/shaders/dxbc_debug.cpp +++ b/renderdoc/driver/d3d11/shaders/dxbc_debug.cpp @@ -3463,7 +3463,7 @@ State State::GetNext(GlobalState &global, State quad[4]) const }; char buf[64] = {0}; - StringFormat::snprintf(buf, 63, "%hs4", typeStr[decl.resType[0]]); + StringFormat::snprintf(buf, 63, "%s4", typeStr[decl.resType[0]]); if (retFmt == DXGI_FORMAT_UNKNOWN) { @@ -3475,7 +3475,7 @@ State State::GetNext(GlobalState &global, State quad[4]) const if(decl.dim == RESOURCE_DIMENSION_TEXTURE2DMS || decl.dim == RESOURCE_DIMENSION_TEXTURE2DMSARRAY) { if(decl.sampleCount > 0) - StringFormat::snprintf(buf, 63, "%hs4, %d", typeStr[decl.resType[0]], decl.sampleCount); + StringFormat::snprintf(buf, 63, "%s4, %d", typeStr[decl.resType[0]], decl.sampleCount); } texture += "<"; diff --git a/renderdoc/driver/d3d11/shaders/dxbc_disassemble.cpp b/renderdoc/driver/d3d11/shaders/dxbc_disassemble.cpp index a46dbdeca..2bf864e97 100644 --- a/renderdoc/driver/d3d11/shaders/dxbc_disassemble.cpp +++ b/renderdoc/driver/d3d11/shaders/dxbc_disassemble.cpp @@ -26,7 +26,7 @@ #include "common/common.h" // only dependencies are RDCASSERT, so this code is easy to detach from RenderDoc #include "dxbc_inspect.h" #include "dxbc_disassemble.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include @@ -502,7 +502,7 @@ void DXBCFile::MakeDisassembly() } else { - RDCWARN("Couldn't find filename '%hs' in #line directive in debug info", filename); + RDCWARN("Couldn't find filename '%s' in #line directive in debug info", filename); // make a dummy file to write into that won't be used. fileNames.push_back(filename); @@ -605,7 +605,7 @@ void DXBCFile::MakeDisassembly() m_Disassembly += " "; // "0000: " for(int in=0; in < indent; in++) m_Disassembly += " "; - m_Disassembly += StringFormat::Fmt("%hs:%d\n", m_DebugInfo->Files[fileID].first.c_str(), lineNum+1); + m_Disassembly += StringFormat::Fmt("%s:%d\n", m_DebugInfo->Files[fileID].first.c_str(), lineNum+1); } if(line != "") diff --git a/renderdoc/driver/d3d11/shaders/dxbc_inspect.cpp b/renderdoc/driver/d3d11/shaders/dxbc_inspect.cpp index c6012cb07..1ba460c66 100644 --- a/renderdoc/driver/d3d11/shaders/dxbc_inspect.cpp +++ b/renderdoc/driver/d3d11/shaders/dxbc_inspect.cpp @@ -25,7 +25,7 @@ #include "common/common.h" #include "serialise/serialiser.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "dxbc_inspect.h" #include "dxbc_sdbg.h" #include "dxbc_spdb.h" @@ -338,7 +338,7 @@ string TypeName(CBufferVariableType::Descriptor desc) if(desc.rows > 1) { - StringFormat::snprintf(buf, 63, "%hs%dx%d", type, desc.rows, desc.cols); + StringFormat::snprintf(buf, 63, "%s%dx%d", type, desc.rows, desc.cols); if(desc.varClass == CLASS_MATRIX_ROWS) { @@ -352,7 +352,7 @@ string TypeName(CBufferVariableType::Descriptor desc) } else if(desc.cols > 1) { - StringFormat::snprintf(buf, 63, "%hs%d", type, desc.cols); + StringFormat::snprintf(buf, 63, "%s%d", type, desc.cols); ret = buf; } @@ -628,7 +628,7 @@ DXBCFile::DXBCFile(const void *ByteCode, size_t ByteCodeLength) } else { - RDCDEBUG("Unused information, buffer %d: %hs", cb.descriptor.type, cb.descriptor.name.c_str()); + RDCDEBUG("Unused information, buffer %d: %s", cb.descriptor.type, cb.descriptor.name.c_str()); } } } @@ -1470,7 +1470,7 @@ SPDBChunk::SPDBChunk(void *chunk, uint32_t firstInstructionOffset) ProcHeader *header = (ProcHeader *)contents; char *name = (char *)(header + 1); - //RDCDEBUG("Got global procedure start %hs %x -> %x", name, header->Offset, header->Offset+header->Length); + //RDCDEBUG("Got global procedure start %s %x -> %x", name, header->Offset, header->Offset+header->Length); } else if(type == 0x113c) { @@ -1481,7 +1481,7 @@ SPDBChunk::SPDBChunk(void *chunk, uint32_t firstInstructionOffset) m_CompilandDetails.CompilerSig = compilerString; /* - RDCDEBUG("CompilandDetails: %hs (%d.%d.%d.%d)", compilerString, + RDCDEBUG("CompilandDetails: %s (%d.%d.%d.%d)", compilerString, details->FrontendVersion.Major, details->FrontendVersion.Minor, details->FrontendVersion.Build, details->FrontendVersion.QFE);*/ @@ -1497,7 +1497,7 @@ SPDBChunk::SPDBChunk(void *chunk, uint32_t firstInstructionOffset) { char *value = key + strlen(key) + 1; - //RDCDEBUG("CompilandEnv: %hs = \"%hs\"", key, value); + //RDCDEBUG("CompilandEnv: %s = \"%s\"", key, value); if(!strcmp(key, "hlslEntry")) { @@ -1549,7 +1549,7 @@ SPDBChunk::SPDBChunk(void *chunk, uint32_t firstInstructionOffset) uint32_t *adsf = (uint32_t *)iterator; - //RDCDEBUG("funcdef for %hs (%x) flags??=0x%x offset/length??=0x%x", functions[adsf[2]&0xfff].funcName.c_str(), adsf[2], adsf[0], adsf[1]); + //RDCDEBUG("funcdef for %s (%x) flags??=0x%x offset/length??=0x%x", functions[adsf[2]&0xfff].funcName.c_str(), adsf[2], adsf[0], adsf[1]); iterator += 3*sizeof(uint32_t); bool working = true; @@ -1730,7 +1730,7 @@ SPDBChunk::SPDBChunk(void *chunk, uint32_t firstInstructionOffset) if((size_t)(var->func&0xfff) < functions.size()) funcName = functions[var->func&0xfff].funcName; - //RDCDEBUG(" in %hs (%x) flags??=%04x, %hs:", funcName.c_str(), var->func, var->unkflags, var->name); + //RDCDEBUG(" in %s (%x) flags??=%04x, %s:", funcName.c_str(), var->func, var->unkflags, var->name); byte *afterName = (byte *)var->name + (strlen(var->name) + 1); @@ -1779,7 +1779,7 @@ SPDBChunk::SPDBChunk(void *chunk, uint32_t firstInstructionOffset) char comps[] = "xyzw"; - //RDCDEBUG("%hs%d.%c (%x, %x) <- .%c @ 0x%x", type, (destComp)>>4, comps[(destComp&0xf)>>2], comp->destComp, comp->unkE, comps[(comp->srcComp&0xf)>>2], comp->instrOffset); + //RDCDEBUG("%s%d.%c (%x, %x) <- .%c @ 0x%x", type, (destComp)>>4, comps[(destComp&0xf)>>2], comp->destComp, comp->unkE, comps[(comp->srcComp&0xf)>>2], comp->instrOffset); //RDCDEBUG(" A:%04x B:%04x C:%04x D:%04x", comp->unkA, comp->unkB, comp->unkC, comp->unkD); //RDCDEBUG(" E(d):%04x", comp->unkE); @@ -1968,7 +1968,7 @@ SPDBChunk::SPDBChunk(void *chunk, uint32_t firstInstructionOffset) { // function call - 3 uint32s: (function idx | 0x1000, FileMapping idx, line # of start of function) - //RDCDEBUG("Call to %hs(%x) - file %x, line %d", functions[calls[0]&0xfff].funcName.c_str(), calls[0], calls[1], calls[2]); + //RDCDEBUG("Call to %s(%x) - file %x, line %d", functions[calls[0]&0xfff].funcName.c_str(), calls[0], calls[1], calls[2]); funcCalls[idx].fileOffs = calls[1]; funcCalls[idx].baseLineNum = calls[2]; diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.cpp b/renderdoc/driver/dxgi/dxgi_wrapped.cpp index 75e62fe70..fdaa3de7e 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.cpp +++ b/renderdoc/driver/dxgi/dxgi_wrapped.cpp @@ -533,7 +533,7 @@ bool RefCountDXGIObject::HandleWrap(REFIID riid, void **ppvObject) else { string guid = ToStr::Get(riid); - RDCWARN("Querying IDXGIObject for interface: %hs", guid.c_str()); + RDCWARN("Querying IDXGIObject for interface: %s", guid.c_str()); } return false; @@ -580,7 +580,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGISwapChain2::QueryInterface(REFIID riid, vo else { string guid = ToStr::Get(riid); - RDCWARN("Querying IDXGISwapChain for interface: %hs", guid.c_str()); + RDCWARN("Querying IDXGISwapChain for interface: %s", guid.c_str()); } return RefCountDXGIObject::QueryInterface(riid, ppvObject); @@ -597,7 +597,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice::QueryInterface( REFIID riid, void else { string guid = ToStr::Get(riid); - RDCWARN("Querying IDXGIDevice for interface: %hs", guid.c_str()); + RDCWARN("Querying IDXGIDevice for interface: %s", guid.c_str()); } return RefCountDXGIObject::QueryInterface(riid, ppvObject); @@ -638,7 +638,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice1::QueryInterface( REFIID riid, void else { string guid = ToStr::Get(riid); - RDCWARN("Querying IDXGIDevice1 for interface: %hs", guid.c_str()); + RDCWARN("Querying IDXGIDevice1 for interface: %s", guid.c_str()); } return RefCountDXGIObject::QueryInterface(riid, ppvObject); @@ -677,7 +677,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice2::QueryInterface( REFIID riid, void else { string guid = ToStr::Get(riid); - RDCWARN("Querying IDXGIDevice2 for interface: %hs", guid.c_str()); + RDCWARN("Querying IDXGIDevice2 for interface: %s", guid.c_str()); } return RefCountDXGIObject::QueryInterface(riid, ppvObject); @@ -712,7 +712,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice3::QueryInterface( REFIID riid, void else { string guid = ToStr::Get(riid); - RDCWARN("Querying IDXGIDevice3 for interface: %hs", guid.c_str()); + RDCWARN("Querying IDXGIDevice3 for interface: %s", guid.c_str()); } return RefCountDXGIObject::QueryInterface(riid, ppvObject); diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index 2858c3629..fa3afbb9b 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -24,7 +24,7 @@ #include "core/core.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "gl_common.h" #include "gl_driver.h" @@ -88,7 +88,7 @@ size_t BufferIdx(GLenum buf) case eGL_TRANSFORM_FEEDBACK_BUFFER: return 12; case eGL_UNIFORM_BUFFER: return 13; default: - RDCERR("Unexpected enum as buffer target: %hs", ToStr::Get(buf).c_str()); + RDCERR("Unexpected enum as buffer target: %s", ToStr::Get(buf).c_str()); } return 0; @@ -130,7 +130,7 @@ size_t ShaderIdx(GLenum buf) case eGL_FRAGMENT_SHADER: return 4; case eGL_COMPUTE_SHADER: return 5; default: - RDCERR("Unexpected enum as shader enum: %hs", ToStr::Get(buf).c_str()); + RDCERR("Unexpected enum as shader enum: %s", ToStr::Get(buf).c_str()); } return 0; @@ -177,7 +177,7 @@ ResourceFormat MakeResourceFormat(WrappedOpenGL &gl, GLenum target, GLenum fmt) ret.rawType = (uint32_t)fmt; ret.special = false; ret.specialFormat = eSpecial_Unknown; - ret.strname = widen(ToStr::Get(fmt)).substr(3); // 3 == strlen("GL_") + ret.strname = ToStr::Get(fmt).substr(3); // 3 == strlen("GL_") // special handling for formats that don't query neatly if(fmt == eGL_LUMINANCE8_EXT) @@ -530,7 +530,7 @@ static void ForAllProgramUniforms(const GLHookSet &gl, Serialiser *ser, GLuint p case eGL_UNSIGNED_INT_VEC4: case eGL_BOOL_VEC4: gl.glGetUniformuiv(progSrc, srcLocation, uiv); break; default: - RDCERR("Unhandled uniform type '%hs'", ToStr::Get(type).c_str()); + RDCERR("Unhandled uniform type '%s'", ToStr::Get(type).c_str()); } } @@ -648,7 +648,7 @@ static void ForAllProgramUniforms(const GLHookSet &gl, Serialiser *ser, GLuint p case eGL_UNSIGNED_INT_VEC4: case eGL_BOOL_VEC4: gl.glProgramUniform4uiv(progDst, newloc, 1, uiv); break; default: - RDCERR("Unhandled uniform type '%hs'", ToStr::Get(type).c_str()); + RDCERR("Unhandled uniform type '%s'", ToStr::Get(type).c_str()); } } } diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index bbdc3beee..4b7fa1e32 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -28,7 +28,7 @@ #include "maths/matrix.h" #include "maths/camera.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" GLuint GLReplay::CreateCShaderProgram(const char *csSrc) { @@ -51,7 +51,7 @@ GLuint GLReplay::CreateCShaderProgram(const char *csSrc) if(status == 0) { gl.glGetShaderInfoLog(cs, 1024, NULL, buffer); - RDCERR("Shader error: %hs", buffer); + RDCERR("Shader error: %s", buffer); } GLuint ret = gl.glCreateProgram(); @@ -64,7 +64,7 @@ GLuint GLReplay::CreateCShaderProgram(const char *csSrc) if(status == 0) { gl.glGetProgramInfoLog(ret, 1024, NULL, buffer); - RDCERR("Link error: %hs", buffer); + RDCERR("Link error: %s", buffer); } gl.glDeleteShader(cs); @@ -98,14 +98,14 @@ GLuint GLReplay::CreateShaderProgram(const char *vsSrc, const char *psSrc) if(status == 0) { gl.glGetShaderInfoLog(vs, 1024, NULL, buffer); - RDCERR("Shader error: %hs", buffer); + RDCERR("Shader error: %s", buffer); } gl.glGetShaderiv(fs, eGL_COMPILE_STATUS, &status); if(status == 0) { gl.glGetShaderInfoLog(fs, 1024, NULL, buffer); - RDCERR("Shader error: %hs", buffer); + RDCERR("Shader error: %s", buffer); } GLuint ret = gl.glCreateProgram(); diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 8a590511e..b087f2f5b 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -26,7 +26,7 @@ #include "common/common.h" #include "gl_driver.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "replay/type_helpers.h" @@ -283,7 +283,7 @@ ReplayCreateStatus GLInitParams::Serialise() return eReplayCreate_Success; } -WrappedOpenGL::WrappedOpenGL(const wchar_t *logfile, const GLHookSet &funcs) +WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs) : m_Real(funcs) { if(RenderDoc::Inst().GetCrashHandler()) @@ -689,14 +689,14 @@ void WrappedOpenGL::ActivateContext(void *windowHandle, void *contextHandle) if(status == 0) { gl.glGetShaderInfoLog(vs, 1024, NULL, buffer); - RDCERR("Shader error: %hs", buffer); + RDCERR("Shader error: %s", buffer); } gl.glGetShaderiv(fs, eGL_COMPILE_STATUS, &status); if(status == 0) { gl.glGetShaderInfoLog(fs, 1024, NULL, buffer); - RDCERR("Shader error: %hs", buffer); + RDCERR("Shader error: %s", buffer); } font.Program = gl.glCreateProgram(); @@ -710,7 +710,7 @@ void WrappedOpenGL::ActivateContext(void *windowHandle, void *contextHandle) if(status == 0) { gl.glGetProgramInfoLog(font.Program, 1024, NULL, buffer); - RDCERR("Link error: %hs", buffer); + RDCERR("Link error: %s", buffer); } gl.glDeleteShader(vs); @@ -1393,7 +1393,7 @@ void WrappedOpenGL::DebugSnoop(GLenum source, GLenum type, GLuint id, GLenum sev { if(type != eGL_DEBUG_TYPE_PERFORMANCE && (type != eGL_DEBUG_TYPE_OTHER || severity != eGL_DEBUG_SEVERITY_NOTIFICATION)) { - RDCLOG("Got a Debug message from %hs, type %hs, ID %d, severity %hs:\n'%hs'", + RDCLOG("Got a Debug message from %s, type %s, ID %d, severity %s:\n'%s'", ToStr::Get(source).c_str(), ToStr::Get(type).c_str(), id, ToStr::Get(severity).c_str(), message); } @@ -1529,7 +1529,7 @@ void WrappedOpenGL::ReadLogInitialisation() for(auto it=chunkInfos.begin(); it != chunkInfos.end(); ++it) { - RDCDEBUG("%hs: %.3f total time in %d chunks - %.3f average", + RDCDEBUG("%s: %.3f total time in %d chunks - %.3f average", GetChunkName(it->first), it->second.total, it->second.count, it->second.total/double(it->second.count)); } @@ -2167,7 +2167,7 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) AddEvent(CONTEXT_CAPTURE_FOOTER, "SwapBuffers()"); FetchDrawcall draw; - draw.name = L"SwapBuffers()"; + draw.name = "SwapBuffers()"; draw.flags |= eDraw_Present; AddDrawcall(draw, true); @@ -2406,7 +2406,7 @@ void WrappedOpenGL::AddEvent(GLChunkType type, string description, ResourceId ct apievent.fileOffset = m_CurChunkOffset; apievent.eventID = m_CurEventID; - apievent.eventDesc = widen(description); + apievent.eventDesc = description; Callstack::Stackwalk *stack = m_pSerialiser->GetLastCallstack(); if(stack) diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index ded2f0883..4f087b5dc 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -301,7 +301,7 @@ class WrappedOpenGL WrappedOpenGL &operator =(const WrappedOpenGL &); public: - WrappedOpenGL(const wchar_t *logfile, const GLHookSet &funcs); + WrappedOpenGL(const char *logfile, const GLHookSet &funcs); ~WrappedOpenGL(); GLResourceManager *GetResourceManager() { return m_ResourceManager; } diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 8239b983f..32599fa28 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -27,7 +27,7 @@ #include "gl_driver.h" #include "gl_resources.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" GLReplay::GLReplay() { @@ -326,7 +326,7 @@ void GLReplay::CacheTexture(ResourceId id) if(res.resource.Namespace == eResUnknown) RDCERR("Details for invalid texture id %llu requested", id); - tex.name = L""; + tex.name = ""; tex.customName = false; tex.format = ResourceFormat(); tex.dimension = 1; @@ -428,7 +428,7 @@ void GLReplay::CacheTexture(ResourceId id) default: tex.dimension = 2; - RDCERR("Unexpected texture enum %hs", ToStr::Get(target).c_str()); + RDCERR("Unexpected texture enum %s", ToStr::Get(target).c_str()); } tex.creationFlags = res.creationFlags; @@ -480,7 +480,7 @@ void GLReplay::CacheTexture(ResourceId id) } } - tex.name = widen(str); + tex.name = str; if(target == eGL_TEXTURE_BUFFER) { @@ -597,7 +597,7 @@ FetchBuffer GLReplay::GetBuffer(ResourceId id) case eGL_COPY_WRITE_BUFFER: break; default: - RDCERR("Unexpected buffer type %hs", ToStr::Get(res.curType).c_str()); + RDCERR("Unexpected buffer type %s", ToStr::Get(res.curType).c_str()); } GLint size; @@ -623,7 +623,7 @@ FetchBuffer GLReplay::GetBuffer(ResourceId id) str = StringFormat::Fmt("Buffer %llu", ret.ID); } - ret.name = widen(str); + ret.name = str; return ret; } @@ -769,15 +769,15 @@ void GLReplay::SavePipelineState() break; case eGL_UNSIGNED_BYTE: pipe.m_VtxIn.ibuffer.Format.compByteWidth = 1; - pipe.m_VtxIn.ibuffer.Format.strname = L"GL_UNSIGNED_BYTE"; + pipe.m_VtxIn.ibuffer.Format.strname = "GL_UNSIGNED_BYTE"; break; case eGL_UNSIGNED_SHORT: pipe.m_VtxIn.ibuffer.Format.compByteWidth = 2; - pipe.m_VtxIn.ibuffer.Format.strname = L"GL_UNSIGNED_SHORT"; + pipe.m_VtxIn.ibuffer.Format.strname = "GL_UNSIGNED_SHORT"; break; case eGL_UNSIGNED_INT: pipe.m_VtxIn.ibuffer.Format.compByteWidth = 4; - pipe.m_VtxIn.ibuffer.Format.strname = L"GL_UNSIGNED_INT"; + pipe.m_VtxIn.ibuffer.Format.strname = "GL_UNSIGNED_INT"; break; } @@ -831,68 +831,68 @@ void GLReplay::SavePipelineState() case eGL_BYTE: fmt.compByteWidth = 1; fmt.compType = normalized ? eCompType_SInt : eCompType_SNorm; - fmt.strname = StringFormat::WFmt(L"GL_BYTE%d", fmt.compCount) + (normalized ? L"" : L"_SNORM"); + fmt.strname = StringFormat::Fmt("GL_BYTE%d", fmt.compCount) + (normalized ? "" : "_SNORM"); break; case eGL_UNSIGNED_BYTE: fmt.compByteWidth = 1; fmt.compType = normalized ? eCompType_UInt : eCompType_UNorm; - fmt.strname = StringFormat::WFmt(L"GL_UNSIGNED_BYTE%d", fmt.compCount) + (normalized ? L"" : L"_UNORM"); + fmt.strname = StringFormat::Fmt("GL_UNSIGNED_BYTE%d", fmt.compCount) + (normalized ? "" : "_UNORM"); break; case eGL_SHORT: fmt.compByteWidth = 2; fmt.compType = normalized ? eCompType_SInt : eCompType_SNorm; - fmt.strname = StringFormat::WFmt(L"GL_SHORT%d", fmt.compCount) + (normalized ? L"" : L"_SNORM"); + fmt.strname = StringFormat::Fmt("GL_SHORT%d", fmt.compCount) + (normalized ? "" : "_SNORM"); break; case eGL_UNSIGNED_SHORT: fmt.compByteWidth = 2; fmt.compType = normalized ? eCompType_UInt : eCompType_UNorm; - fmt.strname = StringFormat::WFmt(L"GL_UNSIGNED_SHORT%d", fmt.compCount) + (normalized ? L"" : L"_UNORM"); + fmt.strname = StringFormat::Fmt("GL_UNSIGNED_SHORT%d", fmt.compCount) + (normalized ? "" : "_UNORM"); break; case eGL_INT: fmt.compByteWidth = 4; fmt.compType = normalized ? eCompType_SInt : eCompType_SNorm; - fmt.strname = StringFormat::WFmt(L"GL_INT%d", fmt.compCount) + (normalized ? L"" : L"_SNORM"); + fmt.strname = StringFormat::Fmt("GL_INT%d", fmt.compCount) + (normalized ? "" : "_SNORM"); break; case eGL_UNSIGNED_INT: fmt.compByteWidth = 4; fmt.compType = normalized ? eCompType_UInt : eCompType_UNorm; - fmt.strname = StringFormat::WFmt(L"GL_UNSIGNED_INT%d", fmt.compCount) + (normalized ? L"" : L"_UNORM"); + fmt.strname = StringFormat::Fmt("GL_UNSIGNED_INT%d", fmt.compCount) + (normalized ? "" : "_UNORM"); break; case eGL_FLOAT: fmt.compByteWidth = 4; fmt.compType = eCompType_Float; - fmt.strname = StringFormat::WFmt(L"GL_FLOAT%d", fmt.compCount); + fmt.strname = StringFormat::Fmt("GL_FLOAT%d", fmt.compCount); break; case eGL_DOUBLE: fmt.compByteWidth = 8; fmt.compType = eCompType_Double; - fmt.strname = StringFormat::WFmt(L"GL_DOUBLE%d", fmt.compCount); + fmt.strname = StringFormat::Fmt("GL_DOUBLE%d", fmt.compCount); break; case eGL_HALF_FLOAT: fmt.compByteWidth = 2; fmt.compType = eCompType_Float; - fmt.strname = StringFormat::WFmt(L"GL_HALF_FLOAT%d", fmt.compCount); + fmt.strname = StringFormat::Fmt("GL_HALF_FLOAT%d", fmt.compCount); break; case eGL_INT_2_10_10_10_REV: fmt.special = true; fmt.specialFormat = eSpecial_R10G10B10A2; fmt.compCount = 4; fmt.compType = eCompType_UInt; - fmt.strname = L"GL_INT_2_10_10_10_REV"; + fmt.strname = "GL_INT_2_10_10_10_REV"; break; case eGL_UNSIGNED_INT_2_10_10_10_REV: fmt.special = true; fmt.specialFormat = eSpecial_R10G10B10A2; fmt.compCount = 4; fmt.compType = eCompType_SInt; - fmt.strname = L"eGL_UNSIGNED_INT_2_10_10_10_REV"; + fmt.strname = "eGL_UNSIGNED_INT_2_10_10_10_REV"; break; case eGL_UNSIGNED_INT_10F_11F_11F_REV: fmt.special = true; fmt.specialFormat = eSpecial_R11G11B10; fmt.compCount = 3; fmt.compType = eCompType_SInt; - fmt.strname = L"eGL_UNSIGNED_INT_10F_11F_11F_REV"; + fmt.strname = "eGL_UNSIGNED_INT_10F_11F_11F_REV"; break; } @@ -1107,7 +1107,7 @@ void GLReplay::SavePipelineState() } else if(binding != t) { - RDCWARN("Two uniforms pointing to texture unit %d with types %hs and %hs", unit, ToStr::Get(binding).c_str(), ToStr::Get(t).c_str()); + RDCWARN("Two uniforms pointing to texture unit %d with types %s and %s", unit, ToStr::Get(binding).c_str(), ToStr::Get(t).c_str()); } } } @@ -1366,7 +1366,7 @@ void GLReplay::FillCBufferVariables(WrappedOpenGL &gl, GLuint prog, bool bufferB for(uint32_t a=0; a < desc.elements; a++) { ShaderVariable arrEl = var; - arrEl.name = StringFormat::Fmt("%hs[%u]", var.name.elems, a); + arrEl.name = StringFormat::Fmt("%s[%u]", var.name.elems, a); vector ov; FillCBufferVariables(gl, prog, bufferBacked, prefix + arrEl.name.elems + ".", variables[i].type.members, ov, data); @@ -1393,7 +1393,7 @@ void GLReplay::FillCBufferVariables(WrappedOpenGL &gl, GLuint prog, bool bufferB if(idx == GL_INVALID_INDEX) { - RDCERR("Can't find program resource index for %hs", fullname.c_str()); + RDCERR("Can't find program resource index for %s", fullname.c_str()); } else { @@ -1419,7 +1419,7 @@ void GLReplay::FillCBufferVariables(WrappedOpenGL &gl, GLuint prog, bool bufferB for(uint32_t a=0; a < desc.elements; a++) { ShaderVariable el = var; - el.name = StringFormat::Fmt("%hs[%u]", var.name.elems, a); + el.name = StringFormat::Fmt("%s[%u]", var.name.elems, a); FillCBufferValue(gl, prog, bufferBacked, desc.rowMajorStorage ? true : false, values[0] + values[2] * a, values[1], data, el); @@ -1595,6 +1595,6 @@ void GLReplay::SetProxyTextureData(ResourceId texid, uint32_t arrayIdx, uint32_t const GLHookSet &GetRealFunctions(); // defined in gl_replay_.cpp -ReplayCreateStatus GL_CreateReplayDevice(const wchar_t *logfile, IReplayDriver **driver); +ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **driver); -static DriverRegistration GLDriverRegistration(RDC_OpenGL, L"OpenGL", &GL_CreateReplayDevice); +static DriverRegistration GLDriverRegistration(RDC_OpenGL, "OpenGL", &GL_CreateReplayDevice); diff --git a/renderdoc/driver/gl/gl_replay_linux.cpp b/renderdoc/driver/gl/gl_replay_linux.cpp index e59654c6b..f6aafa60a 100644 --- a/renderdoc/driver/gl/gl_replay_linux.cpp +++ b/renderdoc/driver/gl/gl_replay_linux.cpp @@ -195,7 +195,7 @@ bool GLReplay::IsOutputWindowVisible(uint64_t id) const GLHookSet &GetRealFunctions(); -ReplayCreateStatus GL_CreateReplayDevice(const wchar_t *logfile, IReplayDriver **driver) +ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **driver) { RDCDEBUG("Creating an OpenGL replay device"); @@ -230,7 +230,7 @@ ReplayCreateStatus GL_CreateReplayDevice(const wchar_t *logfile, IReplayDriver * GLInitParams initParams; RDCDriver driverType = RDC_OpenGL; - wstring driverName = L"OpenGL"; + string driverName = "OpenGL"; if(logfile) RenderDoc::Inst().FillInitParams(logfile, driverType, driverName, (RDCInitParams *)&initParams); diff --git a/renderdoc/driver/gl/gl_replay_win32.cpp b/renderdoc/driver/gl/gl_replay_win32.cpp index 4d27f3ba4..d0a6173fc 100644 --- a/renderdoc/driver/gl/gl_replay_win32.cpp +++ b/renderdoc/driver/gl/gl_replay_win32.cpp @@ -169,7 +169,7 @@ bool GLReplay::IsOutputWindowVisible(uint64_t id) const GLHookSet &GetRealFunctions(); -ReplayCreateStatus GL_CreateReplayDevice(const wchar_t *logfile, IReplayDriver **driver) +ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **driver) { RDCDEBUG("Creating an OpenGL replay device"); @@ -183,7 +183,7 @@ ReplayCreateStatus GL_CreateReplayDevice(const wchar_t *logfile, IReplayDriver * GLInitParams initParams; RDCDriver driverType = RDC_OpenGL; - wstring driverName = L"OpenGL"; + string driverName = "OpenGL"; if(logfile) RenderDoc::Inst().FillInitParams(logfile, driverType, driverName, (RDCInitParams *)&initParams); diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index 35a58ce78..5f04a7f64 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" #pragma region Buffers diff --git a/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp index c9bbabf14..34942c19b 100644 --- a/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" @@ -111,7 +111,7 @@ void WrappedOpenGL::glDebugMessageControl(GLenum source, GLenum type, GLenum sev bool WrappedOpenGL::Serialise_glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf) { - wstring name = buf ? widen(string(buf, buf+length)) : L""; + string name = buf ? string(buf, buf+length) : ""; m_pSerialiser->Serialise("Name", name); @@ -142,7 +142,7 @@ void WrappedOpenGL::glDebugMessageInsert(GLenum source, GLenum type, GLuint id, bool WrappedOpenGL::Serialise_glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message) { - wstring name = message ? widen(string(message, message+length)) : L""; + string name = message ? string(message, message+length) : ""; m_pSerialiser->Serialise("Name", name); @@ -176,7 +176,7 @@ bool WrappedOpenGL::Serialise_glPopDebugGroup() if(m_State == READING && !m_CurEvents.empty()) { FetchDrawcall draw; - draw.name = L"API Calls"; + draw.name = "API Calls"; draw.flags |= eDraw_SetMarker; AddDrawcall(draw, true); diff --git a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp index 15b573e3c..b251d4835 100644 --- a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" bool WrappedOpenGL::Serialise_glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) @@ -50,7 +50,7 @@ bool WrappedOpenGL::Serialise_glDispatchCompute(GLuint num_groups_x, GLuint num_ ToStr::Get(Z) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Dispatch; draw.debugMessages = debugMessages; @@ -98,7 +98,7 @@ bool WrappedOpenGL::Serialise_glDispatchComputeIndirect(GLintptr indirect) RDCUNIMPLEMENTED("Not fetching indirect data for glDispatchComputeIndirect() display"); FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Dispatch; draw.debugMessages = debugMessages; @@ -171,7 +171,7 @@ bool WrappedOpenGL::Serialise_glDrawArrays(GLenum mode, GLint first, GLsizei cou ToStr::Get(Count) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = 1; draw.indexOffset = 0; @@ -226,7 +226,7 @@ bool WrappedOpenGL::Serialise_glDrawArraysIndirect(GLenum mode, const void *indi RDCUNIMPLEMENTED("Not fetching indirect data for glDrawArraysIndirect() display"); FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = 1; draw.numInstances = 1; draw.indexOffset = 0; @@ -284,7 +284,7 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstanced(GLenum mode, GLint first, GL ToStr::Get(InstanceCount) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = InstanceCount; draw.indexOffset = 0; @@ -344,7 +344,7 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstancedBaseInstance(GLenum mode, GLi ToStr::Get(BaseInstance) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = InstanceCount; draw.indexOffset = 0; @@ -402,7 +402,7 @@ bool WrappedOpenGL::Serialise_glDrawElements(GLenum mode, GLsizei count, GLenum ToStr::Get(IdxOffset) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = 1; draw.indexOffset = (uint32_t)IdxOffset; @@ -461,7 +461,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsIndirect(GLenum mode, GLenum type, c RDCUNIMPLEMENTED("Not fetching indirect data for glDrawElementsIndirect() display"); FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = 1; draw.numInstances = 1; draw.indexOffset = 0; @@ -523,7 +523,7 @@ bool WrappedOpenGL::Serialise_glDrawRangeElements(GLenum mode, GLuint start, GLu ToStr::Get(IdxOffset) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = 1; draw.indexOffset = (uint32_t)IdxOffset; @@ -585,7 +585,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei coun ToStr::Get(BaseVtx) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = 1; draw.indexOffset = (uint32_t)IdxOffset; @@ -647,7 +647,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstanced(GLenum mode, GLsizei count ToStr::Get(InstCount) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = InstCount; draw.indexOffset = (uint32_t)IdxOffset; @@ -711,7 +711,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseInstance(GLenum mode, G ToStr::Get(BaseInstance) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = InstCount; draw.indexOffset = (uint32_t)IdxOffset; @@ -775,7 +775,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertex(GLenum mode, GLs ToStr::Get(BaseVertex) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = InstCount; draw.indexOffset = (uint32_t)IdxOffset; @@ -841,7 +841,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertexBaseInstance(GLen ToStr::Get(BaseInstance) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = Count; draw.numInstances = InstCount; draw.indexOffset = (uint32_t)IdxOffset; @@ -902,7 +902,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first, RDCUNIMPLEMENTED("Not processing multi-draw data for glMultiDrawArrays() display"); FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = 1; draw.numInstances = 1; draw.indexOffset = 0; @@ -986,7 +986,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co RDCUNIMPLEMENTED("Not processing multi-draw data for glMultiDrawElements() display"); FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.numIndices = 1; draw.numInstances = 1; draw.indexOffset = 0; @@ -1056,7 +1056,7 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c ToStr::Get(draw) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear; draw.debugMessages = debugMessages; @@ -1116,7 +1116,7 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c ToStr::Get(draw) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear; draw.debugMessages = debugMessages; @@ -1168,7 +1168,7 @@ bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer, ToStr::Get(draw) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear; draw.debugMessages = debugMessages; @@ -1214,7 +1214,7 @@ bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, G ToStr::Get(draw) + ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear; draw.debugMessages = debugMessages; @@ -1442,7 +1442,7 @@ bool WrappedOpenGL::Serialise_glClear(GLbitfield mask) name += ")"; FetchDrawcall draw; - draw.name = widen(name); + draw.name = name; draw.flags |= eDraw_Clear; draw.debugMessages = debugMessages; diff --git a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp index 25e31de6c..6f6dfe521 100644 --- a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" bool WrappedOpenGL::Serialise_glGenFramebuffers(GLsizei n, GLuint* framebuffers) diff --git a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp index a980fece6..dae5ada6a 100644 --- a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" diff --git a/renderdoc/driver/gl/wrappers/gl_query_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_query_funcs.cpp index 728d792ac..151a1d5e9 100644 --- a/renderdoc/driver/gl/wrappers/gl_query_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_query_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" bool WrappedOpenGL::Serialise_glFenceSync(GLsync real, GLenum condition, GLbitfield flags) diff --git a/renderdoc/driver/gl/wrappers/gl_sampler_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_sampler_funcs.cpp index 283f8607f..c49e8185d 100644 --- a/renderdoc/driver/gl/wrappers/gl_sampler_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_sampler_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" bool WrappedOpenGL::Serialise_glGenSamplers(GLsizei n, GLuint* samplers) diff --git a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp index 3f1a33618..b46a58057 100644 --- a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" #include "../gl_shader_refl.h" diff --git a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp index 6d67efe4f..8dff126c7 100644 --- a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" diff --git a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp index 4cc32ec3d..8b2f0d059 100644 --- a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" bool WrappedOpenGL::Serialise_glGenTextures(GLsizei n, GLuint* textures) diff --git a/renderdoc/driver/gl/wrappers/gl_uniform_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_uniform_funcs.cpp index 1cd7b6db8..0134129a5 100644 --- a/renderdoc/driver/gl/wrappers/gl_uniform_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_uniform_funcs.cpp @@ -23,7 +23,7 @@ ******************************************************************************/ #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "../gl_driver.h" bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint location, GLsizei count, const void *value, UniformType type) diff --git a/renderdoc/hooks/gl_linux_hooks.cpp b/renderdoc/hooks/gl_linux_hooks.cpp index 1284fec10..e96cdd88f 100644 --- a/renderdoc/hooks/gl_linux_hooks.cpp +++ b/renderdoc/hooks/gl_linux_hooks.cpp @@ -292,7 +292,7 @@ class OpenGLHook : LibraryHook WrappedOpenGL *GetDriver() { if(m_GLDriver == NULL) - m_GLDriver = new WrappedOpenGL(L"", GL); + m_GLDriver = new WrappedOpenGL("", GL); return m_GLDriver; } diff --git a/renderdoc/hooks/gl_win32_hooks.cpp b/renderdoc/hooks/gl_win32_hooks.cpp index ee811a15a..c246366df 100644 --- a/renderdoc/hooks/gl_win32_hooks.cpp +++ b/renderdoc/hooks/gl_win32_hooks.cpp @@ -28,7 +28,7 @@ #include "driver/gl/gl_driver.h" #include "common/threading.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "hooks.h" @@ -36,7 +36,7 @@ #define HookInit(function) \ bool CONCAT(function, _success) = CONCAT(function, _hook).Initialize(STRINGIZE(function), DLL_NAME, CONCAT(function, _hooked)); \ - if(!CONCAT(function, _success)) RDCWARN("Couldn't hook %hs", STRINGIZE(function)); \ + if(!CONCAT(function, _success)) RDCWARN("Couldn't hook %s", STRINGIZE(function)); \ success &= CONCAT(function, _success); \ GL.function = CONCAT(function, _hook)(); @@ -255,7 +255,7 @@ class OpenGLHook : LibraryHook WrappedOpenGL *GetDriver() { if(m_GLDriver == NULL) - m_GLDriver = new WrappedOpenGL(L"", GL); + m_GLDriver = new WrappedOpenGL("", GL); return m_GLDriver; } @@ -451,7 +451,7 @@ class OpenGLHook : LibraryHook PROC realFunc = glhooks.wglGetProcAddress_realfunc(func); #if 0 - RDCDEBUG("Checking for extension - %hs - real function is %p", func, realFunc); + RDCDEBUG("Checking for extension - %s - real function is %p", func, realFunc); #endif // if the real RC doesn't support this function, don't bother hooking @@ -494,7 +494,7 @@ class OpenGLHook : LibraryHook HookCheckGLExtensions(); // claim not to know this extension! - RDCWARN("Claiming not to know extension that is available - %hs", func); + RDCWARN("Claiming not to know extension that is available - %s", func); return NULL; } diff --git a/renderdoc/hooks/hooks.cpp b/renderdoc/hooks/hooks.cpp index 9f34e899f..62ca89973 100644 --- a/renderdoc/hooks/hooks.cpp +++ b/renderdoc/hooks/hooks.cpp @@ -42,15 +42,15 @@ void LibraryHooks::CreateHooks() HOOKS_BEGIN(); for(auto it=m_Hooks.begin(); it!=m_Hooks.end(); ++it) { - RDCDEBUG("Attempting to hook %hs", it->first); + RDCDEBUG("Attempting to hook %s", it->first); if(it->second->CreateHooks(it->first)) { - RDCLOG("Loaded and hooked into %hs, PID %d", it->first, Process::GetCurrentPID()); + RDCLOG("Loaded and hooked into %s, PID %d", it->first, Process::GetCurrentPID()); } else { - RDCWARN("Couldn't hook into %hs", it->first); + RDCWARN("Couldn't hook into %s", it->first); } } HOOKS_END(); @@ -58,7 +58,7 @@ void LibraryHooks::CreateHooks() void LibraryHooks::EnableHooks(bool enable) { - RDCDEBUG("%hs hooks!", enable ? "Enabling" : "Disabling"); + RDCDEBUG("%s hooks!", enable ? "Enabling" : "Disabling"); if(!enable) return; diff --git a/renderdoc/hooks/linux_libentry.cpp b/renderdoc/hooks/linux_libentry.cpp index b5cb8c79e..7a0ba5b61 100644 --- a/renderdoc/hooks/linux_libentry.cpp +++ b/renderdoc/hooks/linux_libentry.cpp @@ -30,11 +30,11 @@ __attribute__((constructor)) void library_loaded() { - wstring curfile; + string curfile; FileIO::GetExecutableFilename(curfile); - if(curfile.find(L"/renderdoccmd") != wstring::npos || - curfile.find(L"/renderdocui") != wstring::npos) + if(curfile.find("/renderdoccmd") != string::npos || + curfile.find("/renderdocui") != string::npos) { RDCDEBUG("Not creating hooks - in replay app"); diff --git a/renderdoc/hooks/sys_win32_hooks.cpp b/renderdoc/hooks/sys_win32_hooks.cpp index dec7b422b..4ce45a102 100644 --- a/renderdoc/hooks/sys_win32_hooks.cpp +++ b/renderdoc/hooks/sys_win32_hooks.cpp @@ -25,7 +25,7 @@ #include "core/core.h" #include "api/replay/renderdoc_replay.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "hooks.h" diff --git a/renderdoc/hooks/win32_libentry.cpp b/renderdoc/hooks/win32_libentry.cpp index 25c67dbd0..899b78fe0 100644 --- a/renderdoc/hooks/win32_libentry.cpp +++ b/renderdoc/hooks/win32_libentry.cpp @@ -28,7 +28,7 @@ #include #include "common/common.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "hooks/hooks.h" #include "core/core.h" @@ -72,17 +72,6 @@ BOOL add_hooks() RDCLOG("Loading into %ls", curFile); - const wchar_t *appFilter = NULL; //L"MyApplication"; - - if(appFilter != NULL) - { - if(wcsstr(curFile, appFilter) == 0) - { - RDCDEBUG("Not app I want. Exiting"); - return TRUE; - } - } - LibraryHooks::GetInstance().CreateHooks(); return TRUE; diff --git a/renderdoc/os/linux/linux_callstack.cpp b/renderdoc/os/linux/linux_callstack.cpp index 006613f36..f3e758600 100644 --- a/renderdoc/os/linux/linux_callstack.cpp +++ b/renderdoc/os/linux/linux_callstack.cpp @@ -30,7 +30,7 @@ namespace Callstack void Init() {} Stackwalk *Collect() { RDCUNIMPLEMENTED(); return NULL; } Stackwalk *Load(uint64_t *calls, size_t numLevels) { RDCUNIMPLEMENTED(); return NULL; } - StackResolver *MakeResolver(char *moduleDB, size_t DBSize, wstring pdbSearchPaths, volatile bool *killSignal) { RDCUNIMPLEMENTED(); return NULL; } + StackResolver *MakeResolver(char *moduleDB, size_t DBSize, string pdbSearchPaths, volatile bool *killSignal) { RDCUNIMPLEMENTED(); return NULL; } bool GetLoadedModules(char *&buf, size_t &size) { RDCUNIMPLEMENTED(); return false; } }; diff --git a/renderdoc/os/linux/linux_network.cpp b/renderdoc/os/linux/linux_network.cpp index 315df7200..9af69961a 100644 --- a/renderdoc/os/linux/linux_network.cpp +++ b/renderdoc/os/linux/linux_network.cpp @@ -37,7 +37,6 @@ #include using std::string; -using std::wstring; #include "common/string_utils.h" #include "os/os_specific.h" @@ -262,7 +261,7 @@ Socket *CreateServerSocket(const char *bindaddr, uint16_t port, int queuesize) return new Socket((ptrdiff_t)s); } -Socket *CreateClientSocket(const wchar_t *host, uint16_t port, int timeoutMS) +Socket *CreateClientSocket(const char *host, uint16_t port, int timeoutMS) { char portstr[7] = {0}; StringFormat::snprintf(portstr, 6, "%d", port); @@ -273,15 +272,8 @@ Socket *CreateClientSocket(const wchar_t *host, uint16_t port, int timeoutMS) hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; - - wstring hostWide = wstring(host); - string hoststr = narrow(hostWide); - - if(widen(hoststr) != hostWide) - RDCWARN("Unicode hostname truncated: %S", hostWide.c_str()); - addrinfo *result = NULL; - getaddrinfo(hoststr.c_str(), portstr, &hints, &result); + getaddrinfo(host, portstr, &hints, &result); for(addrinfo *ptr = result; ptr != NULL; ptr = ptr->ai_next) { diff --git a/renderdoc/os/linux/linux_process.cpp b/renderdoc/os/linux/linux_process.cpp index c017b4ed4..e3eeeeca5 100644 --- a/renderdoc/os/linux/linux_process.cpp +++ b/renderdoc/os/linux/linux_process.cpp @@ -27,20 +27,20 @@ #include #include -uint32_t Process::InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit) +uint32_t Process::InjectIntoProcess(uint32_t pid, const char *logfile, const CaptureOptions *opts, bool waitForExit) { RDCUNIMPLEMENTED(); return 0; } -uint32_t Process::CreateAndInjectIntoProcess(const wchar_t *app, const wchar_t *workingDir, const wchar_t *cmdLine, - const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit) +uint32_t Process::CreateAndInjectIntoProcess(const char *app, const char *workingDir, const char *cmdLine, + const char *logfile, const CaptureOptions *opts, bool waitForExit) { RDCUNIMPLEMENTED(); return 0; } -void Process::StartGlobalHook(const wchar_t *pathmatch, const wchar_t *logfile, const CaptureOptions *opts) +void Process::StartGlobalHook(const char *pathmatch, const char *logfile, const CaptureOptions *opts) { RDCUNIMPLEMENTED(); } diff --git a/renderdoc/os/linux/linux_stringio.cpp b/renderdoc/os/linux/linux_stringio.cpp index ac266f361..0feddaffd 100644 --- a/renderdoc/os/linux/linux_stringio.cpp +++ b/renderdoc/os/linux/linux_stringio.cpp @@ -119,15 +119,15 @@ namespace Keyboard namespace FileIO { - void GetExecutableFilename(wstring &selfName) + void GetExecutableFilename(string &selfName) { char path[512] = {0}; readlink("/proc/self/exe", path, 511); - selfName = widen(string(path)); + selfName = string(path); } - void GetDefaultFiles(const wchar_t *logBaseName, wstring &capture_filename, wstring &logging_filename, wstring &target) + void GetDefaultFiles(const char *logBaseName, string &capture_filename, string &logging_filename, string &target) { char path[512] = {0}; readlink("/proc/self/exe", path, 511); @@ -137,7 +137,7 @@ namespace FileIO else mod++; - target = widen(string(mod)); + target = string(mod); time_t t = time(NULL); tm now = *localtime(&t); @@ -146,21 +146,17 @@ namespace FileIO snprintf(temp_filename, 511, "/tmp/%s_%04d.%02d.%02d_%02d.%02d.rdc", mod, 1900+now.tm_year, now.tm_mon+1, now.tm_mday, now.tm_hour, now.tm_min); - capture_filename = widen(string(temp_filename)); + capture_filename = string(temp_filename); - string baseName = narrow(wstring(logBaseName)); + snprintf(temp_filename, 511, "/tmp/%s_%04d.%02d.%02d_%02d.%02d.%02d.log", logBaseName, 1900+now.tm_year, now.tm_mon+1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec); - snprintf(temp_filename, 511, "/tmp/%s_%04d.%02d.%02d_%02d.%02d.%02d.log", baseName.c_str(), 1900+now.tm_year, now.tm_mon+1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec); - - logging_filename = widen(string(temp_filename)); + logging_filename = string(temp_filename); } - uint64_t GetModifiedTimestamp(const wchar_t *filename) + uint64_t GetModifiedTimestamp(const char *filename) { - string fn = narrow(wstring(filename)); - struct ::stat st; - int res = stat(fn.c_str(), &st); + int res = stat(filename, &st); if(res == 0) { @@ -170,7 +166,7 @@ namespace FileIO return 0; } - void CopyFileW(const wchar_t *from, const wchar_t *to, bool allowOverwrite) + void Copy(const char *from, const char *to, bool allowOverwrite) { if(from[0] == 0 || to[0] == 0) return; @@ -178,26 +174,14 @@ namespace FileIO RDCUNIMPLEMENTED(); } - void UnlinkFileW(const wchar_t *path) + void Delete(const char *path) { - string fn = narrow(wstring(path)); - - unlink(fn.c_str()); + unlink(path); } - FILE *fopen(const wchar_t *filename, const wchar_t *mode) + FILE *fopen(const char *filename, const char *mode) { - string fn = narrow(wstring(filename)); - - char m[5]; - - for(int i=0; i < 5; i++) - { - if(!mode[i]) break; - m[i] = (char)mode[i]; - } - - return ::fopen(fn.c_str(), m); + return ::fopen(filename, mode); } size_t fread(void *buf, size_t elementSize, size_t count, FILE *f) { return ::fread(buf, elementSize, count, f); } @@ -211,35 +195,6 @@ namespace FileIO namespace StringFormat { - int snprintf(char *str, size_t bufSize, const char *fmt, ...) - { - va_list args; - va_start(args, fmt); - - int ret = vsnprintf(str, bufSize, fmt, args); - - va_end(args); - - return ret; - } - - int vsnprintf(char *str, size_t bufSize, const char *format, va_list args) - { - return ::vsnprintf(str, bufSize, format, args); - } - - int wsnprintf(wchar_t *str, size_t bufSize, const wchar_t *fmt, ...) - { - va_list args; - va_start(args, fmt); - - int ret = vswprintf(str, bufSize, fmt, args); - - va_end(args); - - return ret; - } - void sntimef(char *str, size_t bufSize, const char *format) { time_t tim; @@ -250,26 +205,23 @@ namespace StringFormat strftime(str, bufSize, format, tmv); } - void wcsncpy(wchar_t *dst, const wchar_t *src, size_t count) - { - ::wcsncpy(dst, src, count); - } - string Fmt(const char *format, ...) { va_list args; va_start(args, format); - int size = ::vsnprintf(NULL, 0, format, args)+1; + va_list args2; + va_copy(args2, args); - va_end(args); - va_start(args, format); + int size = StringFormat::vsnprintf(NULL, 0, format, args2); - char *buf = new char[size]; + char *buf = new char[size+1]; + buf[size] = 0; StringFormat::vsnprintf(buf, size, format, args); va_end(args); + va_end(args2); string ret = buf; @@ -278,53 +230,22 @@ namespace StringFormat return ret; } - wstring WFmt(const wchar_t *format, ...) - { - va_list args; - va_start(args, format); - - FILE *f = ::fopen("/dev/null", "wb"); - - int size = ::vfwprintf(f, format, args)+1; - - fclose(f); - - va_end(args); - va_start(args, format); - - wchar_t *buf = new wchar_t[size]; - - ::vswprintf(buf, size, format, args); - - va_end(args); - - wstring ret = buf; - - delete[] buf; - - return ret; - } - - // save on reallocation, keep a persistent scratch buffer for conversions - vector charBuffer; - vector wcharBuffer; - - // cache iconv_t descriptors to save on iconv_open/iconv_close each time + // cache iconv_t descriptor to save on iconv_open/iconv_close each time iconv_t iconvWide2UTF8 = (iconv_t)-1; - iconv_t iconvUTF82Wide = (iconv_t)-1; // iconv is not thread safe when sharing an iconv_t descriptor // I don't expect much contention but if it happens we could TryLock // before creating a temporary iconv_t, or hold two iconv_ts, or something. - Threading::CriticalSection lockWide2UTF8, lockUTF82Wide; + Threading::CriticalSection lockWide2UTF8; - string Wide2UTF8(const wstring &s) + string Wide2UTF8(const std::wstring &s) { // include room for null terminator, assuming unicode input (not ucs) - // utf-8 characters can be max 4 bytes. We can afford to be generous about - // this length as we resize relatively rarely. + // utf-8 characters can be max 4 bytes. size_t len = (s.length()+1)*4; + vector charBuffer; + if(charBuffer.size() < len) charBuffer.resize(len); @@ -353,7 +274,7 @@ namespace StringFormat if(ret == (size_t)-1) { #if !defined(_RELEASE) - RDCWARN("Failed to convert wstring: \"%ls\"", s.c_str()); + RDCWARN("Failed to convert wstring"); #endif return ""; } @@ -363,46 +284,16 @@ namespace StringFormat // charBuffer is larger than the string return string(&charBuffer[0]); } +}; - wstring UTF82Wide(const string &s) +namespace OSUtility +{ + void WriteOutput(int channel, const char *str) { - // Include room for null terminator. Since we're converting from utf-8, - // worst case it's ascii and every byte is a character so length is the same - size_t len = s.length()+1; - - if(wcharBuffer.size() < len) - wcharBuffer.resize(len); - - size_t ret; - - { - SCOPED_LOCK(lockUTF82Wide); - - if(iconvUTF82Wide == (iconv_t)-1) - iconvUTF82Wide = iconv_open("WCHAR_T", "UTF-8"); - - if(iconvUTF82Wide == (iconv_t)-1) - { - RDCERR("Couldn't open iconv for UTF-8 to WCHAR_T: %d", errno); - return L""; - } - - char *inbuf = (char *)s.c_str(); - size_t insize = s.length()+1; // include null terminator - char *outbuf = (char *)&wcharBuffer[0]; - size_t outsize = len*sizeof(wchar_t); - - ret = iconv(iconvUTF82Wide, &inbuf, &insize, &outbuf, &outsize); - } - - if(ret == (size_t)-1) - { -#if !defined(_RELEASE) - RDCWARN("Failed to convert utf-8 string: \"%s\"", s.c_str()); -#endif - return L""; - } - - return wstring(&wcharBuffer[0]); + if(channel == OSUtility::Output_StdOut) + fprintf(stdout, "%s", str); + else if(channel == OSUtility::Output_StdErr) + fprintf(stderr, "%s", str); } }; + diff --git a/renderdoc/os/linux_specific.h b/renderdoc/os/linux_specific.h index d317042a7..d7021fe3e 100644 --- a/renderdoc/os/linux_specific.h +++ b/renderdoc/os/linux_specific.h @@ -41,7 +41,7 @@ namespace OSUtility inline void ForceCrash() { __builtin_trap(); } inline void DebugBreak() { raise(SIGTRAP); } inline bool DebuggerPresent() { return true; } - inline void DebugOutputA(const char *str) { } + void WriteOutput(int channel, const char *str); }; namespace Threading diff --git a/renderdoc/os/os_specific.cpp b/renderdoc/os/os_specific.cpp index 14bdd57ef..dd39d6d68 100644 --- a/renderdoc/os/os_specific.cpp +++ b/renderdoc/os/os_specific.cpp @@ -24,7 +24,7 @@ #include "os/os_specific.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include @@ -93,16 +93,16 @@ int Wide2UTF8(wchar_t chr, char mbchr[4]) }; // namespace StringFormat -wstring Callstack::AddressDetails::formattedString(const char *commonPath) +string Callstack::AddressDetails::formattedString(const char *commonPath) { - wchar_t fmt[512] = {0}; + char fmt[512] = {0}; - const wchar_t *f = filename.c_str(); + const char *f = filename.c_str(); if(commonPath) { - wstring common = strlower(widen(string(commonPath))); - wstring fn = strlower(filename.substr(0, common.length())); + string common = strlower(string(commonPath)); + string fn = strlower(filename.substr(0, common.length())); if(common == fn) { @@ -111,9 +111,9 @@ wstring Callstack::AddressDetails::formattedString(const char *commonPath) } if(line > 0) - swprintf(fmt, 511, L"%ls line %d", function.c_str(), line); + StringFormat::snprintf(fmt, 511, "%s line %d", function.c_str(), line); else - swprintf(fmt, 511, L"%ls", function.c_str()); + StringFormat::snprintf(fmt, 511, "%s", function.c_str()); return fmt; } \ No newline at end of file diff --git a/renderdoc/os/os_specific.h b/renderdoc/os/os_specific.h index ce45135df..a74a83e34 100644 --- a/renderdoc/os/os_specific.h +++ b/renderdoc/os/os_specific.h @@ -39,17 +39,16 @@ #include #include using std::string; -using std::wstring; using std::vector; struct CaptureOptions; namespace Process { - void StartGlobalHook(const wchar_t *pathmatch, const wchar_t *logfile, const CaptureOptions *opts); - uint32_t InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit); - uint32_t CreateAndInjectIntoProcess(const wchar_t *app, const wchar_t *workingDir, const wchar_t *cmdLine, - const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit); + void StartGlobalHook(const char *pathmatch, const char *logfile, const CaptureOptions *opts); + uint32_t InjectIntoProcess(uint32_t pid, const char *logfile, const CaptureOptions *opts, bool waitForExit); + uint32_t CreateAndInjectIntoProcess(const char *app, const char *workingDir, const char *cmdLine, + const char *logfile, const CaptureOptions *opts, bool waitForExit); void *GetFunctionAddress(const char *module, const char *function); uint32_t GetCurrentPID(); }; @@ -119,7 +118,7 @@ namespace Network }; Socket *CreateServerSocket(const char *addr, uint16_t port, int queuesize); - Socket *CreateClientSocket(const wchar_t *host, uint16_t port, int timeoutMS); + Socket *CreateClientSocket(const char *host, uint16_t port, int timeoutMS); void Init(); void Shutdown(); @@ -147,11 +146,11 @@ namespace Callstack { AddressDetails() : line(0) {} - wstring function; - wstring filename; + string function; + string filename; uint32_t line; - wstring formattedString(const char *commonPath = NULL); + string formattedString(const char *commonPath = NULL); }; class StackResolver @@ -166,24 +165,24 @@ namespace Callstack Stackwalk *Collect(); Stackwalk *Load(uint64_t *calls, size_t numLevels); - StackResolver *MakeResolver(char *moduleDB, size_t DBSize, wstring pdbSearchPaths, volatile bool *killSignal); + StackResolver *MakeResolver(char *moduleDB, size_t DBSize, string pdbSearchPaths, volatile bool *killSignal); bool GetLoadedModules(char *&buf, size_t &size); }; // namespace Callstack namespace FileIO { - void GetDefaultFiles(const wchar_t *logBaseName, wstring &capture_filename, wstring &logging_filename, wstring &target); - wstring GetAppFolderFilename(wstring filename); + void GetDefaultFiles(const char *logBaseName, string &capture_filename, string &logging_filename, string &target); + string GetAppFolderFilename(string filename); - void GetExecutableFilename(wstring &selfName); + void GetExecutableFilename(string &selfName); - uint64_t GetModifiedTimestamp(const wchar_t *filename); + uint64_t GetModifiedTimestamp(const char *filename); - void CopyFileW(const wchar_t *from, const wchar_t *to, bool allowOverwrite); - void UnlinkFileW(const wchar_t *path); + void Copy(const char *from, const char *to, bool allowOverwrite); + void Delete(const char *path); - FILE *fopen(const wchar_t *filename, const wchar_t *mode); + FILE *fopen(const char *filename, const char *mode); size_t fread(void *buf, size_t elementSize, size_t count, FILE *f); size_t fwrite(const void *buf, size_t elementSize, size_t count, FILE *f); @@ -210,12 +209,7 @@ namespace StringFormat // forwards to vsnprintf below, needed to be here due to va_copy differences string Fmt(const char *format, ...); - string Wide2UTF8(const wstring &s); - wstring UTF82Wide(const string &s); - - // TODO remove - int wsnprintf(wchar_t *str, size_t bufSize, const wchar_t *format, ...); - wstring WFmt(const wchar_t *format, ...); + string Wide2UTF8(const std::wstring &s); }; // utility functions, implemented in os_specific.cpp, not per-platform (assuming standard stdarg.h) diff --git a/renderdoc/os/win32/win32_callstack.cpp b/renderdoc/os/win32/win32_callstack.cpp index d5ff8fcea..2db38f443 100644 --- a/renderdoc/os/win32/win32_callstack.cpp +++ b/renderdoc/os/win32/win32_callstack.cpp @@ -24,7 +24,7 @@ #include "os/os_specific.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include #include @@ -60,7 +60,7 @@ class Win32Callstack : public Callstack::Stackwalk class Win32CallstackResolver : public Callstack::StackResolver { public: - Win32CallstackResolver(char *moduleDB, size_t DBSize, wstring pdbSearchPaths, volatile bool *killSignal); + Win32CallstackResolver(char *moduleDB, size_t DBSize, string pdbSearchPaths, volatile bool *killSignal); ~Win32CallstackResolver(); Callstack::AddressDetails GetAddr(uint64_t addr); @@ -365,20 +365,20 @@ Win32Callstack::~Win32Callstack() wstring Win32CallstackResolver::pdbBrowse(wstring startingPoint) { - OPENFILENAME ofn; + OPENFILENAMEW ofn; RDCEraseMem(&ofn, sizeof(ofn)); wchar_t outBuf[MAX_PATH*2]; wcscpy_s(outBuf, startingPoint.c_str()); ofn.lStructSize = sizeof(OPENFILENAME); - ofn.lpstrTitle = _T("Locate PDB File"); - ofn.lpstrFilter = _T("PDB File\0*.pdb\0"); + ofn.lpstrTitle = L"Locate PDB File"; + ofn.lpstrFilter = L"PDB File\0*.pdb\0"; ofn.lpstrFile = outBuf; ofn.nMaxFile = MAX_PATH*2-1; ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST; // | OFN_ENABLEINCLUDENOTIFY | OFN_ENABLEHOOK - BOOL ret = GetOpenFileName(&ofn); + BOOL ret = GetOpenFileNameW(&ofn); if(ret == FALSE) return L""; @@ -519,9 +519,9 @@ Win32CallstackResolver::AddrInfo Win32CallstackResolver::GetAddrInfoForModule(ui return info == NULL ? AddrInfo() : *info; } -Win32CallstackResolver::Win32CallstackResolver(char *moduleDB, size_t DBSize, wstring pdbSearchPaths, volatile bool *killSignal) +Win32CallstackResolver::Win32CallstackResolver(char *moduleDB, size_t DBSize, string pdbSearchPaths, volatile bool *killSignal) { - wstring configPath = FileIO::GetAppFolderFilename(L"config.ini"); + wstring configPath = StringFormat::UTF82Wide(FileIO::GetAppFolderFilename("config.ini")); { FILE *f = NULL; _wfopen_s(&f, configPath.c_str(), L"a"); @@ -533,7 +533,9 @@ Win32CallstackResolver::Win32CallstackResolver(char *moduleDB, size_t DBSize, ws wstring ignores = inputBuf; split(ignores, pdbIgnores, L';'); - split(pdbSearchPaths, pdbRememberedPaths, L';'); + wstring widepdbsearch = StringFormat::UTF82Wide(pdbSearchPaths); + + split(widepdbsearch, pdbRememberedPaths, L';'); EnumModChunk *chunk = (EnumModChunk *)moduleDB; WCHAR *modName = (WCHAR *)(moduleDB+sizeof(EnumModChunk)); @@ -586,8 +588,22 @@ Win32CallstackResolver::Win32CallstackResolver(char *moduleDB, size_t DBSize, ws if(defaultPdb == L"") { defaultPdb = strlower(basename(m.name)); - strreplace(defaultPdb, L".dll", L".pdb"); - strreplace(defaultPdb, L".exe", L".pdb"); + + size_t it = defaultPdb.find(L".dll"); + if(it != wstring::npos) + { + defaultPdb[it+1] = L'p'; + defaultPdb[it+2] = L'd'; + defaultPdb[it+3] = L'b'; + } + + it = defaultPdb.find(L".exe"); + if(it != wstring::npos) + { + defaultPdb[it+1] = L'p'; + defaultPdb[it+2] = L'd'; + defaultPdb[it+3] = L'b'; + } failed = true; } @@ -656,15 +672,10 @@ Win32CallstackResolver::Win32CallstackResolver(char *moduleDB, size_t DBSize, ws m.name.find(L"dbghelp") != wstring::npos) continue; -#if defined(UNICODE) wchar_t text[1024]; wsprintf(text, L"Do you want to permanently ignore this file?\nPath: %ls", m.name.c_str()); -#else - char text[1024]; - wsprintf(text, "Do you want to permanently ignore this file?\nPath: %hs", m.name.c_str()); -#endif - int ret = MessageBox(NULL, text, _T("Ignore this pdb?"), MB_YESNO); + int ret = MessageBoxW(NULL, text, L"Ignore this pdb?", MB_YESNO); if(ret == IDYES) pdbIgnores.push_back(m.name); @@ -722,8 +733,8 @@ Callstack::AddressDetails Win32CallstackResolver::GetAddr(DWORD64 addr) } Callstack::AddressDetails ret; - ret.filename = info.fileName; - ret.function = info.funcName; + ret.filename = StringFormat::Wide2UTF8(wstring(info.fileName)); + ret.function = StringFormat::Wide2UTF8(wstring(info.funcName)); ret.line = info.lineNum; return ret; @@ -749,7 +760,7 @@ namespace Callstack return new Win32Callstack(calls, numLevels); } - StackResolver *MakeResolver(char *moduleDB, size_t DBSize, wstring pdbSearchPaths, volatile bool *killSignal) + StackResolver *MakeResolver(char *moduleDB, size_t DBSize, string pdbSearchPaths, volatile bool *killSignal) { return new Win32CallstackResolver(moduleDB, DBSize, pdbSearchPaths, killSignal); } diff --git a/renderdoc/os/win32/win32_hook.cpp b/renderdoc/os/win32/win32_hook.cpp index 8b5c68356..929e16377 100644 --- a/renderdoc/os/win32/win32_hook.cpp +++ b/renderdoc/os/win32/win32_hook.cpp @@ -24,12 +24,13 @@ #include "os/os_specific.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "common/threading.h" #include #include +#include #include #include using std::vector; @@ -134,7 +135,7 @@ struct CachedHookData if(dosheader->e_magic != 0x5a4d) { - RDCDEBUG("Ignoring module %hs, since magic is 0x%04x not 0x%04x", modName, (uint32_t)dosheader->e_magic, 0x5a4dU); + RDCDEBUG("Ignoring module %s, since magic is 0x%04x not 0x%04x", modName, (uint32_t)dosheader->e_magic, 0x5a4dU); return; } diff --git a/renderdoc/os/win32/win32_network.cpp b/renderdoc/os/win32/win32_network.cpp index 0f3eba59b..b2d1bec71 100644 --- a/renderdoc/os/win32/win32_network.cpp +++ b/renderdoc/os/win32/win32_network.cpp @@ -246,7 +246,7 @@ Socket *CreateServerSocket(const char *bindaddr, uint16_t port, int queuesize) int result = bind(s, (SOCKADDR *)&addr, sizeof(addr)); if(result == SOCKET_ERROR) { - RDCWARN("Failed to bind to %hs:%d - %d", bindaddr, port, WSAGetLastError()); + RDCWARN("Failed to bind to %s:%d - %d", bindaddr, port, WSAGetLastError()); closesocket(s); return NULL; } @@ -254,7 +254,7 @@ Socket *CreateServerSocket(const char *bindaddr, uint16_t port, int queuesize) result = listen(s, queuesize); if(result == SOCKET_ERROR) { - RDCWARN("Failed to listen on %hs:%d - %d", bindaddr, port, WSAGetLastError()); + RDCWARN("Failed to listen on %s:%d - %d", bindaddr, port, WSAGetLastError()); closesocket(s); return NULL; } @@ -265,30 +265,37 @@ Socket *CreateServerSocket(const char *bindaddr, uint16_t port, int queuesize) return new Socket((ptrdiff_t)s); } -Socket *CreateClientSocket(const wchar_t *host, uint16_t port, int timeoutMS) +Socket *CreateClientSocket(const char *host, uint16_t port, int timeoutMS) { - wchar_t portstr[7] = {0}; - StringFormat::wsnprintf(portstr, 6, L"%d", port); - - addrinfoW hints; + wchar_t portwstr[7] = {0}; + + { + char buf[7] = {0}; + int n = StringFormat::snprintf(buf, 6, "%d", port); + for(int i=0; i < n && i < 6; i++) portwstr[i] = (wchar_t)buf[i]; + } + + addrinfoW hints; RDCEraseEl(hints); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; - - addrinfoW *result = NULL; - GetAddrInfoW(host, portstr, &hints, &result); - - for(addrinfoW *ptr = result; ptr != NULL; ptr = ptr->ai_next) + + std::wstring whost = StringFormat::UTF82Wide(string(host)); + + addrinfoW *result = NULL; + GetAddrInfoW(whost.c_str(), portwstr, &hints, &result); + + for(addrinfoW *ptr = result; ptr != NULL; ptr = ptr->ai_next) { SOCKET s = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_NO_HANDLE_INHERIT); if(s == INVALID_SOCKET) return NULL; - + u_long enable = 1; ioctlsocket(s, FIONBIO, &enable); - + int result = connect(s, ptr->ai_addr, (int)ptr->ai_addrlen); if(result == SOCKET_ERROR) { @@ -330,11 +337,11 @@ Socket *CreateClientSocket(const wchar_t *host, uint16_t port, int timeoutMS) BOOL nodelay = TRUE; setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, sizeof(nodelay)); - + return new Socket((ptrdiff_t)s); } - RDCWARN("Failed to connect to %ls:%d", host, port); + RDCWARN("Failed to connect to %s:%d", host, port); return NULL; } diff --git a/renderdoc/os/win32/win32_process.cpp b/renderdoc/os/win32/win32_process.cpp index 4ec3637aa..231f00b7d 100644 --- a/renderdoc/os/win32/win32_process.cpp +++ b/renderdoc/os/win32/win32_process.cpp @@ -27,7 +27,7 @@ #include "core/core.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include #include @@ -41,7 +41,7 @@ void InjectDLL(HANDLE hProcess, wstring libName) wchar_t dllPath[MAX_PATH + 1] = {0}; wcscpy_s(dllPath, libName.c_str()); - static HMODULE kernel32 = GetModuleHandle(_T("Kernel32")); + static HMODULE kernel32 = GetModuleHandleA("kernel32.dll"); if(kernel32 == NULL) { @@ -158,7 +158,7 @@ void InjectFunctionCall(HANDLE hProcess, uintptr_t renderdoc_remote, const char return; } - RDCDEBUG("Injecting call to %hs", funcName); + RDCDEBUG("Injecting call to %s", funcName); HMODULE renderdoc_local = GetModuleHandleA("renderdoc.dll"); @@ -181,10 +181,12 @@ void InjectFunctionCall(HANDLE hProcess, uintptr_t renderdoc_remote, const char VirtualFreeEx(hProcess, remoteMem, dataLen, MEM_RELEASE); } -uint32_t Process::InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit) +uint32_t Process::InjectIntoProcess(uint32_t pid, const char *logfile, const CaptureOptions *opts, bool waitForExit) { CaptureOptions options; if(opts) options = *opts; + + wstring wlogfile = logfile == NULL ? L"" : StringFormat::UTF82Wide(logfile); HANDLE hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | @@ -279,7 +281,7 @@ uint32_t Process::InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const string optstr = opts->ToString(); _snwprintf_s(paramsAlloc, 2047, 2047, L"\"%ls\" --cap32for64 %d \"%ls\" \"%hs\"", - renderdocPath, pid, logfile == NULL ? L"" : logfile, optstr.c_str()); + renderdocPath, pid, wlogfile.c_str(), optstr.c_str()); paramsAlloc[2047] = 0; @@ -325,7 +327,7 @@ uint32_t Process::InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const // safe to cast away the const as we know these functions don't modify the parameters if(logfile != NULL) - InjectFunctionCall(hProcess, loc, "RENDERDOC_SetLogFile", (wchar_t *)logfile, (wcslen(logfile)+1)*sizeof(wchar_t)); + InjectFunctionCall(hProcess, loc, "RENDERDOC_SetLogFile", (void *)wlogfile.c_str(), (wlogfile.length()+1)*sizeof(wchar_t)); if(opts != NULL) InjectFunctionCall(hProcess, loc, "RENDERDOC_SetCaptureOptions", (CaptureOptions *)opts, sizeof(CaptureOptions)); @@ -341,8 +343,8 @@ uint32_t Process::InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const return remoteident; } -uint32_t Process::CreateAndInjectIntoProcess(const wchar_t *app, const wchar_t *workingDir, const wchar_t *cmdLine, - const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit) +uint32_t Process::CreateAndInjectIntoProcess(const char *app, const char *workingDir, const char *cmdLine, + const char *logfile, const CaptureOptions *opts, bool waitForExit) { void *func = GetProcAddress(GetModuleHandleA("renderdoc.dll"), "RENDERDOC_SetLogFile"); @@ -365,31 +367,40 @@ uint32_t Process::CreateAndInjectIntoProcess(const wchar_t *app, const wchar_t * pSec.nLength = sizeof(pSec); tSec.nLength = sizeof(tSec); - wstring workdir = dirname(wstring(app)); + wstring workdir = L""; if(workingDir != NULL && workingDir[0] != 0) - workdir = workingDir; + workdir = StringFormat::UTF82Wide(string(workingDir)); + else + workdir = StringFormat::UTF82Wide(dirname(string(app))); wchar_t *paramsAlloc = NULL; + wstring wapp = StringFormat::UTF82Wide(string(app)); + // CreateProcessW can modify the params, need space. - size_t len = wcslen(app)+10; + size_t len = wapp.length()+10; + + wstring wcmd = L""; if(cmdLine != NULL && cmdLine[0] != 0) - len += wcslen(cmdLine); + { + wcmd = StringFormat::UTF82Wide(string(cmdLine)); + len += wcmd.length(); + } paramsAlloc = new wchar_t[len]; RDCEraseMem(paramsAlloc, len); wcscpy_s(paramsAlloc, len, L"\""); - wcscat_s(paramsAlloc, len, app); + wcscat_s(paramsAlloc, len, wapp.c_str()); wcscat_s(paramsAlloc, len, L"\""); if(cmdLine != NULL && cmdLine[0] != 0) { wcscat_s(paramsAlloc, len, L" "); - wcscat_s(paramsAlloc, len, cmdLine); + wcscat_s(paramsAlloc, len, wcmd.c_str()); } BOOL retValue = CreateProcessW(NULL, paramsAlloc, @@ -403,7 +414,7 @@ uint32_t Process::CreateAndInjectIntoProcess(const wchar_t *app, const wchar_t * if (!retValue) { - RDCERR("Process %ls could not be loaded.", app); + RDCERR("Process %s could not be loaded.", app); return 0; } @@ -426,7 +437,7 @@ uint32_t Process::CreateAndInjectIntoProcess(const wchar_t *app, const wchar_t * return ret; } -void Process::StartGlobalHook(const wchar_t *pathmatch, const wchar_t *logfile, const CaptureOptions *opts) +void Process::StartGlobalHook(const char *pathmatch, const char *logfile, const CaptureOptions *opts) { if(pathmatch == NULL) return; @@ -450,9 +461,12 @@ void Process::StartGlobalHook(const wchar_t *pathmatch, const wchar_t *logfile, wchar_t *paramsAlloc = new wchar_t[2048]; string optstr = opts->ToString(); + + wstring wlogfile = logfile == NULL ? L"" : StringFormat::UTF82Wide(string(logfile)); + wstring wpathmatch = StringFormat::UTF82Wide(string(pathmatch)); - _snwprintf_s(paramsAlloc, 2047, 2047, L"\"%ls\" --globalhook \"%ls\" \"%ls\" \"%hs\"", - renderdocPath, pathmatch, logfile == NULL ? L"" : logfile, optstr.c_str()); + _snwprintf_s(paramsAlloc, 2047, 2047, L"\"%ls\" --globalhook \"%ls\" \"%ls\" \"%s\"", + renderdocPath, wpathmatch.c_str(), wlogfile.c_str(), optstr.c_str()); paramsAlloc[2047] = 0; @@ -468,8 +482,8 @@ void Process::StartGlobalHook(const wchar_t *pathmatch, const wchar_t *logfile, wcscat_s(renderdocPath, L"\\x86\\renderdoccmd.exe"); - _snwprintf_s(paramsAlloc, 2047, 2047, L"\"%ls\" --globalhook \"%ls\" \"%ls\" \"%hs\"", - renderdocPath, pathmatch, logfile == NULL ? L"" : logfile, optstr.c_str()); + _snwprintf_s(paramsAlloc, 2047, 2047, L"\"%ls\" --globalhook \"%ls\" \"%ls\" \"%s\"", + renderdocPath, wpathmatch.c_str(), wlogfile.c_str(), optstr.c_str()); paramsAlloc[2047] = 0; diff --git a/renderdoc/os/win32/win32_stringio.cpp b/renderdoc/os/win32/win32_stringio.cpp index 165350cf5..98633e171 100644 --- a/renderdoc/os/win32/win32_stringio.cpp +++ b/renderdoc/os/win32/win32_stringio.cpp @@ -35,6 +35,7 @@ #include using std::set; +using std::wstring; // gives us an address to identify this dll with static int dllLocator=0; @@ -150,15 +151,15 @@ namespace Keyboard namespace FileIO { - void GetExecutableFilename(wstring &selfName) + void GetExecutableFilename(string &selfName) { wchar_t curFile[512] = {0}; GetModuleFileNameW(NULL, curFile, 511); - selfName = curFile; + selfName = StringFormat::Wide2UTF8(wstring(curFile)); } - void GetDefaultFiles(const wchar_t *logBaseName, wstring &capture_filename, wstring &logging_filename, wstring &target) + void GetDefaultFiles(const char *logBaseName, string &capture_filename, string &logging_filename, string &target) { wchar_t temp_filename[MAX_PATH]; @@ -178,7 +179,7 @@ namespace FileIO mod++; // now points to base filename without extension - target = mod; + target = StringFormat::Wide2UTF8(wstring(mod)); time_t t = time(NULL); tm now; @@ -188,16 +189,18 @@ namespace FileIO wsprintf(filename_start, L"%ls_%04d.%02d.%02d_%02d.%02d.rdc", mod, 1900+now.tm_year, now.tm_mon+1, now.tm_mday, now.tm_hour, now.tm_min); - capture_filename = temp_filename; + capture_filename = StringFormat::Wide2UTF8(wstring(temp_filename)); *filename_start = 0; - wsprintf(filename_start, L"%ls_%04d.%02d.%02d_%02d.%02d.%02d.log", logBaseName, 1900+now.tm_year, now.tm_mon+1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec); + wstring wbase = StringFormat::UTF82Wide(string(logBaseName)); - logging_filename = temp_filename; + wsprintf(filename_start, L"%ls_%04d.%02d.%02d_%02d.%02d.%02d.log", wbase.c_str(), 1900+now.tm_year, now.tm_mon+1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec); + + logging_filename = StringFormat::Wide2UTF8(wstring(temp_filename)); } - wstring GetAppFolderFilename(wstring filename) + string GetAppFolderFilename(string filename) { PWSTR appDataPath; SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_SIMPLE_IDLIST|KF_FLAG_DONT_UNEXPAND, NULL, &appDataPath); @@ -210,13 +213,16 @@ namespace FileIO CreateDirectoryW(appdata.c_str(), NULL); - return appdata + filename; + string ret = StringFormat::Wide2UTF8(appdata) + filename; + return ret; } - uint64_t GetModifiedTimestamp(const wchar_t *filename) + uint64_t GetModifiedTimestamp(const char *filename) { + wstring wfn = StringFormat::UTF82Wide(string(filename)); + struct _stat st; - int res = _wstat(filename, &st); + int res = _wstat(wfn.c_str(), &st); if(res == 0) { @@ -226,36 +232,32 @@ namespace FileIO return 0; } - void CopyFileW(const wchar_t *from, const wchar_t *to, bool allowOverwrite) + void Copy(const char *from, const char *to, bool allowOverwrite) { - ::CopyFileW(from, to, allowOverwrite == false); + wstring wfrom = StringFormat::UTF82Wide(string(from)); + wstring wto = StringFormat::UTF82Wide(string(to)); + + ::CopyFileW(wfrom.c_str(), wto.c_str(), allowOverwrite == false); } - void UnlinkFileW(const wchar_t *path) + void Delete(const char *path) { - ::DeleteFileW(path); + wstring wpath = StringFormat::UTF82Wide(string(path)); + ::DeleteFileW(wpath.c_str()); } - FILE *fopen(const wchar_t *filename, const wchar_t *mode) + FILE *fopen(const char *filename, const char *mode) { + wstring wfn = StringFormat::UTF82Wide(string(filename)); + wstring wmode = StringFormat::UTF82Wide(string(mode)); + FILE *ret = NULL; - ::_wfopen_s(&ret, filename, mode); + ::_wfopen_s(&ret, wfn.c_str(), wmode.c_str()); return ret; } size_t fread(void *buf, size_t elementSize, size_t count, FILE *f) { return ::fread(buf, elementSize, count, f); } size_t fwrite(const void *buf, size_t elementSize, size_t count, FILE *f) { return ::fwrite(buf, elementSize, count, f); } - int fprintf(FILE *f, const char *fmt, ...) - { - va_list args; - va_start(args, fmt); - - int ret = ::vfprintf(f, fmt, args); - - va_end(args); - - return ret; - } uint64_t ftell64(FILE *f) { return ::_ftelli64(f); } void fseek64(FILE *f, uint64_t offset, int origin) { ::_fseeki64(f, offset, origin); } @@ -265,40 +267,6 @@ namespace FileIO namespace StringFormat { - /////////////////////////////////////////////////////////////////////////// - int wsnprintf(wchar_t *str, size_t bufSize, const wchar_t *format, ...) - { - va_list args; - va_start(args, format); - - int ret = ::_vsnwprintf_s(str, bufSize, bufSize-1, format, args); - - va_end(args); - - return ret; - } - - wstring WFmt(const wchar_t *format, ...) - { - va_list args; - va_start(args, format); - - int size = _vscwprintf(format, args)+1; - - wchar_t *buf = new wchar_t[size]; - - ::vswprintf_s(buf, size, format, args); - - va_end(args); - - wstring ret = buf; - - delete[] buf; - - return ret; - } - /////////////////////////////////////////////////////////////////////////// - void sntimef(char *str, size_t bufSize, const char *format) { time_t tim; @@ -307,9 +275,22 @@ namespace StringFormat tm tmv; localtime_s(&tmv, &tim); - strftime(str, bufSize, format, &tmv); + wchar_t *buf = new wchar_t[bufSize+1]; buf[bufSize] = 0; + wstring wfmt = StringFormat::UTF82Wide(string(format)); + + wcsftime(buf, bufSize, wfmt.c_str(), &tmv); + + string result = StringFormat::Wide2UTF8(wstring(buf)); + + if(result.length()+1 < bufSize) + { + memcpy(str, result.c_str(), result.length()); + str[result.length()] = 0; + } } + // this function is only platform specific because va_copy isn't implemented + // on MSVC string Fmt(const char *format, ...) { va_list args; @@ -336,56 +317,54 @@ namespace StringFormat return ret; } - // save on reallocation, keep a persistent scratch buffer for conversions - vector charBuffer; - vector wcharBuffer; - string Wide2UTF8(const wstring &s) { - // include room for null terminator, assuming unicode input (not ucs) - // utf-8 characters can be max 4 bytes. We can afford to be generous about - // this length as we resize relatively rarely. - size_t len = (s.length()+1)*4; + int bytes_required = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, NULL, 0, NULL, NULL); - if(charBuffer.size() < len) - charBuffer.resize(len); + if(bytes_required == 0) + return ""; - int ret = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, &charBuffer[0], (int)len, NULL, NULL); + string ret; + ret.resize(bytes_required); - if(ret == 0) + int res = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, &ret[0], bytes_required, NULL, NULL); + + if(ret.back() == 0) ret.pop_back(); + + if(res == 0) { #if !defined(_RELEASE) - RDCWARN("Failed to convert wstring: \"%ls\"", s.c_str()); + RDCWARN("Failed to convert wstring"); // can't pass string through as this would infinitely recurse #endif return ""; } - // convert to string from null-terminated string - utf-8 never contains - // 0 bytes before the null terminator, and this way we don't care if - // charBuffer is larger than the string - return string(&charBuffer[0]); + return ret; } wstring UTF82Wide(const string &s) { - // Include room for null terminator. Since we're converting from utf-8, - // worst case it's ascii and every byte is a character so length is the same - size_t len = s.length()+1; + int chars_required = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, NULL, 0); + + if(chars_required == 0) + return L""; - if(wcharBuffer.size() < len) - wcharBuffer.resize(len); + wstring ret; + ret.resize(chars_required); - int ret = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, &wcharBuffer[0], (int)len); + int res = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, &ret[0], chars_required); - if(ret == 0) + if(ret.back() == 0) ret.pop_back(); + + if(res == 0) { #if !defined(_RELEASE) - RDCWARN("Failed to convert utf-8 string: \"%s\"", s.c_str()); + RDCWARN("Failed to convert utf-8 string"); // can't pass string through as this would infinitely recurse #endif return L""; } - return wstring(&wcharBuffer[0]); + return ret; } }; diff --git a/renderdoc/os/win32_specific.h b/renderdoc/os/win32_specific.h index 9d70d9371..030e60d1b 100644 --- a/renderdoc/os/win32_specific.h +++ b/renderdoc/os/win32_specific.h @@ -35,6 +35,12 @@ #define GetEmbeddedResource(filename) GetEmbeddedResourceWin32( CONCAT(RESOURCE_, filename) ) string GetEmbeddedResourceWin32(int resource); +namespace StringFormat +{ + // useful for converting to wide before passing to OS functions + std::wstring UTF82Wide(const string &s); +}; + namespace OSUtility { inline void ForceCrash() { *((int *)NULL) = 0; } diff --git a/renderdoc/renderdoc.vcxproj b/renderdoc/renderdoc.vcxproj index a473b5346..155f365e9 100644 --- a/renderdoc/renderdoc.vcxproj +++ b/renderdoc/renderdoc.vcxproj @@ -239,7 +239,6 @@ - @@ -294,6 +293,7 @@ + @@ -358,7 +358,7 @@ - + @@ -369,6 +369,7 @@ + @@ -395,4 +396,4 @@ - \ No newline at end of file + diff --git a/renderdoc/renderdoc.vcxproj.filters b/renderdoc/renderdoc.vcxproj.filters index 86a333156..d433ad725 100644 --- a/renderdoc/renderdoc.vcxproj.filters +++ b/renderdoc/renderdoc.vcxproj.filters @@ -234,9 +234,6 @@ Common\Maths - - Common - Drivers\OpenGL @@ -309,6 +306,9 @@ Resources\glsl + + Common\Strings + @@ -533,6 +533,9 @@ Common\Strings + + Common\Strings + diff --git a/renderdoc/replay/entry_points.cpp b/renderdoc/replay/entry_points.cpp index b610f1fcd..35b16d490 100644 --- a/renderdoc/replay/entry_points.cpp +++ b/renderdoc/replay/entry_points.cpp @@ -91,19 +91,19 @@ int RENDERDOC_CC RENDERDOC_GetAPIVersion() } extern "C" RENDERDOC_API -void RENDERDOC_CC RENDERDOC_LogText(const wchar_t *text) +void RENDERDOC_CC RENDERDOC_LogText(const char *text) { - RDCLOG("%ls", text); + RDCLOG("%s", text); } extern "C" RENDERDOC_API -const wchar_t* RENDERDOC_CC RENDERDOC_GetLogFile() +const char* RENDERDOC_CC RENDERDOC_GetLogFile() { return RDCGETLOGFILE(); } extern "C" RENDERDOC_API -bool32 RENDERDOC_CC RENDERDOC_GetCapture(uint32_t idx, wchar_t *logfile, uint32_t *pathlength, uint64_t *timestamp) +bool32 RENDERDOC_CC RENDERDOC_GetCapture(uint32_t idx, char *logfile, uint32_t *pathlength, uint64_t *timestamp) { vector caps = RenderDoc::Inst().GetCaptures(); @@ -118,7 +118,7 @@ bool32 RENDERDOC_CC RENDERDOC_GetCapture(uint32_t idx, wchar_t *logfile, uint32_ CaptureData &c = caps[idx]; if(logfile) - memcpy(logfile, c.path.c_str(), sizeof(wchar_t)*(c.path.size()+1)); + memcpy(logfile, c.path.c_str(), sizeof(char)*(c.path.size()+1)); if(pathlength) *pathlength = uint32_t(c.path.size()+1); if(timestamp) @@ -160,13 +160,13 @@ void RENDERDOC_CC RENDERDOC_UnloadCrashHandler() } extern "C" RENDERDOC_API -bool32 RENDERDOC_CC RENDERDOC_SupportLocalReplay(const wchar_t *logfile, rdctype::wstr *driver) +bool32 RENDERDOC_CC RENDERDOC_SupportLocalReplay(const char *logfile, rdctype::str *driver) { if(logfile == NULL) return false; RDCDriver driverType = RDC_Unknown; - wstring driverName = L""; + string driverName = ""; RenderDoc::Inst().FillInitParams(logfile, driverType, driverName, NULL); if(driver) *driver = driverName; @@ -175,7 +175,7 @@ bool32 RENDERDOC_CC RENDERDOC_SupportLocalReplay(const wchar_t *logfile, rdctype } extern "C" RENDERDOC_API -ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateReplayRenderer(const wchar_t *logfile, float *progress, ReplayRenderer **rend) +ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateReplayRenderer(const char *logfile, float *progress, ReplayRenderer **rend) { if(rend == NULL) return eReplayCreate_InternalError; @@ -205,9 +205,9 @@ ReplayCreateStatus RENDERDOC_CC RENDERDOC_CreateReplayRenderer(const wchar_t *lo } extern "C" RENDERDOC_API -void RENDERDOC_CC RENDERDOC_SetLogFile(const wchar_t *logfile) +void RENDERDOC_CC RENDERDOC_SetLogFile(const char *logfile) { - RDCLOG("Using logfile %ls", logfile); + RDCLOG("Using logfile %s", logfile); RenderDoc::Inst().SetLogFile(logfile); } @@ -219,20 +219,20 @@ void RENDERDOC_CC RENDERDOC_SetCaptureOptions(const CaptureOptions *opts) } extern "C" RENDERDOC_API -uint32_t RENDERDOC_CC RENDERDOC_ExecuteAndInject(const wchar_t *app, const wchar_t *workingDir, const wchar_t *cmdLine, - const wchar_t *logfile, const CaptureOptions *opts, bool32 waitForExit) +uint32_t RENDERDOC_CC RENDERDOC_ExecuteAndInject(const char *app, const char *workingDir, const char *cmdLine, + const char *logfile, const CaptureOptions *opts, bool32 waitForExit) { return Process::CreateAndInjectIntoProcess(app, workingDir, cmdLine, logfile, opts, waitForExit != 0); } extern "C" RENDERDOC_API -void RENDERDOC_CC RENDERDOC_StartGlobalHook(const wchar_t *pathmatch, const wchar_t *logfile, const CaptureOptions *opts) +void RENDERDOC_CC RENDERDOC_StartGlobalHook(const char *pathmatch, const char *logfile, const CaptureOptions *opts) { Process::StartGlobalHook(pathmatch, logfile, opts); } extern "C" RENDERDOC_API -uint32_t RENDERDOC_CC RENDERDOC_InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const CaptureOptions *opts, bool32 waitForExit) +uint32_t RENDERDOC_CC RENDERDOC_InjectIntoProcess(uint32_t pid, const char *logfile, const CaptureOptions *opts, bool32 waitForExit) { return Process::InjectIntoProcess(pid, logfile, opts, waitForExit != 0); } @@ -292,7 +292,7 @@ void RENDERDOC_CC RENDERDOC_QueueCapture(uint32_t frameNumber) } extern "C" RENDERDOC_API -bool32 RENDERDOC_CC RENDERDOC_GetThumbnail(const wchar_t *filename, byte *buf, uint32_t &len) +bool32 RENDERDOC_CC RENDERDOC_GetThumbnail(const char *filename, byte *buf, uint32_t &len) { Serialiser ser(filename, Serialiser::READING, false); @@ -356,13 +356,13 @@ void RENDERDOC_CC RENDERDOC_InitRemoteAccess(uint32_t *ident) } extern "C" RENDERDOC_API -uint32_t RENDERDOC_CC RENDERDOC_EnumerateRemoteConnections(const wchar_t *host, uint32_t *idents) +uint32_t RENDERDOC_CC RENDERDOC_EnumerateRemoteConnections(const char *host, uint32_t *idents) { if(idents == NULL) return RenderDoc_LastCaptureNetworkPort-RenderDoc_FirstCaptureNetworkPort+1; - wstring s = L"localhost"; - if(host != NULL && host[0] != L'\0') + string s = "localhost"; + if(host != NULL && host[0] != '\0') s = host; uint32_t numIdents = 0; diff --git a/renderdoc/replay/replay_output.cpp b/renderdoc/replay/replay_output.cpp index dceeef661..aeef4aa93 100644 --- a/renderdoc/replay/replay_output.cpp +++ b/renderdoc/replay/replay_output.cpp @@ -27,7 +27,7 @@ #include "replay_renderer.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "maths/matrix.h" ReplayOutput::ReplayOutput(ReplayRenderer *parent, void *w) diff --git a/renderdoc/replay/replay_renderer.cpp b/renderdoc/replay/replay_renderer.cpp index 636285075..7b370f137 100644 --- a/renderdoc/replay/replay_renderer.cpp +++ b/renderdoc/replay/replay_renderer.cpp @@ -28,7 +28,7 @@ #include #include -#include "common/string_utils.h" +#include "serialise/string_utils.h" #include "maths/formatpacking.h" #include "os/os_specific.h" @@ -310,7 +310,7 @@ bool ReplayRenderer::GetTextures(rdctype::array *out) return false; } -bool ReplayRenderer::GetResolve(uint64_t *callstack, uint32_t callstackLen, rdctype::array *arr) +bool ReplayRenderer::GetResolve(uint64_t *callstack, uint32_t callstackLen, rdctype::array *arr) { if(arr == NULL || callstack == NULL || callstackLen == 0) return false; @@ -319,7 +319,7 @@ bool ReplayRenderer::GetResolve(uint64_t *callstack, uint32_t callstackLen, rdct if(resolv == NULL) { create_array_uninit(*arr, 1); - arr->elems[0] = L""; + arr->elems[0] = ""; return true; } @@ -397,7 +397,7 @@ bool ReplayRenderer::GetBufferData(ResourceId buff, uint32_t offset, uint32_t le return true; } -bool ReplayRenderer::SaveTexture(const TextureSave &saveData, const wchar_t *path) +bool ReplayRenderer::SaveTexture(const TextureSave &saveData, const char *path) { TextureSave sd = saveData; // mutable copy ResourceId liveid = m_pDevice->GetLiveID(sd.id); @@ -891,7 +891,7 @@ bool ReplayRenderer::SaveTexture(const TextureSave &saveData, const wchar_t *pat rowPitch = td.width * 2; } - FILE *f = FileIO::fopen(path, L"wb"); + FILE *f = FileIO::fopen(path, "wb"); if(!f) { @@ -1166,7 +1166,7 @@ ReplayOutput *ReplayRenderer::CreateOutput(void *wndhandle) return out; } -ResourceId ReplayRenderer::BuildTargetShader(const wchar_t *entry, const wchar_t *source, const uint32_t compileFlags, ShaderStageType type, rdctype::wstr *errors) +ResourceId ReplayRenderer::BuildTargetShader(const char *entry, const char *source, const uint32_t compileFlags, ShaderStageType type, rdctype::str *errors) { ResourceId id; string errs; @@ -1185,17 +1185,17 @@ ResourceId ReplayRenderer::BuildTargetShader(const wchar_t *entry, const wchar_t return ResourceId(); } - m_pDevice->BuildTargetShader(narrow(source), narrow(entry), compileFlags, type, &id, &errs); + m_pDevice->BuildTargetShader(source, entry, compileFlags, type, &id, &errs); if(id != ResourceId()) m_TargetResources.insert(id); - if(errors) *errors = widen(errs); + if(errors) *errors = errs; return id; } -ResourceId ReplayRenderer::BuildCustomShader(const wchar_t *entry, const wchar_t *source, const uint32_t compileFlags, ShaderStageType type, rdctype::wstr *errors) +ResourceId ReplayRenderer::BuildCustomShader(const char *entry, const char *source, const uint32_t compileFlags, ShaderStageType type, rdctype::str *errors) { ResourceId id; string errs; @@ -1214,12 +1214,12 @@ ResourceId ReplayRenderer::BuildCustomShader(const wchar_t *entry, const wchar_t return ResourceId(); } - m_pDevice->BuildCustomShader(narrow(source), narrow(entry), compileFlags, type, &id, &errs); + m_pDevice->BuildCustomShader(source, entry, compileFlags, type, &id, &errs); if(id != ResourceId()) m_CustomShaders.insert(id); - if(errors) *errors = widen(errs); + if(errors) *errors = errs; return id; } @@ -1266,15 +1266,15 @@ bool ReplayRenderer::RemoveReplacement(ResourceId id) return true; } -ReplayCreateStatus ReplayRenderer::CreateDevice(const wchar_t *logfile) +ReplayCreateStatus ReplayRenderer::CreateDevice(const char *logfile) { - RDCLOG("Creating replay device for %ls", logfile); + RDCLOG("Creating replay device for %s", logfile); RDCDriver driverType = RDC_Unknown; - wstring driverName = L""; + string driverName = ""; auto status = RenderDoc::Inst().FillInitParams(logfile, driverType, driverName, NULL); - if(driverType == RDC_Unknown || driverName == L"" || status != eReplayCreate_Success) + if(driverType == RDC_Unknown || driverName == "" || status != eReplayCreate_Success) { RDCERR("Couldn't get device type from log"); return status; @@ -1425,7 +1425,7 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetD3D11PipelineStat extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetGLPipelineState(ReplayRenderer *rend, GLPipelineState *state) { return rend->GetGLPipelineState(state); } -extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildCustomShader(ReplayRenderer *rend, const wchar_t *entry, const wchar_t *source, const uint32_t compileFlags, ShaderStageType type, ResourceId *shaderID, rdctype::wstr *errors) +extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildCustomShader(ReplayRenderer *rend, const char *entry, const char *source, const uint32_t compileFlags, ShaderStageType type, ResourceId *shaderID, rdctype::str *errors) { if(shaderID == NULL) return false; @@ -1436,7 +1436,7 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildCustomShader(Re extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_FreeCustomShader(ReplayRenderer *rend, ResourceId id) { return rend->FreeCustomShader(id); } -extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildTargetShader(ReplayRenderer *rend, const wchar_t *entry, const wchar_t *source, const uint32_t compileFlags, ShaderStageType type, ResourceId *shaderID, rdctype::wstr *errors) +extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_BuildTargetShader(ReplayRenderer *rend, const char *entry, const char *source, const uint32_t compileFlags, ShaderStageType type, ResourceId *shaderID, rdctype::str *errors) { if(shaderID == NULL) return false; @@ -1459,7 +1459,7 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetTextures(ReplayRe { return rend->GetTextures(texs); } extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetBuffers(ReplayRenderer *rend, rdctype::array *bufs) { return rend->GetBuffers(bufs); } -extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetResolve(ReplayRenderer *rend, uint64_t *callstack, uint32_t callstackLen, rdctype::array *trace) +extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetResolve(ReplayRenderer *rend, uint64_t *callstack, uint32_t callstackLen, rdctype::array *trace) { return rend->GetResolve(callstack, callstackLen, trace); } extern "C" RENDERDOC_API ShaderReflection* RENDERDOC_CC ReplayRenderer_GetShaderDetails(ReplayRenderer *rend, ResourceId shader) { return rend->GetShaderDetails(shader); } @@ -1479,7 +1479,7 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetUsage(ReplayRende extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetCBufferVariableContents(ReplayRenderer *rend, ResourceId shader, uint32_t cbufslot, ResourceId buffer, uint32_t offs, rdctype::array *vars) { return rend->GetCBufferVariableContents(shader, cbufslot, buffer, offs, vars); } -extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SaveTexture(ReplayRenderer *rend, const TextureSave &saveData, const wchar_t *path) +extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SaveTexture(ReplayRenderer *rend, const TextureSave &saveData, const char *path) { return rend->SaveTexture(saveData, path); } extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetPostVSData(ReplayRenderer *rend, MeshDataStage stage, PostVSMeshData *data) diff --git a/renderdoc/replay/replay_renderer.h b/renderdoc/replay/replay_renderer.h index 383579396..4104749db 100644 --- a/renderdoc/replay/replay_renderer.h +++ b/renderdoc/replay/replay_renderer.h @@ -130,7 +130,7 @@ struct ReplayRenderer APIProperties GetAPIProperties(); - ReplayCreateStatus CreateDevice(const wchar_t *logfile); + ReplayCreateStatus CreateDevice(const char *logfile); ReplayCreateStatus SetDevice(IReplayDriver *device); bool HasCallstacks(); @@ -145,10 +145,10 @@ struct ReplayRenderer bool GetD3D11PipelineState(D3D11PipelineState *state); bool GetGLPipelineState(GLPipelineState *state); - ResourceId BuildCustomShader(const wchar_t *entry, const wchar_t *source, const uint32_t compileFlags, ShaderStageType type, rdctype::wstr *errors); + ResourceId BuildCustomShader(const char *entry, const char *source, const uint32_t compileFlags, ShaderStageType type, rdctype::str *errors); bool FreeCustomShader(ResourceId id); - ResourceId BuildTargetShader(const wchar_t *entry, const wchar_t *source, const uint32_t compileFlags, ShaderStageType type, rdctype::wstr *errors); + ResourceId BuildTargetShader(const char *entry, const char *source, const uint32_t compileFlags, ShaderStageType type, rdctype::str *errors); bool ReplaceResource(ResourceId from, ResourceId to); bool RemoveReplacement(ResourceId id); bool FreeTargetResource(ResourceId id); @@ -157,7 +157,7 @@ struct ReplayRenderer bool GetDrawcalls(uint32_t frameID, bool includeTimes, rdctype::array *draws); bool GetTextures(rdctype::array *texs); bool GetBuffers(rdctype::array *bufs); - bool GetResolve(uint64_t *callstack, uint32_t callstackLen, rdctype::array *trace); + bool GetResolve(uint64_t *callstack, uint32_t callstackLen, rdctype::array *trace); ShaderReflection *GetShaderDetails(ResourceId shader); bool PixelHistory(ResourceId target, uint32_t x, uint32_t y, uint32_t sampleIdx, rdctype::array *history); @@ -174,7 +174,7 @@ struct ReplayRenderer bool GetBufferData(ResourceId buff, uint32_t offset, uint32_t len, rdctype::array *data); - bool SaveTexture(const TextureSave &saveData, const wchar_t *path); + bool SaveTexture(const TextureSave &saveData, const char *path); bool GetCBufferVariableContents(ResourceId shader, uint32_t cbufslot, ResourceId buffer, uint32_t offs, rdctype::array *vars); diff --git a/renderdoc/replay/type_helpers.cpp b/renderdoc/replay/type_helpers.cpp index f1c315e3b..8482815ea 100644 --- a/renderdoc/replay/type_helpers.cpp +++ b/renderdoc/replay/type_helpers.cpp @@ -29,7 +29,7 @@ #include #include #include "serialise/serialiser.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" template<> string ToStrHelper::Get(const rdctype::str &el) @@ -37,12 +37,6 @@ string ToStrHelper::Get(const rdctype::str &el) return string(el.elems, el.elems+el.count); } -template<> -string ToStrHelper::Get(const rdctype::wstr &el) -{ - return narrow(wstring(el.elems, el.elems+el.count)); -} - template<> string ToStrHelper::Get(const ResourceId &el) { @@ -55,25 +49,6 @@ string ToStrHelper::Get(const ResourceId &el) namespace rdctype { - -wstr &wstr::operator =(const std::wstring &in) -{ - Delete(); - count = (int32_t)in.size(); - if(count == 0) - { - elems = (wchar_t*)allocate(sizeof(wchar_t)); - elems[0] = 0; - } - else - { - elems = (wchar_t*)allocate(sizeof(wchar_t)*(count+1)); - memcpy(elems, &in[0], sizeof(wchar_t)*in.size()); - elems[count] = 0; - } - return *this; -} - str &str::operator =(const std::string &in) { Delete(); @@ -92,24 +67,6 @@ str &str::operator =(const std::string &in) return *this; } -wstr &wstr::operator =(const wchar_t *const in) -{ - Delete(); - count = (int32_t)wcslen(in); - if(count == 0) - { - elems = (wchar_t*)allocate(sizeof(wchar_t)); - elems[0] = 0; - } - else - { - elems = (wchar_t*)allocate(sizeof(wchar_t)*(count+1)); - memcpy(elems, &in[0], sizeof(wchar_t)*count); - elems[count] = 0; - } - return *this; -} - str &str::operator =(const char *const in) { Delete(); diff --git a/renderdoc/serialise/serialiser.cpp b/renderdoc/serialise/serialiser.cpp index 1396bd58c..c0511d8bb 100644 --- a/renderdoc/serialise/serialiser.cpp +++ b/renderdoc/serialise/serialiser.cpp @@ -27,7 +27,7 @@ #include "core/core.h" -#include "common/string_utils.h" +#include "serialise/string_utils.h" #if !defined(RELEASE) @@ -184,7 +184,7 @@ Serialiser::Serialiser(size_t length, const byte *memoryBuf, bool fileheader) char magicFile[5] = { 0 }; memcpy(magicRef, &MAGIC_HEADER, sizeof(uint32_t)); memcpy(magicFile, &header->magic, sizeof(uint32_t)); - RDCERR("Invalid in-memory buffer. Expected magic %hs, got %hs", magicRef, magicFile); + RDCERR("Invalid in-memory buffer. Expected magic %s, got %s", magicRef, magicFile); m_ErrorCode = eSerError_Corrupt; m_HasError = true; @@ -221,14 +221,14 @@ Serialiser::Serialiser(size_t length, const byte *memoryBuf, bool fileheader) memcpy(m_Buffer, memoryBuf + m_FileStartOffset, m_CurrentBufferSize); } -Serialiser::Serialiser(const wchar_t *path, Mode mode, bool debugMode) +Serialiser::Serialiser(const char *path, Mode mode, bool debugMode) : m_pCallstack(NULL), m_pResolver(NULL), m_Buffer(NULL) { m_ResolverThread = 0; Reset(); - m_Filename = path ? path : L""; + m_Filename = path ? path : ""; m_DebugTextWriting = false; @@ -239,11 +239,11 @@ Serialiser::Serialiser(const wchar_t *path, Mode mode, bool debugMode) if(mode == READING) { - m_ReadFileHandle = FileIO::fopen(m_Filename.c_str(), L"rb"); + m_ReadFileHandle = FileIO::fopen(m_Filename.c_str(), "rb"); if(!m_ReadFileHandle) { - RDCERR("Can't open capture file '%ls' for read - errno %d", m_Filename.c_str(), errno); + RDCERR("Can't open capture file '%s' for read - errno %d", m_Filename.c_str(), errno); m_ErrorCode = eSerError_FileIO; m_HasError = true; return; @@ -259,7 +259,7 @@ Serialiser::Serialiser(const wchar_t *path, Mode mode, bool debugMode) char magicFile[5] = { 0 }; memcpy(magicRef, &MAGIC_HEADER, sizeof(uint32_t)); memcpy(magicFile, &header.magic, sizeof(uint32_t)); - RDCERR("Invalid capture file. Expected magic %hs, got %hs", magicRef, magicFile); + RDCERR("Invalid capture file. Expected magic %s, got %s", magicRef, magicFile); m_ErrorCode = eSerError_Corrupt; m_HasError = true; @@ -308,7 +308,7 @@ Serialiser::Serialiser(const wchar_t *path, Mode mode, bool debugMode) { m_pResolver = NULL; - if(m_Filename != L"") + if(m_Filename != "") { m_BufferSize = 0; m_BufferHead = m_Buffer = NULL; @@ -395,11 +395,11 @@ void Serialiser::SetCallstack(uint64_t *levels, size_t numLevels) void Serialiser::CreateResolver(void *ths) { Serialiser *ser = (Serialiser *)ths; - FILE *binFile = FileIO::fopen(ser->m_Filename.c_str(), L"rb"); + FILE *binFile = FileIO::fopen(ser->m_Filename.c_str(), "rb"); if(!binFile) { - RDCERR("Can't open capture file '%ls' for read - errno %d", ser->m_Filename.c_str(), errno); + RDCERR("Can't open capture file '%s' for read - errno %d", ser->m_Filename.c_str(), errno); return; } @@ -447,7 +447,7 @@ void Serialiser::CreateResolver(void *ths) FileIO::fclose(binFile); - wstring dir = dirname(wstring(ser->m_Filename)); + string dir = dirname(ser->m_Filename); Callstack::StackResolver *resolver = Callstack::MakeResolver(resolveDB, (size_t)header.resolveDBSize, dir, &ser->m_ResolverThreadKillSignal); @@ -458,17 +458,17 @@ void Serialiser::CreateResolver(void *ths) uint64_t Serialiser::FlushToDisk() { - if(m_Filename != L"" && !m_HasError && m_Mode == WRITING) + if(m_Filename != "" && !m_HasError && m_Mode == WRITING) { RDCDEBUG("writing capture files"); if(m_DebugEnabled && !m_DebugText.empty()) { - FILE *dbgFile = FileIO::fopen((m_Filename + L".txt").c_str(), L"wb"); + FILE *dbgFile = FileIO::fopen((m_Filename + ".txt").c_str(), "wb"); if(!dbgFile) { - RDCERR("Can't open debug capture file '%ls'", (m_Filename + L".txt").c_str()); + RDCERR("Can't open debug capture file '%s'", (m_Filename + ".txt").c_str()); } else { @@ -478,11 +478,11 @@ uint64_t Serialiser::FlushToDisk() } } - FILE *binFile = FileIO::fopen(m_Filename.c_str(), L"wb"); + FILE *binFile = FileIO::fopen(m_Filename.c_str(), "wb"); if(!binFile) { - RDCERR("Can't open capture file '%ls' for write, errno %d", m_Filename.c_str(), errno); + RDCERR("Can't open capture file '%s' for write, errno %d", m_Filename.c_str(), errno); m_ErrorCode = eSerError_FileIO; m_HasError = true; return 0; @@ -641,7 +641,7 @@ void Serialiser::DebugPrint(const char *fmt, ...) m_DebugText += tmpBuf; #ifdef DEBUG_TEXT_SERIALISER - FILE *f = FileIO::fopen(m_Filename.c_str(), L"ab"); + FILE *f = FileIO::fopen(m_Filename.c_str(), "ab"); if(f) { @@ -721,7 +721,7 @@ uint32_t Serialiser::PushContext(const char *name, uint32_t chunkIdx, bool small if(m_DebugTextWriting) { - DebugPrint("%hs (%d)\n", name, chunkIdx); + DebugPrint("%s (%d)\n", name, chunkIdx); DebugPrint("{\n"); } } @@ -806,7 +806,7 @@ uint32_t Serialiser::PushContext(const char *name, uint32_t chunkIdx, bool small if(m_DebugTextWriting) { - DebugPrint("%hs\n", name ? name : "Unknown"); + DebugPrint("%s\n", name ? name : "Unknown"); DebugPrint("{\n"); } } @@ -858,7 +858,7 @@ void Serialiser::PopContext(const char *name, uint32_t chunkIdx) } if(m_DebugTextWriting) - DebugPrint("} // %hs\n", name); + DebugPrint("} // %s\n", name); } else { @@ -891,7 +891,7 @@ void Serialiser::SerialiseString(const char *name, string &el) string s = el; if(s.length() > 64) s = s.substr(0, 60) + "..."; - DebugPrint("%hs: \"%hs\"\n", name, s.c_str()); + DebugPrint("%s: \"%s\"\n", name, s.c_str()); } } else @@ -903,23 +903,11 @@ void Serialiser::SerialiseString(const char *name, string &el) string s = el; if(s.length() > 64) s = s.substr(0, 60) + "..."; - DebugPrint("%hs: \"%hs\"\n", name, s.c_str()); + DebugPrint("%s: \"%s\"\n", name, s.c_str()); } } } -void Serialiser::SerialiseString(const char *name, wstring &el) -{ - string utf8str; - if(m_Mode >= WRITING) - utf8str = StringFormat::Wide2UTF8(el); - - SerialiseString(name, utf8str); - - if(m_Mode == READING) - el = StringFormat::UTF82Wide(utf8str); -} - void Serialiser::Insert(Chunk *chunk) { m_Chunks.push_back(chunk); @@ -1005,7 +993,7 @@ void Serialiser::SerialiseBuffer(const char *name, byte *&buf, size_t &len) ellipsis = " "; } - DebugPrint("%hs: RawBuffer % 5d:< 0x%08x 0x%08x 0x%08x 0x%08x %hs % 8.4ff % 8.4ff % 8.4ff % 8.4ff %hs >\n" + DebugPrint("%s: RawBuffer % 5d:< 0x%08x 0x%08x 0x%08x 0x%08x %s % 8.4ff % 8.4ff % 8.4ff % 8.4ff %s >\n" , name , bufLen, lbuf[0], lbuf[1], lbuf[2], lbuf[3], ellipsis , fbuf[0], fbuf[1], fbuf[2], fbuf[3], ellipsis); @@ -1020,11 +1008,6 @@ template<> void Serialiser::Serialise(const char *name, string &el) SerialiseString(name, el); } -template<> void Serialiser::Serialise(const char *name, wstring &el) -{ - SerialiseString(name, el); -} - // floats need aligned reads template<> void Serialiser::ReadInto(float &f) { @@ -1095,9 +1078,7 @@ template<> string ToStrHelper::Get(const byte &el) { char tostrBuf[256] = {0}; - StringFormat::snprintf(tostrBuf, 255, "%d%d%d%d%d%d%d%d" - , (el&0x80)?1:0, (el&0x40)?1:0, (el&0x20)?1:0, (el&0x10)?1:0 - , (el&0x8)?1:0, (el&0x4)?1:0, (el&0x2)?1:0, (el&0x1)?1:0); + StringFormat::snprintf(tostrBuf, 255, "%08hhb", el); return tostrBuf; } diff --git a/renderdoc/serialise/serialiser.h b/renderdoc/serialise/serialiser.h index 2c6935edb..2b6b992e3 100644 --- a/renderdoc/serialise/serialiser.h +++ b/renderdoc/serialise/serialiser.h @@ -41,7 +41,6 @@ #include using std::set; using std::string; -using std::wstring; // template helpers template @@ -172,7 +171,7 @@ class Serialiser // Init and error handling Serialiser(size_t length, const byte *memoryBuf, bool fileheader); - Serialiser(const wchar_t *path, Mode mode, bool debugMode = false); + Serialiser(const char *path, Mode mode, bool debugMode = false); ~Serialiser(); bool HasError() { return m_HasError; } @@ -365,7 +364,7 @@ class Serialiser if(name != NULL && m_DebugTextWriting) { for(size_t i=0; i < Num; i++) - DebugPrint("%hs[%d] = %hs\n", name, i, ToStr::Get(el[i]).c_str()); + DebugPrint("%s[%d] = %s\n", name, i, ToStr::Get(el[i]).c_str()); } } @@ -382,7 +381,7 @@ class Serialiser } if(name != NULL && m_DebugTextWriting) - DebugPrint("%hs: %hs\n", name, ToStr::Get(el).c_str()); + DebugPrint("%s: %s\n", name, ToStr::Get(el).c_str()); } template @@ -426,14 +425,6 @@ class Serialiser } } - void Serialise(const char *name, rdctype::wstr &el) - { - wstring str; - if(m_Mode == WRITING && el.elems != NULL) str = el.elems; - SerialiseString(name, str); - if(m_Mode == READING) el = str; - } - void Serialise(const char *name, rdctype::str &el) { int32_t sz = el.count; @@ -489,7 +480,6 @@ class Serialiser // not sure if I still neeed these specialisations anymore. void SerialiseString(const char *name, string &el); - void SerialiseString(const char *name, wstring &el); // serialise a buffer. // @@ -709,7 +699,7 @@ class Serialiser Threading::ThreadHandle m_ResolverThread; volatile bool m_ResolverThreadKillSignal; - wstring m_Filename; + string m_Filename; // raw binary buffer uint64_t m_BufferSize; @@ -750,7 +740,6 @@ class Serialiser }; template<> void Serialiser::Serialise(const char *name, string &el); -template<> void Serialiser::Serialise(const char *name, wstring &el); // floats need aligned reads template<> void Serialiser::ReadInto(float &f); diff --git a/renderdoc/serialise/string_utils.cpp b/renderdoc/serialise/string_utils.cpp new file mode 100644 index 000000000..c32fe6c4b --- /dev/null +++ b/renderdoc/serialise/string_utils.cpp @@ -0,0 +1,57 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2014 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 "string_utils.h" +#include +#include +#include +#include + +string strlower(const string& str) +{ + string newstr(str); + transform(newstr.begin(), newstr.end(), newstr.begin(), tolower); + return newstr; +} + +wstring strlower(const wstring& str) +{ + wstring newstr(str); + transform(newstr.begin(), newstr.end(), newstr.begin(), towlower); + return newstr; +} + +string strupper(const string& str) +{ + string newstr(str); + transform(newstr.begin(), newstr.end(), newstr.begin(), toupper); + return newstr; +} + +wstring strupper(const wstring& str) +{ + wstring newstr(str); + transform(newstr.begin(), newstr.end(), newstr.begin(), towupper); + return newstr; +} diff --git a/renderdoc/serialise/string_utils.h b/renderdoc/serialise/string_utils.h new file mode 100644 index 000000000..c16ad6b26 --- /dev/null +++ b/renderdoc/serialise/string_utils.h @@ -0,0 +1,109 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2014 Crytek + * + * 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. + ******************************************************************************/ + +#pragma once + +#include +#include +using std::string; +using std::wstring; +using std::vector; + +std::string strlower(const std::string& str); +std::wstring strlower(const std::wstring& str); +std::string strupper(const std::string& str); +std::wstring strupper(const std::wstring& str); + +template strType basename(const strType &path) +{ + strType base = path; + + if(base.length() == 0) + return base; + + if(base[base.length()-1] == '/' || base[base.length()-1] == '\\') + base.erase(base.size()-1); + + typename strType::value_type pathSep[2] = { '\\', '/' }; + + size_t offset = base.find_last_of(pathSep); + + if(offset == strType::npos) + return base; + + return base.substr(offset+1); +} + +template strType dirname(const strType &path) +{ + strType base = path; + + if(base.length() == 0) + return base; + + if(base[base.length()-1] == '/' || base[base.length()-1] == '\\') + base.erase(base.size()-1); + + typename strType::value_type pathSep[2] = { '\\', '/' }; + + size_t offset = base.find_last_of(pathSep); + + if(offset == strType::npos) + { + base.resize(1); + base[0] = typename strType::value_type('.'); + return base; + } + + return base.substr(0, offset); +} + +template +void split(const std::basic_string& in, vector >& out, const CharType sep) +{ + std::basic_string work = in; + typename std::basic_string::size_type offset = work.find(sep); + + while(offset != std::basic_string::npos) + { + out.push_back(work.substr(0, offset)); + work = work.substr(offset+1); + + offset = work.find(sep); + } + + if(work.size() && work[0] != 0) + out.push_back(work); +} + +template +void merge(const vector >& in, std::basic_string& out, const CharType sep) +{ + out = std::basic_string(); + for(size_t i=0; i < in.size(); i++) + { + out += in[i]; + out += sep; + } +} diff --git a/renderdoc/serialise/utf8printf.cpp b/renderdoc/serialise/utf8printf.cpp index bf0fe3d83..b8fdc0fbe 100644 --- a/renderdoc/serialise/utf8printf.cpp +++ b/renderdoc/serialise/utf8printf.cpp @@ -884,7 +884,7 @@ void formatargument(char type, void *rawarg, FormatterParams formatter, char *&o len = RDCMIN(len, precision); // convert the substring to UTF-8 - string str = StringFormat::Wide2UTF8(wstring(ws, ws + len)); + string str = StringFormat::Wide2UTF8(std::wstring(ws, ws + len)); // add left padding, if necessary if(formatter.Width != FormatterParams::NoWidth && len < width && !(formatter.Flags&LeftJustify)) diff --git a/renderdoccmd/renderdoccmd.cpp b/renderdoccmd/renderdoccmd.cpp index 3e078c625..a00c4f964 100644 --- a/renderdoccmd/renderdoccmd.cpp +++ b/renderdoccmd/renderdoccmd.cpp @@ -50,13 +50,16 @@ uint32_t wtoi(wchar_t *str) return ret; } -bool argequal(const wchar_t *a, const wchar_t *b) +bool argequal(const char *a, const char *b) { if(a == NULL || b == NULL) return false; while(*a && *b) { - if(towlower(*a) != towlower(*b)) + // only compare ASCII characters in UTF-8 string + if((*a & 0x80) == 0 && + (*b & 0x80) == 0 && + tolower(*a) != tolower(*b)) break; a++; @@ -110,7 +113,7 @@ void DisplayRendererPreview(ReplayRenderer *renderer) DisplayRendererPreview(renderer, d); } -int renderdoccmd(int argc, wchar_t **argv) +int renderdoccmd(int argc, char **argv) { CaptureOptions opts; opts.AllowFullscreen = false; @@ -121,11 +124,11 @@ int renderdoccmd(int argc, wchar_t **argv) if(argc >= 2) { // fall through and print usage - if(argequal(argv[1], L"--help") || argequal(argv[1], L"-h")) + if(argequal(argv[1], "--help") || argequal(argv[1], "-h")) { } // if we were given a logfile, load it and continually replay it. - else if(wcsstr(argv[1], L".rdc") != NULL) + else if(strstr(argv[1], ".rdc") != NULL) { float progress = 0.0f; ReplayRenderer *renderer = NULL; @@ -138,7 +141,7 @@ int renderdoccmd(int argc, wchar_t **argv) return 0; } // replay a logfile - else if(argequal(argv[1], L"--replay") || argequal(argv[1], L"-r")) + else if(argequal(argv[1], "--replay") || argequal(argv[1], "-r")) { if(argc >= 3) { @@ -162,7 +165,7 @@ int renderdoccmd(int argc, wchar_t **argv) // can't do this on other platforms as there's no nice extension // and we don't want to just launch any single parameter in case it's // -h or -help or some other guess/typo - else if(wcsstr(argv[1], L".exe") != NULL) + else if(strstr(argv[1], ".exe") != NULL) { uint32_t ident = RENDERDOC_ExecuteAndInject(argv[1], NULL, NULL, NULL, &opts, false); @@ -175,16 +178,16 @@ int renderdoccmd(int argc, wchar_t **argv) } #endif // capture a program with default capture options - else if(argequal(argv[1], L"--capture") || argequal(argv[1], L"-c")) + else if(argequal(argv[1], "--capture") || argequal(argv[1], "-c")) { if(argc >= 3) { uint32_t ident = RENDERDOC_ExecuteAndInject(argv[2], NULL, NULL, NULL, &opts, false); if(ident == 0) - fprintf(stderr, "Failed to create & inject to '%ls'\n", argv[2]); + fprintf(stderr, "Failed to create & inject to '%s'\n", argv[2]); else - fprintf(stderr, "Created & injected '%ls' as %d\n", argv[2], ident); + fprintf(stderr, "Created & injected '%s' as %d\n", argv[2], ident); return ident; } @@ -194,14 +197,14 @@ int renderdoccmd(int argc, wchar_t **argv) } } // inject into a running process with default capture options - else if(argequal(argv[1], L"--inject") || argequal(argv[1], L"-i")) + else if(argequal(argv[1], "--inject") || argequal(argv[1], "-i")) { if(argc >= 3) { - wchar_t *pid = argv[2]; - while(*pid == L'"' || iswspace(*pid)) pid++; + char *pid = argv[2]; + while(*pid == '"' || isspace(*pid)) pid++; - uint32_t pidNum = (uint32_t)wtoi(pid); + uint32_t pidNum = (uint32_t)atoi(pid); uint32_t ident = RENDERDOC_InjectIntoProcess(pidNum, NULL, &opts, false); @@ -218,13 +221,13 @@ int renderdoccmd(int argc, wchar_t **argv) } } // spawn remote replay host - else if(argequal(argv[1], L"--replayhost") || argequal(argv[1], L"-rh")) + else if(argequal(argv[1], "--replayhost") || argequal(argv[1], "-rh")) { RENDERDOC_SpawnReplayHost(NULL); return 1; } // replay a logfile over the network on a remote host - else if(argequal(argv[1], L"--remotereplay") || argequal(argv[1], L"-rr")) + else if(argequal(argv[1], "--remotereplay") || argequal(argv[1], "-rr")) { if(argc >= 4) { @@ -251,21 +254,21 @@ int renderdoccmd(int argc, wchar_t **argv) } } // not documented/useful for manual use on the cmd line, used internally - else if(argequal(argv[1], L"--cap32for64")) + else if(argequal(argv[1], "--cap32for64")) { if(argc >= 5) { - wchar_t *pid = argv[2]; - while(*pid == L'"' || iswspace(*pid)) pid++; + char *pid = argv[2]; + while(*pid == '"' || isspace(*pid)) pid++; - uint32_t pidNum = (uint32_t)wtoi(pid); + uint32_t pidNum = (uint32_t)atoi(pid); - wchar_t *log = argv[3]; + char *log = argv[3]; if(log[0] == 0) log = NULL; CaptureOptions cmdopts; - string optstring(&argv[4][0], &argv[4][0] + wcslen(argv[4])); + string optstring(&argv[4][0], &argv[4][0] + strlen(argv[4])); cmdopts.FromString(optstring); diff --git a/renderdoccmd/renderdoccmd_linux.cpp b/renderdoccmd/renderdoccmd_linux.cpp index 8e412d0b4..d13ca74e9 100644 --- a/renderdoccmd/renderdoccmd_linux.cpp +++ b/renderdoccmd/renderdoccmd_linux.cpp @@ -37,14 +37,14 @@ #include -using std::wstring; +using std::string; -wstring GetUsername() +string GetUsername() { char buf[256] = {0}; getlogin_r(buf, 255); - return wstring(buf, buf+strlen(buf)); + return string(buf, buf+strlen(buf)); } void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay displayCfg) @@ -124,7 +124,7 @@ void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay displayCfg) // be resolved and libGL wouldn't link, meaning dlsym(RTLD_NEXT) would fai extern "C" void glXWaitGL(); -int renderdoccmd(int argc, wchar_t **argv); +int renderdoccmd(int argc, char **argv); int main(int argc, char *argv[]) { @@ -136,30 +136,5 @@ int main(int argc, char *argv[]) // process any linux-specific arguments here - wchar_t **wargv = new wchar_t*[argc]; - - iconv_t ic = iconv_open("WCHAR_T", "UTF-8"); - - for(int i=0; i < argc; i++) - { - size_t len = strlen(argv[i]); - wargv[i] = new wchar_t[len+2]; - memset(wargv[i], 0, (len+2)*sizeof(wchar_t)); - - char *inbuf = argv[i]; - size_t insize = len+1; // include null terminator - char *outbuf = (char *)wargv[i]; - size_t outsize = len*sizeof(wchar_t); - iconv(ic, &inbuf, &insize, &outbuf, &outsize); - } - - iconv_close(ic); - - int ret = renderdoccmd(argc, wargv); - - for(int i=0; i < argc; i++) - delete[] wargv[i]; - delete[] wargv; - - return ret; + return renderdoccmd(argc, argv); } diff --git a/renderdoccmd/renderdoccmd_win32.cpp b/renderdoccmd/renderdoccmd_win32.cpp index fe49371cd..751d13c65 100644 --- a/renderdoccmd/renderdoccmd_win32.cpp +++ b/renderdoccmd/renderdoccmd_win32.cpp @@ -247,18 +247,29 @@ void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay displayCfg) } } -int renderdoccmd(int argc, wchar_t **argv); -bool argequal(const wchar_t *a, const wchar_t *b); +int renderdoccmd(int argc, char **argv); +bool argequal(const char *a, const char *b); int WINAPI wWinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nShowCmd) { - LPWSTR *argv; + LPWSTR *wargv; int argc; - argv = CommandLineToArgvW(GetCommandLine(), &argc); + wargv = CommandLineToArgvW(GetCommandLine(), &argc); + + char **argv = new char*[argc]; + + for(int i=0; i < argc; i++) + { + size_t len = wcslen(wargv[i]); + argv[i] = new char[len*4 + 1]; + argv[i][len*4] = 0; + + WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, &argv[i][0], (int)len, NULL, NULL); + } hInstance = hInst; @@ -285,7 +296,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hInst, CrashGenerationServer *crashServer = NULL; // special WIN32 option for launching the crash handler - if(argc == 2 && !_wcsicmp(argv[1], L"--crashhandle")) + if(argc == 2 && !_stricmp(argv[1], "--crashhandle")) { wchar_t tempPath[MAX_PATH] = {0}; GetTempPathW(MAX_PATH-1, tempPath); @@ -460,19 +471,23 @@ int WINAPI wWinMain(_In_ HINSTANCE hInst, // this installs a global windows hook pointing at renderdocshim*.dll that filters all running processes and // loads renderdoc.dll in the target one. In any other process it unloads as soon as possible - if(argc == 5 && argequal(argv[1], L"--globalhook")) + if(argc == 5 && argequal(argv[1], "--globalhook")) { - wchar_t *pathmatch = argv[2]; + char *pathmatch = argv[2]; + char *log = argv[3]; - wchar_t *log = argv[3]; + size_t len = strlen(pathmatch); + wstring wpathmatch; wpathmatch.resize(len); + MultiByteToWideChar(CP_UTF8, 0, pathmatch, -1, &wpathmatch[0], (int)len); + wpathmatch.resize(wcslen(wpathmatch.c_str())); CaptureOptions cmdopts; - string optstring(&argv[4][0], &argv[4][0] + wcslen(argv[4])); + string optstring(&argv[4][0]); cmdopts.FromString(optstring); // make sure the user doesn't accidentally run this with 'a' as a parameter or something. // "a.exe" is over 4 characters so this limit should not be a problem. - if(wcslen(pathmatch) < 4) + if(wpathmatch.length() < 4) { fprintf(stderr, "--globalhook path match is too short/general. Danger of matching too many processes!\n"); return 1; @@ -527,9 +542,9 @@ int WINAPI wWinMain(_In_ HINSTANCE hInst, { memset(shimdata, 0, sizeof(ShimData)); - wcsncpy_s(shimdata->pathmatchstring, pathmatch, _TRUNCATE); + wcsncpy_s(shimdata->pathmatchstring, wpathmatch.c_str(), _TRUNCATE); wcsncpy_s(shimdata->rdocpath, rdocpath, _TRUNCATE); - wcsncpy_s(shimdata->log, log, _TRUNCATE); + strncpy_s(shimdata->log, log, _TRUNCATE); memcpy (shimdata->opts, &cmdopts, sizeof(CaptureOptions)); static_assert(sizeof(CaptureOptions) <= sizeof(shimdata->opts), "ShimData options is too small"); diff --git a/renderdocshim/renderdocshim.cpp b/renderdocshim/renderdocshim.cpp index 6a1522586..cb1dfcdee 100644 --- a/renderdocshim/renderdocshim.cpp +++ b/renderdocshim/renderdocshim.cpp @@ -37,7 +37,7 @@ struct CaptureOptions; typedef void (__cdecl *pRENDERDOC_SetCaptureOptions)(const CaptureOptions *opts); -typedef void (__cdecl *pRENDERDOC_SetLogFile)(const wchar_t *logfile); +typedef void (__cdecl *pRENDERDOC_SetLogFile)(const char *logfile); #if defined(RELEASE) #define LOGPRINT(txt) do { } while (0) diff --git a/renderdocshim/renderdocshim.h b/renderdocshim/renderdocshim.h index 5112a8427..468ca3b95 100644 --- a/renderdocshim/renderdocshim.h +++ b/renderdocshim/renderdocshim.h @@ -26,7 +26,7 @@ struct ShimData { wchar_t pathmatchstring[2048]; wchar_t rdocpath[2048]; - wchar_t log[2048]; + char log[2048]; unsigned char opts[512]; }; diff --git a/renderdocui/Interop/CustomMarshaling.cs b/renderdocui/Interop/CustomMarshaling.cs index 9a9c5ae4f..117cb87dd 100644 --- a/renderdocui/Interop/CustomMarshaling.cs +++ b/renderdocui/Interop/CustomMarshaling.cs @@ -36,21 +36,11 @@ namespace renderdoc public IntPtr elems; public Int32 count; }; - - // convenience - for when we want to define an array of strings, this - // struct lets us do that - [StructLayout(LayoutKind.Sequential)] - public struct rdctype_wstr - { - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] - string s; - }; public enum CustomUnmanagedType { TemplatedArray = 0, - AsciiTemplatedString, - WideTemplatedString, + UTF8TemplatedString, FixedArray, Union, Skip, @@ -116,6 +106,20 @@ namespace renderdoc return mem; } + public static IntPtr MakeUTF8String(string s) + { + int len = System.Text.Encoding.UTF8.GetByteCount(s); + + IntPtr mem = Marshal.AllocHGlobal(len + 1); + byte[] bytes = new byte[len + 1]; + bytes[len] = 0; // add NULL terminator + System.Text.Encoding.UTF8.GetBytes(s, 0, s.Length, bytes, 0); + + Marshal.Copy(bytes, 0, mem, len+1); + + return mem; + } + public static void Free(IntPtr mem) { Marshal.FreeHGlobal(mem); @@ -130,8 +134,7 @@ namespace renderdoc var cma = GetCustomAttr(field); if (cma != null && - (cma.CustomType == CustomUnmanagedType.AsciiTemplatedString || - cma.CustomType == CustomUnmanagedType.WideTemplatedString || + (cma.CustomType == CustomUnmanagedType.UTF8TemplatedString || cma.CustomType == CustomUnmanagedType.TemplatedArray || cma.CustomType == CustomUnmanagedType.CustomClassPointer) ) @@ -231,8 +234,7 @@ namespace renderdoc break; } case CustomUnmanagedType.TemplatedArray: - case CustomUnmanagedType.AsciiTemplatedString: - case CustomUnmanagedType.WideTemplatedString: + case CustomUnmanagedType.UTF8TemplatedString: size += Marshal.SizeOf(typeof(templated_array)); break; case CustomUnmanagedType.FixedArray: @@ -374,12 +376,26 @@ namespace renderdoc } } + public static string PtrToStringUTF8(IntPtr elems, int count) + { + byte[] buffer = new byte[count]; + Marshal.Copy(elems, buffer, 0, buffer.Length); + return System.Text.Encoding.UTF8.GetString(buffer); + } + + public static string PtrToStringUTF8(IntPtr elems) + { + int len = 0; + while (Marshal.ReadByte(elems, len) != 0) ++len; + return PtrToStringUTF8(elems, len); + } + // specific versions of the above GetTemplatedArray for convenience. - public static string TemplatedArrayToUniString(IntPtr sourcePtr, bool freeMem) + public static string TemplatedArrayToString(IntPtr sourcePtr, bool freeMem) { templated_array arr = (templated_array)Marshal.PtrToStructure(sourcePtr, typeof(templated_array)); - string val = Marshal.PtrToStringUni(arr.elems, arr.count); + string val = PtrToStringUTF8(arr.elems, arr.count); if (freeMem) RENDERDOC_FreeArrayMem(arr.elems); @@ -387,7 +403,7 @@ namespace renderdoc return val; } - public static string[] TemplatedArrayToUniStringArray(IntPtr sourcePtr, bool freeMem) + public static string[] TemplatedArrayToStringArray(IntPtr sourcePtr, bool freeMem) { templated_array arr = (templated_array)Marshal.PtrToStructure(sourcePtr, typeof(templated_array)); @@ -398,7 +414,7 @@ namespace renderdoc { IntPtr ptr = new IntPtr((arr.elems.ToInt64() + i * arrSize)); - ret[i] = TemplatedArrayToUniString(ptr, freeMem); + ret[i] = TemplatedArrayToString(ptr, freeMem); } if (freeMem) @@ -510,32 +526,7 @@ namespace renderdoc } break; } - case CustomUnmanagedType.AsciiTemplatedString: - { - // templated_array must be pointer-aligned - long alignment = fieldPtr.ToInt64() % IntPtr.Size; - if (alignment != 0) - { - fieldPtr = new IntPtr(fieldPtr.ToInt64() + IntPtr.Size - alignment); - } - - templated_array arr = (templated_array)Marshal.PtrToStructure(fieldPtr, typeof(templated_array)); - if (field.FieldType == typeof(string)) - { - if (arr.elems == IntPtr.Zero) - field.SetValue(ret, ""); - else - field.SetValue(ret, Marshal.PtrToStringAnsi(arr.elems, arr.count)); - } - else - { - throw new NotImplementedException("non-string element marked to marshal as AsciiTemplatedString"); - } - if(freeMem) - RENDERDOC_FreeArrayMem(arr.elems); - break; - } - case CustomUnmanagedType.WideTemplatedString: + case CustomUnmanagedType.UTF8TemplatedString: case CustomUnmanagedType.TemplatedArray: { // templated_array must be pointer-aligned @@ -551,7 +542,7 @@ namespace renderdoc if (arr.elems == IntPtr.Zero) field.SetValue(ret, ""); else - field.SetValue(ret, Marshal.PtrToStringUni(arr.elems, arr.count)); + field.SetValue(ret, PtrToStringUTF8(arr.elems, arr.count)); } else { diff --git a/renderdocui/Interop/D3D11PipelineState.cs b/renderdocui/Interop/D3D11PipelineState.cs index 78b3c16ec..abbc8fb9f 100644 --- a/renderdocui/Interop/D3D11PipelineState.cs +++ b/renderdocui/Interop/D3D11PipelineState.cs @@ -46,7 +46,7 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class LayoutInput { - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string SemanticName; public UInt32 SemanticIndex; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] @@ -103,7 +103,7 @@ namespace renderdoc } public ResourceId Shader; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string ShaderName; public bool customName; private IntPtr _ptr_ShaderDetails; @@ -119,7 +119,7 @@ namespace renderdoc { public ResourceId View; public ResourceId Resource; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Type; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] public ResourceFormat Format; @@ -155,13 +155,13 @@ namespace renderdoc public class Sampler { public ResourceId Samp; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string AddressU, AddressV, AddressW; [CustomMarshalAs(CustomUnmanagedType.FixedArray, FixedLength = 4)] public float[] BorderColor; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Comparison; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Filter; public UInt32 MaxAniso; public float MaxLOD; @@ -184,7 +184,7 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class ClassInstance { - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] string name; }; @@ -261,7 +261,7 @@ namespace renderdoc { public ResourceId State; public bool DepthEnable; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string DepthFunc; public bool DepthWrites; public bool StencilEnable; @@ -271,13 +271,13 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class StencilOp { - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string FailOp; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string DepthFailOp; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string PassOp; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Func; }; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] @@ -302,17 +302,17 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class BlendOp { - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Source; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Destination; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Operation; }; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] public BlendOp m_Blend, m_AlphaBlend; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string LogicOp; public bool Enabled; diff --git a/renderdocui/Interop/FetchInfo.cs b/renderdocui/Interop/FetchInfo.cs index 642c0a53a..4b040fced 100644 --- a/renderdocui/Interop/FetchInfo.cs +++ b/renderdocui/Interop/FetchInfo.cs @@ -112,7 +112,7 @@ namespace renderdoc public bool special; public SpecialFormat specialFormat; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string strname; public UInt32 compCount; @@ -230,7 +230,7 @@ namespace renderdoc public class FetchBuffer { public ResourceId ID; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string name; public bool customName; public UInt32 length; @@ -242,7 +242,7 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class FetchTexture { - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string name; public bool customName; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] @@ -285,7 +285,7 @@ namespace renderdoc [CustomMarshalAs(CustomUnmanagedType.TemplatedArray)] public UInt64[] callstack; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string eventDesc; public UInt64 fileOffset; @@ -297,7 +297,7 @@ namespace renderdoc public DebugMessageCategory category; public DebugMessageSeverity severity; public UInt32 messageID; - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string description; }; @@ -313,7 +313,7 @@ namespace renderdoc { public UInt32 eventID, drawcallID; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string name; public DrawcallFlags flags; diff --git a/renderdocui/Interop/ReplayRenderer.cs b/renderdocui/Interop/ReplayRenderer.cs index d65d59ba9..a740eb440 100644 --- a/renderdocui/Interop/ReplayRenderer.cs +++ b/renderdocui/Interop/ReplayRenderer.cs @@ -40,7 +40,7 @@ namespace renderdoc public UInt64 timestamp; [CustomMarshalAs(CustomUnmanagedType.TemplatedArray)] public byte[] thumbnail; - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string localpath; }; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] @@ -49,7 +49,7 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public struct RegisterAPIData { - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string APIName; }; @@ -59,7 +59,7 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public struct BusyData { - [CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string ClientName; }; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] @@ -193,12 +193,12 @@ namespace renderdoc private static extern bool ReplayRenderer_GetGLPipelineState(IntPtr real, IntPtr mem); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern bool ReplayRenderer_BuildCustomShader(IntPtr real, string entry, string source, UInt32 compileFlags, ShaderStageType type, ref ResourceId shaderID, IntPtr errorMem); + private static extern bool ReplayRenderer_BuildCustomShader(IntPtr real, IntPtr entry, IntPtr source, UInt32 compileFlags, ShaderStageType type, ref ResourceId shaderID, IntPtr errorMem); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern bool ReplayRenderer_FreeCustomShader(IntPtr real, ResourceId id); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern bool ReplayRenderer_BuildTargetShader(IntPtr real, string entry, string source, UInt32 compileFlags, ShaderStageType type, ref ResourceId shaderID, IntPtr errorMem); + private static extern bool ReplayRenderer_BuildTargetShader(IntPtr real, IntPtr entry, IntPtr source, UInt32 compileFlags, ShaderStageType type, ref ResourceId shaderID, IntPtr errorMem); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern bool ReplayRenderer_ReplaceResource(IntPtr real, ResourceId from, ResourceId to); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] @@ -235,7 +235,7 @@ namespace renderdoc private static extern bool ReplayRenderer_GetCBufferVariableContents(IntPtr real, ResourceId shader, UInt32 cbufslot, ResourceId buffer, UInt32 offs, IntPtr outvars); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern bool ReplayRenderer_SaveTexture(IntPtr real, TextureSave saveData, string path); + private static extern bool ReplayRenderer_SaveTexture(IntPtr real, TextureSave saveData, IntPtr path); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern bool ReplayRenderer_GetPostVSData(IntPtr real, MeshDataStage stage, IntPtr outdata); @@ -333,12 +333,18 @@ namespace renderdoc ResourceId ret = ResourceId.Null; - bool success = ReplayRenderer_BuildCustomShader(m_Real, entry, source, compileFlags, type, ref ret, mem); + IntPtr entry_mem = CustomMarshal.MakeUTF8String(entry); + IntPtr source_mem = CustomMarshal.MakeUTF8String(source); + + bool success = ReplayRenderer_BuildCustomShader(m_Real, entry_mem, source_mem, compileFlags, type, ref ret, mem); + + CustomMarshal.Free(entry_mem); + CustomMarshal.Free(source_mem); if (!success) ret = ResourceId.Null; - errors = CustomMarshal.TemplatedArrayToUniString(mem, true); + errors = CustomMarshal.TemplatedArrayToString(mem, true); CustomMarshal.Free(mem); @@ -354,12 +360,18 @@ namespace renderdoc ResourceId ret = ResourceId.Null; - bool success = ReplayRenderer_BuildTargetShader(m_Real, entry, source, compileFlags, type, ref ret, mem); + IntPtr entry_mem = CustomMarshal.MakeUTF8String(entry); + IntPtr source_mem = CustomMarshal.MakeUTF8String(source); + + bool success = ReplayRenderer_BuildTargetShader(m_Real, entry_mem, source_mem, compileFlags, type, ref ret, mem); + + CustomMarshal.Free(entry_mem); + CustomMarshal.Free(source_mem); if (!success) ret = ResourceId.Null; - errors = CustomMarshal.TemplatedArrayToUniString(mem, true); + errors = CustomMarshal.TemplatedArrayToString(mem, true); CustomMarshal.Free(mem); @@ -480,7 +492,7 @@ namespace renderdoc string[] ret = null; if (success) - ret = CustomMarshal.TemplatedArrayToUniStringArray(mem, true); + ret = CustomMarshal.TemplatedArrayToStringArray(mem, true); CustomMarshal.Free(mem); @@ -596,7 +608,15 @@ namespace renderdoc } public bool SaveTexture(TextureSave saveData, string path) - { return ReplayRenderer_SaveTexture(m_Real, saveData, path); } + { + IntPtr path_mem = CustomMarshal.MakeUTF8String(path); + + bool ret = ReplayRenderer_SaveTexture(m_Real, saveData, path_mem); + + CustomMarshal.Free(path_mem); + + return ret; + } public PostVSMeshData GetPostVSData(MeshDataStage stage) { @@ -686,7 +706,7 @@ namespace renderdoc private static extern bool RemoteRenderer_RemoteSupportedReplays(IntPtr real, IntPtr outlist); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern ReplayCreateStatus RemoteRenderer_CreateProxyRenderer(IntPtr real, UInt32 proxyid, string logfile, ref float progress, ref IntPtr rendPtr); + private static extern ReplayCreateStatus RemoteRenderer_CreateProxyRenderer(IntPtr real, UInt32 proxyid, IntPtr logfile, ref float progress, ref IntPtr rendPtr); private IntPtr m_Real = IntPtr.Zero; @@ -709,7 +729,7 @@ namespace renderdoc string[] ret = null; if (success) - ret = CustomMarshal.TemplatedArrayToUniStringArray(mem, true); + ret = CustomMarshal.TemplatedArrayToStringArray(mem, true); CustomMarshal.Free(mem); @@ -724,7 +744,7 @@ namespace renderdoc string[] ret = null; if (success) - ret = CustomMarshal.TemplatedArrayToUniStringArray(mem, true); + ret = CustomMarshal.TemplatedArrayToStringArray(mem, true); CustomMarshal.Free(mem); @@ -735,7 +755,11 @@ namespace renderdoc { IntPtr rendPtr = IntPtr.Zero; - ReplayCreateStatus ret = RemoteRenderer_CreateProxyRenderer(m_Real, (UInt32)proxyid, logfile, ref progress, ref rendPtr); + IntPtr logfile_mem = CustomMarshal.MakeUTF8String(logfile); + + ReplayCreateStatus ret = RemoteRenderer_CreateProxyRenderer(m_Real, (UInt32)proxyid, logfile_mem, ref progress, ref rendPtr); + + CustomMarshal.Free(logfile_mem); if (rendPtr == IntPtr.Zero || ret != ReplayCreateStatus.Success) { @@ -767,13 +791,13 @@ namespace renderdoc [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern void RemoteAccess_QueueCapture(IntPtr real, UInt32 frameNumber); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern void RemoteAccess_CopyCapture(IntPtr real, UInt32 remoteID, string localpath); + private static extern void RemoteAccess_CopyCapture(IntPtr real, UInt32 remoteID, IntPtr localpath); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern void RemoteAccess_ReceiveMessage(IntPtr real, IntPtr outmsg); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern UInt32 RENDERDOC_EnumerateRemoteConnections(string host, UInt32[] idents); + private static extern UInt32 RENDERDOC_EnumerateRemoteConnections(IntPtr host, UInt32[] idents); private IntPtr m_Real = IntPtr.Zero; private bool m_Connected; @@ -792,10 +816,10 @@ namespace renderdoc else { m_Connected = true; - Target = Marshal.PtrToStringUni(RemoteAccess_GetTarget(m_Real)); - API = Marshal.PtrToStringUni(RemoteAccess_GetAPI(m_Real)); + Target = CustomMarshal.PtrToStringUTF8(RemoteAccess_GetTarget(m_Real)); + API = CustomMarshal.PtrToStringUTF8(RemoteAccess_GetAPI(m_Real)); PID = RemoteAccess_GetPID(m_Real); - BusyClient = Marshal.PtrToStringUni(RemoteAccess_GetBusyClient(m_Real)); + BusyClient = CustomMarshal.PtrToStringUTF8(RemoteAccess_GetBusyClient(m_Real)); } CaptureExists = false; @@ -805,11 +829,15 @@ namespace renderdoc public static UInt32[] GetRemoteIdents(string host) { - UInt32 numIdents = RENDERDOC_EnumerateRemoteConnections("", null); + UInt32 numIdents = RENDERDOC_EnumerateRemoteConnections(IntPtr.Zero, null); UInt32[] idents = new UInt32[numIdents]; - RENDERDOC_EnumerateRemoteConnections(host, idents); + IntPtr host_mem = CustomMarshal.MakeUTF8String(host); + + RENDERDOC_EnumerateRemoteConnections(host_mem, idents); + + CustomMarshal.Free(host_mem); return idents; } @@ -835,7 +863,11 @@ namespace renderdoc public void CopyCapture(UInt32 id, string localpath) { - RemoteAccess_CopyCapture(m_Real, id, localpath); + IntPtr localpath_mem = CustomMarshal.MakeUTF8String(localpath); + + RemoteAccess_CopyCapture(m_Real, id, localpath_mem); + + CustomMarshal.Free(localpath_mem); } public void ReceiveMessage() diff --git a/renderdocui/Interop/Shader.cs b/renderdocui/Interop/Shader.cs index 9cceb1c16..185e9202f 100644 --- a/renderdocui/Interop/Shader.cs +++ b/renderdocui/Interop/Shader.cs @@ -32,7 +32,7 @@ namespace renderdoc { public UInt32 rows, columns; - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string name; public VarType type; @@ -226,14 +226,14 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class SigParameter { - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string varName; - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string semanticName; public UInt32 semanticIndex; - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string semanticIdxName; public bool needSemanticIndex; @@ -317,7 +317,7 @@ namespace renderdoc public UInt32 cols; public UInt32 elements; public bool rowMajorStorage; - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string name; }; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] @@ -332,7 +332,7 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class ShaderConstant { - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string name; [StructLayout(LayoutKind.Sequential)] @@ -351,7 +351,7 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class ConstantBlock { - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string name; [CustomMarshalAs(CustomUnmanagedType.TemplatedArray)] @@ -371,7 +371,7 @@ namespace renderdoc public ShaderResourceType resType; - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string name; [CustomMarshalAs(CustomUnmanagedType.CustomClass)] public ShaderVariableType variableType; @@ -381,16 +381,16 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public class ShaderDebugChunk { - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string entryFunc; public UInt32 compileFlags; public struct DebugFile { - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string filename; - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string filetext; }; @@ -404,7 +404,7 @@ namespace renderdoc [CustomMarshalAs(CustomUnmanagedType.CustomClass)] public ShaderDebugChunk DebugInfo; - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Disassembly; [CustomMarshalAs(CustomUnmanagedType.TemplatedArray)] @@ -421,7 +421,7 @@ namespace renderdoc [StructLayout(LayoutKind.Sequential)] public struct Interface { - [CustomMarshalAs(CustomUnmanagedType.AsciiTemplatedString)] + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string Name; }; diff --git a/renderdocui/Interop/StaticExports.cs b/renderdocui/Interop/StaticExports.cs index 3986d3bb3..4bcb0a445 100644 --- a/renderdocui/Interop/StaticExports.cs +++ b/renderdocui/Interop/StaticExports.cs @@ -31,29 +31,29 @@ namespace renderdoc class StaticExports { [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern bool RENDERDOC_SupportLocalReplay(string logfile, IntPtr outdriver); + private static extern bool RENDERDOC_SupportLocalReplay(IntPtr logfile, IntPtr outdriver); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern ReplayCreateStatus RENDERDOC_CreateReplayRenderer(string logfile, ref float progress, ref IntPtr rendPtr); + private static extern ReplayCreateStatus RENDERDOC_CreateReplayRenderer(IntPtr logfile, ref float progress, ref IntPtr rendPtr); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern void RENDERDOC_StartGlobalHook(string pathmatch, string logfile, CaptureOptions opts); + private static extern void RENDERDOC_StartGlobalHook(IntPtr pathmatch, IntPtr logfile, CaptureOptions opts); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern UInt32 RENDERDOC_ExecuteAndInject(string app, string workingDir, string cmdLine, - string logfile, CaptureOptions opts, bool waitForExit); + private static extern UInt32 RENDERDOC_ExecuteAndInject(IntPtr app, IntPtr workingDir, IntPtr cmdLine, + IntPtr logfile, CaptureOptions opts, bool waitForExit); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern UInt32 RENDERDOC_InjectIntoProcess(UInt32 pid, string logfile, CaptureOptions opts, bool waitForExit); + private static extern UInt32 RENDERDOC_InjectIntoProcess(UInt32 pid, IntPtr logfile, CaptureOptions opts, bool waitForExit); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern IntPtr RENDERDOC_CreateRemoteAccessConnection(string host, UInt32 ident, string clientName, bool forceConnection); + private static extern IntPtr RENDERDOC_CreateRemoteAccessConnection(IntPtr host, UInt32 ident, IntPtr clientName, bool forceConnection); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern UInt32 RENDERDOC_EnumerateRemoteConnections(string host, UInt32[] idents); + private static extern UInt32 RENDERDOC_EnumerateRemoteConnections(IntPtr host, UInt32[] idents); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern ReplayCreateStatus RENDERDOC_CreateRemoteReplayConnection(string host, ref IntPtr outrend); + private static extern ReplayCreateStatus RENDERDOC_CreateRemoteReplayConnection(IntPtr host, ref IntPtr outrend); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern void RENDERDOC_SpawnReplayHost(ref bool killReplay); @@ -62,20 +62,25 @@ namespace renderdoc private static extern void RENDERDOC_TriggerExceptionHandler(IntPtr exceptionPtrs, bool crashed); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern void RENDERDOC_LogText(string text); + private static extern void RENDERDOC_LogText(IntPtr text); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern IntPtr RENDERDOC_GetLogFile(); [DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - private static extern bool RENDERDOC_GetThumbnail(string filename, byte[] outmem, ref UInt32 len); + private static extern bool RENDERDOC_GetThumbnail(IntPtr filename, byte[] outmem, ref UInt32 len); public static bool SupportLocalReplay(string logfile, out string driverName) { IntPtr mem = CustomMarshal.Alloc(typeof(templated_array)); - bool ret = RENDERDOC_SupportLocalReplay(logfile, mem); - driverName = CustomMarshal.TemplatedArrayToUniString(mem, true); + IntPtr logfile_mem = CustomMarshal.MakeUTF8String(logfile); + + bool ret = RENDERDOC_SupportLocalReplay(logfile_mem, mem); + + CustomMarshal.Free(logfile_mem); + + driverName = CustomMarshal.TemplatedArrayToString(mem, true); CustomMarshal.Free(mem); return ret; @@ -85,7 +90,11 @@ namespace renderdoc { IntPtr rendPtr = IntPtr.Zero; - ReplayCreateStatus ret = RENDERDOC_CreateReplayRenderer(logfile, ref progress, ref rendPtr); + IntPtr logfile_mem = CustomMarshal.MakeUTF8String(logfile); + + ReplayCreateStatus ret = RENDERDOC_CreateReplayRenderer(logfile_mem, ref progress, ref rendPtr); + + CustomMarshal.Free(logfile_mem); if (rendPtr == IntPtr.Zero || ret != ReplayCreateStatus.Success) { @@ -99,22 +108,52 @@ namespace renderdoc public static void StartGlobalHook(string pathmatch, string logfile, CaptureOptions opts) { - RENDERDOC_StartGlobalHook(pathmatch, logfile, opts); + IntPtr pathmatch_mem = CustomMarshal.MakeUTF8String(pathmatch); + IntPtr logfile_mem = CustomMarshal.MakeUTF8String(logfile); + + RENDERDOC_StartGlobalHook(pathmatch_mem, logfile_mem, opts); + + CustomMarshal.Free(logfile_mem); + CustomMarshal.Free(pathmatch_mem); } public static UInt32 ExecuteAndInject(string app, string workingDir, string cmdLine, string logfile, CaptureOptions opts) { - return RENDERDOC_ExecuteAndInject(app, workingDir, cmdLine, logfile, opts, false); + IntPtr app_mem = CustomMarshal.MakeUTF8String(app); + IntPtr workingDir_mem = CustomMarshal.MakeUTF8String(workingDir); + IntPtr cmdLine_mem = CustomMarshal.MakeUTF8String(cmdLine); + IntPtr logfile_mem = CustomMarshal.MakeUTF8String(logfile); + + UInt32 ret = RENDERDOC_ExecuteAndInject(app_mem, workingDir_mem, cmdLine_mem, logfile_mem, opts, false); + + CustomMarshal.Free(app_mem); + CustomMarshal.Free(workingDir_mem); + CustomMarshal.Free(cmdLine_mem); + CustomMarshal.Free(logfile_mem); + + return ret; } public static UInt32 InjectIntoProcess(UInt32 pid, string logfile, CaptureOptions opts) { - return RENDERDOC_InjectIntoProcess(pid, logfile, opts, false); + IntPtr logfile_mem = CustomMarshal.MakeUTF8String(logfile); + + UInt32 ret = RENDERDOC_InjectIntoProcess(pid, logfile_mem, opts, false); + + CustomMarshal.Free(logfile_mem); + + return ret; } public static RemoteAccess CreateRemoteAccessConnection(string host, UInt32 ident, string clientName, bool forceConnection) { - IntPtr rendPtr = RENDERDOC_CreateRemoteAccessConnection(host, ident, clientName, forceConnection); + IntPtr host_mem = CustomMarshal.MakeUTF8String(host); + IntPtr clientName_mem = CustomMarshal.MakeUTF8String(clientName); + + IntPtr rendPtr = RENDERDOC_CreateRemoteAccessConnection(host_mem, ident, clientName_mem, forceConnection); + + CustomMarshal.Free(host_mem); + CustomMarshal.Free(clientName_mem); if (rendPtr == IntPtr.Zero) { @@ -128,14 +167,21 @@ namespace renderdoc public static UInt32[] EnumerateRemoteConnections(string host) { - UInt32 numIdents = RENDERDOC_EnumerateRemoteConnections(host, null); + IntPtr host_mem = CustomMarshal.MakeUTF8String(host); + + UInt32 numIdents = RENDERDOC_EnumerateRemoteConnections(host_mem, null); if (numIdents == 0) + { + CustomMarshal.Free(host_mem); return null; + } UInt32[] ret = new UInt32[numIdents]; - RENDERDOC_EnumerateRemoteConnections(host, ret); + RENDERDOC_EnumerateRemoteConnections(host_mem, ret); + + CustomMarshal.Free(host_mem); return ret; } @@ -144,7 +190,11 @@ namespace renderdoc { IntPtr rendPtr = IntPtr.Zero; - ReplayCreateStatus ret = RENDERDOC_CreateRemoteReplayConnection(host, ref rendPtr); + IntPtr host_mem = CustomMarshal.MakeUTF8String(host); + + ReplayCreateStatus ret = RENDERDOC_CreateRemoteReplayConnection(host_mem, ref rendPtr); + + CustomMarshal.Free(host_mem); if (rendPtr == IntPtr.Zero || ret != ReplayCreateStatus.Success) { @@ -168,26 +218,37 @@ namespace renderdoc public static void LogText(string text) { - RENDERDOC_LogText(text); + IntPtr text_mem = CustomMarshal.MakeUTF8String(text); + + RENDERDOC_LogText(text_mem); + + CustomMarshal.Free(text_mem); } public static string GetLogFilename() { - return Marshal.PtrToStringUni(RENDERDOC_GetLogFile()); + return CustomMarshal.PtrToStringUTF8(RENDERDOC_GetLogFile()); } public static byte[] GetThumbnail(string filename) { UInt32 len = 0; - - bool success = RENDERDOC_GetThumbnail(filename, null, ref len); + + IntPtr filename_mem = CustomMarshal.MakeUTF8String(filename); + + bool success = RENDERDOC_GetThumbnail(filename_mem, null, ref len); if (!success || len == 0) + { + CustomMarshal.Free(filename_mem); return null; + } byte[] ret = new byte[len]; - success = RENDERDOC_GetThumbnail(filename, ret, ref len); + success = RENDERDOC_GetThumbnail(filename_mem, ret, ref len); + + CustomMarshal.Free(filename_mem); if (!success || len == 0) return null;