Merge remote-tracking branch 'mesa-public/master' into vulkan
[mesa.git] / src / mesa / drivers / dri / i965 / brw_device_info.h
1 /*
2 * Copyright © 2013 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 *
23 */
24
25 #pragma once
26 #include <stdbool.h>
27
28 struct brw_device_info
29 {
30 int gen; /**< Generation number: 4, 5, 6, 7, ... */
31 int gt;
32
33 bool is_g4x;
34 bool is_ivybridge;
35 bool is_baytrail;
36 bool is_haswell;
37 bool is_cherryview;
38 bool is_broxton;
39
40 bool has_hiz_and_separate_stencil;
41 bool must_use_separate_stencil;
42
43 bool has_llc;
44
45 bool has_pln;
46 bool has_compr4;
47 bool has_surface_tile_offset;
48 bool supports_simd16_3src;
49 bool has_resource_streamer;
50
51 /**
52 * Quirks:
53 * @{
54 */
55 bool has_negative_rhw_bug;
56
57 /**
58 * Some versions of Gen hardware don't do centroid interpolation correctly
59 * on unlit pixels, causing incorrect values for derivatives near triangle
60 * edges. Enabling this flag causes the fragment shader to use
61 * non-centroid interpolation for unlit pixels, at the expense of two extra
62 * fragment shader instructions.
63 */
64 bool needs_unlit_centroid_workaround;
65 /** @} */
66
67 /**
68 * GPU Limits:
69 * @{
70 */
71 /**
72 * Total number of slices present on the device whether or not they've been
73 * fused off.
74 */
75 unsigned num_slices;
76 unsigned max_vs_threads;
77 unsigned max_hs_threads;
78 unsigned max_ds_threads;
79 unsigned max_gs_threads;
80 unsigned max_wm_threads;
81 unsigned max_cs_threads;
82
83 struct {
84 /**
85 * Hardware default URB size. The units this is expressed in are
86 * somewhat inconsistent: 512b units on Gen4-5, KB on Gen6-7, and KB
87 * times the slice count on Gen8+.
88 */
89 unsigned size;
90 unsigned min_vs_entries;
91 unsigned max_vs_entries;
92 unsigned max_hs_entries;
93 unsigned min_ds_entries;
94 unsigned max_ds_entries;
95 unsigned max_gs_entries;
96 } urb;
97 /** @} */
98 };
99
100 const struct brw_device_info *brw_get_device_info(int devid);
101 const char *brw_get_device_name(int devid);