/*
 * Copyright 2019 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		Adam Fowler, adamfowleruk@gmail.com
 *
 * Corresponds to:
 *		headers/os/add-ins/graphics/Accelerant.h	rev 53658
 */


/*!
	\file Accelerant.h
	\ingroup graphics
	\ingroup libbe
	\brief Defines the structures used by an Accelerant (and \c BScreen).
*/

/*!
	\name Display mode structs and constants
*/

//! @{

/*!
	\enum display_timing_flags
	\ingroup graphics
	\brief Constants for \c display_timing::flags

	\since BeOS R5
*/

/*!
	\var display_timing_flags B_BLANK_PEDESTAL

	Specifies the blank pedestal flag.

	\since BeOS R5
*/

/*!
	\var display_timing_flags B_TIMING_INTERLACED

	Interlaced mode enabled.

	\since BeOS R5
*/

/*!
	\var display_timing_flags B_POSITIVE_HSYNC

	Specifies a positive horizontal sync polarity.

	\since BeOS R5
*/

/*!
	\var display_timing_flags B_POSITIVE_VSYNC

	Specifies a positive vertical sync polarity.

	\since BeOS R5
*/

/*!
	\var display_timing_flags B_SYNC_ON_GREEN

	Specifies that sync on green is used (sometimes called SOG or RGsB)

	\since BeOS R5
*/


/*!
	\struct display_timing
	\brief Provides timing information about a display mode
			supported by a graphics card.

	This provides information about the display resolution as well as the
	video timings, allowing to compute the refresh rate in a precise way.

	The timings are specified in term of horizontal and vertical pixels.

	The "display" area corresponds to what's actually visible. But there is
	some extra delay between two consecutive lines or two consecutive frames,
	which is taked into account by the "total" values. In that area, there is
	also the display sycnhronization signals, which start and end at specific
	pixel numbers as well.
*/

/*!
	\var uint32 display_timing::pixel_clock

	Pixel clock in kHz.

	The pixel clock is the frequency at which the display hardware moves from
	one pixel to the next.

	\since BeOS R5
*/

/*!
	\var uint16 display_timing::h_display

	Horizontal display width in pixels.

	\since BeOS R5
*/

/*!
	\var uint16 display_timing::h_sync_start

	Horizontal sync start in pixels.

	\since BeOS R5
*/

/*!
	\var uint display_timing::h_sync_end

	Horizontal sync end in pixels.

	\since BeOS R5
*/

/*!
	\var uint16 display_timing::h_total

	Horizontal total in pixels.

	\since BeOS R5
*/

/*!
	\var uint16 display_timing::v_display

	Vertical display height in pixels.

	\since BeOS R5
*/

/*!
	\var uint16 display:timing::v_sync_start

	Vertical sync start line.

	\since BeOS R5
*/

/*!
	\var uint16 display_timing::v_sync_end

	Vertical sync end line.

	\since BeOS R5
*/

/*!
	\var uint16 display_timing::v_total

	Total number of vertical lines.

	\since BeOS R5
*/

/*!
	\var uint21 display_timing::flags

	Timing flags, for sync polarity, interlaced, double scan etc.

	\since BeOS R5
*/


/*!
	\enum  display_mode_flags
	\ingroup graphics
	\brief Constants for \c display_mode:flags

	\since BeOS R5
*/

/*!
	\var display_mode_flags B_SCROLL

	Specifies scroll supported. Set when the display uses a virtual screen.

	\since BeOS R5
*/

/*!
	\var display_mode_flags B_8_BIT_DAC

	Specifies that the DAC is in 8-bit mode.

	\since BeOS R5
*/

/*!
	\var display_mode_flags B_HARDWARE_CURSOR

	Specifies that a hardware cursor is supported.

	\since BeOS R5
*/

/*!
	\var display_mode_flags B_PARALLEL_ACCESS

	Specifies that parallel access to the framebuffer is allowed.

	\since BeOS R5
*/

/*!
	\var display_mode_flags B_DPMS

	Specifies that the Display Power Management System is supported. The screen
	can be shut down when the computer is idle to save power.

	\since beOS R5
*/

/*!
	\var display_mode_flags B_IO_FB_NA

	Indicates that the video framebuffer is not directly mapped into memory.
	The driver will handle sending the data to the video card, and applications
	should not try to write directly to the buffer.

	This is used only in legacy modes and hardware where a linear framebuffer
	isn't available.

	\since BeOS R5
*/


/*!
	\struct	display_mode
	\brief Provides information about a display mode supported
			by a graphics card.

	The display resolution may be set larger than the actual display resolution.
	In which case, not all pixels are visible at the same time, and scrolling
	can be used to move around the larger virtual space. This is indicated
	by the B_SCROLL flag.

	When the virtual and physical resolutions match, B_SCROLL is not set, and
	both display_start settings must be set to 0.
*/

/*!
	\var display_timing display_mode::timing

	The display timing of this mode.

	\since BeOS R5
*/

/*!
	\var uint32 display_mode::space

	Color space to use (usually B_CMAP8, B_RGB16, or B_RGB32, but other modes
	are possible depending on the hardware)

	\since BeOS R5
*/

/*!
	\var uint16 display_mode::virtual_width

	Width of this mode in pixels.

	\since BeOS R5
*/

/*!
	\var uint16 display_mode::virtual_height

	Height of this mode in pixels.

	\since BeOS R5
*/

/*!
	\var uint16 display_mode::h_display_start

	The left position to start displaying from, used for scrolling
	in the virtual space.

	\since BeOS R5
*/

/*!
	\var uint16 display_mode::v_display_start

	The top position to start displaying from, used for scrolling in the virtual
	space.

	\since BeOS R5
*/

/*!
	\var uint32 display_mode::flags

	\brief The flags of this mode.

	Currently no public flags are defined at this level.
	Some drivers use this for dual head related options.
	Reserved for future use.

	\since BeOS R5
*/

// @}
