// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.sysmem;

// Describes how a client will access the contents of a buffer.
// TODO(fxbug.dev/32119): change struct to table
@for_deprecated_c_bindings
type BufferUsage = struct {
    none uint32;
    cpu uint32;
    vulkan uint32;
    display uint32;
    video uint32;
};

// TODO(fxbug.dev/55935): Consts should use upper snake case per FIDL style guide.
// We should reformat the naming of consts in this FIDL file.

// Flag for "none" usage.
//
// This bit indicates that there is no direct usage from the participant, and
// that the participant hasn't forgotten to set usage.
const noneUsage uint32 = 1;

// Flags for "cpu" usage.
// The "often" variants prefer cacheable memory.
const cpuUsageRead uint32 = 1;
const cpuUsageReadOften uint32 = 2;
const cpuUsageWrite uint32 = 4;
const cpuUsageWriteOften uint32 = 8;

// Flags for "vulkan" usage.

// Vulkan image usage flags.
// Based on https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkImageUsageFlagBits.html
const VULKAN_IMAGE_USAGE_TRANSFER_SRC uint32 = 0X0001;
const VULKAN_IMAGE_USAGE_TRANSFER_DST uint32 = 0X0002;
const VULKAN_IMAGE_USAGE_SAMPLED uint32 = 0X0004;
const VULKAN_IMAGE_USAGE_STORAGE uint32 = 0X0008;
const VULKAN_IMAGE_USAGE_COLOR_ATTACHMENT uint32 = 0X0010;
const VULKAN_IMAGE_USAGE_STENCIL_ATTACHMENT uint32 = 0X0020;
const VULKAN_IMAGE_USAGE_TRANSIENT_ATTACHMENT uint32 = 0X0040;
const VULKAN_IMAGE_USAGE_INPUT_ATTACHMENT uint32 = 0X0080;

// Deprecated. Use |VULKAN_IMAGE_USAGE_*| instead.
const vulkanUsageTransferSrc uint32 = 0x0001;
const vulkanUsageTransferDst uint32 = 0x0002;
const vulkanUsageSampled uint32 = 0x0004;
const vulkanUsageStorage uint32 = 0x0008;
const vulkanUsageColorAttachment uint32 = 0x0010;
const vulkanUsageStencilAttachment uint32 = 0x0020;
const vulkanUsageTransientAttachment uint32 = 0x0040;
const vulkanUsageInputAttachment uint32 = 0x0080;

// Vulkan buffer usage flags.
// Based on https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferUsageFlagBits.html
const VULKAN_BUFFER_USAGE_TRANSFER_SRC uint32 = 0X00010000;
const VULKAN_BUFFER_USAGE_TRANSFER_DST uint32 = 0X00020000;
const VULKAN_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER uint32 = 0X00040000;
const VULKAN_BUFFER_USAGE_STORAGE_TEXEL_BUFFER uint32 = 0X00080000;
const VULKAN_BUFFER_USAGE_UNIFORM_BUFFER uint32 = 0X00100000;
const VULKAN_BUFFER_USAGE_STORAGE_BUFFER uint32 = 0X00200000;
const VULKAN_BUFFER_USAGE_INDEX_BUFFER uint32 = 0X00400000;
const VULKAN_BUFFER_USAGE_VERTEX_BUFFER uint32 = 0X00800000;
const VULKAN_BUFFER_USAGE_INDIRECT_BUFFER uint32 = 0X01000000;

// Flags for "display" usage.
const displayUsageLayer uint32 = 1;
const displayUsageCursor uint32 = 2;

// Flags for "video" usage.
// TODO(fxbug.dev/32118): Add more specific HwDecoder flags if needed.
const videoUsageHwDecoder uint32 = 1;
const videoUsageHwEncoder uint32 = 2;
// TODO(fxbug.dev/34192): This bit is redundant with secure_required and supported heaps.  This bit will
// not be carried forward.
const videoUsageHwProtected uint32 = 4;
const videoUsageCapture uint32 = 8;
// videoUsageDecryptorOutput is for the output of a decryptor; such buffers will contain decrypted
// encoded access units.  The decryptor output may be in secure memory (controlled separately via
// secure_required).
//
// TODO(fxbug.dev/34192): Overhaul usage so we can add usage categories without breaking client struct init
// code repeatedly.  For now, this value is in the "video" category but to some degree isn't really
// video; this usage can be used for the output of any secure decryptor.  Also, other usages should
// include input vs. output as those are separate buffer collections and are really separate usages.
//
// We have this as a separate usage because each participant that needs VMO handles needs to specify
// a usage that isn't nonUsage, and the decryptor output participant shouldn't be specifying
// videoUsageHwDecoder because the decryptor isn't the decoder.
const videoUsageDecryptorOutput uint32 = 16;
// This usage is for a HW video decoder's internal buffers that aren't shared with other
// particpants.  These are allocated via sysmem because sysmem pre-reserves contiguous SYSTEM_RAM
// as appropriate, and is the only way to allocate secure memory.
const videoUsageHwDecoderInternal uint32 = 32;
