gpu profiling. proper vsync disabling

This commit is contained in:
jacob 2025-05-20 23:52:41 -05:00
parent cdb5eeea63
commit 7c9a07ff94
6 changed files with 156 additions and 62 deletions

View File

@ -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 */

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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
* ========================== */

View File

@ -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

View File

@ -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);
}