//
// Copyright (C) 2019 The Android Open Source Project
//
// 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.

// @generated by protoc-gen-es v2.2.2 with parameter "target=ts"
// @generated from file protos/perfetto/trace/gpu/vulkan_memory_event.proto (package perfetto.protos, syntax proto2)
/* eslint-disable */

import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1";
import type { Message } from "@bufbuild/protobuf";

/**
 * Describes the file protos/perfetto/trace/gpu/vulkan_memory_event.proto.
 */
export const file_protos_perfetto_trace_gpu_vulkan_memory_event: GenFile = /*@__PURE__*/
  fileDesc("CjNwcm90b3MvcGVyZmV0dG8vdHJhY2UvZ3B1L3Z1bGthbl9tZW1vcnlfZXZlbnQucHJvdG8SD3BlcmZldHRvLnByb3RvcyJ6ChtWdWxrYW5NZW1vcnlFdmVudEFubm90YXRpb24SDwoHa2V5X2lpZBgBIAEoBBITCglpbnRfdmFsdWUYAiABKANIABIWCgxkb3VibGVfdmFsdWUYAyABKAFIABIUCgpzdHJpbmdfaWlkGAQgASgESABCBwoFdmFsdWUi6AYKEVZ1bGthbk1lbW9yeUV2ZW50EjkKBnNvdXJjZRgBIAEoDjIpLnBlcmZldHRvLnByb3Rvcy5WdWxrYW5NZW1vcnlFdmVudC5Tb3VyY2USPwoJb3BlcmF0aW9uGAIgASgOMiwucGVyZmV0dG8ucHJvdG9zLlZ1bGthbk1lbW9yeUV2ZW50Lk9wZXJhdGlvbhIRCgl0aW1lc3RhbXAYAyABKAMSCwoDcGlkGAQgASgNEhYKDm1lbW9yeV9hZGRyZXNzGAUgASgGEhMKC21lbW9yeV9zaXplGAYgASgEEhIKCmNhbGxlcl9paWQYByABKAQSTAoQYWxsb2NhdGlvbl9zY29wZRgIIAEoDjIyLnBlcmZldHRvLnByb3Rvcy5WdWxrYW5NZW1vcnlFdmVudC5BbGxvY2F0aW9uU2NvcGUSQQoLYW5ub3RhdGlvbnMYCSADKAsyLC5wZXJmZXR0by5wcm90b3MuVnVsa2FuTWVtb3J5RXZlbnRBbm5vdGF0aW9uEg4KBmRldmljZRgQIAEoBhIVCg1kZXZpY2VfbWVtb3J5GBEgASgGEhMKC21lbW9yeV90eXBlGBIgASgNEgwKBGhlYXAYEyABKA0SFQoNb2JqZWN0X2hhbmRsZRgUIAEoBiKFAQoGU291cmNlEhYKElNPVVJDRV9VTlNQRUNJRklFRBAAEhEKDVNPVVJDRV9EUklWRVIQARIRCg1TT1VSQ0VfREVWSUNFEAISGAoUU09VUkNFX0RFVklDRV9NRU1PUlkQAxIRCg1TT1VSQ0VfQlVGRkVSEAQSEAoMU09VUkNFX0lNQUdFEAUidQoJT3BlcmF0aW9uEhIKDk9QX1VOU1BFQ0lGSUVEEAASDQoJT1BfQ1JFQVRFEAESDgoKT1BfREVTVFJPWRACEgsKB09QX0JJTkQQAxIUChBPUF9ERVNUUk9ZX0JPVU5EEAQSEgoOT1BfQU5OT1RBVElPTlMQBSKEAQoPQWxsb2NhdGlvblNjb3BlEhUKEVNDT1BFX1VOU1BFQ0lGSUVEEAASEQoNU0NPUEVfQ09NTUFORBABEhAKDFNDT1BFX09CSkVDVBACEg8KC1NDT1BFX0NBQ0hFEAMSEAoMU0NPUEVfREVWSUNFEAQSEgoOU0NPUEVfSU5TVEFOQ0UQBQ");

