15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Mesa 3-D graphics library
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Version:  7.8
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2009-2010 Chia-I Wu <olv@0xlab.org>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission is hereby granted, free of charge, to any person obtaining a
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * copy of this software and associated documentation files (the "Software"),
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to deal in the Software without restriction, including without limitation
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the rights to use, copy, modify, merge, publish, distribute, sublicense,
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * and/or sell copies of the Software, and to permit persons to whom the
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * Software is furnished to do so, subject to the following conditions:
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The above copyright notice and this permission notice shall be included
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in all copies or substantial portions of the Software.
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DEALINGS IN THE SOFTWARE.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _NATIVE_MODESET_H_
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _NATIVE_MODESET_H_
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "pipe/p_compiler.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct native_display;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct native_surface;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct native_config;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct native_connector {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   int dummy;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct native_mode {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   const char *desc;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   int width, height;
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)   int refresh_rate; /* HZ * 1000 */
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/**
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * Mode setting interface of the native display.  It exposes the mode setting
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * capabilities of the underlying graphics hardware.
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) */
4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)struct native_display_modeset {
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)   /**
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    * Get the available physical connectors and the number of CRTCs.
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    */
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)   const struct native_connector **(*get_connectors)(struct native_display *ndpy,
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                                     int *num_connectors,
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                                     int *num_crtcs);
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)   /**
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    * Get the current supported modes of a connector.  The returned modes may
59    * change every time this function is called and those from previous calls
60    * might become invalid.
61    */
62   const struct native_mode **(*get_modes)(struct native_display *ndpy,
63                                           const struct native_connector *nconn,
64                                           int *num_modes);
65
66   /**
67    * Create a scan-out surface.  Required unless no config has scanout_bit
68    * set.
69    */
70   struct native_surface *(*create_scanout_surface)(struct native_display *ndpy,
71                                                    const struct native_config *nconf,
72                                                    uint width, uint height);
73
74   /**
75    * Program the CRTC to output the surface to the given connectors with the
76    * given mode.  When surface is not given, the CRTC is disabled.
77    *
78    * This interface does not export a way to query capabilities of the CRTCs.
79    * The native display usually needs to dynamically map the index to a CRTC
80    * that supports the given connectors.
81    */
82   boolean (*program)(struct native_display *ndpy, int crtc_idx,
83                      struct native_surface *nsurf, uint x, uint y,
84                      const struct native_connector **nconns, int num_nconns,
85                      const struct native_mode *nmode);
86};
87
88#endif /* _NATIVE_MODESET_H_ */
89