static uint64_t GetHandle(WindowingSystem system, void *data) { #if defined(RENDERDOC_PLATFORM_LINUX) if(system == eWindowingSystem_Xlib) return (uint64_t)((XlibWindowData *)data)->window; if(system == eWindowingSystem_XCB) return (uint64_t)((XCBWindowData *)data)->window; RDCERR("Unrecognised window system %d", system); return 0; #elif defined(RENDERDOC_PLATFORM_WIN32) RDCASSERT(system == eWindowingSystem_Win32); return (uint64_t)data; // HWND #elif defined(RENDERDOC_PLATFORM_ANDROID) RDCASSERT(system == eWindowingSystem_Android); return (uint64_t)data; // ANativeWindow * #else RDCFATAL("No windowing data defined for this platform! Must be implemented for replay outputs"); #endif }
void Init() { OSTLSHandle = TlsAlloc(); if(OSTLSHandle == TLS_OUT_OF_INDEXES) RDCFATAL("Can't allocate OS TLS slot"); m_TLSListLock = new CriticalSection(); m_TLSList = new vector<TLSData *>(); }
static uint64_t GetHandle(WindowingSystem system, void *data) { #if ENABLED(RDOC_LINUX) if(system == eWindowingSystem_Xlib) { #if ENABLED(RDOC_XLIB) return (uint64_t)((XlibWindowData *)data)->window; #else RDCERR("Xlib windowing system data passed in, but support is not compiled in"); #endif } if(system == eWindowingSystem_XCB) { #if ENABLED(RDOC_XCB) return (uint64_t)((XCBWindowData *)data)->window; #else RDCERR("XCB windowing system data passed in, but support is not compiled in"); #endif } RDCERR("Unrecognised window system %d", system); return 0; #elif ENABLED(RDOC_WIN32) RDCASSERT(system == eWindowingSystem_Win32); return (uint64_t)data; // HWND #elif ENABLED(RDOC_ANDROID) RDCASSERT(system == eWindowingSystem_Android); return (uint64_t)data; // ANativeWindow * #else RDCFATAL("No windowing data defined for this platform! Must be implemented for replay outputs"); #endif }
string Wide2UTF8(const std::wstring &s) { RDCFATAL("Converting wide strings to UTF-8 is not supported on Android!"); return ""; }
UINT GetFormatBPP(DXGI_FORMAT f) { UINT ret = 8; switch(f) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32A32_SINT: ret *= 16; break; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R32G32B32_SINT: ret *= 12; break; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: ret *= 8; break; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R11G11B10_FLOAT: case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R32_SINT: case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: case DXGI_FORMAT_R8G8_B8G8_UNORM: case DXGI_FORMAT_G8R8_G8B8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: ret *= 4; break; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_B5G5R5A1_UNORM: ret *= 2; break; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: ret *= 1; break; case DXGI_FORMAT_R1_UNORM: ret /= 8; break; case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC4_SNORM: // return block size (in bits) ret *= 8; break; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC5_SNORM: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM: case DXGI_FORMAT_BC7_UNORM_SRGB: // return block size (in bits) ret *= 16; break; #if defined(INCLUDE_D3D_11_1) case DXGI_FORMAT_AYUV: case DXGI_FORMAT_Y410: case DXGI_FORMAT_YUY2: case DXGI_FORMAT_Y416: case DXGI_FORMAT_NV12: case DXGI_FORMAT_P010: case DXGI_FORMAT_P016: case DXGI_FORMAT_420_OPAQUE: case DXGI_FORMAT_Y210: case DXGI_FORMAT_Y216: case DXGI_FORMAT_NV11: case DXGI_FORMAT_AI44: case DXGI_FORMAT_IA44: case DXGI_FORMAT_P8: case DXGI_FORMAT_A8P8: RDCERR("Video formats not supported"); break; case DXGI_FORMAT_B4G4R4A4_UNORM: ret *= 2; // 4 channels, half a byte each break; #endif default: RDCFATAL("Unrecognised DXGI Format: %d", f); break; } return ret; }