diff --git a/src/common.h b/src/common.h index 77012263..02a678d1 100644 --- a/src/common.h +++ b/src/common.h @@ -651,14 +651,16 @@ INLINE f64 clamp_f64(f64 v, f64 min, f64 max) { return v < min ? min : v > max ? # error "MSVC not supported for profiling (cleanup attributes are required for profiling markup)" #else # ifdef TRACY_NO_CALLSTACK -# define __prof static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { NULL, __func__, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_ctx = ___tracy_emit_zone_begin( &CAT(__tracy_source_location,__LINE__), true ); -# define __profscope(name) static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { NULL, #name, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_ctx = ___tracy_emit_zone_begin( &CAT(__tracy_source_location,__LINE__), true ); +# define __prof static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { NULL, __func__, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_zone_ctx = ___tracy_emit_zone_begin( &CAT(__tracy_source_location,__LINE__), true ); +# define __profscope(name) static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { #name, __func__, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_zone_ctx = ___tracy_emit_zone_begin( &CAT(__tracy_source_location,__LINE__), true ); # else -# define __prof static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { NULL, __func__, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_ctx = ___tracy_emit_zone_begin_callstack( &CAT(__tracy_source_location,__LINE__), TRACY_CALLSTACK, true ); -# define __profscope(name) static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { NULL, #name, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_ctx = ___tracy_emit_zone_begin_callstack( &CAT(__tracy_source_location,__LINE__), TRACY_CALLSTACK, true ); +# define __prof static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { NULL, __func__, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_zone_ctx = ___tracy_emit_zone_begin_callstack( &CAT(__tracy_source_location,__LINE__), TRACY_CALLSTACK, true ); +# define __profscope(name) static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { #name, __func__, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_zone_ctx = ___tracy_emit_zone_begin_callstack( &CAT(__tracy_source_location,__LINE__), TRACY_CALLSTACK, true ); # endif +# define __profscope_d3d11(d3d11_ctx, name) static const struct ___tracy_source_location_data CAT(__tracy_gpu_d3d11_source_location,__LINE__) = { #name, __func__, __FILE__, (uint32_t)__LINE__, 0 }; __attribute((cleanup(__prof_d3d11_zone_cleanup_func))) TracyCD3D11ZoneCtx __tracy_d3d11_zone_ctx; ___tracy_d3d11_emit_zone_begin( d3d11_ctx, &__tracy_d3d11_zone_ctx, &CAT(__tracy_gpu_d3d11_source_location,__LINE__), true); #endif -INLINE void __prof_zone_cleanup_func(TracyCZoneCtx *__tracy_ctx) { TracyCZoneEnd(*__tracy_ctx); } +INLINE void __prof_zone_cleanup_func(TracyCZoneCtx *ctx) { TracyCZoneEnd(*ctx); } +INLINE void __prof_d3d11_zone_cleanup_func(TracyCD3D11ZoneCtx *ctx) { ___tracy_d3d11_emit_zone_end(*ctx); } #define __profalloc(ptr, size) TracyCAlloc((ptr), (size)) #define __proffree(ptr) TracyCFree((ptr)) @@ -680,6 +682,11 @@ INLINE void __prof_zone_cleanup_func(TracyCZoneCtx *__tracy_ctx) { TracyCZoneEnd #define __proflock_mark(ctx) TracyCSharedLockMark((ctx)) #define __proflock_custom_name(ctx, name, len) TracyCSharedLockCustomName((ctx), (name), (len)) +#define __prof_d3d11_ctx TracyCD3D11Ctx +#define __prof_d3d11_ctx_alloc(ctx, device, devicectx, name, name_len) ctx = ___tracy_d3d11_context_announce(device, devicectx, name, name_len) +#define __prof_d3d11_ctx_release(ctx) ___tracy_d3d11_context_terminate(ctx) +#define __prof_d3d11_collect(ctx) ___tracy_d3d11_context_collect(ctx) + #if PROFILING_CAPTURE_FRAME_IMAGE # define __profframeimage(image, width, height, offset, flipped) TracyCFrameImage((image), (width), (height), (offset), (flipped)); #else @@ -692,6 +699,7 @@ INLINE void __prof_zone_cleanup_func(TracyCZoneCtx *__tracy_ctx) { TracyCZoneEnd #define __prof #define __profscope(name) +#define __profscope_d3d11(d3d11_ctx, name) #define __profalloc(ptr, size) #define __proffree(ptr) #define __profmsg(txt, len, col) @@ -711,6 +719,10 @@ INLINE void __prof_zone_cleanup_func(TracyCZoneCtx *__tracy_ctx) { TracyCZoneEnd #define __proflock_after_try_shared_lock(ctx, acquired) #define __proflock_mark(ctx) #define __proflock_custom_name(ctx, name, len) +#define __prof_d3d11_ctx +#define __prof_d3d11_ctx_alloc(ctx, device, devicectx, name, name_len) +#define __prof_d3d11_ctx_release(ctx) +#define __prof_d3d11_collect(ctx) #endif /* PROFILING */ diff --git a/src/renderer_d3d11.c b/src/renderer_d3d11.c index 0f00a988..81f7bb78 100644 --- a/src/renderer_d3d11.c +++ b/src/renderer_d3d11.c @@ -34,6 +34,8 @@ #define D3D11_SHADER_DEBUG RTC +#define D3D11_SWAPCHAIN_FLAGS (DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) + struct dx11_shader { enum shader_kind kind; b32 valid; /* Is this shader allocated */ @@ -143,6 +145,10 @@ struct dx11_shader_desc { GLOBAL struct { struct arena arena; +#if PROFILING + struct __prof_d3d11_ctx *profiling_ctx; +#endif + ID3D11Device *dev; ID3D11DeviceContext *devcon; @@ -481,7 +487,8 @@ struct renderer_startup_receipt renderer_startup(struct sys_window *window) .BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT, .BufferCount = 2, .Scaling = DXGI_SCALING_NONE, - .Flags = 0, + .Flags = D3D11_SWAPCHAIN_FLAGS, + .AlphaMode = DXGI_ALPHA_MODE_IGNORE, /* More efficient FLIP presentation model. * Windows 10 allows to use DXGI_SWAP_EFFECT_FLIP_DISCARD @@ -511,6 +518,10 @@ struct renderer_startup_receipt renderer_startup(struct sys_window *window) G.devcon = context; G.swapchain = swapchain; + struct string prof_ctx_name = LIT("D3d11 Context"); + (UNUSED)prof_ctx_name; + __prof_d3d11_ctx_alloc(G.profiling_ctx, G.dev, G.devcon, prof_ctx_name.text, prof_ctx_name.len); + /* Create the blending setup */ { __profscope(create_blend_state); @@ -628,6 +639,7 @@ struct renderer_startup_receipt renderer_startup(struct sys_window *window) INTERNAL void dx11_render(ID3D11RenderTargetView *target, struct renderer_cmd_buffer *cmdbuff, struct xform view, struct rect viewport, struct sprite_scope *sprite_scope) { __prof; + __profscope_d3d11(G.profiling_ctx, Render); ID3D11DeviceContext_OMSetRenderTargets(G.devcon, 1, &target, NULL); D3D11_VIEWPORT d3d11_viewport = ZI; @@ -643,7 +655,7 @@ INTERNAL void dx11_render(ID3D11RenderTargetView *target, struct renderer_cmd_bu * NOTE: We're only doing this once per render, rather than once per * draw call since the only constant right now is VP. */ struct mat4x4 vp_matrix = calculate_vp(view, viewport.width, viewport.height); - send_constant_buffer_data(G.vs_constant_buffer, vp_matrix); + send_constant_buffer_data(G.vs_constant_buffer, vp_matrix); ID3D11DeviceContext_VSSetConstantBuffers(G.devcon, 0, 1, &G.vs_constant_buffer); ID3D11DeviceContext_PSSetConstantBuffers(G.devcon, 0, 1, &G.vs_constant_buffer); @@ -673,6 +685,7 @@ INTERNAL void dx11_render(ID3D11RenderTargetView *target, struct renderer_cmd_bu case SHADER_TRIANGLE: { + __profscope_d3d11(G.profiling_ctx, Triangle Shader); /* FIXME: Texture refcount needs to be increased here to prevent release mid-render */ ID3D11Texture2D *texture = NULL; if (cmd->texture.handle) { @@ -722,6 +735,7 @@ INTERNAL void dx11_render(ID3D11RenderTargetView *target, struct renderer_cmd_bu case SHADER_GRID: { + __profscope_d3d11(G.profiling_ctx, Grid Shader); ID3D11DeviceContext_IASetPrimitiveTopology(G.devcon, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); /* Activate buffer */ @@ -923,7 +937,7 @@ struct renderer_texture renderer_backbuffer_recreate(struct v2i32 size) if (G.backbuffer_texture.texture != 0) { ID3D11Texture2D_Release(G.backbuffer_texture.texture); } - IDXGISwapChain_ResizeBuffers(G.swapchain, 0, size.x, size.y, DXGI_FORMAT_UNKNOWN, 0); + IDXGISwapChain_ResizeBuffers(G.swapchain, 0, size.x, size.y, DXGI_FORMAT_UNKNOWN, D3D11_SWAPCHAIN_FLAGS); IDXGISwapChain_GetBuffer(G.swapchain, 0, &IID_ID3D11Texture2D, (LPVOID *)&G.backbuffer_texture.texture); res.handle = (u64)&G.backbuffer_texture; @@ -942,10 +956,16 @@ void renderer_backbuffer_present(i32 vsync) } #endif + i32 flags = 0; + if (vsync == 0) { + flags = DXGI_PRESENT_ALLOW_TEARING; + } + renderer_capture_image_for_profiler(); { __profscope(IDXGISwapchain_Present); - IDXGISwapChain1_Present(G.swapchain, vsync, 0); + IDXGISwapChain1_Present(G.swapchain, vsync, flags); + __prof_d3d11_collect(G.profiling_ctx); __profframe(0); } } diff --git a/src/sys.h b/src/sys.h index 1757e5ae..6e9e69a7 100644 --- a/src/sys.h +++ b/src/sys.h @@ -370,7 +370,7 @@ void sys_window_cursor_disable_clip(struct sys_window *sys_window); struct sys_mutex { u64 handle; #if PROFILING - __proflock_ctx profiling_ctx; + struct __proflock_ctx *profiling_ctx; #endif #if RTC u64 owner_tid; diff --git a/src/third_party/tracy/client/TracyProfiler.cpp b/src/third_party/tracy/client/TracyProfiler.cpp index 478bdcab..02a9bbb7 100644 --- a/src/third_party/tracy/client/TracyProfiler.cpp +++ b/src/third_party/tracy/client/TracyProfiler.cpp @@ -4795,57 +4795,52 @@ TRACY_API void ___tracy_emit_gpu_time_sync_serial( const struct ___tracy_gpu_tim * Lock * ========================== */ -struct __tracy_lockable_context_data -{ - tracy::LockableCtx ctx; -}; - -TRACY_API TracyCLockCtx ___tracy_announce_lockable_ctx( const struct ___tracy_source_location_data* srcloc ) +TRACY_API struct TracyCLockCtx *___tracy_announce_lockable_ctx( const struct ___tracy_source_location_data* srcloc ) { static_assert(sizeof(struct ___tracy_source_location_data) == sizeof(tracy::SourceLocationData)); // C srcloc struct must fit in cpp srcloc struct tracy::LockableCtx *ctx = (tracy::LockableCtx *)tracy::tracy_malloc(sizeof(tracy::LockableCtx)); new(ctx) tracy::LockableCtx((tracy::SourceLocationData *)srcloc); - return (TracyCLockCtx)ctx; + return (struct TracyCLockCtx *)ctx; } -TRACY_API void ___tracy_terminate_lockable_ctx( TracyCLockCtx lockdata ) +TRACY_API void ___tracy_terminate_lockable_ctx( struct TracyCLockCtx *lockdata ) { tracy::LockableCtx *ctx = (tracy::LockableCtx *)lockdata; ctx->~LockableCtx(); tracy::tracy_free((void*)lockdata); } -TRACY_API int32_t ___tracy_before_lock_lockable_ctx( TracyCLockCtx lockdata ) +TRACY_API int32_t ___tracy_before_lock_lockable_ctx( struct TracyCLockCtx *lockdata ) { tracy::LockableCtx *ctx = (tracy::LockableCtx *)lockdata; return ctx->BeforeLock(); } -TRACY_API void ___tracy_after_lock_lockable_ctx( TracyCLockCtx lockdata ) +TRACY_API void ___tracy_after_lock_lockable_ctx( struct TracyCLockCtx *lockdata ) { tracy::LockableCtx *ctx = (tracy::LockableCtx *)lockdata; ctx->AfterLock(); } -TRACY_API void ___tracy_after_unlock_lockable_ctx( TracyCLockCtx lockdata ) +TRACY_API void ___tracy_after_unlock_lockable_ctx( struct TracyCLockCtx *lockdata ) { tracy::LockableCtx *ctx = (tracy::LockableCtx *)lockdata; ctx->AfterUnlock(); } -TRACY_API void ___tracy_after_try_lock_lockable_ctx( TracyCLockCtx lockdata, int32_t acquired ) +TRACY_API void ___tracy_after_try_lock_lockable_ctx( struct TracyCLockCtx *lockdata, int32_t acquired ) { tracy::LockableCtx *ctx = (tracy::LockableCtx *)lockdata; ctx->AfterTryLock(acquired); } -TRACY_API void ___tracy_mark_lockable_ctx(TracyCLockCtx lockdata, const struct ___tracy_source_location_data *srcloc) +TRACY_API void ___tracy_mark_lockable_ctx(struct TracyCLockCtx *lockdata, const struct ___tracy_source_location_data *srcloc) { tracy::LockableCtx *ctx = (tracy::LockableCtx *)lockdata; ctx->Mark((tracy::SourceLocationData *)srcloc); } -TRACY_API void ___tracy_custom_name_lockable_ctx(TracyCLockCtx lockdata, const char *name, size_t nameSz) +TRACY_API void ___tracy_custom_name_lockable_ctx(struct TracyCLockCtx *lockdata, const char *name, size_t nameSz) { tracy::LockableCtx *ctx = (tracy::LockableCtx *)lockdata; ctx->CustomName(name, nameSz); @@ -4855,81 +4850,131 @@ TRACY_API void ___tracy_custom_name_lockable_ctx(TracyCLockCtx lockdata, const c * Shared lock * ========================== */ -TRACY_API TracyCSharedLockCtx ___tracy_announce_shared_lockable_ctx(const struct ___tracy_source_location_data *srcloc) +TRACY_API struct TracyCSharedLockCtx *___tracy_announce_shared_lockable_ctx(const struct ___tracy_source_location_data *srcloc) { static_assert(sizeof(struct ___tracy_source_location_data) == sizeof(tracy::SourceLocationData)); // C srcloc struct must fit in cpp srcloc struct tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)tracy::tracy_malloc(sizeof(tracy::SharedLockableCtx)); new(ctx) tracy::SharedLockableCtx((tracy::SourceLocationData *)srcloc); - return (TracyCSharedLockCtx )ctx; + return (struct TracyCSharedLockCtx *)ctx; } -TRACY_API void ___tracy_terminate_shared_lockable_ctx(TracyCSharedLockCtx lockdata) +TRACY_API void ___tracy_terminate_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->~SharedLockableCtx(); tracy::tracy_free((void *)lockdata); } -TRACY_API int32_t ___tracy_before_exclusive_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata) +TRACY_API int32_t ___tracy_before_exclusive_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; return ctx->BeforeLock(); } -TRACY_API void ___tracy_after_exclusive_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata) +TRACY_API void ___tracy_after_exclusive_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->AfterLock(); } -TRACY_API void ___tracy_after_exclusive_unlock_shared_lockable_ctx(TracyCSharedLockCtx lockdata) +TRACY_API void ___tracy_after_exclusive_unlock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->AfterUnlock(); } -TRACY_API void ___tracy_after_try_exclusive_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata, int32_t acquired) +TRACY_API void ___tracy_after_try_exclusive_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata, int32_t acquired) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->AfterTryLock(acquired); } -TRACY_API int32_t ___tracy_before_shared_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata) +TRACY_API int32_t ___tracy_before_shared_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; return ctx->BeforeLockShared(); } -TRACY_API void ___tracy_after_shared_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata) +TRACY_API void ___tracy_after_shared_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->AfterLockShared(); } -TRACY_API void ___tracy_after_try_shared_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata, int32_t acquired) +TRACY_API void ___tracy_after_try_shared_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata, int32_t acquired) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->AfterTryLockShared(acquired); } -TRACY_API void ___tracy_after_shared_unlock_shared_lockable_ctx(TracyCSharedLockCtx lockdata) +TRACY_API void ___tracy_after_shared_unlock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->AfterUnlockShared(); } -TRACY_API void ___tracy_mark_shared_lockable_ctx(TracyCSharedLockCtx lockdata, const struct ___tracy_source_location_data *srcloc) +TRACY_API void ___tracy_mark_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata, const struct ___tracy_source_location_data *srcloc) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->Mark((tracy::SourceLocationData *)srcloc); } -TRACY_API void ___tracy_custom_name_shared_lockable_ctx(TracyCSharedLockCtx lockdata, const char *name, size_t nameSz) +TRACY_API void ___tracy_custom_name_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata, const char *name, size_t nameSz) { tracy::SharedLockableCtx *ctx = (tracy::SharedLockableCtx *)lockdata; ctx->CustomName(name, nameSz); } +/* ========================== * + * D3D11 + * ========================== */ + +// Compilation error if D3D11_NO_HELPERS not defined +#define D3D11_NO_HELPERS +# include "../tracy/TracyD3D11.hpp" +#undef D3D11_NO_HELPERS + +TRACY_API struct TracyCD3D11Ctx *___tracy_d3d11_context_announce(struct ID3D11Device *device, struct ID3D11DeviceContext *devicectx, char *name, int name_size) +{ + tracy::D3D11Ctx *ctx = tracy::CreateD3D11Context(device, devicectx); + TracyD3D11ContextName(ctx, name, name_size) ctx->Name(name, name_size); + return (struct TracyCD3D11Ctx *)ctx; +} + +TRACY_API void ___tracy_d3d11_context_terminate(struct TracyCD3D11Ctx *d3d11_ctx) +{ + tracy::D3D11Ctx *ctx = (tracy::D3D11Ctx *)d3d11_ctx; + tracy::DestroyD3D11Context(ctx); +} + +TRACY_API void ___tracy_d3d11_context_collect(struct TracyCD3D11Ctx *d3d11_ctx) +{ + tracy::D3D11Ctx *ctx = (tracy::D3D11Ctx *)d3d11_ctx; + TracyD3D11Collect(ctx); +} + +TRACY_API void ___tracy_d3d11_emit_zone_begin(struct TracyCD3D11Ctx *d3d11_ctx, TracyCD3D11ZoneCtx *zone_ctx, struct ___tracy_source_location_data *srcloc, int32_t active) +{ + tracy::D3D11Ctx *ctx = (tracy::D3D11Ctx *)d3d11_ctx; + + // Cpp zone class must fit in C zone struct + static_assert(sizeof(TracyCD3D11ZoneCtx) == sizeof(tracy::D3D11ZoneScope)); + static_assert(alignof(TracyCD3D11ZoneCtx) == alignof(tracy::D3D11ZoneScope)); + +#if defined TRACY_HAS_CALLSTACK && defined TRACY_CALLSTACK + new(&zone_ctx->opaque) tracy::D3D11ZoneScope(ctx, (tracy::SourceLocationData *)srcloc, active); +#else + static_assert(TRACY_CALLSTACK == 0); + new(&zone_ctx->opaque) tracy::D3D11ZoneScope(ctx, (tracy::SourceLocationData *)srcloc, TRACY_CALLSTACK, active); +#endif +} + +TRACY_API void ___tracy_d3d11_emit_zone_end(TracyCD3D11ZoneCtx zone_ctx) +{ + tracy::D3D11ZoneScope *ctx = (tracy::D3D11ZoneScope *)&zone_ctx.opaque; + ctx->~D3D11ZoneScope(); +} + /* ========================== * * Other * ========================== */ diff --git a/src/third_party/tracy/tracy/TracyC.h b/src/third_party/tracy/tracy/TracyC.h index 420e5f88..58d3e56d 100644 --- a/src/third_party/tracy/tracy/TracyC.h +++ b/src/third_party/tracy/tracy/TracyC.h @@ -38,8 +38,9 @@ TRACY_API void ___tracy_set_thread_name( const char* name ); typedef const void* TracyCZoneCtx; -typedef void *TracyCLockCtx; -typedef void *TracyCSharedLockCtx; +struct TracyCLockCtx; +struct TracyCSharedLockCtx; +struct TracyCD3D11Ctx; #define TracyCZone(c,x) #define TracyCZoneN(c,x,y) @@ -208,12 +209,20 @@ struct ___tracy_gpu_time_sync_data { uint8_t context; }; +#define TRACY_C_D3D11_ZONE_CONTEXT_SIZE 16 +#define TRACY_C_D3D11_ZONE_CONTEXT_ALIGN 8 +struct ___tracy_c_d3d11_zone_context { + _Alignas(TRACY_C_D3D11_ZONE_CONTEXT_ALIGN) char opaque[TRACY_C_D3D11_ZONE_CONTEXT_SIZE]; +}; + // Some containers don't support storing const types. // This struct, as visible to user, is immutable, so treat it as if const was declared here. typedef /*const*/ struct ___tracy_c_zone_context TracyCZoneCtx; +typedef /*const*/ struct ___tracy_c_d3d11_zone_context TracyCD3D11ZoneCtx; -typedef void *TracyCLockCtx; -typedef void *TracyCSharedLockCtx; +struct TracyCLockCtx; +struct TracyCSharedLockCtx; +struct TracyCD3D11Ctx; #ifdef TRACY_MANUAL_LIFETIME TRACY_API void ___tracy_startup_profiler(void); @@ -361,14 +370,14 @@ TRACY_API void ___tracy_emit_message_appinfo( const char* txt, size_t size ); #define TracyCMessageLCS( txt, color, depth ) ___tracy_emit_messageLC( txt, color, depth ); -TRACY_API TracyCLockCtx ___tracy_announce_lockable_ctx(const struct ___tracy_source_location_data *srcloc); -TRACY_API void ___tracy_terminate_lockable_ctx(TracyCLockCtx lockdata); -TRACY_API int32_t ___tracy_before_lock_lockable_ctx(TracyCLockCtx lockdata); -TRACY_API void ___tracy_after_lock_lockable_ctx(TracyCLockCtx lockdata); -TRACY_API void ___tracy_after_unlock_lockable_ctx(TracyCLockCtx lockdata); -TRACY_API void ___tracy_after_try_lock_lockable_ctx(TracyCLockCtx lockdata, int32_t acquired); -TRACY_API void ___tracy_mark_lockable_ctx(TracyCLockCtx lockdata, const struct ___tracy_source_location_data *srcloc); -TRACY_API void ___tracy_custom_name_lockable_ctx(TracyCLockCtx lockdata, const char* name, size_t nameSz ); +TRACY_API struct TracyCLockCtx *___tracy_announce_lockable_ctx(const struct ___tracy_source_location_data *srcloc); +TRACY_API void ___tracy_terminate_lockable_ctx(struct TracyCLockCtx *lockdata); +TRACY_API int32_t ___tracy_before_lock_lockable_ctx(struct TracyCLockCtx *lockdata); +TRACY_API void ___tracy_after_lock_lockable_ctx(struct TracyCLockCtx *lockdata); +TRACY_API void ___tracy_after_unlock_lockable_ctx(struct TracyCLockCtx *lockdata); +TRACY_API void ___tracy_after_try_lock_lockable_ctx(struct TracyCLockCtx *lockdata, int32_t acquired); +TRACY_API void ___tracy_mark_lockable_ctx(struct TracyCLockCtx *lockdata, const struct ___tracy_source_location_data *srcloc); +TRACY_API void ___tracy_custom_name_lockable_ctx(struct TracyCLockCtx *lockdata, const char* name, size_t nameSz ); #define TracyCLockAnnounce( lock ) static const struct ___tracy_source_location_data TracyConcat(__tracy_source_location,TracyLine) = { NULL, __func__, TracyFile, (uint32_t)TracyLine, 0 }; lock = ___tracy_announce_lockable_ctx( &TracyConcat(__tracy_source_location,TracyLine) ); #define TracyCLockTerminate( lock ) ___tracy_terminate_lockable_ctx( lock ); @@ -379,18 +388,18 @@ TRACY_API void ___tracy_custom_name_lockable_ctx(TracyCLockCtx lockdata, const c #define TracyCLockMark( lock ) static const struct ___tracy_source_location_data TracyConcat(__tracy_source_location,TracyLine) = { NULL, __func__, TracyFile, (uint32_t)TracyLine, 0 }; ___tracy_mark_lockable_ctx( lock, &TracyConcat(__tracy_source_location,TracyLine) ); #define TracyCLockCustomName( lock, name, nameSz ) ___tracy_custom_name_lockable_ctx( lock, name, nameSz ); -TRACY_API TracyCSharedLockCtx ___tracy_announce_shared_lockable_ctx(const struct ___tracy_source_location_data *srcloc); -TRACY_API void ___tracy_terminate_shared_lockable_ctx(TracyCSharedLockCtx lockdata); -TRACY_API int32_t ___tracy_before_exclusive_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata); -TRACY_API void ___tracy_after_exclusive_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata); -TRACY_API void ___tracy_after_exclusive_unlock_shared_lockable_ctx(TracyCSharedLockCtx lockdata); -TRACY_API void ___tracy_after_try_exclusive_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata, int32_t acquired); -TRACY_API int32_t ___tracy_before_shared_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata); -TRACY_API void ___tracy_after_shared_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata); -TRACY_API void ___tracy_after_shared_unlock_shared_lockable_ctx(TracyCSharedLockCtx lockdata); -TRACY_API void ___tracy_after_try_shared_lock_shared_lockable_ctx(TracyCSharedLockCtx lockdata, int32_t acquired); -TRACY_API void ___tracy_mark_shared_lockable_ctx(TracyCSharedLockCtx lockdata, const struct ___tracy_source_location_data *srcloc); -TRACY_API void ___tracy_custom_name_shared_lockable_ctx(TracyCSharedLockCtx lockdata, const char *name, size_t nameSz); +TRACY_API struct TracyCSharedLockCtx *___tracy_announce_shared_lockable_ctx(const struct ___tracy_source_location_data *srcloc); +TRACY_API void ___tracy_terminate_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata); +TRACY_API int32_t ___tracy_before_exclusive_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata); +TRACY_API void ___tracy_after_exclusive_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata); +TRACY_API void ___tracy_after_exclusive_unlock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata); +TRACY_API void ___tracy_after_try_exclusive_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata, int32_t acquired); +TRACY_API int32_t ___tracy_before_shared_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata); +TRACY_API void ___tracy_after_shared_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata); +TRACY_API void ___tracy_after_shared_unlock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata); +TRACY_API void ___tracy_after_try_shared_lock_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata, int32_t acquired); +TRACY_API void ___tracy_mark_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata, const struct ___tracy_source_location_data *srcloc); +TRACY_API void ___tracy_custom_name_shared_lockable_ctx(struct TracyCSharedLockCtx *lockdata, const char *name, size_t nameSz); #define TracyCSharedLockAnnounce( lock ) static const struct ___tracy_source_location_data TracyConcat(__tracy_source_location,TracyLine) = { NULL, __func__, TracyFile, (uint32_t)TracyLine, 0 }; lock = ___tracy_announce_shared_lockable_ctx( &TracyConcat(__tracy_source_location,TracyLine) ); #define TracyCSharedLockTerminate( lock ) ___tracy_terminate_shared_lockable_ctx( lock ); @@ -405,6 +414,14 @@ TRACY_API void ___tracy_custom_name_shared_lockable_ctx(TracyCSharedLockCtx lock #define TracyCSharedLockMark( lock ) static const struct ___tracy_source_location_data TracyConcat(__tracy_source_location,TracyLine) = { NULL, __func__, TracyFile, (uint32_t)TracyLine, 0 }; ___tracy_mark_shared_lockable_ctx( lock, &TracyConcat(__tracy_source_location,TracyLine) ); #define TracyCSharedLockCustomName( lock, name, nameSz ) ___tracy_custom_name_shared_lockable_ctx( lock, name, nameSz ); +struct ID3D11Device; +struct ID3D11DeviceContext; +TRACY_API struct TracyCD3D11Ctx *___tracy_d3d11_context_announce(struct ID3D11Device *device, struct ID3D11DeviceContext *devicectx, char *name, int name_size); +TRACY_API void ___tracy_d3d11_context_terminate(struct TracyCD3D11Ctx *d3d11_ctx); +TRACY_API void ___tracy_d3d11_context_collect(struct TracyCD3D11Ctx *d3d11_ctx); +TRACY_API void ___tracy_d3d11_emit_zone_begin(struct TracyCD3D11Ctx *d3d11_ctx, TracyCD3D11ZoneCtx *zone_ctx, struct ___tracy_source_location_data *srcloc, int32_t active); +TRACY_API void ___tracy_d3d11_emit_zone_end(TracyCD3D11ZoneCtx zone_ctx); + #define TracyCIsConnected ___tracy_connected() #ifdef TRACY_FIBERS diff --git a/src/user.c b/src/user.c index d160f911..30a8a04d 100644 --- a/src/user.c +++ b/src/user.c @@ -891,7 +891,7 @@ INTERNAL void user_update(void) struct v2 pos = xform_invert_mul_v2(G.world_to_ui_xf, V2(0, 0)); struct v2 size = xform_basis_invert_mul_v2(G.world_to_ui_xf, G.ui_size); - u32 color0 = RGBA_F(0.17f, 0.16f, 0.17f, 1.f); + u32 color0 = RGBA_F(0.17f, 0.17f, 0.17f, 1.f); u32 color1 = RGBA_F(0.15f, 0.15f, 0.15f, 1.f); draw_grid(G.world_cmd_buffer, RECT_FROM_V2(pos, size), color0, color1, RGBA(0x3f, 0x3f, 0x3f, 0xFF), COLOR_RED, COLOR_GREEN, thickness, spacing, offset); }