| // Copyright 2023 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 SRC_GRAPHICS_DISPLAY_LIB_API_TYPES_CPP_DRIVER_BUFFER_ID_H_ |
| #define SRC_GRAPHICS_DISPLAY_LIB_API_TYPES_CPP_DRIVER_BUFFER_ID_H_ |
| |
| #include <fidl/fuchsia.hardware.display.engine/cpp/wire.h> |
| #include <zircon/assert.h> |
| |
| #include <cstdint> |
| #include <limits> |
| |
| #include "src/graphics/display/lib/api-types-cpp/driver-buffer-collection-id.h" |
| |
| namespace display { |
| |
| // Equivalent to the FIDL type [`fuchsia.hardware.display.engine/BufferId`]. |
| // |
| // See `::fuchsia_hardware_display_engine::wire::BufferId` for references. |
| // |
| // See `BufferId` for the type used at the interface between the display |
| // coordinator and clients such as Scenic. |
| struct DriverBufferId { |
| DriverBufferCollectionId buffer_collection_id; |
| uint32_t buffer_index; |
| }; |
| |
| constexpr DriverBufferId ToDriverBufferId( |
| const fuchsia_hardware_display_engine::wire::BufferId fidl_buffer_id) { |
| ZX_DEBUG_ASSERT(fidl_buffer_id.buffer_index >= 0); |
| ZX_DEBUG_ASSERT(fidl_buffer_id.buffer_index <= std::numeric_limits<uint32_t>::max()); |
| return DriverBufferId{ |
| .buffer_collection_id = ToDriverBufferCollectionId(fidl_buffer_id.buffer_collection_id), |
| .buffer_index = fidl_buffer_id.buffer_index, |
| }; |
| } |
| |
| constexpr fuchsia_hardware_display_engine::wire::BufferId ToFidlDriverBufferId( |
| DriverBufferId driver_buffer_id) { |
| ZX_DEBUG_ASSERT(driver_buffer_id.buffer_index >= 0); |
| ZX_DEBUG_ASSERT(driver_buffer_id.buffer_index <= std::numeric_limits<uint32_t>::max()); |
| return { |
| .buffer_collection_id = ToFidlDriverBufferCollectionId(driver_buffer_id.buffer_collection_id), |
| .buffer_index = driver_buffer_id.buffer_index, |
| }; |
| } |
| |
| } // namespace display |
| |
| #endif // SRC_GRAPHICS_DISPLAY_LIB_API_TYPES_CPP_DRIVER_BUFFER_ID_H_ |