diff options
author | Kenneth Graunke <[email protected]> | 2012-11-09 01:05:47 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2012-11-26 19:52:34 -0800 |
commit | ea681a0d64ecde3a2e729fe3b71d3f3fe4cedff0 (patch) | |
tree | 32677af9a4e3703a806cb5369da87500ec02a7a4 /src/mesa/drivers/dri/r200 | |
parent | dd1fd300473bd58929e5a1b1a5e5a0e82af9d7cf (diff) |
i965/fs: Split final assembly code generation out of fs_visitor.
Compiling shaders requires several main steps:
1. Generating FS IR from either GLSL IR or Mesa IR
2. Optimizing the IR
3. Register allocation
4. Generating assembly code
This patch splits out step 4 into a separate class named "fs_generator."
There are several reasons for doing so:
1. Future hardware has a different instruction encoding. Splitting
this out will allow us to replace fs_generator (which relies
heavily on the brw_eu_emit.c code and struct brw_instruction) with
a new code generator that writes the new format.
2. It reduces the size of the fs_visitor monolith. (Arguably, a lot
more should be split out, but that's left for "future work.")
3. Separate namespaces allow us to make helper functions for
generating instructions in both classes: ADD() can exist in
fs_visitor and create IR, while ADD() in fs_generator() can
create brw_instructions. (Patches for this upcoming.)
Furthermore, this patch changes the order of operations slightly.
Rather than doing steps 1-4 for SIMD8, then 1-4 for SIMD16, we now:
- Do steps 1-3 for SIMD8, then repeat 1-3 for SIMD16
- Generate final assembly code for both modes together
This is because the frontend work can be done independently, but final
assembly generation needs to pack both into a single program store to
feed the GPU.
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Paul Berry <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/r200')
0 files changed, 0 insertions, 0 deletions