// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef GPU_COMMAND_BUFFER_COMMON_CONSTANTS_H_
#define GPU_COMMAND_BUFFER_COMMON_CONSTANTS_H_

#include <stddef.h>
#include <stdint.h>

#include "build/build_config.h"

namespace gpu {

typedef int32_t CommandBufferOffset;
const CommandBufferOffset kInvalidCommandBufferOffset = -1;

namespace error {
  enum Error {
    kNoError,
    kInvalidSize,
    kOutOfBounds,
    kUnknownCommand,
    kInvalidArguments,
    kLostContext,
    kGenericError,
    kDeferCommandUntilLater,
    kDeferLaterCommands,
    kErrorLast = kDeferLaterCommands,
  };

  // Return true if the given error code is an actual error.
  inline bool IsError(Error error) {
    return error != kNoError && error != kDeferCommandUntilLater &&
           error != kDeferLaterCommands;
  }

  // Provides finer grained information about why the context was lost.
  enum ContextLostReason {
    // This context definitely provoked the loss of context.
    kGuilty,

    // This context definitely did not provoke the loss of context.
    kInnocent,

    // It is unknown whether this context provoked the loss of context.
    kUnknown,

    // GL_OUT_OF_MEMORY caused this context to be lost.
    kOutOfMemory,

    // A failure to make the context current caused it to be lost.
    kMakeCurrentFailed,

    // The GPU channel was lost. This error is set client-side.
    kGpuChannelLost,

    // The GPU process sent an invalid message/reply. This error is set
    // client-side.
    kInvalidGpuMessage,

    kContextLostReasonLast = kInvalidGpuMessage
  };
}

// Invalid shared memory Id, returned by RegisterSharedMemory in case of
// failure.
const int32_t kInvalidSharedMemoryId = -1;

// Common Command Buffer shared memory transfer buffer ID.
const int32_t kCommandBufferSharedMemoryId = 4;

// Namespace used to separate various command buffer types.
//
// These values are logged to UMA. Entries should not be renumbered and
// numeric values should never be reused. Please keep in sync with
// CommandBufferNamespace in tools/metrics/histograms/metadata/gpu/enums.xml
enum CommandBufferNamespace : int8_t {
  INVALID = -1,

  GPU_IO = 0,
  IN_PROCESS = 1,
  VIZ_SKIA_OUTPUT_SURFACE = 2,
  VIZ_SKIA_OUTPUT_SURFACE_NON_DDL = 3,
  GPU_CHANNEL_SHARED_IMAGE_INTERFACE = 4,
  WEBNN_CONTEXT_INTERFACE = 5,

  NUM_COMMAND_BUFFER_NAMESPACES
};

enum class TransferBufferAllocationOption : int8_t {
  kLoseContextOnOOM,
  kReturnNullOnOOM,
};

#if BUILDFLAG(IS_WIN)
// Value used for DXGI keyed mutex AcquireSync and ReleaseSync. Exposed here so
// that external clients such as media and video capture can use the same key as
// gpu which is essential for correct operation of the keyed mutex.
constexpr uint64_t kDXGIKeyedMutexAcquireKey = 0;
#endif  // BUILDFLAG(IS_WIN)

}  // namespace gpu

#endif  // GPU_COMMAND_BUFFER_COMMON_CONSTANTS_H_
