Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4358 | Serge | 1 | /* |
2 | Copyright (C) Intel Corp. 2006. All Rights Reserved. |
||
3 | Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to |
||
4 | develop this 3D driver. |
||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining |
||
7 | a copy of this software and associated documentation files (the |
||
8 | "Software"), to deal in the Software without restriction, including |
||
9 | without limitation the rights to use, copy, modify, merge, publish, |
||
10 | distribute, sublicense, and/or sell copies of the Software, and to |
||
11 | permit persons to whom the Software is furnished to do so, subject to |
||
12 | the following conditions: |
||
13 | |||
14 | The above copyright notice and this permission notice (including the |
||
15 | next paragraph) shall be included in all copies or substantial |
||
16 | portions of the Software. |
||
17 | |||
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||
19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||
20 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||
21 | IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE |
||
22 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
||
23 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
||
24 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||
25 | |||
26 | **********************************************************************/ |
||
27 | /* |
||
28 | * Authors: |
||
29 | * Keith Whitwell |
||
30 | */ |
||
31 | |||
32 | |||
33 | #ifndef BRW_WM_H |
||
34 | #define BRW_WM_H |
||
35 | |||
36 | #include |
||
37 | |||
38 | #include "program/prog_instruction.h" |
||
39 | #include "brw_context.h" |
||
40 | #include "brw_eu.h" |
||
41 | #include "brw_program.h" |
||
42 | |||
43 | /* A big lookup table is used to figure out which and how many |
||
44 | * additional regs will inserted before the main payload in the WM |
||
45 | * program execution. These mainly relate to depth and stencil |
||
46 | * processing and the early-depth-test optimization. |
||
47 | */ |
||
48 | #define IZ_PS_KILL_ALPHATEST_BIT 0x1 |
||
49 | #define IZ_PS_COMPUTES_DEPTH_BIT 0x2 |
||
50 | #define IZ_DEPTH_WRITE_ENABLE_BIT 0x4 |
||
51 | #define IZ_DEPTH_TEST_ENABLE_BIT 0x8 |
||
52 | #define IZ_STENCIL_WRITE_ENABLE_BIT 0x10 |
||
53 | #define IZ_STENCIL_TEST_ENABLE_BIT 0x20 |
||
54 | #define IZ_BIT_MAX 0x40 |
||
55 | |||
56 | #define AA_NEVER 0 |
||
57 | #define AA_SOMETIMES 1 |
||
58 | #define AA_ALWAYS 2 |
||
59 | |||
60 | struct brw_wm_prog_key { |
||
61 | uint8_t iz_lookup; |
||
62 | GLuint stats_wm:1; |
||
63 | GLuint flat_shade:1; |
||
64 | GLuint nr_color_regions:5; |
||
65 | GLuint replicate_alpha:1; |
||
66 | GLuint render_to_fbo:1; |
||
67 | GLuint clamp_fragment_color:1; |
||
68 | GLuint line_aa:2; |
||
69 | |||
70 | GLushort drawable_height; |
||
71 | GLbitfield64 input_slots_valid; |
||
72 | GLuint program_string_id:32; |
||
73 | |||
74 | struct brw_sampler_prog_key_data tex; |
||
75 | }; |
||
76 | |||
77 | struct brw_wm_compile { |
||
78 | struct brw_wm_prog_key key; |
||
79 | struct brw_wm_prog_data prog_data; |
||
80 | |||
81 | uint8_t source_depth_reg; |
||
82 | uint8_t source_w_reg; |
||
83 | uint8_t aa_dest_stencil_reg; |
||
84 | uint8_t dest_depth_reg; |
||
85 | uint8_t barycentric_coord_reg[BRW_WM_BARYCENTRIC_INTERP_MODE_COUNT]; |
||
86 | uint8_t nr_payload_regs; |
||
87 | GLuint source_depth_to_render_target:1; |
||
88 | GLuint runtime_check_aads_emit:1; |
||
89 | |||
90 | GLuint last_scratch; |
||
91 | }; |
||
92 | |||
93 | /** |
||
94 | * Compile a fragment shader. |
||
95 | * |
||
96 | * Returns the final assembly and the program's size. |
||
97 | */ |
||
98 | const unsigned *brw_wm_fs_emit(struct brw_context *brw, |
||
99 | struct brw_wm_compile *c, |
||
100 | struct gl_fragment_program *fp, |
||
101 | struct gl_shader_program *prog, |
||
102 | unsigned *final_assembly_size); |
||
103 | |||
104 | GLboolean brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); |
||
105 | struct gl_shader *brw_new_shader(struct gl_context *ctx, GLuint name, GLuint type); |
||
106 | struct gl_shader_program *brw_new_shader_program(struct gl_context *ctx, GLuint name); |
||
107 | |||
108 | bool brw_color_buffer_write_enabled(struct brw_context *brw); |
||
109 | bool do_wm_prog(struct brw_context *brw, |
||
110 | struct gl_shader_program *prog, |
||
111 | struct brw_fragment_program *fp, |
||
112 | struct brw_wm_prog_key *key); |
||
113 | void brw_wm_debug_recompile(struct brw_context *brw, |
||
114 | struct gl_shader_program *prog, |
||
115 | const struct brw_wm_prog_key *key); |
||
116 | bool brw_wm_prog_data_compare(const void *a, const void *b, |
||
117 | int aux_size, const void *key); |
||
118 | void brw_wm_prog_data_free(const void *in_prog_data); |
||
119 | |||
120 | #endif |