1// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5library fuchsia.sysmem;
6
7// Describes how a client will access the contents of a buffer.
8// TODO(ZX-2260): change struct to table
9struct BufferUsage {
10    uint32 cpu;
11    uint32 vulkan;
12    uint32 display;
13    uint32 video;
14};
15
16// Flags for "cpu" usage.
17// The "often" variants prefer cacheable memory.
18const uint32 cpuUsageRead = 1;
19const uint32 cpuUsageReadOften = 2;
20const uint32 cpuUsageWrite = 4;
21const uint32 cpuUsageWriteOften = 8;
22
23// Flags for "vulkan" usage.
24// Based on https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkImageUsageFlagBits.html
25const uint32 vulkanUsageTransferSrc = 0x0001;
26const uint32 vulkanUsageTransferDst = 0x0002;
27const uint32 vulkanUsageSampled = 0x0004;
28const uint32 vulkanUsageStorage = 0x0008;
29const uint32 vulkanUsageColorAttachment = 0x0010;
30const uint32 vulkanUsageStencilAttachment = 0x0020;
31const uint32 vulkanUsageTransientAttachment = 0x0040;
32const uint32 vulkanUsageInputAttachment = 0x0080;
33
34// Flags for "display" usage.
35const uint32 displayUsageLayer = 1;
36const uint32 displayUsageCursor = 2;
37
38// Flags for "video" usage.
39// TODO(ZX-2259): Add more specific HwDecoder flags if needed.
40const uint32 videoUsageHwDecoder = 1;
41const uint32 videoUsageHwEncoder = 2;
42const uint32 videoUsageHwProtected = 4;
43