automatic draw/dispatch markers indicating pipeline name
This commit is contained in:
parent
3707db9d94
commit
8ef409a4d8
@ -589,9 +589,12 @@ void G_SyncLayout(G_CommandListHandle cl, G_ResourceHandle resource, G_Layout la
|
|||||||
|
|
||||||
//- Zone
|
//- Zone
|
||||||
|
|
||||||
void G_PushZone(G_CommandListHandle cl, char *name_lit_cstr);
|
void G_PushZoneEx(G_CommandListHandle cl, String name_lit);
|
||||||
void G_PopZone(G_CommandListHandle cl);
|
void G_PopZoneEx(G_CommandListHandle cl);
|
||||||
#define G_ZoneDF(cl, name_lit_cstr) DeferFor(G_PushZone((cl), (name_lit_cstr)), G_PopZone(cl))
|
|
||||||
|
#define G_PushZone(cl, name_lit) G_PushZoneEx((cl), Lit(name_lit))
|
||||||
|
#define G_PopZone(cl) G_PopZoneEx(cl)
|
||||||
|
#define G_ZoneDF(cl, name_lit) DeferFor(G_PushZone((cl), (name_lit)), G_PopZone(cl))
|
||||||
|
|
||||||
//- Cpu -> Gpu staged copy
|
//- Cpu -> Gpu staged copy
|
||||||
|
|
||||||
|
|||||||
@ -772,7 +772,7 @@ G_D12_Pipeline *G_D12_PipelineFromDesc(G_D12_PipelineDesc desc)
|
|||||||
String pipeline_name = Zi;
|
String pipeline_name = Zi;
|
||||||
if (is_compute)
|
if (is_compute)
|
||||||
{
|
{
|
||||||
pipeline_name = NameFromResource(desc.cs.resource);
|
pipeline_name = TrimRight(NameFromResource(desc.cs.resource), Lit(".dxil"));
|
||||||
if (pipeline_name.len == 0)
|
if (pipeline_name.len == 0)
|
||||||
{
|
{
|
||||||
pipeline_name = StringF(scratch.arena, "%F", FmtHandle(desc.cs.resource.v));
|
pipeline_name = StringF(scratch.arena, "%F", FmtHandle(desc.cs.resource.v));
|
||||||
@ -780,8 +780,8 @@ G_D12_Pipeline *G_D12_PipelineFromDesc(G_D12_PipelineDesc desc)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
String vs_name = NameFromResource(desc.vs.resource);
|
String vs_name = TrimRight(NameFromResource(desc.vs.resource), Lit(".dxil"));
|
||||||
String ps_name = NameFromResource(desc.ps.resource);
|
String ps_name = TrimRight(NameFromResource(desc.ps.resource), Lit(".dxil"));
|
||||||
if (vs_name.len == 0)
|
if (vs_name.len == 0)
|
||||||
{
|
{
|
||||||
vs_name = StringF(scratch.arena, "%F", FmtHandle(desc.vs.resource.v));
|
vs_name = StringF(scratch.arena, "%F", FmtHandle(desc.vs.resource.v));
|
||||||
@ -797,6 +797,7 @@ G_D12_Pipeline *G_D12_PipelineFromDesc(G_D12_PipelineDesc desc)
|
|||||||
FmtString(ps_name)
|
FmtString(ps_name)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
pipeline_name.len = MinU64(pipeline_name.len, G_D12_MaxNameLen);
|
||||||
|
|
||||||
LogInfoF("Creating pipeline %F", FmtString(pipeline_name));
|
LogInfoF("Creating pipeline %F", FmtString(pipeline_name));
|
||||||
|
|
||||||
@ -957,11 +958,11 @@ G_D12_Pipeline *G_D12_PipelineFromDesc(G_D12_PipelineDesc desc)
|
|||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
if (GPU_NAMES)
|
pipeline->name_len = pipeline_name.len;
|
||||||
{
|
CopyBytes(pipeline->name_cstr, pipeline_name.text, pipeline->name_len);
|
||||||
|
pipeline->name_cstr[pipeline->name_len] = 0;
|
||||||
G_D12_SetObjectName((ID3D12Object *)pso, pipeline_name);
|
G_D12_SetObjectName((ID3D12Object *)pso, pipeline_name);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TOOD: Don't panic
|
// TOOD: Don't panic
|
||||||
@ -1231,7 +1232,7 @@ G_ResourceHandle G_PushResource(G_ArenaHandle arena_handle, G_CommandListHandle
|
|||||||
is_texture ? desc.texture.name :
|
is_texture ? desc.texture.name :
|
||||||
desc.sampler.name
|
desc.sampler.name
|
||||||
);
|
);
|
||||||
new_name.len = MinU64(new_name.len, countof(resource->name_text));
|
new_name.len = MinU64(new_name.len, G_D12_MaxNameLen);
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Initialize heap info
|
//- Initialize heap info
|
||||||
@ -1378,12 +1379,6 @@ G_ResourceHandle G_PushResource(G_ArenaHandle arena_handle, G_CommandListHandle
|
|||||||
ZeroStruct(release);
|
ZeroStruct(release);
|
||||||
SllQueuePush(cl->releases.first, cl->releases.last, release);
|
SllQueuePush(cl->releases.first, cl->releases.last, release);
|
||||||
release->d3d_resource = resource->d3d_resource;
|
release->d3d_resource = resource->d3d_resource;
|
||||||
if (GPU_NAMES)
|
|
||||||
{
|
|
||||||
StaticAssert(countof(release->name_text) == countof(resource->name_text));
|
|
||||||
release->name_len = resource->name_len;
|
|
||||||
CopyBytes(release->name_text, resource->name_text, resource->name_len);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ZeroStruct(resource);
|
ZeroStruct(resource);
|
||||||
}
|
}
|
||||||
@ -1505,12 +1500,13 @@ G_ResourceHandle G_PushResource(G_ArenaHandle arena_handle, G_CommandListHandle
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Set debug information
|
//- Set debug information
|
||||||
|
|
||||||
String old_name = STRING(resource->name_len, resource->name_text);
|
String old_name = STRING(resource->name_len, (u8 *)resource->name_cstr);
|
||||||
if (!MatchString(old_name, new_name))
|
if (!MatchString(old_name, new_name))
|
||||||
{
|
{
|
||||||
resource->name_len = new_name.len;
|
resource->name_len = new_name.len;
|
||||||
CopyBytes(resource->name_text, new_name.text, new_name.len);
|
CopyBytes(resource->name_cstr, new_name.text, new_name.len);
|
||||||
if (GPU_NAMES && resource->d3d_resource)
|
resource->name_cstr[new_name.len] = 0;
|
||||||
|
if (resource->d3d_resource)
|
||||||
{
|
{
|
||||||
G_D12_SetObjectName((ID3D12Object *)resource->d3d_resource, new_name);
|
G_D12_SetObjectName((ID3D12Object *)resource->d3d_resource, new_name);
|
||||||
}
|
}
|
||||||
@ -2078,6 +2074,70 @@ G_D12_StagingRegionNode *G_D12_PushStagingRegion(G_D12_CmdList *cl, u64 size)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
//~ Instrumentation
|
||||||
|
|
||||||
|
void G_D12_InsertEvent(ID3D12GraphicsCommandList7 *d3d_cl, G_D12_EventKind kind, String data)
|
||||||
|
{
|
||||||
|
b32 pix = G_D12.pix_enabled;
|
||||||
|
b32 ags = G_D12.ags_enabled;
|
||||||
|
if (pix || ags)
|
||||||
|
{
|
||||||
|
TempArena scratch = BeginScratchNoConflict();
|
||||||
|
char *data_cstr = 0;
|
||||||
|
if (data.len > 0)
|
||||||
|
{
|
||||||
|
if (data.text[data.len] == '\0')
|
||||||
|
{
|
||||||
|
// Fast path: data is already null terminated, don't need to copy
|
||||||
|
data_cstr = (char *)data.text;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data_cstr = CstrFromString(scratch.arena, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
u64 color = 0x7F7F7F7F;
|
||||||
|
switch (kind)
|
||||||
|
{
|
||||||
|
case G_D12_EventKind_Marker:
|
||||||
|
{
|
||||||
|
if (pix)
|
||||||
|
{
|
||||||
|
PIXSetMarkerOnCommandList((ID3D12GraphicsCommandList *)d3d_cl, color, data_cstr);
|
||||||
|
}
|
||||||
|
if (ags)
|
||||||
|
{
|
||||||
|
agsDriverExtensionsDX12_SetMarker(G_D12.ags_ctx, (ID3D12GraphicsCommandList *)d3d_cl, data_cstr);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case G_D12_EventKind_PushZone:
|
||||||
|
{
|
||||||
|
if (pix)
|
||||||
|
{
|
||||||
|
PIXBeginEventOnCommandList((ID3D12GraphicsCommandList *)d3d_cl, color, data_cstr);
|
||||||
|
}
|
||||||
|
if (ags)
|
||||||
|
{
|
||||||
|
agsDriverExtensionsDX12_PushMarker(G_D12.ags_ctx, (ID3D12GraphicsCommandList *)d3d_cl, data_cstr);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case G_D12_EventKind_PopZone:
|
||||||
|
{
|
||||||
|
if (pix)
|
||||||
|
{
|
||||||
|
PIXEndEventOnCommandList((ID3D12GraphicsCommandList *)d3d_cl);
|
||||||
|
}
|
||||||
|
if (ags)
|
||||||
|
{
|
||||||
|
agsDriverExtensionsDX12_PopMarker(G_D12.ags_ctx, (ID3D12GraphicsCommandList *)d3d_cl);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
EndScratch(scratch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Tracking
|
//~ Tracking
|
||||||
|
|
||||||
@ -2668,26 +2728,11 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
{
|
{
|
||||||
if (cmd->zone.push)
|
if (cmd->zone.push)
|
||||||
{
|
{
|
||||||
if (G_D12.pix_enabled)
|
G_D12_InsertEvent(d3d_cl, G_D12_EventKind_PushZone, cmd->zone.name_lit);
|
||||||
{
|
|
||||||
u64 color = (u64)cmd->zone.name_lit_cstr;
|
|
||||||
PIXBeginEventOnCommandList((ID3D12GraphicsCommandList *)d3d_cl, color, cmd->zone.name_lit_cstr);
|
|
||||||
}
|
|
||||||
if (G_D12.ags_enabled)
|
|
||||||
{
|
|
||||||
agsDriverExtensionsDX12_PushMarker(G_D12.ags_ctx, (ID3D12GraphicsCommandList *)d3d_cl, cmd->zone.name_lit_cstr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (G_D12.pix_enabled)
|
G_D12_InsertEvent(d3d_cl, G_D12_EventKind_PopZone, cmd->zone.name_lit);
|
||||||
{
|
|
||||||
PIXEndEventOnCommandList((ID3D12GraphicsCommandList *)d3d_cl);
|
|
||||||
}
|
|
||||||
if (G_D12.ags_enabled)
|
|
||||||
{
|
|
||||||
agsDriverExtensionsDX12_PopMarker(G_D12.ags_ctx, (ID3D12GraphicsCommandList *)d3d_cl);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
@ -2792,6 +2837,7 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dispatch
|
// Dispatch
|
||||||
|
G_D12_InsertEvent(d3d_cl, G_D12_EventKind_Marker, STRING(pipeline->name_len, (u8 *)pipeline->name_cstr));
|
||||||
ID3D12GraphicsCommandList_Dispatch(d3d_cl, cmd->compute.groups.x, cmd->compute.groups.y, cmd->compute.groups.z);
|
ID3D12GraphicsCommandList_Dispatch(d3d_cl, cmd->compute.groups.x, cmd->compute.groups.y, cmd->compute.groups.z);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
@ -3003,6 +3049,7 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dispatch
|
// Dispatch
|
||||||
|
G_D12_InsertEvent(d3d_cl, G_D12_EventKind_Marker, STRING(pipeline->name_len, (u8 *)pipeline->name_cstr));
|
||||||
ID3D12GraphicsCommandList_DrawIndexedInstanced(d3d_cl, indices_count, cmd->draw.instances_count, 0, 0, 0);
|
ID3D12GraphicsCommandList_DrawIndexedInstanced(d3d_cl, indices_count, cmd->draw.instances_count, 0, 0, 0);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
@ -3011,7 +3058,7 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
|
|
||||||
case G_D12_CmdKind_ClearRtv:
|
case G_D12_CmdKind_ClearRtv:
|
||||||
{
|
{
|
||||||
G_D12_Resource *rt = cmd->clear_rtv.resource;
|
G_D12_Resource *resource = cmd->clear_rtv.resource;
|
||||||
f32 clear_color[4] = Zi;
|
f32 clear_color[4] = Zi;
|
||||||
{
|
{
|
||||||
clear_color[0] = cmd->clear_rtv.color.x;
|
clear_color[0] = cmd->clear_rtv.color.x;
|
||||||
@ -3020,11 +3067,12 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
clear_color[3] = cmd->clear_rtv.color.w;
|
clear_color[3] = cmd->clear_rtv.color.w;
|
||||||
}
|
}
|
||||||
D3D12_CPU_DESCRIPTOR_HANDLE rtv_handle = rcl->rtv_clear_descriptor->first_handle;
|
D3D12_CPU_DESCRIPTOR_HANDLE rtv_handle = rcl->rtv_clear_descriptor->first_handle;
|
||||||
if (bound_render_clear_target_uid != rt->uid + cmd->clear_rtv.mip)
|
if (bound_render_clear_target_uid != resource->uid + cmd->clear_rtv.mip)
|
||||||
{
|
{
|
||||||
G_D12_InitRtv(rt, rtv_handle, cmd->clear_rtv.mip);
|
G_D12_InitRtv(resource, rtv_handle, cmd->clear_rtv.mip);
|
||||||
bound_render_clear_target_uid = rt->uid + cmd->clear_rtv.mip;
|
bound_render_clear_target_uid = resource->uid + cmd->clear_rtv.mip;
|
||||||
}
|
}
|
||||||
|
G_D12_InsertEvent(d3d_cl, G_D12_EventKind_Marker, STRING(resource->name_len, (u8 *)resource->name_cstr));
|
||||||
ID3D12GraphicsCommandList_ClearRenderTargetView(d3d_cl, rtv_handle, clear_color, 0, 0);
|
ID3D12GraphicsCommandList_ClearRenderTargetView(d3d_cl, rtv_handle, clear_color, 0, 0);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
@ -3036,6 +3084,7 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
D3D12_DISCARD_REGION region = Zi;
|
D3D12_DISCARD_REGION region = Zi;
|
||||||
region.FirstSubresource = 0;
|
region.FirstSubresource = 0;
|
||||||
region.NumSubresources = resource->texture_mips;
|
region.NumSubresources = resource->texture_mips;
|
||||||
|
G_D12_InsertEvent(d3d_cl, G_D12_EventKind_Marker, STRING(resource->name_len, (u8 *)resource->name_cstr));
|
||||||
ID3D12GraphicsCommandList_DiscardResource(d3d_cl, resource->d3d_resource, 0);
|
ID3D12GraphicsCommandList_DiscardResource(d3d_cl, resource->d3d_resource, 0);
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
@ -3169,16 +3218,16 @@ void G_SyncLayout(G_CommandListHandle cl_handle, G_ResourceHandle resource_handl
|
|||||||
|
|
||||||
//- Zone
|
//- Zone
|
||||||
|
|
||||||
void G_PushZone(G_CommandListHandle cl_handle, char *name_lit_cstr)
|
void G_PushZoneEx(G_CommandListHandle cl_handle, String name_lit)
|
||||||
{
|
{
|
||||||
G_D12_CmdList *cl = G_D12_CmdListFromHandle(cl_handle);
|
G_D12_CmdList *cl = G_D12_CmdListFromHandle(cl_handle);
|
||||||
G_D12_Cmd *cmd = G_D12_PushCmd(cl);
|
G_D12_Cmd *cmd = G_D12_PushCmd(cl);
|
||||||
cmd->kind = G_D12_CmdKind_Zone;
|
cmd->kind = G_D12_CmdKind_Zone;
|
||||||
cmd->zone.name_lit_cstr = name_lit_cstr;
|
cmd->zone.name_lit = name_lit;
|
||||||
cmd->zone.push = 1;
|
cmd->zone.push = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void G_PopZone(G_CommandListHandle cl_handle)
|
void G_PopZoneEx(G_CommandListHandle cl_handle)
|
||||||
{
|
{
|
||||||
G_D12_CmdList *cl = G_D12_CmdListFromHandle(cl_handle);
|
G_D12_CmdList *cl = G_D12_CmdListFromHandle(cl_handle);
|
||||||
G_D12_Cmd *cmd = G_D12_PushCmd(cl);
|
G_D12_Cmd *cmd = G_D12_PushCmd(cl);
|
||||||
|
|||||||
@ -53,6 +53,9 @@ Struct(G_D12_Pipeline)
|
|||||||
|
|
||||||
b32 ok;
|
b32 ok;
|
||||||
String error;
|
String error;
|
||||||
|
|
||||||
|
u64 name_len;
|
||||||
|
char name_cstr[G_D12_MaxNameLen];
|
||||||
};
|
};
|
||||||
|
|
||||||
Struct(G_D12_PipelineBin)
|
Struct(G_D12_PipelineBin)
|
||||||
@ -95,7 +98,7 @@ Struct(G_D12_Resource)
|
|||||||
struct G_D12_Swapchain *swapchain;
|
struct G_D12_Swapchain *swapchain;
|
||||||
|
|
||||||
u64 name_len;
|
u64 name_len;
|
||||||
u8 name_text[G_D12_MaxNameLen];
|
char name_cstr[G_D12_MaxNameLen];
|
||||||
};
|
};
|
||||||
|
|
||||||
Struct(G_D12_ResourceList)
|
Struct(G_D12_ResourceList)
|
||||||
@ -281,9 +284,6 @@ Struct(G_D12_Releasable)
|
|||||||
i64 completion_queue_target;
|
i64 completion_queue_target;
|
||||||
|
|
||||||
ID3D12Resource *d3d_resource;
|
ID3D12Resource *d3d_resource;
|
||||||
|
|
||||||
u64 name_len;
|
|
||||||
u8 name_text[G_D12_MaxNameLen];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Struct(G_D12_ReleasableList)
|
Struct(G_D12_ReleasableList)
|
||||||
@ -292,6 +292,16 @@ Struct(G_D12_ReleasableList)
|
|||||||
G_D12_Releasable *last;
|
G_D12_Releasable *last;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
//~ Event types
|
||||||
|
|
||||||
|
Enum(G_D12_EventKind)
|
||||||
|
{
|
||||||
|
G_D12_EventKind_Marker,
|
||||||
|
G_D12_EventKind_PushZone,
|
||||||
|
G_D12_EventKind_PopZone,
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Command list types
|
//~ Command list types
|
||||||
|
|
||||||
@ -328,7 +338,7 @@ Struct(G_D12_Cmd)
|
|||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
char *name_lit_cstr;
|
String name_lit;
|
||||||
b32 push;
|
b32 push;
|
||||||
} zone;
|
} zone;
|
||||||
|
|
||||||
@ -406,7 +416,7 @@ Struct(G_D12_CmdList)
|
|||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Command batching types
|
//~ Tracking types
|
||||||
|
|
||||||
// TODO: Use a dynamic bin count, since the maximum number of tracked resources in the list is known at command list creation time
|
// TODO: Use a dynamic bin count, since the maximum number of tracked resources in the list is known at command list creation time
|
||||||
#define G_D12_TrackedResourceBinsCount 64
|
#define G_D12_TrackedResourceBinsCount 64
|
||||||
@ -715,6 +725,11 @@ G_D12_Descriptor *G_D12_PushDescriptor(G_D12_Arena *gpu_arena, G_D12_DescriptorH
|
|||||||
G_D12_Cmd *G_D12_PushCmd(G_D12_CmdList *cl);
|
G_D12_Cmd *G_D12_PushCmd(G_D12_CmdList *cl);
|
||||||
G_D12_StagingRegionNode *G_D12_PushStagingRegion(G_D12_CmdList *cl, u64 size);
|
G_D12_StagingRegionNode *G_D12_PushStagingRegion(G_D12_CmdList *cl, u64 size);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
//~ Instrumentation
|
||||||
|
|
||||||
|
void G_D12_InsertEvent(ID3D12GraphicsCommandList7 *d3d_cl, G_D12_EventKind kind, String data);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Tracking
|
//~ Tracking
|
||||||
|
|
||||||
|
|||||||
@ -5397,7 +5397,7 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
// the first mip index in the bloom mip chain
|
// the first mip index in the bloom mip chain
|
||||||
|
|
||||||
//- Downsample
|
//- Downsample
|
||||||
G_ZoneDF(cl, "Bloom up")
|
G_ZoneDF(cl, "Bloom down")
|
||||||
for (i32 mip_idx = 1; mip_idx < mips_count; ++mip_idx)
|
for (i32 mip_idx = 1; mip_idx < mips_count; ++mip_idx)
|
||||||
{
|
{
|
||||||
Vec2I32 down_dims = G_DimsFromMip2D(G_Count2D(screen_target), mip_idx);
|
Vec2I32 down_dims = G_DimsFromMip2D(G_Count2D(screen_target), mip_idx);
|
||||||
@ -5409,7 +5409,7 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- Upsample passes
|
//- Upsample passes
|
||||||
G_ZoneDF(cl, "Bloom down")
|
G_ZoneDF(cl, "Bloom up")
|
||||||
for (i32 mip_idx = mips_count - 2; mip_idx >= 0; --mip_idx)
|
for (i32 mip_idx = mips_count - 2; mip_idx >= 0; --mip_idx)
|
||||||
{
|
{
|
||||||
Vec2I32 up_dims = G_DimsFromMip2D(G_Count2D(screen_target), mip_idx);
|
Vec2I32 up_dims = G_DimsFromMip2D(G_Count2D(screen_target), mip_idx);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user