Age | Commit message (Collapse) | Author |
|
|
|
Refactor the code to make this easier.
|
|
|
|
Avoid hiding existing variable already named info in outer scope.
|
|
info cannot be NULL at the call to debug_printf. emit_instruction
dereferences info, so at debug_printf it is either not NULL or the
program has already crashed.
|
|
a bit more involved than indirect addressing over consts, but still
fairly reasonable. we allocate an array instead of individual alloca's,
and we do it only if the shader does indirect addressing.
|
|
implement indirect addressing (ARL and ARR instructions) when used
with CONST's. indirect addressing over other vars (temps, inputs, outputs)
is not supported yet.
|
|
|
|
|
|
|
|
We're hitting these assertions with nested loops...
|
|
|
|
|
|
As in tgsi_exec.c we don't actually rely on condition codes; we do
an unconditional kill. The only predication comes from the execution
mask which applies inside loops/conditionals.
|
|
the condition can't be false, declerations are ok even if we don't
emit any.
|
|
otherwise mem2reg can't put them in registers
|
|
|
|
|
|
Instead of testing each component individually, we can test the entire
vector at once.
|
|
makes loops work
|
|
|
|
|
|
This reverts commit 71c05689528d7987bfb99c3afe04e456887bc7b7.
|
|
|
|
|
|
else was broken in the outter most else statemants, plus the code
didn't need an inverted mask to compute the inverse of the current
condition.
|
|
implements if/else/endif constructs and lays down the code for looping
and others. we create a conditional execution mask which decides which
of the four inputs are enabled for any store. it's used only if an
execution mask is present, otherwise we go through a direct store.
|
|
Avoids assertion failures with certain shaders.
|
|
Note that with FIXME instead of an assertion failure.
Addresses fdo 25956.
|
|
with mutable vars we don't need to follow the phi nodes. meaning that
control flow becomes trivial as we don't have scan the rest of the tgsi
to figure out the variable usage anymore. futhermore the memory2register
pass promotes alloca/store/load to registers while inserting the right phi
nodes. so we get simplicity and performance.
|
|
the llvmpipe tgsi translation is a lot more complete than what was in
gallivm so replacing the latter with the former. this is needed since
the draw llvm paths will use the same code. effectively the proven
llvmpipe code becomes gallivm.
|