| // Copyright 2020 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.sysmem2; |
| |
| // TODO(fxbug.dev/32119): The definitions in this file aren't final and shouldn't yet |
| // be used in any FIDL protocol. |
| |
| // Describes how a client will access the contents of a buffer. |
| table BufferUsage { |
| 1: uint32 none; |
| 2: uint32 cpu; |
| 3: uint32 vulkan; |
| 4: uint32 display; |
| 5: uint32 video; |
| }; |
| |
| // 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 uint32 NONE_USAGE = 1; |
| |
| // Flags for "cpu" usage. |
| // The "often" variants prefer cacheable memory. |
| const uint32 CPU_USAGE_READ = 1; |
| const uint32 CPU_USAGE_READ_OFTEN = 2; |
| const uint32 CPU_USAGE_WRITE = 4; |
| const uint32 CPU_USAGE_WRITE_OFTEN = 8; |
| |
| // Flags for "vulkan" usage. |
| // Based on https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkImageUsageFlagBits.html |
| const uint32 VULKAN_IMAGE_USAGE_TRANSFER_SRC = 0X0001; |
| const uint32 VULKAN_IMAGE_USAGE_TRANSFER_DST = 0X0002; |
| const uint32 VULKAN_IMAGE_USAGE_SAMPLED = 0X0004; |
| const uint32 VULKAN_IMAGE_USAGE_STORAGE = 0X0008; |
| const uint32 VULKAN_IMAGE_USAGE_COLOR_ATTACHMENT = 0X0010; |
| const uint32 VULKAN_IMAGE_USAGE_STENCIL_ATTACHMENT = 0X0020; |
| const uint32 VULKAN_IMAGE_USAGE_TRANSIENT_ATTACHMENT = 0X0040; |
| const uint32 VULKAN_IMAGE_USAGE_INPUT_ATTACHMENT = 0X0080; |
| |
| // Deprecated. Use |VULKAN_IMAGE_USAGE_*| instead. |
| const uint32 VULKAN_USAGE_TRANSFER_SRC = 0x0001; |
| const uint32 VULKAN_USAGE_TRANSFER_DST = 0x0002; |
| const uint32 VULKAN_USAGE_SAMPLED = 0x0004; |
| const uint32 VULKAN_USAGE_STORAGE = 0x0008; |
| const uint32 VULKAN_USAGE_COLOR_ATTACHMENT = 0x0010; |
| const uint32 VULKAN_USAGE_STENCIL_ATTACHMENT = 0x0020; |
| const uint32 VULKAN_USAGE_TRANSIENT_ATTACHMENT = 0x0040; |
| const uint32 VULKAN_USAGE_INPUT_ATTACHMENT = 0x0080; |
| |
| // Vulkan buffer usage flags. |
| // Based on https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferUsageFlagBits.html |
| const uint32 VULKAN_BUFFER_USAGE_TRANSFER_SRC = 0X00010000; |
| const uint32 VULKAN_BUFFER_USAGE_TRANSFER_DST = 0X00020000; |
| const uint32 VULKAN_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER = 0X00040000; |
| const uint32 VULKAN_BUFFER_USAGE_STORAGE_TEXEL_BUFFER = 0X00080000; |
| const uint32 VULKAN_BUFFER_USAGE_UNIFORM_BUFFER = 0X00100000; |
| const uint32 VULKAN_BUFFER_USAGE_STORAGE_BUFFER = 0X00200000; |
| const uint32 VULKAN_BUFFER_USAGE_INDEX_BUFFER = 0X00400000; |
| const uint32 VULKAN_BUFFER_USAGE_VERTEX_BUFFER = 0X00800000; |
| const uint32 VULKAN_BUFFER_USAGE_INDIRECT_BUFFER = 0X01000000; |
| |
| // Flags for "display" usage. |
| const uint32 DISPLAY_USAGE_LAYER = 1; |
| const uint32 DISPLAY_USAGE_CURSOR = 2; |
| |
| // Flags for "video" usage. |
| // TODO(fxbug.dev/32118): Add more specific HwDecoder flags if needed. |
| const uint32 VIDEO_USAGE_HW_DECODER = 1; |
| const uint32 VIDEO_USAGE_HW_ENCODER = 2; |
| // TODO(fxbug.dev/34192): This bit is redundant with secure_required and supported heaps. This bit will |
| // not be carried forward. |
| const uint32 VIDEO_USAGE_HW_PROTECTED = 4; |
| const uint32 VIDEO_USAGE_CAPTURE = 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 uint32 VIDEO_USAGE_DECRYPTOR_OUTPUT = 16; |
| // This usage is for a HW video decoder's internal buffers that aren't shared with other |
| // particpants. These are allocated via sysmem becuase sysmem pre-reserves contiguous SYSTEM_RAM |
| // as appropriate, and is the only way to allocate secure memory. |
| const uint32 VIDEO_USAGE_HW_DECODER_INTERNAL = 32; |