Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2009, VMware, Inc.
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  21.  * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
  22.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  23.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  24.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27. /*
  28.  * Author: Keith Whitwell <keithw@vmware.com>
  29.  * Author: Jakob Bornecrantz <wallbraker@gmail.com>
  30.  */
  31.  
  32. #ifndef DRI_SCREEN_H
  33. #define DRI_SCREEN_H
  34.  
  35. #include "dri_util.h"
  36. #include "xmlconfig.h"
  37.  
  38. #include "pipe/p_compiler.h"
  39. #include "pipe/p_context.h"
  40. #include "pipe/p_state.h"
  41. #include "state_tracker/st_api.h"
  42. #include "state_tracker/opencl_interop.h"
  43. #include "os/os_thread.h"
  44. #include "postprocess/filters.h"
  45.  
  46. struct dri_context;
  47. struct dri_drawable;
  48. struct pipe_loader_device;
  49.  
  50. struct dri_screen
  51. {
  52.    /* st_api */
  53.    struct st_manager base;
  54.    struct st_api *st_api;
  55.  
  56.    /* on old libGL's invalidate doesn't get called as it should */
  57.    boolean broken_invalidate;
  58.  
  59.    /* dri */
  60.    __DRIscreen *sPriv;
  61.    boolean throttling_enabled;
  62.    int default_throttle_frames;
  63.  
  64.    /** Configuration cache with default values for all contexts */
  65.    driOptionCache optionCacheDefaults;
  66.  
  67.    /** The screen's effective configuration options */
  68.    driOptionCache optionCache;
  69.  
  70.    struct st_config_options options;
  71.  
  72.    /* Which postprocessing filters are enabled. */
  73.    unsigned pp_enabled[PP_FILTERS];
  74.  
  75.    /* drm */
  76.    int fd;
  77.    boolean can_share_buffer;
  78.  
  79.    struct pipe_loader_device *dev;
  80.  
  81.    /* gallium */
  82.    boolean d_depth_bits_last;
  83.    boolean sd_depth_bits_last;
  84.    boolean auto_fake_front;
  85.    boolean has_reset_status_query;
  86.    enum pipe_texture_target target;
  87.  
  88.    /* hooks filled in by dri2 & drisw */
  89.    __DRIimage * (*lookup_egl_image)(struct dri_screen *ctx, void *handle);
  90.  
  91.    /* OpenCL interop */
  92.    pipe_mutex opencl_func_mutex;
  93.    opencl_dri_event_add_ref_t opencl_dri_event_add_ref;
  94.    opencl_dri_event_release_t opencl_dri_event_release;
  95.    opencl_dri_event_wait_t opencl_dri_event_wait;
  96.    opencl_dri_event_get_fence_t opencl_dri_event_get_fence;
  97. };
  98.  
  99. /** cast wrapper */
  100. static INLINE struct dri_screen *
  101. dri_screen(__DRIscreen * sPriv)
  102. {
  103.    return (struct dri_screen *)sPriv->driverPrivate;
  104. }
  105.  
  106. struct __DRIimageRec {
  107.    struct pipe_resource *texture;
  108.    unsigned level;
  109.    unsigned layer;
  110.    uint32_t dri_format;
  111.    uint32_t dri_components;
  112.  
  113.    void *loader_private;
  114.  
  115.    /**
  116.     * Provided by EGL_EXT_image_dma_buf_import.
  117.     */
  118.    enum __DRIYUVColorSpace yuv_color_space;
  119.    enum __DRISampleRange sample_range;
  120.    enum __DRIChromaSiting horizontal_siting;
  121.    enum __DRIChromaSiting vertical_siting;
  122.  
  123. };
  124.  
  125. #ifndef __NOT_HAVE_DRM_H
  126.  
  127. static INLINE boolean
  128. dri_with_format(__DRIscreen * sPriv)
  129. {
  130.    const __DRIdri2LoaderExtension *loader = sPriv->dri2.loader;
  131.  
  132.    return loader
  133.        && (loader->base.version >= 3)
  134.        && (loader->getBuffersWithFormat != NULL);
  135. }
  136.  
  137. #else
  138.  
  139. static INLINE boolean
  140. dri_with_format(__DRIscreen * sPriv)
  141. {
  142.    return TRUE;
  143. }
  144.  
  145. #endif
  146.  
  147. void
  148. dri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen,
  149.                    const struct gl_config *mode);
  150.  
  151. const __DRIconfig **
  152. dri_init_screen_helper(struct dri_screen *screen,
  153.                        struct pipe_screen *pscreen,
  154.                        const char* driver_name);
  155.  
  156. void
  157. dri_destroy_screen_helper(struct dri_screen * screen);
  158.  
  159. void
  160. dri_destroy_screen(__DRIscreen * sPriv);
  161.  
  162. extern struct pipe_screen *kms_swrast_create_screen(int fd);
  163. extern const struct __DriverAPIRec dri_kms_driver_api;
  164.  
  165. extern const struct __DriverAPIRec galliumdrm_driver_api;
  166. extern const __DRIextension *galliumdrm_driver_extensions[];
  167. extern const struct __DriverAPIRec galliumsw_driver_api;
  168. extern const __DRIextension *galliumsw_driver_extensions[];
  169. extern const __DRIconfigOptionsExtension gallium_config_options;
  170.  
  171. #endif
  172.  
  173. /* vim: set sw=3 ts=8 sts=3 expandtab: */
  174.