| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
For a shader involving many small functions, this avoids running
optimization across all of them after they've been inlined
post-linking.
Reduces the runtime of linking and running a fragment shader from Yo
Frankie from 1.6 seconds to 0.9 seconds (-44.9%, +/- 3.3%).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I introduced this for ir_dead_code to distinguish function parameter
outvals from varying outputs. Only, since ast_to_hir's
current_function is unset when setting up function parameters (they're
needed for making the function signature in the first place), all
function parameter outvals were marked as shader outputs anyway. This
meant that an inlined function's cloned outval was marked as a shader
output and couldn't be dead-code eliminated. Instead, since
ir_dead_code doesn't even look at function parameters, just use
var->mode.
The longest Mesa IR coming out of ir_to_mesa for Yo Frankie drops from
725 instructions to 636.
|
| |
|
|
|
|
|
|
| |
Mesa will do the mapping at _mesa_add_sampler() time. Fixes assertion
failures in debug builds, which might have caught real problems with
multiple samplers linked in a row.
|
|
|
|
|
|
|
| |
In most cases, we needed to be reparenting the cloned IR to a
different context (for example, to the linked shader instead of the
unlinked shader), or optimization before the reparent would cause
memory usage of the original object to grow and grow.
|
| |
|
|
|
|
|
| |
Linking brings in inlining of builtins, so we weren't catching the
(rcp(/sqrt(x)) -> rsq(x)) without it.
|
| |
|
| |
|
|
|
|
|
|
| |
Fixes:
glsl1-varying read but not written
glsl1-varying var mismatch
|
|
|
|
|
| |
This fixes an assertion failure in ir_to_mesa, and the varying won't
take up varying space.
|
|
|
|
|
|
| |
I managed to revert the change from unlinked at some point while
cleaning up the changes. glsl-fs-raytrace-bug27060 drops from 389
instructions to 370.
|
|
|
|
|
| |
glsl-fs-raytrace-bug27060 goes from 485 Mesa IR instructions to 389
before Mesa IR optimization.
|
|
|
|
|
|
|
|
|
|
|
| |
This pulls in multiple i965 driver fixes which will help ensure better
testing coverage during development, and also gets past the conflicts
of the src/mesa/shader -> src/mesa/program move.
Conflicts:
src/mesa/Makefile
src/mesa/main/shaderapi.c
src/mesa/main/shaderobj.h
|
|
|
|
|
|
|
|
| |
This is an invasive set of changes. Each user shader tracks a set of other
shaders that contain built-in functions. During compilation, function
prototypes are imported from these shaders. During linking, the
shaders are linked with these built-in-function shaders just like with
any other shader.
|
|
|
|
| |
The lowering code should probably be moved elsewhere.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is quite a large patch because breaking it into smaller pieces
would result in the tree being intermitently broken. The big changes
are:
* Add the ir_var_temporary variable mode
* Change the ir_variable constructor to take the mode as a
parameter and correctly specify the mode for all ir_varables.
* Change the linker to not cross validate ir_var_temporary
variables.
* Change the linker to pull all ir_var_temporary variables from
global scope into 'main'.
|
| |
|
|
|
|
| |
This is now handled in link_intrastage_shaders.
|
| |
|
| |
|
|
|
|
|
|
| |
This handles the easy case of linking a function in a different
compilation unit that doesn't call any functions or reference any
global variables.
|
| |
|
|
|
|
|
|
| |
The node being processed may be removed from the list and put in a
different list. Not using the safe version caused list processing to
change streams after moving a node.
|
|
|
|
|
|
| |
For the shader containing 'main', use the linked shader (i.e., the
clone of the original shader that contained main) as the source for
global instructions to move into main.
|
|
|
|
|
| |
This almost fixes glsl-unused-varying, except that the used varying
gets assigned to the first varying slot (position).
|
| |
|
|
|
|
|
|
|
|
| |
Find instructions in all shaders that are not contained in a function
(i.e., initializers for global variables). "Move" these instructions
to the top of the main function in the linked shader. As a
side-effect, many global variables will also be copied into the linked
shader.
|
| |
|
|
|
|
|
|
|
| |
This currently involves an ugly hack so that every link doesn't result
in all the built-in functions showing up as multiply defined. As soon
as the built-in functions are stored in a separate compilation unit,
ir_function_signature::is_built_in can be removed.
|
|
|
|
| |
The later, more generic function will be used in the intra-stage linker.
|
| |
|
|
|
|
|
|
| |
Uses of the bits for allocation are offset by 16, and
VERT_BIT_GENERIC0 already has the 16 offset. As a result, it was
preventing the wrong thing from being allocated.
|
|
|
|
|
|
| |
I can't find any text justifying this check, and it caused a
reasonable-looking shader in glsl-bug-22603 (which writes only
gl_FragDepth) to fail.
|
|
|
|
|
| |
The can be at most one shader per stage. There are currently only two
stages. There is zero reason to dynamically size this array.
|
| |
|
|
|
|
| |
This avoids more allocation and shuffling of data around.
|
|
|
|
|
| |
This saves recompiling at link time. gl_shader->ir is made a pointer
so that we don't have to bring exec_list into mtypes.h.
|
| |
|
|
|