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