Handle debug markers commands for compute pass encoder This CL makes sure debug markers commands are handled not only for render pass encoder, but also compute pass encoder. Bug: dawn:44 Change-Id: Iad1865d7c20e36d580e1f3f16496e4b90cc1ff34 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9680 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_native/d3d12/CommandBufferD3D12.cpp b/src/dawn_native/d3d12/CommandBufferD3D12.cpp index 3c89500..8678ecd 100644 --- a/src/dawn_native/d3d12/CommandBufferD3D12.cpp +++ b/src/dawn_native/d3d12/CommandBufferD3D12.cpp
@@ -812,6 +812,42 @@ cmd->dynamicOffsetCount, dynamicOffsets); } 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.Get(), kPIXBlackColor, label); + } + } break; + + case Command::PopDebugGroup: { + mCommands.NextCommand<PopDebugGroupCmd>(); + + if (ToBackend(GetDevice())->GetFunctions()->isPIXEventRuntimeLoaded()) { + ToBackend(GetDevice()) + ->GetFunctions() + ->pixEndEventOnCommandList(commandList.Get()); + } + } 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.Get(), kPIXBlackColor, label); + } + } break; + default: { UNREACHABLE(); } break; } }
diff --git a/src/dawn_native/metal/CommandBufferMTL.mm b/src/dawn_native/metal/CommandBufferMTL.mm index dd65f3e..6892fe5 100644 --- a/src/dawn_native/metal/CommandBufferMTL.mm +++ b/src/dawn_native/metal/CommandBufferMTL.mm
@@ -660,6 +660,30 @@ encoder); } break; + case Command::InsertDebugMarker: { + InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>(); + char* label = mCommands.NextData<char>(cmd->length + 1); + NSString* mtlLabel = [[NSString alloc] initWithUTF8String:label]; + + [encoder insertDebugSignpost:mtlLabel]; + [mtlLabel release]; + } break; + + case Command::PopDebugGroup: { + mCommands.NextCommand<PopDebugGroupCmd>(); + + [encoder popDebugGroup]; + } break; + + case Command::PushDebugGroup: { + PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>(); + char* label = mCommands.NextData<char>(cmd->length + 1); + NSString* mtlLabel = [[NSString alloc] initWithUTF8String:label]; + + [encoder pushDebugGroup:mtlLabel]; + [mtlLabel release]; + } break; + default: { UNREACHABLE(); } break; } } @@ -847,7 +871,7 @@ case Command::InsertDebugMarker: { InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>(); - auto label = mCommands.NextData<char>(cmd->length + 1); + char* label = mCommands.NextData<char>(cmd->length + 1); NSString* mtlLabel = [[NSString alloc] initWithUTF8String:label]; [encoder insertDebugSignpost:mtlLabel]; @@ -862,7 +886,7 @@ case Command::PushDebugGroup: { PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>(); - auto label = mCommands.NextData<char>(cmd->length + 1); + char* label = mCommands.NextData<char>(cmd->length + 1); NSString* mtlLabel = [[NSString alloc] initWithUTF8String:label]; [encoder pushDebugGroup:mtlLabel];
diff --git a/src/dawn_native/opengl/CommandBufferGL.cpp b/src/dawn_native/opengl/CommandBufferGL.cpp index d7a07bc..4a65c6f 100644 --- a/src/dawn_native/opengl/CommandBufferGL.cpp +++ b/src/dawn_native/opengl/CommandBufferGL.cpp
@@ -579,6 +579,14 @@ cmd->dynamicOffsetCount, dynamicOffsets); } 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: { UNREACHABLE(); } break; } }
diff --git a/src/dawn_native/vulkan/CommandBufferVk.cpp b/src/dawn_native/vulkan/CommandBufferVk.cpp index 1d626e0..66a0dd2 100644 --- a/src/dawn_native/vulkan/CommandBufferVk.cpp +++ b/src/dawn_native/vulkan/CommandBufferVk.cpp
@@ -560,6 +560,53 @@ descriptorSets.OnPipelineLayoutChange(ToBackend(pipeline->GetLayout())); } break; + case Command::InsertDebugMarker: { + if (device->GetDeviceInfo().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.pNext = nullptr; + 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().debugMarker) { + mCommands.NextCommand<PopDebugGroupCmd>(); + device->fn.CmdDebugMarkerEndEXT(commands); + } else { + SkipCommand(&mCommands, Command::PopDebugGroup); + } + } break; + + case Command::PushDebugGroup: { + if (device->GetDeviceInfo().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.pNext = nullptr; + 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: { UNREACHABLE(); } break; } }
diff --git a/src/tests/end2end/DebugMarkerTests.cpp b/src/tests/end2end/DebugMarkerTests.cpp index 81c3a7d..a40ded5 100644 --- a/src/tests/end2end/DebugMarkerTests.cpp +++ b/src/tests/end2end/DebugMarkerTests.cpp
@@ -30,6 +30,13 @@ pass.PopDebugGroup(); pass.EndPass(); } + { + dawn::ComputePassEncoder pass = encoder.BeginComputePass(); + pass.PushDebugGroup("Event Start"); + pass.InsertDebugMarker("Marker"); + pass.PopDebugGroup(); + pass.EndPass(); + } dawn::CommandBuffer commands = encoder.Finish(); queue.Submit(1, &commands);