~ubuntu-branches/ubuntu/precise/mesa/precise-updates

« back to all changes in this revision

Viewing changes to src/gallium/drivers/r300/compiler/radeon_dataflow.h

  • Committer: Package Import Robot
  • Author(s): Robert Hooker
  • Date: 2012-02-02 12:05:48 UTC
  • mfrom: (1.7.1) (3.3.27 sid)
  • Revision ID: package-import@ubuntu.com-20120202120548-nvkma85jq0h4coix
Tags: 8.0~rc2-0ubuntu4
Drop drisearchdir handling, it is no longer needed with multiarch
and dri-alternates being removed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2009 Nicolai Haehnle.
 
3
 * Copyright 2010 Tom Stellard <tstellar@gmail.com>
 
4
 *
 
5
 * All Rights Reserved.
 
6
 *
 
7
 * Permission is hereby granted, free of charge, to any person obtaining
 
8
 * a copy of this software and associated documentation files (the
 
9
 * "Software"), to deal in the Software without restriction, including
 
10
 * without limitation the rights to use, copy, modify, merge, publish,
 
11
 * distribute, sublicense, and/or sell copies of the Software, and to
 
12
 * permit persons to whom the Software is furnished to do so, subject to
 
13
 * the following conditions:
 
14
 *
 
15
 * The above copyright notice and this permission notice (including the
 
16
 * next paragraph) shall be included in all copies or substantial
 
17
 * portions of the Software.
 
18
 *
 
19
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
20
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
21
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 
22
 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
 
23
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 
24
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 
25
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
26
 *
 
27
 */
 
28
 
 
29
#ifndef RADEON_DATAFLOW_H
 
30
#define RADEON_DATAFLOW_H
 
31
 
 
32
#include "radeon_program_constants.h"
 
33
 
 
34
struct radeon_compiler;
 
35
struct rc_instruction;
 
36
struct rc_swizzle_caps;
 
37
struct rc_src_register;
 
38
struct rc_pair_instruction_arg;
 
39
struct rc_pair_instruction_source;
 
40
struct rc_pair_sub_instruction;
 
41
struct rc_compiler;
 
42
 
 
43
 
 
44
/**
 
45
 * Help analyze and modify the register accesses of instructions.
 
46
 */
 
47
/*@{*/
 
48
typedef void (*rc_read_write_chan_fn)(void * userdata, struct rc_instruction * inst,
 
49
                        rc_register_file file, unsigned int index, unsigned int chan);
 
50
void rc_for_all_reads_chan(struct rc_instruction * inst, rc_read_write_chan_fn cb, void * userdata);
 
51
void rc_for_all_writes_chan(struct rc_instruction * inst, rc_read_write_chan_fn cb, void * userdata);
 
52
 
 
53
typedef void (*rc_read_write_mask_fn)(void * userdata, struct rc_instruction * inst,
 
54
                        rc_register_file file, unsigned int index, unsigned int mask);
 
55
void rc_for_all_reads_mask(struct rc_instruction * inst, rc_read_write_mask_fn cb, void * userdata);
 
56
void rc_for_all_writes_mask(struct rc_instruction * inst, rc_read_write_mask_fn cb, void * userdata);
 
57
 
 
58
typedef void (*rc_read_src_fn)(void * userdata, struct rc_instruction * inst,
 
59
                        struct rc_src_register * src);
 
60
void rc_for_all_reads_src(struct rc_instruction * inst, rc_read_src_fn cb,
 
61
                        void * userdata);
 
62
 
 
63
typedef void (*rc_pair_read_arg_fn)(void * userdata,
 
64
        struct rc_instruction * inst, struct rc_pair_instruction_arg * arg,
 
65
        struct rc_pair_instruction_source * src);
 
66
void rc_pair_for_all_reads_arg(struct rc_instruction * inst,
 
67
                                        rc_pair_read_arg_fn cb, void * userdata);
 
68
 
 
69
typedef void (*rc_remap_register_fn)(void * userdata, struct rc_instruction * inst,
 
70
                        rc_register_file * pfile, unsigned int * pindex);
 
71
void rc_remap_registers(struct rc_instruction * inst, rc_remap_register_fn cb, void * userdata);
 
72
/*@}*/
 
73
 
 
74
struct rc_reader {
 
75
        struct rc_instruction * Inst;
 
76
        unsigned int WriteMask;
 
77
        union {
 
78
                struct {
 
79
                        struct rc_src_register * Src;
 
80
                } I;
 
81
                struct {
 
82
                        struct rc_pair_instruction_arg * Arg;
 
83
                        struct rc_pair_instruction_source * Src;
 
84
                } P;
 
85
        } U;
 
86
};
 
87
 
 
88
struct rc_reader_data {
 
89
        unsigned int Abort;
 
90
        unsigned int AbortOnRead;
 
91
        unsigned int AbortOnWrite;
 
92
        unsigned int LoopDepth;
 
93
        unsigned int InElse;
 
94
        struct rc_instruction * Writer;
 
95
 
 
96
        unsigned int ReaderCount;
 
97
        unsigned int ReadersReserved;
 
98
        struct rc_reader * Readers;
 
99
 
 
100
        /* If this flag is enabled, rc_get_readers will exit as soon possbile
 
101
         * after the Abort flag is set.*/
 
102
        unsigned int ExitOnAbort;
 
103
        void * CbData;
 
104
};
 
105
 
 
106
void rc_get_readers(
 
107
        struct radeon_compiler * c,
 
108
        struct rc_instruction * writer,
 
109
        struct rc_reader_data * data,
 
110
        rc_read_src_fn read_normal_cb,
 
111
        rc_pair_read_arg_fn read_pair_cb,
 
112
        rc_read_write_mask_fn write_cb);
 
113
 
 
114
void rc_get_readers_sub(
 
115
        struct radeon_compiler * c,
 
116
        struct rc_instruction * writer,
 
117
        struct rc_pair_sub_instruction * sub_writer,
 
118
        struct rc_reader_data * data,
 
119
        rc_read_src_fn read_normal_cb,
 
120
        rc_pair_read_arg_fn read_pair_cb,
 
121
        rc_read_write_mask_fn write_cb);
 
122
/**
 
123
 * Compiler passes based on dataflow analysis.
 
124
 */
 
125
/*@{*/
 
126
typedef void (*rc_dataflow_mark_outputs_fn)(void * userdata, void * data,
 
127
                        void (*mark_fn)(void * data, unsigned int index, unsigned int mask));
 
128
void rc_dataflow_deadcode(struct radeon_compiler * c, void *user);
 
129
void rc_dataflow_swizzles(struct radeon_compiler * c, void *user);
 
130
/*@}*/
 
131
 
 
132
void rc_optimize(struct radeon_compiler * c, void *user);
 
133
 
 
134
#endif /* RADEON_DATAFLOW_H */