Handle debug markers commands on command encoder
This CL adds support for InsertDebugMarker, PushDebugGroup, and PopDebugGroup commands to CommandBuffer backends. Bug: dawn:44 Change-Id: Iaf075023d3072534fca02b71c0e205cbaa46cd0f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/28602 Reviewed-by: Austin Eng <enga@chromium.org> Reviewed-by: Bryan Bernhart <bryan.bernhart@intel.com> Commit-Queue: Enrico Galli <enrico.galli@intel.com>
This commit is contained in:
parent
1da25e5103
commit
6e2415256c
|
@ -916,6 +916,44 @@ namespace dawn_native { namespace d3d12 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Command::InsertDebugMarker: {
|
||||||
|
InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>();
|
||||||
|
const char* label = mCommands.NextData<char>(cmd->length + 1);
|
||||||
|
|
||||||
|
if (ToBackend(GetDevice())->GetFunctions()->IsPIXEventRuntimeLoaded()) {
|
||||||
|
// PIX color is 1 byte per channel in ARGB format
|
||||||
|
constexpr uint64_t kPIXBlackColor = 0xff000000;
|
||||||
|
ToBackend(GetDevice())
|
||||||
|
->GetFunctions()
|
||||||
|
->pixSetMarkerOnCommandList(commandList, kPIXBlackColor, label);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case Command::PopDebugGroup: {
|
||||||
|
mCommands.NextCommand<PopDebugGroupCmd>();
|
||||||
|
|
||||||
|
if (ToBackend(GetDevice())->GetFunctions()->IsPIXEventRuntimeLoaded()) {
|
||||||
|
ToBackend(GetDevice())
|
||||||
|
->GetFunctions()
|
||||||
|
->pixEndEventOnCommandList(commandList);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case Command::PushDebugGroup: {
|
||||||
|
PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>();
|
||||||
|
const char* label = mCommands.NextData<char>(cmd->length + 1);
|
||||||
|
|
||||||
|
if (ToBackend(GetDevice())->GetFunctions()->IsPIXEventRuntimeLoaded()) {
|
||||||
|
// PIX color is 1 byte per channel in ARGB format
|
||||||
|
constexpr uint64_t kPIXBlackColor = 0xff000000;
|
||||||
|
ToBackend(GetDevice())
|
||||||
|
->GetFunctions()
|
||||||
|
->pixBeginEventOnCommandList(commandList, kPIXBlackColor, label);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -766,6 +766,34 @@ namespace dawn_native { namespace metal {
|
||||||
return DAWN_UNIMPLEMENTED_ERROR("Waiting for implementation.");
|
return DAWN_UNIMPLEMENTED_ERROR("Waiting for implementation.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Command::InsertDebugMarker: {
|
||||||
|
// MTLCommandBuffer does not implement insertDebugSignpost
|
||||||
|
SkipCommand(&mCommands, type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case Command::PopDebugGroup: {
|
||||||
|
mCommands.NextCommand<PopDebugGroupCmd>();
|
||||||
|
|
||||||
|
if (@available(macos 10.13, *)) {
|
||||||
|
[commandContext->GetCommands() popDebugGroup];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case Command::PushDebugGroup: {
|
||||||
|
PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>();
|
||||||
|
char* label = mCommands.NextData<char>(cmd->length + 1);
|
||||||
|
|
||||||
|
if (@available(macos 10.13, *)) {
|
||||||
|
NSString* mtlLabel = [[NSString alloc] initWithUTF8String:label];
|
||||||
|
[commandContext->GetCommands() pushDebugGroup:mtlLabel];
|
||||||
|
[mtlLabel release];
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -734,6 +734,15 @@ namespace dawn_native { namespace opengl {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Command::InsertDebugMarker:
|
||||||
|
case Command::PopDebugGroup:
|
||||||
|
case Command::PushDebugGroup: {
|
||||||
|
// Due to lack of linux driver support for GL_EXT_debug_marker
|
||||||
|
// extension these functions are skipped.
|
||||||
|
SkipCommand(&mCommands, type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -774,6 +774,54 @@ namespace dawn_native { namespace vulkan {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Command::InsertDebugMarker: {
|
||||||
|
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
|
||||||
|
InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>();
|
||||||
|
const char* label = mCommands.NextData<char>(cmd->length + 1);
|
||||||
|
VkDebugMarkerMarkerInfoEXT markerInfo{};
|
||||||
|
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
|
||||||
|
markerInfo.pMarkerName = label;
|
||||||
|
// Default color to black
|
||||||
|
markerInfo.color[0] = 0.0;
|
||||||
|
markerInfo.color[1] = 0.0;
|
||||||
|
markerInfo.color[2] = 0.0;
|
||||||
|
markerInfo.color[3] = 1.0;
|
||||||
|
device->fn.CmdDebugMarkerInsertEXT(commands, &markerInfo);
|
||||||
|
} else {
|
||||||
|
SkipCommand(&mCommands, Command::InsertDebugMarker);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case Command::PopDebugGroup: {
|
||||||
|
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
|
||||||
|
mCommands.NextCommand<PopDebugGroupCmd>();
|
||||||
|
device->fn.CmdDebugMarkerEndEXT(commands);
|
||||||
|
} else {
|
||||||
|
SkipCommand(&mCommands, Command::PopDebugGroup);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case Command::PushDebugGroup: {
|
||||||
|
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
|
||||||
|
PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>();
|
||||||
|
const char* label = mCommands.NextData<char>(cmd->length + 1);
|
||||||
|
VkDebugMarkerMarkerInfoEXT markerInfo{};
|
||||||
|
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
|
||||||
|
markerInfo.pMarkerName = label;
|
||||||
|
// Default color to black
|
||||||
|
markerInfo.color[0] = 0.0;
|
||||||
|
markerInfo.color[1] = 0.0;
|
||||||
|
markerInfo.color[2] = 0.0;
|
||||||
|
markerInfo.color[3] = 1.0;
|
||||||
|
device->fn.CmdDebugMarkerBeginEXT(commands, &markerInfo);
|
||||||
|
} else {
|
||||||
|
SkipCommand(&mCommands, Command::PushDebugGroup);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -23,6 +23,9 @@ TEST_P(DebugMarkerTests, NoFailureWithoutDebugToolAttached) {
|
||||||
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 4, 4);
|
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 4, 4);
|
||||||
|
|
||||||
wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||||
|
encoder.PushDebugGroup("Event Start");
|
||||||
|
encoder.InsertDebugMarker("Marker");
|
||||||
|
encoder.PopDebugGroup();
|
||||||
{
|
{
|
||||||
wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
|
wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
pass.PushDebugGroup("Event Start");
|
pass.PushDebugGroup("Event Start");
|
||||||
|
|
Loading…
Reference in New Issue