summaryrefslogtreecommitdiff
path: root/src/mesa/shader/slang/slang_emit.c
AgeCommit message (Collapse)Author
2009-01-08mesa: Add _mesa_snprintf.José Fonseca
On Windows snprintf is renamed as _snprintf.
2009-01-02mesa: fix warning about possibly undefined var in GLSL compilerBrian Paul
2009-01-02mesa: fix another "out of samplers" problemBrian Paul
Now only the samplers that are actually used by texture() functions are saved in the uniform variable list. Before, we could run out of samplers if too many were declared while only some of them were actually used.
2008-12-30mesa: fix bug in evaluation of structure fieldsBrian Paul
Fixes incorrect size information. See bug 19273.
2008-12-30mesa: allow variable indexing into the predefined uniform variable arraysBrian Paul
This allows code such as "vec4 a = gl_LightSource[i].ambient;" to work. When a built-in uniform array is indexed with a variable index we need to "unroll" the whole array into the parameter list (aka constant buffer) because we don't know which elements may be accessed at compile-time. In the case of the gl_LightSource array of size [8], we emit 64 state references into the parameter array (8 elements times 8 vec4s per gl_LightSourceParameters struct). Previously, we only allowed constant-indexed references to uniform arrays (such as gl_LightSource[2].position) which resulted in a single state reference being added to the parameter array, not 64. We still optimize this case. Users should be aware that using "gl_LightSource[i].ambient" in their shaders is a bit expensive since state validation will involve updating all 64 light source entries in the parameter list.
2008-12-16mesa: fix some GLSL array regressionsBrian Paul
array.length() wasn't working. Swizzle mask for accessing elements of float arrays was incorrect.
2008-11-26mesa: add missing size check for assignment optimizationBrian Paul
2008-11-21mesa: better variable name: s/aux/store/Brian Paul
2008-11-19mesa: rework GLSL array code generationBrian Paul
We now express arrays in terms of indirect addressing. For example: dst = a[i]; becomes: MOV dst, TEMP[1 + TEMP[2].y]; At instruction-emit time indirect addressing is converted into ARL/ ADDR-relative form: ARL ADDR.x, TEMP[2].y; MOV dst, TEMP[1 + ADDR.x]; This fixes a number of array-related issues. Arrays of arrays and complex array/struct nesting works now. There may be some regressions, but more work is coming.
2008-11-19mesa: don't realloc instruction buffer so oftenBrian Paul
2008-11-13mesa: no longer need Writemask field in GLSL IR nodesBrian Paul
The Swizzle and Size fields carry all the info we need now.
2008-11-13mesa: revamp GLSL instruction emit codeBrian Paul
This is a step toward better array handling code. In particular, when more than one operand of an instruction uses indirect addressing, we'll need some temporary instructions and registers. By converting IR storage to instruction operands all in one place (emit_instruction()) we can be smarter about this. Also, somewhat better handling of dst register swizzle/writemask handling. This results in tighter writemasks on some instructions which is good for SOA execution. And, cleaner instruction commenting with inst_comment(). Next: remove some more dead code and additional clean-ups...
2008-11-07mesa: add GLSL support for DP2, NRM3, NRM4 instructions (not actually ↵Brian Paul
emitted yet though)
2008-11-05mesa: fix a GLSL array indexing codegen bugBrian Paul
Expressions like array[i] + array[j] didn't work properly before.
2008-11-01mesa: fix assignment / parameter passing of sampler typesBrian Paul
2008-08-25mesa: glsl: grab latest fixes from gallium-0.1 branchBrian Paul
Includes: 1. Fixes failed asserting about bad swizzles in src reg emit. 2. Tracks uniform var usage. 3. Emit exp() in terms of EXP2 instruction.
2008-08-16mesa: import latest GLSL code from gallium-0.1 branchBrian Paul
2008-07-29mesa: glsl: remove old assertion (fixes glsl/bitmap.c)Brian Paul
2008-07-29mesa: glsl: assorted fixes for resolving polymorphic functionsBrian Paul
Plus, - fix some issues in casting function arguments to format param types. - fix some vec/mat constructor bugs - find/report more syntax/semantic errors
2008-07-29mesa: glsl: additional error detectionBrian Paul
Plus begin some fixes for vec/matrix constructors.
2008-07-29mesa: gls: fix broken else clause of conditional break/continueBrian Paul
In the following case: for () { if (cond) break; // or continue; else something; } The "something" block didn't get emitted.
2008-07-29mesa: glsl: fix/simplify array element handlingBrian Paul
Also fix bug in comparing large structs/arrays.
2008-07-29mesa: glsl: rework swizzle storage handlingBrian Paul
Build on the heirarchal approach implemented for arrays/structs.
2008-07-29mesa: initial support for GLSL struct/array comparisonsBrian Paul
2008-07-29mesa: added null ptr check (error handling case)Brian Paul
2008-07-29mesa: glsl: various writemask/swizzle improvements and clean-upsBrian Paul
2008-07-29mesa: rework array/struct addressing code.Brian Paul
The slang_ir_storage type now has a pointer to parent storage to represent storage of an array element within an array, or a field within a struct. This fixes some problems related to addressing of fields/elements in non- trivial cases. More work to follow.
2008-07-16mesa: fix temp re-use bug in emit_arith()Brian Paul
2008-07-15mesa: add missing IR_LOG2 caseBrian Paul
2008-07-15mesa: fix storage size computation in emit_arith()Brian Paul
2008-07-01mesa: make _slang_swizzle_swizzle() non-privateBrian Paul
2008-06-12glsl: implement variable array indexesZack Rusin
2008-05-14Updated GLSL uniform/sampler handling from gallium-0.1 branchBrian Paul
Previously, the shader linker combined the uniforms used by the vertex and fragment shaders into a combined set of uniforms. This made the implementation of glUniform*() simple, but was rather inefficient otherwise. Now each shader gets its own set of uniforms (no more modelview matrix showing up in the fragment shader uniforms, for example). cherry-picked by hand from gallium-0.1 branch
2008-05-14fix some additional program refcounting bugsBrian Paul
2008-03-14init tmpNode to zerosBrian
2008-03-14mesa: fix emit_clamp() so that we don't use an output register as temporaryBrian
IR_CLAMP is decomposed into OPCODE_MIN+OPCODE_MAX. Allocate a temporary register for the intermediate value so we don't inadvertantly use an output register (which are write-only on some GPUs).
2007-11-27set fp->UsesKill when emitting OPCODE_KILBrian
2007-11-23Fix parsing of gl_FrontLightModelProduct.sceneColor, don't segfault on ↵Brian
variable array indexes.
2007-10-02fix comment: s/branch/kill/Brian
2007-07-26Fix function call bug 11731. Also, fix up IR_CALL/IR_FUNC confusion.Brian
2007-07-04Be more consistant with paths in #includes. Eventually, eliminate a bunch ↵Brian
of -I flags.
2007-04-21Remove all the USE_MEMPOOL debug code.Brian
2007-04-21Use new memory pool allocator. Lots of debug code still in place...Brian
2007-04-21free subroutine array (fix mem leak)Brian
2007-04-16Fix some assertions that could occur when an error was earlier logged.Brian
2007-04-09undo a debug/test changeBrian
2007-03-31always emit BGN/ENDSUB, for now anywayBrian
2007-03-28cond code fixBrian
2007-03-28fix cond code swizzle bugBrian
2007-03-28optimization for the emit_not() functionBrian