Edit

kc3-lang/angle/src/libANGLE/renderer/vulkan/DebugAnnotatorVk.cpp

Branch :

  • Show log

    Commit

  • Author : Ian Elliott
    Date : 2021-06-10 18:55:04
    Hash : ebf75698
    Message : Vulkan: Fix AGI clear hierarchy bug for clear commands This approach properly handles outside-render-pass clears. Bug: b/190622922 Change-Id: Ia4a9d6ec13d7da8c4a445af1127e82c03f37e8b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2951960 Reviewed-by: Mark Lobodzinski <mark@lunarg.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com>

  • src/libANGLE/renderer/vulkan/DebugAnnotatorVk.cpp
  • //
    // 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);
            }
            else if (isClearOrQueryEntryPoint(entryPoint))
            {
                contextVk->endEventLogForClearOrQuery();
            }
        }
    }
    
    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;
        }
    }
    
    bool DebugAnnotatorVk::isClearOrQueryEntryPoint(angle::EntryPoint entryPoint) const
    {
        switch (entryPoint)
        {
            case angle::EntryPoint::GLClear:
            case angle::EntryPoint::GLClearBufferfi:
            case angle::EntryPoint::GLClearBufferfv:
            case angle::EntryPoint::GLClearBufferiv:
            case angle::EntryPoint::GLClearBufferuiv:
            case angle::EntryPoint::GLBeginQuery:
            case angle::EntryPoint::GLBeginQueryEXT:
            case angle::EntryPoint::GLBeginQueryIndexed:
            case angle::EntryPoint::GLEndQuery:
            case angle::EntryPoint::GLEndQueryEXT:
            case angle::EntryPoint::GLEndQueryIndexed:
                return true;
            default:
                return false;
        }
    }
    
    }  // namespace rx