/**
 * All the information that cannot be sent within a VulkanMemoryEvent message,
 * are sent as annotations to the main memory event. One example is the
 * properties of the object that consumes the allocated memory, for example, a
 * buffer or an image.
 * key_iid and string_iid are both interned strings. Original string value is
 * stored in vulkan_memory_keys from
 * protos/perfetto/trace/interned_data/interned_data.proto.
 *
 * @generated from message perfetto.protos.VulkanMemoryEventAnnotation
 */
export type VulkanMemoryEventAnnotation = Message<"perfetto.protos.VulkanMemoryEventAnnotation"> & {
  /**
   * @generated from field: optional uint64 key_iid = 1;
   */
  keyIid: bigint;

  /**
   * @generated from oneof perfetto.protos.VulkanMemoryEventAnnotation.value
   */
  value: {
    /**
     * @generated from field: int64 int_value = 2;
     */
    value: bigint;
    case: "intValue";
  } | {
    /**
     * @generated from field: double double_value = 3;
     */
    value: number;
    case: "doubleValue";
  } | {
    /**
     * @generated from field: uint64 string_iid = 4;
     */
    value: bigint;
    case: "stringIid";
  } | { case: undefined; value?: undefined };
};

/**
 * Describes the message perfetto.protos.VulkanMemoryEventAnnotation.
 * Use `create(VulkanMemoryEventAnnotationSchema)` to create a new message.
 */
export const VulkanMemoryEventAnnotationSchema: GenMessage<VulkanMemoryEventAnnotation> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_trace_gpu_vulkan_memory_event, 0);

/**
 * Each VulkanMemoryEvent encompasses information regarding one single function
 * call that results in reserving, binding or freeing host or GPU memory. There
 * is a special message type, ANNOTATIONS, which is used to communicate
 * information that are not directly related to a memory event, nonetheless are
 * essential to understand the memory usage. An example is the size and memory
 * types of the memory heaps.
 *
 * Next reserved id: 10 (up to 15).
 * Next id: 21.
 *
 * @generated from message perfetto.protos.VulkanMemoryEvent
 */
export type VulkanMemoryEvent = Message<"perfetto.protos.VulkanMemoryEvent"> & {
  /**
   * @generated from field: optional perfetto.protos.VulkanMemoryEvent.Source source = 1;
   */
  source: VulkanMemoryEvent_Source;

  /**
   * @generated from field: optional perfetto.protos.VulkanMemoryEvent.Operation operation = 2;
   */
  operation: VulkanMemoryEvent_Operation;

  /**
   * @generated from field: optional int64 timestamp = 3;
   */
  timestamp: bigint;

  /**
   * @generated from field: optional uint32 pid = 4;
   */
  pid: number;

  /**
   * @generated from field: optional fixed64 memory_address = 5;
   */
  memoryAddress: bigint;

  /**
   * @generated from field: optional uint64 memory_size = 6;
   */
  memorySize: bigint;

  /**
   * Interned string. Original string value is stored in function_names from
   * protos/perfetto/trace/interned_data/interned_data.proto.
   *
   * @generated from field: optional uint64 caller_iid = 7;
   */
  callerIid: bigint;

  /**
   * @generated from field: optional perfetto.protos.VulkanMemoryEvent.AllocationScope allocation_scope = 8;
   */
  allocationScope: VulkanMemoryEvent_AllocationScope;

  /**
   * Extra related information, e.g., create configs, etc.
   *
   * @generated from field: repeated perfetto.protos.VulkanMemoryEventAnnotation annotations = 9;
   */
  annotations: VulkanMemoryEventAnnotation[];

  /**
   * Field IDs used for device memory (low sampling rate)
   *
   * @generated from field: optional fixed64 device = 16;
   */
  device: bigint;

  /**
   * @generated from field: optional fixed64 device_memory = 17;
   */
  deviceMemory: bigint;

  /**
   * @generated from field: optional uint32 memory_type = 18;
   */
  memoryType: number;

  /**
   * @generated from field: optional uint32 heap = 19;
   */
  heap: number;

  /**
   * @generated from field: optional fixed64 object_handle = 20;
   */
  objectHandle: bigint;
};

