/* Copyright (c) 2026 The Khronos Group Inc.
 * Copyright (c) 2026 Valve Corporation
 * Copyright (c) 2026 LunarG, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#pragma once
#include "generated/error_location_helper.h"

// clang-format off

namespace vvl {

static inline bool IsCommandDrawMesh(Func command) {
    return
        command == Func::vkCmdDrawMeshTasksNV ||
        command == Func::vkCmdDrawMeshTasksIndirectNV ||
        command == Func::vkCmdDrawMeshTasksIndirectCountNV ||
        command == Func::vkCmdDrawMeshTasksEXT ||
        command == Func::vkCmdDrawMeshTasksIndirectEXT ||
        command == Func::vkCmdDrawMeshTasksIndirectCountEXT ||
        command == Func::vkCmdDrawMeshTasksIndirectCount2EXT ||
        command == Func::vkCmdDrawMeshTasksIndirect2EXT;
}

static inline bool IsCommandDrawVertexIndexed(Func command) {
    return
        command == Func::vkCmdDrawIndexed ||
        command == Func::vkCmdDrawMultiIndexedEXT ||
        command == Func::vkCmdDrawIndexedIndirect ||
        command == Func::vkCmdDrawIndexedIndirectCount ||
        command == Func::vkCmdDrawIndexedIndirectCountKHR ||
        command == Func::vkCmdDrawIndexedIndirectCount2KHR ||
        command == Func::vkCmdDrawIndexedIndirect2KHR;
}

static inline bool IsCommandDrawVertex(Func command) {
    return
        command == Func::vkCmdDraw ||
        command == Func::vkCmdDrawMultiEXT ||
        command == Func::vkCmdDrawIndexed ||
        command == Func::vkCmdDrawMultiIndexedEXT ||
        command == Func::vkCmdDrawIndirect ||
        command == Func::vkCmdDrawIndexedIndirect ||
        command == Func::vkCmdDrawIndirectCount ||
        command == Func::vkCmdDrawIndirectCountKHR ||
        command == Func::vkCmdDrawIndexedIndirectCount ||
        command == Func::vkCmdDrawIndexedIndirectCountKHR ||
        command == Func::vkCmdDrawIndirectByteCountEXT ||
        command == Func::vkCmdDrawIndirect2KHR ||
        command == Func::vkCmdDrawIndirectCount2KHR ||
        command == Func::vkCmdDrawIndexedIndirect2KHR ||
        command == Func::vkCmdDrawIndexedIndirectCount2KHR;
}

static inline bool IsCommandDispatch(Func command) {
    return
        command == Func::vkCmdDispatch ||
        command == Func::vkCmdDispatchIndirect ||
        command == Func::vkCmdDispatchBase ||
        command == Func::vkCmdDispatchBaseKHR ||
        command == Func::vkCmdDispatchIndirect2KHR ||
        command == Func::vkCmdDispatchGraphAMDX ||
        command == Func::vkCmdDispatchGraphIndirectAMDX ||
        command == Func::vkCmdDispatchGraphIndirectCountAMDX ||
        command == Func::vkCmdDispatchTileQCOM ||
        command == Func::vkCmdDispatchDataGraphARM;
}

static inline bool IsCommandTraceRays(Func command) {
    return
        command == Func::vkCmdTraceRaysNV ||
        command == Func::vkCmdTraceRaysKHR ||
        command == Func::vkCmdTraceRaysIndirectKHR ||
        command == Func::vkCmdTraceRaysIndirect2KHR;
}

static inline bool IsCommandIndirect(Func command) {
    return
        command == Func::vkCmdDrawIndirect ||
        command == Func::vkCmdDrawIndexedIndirect ||
        command == Func::vkCmdDispatchIndirect ||
        command == Func::vkCmdDrawIndirectCount ||
        command == Func::vkCmdDrawIndirectCountKHR ||
        command == Func::vkCmdDrawIndirectCountAMD ||
        command == Func::vkCmdDrawIndexedIndirectCount ||
        command == Func::vkCmdDrawIndexedIndirectCountKHR ||
        command == Func::vkCmdDrawIndexedIndirectCountAMD ||
        command == Func::vkCmdDrawMeshTasksIndirectCountNV ||
        command == Func::vkCmdDrawMeshTasksIndirectNV ||
        command == Func::vkCmdDrawMeshTasksIndirectEXT ||
        command == Func::vkCmdDrawMeshTasksIndirectCountEXT ||
        command == Func::vkCmdDrawIndirectByteCountEXT ||
        command == Func::vkCmdDrawIndirectByteCount2EXT ||
        command == Func::vkCmdDrawIndirect2KHR ||
        command == Func::vkCmdDrawIndexedIndirect2KHR ||
        command == Func::vkCmdDrawIndirectCount2KHR ||
        command == Func::vkCmdDrawIndexedIndirectCount2KHR ||
        command == Func::vkCmdDispatchIndirect2KHR ||
        command == Func::vkCmdDrawMeshTasksIndirect2EXT ||
        command == Func::vkCmdDrawMeshTasksIndirectCount2EXT ||
        command == Func::vkCmdTraceRaysIndirectKHR ||
        command == Func::vkCmdTraceRaysIndirect2KHR;
}

} // namespace vvl

// clang-format on