1 //
2 // Copyright 2020 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // DebugAnnotatorVk.cpp: Vulkan helpers for adding trace annotations.
7 //
8
9 #include "libANGLE/renderer/vulkan/DebugAnnotatorVk.h"
10
11 #include "common/entry_points_enum_autogen.h"
12 #include "libANGLE/Context.h"
13 #include "libANGLE/renderer/vulkan/ContextVk.h"
14
15 namespace rx
16 {
17
DebugAnnotatorVk()18 DebugAnnotatorVk::DebugAnnotatorVk() {}
19
~DebugAnnotatorVk()20 DebugAnnotatorVk::~DebugAnnotatorVk() {}
21
beginEvent(gl::Context * context,angle::EntryPoint entryPoint,const char * eventName,const char * eventMessage)22 void DebugAnnotatorVk::beginEvent(gl::Context *context,
23 angle::EntryPoint entryPoint,
24 const char *eventName,
25 const char *eventMessage)
26 {
27 angle::LoggingAnnotator::beginEvent(context, entryPoint, eventName, eventMessage);
28 if (vkCmdBeginDebugUtilsLabelEXT && context)
29 {
30 ContextVk *contextVk = vk::GetImpl(static_cast<gl::Context *>(context));
31 contextVk->logEvent(eventMessage);
32 }
33 }
34
endEvent(gl::Context * context,const char * eventName,angle::EntryPoint entryPoint)35 void DebugAnnotatorVk::endEvent(gl::Context *context,
36 const char *eventName,
37 angle::EntryPoint entryPoint)
38 {
39 angle::LoggingAnnotator::endEvent(context, eventName, entryPoint);
40 if (vkCmdBeginDebugUtilsLabelEXT && context)
41 {
42 ContextVk *contextVk = vk::GetImpl(static_cast<gl::Context *>(context));
43 if (isDrawEntryPoint(entryPoint))
44 {
45 contextVk->endEventLog(entryPoint, PipelineType::Graphics);
46 }
47 else if (isDispatchEntryPoint(entryPoint))
48 {
49 contextVk->endEventLog(entryPoint, PipelineType::Compute);
50 }
51 else if (isClearOrQueryEntryPoint(entryPoint))
52 {
53 contextVk->endEventLogForClearOrQuery();
54 }
55 }
56 }
57
getStatus()58 bool DebugAnnotatorVk::getStatus()
59 {
60 return true;
61 }
62
isDrawEntryPoint(angle::EntryPoint entryPoint) const63 bool DebugAnnotatorVk::isDrawEntryPoint(angle::EntryPoint entryPoint) const
64 {
65 switch (entryPoint)
66 {
67 case angle::EntryPoint::GLDrawArrays:
68 case angle::EntryPoint::GLDrawArraysIndirect:
69 case angle::EntryPoint::GLDrawArraysInstanced:
70 case angle::EntryPoint::GLDrawArraysInstancedANGLE:
71 case angle::EntryPoint::GLDrawArraysInstancedBaseInstance:
72 case angle::EntryPoint::GLDrawArraysInstancedBaseInstanceANGLE:
73 case angle::EntryPoint::GLDrawArraysInstancedEXT:
74 case angle::EntryPoint::GLDrawElements:
75 case angle::EntryPoint::GLDrawElementsBaseVertex:
76 case angle::EntryPoint::GLDrawElementsBaseVertexEXT:
77 case angle::EntryPoint::GLDrawElementsBaseVertexOES:
78 case angle::EntryPoint::GLDrawElementsIndirect:
79 case angle::EntryPoint::GLDrawElementsInstanced:
80 case angle::EntryPoint::GLDrawElementsInstancedANGLE:
81 case angle::EntryPoint::GLDrawElementsInstancedBaseInstance:
82 case angle::EntryPoint::GLDrawElementsInstancedBaseVertex:
83 case angle::EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstance:
84 case angle::EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstanceANGLE:
85 case angle::EntryPoint::GLDrawElementsInstancedBaseVertexEXT:
86 case angle::EntryPoint::GLDrawElementsInstancedBaseVertexOES:
87 case angle::EntryPoint::GLDrawElementsInstancedEXT:
88 case angle::EntryPoint::GLDrawPixels:
89 case angle::EntryPoint::GLDrawRangeElements:
90 case angle::EntryPoint::GLDrawRangeElementsBaseVertex:
91 case angle::EntryPoint::GLDrawRangeElementsBaseVertexEXT:
92 case angle::EntryPoint::GLDrawRangeElementsBaseVertexOES:
93 case angle::EntryPoint::GLDrawTexfOES:
94 case angle::EntryPoint::GLDrawTexfvOES:
95 case angle::EntryPoint::GLDrawTexiOES:
96 case angle::EntryPoint::GLDrawTexivOES:
97 case angle::EntryPoint::GLDrawTexsOES:
98 case angle::EntryPoint::GLDrawTexsvOES:
99 case angle::EntryPoint::GLDrawTexxOES:
100 case angle::EntryPoint::GLDrawTexxvOES:
101 case angle::EntryPoint::GLDrawTransformFeedback:
102 case angle::EntryPoint::GLDrawTransformFeedbackInstanced:
103 case angle::EntryPoint::GLDrawTransformFeedbackStream:
104 case angle::EntryPoint::GLDrawTransformFeedbackStreamInstanced:
105 return true;
106 default:
107 return false;
108 }
109 }
110
isDispatchEntryPoint(angle::EntryPoint entryPoint) const111 bool DebugAnnotatorVk::isDispatchEntryPoint(angle::EntryPoint entryPoint) const
112 {
113 switch (entryPoint)
114 {
115 case angle::EntryPoint::GLDispatchCompute:
116 case angle::EntryPoint::GLDispatchComputeIndirect:
117 return true;
118 default:
119 return false;
120 }
121 }
122
isClearOrQueryEntryPoint(angle::EntryPoint entryPoint) const123 bool DebugAnnotatorVk::isClearOrQueryEntryPoint(angle::EntryPoint entryPoint) const
124 {
125 switch (entryPoint)
126 {
127 case angle::EntryPoint::GLClear:
128 case angle::EntryPoint::GLClearBufferfi:
129 case angle::EntryPoint::GLClearBufferfv:
130 case angle::EntryPoint::GLClearBufferiv:
131 case angle::EntryPoint::GLClearBufferuiv:
132 case angle::EntryPoint::GLBeginQuery:
133 case angle::EntryPoint::GLBeginQueryEXT:
134 case angle::EntryPoint::GLBeginQueryIndexed:
135 case angle::EntryPoint::GLEndQuery:
136 case angle::EntryPoint::GLEndQueryEXT:
137 case angle::EntryPoint::GLEndQueryIndexed:
138 return true;
139 default:
140 return false;
141 }
142 }
143
144 } // namespace rx
145