2011-10-30 19:28:35 +08:00
|
|
|
# shared source lists for Makefile, SConscript, and Android.mk
|
|
|
|
|
|
2012-07-19 12:30:10 +10:00
|
|
|
GLSL_SRCDIR = $(top_srcdir)/src/glsl
|
|
|
|
|
GLSL_BUILDDIR = $(top_builddir)/src/glsl
|
2012-06-11 19:38:07 +01:00
|
|
|
|
2011-10-30 19:28:35 +08:00
|
|
|
# libglcpp
|
|
|
|
|
|
2012-05-29 14:45:10 -07:00
|
|
|
LIBGLCPP_FILES = \
|
2013-01-14 22:00:08 -08:00
|
|
|
$(GLSL_SRCDIR)/ralloc.c \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/glcpp/pp.c
|
2011-10-30 19:28:35 +08:00
|
|
|
|
2012-05-29 14:45:10 -07:00
|
|
|
LIBGLCPP_GENERATED_FILES = \
|
2012-07-19 12:30:10 +10:00
|
|
|
$(GLSL_BUILDDIR)/glcpp/glcpp-lex.c \
|
|
|
|
|
$(GLSL_BUILDDIR)/glcpp/glcpp-parse.c
|
2011-10-30 19:28:35 +08:00
|
|
|
|
|
|
|
|
# libglsl
|
|
|
|
|
|
2012-05-29 14:45:10 -07:00
|
|
|
LIBGLSL_FILES = \
|
2013-03-15 14:10:12 -07:00
|
|
|
$(GLSL_SRCDIR)/ast_array_index.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/ast_expr.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ast_function.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ast_to_hir.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ast_type.cpp \
|
2013-08-29 23:06:39 -07:00
|
|
|
$(GLSL_SRCDIR)/builtin_functions.cpp \
|
glsl: Streamline the built-in type handling code.
Over the last few years, the compiler has grown to support 7 different
language versions and 6 extensions that add new built-in types. With
more and more features being added, some of our core code has devolved
into an unmaintainable spaghetti of sorts.
A few problems with the old code:
1. Built-in types are declared...where exactly?
The types in builtin_types.h were organized in arrays by the language
version or extension they were introduced in. It's factored out to
avoid duplicates---every type only exists in one array. But that
means that sampler1D is declared in 110, sampler2D is in core types,
sampler3D is a unique global not in a list...and so on.
2. Spaghetti call-chains with weird parameters:
generate_300ES_types calls generate_130_types which calls
generate_120_types and generate_EXT_texture_array_types, which calls
generate_110_types, which calls generate_100ES_types...and more
Except that ES doesn't want 1D types, so we have a skip_1d parameter.
add_deprecated also falls into this category.
3. Missing type accessors.
Common types have convenience pointers (like glsl_type::vec4_type),
but others may not be accessible at all without a symbol table (for
example, sampler types).
4. Global variable declarations in a header file?
#include "builtin_types.h" in two C++ files would break the build.
The new code addresses these problems. All built-in types are declared
together in a single table, independent of when they were introduced.
The macro that declares a new built-in type also creates a convenience
pointer, so every type is available and it won't get out of sync.
The code to populate a symbol table with the appropriate types for a
particular language version and set of extensions is now a single
table-driven function. The table lists the type name and GL/ES versions
when it was introduced (similar to how the lexer handles reserved
words). A single loop adds types based on the language version.
Explicit extension checks then add additional types. If they were
already added based on the language version, glsl_symbol_table simply
ignores the request to add them a second time, meaning we don't need
to worry about duplicates and can simply list types where they belong.
v2: Mark uvecs and shadow samplers as ES3 only, and 1DArrayShadow as
unsupported in ES entirely. Add a touch more doxygen.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
2013-06-18 04:22:33 -07:00
|
|
|
$(GLSL_SRCDIR)/builtin_types.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/builtin_variables.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/glsl_parser_extras.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/glsl_types.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/glsl_symbol_table.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/hir_field_selection.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_basic_block.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_builder.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_clone.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_constant_expression.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir.cpp \
|
2013-10-30 23:56:18 -07:00
|
|
|
$(GLSL_SRCDIR)/ir_equals.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/ir_expression_flattening.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_function_can_inline.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_function_detect_recursion.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_function.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_hierarchical_visitor.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_hv_accept.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_import_prototypes.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_print_visitor.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_reader.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_rvalue_visitor.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_set_program_inouts.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_validate.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/ir_variable_refcount.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/linker.cpp \
|
2013-09-11 12:14:46 -07:00
|
|
|
$(GLSL_SRCDIR)/link_atomics.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/link_functions.cpp \
|
2013-05-20 23:42:49 -07:00
|
|
|
$(GLSL_SRCDIR)/link_interface_blocks.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/link_uniforms.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/link_uniform_initializers.cpp \
|
2013-01-21 17:33:47 -05:00
|
|
|
$(GLSL_SRCDIR)/link_uniform_block_active_visitor.cpp \
|
2012-12-13 02:25:34 -08:00
|
|
|
$(GLSL_SRCDIR)/link_uniform_blocks.cpp \
|
2012-12-17 14:20:35 -08:00
|
|
|
$(GLSL_SRCDIR)/link_varyings.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/loop_analysis.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/loop_controls.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/loop_unroll.cpp \
|
glsl/loops: consolidate bounded loop handling into a lowering pass.
Previously, all of the back-ends (ir_to_mesa, st_glsl_to_tgsi, and the
i965 fs and vec4 visitors) had nearly identical logic for handling
bounded loops. This replaces the duplicate logic with an equivalent
lowering pass that is used by all the back-ends.
Note: on i965, there is a slight increase in instruction count. For
example, a loop like this:
for (int i = 0; i < 100; i++) {
total += i;
}
would previously compile down to this (vec4) native code:
mov(8) g4<1>.xD 0D
mov(8) g8<1>.xD 0D
loop:
cmp.ge.f0(8) null g8<4;4,1>.xD 100D
(+f0) break(8)
add(8) g5<1>.xD g5<4;4,1>.xD g4<4;4,1>.xD
add(8) g8<1>.xD g8<4;4,1>.xD 1D
add(8) g4<1>.xD g4<4;4,1>.xD 1D
while(8) loop
After this patch, the "(+f0) break(8)" turns into:
(+f0) if(8)
break(8)
endif(8)
because the back-end isn't smart enough to recognize that "if
(condition) break;" can be done using a conditional break instruction.
However, it should be relatively easy for a future peephole
optimization to properly optimize this.
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
2013-11-27 17:57:19 -08:00
|
|
|
$(GLSL_SRCDIR)/lower_bounded_loops.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/lower_clip_distance.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_discard.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_discard_flow.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_if_to_cond_assign.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_instructions.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_jumps.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_mat_op_to_vec.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_noise.cpp \
|
2012-12-09 15:25:38 -08:00
|
|
|
$(GLSL_SRCDIR)/lower_packed_varyings.cpp \
|
2013-03-10 03:20:03 -07:00
|
|
|
$(GLSL_SRCDIR)/lower_named_interface_blocks.cpp \
|
2012-11-19 15:15:32 -08:00
|
|
|
$(GLSL_SRCDIR)/lower_packing_builtins.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/lower_texture_projection.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_variable_index_to_cond_assign.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_vec_index_to_cond_assign.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_vec_index_to_swizzle.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/lower_vector.cpp \
|
2013-03-18 14:45:53 -07:00
|
|
|
$(GLSL_SRCDIR)/lower_vector_insert.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/lower_output_reads.cpp \
|
2012-07-11 08:26:31 -07:00
|
|
|
$(GLSL_SRCDIR)/lower_ubo_reference.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/opt_algebraic.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_array_splitting.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_constant_folding.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_constant_propagation.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_constant_variable.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_copy_propagation.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_copy_propagation_elements.cpp \
|
glsl: Add a CSE pass.
This only operates on constant/uniform values for now, because otherwise I'd
have to deal with killing my available CSE entries when assignments happen,
and getting even this working in the tree ir was painful enough.
As is, it has the following effect in shader-db:
total instructions in shared programs: 1524077 -> 1521964 (-0.14%)
instructions in affected programs: 50629 -> 48516 (-4.17%)
GAINED: 0
LOST: 0
And, for tropics, that accounts for most of the effect, the FPS
improvement is 11.67% +/- 0.72% (n=3).
v2: Use read_only field of the variable, manually check the lod_info union
members, use get_num_operands(), rename cse_operands_visitor to
is_cse_candidate_visitor, move all is-a-candidate logic to that
function, and call it before checking for CSE on a given rvalue, more
comments, use private keyword.
Reviewed-by: Paul Berry <stereotype441@gmail.com>
2013-10-17 10:28:40 -07:00
|
|
|
$(GLSL_SRCDIR)/opt_cse.cpp \
|
2013-06-12 13:23:48 +02:00
|
|
|
$(GLSL_SRCDIR)/opt_dead_builtin_varyings.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/opt_dead_code.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_dead_code_local.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_dead_functions.cpp \
|
2013-04-03 23:56:57 -07:00
|
|
|
$(GLSL_SRCDIR)/opt_flatten_nested_if_blocks.cpp \
|
2013-04-17 17:30:25 -07:00
|
|
|
$(GLSL_SRCDIR)/opt_flip_matrices.cpp \
|
2012-05-29 14:45:10 -07:00
|
|
|
$(GLSL_SRCDIR)/opt_function_inlining.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_if_simplification.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_noop_swizzle.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_redundant_jumps.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_structure_splitting.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_swizzle_swizzle.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/opt_tree_grafting.cpp \
|
2012-11-06 23:18:38 -08:00
|
|
|
$(GLSL_SRCDIR)/s_expression.cpp \
|
2013-01-14 22:00:08 -08:00
|
|
|
$(GLSL_SRCDIR)/strtod.c
|
2011-10-30 19:28:35 +08:00
|
|
|
|
|
|
|
|
# glsl_compiler
|
|
|
|
|
|
2012-05-29 14:45:10 -07:00
|
|
|
GLSL_COMPILER_CXX_FILES = \
|
|
|
|
|
$(GLSL_SRCDIR)/standalone_scaffolding.cpp \
|
|
|
|
|
$(GLSL_SRCDIR)/main.cpp
|
2011-10-30 19:28:35 +08:00
|
|
|
|
|
|
|
|
# libglsl generated sources
|
2012-05-29 14:45:10 -07:00
|
|
|
LIBGLSL_GENERATED_CXX_FILES = \
|
2013-09-03 21:22:17 -07:00
|
|
|
$(GLSL_BUILDDIR)/glsl_lexer.cpp \
|
|
|
|
|
$(GLSL_BUILDDIR)/glsl_parser.cpp
|