1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Copyright (C) Intel Corp.  2006.  All Rights Reserved.
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org develop this 3D driver.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Permission is hereby granted, free of charge, to any person obtaining
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org a copy of this software and associated documentation files (the
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "Software"), to deal in the Software without restriction, including
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org without limitation the rights to use, copy, modify, merge, publish,
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org distribute, sublicense, and/or sell copies of the Software, and to
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org permit persons to whom the Software is furnished to do so, subject to
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org the following conditions:
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org The above copyright notice and this permission notice (including the
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org next paragraph) shall be included in all copies or substantial
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org portions of the Software.
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **********************************************************************/
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  * Authors:
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  *   Keith Whitwell <keith@tungstengraphics.com>
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  */
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef BRW_SF_H
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_SF_H
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "program/program.h"
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "brw_context.h"
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "brw_eu.h"
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SF_POINTS    0
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SF_LINES     1
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SF_TRIANGLES 2
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SF_UNFILLED_TRIS   3
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_sf_prog_key {
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLbitfield64 attrs;
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint8_t point_sprite_coord_replace;
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint primitive:2;
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint do_twoside_color:1;
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint do_flat_shading:1;
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint frontface_ccw:1;
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint do_point_sprite:1;
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint do_point_coord:1;
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint sprite_origin_lower_left:1;
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint userclip_active:1;
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_sf_compile {
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_compile func;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_sf_prog_key key;
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_sf_prog_data prog_data;
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg pv;
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg det;
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg dx0;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg dx2;
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg dy0;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg dy2;
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* z and 1/w passed in seperately:
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg z[3];
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg inv_w[3];
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* The vertices:
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg vert[3];
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /* Temporaries, allocated after last vertex reg.
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg inv_det;
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg a1_sub_a0;
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg a2_sub_a0;
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg tmp;
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg m1Cx;
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg m2Cy;
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_reg m3C0;
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint nr_verts;
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint nr_attr_regs;
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint nr_setup_regs;
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int urb_entry_read_offset;
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct brw_vue_map vue_map;
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_emit_tri_setup( struct brw_sf_compile *c, bool allocate );
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_emit_line_setup( struct brw_sf_compile *c, bool allocate );
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_emit_point_setup( struct brw_sf_compile *c, bool allocate );
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_emit_point_sprite_setup( struct brw_sf_compile *c, bool allocate );
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_emit_anyprim_setup( struct brw_sf_compile *c );
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint brw_sf_compute_urb_entry_read_offset(struct intel_context *intel);
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
109