Age | Commit message (Collapse) | Author |
|
Broken with commit d774b0c710bb7d833d17bd12f5151a0176baad96.
Reported by Chris Rankin.
|
|
|
|
Register allocation can now reallocate temporaries right after the last indexed
source operand, instead of being disabled for the whole shader.
|
|
Those are:
- dead-code elimination
- constant folding
- peephole (mainly copy propagation)
- register allocation
There are some bugs which I need to track down.
Also fix up the descriptions of all the debug options.
|
|
And not during the register allocation, which may be skipped for debugging
purposes. Also the predicate register is now added to the number of temps.
|
|
|
|
|
|
First list compiler passes in an array, then run the new function rc_run_compiler.
Every backend may need a different set of passes.
This cleans up the mess in r3xx_compile_vertex_program.
|
|
&c->Base == c.
|
|
I need to reduce the number of parameters of each compiler pass function.
This is part of a larger cleanup.
|
|
|
|
|
|
3 more piglits, cool.
|
|
The variable loops would be used uninitialized if it ever processed a
RC_OPCODE_ENDLOOP case first.
This patch initalizes the loops variable to NULL and adds an assert at
the RC_OPCODE_ENDLOOP case that loops isn't NULL.
Silence the following GCC warning.
r3xx_vertprog.c: In function 'translate_vertex_program':
r3xx_vertprog.c:469: warning: 'loops' may be used uninitialized in this function
|
|
Wine likes to create a *lot* of constants, exceeding the size of the constant
file in hw.
|
|
Also rename "compiler" to "c".
|
|
i.e. relative addressing (mainly FS), saturate modifiers, exceeding
the maximum number of constants.
|
|
If there is relative addressing of temporaries, we cannot change register
indices, so skip register allocation entirely. To utilize register allocation
at least partially, we need separate indexable and non-indexable register
files in both TGSI and Mesa IR.
|
|
|
|
Single loops work, but nested loops do not.
|
|
|
|
The BGNLOOP and ENDLOOP instructions are now being used correctly, which
makes break and continue possible. The deadcode pass has been modified to
handle breaks, and the compiler is more careful about which loops are
unrolled.
|
|
|
|
|
|
Despite the docs, the corresponding hardware instructions are r5xx-only.
|
|
This also allows us to split the loop emulation into two phases. A
tranformation phase which either unrolls loops or prepares them to be
emulated, and the emulation phase which unrolls remaining loops until the
instruction limit is reached. The second phase is completed after the
deadcode analysis in order to get a more accurate count of the number of
instructions in the body of loops.
|
|
|
|
|
|
It is not perfect, but it is the best we got.
|
|
|
|
|
|
Fixes piglit/glsl-vs-vec4-indexing-4.
|
|
|
|
|
|
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Note that control flow instruction support isn't actually fully functional yet.
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
There were additional non-textual conflicts.
Conflicts:
src/gallium/drivers/r300/r300_tgsi_to_rc.c
src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
src/mesa/drivers/dri/r300/compiler/radeon_program.c
src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c
|
|
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
This replaces the old NQSSADCE code with the same functionality, but quite
different design. Instead of doing a single integerated pass, we now build
explicit data structures representing the dataflow.
This will enable analysis of flow control instruction, and could potentially
open an avenue for several dataflow based optimizations, such as peephole
optimization, fusing MUL+ADD to MAD, and so on.
|
|
In particular, this removes the dependency on prog_instruction, which
unfortunately creates some code duplication, but also opens a path towards
adding some hardware-specific things in there.
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Only use the macro variant of MAD when absolutely necessary.
Apparently it cannot deal with relative addressing.
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
|
|
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Instead of setting Sourced, we simply force writemasks to begin with.
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|
|
Adding constants is used in a number of non-native instruction
rewrites, and it required us to keep copies of modified gl_programs
around. This is a first step towards ending this.
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
|