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