// 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;

struct FormatModifier {
    /// The upper 8 bits are a vendor code as allocated in FormatModifierVendor
    /// enum.  The lower 56 bits are vendor-defined.
    ///
    /// This field and the values that go in this field are defined this way for
    /// compatibility reasons.
    uint64 value;
};

const uint64 FORMAT_MODIFIER_NONE = 0x0000000000000000;

const uint64 FORMAT_MODIFIER_VENDOR_NONE = 0x0000000000000000;
const uint64 FORMAT_MODIFIER_VENDOR_INTEL = 0x0100000000000000;
const uint64 FORMAT_MODIFIER_VENDOR_AMD = 0x0200000000000000;
const uint64 FORMAT_MODIFIER_VENDOR_NVIDIA = 0x0300000000000000;
const uint64 FORMAT_MODIFIER_VENDOR_SAMSUNG = 0x0400000000000000;
const uint64 FORMAT_MODIFIER_VENDOR_QCOM = 0x0500000000000000;
const uint64 FORMAT_MODIFIER_VENDOR_VIVANTE = 0x0600000000000000;
const uint64 FORMAT_MODIFIER_VENDOR_BROADCOM = 0x0700000000000000;
const uint64 FORMAT_MODIFIER_VENDOR_ARM = 0x0800000000000000;

const uint64 FORMAT_MODIFIER_VALUE_RESERVED = 0x00FFFFFFFFFFFFFF;

const uint64 FORMAT_MODIFIER_INVALID = FORMAT_MODIFIER_VALUE_RESERVED;

const uint64 FORMAT_MODIFIER_LINEAR = 0x0000000000000000;

//
// Fill in (compatible) values below as needed.
//

// Intel format modifier values
const uint64 FORMAT_MODIFIER_INTEL_I915_X_TILED = 0x0100000000000001;
const uint64 FORMAT_MODIFIER_INTEL_I915_Y_TILED = 0x0100000000000002;
const uint64 FORMAT_MODIFIER_INTEL_I915_YF_TILED = 0x0100000000000003;

// AMD format modifier values

// NVIDIA format modifier values

// SAMSUNG format modifier values

// QCOM format modifier values

// VIVANTE format modifier values

// BROADCOM format modifier values

// ARM format modifier values

// bit 0x10 is for using the YUV transform.
const uint64 FORMAT_MODIFIER_ARM_YUV_BIT = 0x10;
// bit 0x20 is for split-block formats.
const uint64 FORMAT_MODIFIER_ARM_SPLIT_BLOCK_BIT = 0x20;
// bit 0x40 is for sparse formats.
const uint64 FORMAT_MODIFIER_ARM_SPARSE_BIT = 0x40;
// bit 0x800 is for variants with buffer content hints.
const uint64 FORMAT_MODIFIER_ARM_BCH_BIT = 0x800;
// bit 0x1000 is for variants with a transaction elimination buffer allocated.
const uint64 FORMAT_MODIFIER_ARM_TE_BIT = 0x1000;
// Not all values are equally useful, so we only have format modifiers for some particularly interesting ones.

// To make the variants with bits set more consistent 0x0800000000000000 is reserved for linear.
const uint64 FORMAT_MODIFIER_ARM_AFBC_16X16 = 0x0800000000000001;
const uint64 FORMAT_MODIFIER_ARM_AFBC_32X8 = 0x0800000000000002;
// Variations with transaction elimination support 0x1000 should be set for these formats.
const uint64 FORMAT_MODIFIER_ARM_LINEAR_TE = 0x0800000000001000;
const uint64 FORMAT_MODIFIER_ARM_AFBC_16X16_TE = 0x0800000000001001;
const uint64 FORMAT_MODIFIER_ARM_AFBC_32X8_TE = 0x0800000000001002;

const uint64 FORMAT_MODIFIER_ARM_AFBC_16X16_SPLIT_BLOCK_SPARSE_YUV = 0x0800000000000071;
const uint64 FORMAT_MODIFIER_ARM_AFBC_16X16_SPLIT_BLOCK_SPARSE_YUV_TE = 0x0800000000001071;
