// Copyright 2019 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.

#ifndef ZIRCON_SYSTEM_DEV_SYSMEM_SYSMEM_USAGE_PIXEL_FORMAT_COST_H_
#define ZIRCON_SYSTEM_DEV_SYSMEM_SYSMEM_USAGE_PIXEL_FORMAT_COST_H_

#include <fuchsia/sysmem/c/fidl.h>

#include <cstdint>

// This class effectively breaks ties in a platform-specific way among the list
// of PixelFormat(s) that a set of participants are all able to support.
//
// At first, the list of PixelFormat(s) that all participants are able to
// support is likely to be a short list.  But even if that list is only 2
// entries long, we'll typically want to prefer a particular choice depending
// on considerations like max throughput, power usage, efficiency
// considerations, etc.
//
// For now, the overrides are baked into sysmem based on the platform ID (AKA
// PID), in usage_overrides_*.cpp.
//
// Any override will take precidence over the default PixelFormat sort order.
class UsagePixelFormatCost {
 public:
  // Compare the cost of two pixel formats, returning -1 if the first format
  // is lower cost, 0 if they're equal cost or unknown, and 1 if the first
  // format is higher cost.
  //
  // Passing in pdev_device_info_vid and pdev_device_info_pid allows the
  // implementation to depend on the platform bus driver device VID and PID.
  //
  // By passing in the BufferCollectionConstraints, the implementation can
  // consider other aspects of constraints in addition to the usage.
  static int32_t Compare(uint32_t pdev_device_info_vid, uint32_t pdev_device_info_pid,
                         const fuchsia_sysmem_BufferCollectionConstraints* constraints,
                         uint32_t image_format_constraints_index_a,
                         uint32_t image_format_constraints_index_b);

 private:
  // For now the implementation is via a static table.
};

#endif  // ZIRCON_SYSTEM_DEV_SYSMEM_SYSMEM_USAGE_PIXEL_FORMAT_COST_H_
