Hash :
0a6c6c00
Author :
Date :
2021-06-01T10:59:17
Vulkan: Submit Dispatch commands outside renderpass Compute dispatch commands must be submitted outside a renderpass, but their associated debug event markers were being submitted on the renderpass commandbuffer. The dispatch debug event markers are now handled separately from those for draw calls and are now submitted on the correct commandbuffer. Failure manifested in malformed AGI traces for Ragnarok M: Eternal Love Bug: b/181611786 Change-Id: I768eeccd76be38818fc99d6d56f5899290c8fc5b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2930818 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
//
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// DebugAnnotatorVk.cpp: Vulkan helpers for adding trace annotations.
//
#include "libANGLE/renderer/vulkan/DebugAnnotatorVk.h"
#include "common/entry_points_enum_autogen.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/vulkan/ContextVk.h"
namespace rx
{
DebugAnnotatorVk::DebugAnnotatorVk() {}
DebugAnnotatorVk::~DebugAnnotatorVk() {}
void DebugAnnotatorVk::beginEvent(gl::Context *context,
angle::EntryPoint entryPoint,
const char *eventName,
const char *eventMessage)
{
angle::LoggingAnnotator::beginEvent(context, entryPoint, eventName, eventMessage);
if (vkCmdBeginDebugUtilsLabelEXT && context)
{
ContextVk *contextVk = vk::GetImpl(static_cast<gl::Context *>(context));
contextVk->logEvent(eventMessage);
}
}
void DebugAnnotatorVk::endEvent(gl::Context *context,
const char *eventName,
angle::EntryPoint entryPoint)
{
angle::LoggingAnnotator::endEvent(context, eventName, entryPoint);
if (vkCmdBeginDebugUtilsLabelEXT && context)
{
ContextVk *contextVk = vk::GetImpl(static_cast<gl::Context *>(context));
if (isDrawEntryPoint(entryPoint))
{
contextVk->endEventLog(entryPoint, PipelineType::Graphics);
}
else if (isDispatchEntryPoint(entryPoint))
{
contextVk->endEventLog(entryPoint, PipelineType::Compute);
}
}
}
bool DebugAnnotatorVk::getStatus()
{
return true;
}
bool DebugAnnotatorVk::isDrawEntryPoint(angle::EntryPoint entryPoint) const
{
switch (entryPoint)
{
case angle::EntryPoint::GLDrawArrays:
case angle::EntryPoint::GLDrawArraysIndirect:
case angle::EntryPoint::GLDrawArraysInstanced:
case angle::EntryPoint::GLDrawArraysInstancedANGLE:
case angle::EntryPoint::GLDrawArraysInstancedBaseInstance:
case angle::EntryPoint::GLDrawArraysInstancedBaseInstanceANGLE:
case angle::EntryPoint::GLDrawArraysInstancedEXT:
case angle::EntryPoint::GLDrawElements:
case angle::EntryPoint::GLDrawElementsBaseVertex:
case angle::EntryPoint::GLDrawElementsBaseVertexEXT:
case angle::EntryPoint::GLDrawElementsBaseVertexOES:
case angle::EntryPoint::GLDrawElementsIndirect:
case angle::EntryPoint::GLDrawElementsInstanced:
case angle::EntryPoint::GLDrawElementsInstancedANGLE:
case angle::EntryPoint::GLDrawElementsInstancedBaseInstance:
case angle::EntryPoint::GLDrawElementsInstancedBaseVertex:
case angle::EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstance:
case angle::EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstanceANGLE:
case angle::EntryPoint::GLDrawElementsInstancedBaseVertexEXT:
case angle::EntryPoint::GLDrawElementsInstancedBaseVertexOES:
case angle::EntryPoint::GLDrawElementsInstancedEXT:
case angle::EntryPoint::GLDrawPixels:
case angle::EntryPoint::GLDrawRangeElements:
case angle::EntryPoint::GLDrawRangeElementsBaseVertex:
case angle::EntryPoint::GLDrawRangeElementsBaseVertexEXT:
case angle::EntryPoint::GLDrawRangeElementsBaseVertexOES:
case angle::EntryPoint::GLDrawTexfOES:
case angle::EntryPoint::GLDrawTexfvOES:
case angle::EntryPoint::GLDrawTexiOES:
case angle::EntryPoint::GLDrawTexivOES:
case angle::EntryPoint::GLDrawTexsOES:
case angle::EntryPoint::GLDrawTexsvOES:
case angle::EntryPoint::GLDrawTexxOES:
case angle::EntryPoint::GLDrawTexxvOES:
case angle::EntryPoint::GLDrawTransformFeedback:
case angle::EntryPoint::GLDrawTransformFeedbackInstanced:
case angle::EntryPoint::GLDrawTransformFeedbackStream:
case angle::EntryPoint::GLDrawTransformFeedbackStreamInstanced:
return true;
default:
return false;
}
}
bool DebugAnnotatorVk::isDispatchEntryPoint(angle::EntryPoint entryPoint) const
{
switch (entryPoint)
{
case angle::EntryPoint::GLDispatchCompute:
case angle::EntryPoint::GLDispatchComputeIndirect:
return true;
default:
return false;
}
}
} // namespace rx