| // 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(ZX-2260): change struct to table |
| struct BufferUsage { |
| uint32 none; |
| uint32 cpu; |
| uint32 vulkan; |
| uint32 display; |
| 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 noneUsage = 1; |
| |
| // Flags for "cpu" usage. |
| // The "often" variants prefer cacheable memory. |
| const uint32 cpuUsageRead = 1; |
| const uint32 cpuUsageReadOften = 2; |
| const uint32 cpuUsageWrite = 4; |
| const uint32 cpuUsageWriteOften = 8; |
| |
| // Flags for "vulkan" usage. |
| // Based on https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkImageUsageFlagBits.html |
| const uint32 vulkanUsageTransferSrc = 0x0001; |
| const uint32 vulkanUsageTransferDst = 0x0002; |
| const uint32 vulkanUsageSampled = 0x0004; |
| const uint32 vulkanUsageStorage = 0x0008; |
| const uint32 vulkanUsageColorAttachment = 0x0010; |
| const uint32 vulkanUsageStencilAttachment = 0x0020; |
| const uint32 vulkanUsageTransientAttachment = 0x0040; |
| const uint32 vulkanUsageInputAttachment = 0x0080; |
| |
| // Flags for "display" usage. |
| const uint32 displayUsageLayer = 1; |
| const uint32 displayUsageCursor = 2; |
| |
| // Flags for "video" usage. |
| // TODO(ZX-2259): Add more specific HwDecoder flags if needed. |
| const uint32 videoUsageHwDecoder = 1; |
| const uint32 videoUsageHwEncoder = 2; |
| // TODO(34192): This bit is redundant with secure_required and supported heaps. This bit will |
| // not be carried forward. |
| const uint32 videoUsageHwProtected = 4; |
| const uint32 videoUsageCapture = 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(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 videoUsageDecryptorOutput = 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 videoUsageHwDecoderInternal = 32; |