/**
 * Describes the message perfetto.protos.VulkanMemoryEvent.
 * Use `create(VulkanMemoryEventSchema)` to create a new message.
 */
export const VulkanMemoryEventSchema: GenMessage<VulkanMemoryEvent> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_trace_gpu_vulkan_memory_event, 1);

/**
 * @generated from enum perfetto.protos.VulkanMemoryEvent.Source
 */
export enum VulkanMemoryEvent_Source {
  /**
   * @generated from enum value: SOURCE_UNSPECIFIED = 0;
   */
  UNSPECIFIED = 0,

  /**
   * @generated from enum value: SOURCE_DRIVER = 1;
   */
  DRIVER = 1,

  /**
   * @generated from enum value: SOURCE_DEVICE = 2;
   */
  DEVICE = 2,

  /**
   * @generated from enum value: SOURCE_DEVICE_MEMORY = 3;
   */
  DEVICE_MEMORY = 3,

  /**
   * @generated from enum value: SOURCE_BUFFER = 4;
   */
  BUFFER = 4,

  /**
   * @generated from enum value: SOURCE_IMAGE = 5;
   */
  IMAGE = 5,
}

/**
 * Describes the enum perfetto.protos.VulkanMemoryEvent.Source.
 */
export const VulkanMemoryEvent_SourceSchema: GenEnum<VulkanMemoryEvent_Source> = /*@__PURE__*/
  enumDesc(file_protos_perfetto_trace_gpu_vulkan_memory_event, 1, 0);

/**
 * @generated from enum perfetto.protos.VulkanMemoryEvent.Operation
 */
export enum VulkanMemoryEvent_Operation {
  /**
   * @generated from enum value: OP_UNSPECIFIED = 0;
   */
  OP_UNSPECIFIED = 0,

  /**
   * alloc, create
   *
   * @generated from enum value: OP_CREATE = 1;
   */
  OP_CREATE = 1,

  /**
   * free, destroy(non-bound)
   *
   * @generated from enum value: OP_DESTROY = 2;
   */
  OP_DESTROY = 2,

  /**
   * bind buffer and image
   *
   * @generated from enum value: OP_BIND = 3;
   */
  OP_BIND = 3,

  /**
   * destroy (bound)
   *
   * @generated from enum value: OP_DESTROY_BOUND = 4;
   */
  OP_DESTROY_BOUND = 4,

  /**
   * only annotations
   *
   * @generated from enum value: OP_ANNOTATIONS = 5;
   */
  OP_ANNOTATIONS = 5,
}

/**
 * Describes the enum perfetto.protos.VulkanMemoryEvent.Operation.
 */
export const VulkanMemoryEvent_OperationSchema: GenEnum<VulkanMemoryEvent_Operation> = /*@__PURE__*/
  enumDesc(file_protos_perfetto_trace_gpu_vulkan_memory_event, 1, 1);

/**
 * @generated from enum perfetto.protos.VulkanMemoryEvent.AllocationScope
 */
export enum VulkanMemoryEvent_AllocationScope {
  /**
   * @generated from enum value: SCOPE_UNSPECIFIED = 0;
   */
  SCOPE_UNSPECIFIED = 0,

  /**
   * @generated from enum value: SCOPE_COMMAND = 1;
   */
  SCOPE_COMMAND = 1,

  /**
   * @generated from enum value: SCOPE_OBJECT = 2;
   */
  SCOPE_OBJECT = 2,

  /**
   * @generated from enum value: SCOPE_CACHE = 3;
   */
  SCOPE_CACHE = 3,

  /**
   * @generated from enum value: SCOPE_DEVICE = 4;
   */
  SCOPE_DEVICE = 4,

  /**
   * @generated from enum value: SCOPE_INSTANCE = 5;
   */
  SCOPE_INSTANCE = 5,
}

/**
 * Describes the enum perfetto.protos.VulkanMemoryEvent.AllocationScope.
 */
export const VulkanMemoryEvent_AllocationScopeSchema: GenEnum<VulkanMemoryEvent_AllocationScope> = /*@__PURE__*/
  enumDesc(file_protos_perfetto_trace_gpu_vulkan_memory_event, 1, 2);

