19f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt/*
29f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt Copyright (C) Intel Corp.  2006.  All Rights Reserved.
39f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
49f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt develop this 3D driver.
59f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
69f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt Permission is hereby granted, free of charge, to any person obtaining
79f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt a copy of this software and associated documentation files (the
89f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt "Software"), to deal in the Software without restriction, including
99f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt without limitation the rights to use, copy, modify, merge, publish,
109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt distribute, sublicense, and/or sell copies of the Software, and to
119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt permit persons to whom the Software is furnished to do so, subject to
129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt the following conditions:
139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt The above copyright notice and this permission notice (including the
159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt next paragraph) shall be included in all copies or substantial
169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt portions of the Software.
179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
229f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
239f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
249f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
259f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
269f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt **********************************************************************/
279f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt /*
289f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt  * Authors:
299f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt  *   Keith Whitwell <keith@tungstengraphics.com>
309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt  */
319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#ifndef BRW_STRUCTS_H
349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#define BRW_STRUCTS_H
359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
360fe19bc91d89dd83b9a7bab28a6009a30e1bc856Brian Paul
370fe19bc91d89dd83b9a7bab28a6009a30e1bc856Brian Paul/** Number of general purpose registers (VS, WM, etc) */
380fe19bc91d89dd83b9a7bab28a6009a30e1bc856Brian Paul#define BRW_MAX_GRF 128
390fe19bc91d89dd83b9a7bab28a6009a30e1bc856Brian Paul
40e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt/**
41e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt * First GRF used for the MRF hack.
42e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt *
43e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt * On gen7, MRFs are no longer used, and contiguous GRFs are used instead.  We
44e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt * haven't converted our compiler to be aware of this, so it asks for MRFs and
45e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt * brw_eu_emit.c quietly converts them to be accesses of the top GRFs.  The
46e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt * register allocators have to be careful of this to avoid corrupting the "MRF"s
47e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt * with actual GRF allocations.
48e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt */
49e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt#define GEN7_MRF_HACK_START 112.
50e910241e9754b6e673ed0fc3133c8b1de56e76c7Eric Anholt
510fe19bc91d89dd83b9a7bab28a6009a30e1bc856Brian Paul/** Number of message register file registers */
520fe19bc91d89dd83b9a7bab28a6009a30e1bc856Brian Paul#define BRW_MAX_MRF 16
530fe19bc91d89dd83b9a7bab28a6009a30e1bc856Brian Paul
549f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt/* These seem to be passed around as function args, so it works out
559f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt * better to keep them as #defines:
569f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt */
579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#define BRW_FLUSH_READ_CACHE           0x1
589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#define BRW_FLUSH_STATE_CACHE          0x2
599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4
609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#define BRW_FLUSH_SNAPSHOT_COUNTERS    0x8
619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_urb_fence
639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
659f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint length:8;
679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vs_realloc:1;
689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint gs_realloc:1;
699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint clp_realloc:1;
709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sf_realloc:1;
719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vfe_realloc:1;
729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint cs_realloc:1;
739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad:2;
749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint opcode:16;
759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } header;
769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vs_fence:10;
809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint gs_fence:10;
819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint clp_fence:10;
829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad:2;
839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } bits0;
849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
869f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sf_fence:10;
889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vf_fence:10;
8998a8744e02c5c1aa0c97c0265680f09f92a68818Xiang, Haihao      GLuint cs_fence:11;
9098a8744e02c5c1aa0c97c0265680f09f92a68818Xiang, Haihao      GLuint pad:1;
919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } bits1;
929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt/* State structs for the various fixed function units:
959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt */
969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct thread0
999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad0:1;
1019f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint grf_reg_count:3;
1029f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad1:2;
10338bad7677e57d629eeffd4ef39a7fc254db12735Eric Anholt   GLuint kernel_start_pointer:26; /* Offset from GENERAL_STATE_BASE */
1049f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
1059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1069f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct thread1
1079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint ext_halt_exception_enable:1;
1099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint sw_exception_enable:1;
1109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint mask_stack_exception_enable:1;
1119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint timeout_exception_enable:1;
1129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint illegal_op_exception_enable:1;
1139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad0:3;
1149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint depth_coef_urb_read_offset:6;	/* WM only */
1159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad1:2;
1169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint floating_point_mode:1;
1179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint thread_priority:1;
1189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint binding_table_entry_count:8;
1199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad3:5;
1209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint single_program_flow:1;
1219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
1229f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1239f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct thread2
1249f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1259f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint per_thread_scratch_space:4;
1269f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad0:6;
1279f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint scratch_space_base_pointer:22;
1289f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
1299f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct thread3
1329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint dispatch_grf_start_reg:4;
1349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint urb_entry_read_offset:6;
1359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad0:1;
1369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint urb_entry_read_length:6;
1379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad1:1;
1389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint const_urb_entry_read_offset:6;
1399f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad2:1;
1409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint const_urb_entry_read_length:6;
1419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad3:1;
1429f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
1439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1449f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1469f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_clip_unit_state
1479f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread0 thread0;
1491b9f78195f62959601d440475a6cbba5e8046813Eric Anholt   struct
1501b9f78195f62959601d440475a6cbba5e8046813Eric Anholt   {
1511b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint pad0:7;
1521b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint sw_exception_enable:1;
1531b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint pad1:3;
1541b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint mask_stack_exception_enable:1;
1551b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint pad2:1;
1561b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint illegal_op_exception_enable:1;
1571b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint pad3:2;
1581b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint floating_point_mode:1;
1591b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint thread_priority:1;
1601b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint binding_table_entry_count:8;
1611b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint pad4:5;
1621b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLuint single_program_flow:1;
1631b9f78195f62959601d440475a6cbba5e8046813Eric Anholt   } thread1;
1641b9f78195f62959601d440475a6cbba5e8046813Eric Anholt
1659f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread2 thread2;
1669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread3 thread3;
1679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
1699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
1709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:9;
1719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint gs_output_stats:1; /* not always */
1729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stats_enable:1;
1739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint nr_urb_entries:7;
1749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad1:1;
1759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint urb_entry_allocation_size:5;
1769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad2:1;
1778e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint max_threads:5; 	/* may be less */
1788e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint pad3:2;
1799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } thread4;
1809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
1829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
1839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:13;
1849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint clip_mode:3;
1859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint userclip_enable_flags:8;
1869f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint userclip_must_clip:1;
1878e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint negative_w_clip_test:1;
1889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint guard_band_enable:1;
1899f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint viewport_z_clip_enable:1;
1909f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint viewport_xy_clip_enable:1;
1919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vertex_position_space:1;
1929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint api_mode:1;
1939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad2:1;
1949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } clip5;
1959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
1979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
1989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:5;
1999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint clipper_viewport_state_ptr:27;
2009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } clip6;
2019f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
2029f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
2039f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat viewport_xmin;
2049f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat viewport_xmax;
2059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat viewport_ymin;
2069f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat viewport_ymax;
2079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
2089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
2097ee590424c974cb10882e9c4664a6024595fc9deEric Anholtstruct gen6_blend_state
2107ee590424c974cb10882e9c4664a6024595fc9deEric Anholt{
2117ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   struct {
2127ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint dest_blend_factor:5;
2137ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint source_blend_factor:5;
2147ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad3:1;
2157ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint blend_func:3;
2167ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad2:1;
2177ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint ia_dest_blend_factor:5;
2187ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint ia_source_blend_factor:5;
2197ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad1:1;
2207ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint ia_blend_func:3;
2217ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad0:1;
2227ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint ia_blend_enable:1;
2237ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint blend_enable:1;
2247ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   } blend0;
2257ee590424c974cb10882e9c4664a6024595fc9deEric Anholt
2267ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   struct {
2277ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint post_blend_clamp_enable:1;
2287ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pre_blend_clamp_enable:1;
2297ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint clamp_range:2;
2307ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad0:4;
2317ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint x_dither_offset:2;
2327ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint y_dither_offset:2;
2337ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint dither_enable:1;
2347ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint alpha_test_func:3;
2357ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint alpha_test_enable:1;
2367ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad1:1;
2377ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint logic_op_func:4;
2387ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint logic_op_enable:1;
2397ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad2:1;
2407ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint write_disable_b:1;
2417ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint write_disable_g:1;
2427ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint write_disable_r:1;
2437ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint write_disable_a:1;
2447ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad3:1;
2457ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint alpha_to_coverage_dither:1;
2467ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint alpha_to_one:1;
2477ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint alpha_to_coverage:1;
2487ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   } blend1;
2497ee590424c974cb10882e9c4664a6024595fc9deEric Anholt};
2507ee590424c974cb10882e9c4664a6024595fc9deEric Anholt
2517ee590424c974cb10882e9c4664a6024595fc9deEric Anholtstruct gen6_color_calc_state
2527ee590424c974cb10882e9c4664a6024595fc9deEric Anholt{
2537ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   struct {
2547ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint alpha_test_format:1;
2557ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad0:14;
2567ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint round_disable:1;
2577ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint bf_stencil_ref:8;
2587ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_ref:8;
2597ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   } cc0;
2607ee590424c974cb10882e9c4664a6024595fc9deEric Anholt
2617ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   union {
2627ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLfloat alpha_ref_f;
2637ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      struct {
2647ee590424c974cb10882e9c4664a6024595fc9deEric Anholt	 GLuint ui:8;
2657ee590424c974cb10882e9c4664a6024595fc9deEric Anholt	 GLuint pad0:24;
2667ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      } alpha_ref_fi;
2677ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   } cc1;
2687ee590424c974cb10882e9c4664a6024595fc9deEric Anholt
2697ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   GLfloat constant_r;
2707ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   GLfloat constant_g;
2717ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   GLfloat constant_b;
2727ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   GLfloat constant_a;
2737ee590424c974cb10882e9c4664a6024595fc9deEric Anholt};
2749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
2757ee590424c974cb10882e9c4664a6024595fc9deEric Anholtstruct gen6_depth_stencil_state
2767ee590424c974cb10882e9c4664a6024595fc9deEric Anholt{
2777ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   struct {
2787ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad0:3;
2797ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint bf_stencil_pass_depth_pass_op:3;
2807ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint bf_stencil_pass_depth_fail_op:3;
2817ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint bf_stencil_fail_op:3;
2827ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint bf_stencil_func:3;
2837ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint bf_stencil_enable:1;
2847ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad1:2;
2857ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_write_enable:1;
2867ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_pass_depth_pass_op:3;
2877ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_pass_depth_fail_op:3;
2887ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_fail_op:3;
2897ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_func:3;
2907ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_enable:1;
2917ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   } ds0;
2927ee590424c974cb10882e9c4664a6024595fc9deEric Anholt
2937ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   struct {
2947ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint bf_stencil_write_mask:8;
2957ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint bf_stencil_test_mask:8;
2967ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_write_mask:8;
2977ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint stencil_test_mask:8;
2987ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   } ds1;
2997ee590424c974cb10882e9c4664a6024595fc9deEric Anholt
3007ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   struct {
30124ff42e7d56ac489caeca6b5ffcc3091cc8194b5Zhenyu Wang      GLuint pad0:26;
3027ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint depth_write_enable:1;
3037ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint depth_test_func:3;
3047ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint pad1:1;
3057ee590424c974cb10882e9c4664a6024595fc9deEric Anholt      GLuint depth_test_enable:1;
3067ee590424c974cb10882e9c4664a6024595fc9deEric Anholt   } ds2;
3077ee590424c974cb10882e9c4664a6024595fc9deEric Anholt};
3089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_cc_unit_state
3109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
3119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
3129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
3139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:3;
3149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint bf_stencil_pass_depth_pass_op:3;
3159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint bf_stencil_pass_depth_fail_op:3;
3169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint bf_stencil_fail_op:3;
3179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint bf_stencil_func:3;
3189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint bf_stencil_enable:1;
3199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad1:2;
3209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_write_enable:1;
3219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_pass_depth_pass_op:3;
3229f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_pass_depth_fail_op:3;
3239f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_fail_op:3;
3249f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_func:3;
3259f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_enable:1;
3269f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } cc0;
3279f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3289f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3299f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
3309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
3319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint bf_stencil_ref:8;
3329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_write_mask:8;
3339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_test_mask:8;
3349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stencil_ref:8;
3359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } cc1;
3369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
3399f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
3409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint logicop_enable:1;
3419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:10;
3429f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint depth_write_enable:1;
3439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint depth_test_function:3;
3449f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint depth_test:1;
3459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint bf_stencil_write_mask:8;
3469f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint bf_stencil_test_mask:8;
3479f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } cc2;
3489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3499f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3509f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
3519f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
3529f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:8;
3539f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint alpha_test_func:3;
3549f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint alpha_test:1;
3559f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint blend_enable:1;
3569f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint ia_blend_enable:1;
3579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad1:1;
3589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint alpha_test_format:1;
3599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad2:16;
3609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } cc3;
3619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
3639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
3649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:5;
36538bad7677e57d629eeffd4ef39a7fc254db12735Eric Anholt      GLuint cc_viewport_state_offset:27; /* Offset from GENERAL_STATE_BASE */
3669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } cc4;
3679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
3699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
3709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:2;
3719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint ia_dest_blend_factor:5;
3729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint ia_src_blend_factor:5;
3739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint ia_blend_function:3;
3749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint statistics_enable:1;
3759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint logicop_func:4;
3769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad1:11;
3779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint dither_enable:1;
3789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } cc5;
3799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
3819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
3829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint clamp_post_alpha_blend:1;
3839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint clamp_pre_alpha_blend:1;
3849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint clamp_range:2;
3859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:11;
3869f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint y_dither_offset:2;
3879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint x_dither_offset:2;
3889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint dest_blend_factor:5;
3899f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint src_blend_factor:5;
3909f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint blend_function:3;
3919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } cc6;
3929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
3939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct {
3949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      union {
3959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLfloat f;
3969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLubyte ub[4];
3979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } alpha_ref;
3989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } cc7;
3999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
4009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4019f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_sf_unit_state
4029f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
4039f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread0 thread0;
4049f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread1 thread1;
4059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread2 thread2;
4069f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread3 thread3;
4079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
4099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
4109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:10;
4119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stats_enable:1;
4129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint nr_urb_entries:7;
4139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad1:1;
4149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint urb_entry_allocation_size:5;
4159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad2:1;
4169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint max_threads:6;
4179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad3:1;
4189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } thread4;
4199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
4219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
4229f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint front_winding:1;
4239f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint viewport_transform:1;
4249f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:3;
42538bad7677e57d629eeffd4ef39a7fc254db12735Eric Anholt      GLuint sf_viewport_state_offset:27; /* Offset from GENERAL_STATE_BASE */
4269f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } sf5;
4279f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4289f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
4299f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
4309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:9;
4319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint dest_org_vbias:4;
4329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint dest_org_hbias:4;
4339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint scissor:1;
4349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint disable_2x2_trifilter:1;
4359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint disable_zero_pix_trifilter:1;
4369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint point_rast_rule:2;
4379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint line_endcap_aa_region_width:2;
4389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint line_width:4;
4399f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint fast_scissor_disable:1;
4409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint cull_mode:2;
4419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint aa_enable:1;
4429f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } sf6;
4439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4449f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
4459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
4469f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint point_size:11;
4479f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint use_point_size_state:1;
4489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint subpixel_precision:1;
4499f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sprite_point:1;
4508e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint pad0:10;
4518e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint aa_line_distance_mode:1;
4529f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint trifan_pv:2;
4539f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint linestrip_pv:2;
4549f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint tristrip_pv:2;
4559f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint line_last_pixel_enable:1;
4569f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } sf7;
4579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
4599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4604b6b0bf24a043035d7ada0c966e01df6327dc529Zhenyu Wangstruct gen6_scissor_rect
46164e0c586a74553b2941f18feb199d8cddb192102Eric Anholt{
4624b6b0bf24a043035d7ada0c966e01df6327dc529Zhenyu Wang   GLuint xmin:16;
4634b6b0bf24a043035d7ada0c966e01df6327dc529Zhenyu Wang   GLuint ymin:16;
4644b6b0bf24a043035d7ada0c966e01df6327dc529Zhenyu Wang   GLuint xmax:16;
4654b6b0bf24a043035d7ada0c966e01df6327dc529Zhenyu Wang   GLuint ymax:16;
46664e0c586a74553b2941f18feb199d8cddb192102Eric Anholt};
4679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_gs_unit_state
4699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
4709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread0 thread0;
4719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread1 thread1;
4729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread2 thread2;
4739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread3 thread3;
4749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
4769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
4772995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint pad0:8;
478cdcef6cbf4dd80047819e9098e34a3b98bd502a4Zhenyu Wang      GLuint rendering_enable:1; /* for Ironlake */
4792995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint pad4:1;
4809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stats_enable:1;
4819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint nr_urb_entries:7;
4829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad1:1;
4839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint urb_entry_allocation_size:5;
4849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad2:1;
4858e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint max_threads:5;
4868e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint pad3:2;
4879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } thread4;
4889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4899f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
4909f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
4919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sampler_count:3;
4929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:2;
4939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sampler_state_pointer:27;
4949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } gs5;
4959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
4979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
4989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
4999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint max_vp_index:4;
5008e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint pad0:12;
5018e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint svbi_post_inc_value:10;
5029f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad1:1;
5038e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint svbi_post_inc_enable:1;
5048e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint svbi_payload:1;
5058e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint discard_adjaceny:1;
5068e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint reorder_enable:1;
5078e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint pad2:1;
5089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } gs6;
5099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
5109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_vs_unit_state
5139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
5149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread0 thread0;
5159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread1 thread1;
5169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread2 thread2;
5179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread3 thread3;
5189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
5209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
5219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:10;
5229f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stats_enable:1;
5239f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint nr_urb_entries:7;
5249f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad1:1;
5259f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint urb_entry_allocation_size:5;
5269f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad2:1;
5278e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint max_threads:6;
5288e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint pad3:1;
5299f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } thread4;
5309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
5329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
5339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sampler_count:3;
5349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:2;
5359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sampler_state_pointer:27;
5369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } vs5;
5379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
5399f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
5409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vs_enable:1;
5419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vert_cache_disable:1;
5429f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:30;
5439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } vs6;
5449f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
5459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5469f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5479f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_wm_unit_state
5489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
5499f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread0 thread0;
5509f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread1 thread1;
5519f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread2 thread2;
5529f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct thread3 thread3;
5539f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5549f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct {
5559f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint stats_enable:1;
5568e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint depth_buffer_clear:1;
5579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sampler_count:3;
5589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint sampler_state_pointer:27;
5599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } wm4;
5609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
5629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
5639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint enable_8_pix:1;
5649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint enable_16_pix:1;
5659f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint enable_32_pix:1;
5668e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint enable_con_32_pix:1;
5678e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint enable_con_64_pix:1;
5684b929c75e2d868cbfb21b5dbeb1f6c689a903be6Kenneth Graunke      GLuint pad0:1;
5694b929c75e2d868cbfb21b5dbeb1f6c689a903be6Kenneth Graunke
5704b929c75e2d868cbfb21b5dbeb1f6c689a903be6Kenneth Graunke      /* These next four bits are for Ironlake+ */
5714b929c75e2d868cbfb21b5dbeb1f6c689a903be6Kenneth Graunke      GLuint fast_span_coverage_enable:1;
5724b929c75e2d868cbfb21b5dbeb1f6c689a903be6Kenneth Graunke      GLuint depth_buffer_clear:1;
5734b929c75e2d868cbfb21b5dbeb1f6c689a903be6Kenneth Graunke      GLuint depth_buffer_resolve_enable:1;
5744b929c75e2d868cbfb21b5dbeb1f6c689a903be6Kenneth Graunke      GLuint hierarchical_depth_buffer_resolve_enable:1;
5754b929c75e2d868cbfb21b5dbeb1f6c689a903be6Kenneth Graunke
5769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint legacy_global_depth_bias:1;
5779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint line_stipple:1;
5789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint depth_offset:1;
5799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint polygon_stipple:1;
5809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint line_aa_region_width:2;
5819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint line_endcap_aa_region_width:2;
5829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint early_depth_test:1;
5839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint thread_dispatch_enable:1;
5849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint program_uses_depth:1;
5859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint program_computes_depth:1;
5869f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint program_uses_killpixel:1;
5879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint legacy_line_rast: 1;
5888e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint transposed_urb_read_enable:1;
5898e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      GLuint max_threads:7;
5909f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } wm5;
5919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
5929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat global_depth_offset_constant;
5939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat global_depth_offset_scale;
5942995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
595cdcef6cbf4dd80047819e9098e34a3b98bd502a4Zhenyu Wang   /* for Ironlake only */
5962995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao   struct {
5972995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint pad0:1;
5982995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint grf_reg_count_1:3;
5992995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint pad1:2;
6002995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint kernel_start_pointer_1:26;
6012995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao   } wm8;
6022995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
6032995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao   struct {
6042995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint pad0:1;
6052995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint grf_reg_count_2:3;
6062995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint pad1:2;
6072995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint kernel_start_pointer_2:26;
6082995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao   } wm9;
6092995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
6102995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao   struct {
6112995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint pad0:1;
6122995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint grf_reg_count_3:3;
6132995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint pad1:2;
6142995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      GLuint kernel_start_pointer_3:26;
6152995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao   } wm10;
6169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
6179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
6189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_sampler_default_color {
6199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat color[4];
6209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
6219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
62230f25a10190632a971e2b214c443e54afa463eadEric Anholtstruct gen5_sampler_default_color {
62330f25a10190632a971e2b214c443e54afa463eadEric Anholt   uint8_t ub[4];
62430f25a10190632a971e2b214c443e54afa463eadEric Anholt   float f[4];
62530f25a10190632a971e2b214c443e54afa463eadEric Anholt   uint16_t hf[4];
62630f25a10190632a971e2b214c443e54afa463eadEric Anholt   uint16_t us[4];
62730f25a10190632a971e2b214c443e54afa463eadEric Anholt   int16_t s[4];
62830f25a10190632a971e2b214c443e54afa463eadEric Anholt   uint8_t b[4];
62930f25a10190632a971e2b214c443e54afa463eadEric Anholt};
63030f25a10190632a971e2b214c443e54afa463eadEric Anholt
6319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_sampler_state
6329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
6339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
6349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
6359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
6369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint shadow_function:3;
6379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint lod_bias:11;
6389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint min_filter:3;
6399f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint mag_filter:3;
6409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint mip_filter:2;
6419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint base_level:5;
642956f866030f7bea5fc4a2de28c72e60bdc3a5b3dZhenyu Wang      GLuint min_mag_neq:1;
6439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint lod_preclamp:1;
6449f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint default_color_mode:1;
6459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:1;
6469f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint disable:1;
6479f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } ss0;
6489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
6499f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
6509f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
6519f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint r_wrap_mode:3;
6529f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint t_wrap_mode:3;
6539f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint s_wrap_mode:3;
654956f866030f7bea5fc4a2de28c72e60bdc3a5b3dZhenyu Wang      GLuint cube_control_mode:1;
655956f866030f7bea5fc4a2de28c72e60bdc3a5b3dZhenyu Wang      GLuint pad:2;
6569f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint max_lod:10;
6579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint min_lod:10;
6589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } ss1;
6599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
6609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
6619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
6629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
6639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad:5;
6649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint default_color_pointer:27;
6659f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } ss2;
6669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
6679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
6689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
669956f866030f7bea5fc4a2de28c72e60bdc3a5b3dZhenyu Wang      GLuint non_normalized_coord:1;
670956f866030f7bea5fc4a2de28c72e60bdc3a5b3dZhenyu Wang      GLuint pad:12;
671956f866030f7bea5fc4a2de28c72e60bdc3a5b3dZhenyu Wang      GLuint address_round:6;
6729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint max_aniso:3;
6739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint chroma_key_mode:1;
6749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint chroma_key_index:2;
6759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint chroma_key_enable:1;
6769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint monochrome_filter_width:3;
6779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint monochrome_filter_height:3;
6789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } ss3;
6799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
6809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
6813f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunkestruct gen7_sampler_state
6823f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke{
6833f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   struct
6843f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   {
6853f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint aniso_algorithm:1;
6863f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint lod_bias:13;
6873f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint min_filter:3;
6883f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint mag_filter:3;
6893f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint mip_filter:2;
6903f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint base_level:5;
6913f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint pad1:1;
6923f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint lod_preclamp:1;
6933f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint default_color_mode:1;
6943f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint pad0:1;
6953f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint disable:1;
6963f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   } ss0;
6973f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke
6983f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   struct
6993f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   {
7003f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint cube_control_mode:1;
7013f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint shadow_function:3;
7023f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint pad:4;
7033f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint max_lod:12;
7043f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint min_lod:12;
7053f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   } ss1;
7063f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke
7073f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   struct
7083f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   {
7093f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint pad:5;
7103f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint default_color_pointer:27;
7113f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   } ss2;
7123f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke
7133f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   struct
7143f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   {
7153f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint r_wrap_mode:3;
7163f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint t_wrap_mode:3;
7173f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint s_wrap_mode:3;
7183f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint pad:1;
7193f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint non_normalized_coord:1;
7203f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint trilinear_quality:2;
7213f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint address_round:6;
7223f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint max_aniso:3;
7233f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint chroma_key_mode:1;
7243f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint chroma_key_index:2;
7253f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint chroma_key_enable:1;
7263f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke      GLuint pad0:6;
7273f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke   } ss3;
7283f44043da37bcd0c481ceddf4f878ddb3419b763Kenneth Graunke};
7299f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
7309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_clipper_viewport
7319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
7329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat xmin;
7339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat xmax;
7349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat ymin;
7359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat ymax;
7369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
7379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
7389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_cc_viewport
7399f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
7409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat min_depth;
7419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLfloat max_depth;
7429f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
7439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
7449f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_sf_viewport
7459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
7469f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct {
7479f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLfloat m00;
7489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLfloat m11;
7499f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLfloat m22;
7509f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLfloat m30;
7519f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLfloat m31;
7529f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLfloat m32;
7539f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } viewport;
7549f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
755447facfcd6d807128ebf6ba3efc894180b447494Eric Anholt   /* scissor coordinates are inclusive */
7569f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct {
7579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLshort xmin;
7589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLshort ymin;
7599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLshort xmax;
7609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLshort ymax;
7619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } scissor;
7629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
7639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
7641ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholtstruct gen6_sf_viewport {
7651ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholt   GLfloat m00;
7661ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholt   GLfloat m11;
7671ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholt   GLfloat m22;
7681ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholt   GLfloat m30;
7691ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholt   GLfloat m31;
7701ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholt   GLfloat m32;
7711ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholt};
7721ae0cb5f286bbba10e99c8e3bc1c55d2aeb38b59Eric Anholt
77318402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunkestruct gen7_sf_clip_viewport {
77418402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke   struct {
77518402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat m00;
77618402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat m11;
77718402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat m22;
77818402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat m30;
77918402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat m31;
78018402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat m32;
78118402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke   } viewport;
78218402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke
78318402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke   GLuint pad0[2];
78418402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke
78518402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke   struct {
78618402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat xmin;
78718402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat xmax;
78818402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat ymin;
78918402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke      GLfloat ymax;
79018402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke   } guardband;
79118402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke
79218402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke   GLfloat pad1[4];
79318402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke};
79418402fbf79e96d7afb6b690906a7656f01a92b9dKenneth Graunke
795b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke/* volume 5c Shared Functions - 1.13.4.1.2 */
796b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunkestruct gen7_surface_state
797b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke{
798b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   struct {
799b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint cube_pos_z:1;
800b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint cube_neg_z:1;
801b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint cube_pos_y:1;
802b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint cube_neg_y:1;
803b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint cube_pos_x:1;
804b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint cube_neg_x:1;
805b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad2:2;
806b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint render_cache_read_write:1;
807b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad1:1;
808b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint surface_array_spacing:1;
809b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint vert_line_stride_ofs:1;
810b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint vert_line_stride:1;
811b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint tile_walk:1;
812b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint tiled_surface:1;
813b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint horizontal_alignment:1;
814b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint vertical_alignment:2;
815b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint surface_format:9;     /**< BRW_SURFACEFORMAT_x */
816b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad0:1;
817b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint is_array:1;
818b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint surface_type:3;       /**< BRW_SURFACE_1D/2D/3D/CUBE */
819b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   } ss0;
820b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke
821b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   struct {
822b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint base_addr;
823b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   } ss1;
824b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke
825b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   struct {
826b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint width:14;
827b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad1:2;
828b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint height:14;
829b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad0:2;
830b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   } ss2;
831b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke
832b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   struct {
833b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pitch:18;
834b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad:3;
835b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint depth:11;
836b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   } ss3;
837b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke
838b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   struct {
839b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint multisample_position_palette_index:3;
840b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint num_multisamples:3;
841b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint multisampled_surface_storage_format:1;
842b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint render_target_view_extent:11;
843b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint min_array_elt:11;
844b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint rotation:2;
845b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad0:1;
846b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   } ss4;
847b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke
848b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   struct {
849b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint mip_count:4;
850b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint min_lod:4;
851b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad1:12;
852b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint y_offset:4;
853b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint pad0:1;
854b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint x_offset:7;
855b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   } ss5;
856b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke
8570ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry   union {
8580ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry      GLuint raw_data;
8590ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry      struct {
8600ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint y_offset_for_uv_plane:14;
8610ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint pad1:2;
8620ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint x_offset_for_uv_plane:14;
8630ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint pad0:2;
8640ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry      } planar; /** Interpretation when Surface Format == PLANAR */
8650ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry      struct {
8660ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint mcs_enable:1;
8670ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint append_counter_enable:1;
8680ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint pad:4;
8690ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint append_counter_address:26;
8700ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry      } mcs_disabled; /** Interpretation when mcs_enable == 0 */
8710ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry      struct {
8720ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint mcs_enable:1;
8730ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint pad:2;
8740ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint mcs_surface_pitch:9;
8750ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry         GLuint mcs_base_address:20;
8760ba813506d770ead7eb181fb2bf48d5a408fe0eaPaul Berry      } mcs_enabled; /** Interpretation when mcs_enable == 1 */
877b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   } ss6;
878b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke
879b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   struct {
880b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint resource_min_lod:12;
8814848122a96a46d6725cbfe92041459d11aea70fcKenneth Graunke
8824848122a96a46d6725cbfe92041459d11aea70fcKenneth Graunke      /* Only on Haswell */
8834848122a96a46d6725cbfe92041459d11aea70fcKenneth Graunke      GLuint pad0:4;
884cbcf750d5f2c4695c39766938b4cd9d8942d850bKenneth Graunke      GLuint shader_channel_select_a:3;
885cbcf750d5f2c4695c39766938b4cd9d8942d850bKenneth Graunke      GLuint shader_channel_select_b:3;
886cbcf750d5f2c4695c39766938b4cd9d8942d850bKenneth Graunke      GLuint shader_channel_select_g:3;
887cbcf750d5f2c4695c39766938b4cd9d8942d850bKenneth Graunke      GLuint shader_channel_select_r:3;
8884848122a96a46d6725cbfe92041459d11aea70fcKenneth Graunke
889b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint alpha_clear_color:1;
890b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint blue_clear_color:1;
891b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint green_clear_color:1;
892b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke      GLuint red_clear_color:1;
893b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke   } ss7;
894b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke};
895b2b6cc662271d611462532222ef2fcc30042bd0fKenneth Graunke
8969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
8979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_vertex_element_state
8989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
8999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
9009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
9019f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint src_offset:11;
9029f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad:5;
9039f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint src_format:9;
9049f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad0:1;
9059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint valid:1;
9069f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vertex_buffer_index:5;
9079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } ve0;
9089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
9099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
9109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
9119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint dst_offset:8;
9129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad:8;
9139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vfcomponent3:4;
9149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vfcomponent2:4;
9159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vfcomponent1:4;
9169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint vfcomponent0:4;
9179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } ve1;
9189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
9199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
9209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_urb_immediate {
9219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint opcode:4;
9229f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint offset:6;
9239f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint swizzle_control:2;
9249f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad:1;
9259f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint allocate:1;
9269f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint used:1;
9279f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint complete:1;
9289f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint response_length:4;
9299f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint msg_length:4;
9309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint msg_target:4;
9319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint pad1:3;
9329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint end_of_thread:1;
9339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
9349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
9359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt/* Instruction format for the execution units:
9369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt */
9379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
9389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtstruct brw_instruction
9399f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
9409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   struct
9419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
9429f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint opcode:7;
9439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint pad:1;
9449f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint access_mode:1;
9459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint mask_control:1;
9469f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint dependency_control:2;
94793ba0055c325007656c14ba38302e21be3dc599fZhenyu Wang      GLuint compression_control:2; /* gen6: quater control */
9489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint thread_control:2;
9499f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint predicate_control:4;
9509f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint predicate_inverse:1;
9519f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint execution_size:3;
9520ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke      /**
9530ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke       * Conditional Modifier for most instructions.  On Gen6+, this is also
9540ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke       * used for the SEND instruction's Message Target/SFID.
9550ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke       */
9560ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke      GLuint destreg__conditionalmod:4;
95793ba0055c325007656c14ba38302e21be3dc599fZhenyu Wang      GLuint acc_wr_control:1;
95893ba0055c325007656c14ba38302e21be3dc599fZhenyu Wang      GLuint cmpt_control:1;
9599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint debug_control:1;
9609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint saturate:1;
9619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } header;
9629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
9639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   union {
9649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
9659f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
9669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_file:2;
9679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_type:3;
9689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_file:2;
9699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_type:3;
9709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_reg_file:2;
9719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_reg_type:3;
9729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad:1;
9739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_subreg_nr:5;
9749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_nr:8;
9759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_horiz_stride:2;
9769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_address_mode:1;
9779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } da1;
9789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
9799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
9809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
9819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_file:2;
9829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_type:3;
9839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_file:2;
9849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_type:3;
9851d4bace9fca64c61ccd9f4205262417fa0ae3883Eric Anholt	 GLuint src1_reg_file:2;        /* 0x00000c00 */
9861d4bace9fca64c61ccd9f4205262417fa0ae3883Eric Anholt	 GLuint src1_reg_type:3;        /* 0x00007000 */
9871d4bace9fca64c61ccd9f4205262417fa0ae3883Eric Anholt	 GLuint pad:1;
9889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLint dest_indirect_offset:10;	/* offset against the deref'd address reg */
9899f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_subreg_nr:3; /* subnr for the address reg a0.x */
9909f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_horiz_stride:2;
9919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_address_mode:1;
9929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } ia1;
9939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
9949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
9959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
9969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_file:2;
9979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_type:3;
9989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_file:2;
9999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_type:3;
10009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_reg_file:2;
10019f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_reg_type:3;
10021d4bace9fca64c61ccd9f4205262417fa0ae3883Eric Anholt	 GLuint pad:1;
10039f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_writemask:4;
10049f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_subreg_nr:1;
10059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_nr:8;
10063ce2eccbfb925a3af0b91a89a9f7a3603fa45d2dZhenyu Wang	 GLuint dest_horiz_stride:2;
10079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_address_mode:1;
10089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } da16;
10099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
10109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
10119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
10129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_file:2;
10139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_reg_type:3;
10149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_file:2;
10159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_type:3;
10169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad0:6;
10179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_writemask:4;
10189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLint dest_indirect_offset:6;
10199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_subreg_nr:3;
10203ce2eccbfb925a3af0b91a89a9f7a3603fa45d2dZhenyu Wang	 GLuint dest_horiz_stride:2;
10219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint dest_address_mode:1;
10229f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } ia16;
1023feca6609390d4642418cf7aab878e654964510c4Eric Anholt
1024feca6609390d4642418cf7aab878e654964510c4Eric Anholt      struct {
1025feca6609390d4642418cf7aab878e654964510c4Eric Anholt	 GLuint dest_reg_file:2;
1026feca6609390d4642418cf7aab878e654964510c4Eric Anholt	 GLuint dest_reg_type:3;
1027feca6609390d4642418cf7aab878e654964510c4Eric Anholt	 GLuint src0_reg_file:2;
1028feca6609390d4642418cf7aab878e654964510c4Eric Anholt	 GLuint src0_reg_type:3;
1029feca6609390d4642418cf7aab878e654964510c4Eric Anholt	 GLuint src1_reg_file:2;
1030feca6609390d4642418cf7aab878e654964510c4Eric Anholt	 GLuint src1_reg_type:3;
1031feca6609390d4642418cf7aab878e654964510c4Eric Anholt	 GLuint pad:1;
1032feca6609390d4642418cf7aab878e654964510c4Eric Anholt
1033feca6609390d4642418cf7aab878e654964510c4Eric Anholt	 GLint jump_count:16;
1034feca6609390d4642418cf7aab878e654964510c4Eric Anholt      } branch_gen6;
10352b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt
10362b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt      struct {
10372b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint dest_reg_file:1;
10382b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint flag_subreg_num:1;
10392b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint pad0:2;
10402b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src0_abs:1;
10412b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src0_negate:1;
10422b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src1_abs:1;
10432b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src1_negate:1;
10442b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src2_abs:1;
10452b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src2_negate:1;
10462b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint pad1:7;
10472b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint dest_writemask:4;
10482b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint dest_subreg_nr:3;
10492b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint dest_reg_nr:8;
10502b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt      } da3src;
10519f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } bits1;
10529f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
10539f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
10549f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   union {
10559f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
10569f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
10579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_subreg_nr:5;
10589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_nr:8;
10599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_abs:1;
10609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_negate:1;
10619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_address_mode:1;
10629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_horiz_stride:2;
10639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_width:3;
10649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_vert_stride:4;
10659f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint flag_reg_nr:1;
10669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad:6;
10679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } da1;
10689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
10699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
10709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
10719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLint src0_indirect_offset:10;
10729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_subreg_nr:3;
10739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_abs:1;
10749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_negate:1;
10759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_address_mode:1;
10769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_horiz_stride:2;
10779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_width:3;
10789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_vert_stride:4;
10799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint flag_reg_nr:1;
10809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad:6;
10819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } ia1;
10829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
10839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
10849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
10859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_swz_x:2;
10869f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_swz_y:2;
10879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_subreg_nr:1;
10889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_reg_nr:8;
10899f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_abs:1;
10909f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_negate:1;
10919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_address_mode:1;
10929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_swz_z:2;
10939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_swz_w:2;
10949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad0:1;
10959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_vert_stride:4;
10969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint flag_reg_nr:1;
10979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:6;
10989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } da16;
10999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
11009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
11019f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
11029f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_swz_x:2;
11039f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_swz_y:2;
11049f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLint src0_indirect_offset:6;
11059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_subreg_nr:3;
11069f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_abs:1;
11079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_negate:1;
11089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_address_mode:1;
11099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_swz_z:2;
11109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_swz_w:2;
11119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad0:1;
11129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src0_vert_stride:4;
11139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint flag_reg_nr:1;
11149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:6;
11159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } ia16;
11169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
11170ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke      /* Extended Message Descriptor for Ironlake (Gen5) SEND instruction.
11180ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke       *
11190ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke       * Does not apply to Gen6+.  The SFID/message target moved to bits
11200ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke       * 27:24 of the header (destreg__conditionalmod); EOT is in bits3.
11210ec04c5a33731991f80eead39c6ee46535e3d4b2Kenneth Graunke       */
11222995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao       struct
11232995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao       {
11242995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao           GLuint pad:26;
11252995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao           GLuint end_of_thread:1;
11262995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao           GLuint pad1:1;
11272995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao           GLuint sfid:4;
1128cdcef6cbf4dd80047819e9098e34a3b98bd502a4Zhenyu Wang       } send_gen5;  /* for Ironlake only */
11292995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
11302b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt      struct {
11312b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src0_rep_ctrl:1;
11322b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src0_swizzle:8;
11332b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src0_subreg_nr:3;
11342b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src0_reg_nr:8;
11352b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint pad0:1;
11362b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src1_rep_ctrl:1;
11372b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src1_swizzle:8;
11382b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src1_subreg_nr_low:2;
11392b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt      } da3src;
11409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } bits2;
11419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
11429f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   union
11439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   {
11449f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
11459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
11469f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_subreg_nr:5;
11479f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_reg_nr:8;
11489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_abs:1;
11499f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_negate:1;
11501d4bace9fca64c61ccd9f4205262417fa0ae3883Eric Anholt	 GLuint src1_address_mode:1;
11519f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_horiz_stride:2;
11529f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_width:3;
11539f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_vert_stride:4;
11549f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad0:7;
11559f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } da1;
11569f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
11579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
11589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
11599f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_swz_x:2;
11609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_swz_y:2;
11619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_subreg_nr:1;
11629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_reg_nr:8;
11639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_abs:1;
11649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_negate:1;
11651d4bace9fca64c61ccd9f4205262417fa0ae3883Eric Anholt	 GLuint src1_address_mode:1;
11669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_swz_z:2;
11679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_swz_w:2;
11689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:1;
11699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_vert_stride:4;
11709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad2:7;
11719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } da16;
11729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
11739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
11749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
11759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLint  src1_indirect_offset:10;
11769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_subreg_nr:3;
11779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_abs:1;
11789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_negate:1;
11791d4bace9fca64c61ccd9f4205262417fa0ae3883Eric Anholt	 GLuint src1_address_mode:1;
11809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_horiz_stride:2;
11819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_width:3;
11829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_vert_stride:4;
11839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint flag_reg_nr:1;
11849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:6;
11859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } ia1;
11869f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
11879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
11889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
11899f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_swz_x:2;
11909f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_swz_y:2;
11919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLint  src1_indirect_offset:6;
11929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_subreg_nr:3;
11939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_abs:1;
11949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_negate:1;
11959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad0:1;
11969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_swz_z:2;
11979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_swz_w:2;
11989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:1;
11999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint src1_vert_stride:4;
12009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint flag_reg_nr:1;
12019f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad2:6;
12029f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } ia16;
12039f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
12049f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
12059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct
12069f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      {
12079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLint  jump_count:16;	/* note: signed */
12089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint  pop_count:4;
12099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint  pad0:12;
12109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } if_else;
12119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
121264ce592679a5b08d66e3cbbf964f9e695e14aee1Kenneth Graunke      /* This is also used for gen7 IF/ELSE instructions */
121300e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt      struct
121400e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt      {
121500e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	 /* Signed jump distance to the ip to jump to if all channels
121600e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	  * are disabled after the break or continue.  It should point
121700e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	  * to the end of the innermost control flow block, as that's
121800e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	  * where some channel could get re-enabled.
121900e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	  */
122000e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	 int jip:16;
122100e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt
122200e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	 /* Signed jump distance to the location to resume execution
122300e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	  * of this channel if it's enabled for the break or continue.
122400e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	  */
122500e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt	 int uip:16;
122600e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt      } break_cont;
122700e5a743e2ee3981a34b95067a97fa73c0f5d779Eric Anholt
1228dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /**
1229dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * \defgroup SEND instructions / Message Descriptors
1230dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *
1231dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * @{
1232dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       */
1233dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke
1234dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /**
1235dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Generic Message Descriptor for Gen4 SEND instructions.  The structs
1236dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * below expand function_control to something specific for their
1237dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * message.  Due to struct packing issues, they duplicate these bits.
1238dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *
1239dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * See the G45 PRM, Volume 4, Table 14-15.
1240dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       */
1241dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      struct {
1242dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint function_control:16;
1243dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint response_length:4;
1244dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint msg_length:4;
1245dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint msg_target:4;
1246dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint pad1:3;
1247dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint end_of_thread:1;
1248dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      } generic;
1249dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke
1250dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /**
1251dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Generic Message Descriptor for Gen5-7 SEND instructions.
1252dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *
1253dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * See the Sandybridge PRM, Volume 2 Part 2, Table 8-15.  (Sadly, most
1254dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * of the information on the SEND instruction is missing from the public
1255dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Ironlake PRM.)
1256dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *
1257dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * The table claims that bit 31 is reserved/MBZ on Gen6+, but it lies.
1258dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * According to the SEND instruction description:
1259dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * "The MSb of the message description, the EOT field, always comes from
1260dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *  bit 127 of the instruction word"...which is bit 31 of this field.
1261dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       */
1262dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      struct {
1263dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint function_control:19;
1264dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint header_present:1;
1265dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint response_length:5;
1266dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint msg_length:4;
1267dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint pad1:2;
1268dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint end_of_thread:1;
1269dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      } generic_gen5;
1270dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke
1271dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** G45 PRM, Volume 4, Section 6.1.1.1 */
12729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct {
12739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint function:4;
12749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint int_type:1;
12759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint precision:1;
12769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint saturate:1;
12779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint data_type:1;
12789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad0:8;
12799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint response_length:4;
12809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_length:4;
12819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_target:4;
12829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:3;
12839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint end_of_thread:1;
12849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } math;
12859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1286dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** Ironlake PRM, Volume 4 Part 1, Section 6.1.1.1 */
12879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct {
12882995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint function:4;
12892995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint int_type:1;
12902995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint precision:1;
12912995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint saturate:1;
12922995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint data_type:1;
12932995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint snapshot:1;
12942995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad0:10;
12952995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint header_present:1;
12962995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint response_length:5;
12972995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_length:4;
12982995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad1:2;
12992995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint end_of_thread:1;
1300cdcef6cbf4dd80047819e9098e34a3b98bd502a4Zhenyu Wang      } math_gen5;
13012995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
1302dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** G45 PRM, Volume 4, Section 4.8.1.1.1 [DevBW] and [DevCL] */
13032995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      struct {
13049f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint binding_table_index:8;
13059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint sampler:4;
13069f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint return_format:2;
13079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_type:2;
13089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint response_length:4;
13099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_length:4;
13109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_target:4;
13119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:3;
13129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint end_of_thread:1;
13139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } sampler;
13149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1315dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** G45 PRM, Volume 4, Section 4.8.1.1.2 [DevCTG] */
13168e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao      struct {
13178e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao         GLuint binding_table_index:8;
13188e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao         GLuint sampler:4;
13198e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao         GLuint msg_type:4;
13208e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao         GLuint response_length:4;
13218e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao         GLuint msg_length:4;
13228e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao         GLuint msg_target:4;
13238e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao         GLuint pad1:3;
13248e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao         GLuint end_of_thread:1;
132534b1776e8d965605d12807884c9c447214d57281Eric Anholt      } sampler_g4x;
13268e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao
1327dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** Ironlake PRM, Volume 4 Part 1, Section 4.11.1.1.3 */
13282995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      struct {
13292995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint binding_table_index:8;
13302995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint sampler:4;
13312995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_type:4;
13322995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint simd_mode:2;
13332995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad0:1;
13342995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint header_present:1;
13352995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint response_length:5;
13362995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_length:4;
13372995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad1:2;
13382995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint end_of_thread:1;
1339cdcef6cbf4dd80047819e9098e34a3b98bd502a4Zhenyu Wang      } sampler_gen5;
13402995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
134136f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke      struct {
134236f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint binding_table_index:8;
134336f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint sampler:4;
134436f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint msg_type:5;
134536f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint simd_mode:2;
134636f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint header_present:1;
134736f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint response_length:5;
134836f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint msg_length:4;
134936f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint pad1:2;
135036f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke	 GLuint end_of_thread:1;
135136f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke      } sampler_gen7;
135236f8de02e71ee5c2ca55d86c486eb00d043ae1f5Kenneth Graunke
13539f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct brw_urb_immediate urb;
13549f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
13559f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct {
13562995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint opcode:4;
13572995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint offset:6;
13582995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint swizzle_control:2;
13592995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad:1;
13602995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint allocate:1;
13612995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint used:1;
13622995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint complete:1;
13632995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad0:3;
13642995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint header_present:1;
13652995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint response_length:5;
13662995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_length:4;
13672995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad1:2;
13682995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint end_of_thread:1;
1369cdcef6cbf4dd80047819e9098e34a3b98bd502a4Zhenyu Wang      } urb_gen5;
13702995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
13712995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      struct {
137297d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint opcode:3;
137397d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint offset:11;
137497d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint swizzle_control:1;
137597d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint complete:1;
137697d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint per_slot_offset:1;
137797d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint pad0:2;
137897d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint header_present:1;
137997d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint response_length:5;
138097d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint msg_length:4;
138197d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint pad1:2;
138297d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke	 GLuint end_of_thread:1;
138397d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke      } urb_gen7;
138497d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke
1385dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** 965 PRM, Volume 4, Section 5.10.1.1: Message Descriptor */
138697d4d6f77e885d2c343697f26a5ecf821caaf13bKenneth Graunke      struct {
13879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint binding_table_index:8;
13889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_control:4;
13899f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_type:2;
13909f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint target_cache:2;
13919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint response_length:4;
13929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_length:4;
13939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_target:4;
13949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:3;
13959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint end_of_thread:1;
13969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } dp_read;
13979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1398dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** G45 PRM, Volume 4, Section 5.10.1.1.2 */
13999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct {
14009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint binding_table_index:8;
14015dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint msg_control:3;
14025dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint msg_type:3;
14035dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint target_cache:2;
14045dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint response_length:4;
14055dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint msg_length:4;
14065dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint msg_target:4;
14075dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint pad1:3;
14085dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint end_of_thread:1;
14095dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt      } dp_read_g4x;
14105dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt
1411dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** Ironlake PRM, Volume 4 Part 1, Section 5.10.2.1.2. */
14125dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt      struct {
14135dc53444c8323c1787dddbe6b67048828df9c684Eric Anholt	 GLuint binding_table_index:8;
14142995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_control:3;
14152995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_type:3;
14162995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint target_cache:2;
14172995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad0:3;
14182995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint header_present:1;
14192995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint response_length:5;
14202995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_length:4;
14212995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad1:2;
14222995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint end_of_thread:1;
1423cdcef6cbf4dd80047819e9098e34a3b98bd502a4Zhenyu Wang      } dp_read_gen5;
14242995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
1425dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** G45 PRM, Volume 4, Section 5.10.1.1.2.  For both Gen4 and G45. */
14262995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao      struct {
14272995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint binding_table_index:8;
14289f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_control:3;
142953798f90e818e9bf213c3ae4298751362a5ecd50Kenneth Graunke	 GLuint last_render_target:1;
14309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_type:3;
14319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint send_commit_msg:1;
14329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint response_length:4;
14339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_length:4;
14349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint msg_target:4;
14359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint pad1:3;
14369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 GLuint end_of_thread:1;
14379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      } dp_write;
14389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1439dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** Ironlake PRM, Volume 4 Part 1, Section 5.10.2.1.2. */
14409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      struct {
14412995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint binding_table_index:8;
14422995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_control:3;
144353798f90e818e9bf213c3ae4298751362a5ecd50Kenneth Graunke	 GLuint last_render_target:1;
14442995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_type:3;
14452995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint send_commit_msg:1;
14462995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad0:3;
14472995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint header_present:1;
14482995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint response_length:5;
14492995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint msg_length:4;
14502995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint pad1:2;
14512995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao	 GLuint end_of_thread:1;
1452cdcef6cbf4dd80047819e9098e34a3b98bd502a4Zhenyu Wang      } dp_write_gen5;
14532995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
1454dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /**
1455dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Message for the Sandybridge Sampler Cache or Constant Cache Data Port.
1456dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *
1457dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * See the Sandybridge PRM, Volume 4 Part 1, Section 3.9.2.1.1.
1458dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       **/
145904466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang      struct {
146004466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint binding_table_index:8;
146104466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint msg_control:5;
146204466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint msg_type:3;
146304466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint pad0:3;
146404466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint header_present:1;
146504466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint response_length:5;
146604466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint msg_length:4;
146704466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint pad1:2;
146804466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint end_of_thread:1;
1469dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      } gen6_dp_sampler_const_cache;
147004466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang
1471dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /**
1472dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Message for the Sandybridge Render Cache Data Port.
1473dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *
1474dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Most fields are defined in the Sandybridge PRM, Volume 4 Part 1,
1475dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Section 3.9.2.1.1: Message Descriptor.
1476dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *
1477dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * "Slot Group Select" and "Last Render Target" are part of the
1478dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * 5-bit message control for Render Target Write messages.  See
1479dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Section 3.9.9.2.1 of the same volume.
1480dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       */
148104466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang      struct {
148204466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint binding_table_index:8;
148304466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint msg_control:3;
148404466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint slot_group_select:1;
148553798f90e818e9bf213c3ae4298751362a5ecd50Kenneth Graunke	 GLuint last_render_target:1;
148604466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint msg_type:4;
148704466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint send_commit_msg:1;
148804466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint pad0:1;
148904466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint header_present:1;
149004466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint response_length:5;
149104466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint msg_length:4;
149204466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint pad1:2;
149304466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang	 GLuint end_of_thread:1;
1494c77855d64eae45786d2d637bd065c8a700b788e5Kenneth Graunke      } gen6_dp;
149504466795511bc93e4301e71b9e0c7a9154ecf042Zhenyu Wang
1496dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /**
1497dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Message for any of the Gen7 Data Port caches.
1498dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       *
1499dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Most fields are defined in BSpec volume 5c.2 Data Port / Messages /
1500dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Data Port Messages / Message Descriptor.  Once again, "Slot Group
1501dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * Select" and "Last Render Target" are part of the 6-bit message
1502dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       * control for Render Target Writes.
1503dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke       */
1504ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke      struct {
1505ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint binding_table_index:8;
1506ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint msg_control:3;
1507ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint slot_group_select:1;
150853798f90e818e9bf213c3ae4298751362a5ecd50Kenneth Graunke	 GLuint last_render_target:1;
1509dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke	 GLuint msg_control_pad:1;
1510ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint msg_type:4;
1511ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint pad1:1;
1512ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint header_present:1;
1513ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint response_length:5;
1514ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint msg_length:4;
1515ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint pad2:2;
1516ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke	 GLuint end_of_thread:1;
1517ce526a7452abf552af38b86bd3546d6ff9a83194Kenneth Graunke      } gen7_dp;
1518dcf03e7c09378dfcc744e28f198eaf713d3a21fbKenneth Graunke      /** @} */
15192995bf0d68f1b28ba68b81e9dc79e3ab52bc2795Xiang, Haihao
15202b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt      struct {
15212b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src1_subreg_nr_high:1;
15222b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src1_reg_nr:8;
15232b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint pad0:1;
15242b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src2_rep_ctrl:1;
15252b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src2_swizzle:8;
15262b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src2_subreg_nr:3;
15272b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint src2_reg_nr:8;
15282b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt	 GLuint pad1:2;
15292b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt      } da3src;
15302b28fd6ca603df40a5d02aac4035eced3a1d079aEric Anholt
15311b9f78195f62959601d440475a6cbba5e8046813Eric Anholt      GLint d;
15329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      GLuint ud;
15331d4bace9fca64c61ccd9f4205262417fa0ae3883Eric Anholt      float f;
15349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   } bits3;
15359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt};
15369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
15379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
15389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#endif
1539