summaryrefslogtreecommitdiff
path: root/src/mesa/program
AgeCommit message (Collapse)Author
2010-08-09glsl2: Add constant propagation.Eric Anholt
Whereas constant folding evaluates constant expressions at rvalue nodes, constant propagation tracks constant components of vectors across execution to replace (possibly swizzled) variable dereferences with constant values, triggering possible constant folding or reduced variable liveness.
2010-08-06glsl2: Move gl_program->InputsRead/OutputsWritten setting to an ir pass.Eric Anholt
This lets us handle arrays much better than trying to work backwards from assembly. Fixes fbo-drawbuffers-maxtargets on swrast (i965 needs loop unrolling)
2010-08-06ir_to_mesa: Add support for sampler arrays.Eric Anholt
Support for samplers in general is still incomplete -- anything in a uniform struct will still be broken. But that doesn't appear to be any different from master. Fixes: glsl-fs-uniform-sampler-array.shader_test
2010-08-06glsl2: Don't assert in a couple of places when encountering sampler arrays.Eric Anholt
Fixes glean shaderAPI.
2010-08-06ir_to_mesa: Give the expected size for _mesa_add_attribute().Eric Anholt
Fixes a failure in glean shaderAPI.
2010-08-05ir_to_mesa: Handle texture-array samplersIan Romanick
Fixes piglit test array_texture.
2010-08-05glsl2: Add a pass to convert exp and log to exp2 and log2.Eric Anholt
Fixes ir_to_mesa handling of unop_log, which used the weird ARB_vp LOG opcode that doesn't do what we want. This also lets the multiplication coefficients in there get constant-folded, possibly. Fixes: glsl-fs-log
2010-08-05ir_to_mesa: Don't do function inlining until linking.Eric Anholt
Optimizations at compile time should generally be done with the goal of reducing instruction count so that other work, particularly linking, is less time-consuming if the shader is used multiple times. However, function inlining increases instruction count for the inlined function bodies without removing the original function body, since we don't know if it will be used at link time or not. Reduces the runtime of linking and executing a Yo Frankie fragment shader from 0.9 seconds to 0.5 seconds (-45.9%, +/- 2.2%, n=5).
2010-08-05glsl2: Don't try to dump GLSL IR for a shader that didn't compile.Eric Anholt
2010-08-05ir_to_mesa: Remove debug force-enablement of EmitNoIfs.Eric Anholt
2010-08-04i965: Settle on printing our program debug to stdout.Eric Anholt
Mixing stderr (_mesa_print_program, _mesa_print_instruction, _mesa_print_alu) with stdout means that when writing both to a file, there isn't a consistent ordering between the two.
2010-08-04ir_to_mesa: Print shader source and compiled IR under MESA_GLSL=dump.Eric Anholt
While the Mesa IR dumping includes some corresponding GLSL IR for correlating Mesa IR to GLSL IR, it doesn't completely express it. This printing includes things like variable declarations and control flow structure that is hard to read otherwise.
2010-08-04glsl2: Add ir_assignment::write_mask and associated methodsIan Romanick
Replace swizzles on the LHS with additional swizzles on the RHS and a write mask in the assignment instruction. As part of this add ir_assignment::set_lhs. Ideally we'd make ir_assignment::lhs private to prevent erroneous writes, but that would require a lot of code butchery at this point. Add ir_assignment constructor that takes an explicit write mask. This is required for ir_assignment::clone, but it can also be used in other places. Without this, ir_assignment clones lose their write masks, and incorrect IR is generated in optimization passes. Add ir_assignment::whole_variable_written method. This method gets the variable on the LHS if the whole variable is written or NULL otherwise. This is different from ir->lhs->whole_variable_referenced() because the latter has no knowledge of the write mask stored in the ir_assignment. Gut all code from ir_to_mesa that handled swizzles on the LHS of assignments. There is probably some other refactoring that could be done here, but that can be left for another day.
2010-08-04ir_to_mesa: Clean up the mapping of samplers to Mesa's sampler uniforms.Eric Anholt
Instead of using a linker-assigned location (since samplers don't actually take up uniform space, being a link-time choice), use the sampler's varaible pointer as a hash key.
2010-08-04mesa: Don't null deref looking for Mesa IR code at compile time.Eric Anholt
The new compiler doesn't generate Mesa IR at compile time, and that compile time code previously wouldn't have reflected the link time code that actually got used. But do dump the info log of the compile regardless.
2010-08-04glsl2: Skip talloc_parent in constant_expression of non-constant arrays.Eric Anholt
2010-08-04mesa: increase the relative address offset limit to 4096 in ARB_vp/fpMarek Olšák
Even though the spec says that the limits should be -64/+63, proprietary drivers support much larger relative offsets and some applications do depend on this non-standard behavior. Also program_parse.tab.c has been regenerated. This fixes the parser error: ARB_vp: error: relative address offset too large See also: https://bugs.freedesktop.org/show_bug.cgi?id=28628 4096 * sizeof(vec4) is the maximum size of the constant buffer on NV50. It is not supposed to be a definite hardware limit, it is for the parser not to get in the way and let the underlying driver decide whether it can run the shader or not.
2010-08-02ir_to_mesa: Add support for 1.20 uniform initializers.Eric Anholt
Fixes: glsl-uniform-initializer-1 glsl-uniform-initializer-2 glsl-uniform-initializer-3 glsl-uniform-initializer-4 glsl1-GLSL 1.20 uniform array constructor
2010-08-02Initialize a couple of HasIndex2 fields on Mesa IR src regs.Eric Anholt
2010-08-02ir_to_mesa: Support for struct uniforms.Eric Anholt
Fixes glsl-uniform-struct.
2010-08-02ir_to_mesa: Add a constructor for ir_to_mesa_src_reg.Eric Anholt
This helps makes sure we don't miss any new fields, and makes totally uninitialized src_regs be PROGRAM_UNDEFINED.
2010-08-02Keep a local copy of the symbol name in the symbol tableIan Romanick
The symbol_header structure that tracks symbols with a particular name may have a different (longer) life time than the symbols it tracks. Not keeping a local copy of the name can lead to use-after-free errors. For example, the following sequence would trigger such an error: char *copy = strdup(name); _mesa_symbol_table_push_scope(st); _mesa_symbol_table_add_symbol(st, 0, name, NULL); _mesa_symbol_table_pop_scope(st); free(name); _mesa_symbol_table_find_symbol(st, 0, copy); With this change, the symbol table keeps a local copy of the name that has the same life time as the symbol_header for that name. This resolves some use-after-free errors with built-in functions in the GLSL compiler.
2010-08-01ir_to_mesa: Add support for MESA_GLSL=log.Eric Anholt
This is the option that dumps shader source to files in the current directory.
2010-07-31mesa: Remove inclusion of compiler.h from mtypes.h.Vinson Lee
mtypes.h does not use any symbols from compiler.h. Also add the required headers for files that depended on symbols from compiler.h but were indirectly including compiler.h through mtypes.h.
2010-07-31glsl2: Add new tree grafting optimization pass.Eric Anholt
2010-07-31mesa: Remove unnecessary headers.Vinson Lee
2010-07-30ir_to_mesa: Add the function name as a comment to BGNSUB and ENDSUB.Eric Anholt
2010-07-30mesa: added gl_program::IndirectRegisterFiles fieldBrian Paul
Now drivers, etc. can know which register files are accessed with indirect addressing. Before we just checked gl_program::NumAddressRegs but didn't know if that was the constant buffer, temp regs, or what. The only user of this new field so far will be the gallium state tracker.
2010-07-30mesa: Include macros.h in files that use symbols from macros.h.Vinson Lee
Don't rely on inclusion of other files that already include macros.h.
2010-07-29ir_to_mesa: Don't emit a duplicate return at the end of a function.Eric Anholt
It was harmless, but ugly.
2010-07-29mesa: implement RCC opcodeBrian Paul
2010-07-29mesa: update table of opcodes used by GLSLBrian Paul
2010-07-28ir_to_mesa: Respect the driver if it rejects a shader.Eric Anholt
2010-07-28glsl2: Add support for redeclaring layout of gl_FragCoord for ARB_fcc.Eric Anholt
Fixes: glsl-arb-fragment-coord-conventions
2010-07-28ir_to_mesa: Add remaining state variable (builtin uniforms) support.Eric Anholt
Fixes: glsl1-GL state variable reference (diffuse product) glsl1-GL state variable reference (gl_FrontMaterial.ambient) glsl1-GL state variable reference (gl_LightSource[0].diffuse) glsl1-GL state variable reference (point attenuation) glsl1-GL state variable reference (point size) glsl1-linear fog
2010-07-27ir_to_mesa: Provide a restricted type size to _mesa_add_uniform.Eric Anholt
Fixes: glsl-uniform-out-of-bounds.
2010-07-27ir_to_mesa: Add support for array constants.Eric Anholt
Fixes: glsl1-GLSL 1.20 array constructor 1 glsl1-GLSL 1.20 array constructor 2 glsl1-GLSL 1.20 array.length() glsl1-GLSL 1.20 const array constructor 1 glsl1-GLSL 1.20 const array constructor 2
2010-07-27glsl2: Make the dead code handler make its own talloc context.Eric Anholt
This way, we don't need to pass in a parse state, and the context doesn't grow with the number of passes through optimization.
2010-07-27mesa: Allow large temporary indices coming into the temporary reg allocator.Eric Anholt
This gets glsl-vs-raytrace, glsl-fs-raytrace running on the new compiler.
2010-07-27ir_to_mesa: Set the swizzle on constant struct src regs.Eric Anholt
MESA_GLSL=nopt now produces believable output for glsl-fs-raytrace.
2010-07-27ir_to_mesa: Fix stray "break" that broke functions of >1 argument.Eric Anholt
2010-07-27glsl2: Add optimization pass for algebraic simplifications.Eric Anholt
This cleans up the assembly output of almost all the non-logic tests glsl-algebraic-*. glsl-algebraic-pow-two needs love (basically, flattening to a temporary and squaring it).
2010-07-26ir_to_mesa: Fix up handling of void function returns.Eric Anholt
void functions have a type of glsl_type::void_type, not a null type.
2010-07-26ir_to_mesa: Actually allocate the right size for constant matrix temps.Eric Anholt
2010-07-26ir_to_mesa: Add support for structure constants.Eric Anholt
Fixes: TPPStreamCompiler::assignOperands
2010-07-26Merge remote branch 'origin/master' into glsl2Eric Anholt
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
2010-07-21Regenerate program/lex.yy.cCarl Worth
Based on the two recent changes to program_lexer.l.
2010-07-21Avoid more warnings in flex-generated code.Carl Worth
This avoids two "function defined but not used" warnings. For the yyinput function we define YY_NO_INPUT which tells flex to simply not generate this function. For unput, we add a call to this function, but inside a while(0) so that it will quiet the warning without actually changing any functionality.
2010-07-21Avoid warnings in flex-generated code.Carl Worth
Add declarations for two functions generated in the flex ouput. It would be nicer if flex simply declared these generated functions as static, but for now we can at least avoid the warning this way.
2010-07-13mesa: add comments and change Index2D to just Index2Zack Rusin