Home | History | Annotate | Download | only in i965
      1 /*
      2  * Copyright 2003 VMware, Inc.
      3  * All Rights Reserved.
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sublicense, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice (including the
     14  * next paragraph) shall be included in all copies or substantial portions
     15  * of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     20  * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
     21  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     22  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     23  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     24  */
     25 
     26 #ifndef _INTEL_INIT_H_
     27 #define _INTEL_INIT_H_
     28 
     29 #include <stdbool.h>
     30 #include <sys/time.h>
     31 
     32 #include <GL/internal/dri_interface.h>
     33 
     34 #include "dri_util.h"
     35 #include "intel_bufmgr.h"
     36 #include "common/gen_device_info.h"
     37 #include "i915_drm.h"
     38 #include "xmlconfig.h"
     39 
     40 struct intel_screen
     41 {
     42    int deviceID;
     43    struct gen_device_info devinfo;
     44 
     45    __DRIscreen *driScrnPriv;
     46 
     47    uint64_t max_gtt_map_object_size;
     48 
     49    bool no_hw;
     50 
     51    bool hw_has_swizzling;
     52 
     53    int hw_has_timestamp;
     54 
     55    /**
     56     * Does the kernel support resource streamer?
     57     */
     58    bool has_resource_streamer;
     59 
     60    /**
     61     * Does the kernel support context reset notifications?
     62     */
     63    bool has_context_reset_notification;
     64 
     65    /**
     66     * Does the kernel support features such as pipelined register access to
     67     * specific registers?
     68     */
     69    unsigned kernel_features;
     70 #define KERNEL_ALLOWS_SOL_OFFSET_WRITES             (1<<0)
     71 #define KERNEL_ALLOWS_PREDICATE_WRITES              (1<<1)
     72 #define KERNEL_ALLOWS_MI_MATH_AND_LRR               (1<<2)
     73 #define KERNEL_ALLOWS_HSW_SCRATCH1_AND_ROW_CHICKEN3 (1<<3)
     74 #define KERNEL_ALLOWS_COMPUTE_DISPATCH              (1<<4)
     75 
     76    dri_bufmgr *bufmgr;
     77 
     78    /**
     79     * A unique ID for shader programs.
     80     */
     81    unsigned program_id;
     82 
     83    int winsys_msaa_samples_override;
     84 
     85    struct brw_compiler *compiler;
     86 
     87    /**
     88    * Configuration cache with default values for all contexts
     89    */
     90    driOptionCache optionCache;
     91 
     92    /**
     93     * Version of the command parser reported by the
     94     * I915_PARAM_CMD_PARSER_VERSION parameter
     95     */
     96    int cmd_parser_version;
     97 
     98    /**
     99     * Number of subslices reported by the I915_PARAM_SUBSLICE_TOTAL parameter
    100     */
    101    int subslice_total;
    102 
    103    /**
    104     * Number of EUs reported by the I915_PARAM_EU_TOTAL parameter
    105     */
    106    int eu_total;
    107 };
    108 
    109 extern void intelDestroyContext(__DRIcontext * driContextPriv);
    110 
    111 extern GLboolean intelUnbindContext(__DRIcontext * driContextPriv);
    112 
    113 PUBLIC const __DRIextension **__driDriverGetExtensions_i965(void);
    114 extern const __DRI2fenceExtension intelFenceExtension;
    115 
    116 extern GLboolean
    117 intelMakeCurrent(__DRIcontext * driContextPriv,
    118                  __DRIdrawable * driDrawPriv,
    119                  __DRIdrawable * driReadPriv);
    120 
    121 double get_time(void);
    122 void aub_dump_bmp(struct gl_context *ctx);
    123 
    124 const int*
    125 intel_supported_msaa_modes(const struct intel_screen  *screen);
    126 
    127 static inline bool
    128 can_do_pipelined_register_writes(const struct intel_screen *screen)
    129 {
    130    return screen->kernel_features & KERNEL_ALLOWS_SOL_OFFSET_WRITES;
    131 }
    132 
    133 static inline bool
    134 can_do_hsw_l3_atomics(const struct intel_screen *screen)
    135 {
    136    return screen->kernel_features & KERNEL_ALLOWS_HSW_SCRATCH1_AND_ROW_CHICKEN3;
    137 }
    138 
    139 static inline bool
    140 can_do_mi_math_and_lrr(const struct intel_screen *screen)
    141 {
    142    return screen->kernel_features & KERNEL_ALLOWS_MI_MATH_AND_LRR;
    143 }
    144 
    145 static inline bool
    146 can_do_compute_dispatch(const struct intel_screen *screen)
    147 {
    148    return screen->kernel_features & KERNEL_ALLOWS_COMPUTE_DISPATCH;
    149 }
    150 
    151 static inline bool
    152 can_do_predicate_writes(const struct intel_screen *screen)
    153 {
    154    return screen->kernel_features & KERNEL_ALLOWS_PREDICATE_WRITES;
    155 }
    156 
    157 #endif
    158