summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/gallivm
AgeCommit message (Collapse)Author
2010-10-09gallivm: Do size computations simultanously for all dimensions (AoS).José Fonseca
Operate simultanouesly on <width, height, depth> vector as much as possible, instead of doing the operations on vectors with broadcasted scalars. Also do the 24.8 fixed point scalar with integer shift of the texture size, for unnormalized coordinates. AoS path only for now -- the same thing can be done for SoA.
2010-10-09gallivm: make use of new iround code in lp_bld_conv.Roland Scheidegger
Only requires sse2 now.
2010-10-09gallivm: optimize soa linear clamp to edge wrap mode a bitRoland Scheidegger
Clamp against 0 instead of -0.5, which simplifies things. The former version would have resulted in both int coords being zero (in case of coord being smaller than 0) and some "unused" weight value, whereas now the int coords will be 0 and 1, but weight will be 0, hence the lerp should produce the same value. Still not happy about differences between normalized and non-normalized...
2010-10-09gallivm: avoid unnecessary URem in linear wrap repeat caseRoland Scheidegger
Haven't looked at what code this exactly generates but URem can't be fast. Instead of using two URem only use one and replace the second one with select/add (this is what the corresponding aos code already does).
2010-10-09gallivm: more linear tex wrap mode calculation simplificationRoland Scheidegger
Rearrange order of operations a bit to make some clamps easier. All calculations should be equivalent. Note there seems to be some inconsistency in the clamp to edge case wrt normalized/non-normalized coords, could potentially simplify this too.
2010-10-09gallivm: optimize some tex wrap mode calculations a bitRoland Scheidegger
Sometimes coords are clamped to positive numbers before doing conversion to int, or clamped to 0 afterwards, in this case can use itrunc instead of ifloor which is easier. This is only the case for nearest calculations unfortunately, except linear MIRROR_CLAMP_TO_EDGE which for the same reason can use a unsigned float build context so the ifloor_fract helper can reduce this to itrunc in the ifloor helper itself.
2010-10-09gallivm: replace sub/floor/ifloor combo with ifloor_fractRoland Scheidegger
2010-10-09gallivm: faster iround implementation for sse2Roland Scheidegger
sse2 supports round to nearest directly (or rather, assuming default nearest rounding mode in MXCSR). Use intrinsic to use this rather than round (sse41) or bit manipulation whenever possible.
2010-10-09gallivm: fix trunc/itrunc commentRoland Scheidegger
trunc of -1.5 is -1.0 not 1.0...
2010-10-08gallivm: Remove unnecessary header.Vinson Lee
2010-10-08gallivm: Help for combined extraction and broadcasting.José Fonseca
Doesn't change generated code quality, but saves some typing.
2010-10-08llvmpipe: First minify the texture size, then broadcast.José Fonseca
2010-10-08gallivm: Move into the as much of the second level code as possible.José Fonseca
Also, pass more stuff trhough the sample build context, instead of arguments.
2010-10-08gallivm: Warn when doing inefficient integer comparisons.José Fonseca
2010-10-08gallivm: round rather than truncate in new 4x4f->1x16ub conversion pathKeith Whitwell
2010-10-08gallivm: Use the wrappers for SSE pack intrinsics.José Fonseca
Fixes assertion failures on LLVM 2.6.
2010-10-08gallivm: special case conversion 4x4f to 1x16ubKeith Whitwell
Nice reduction in the number of operations required for final color output in many shaders.
2010-10-08gallivm: Implement brilinear filtering.José Fonseca
2010-10-08gallivm: Fix copy'n'paste typo in previous commit.José Fonseca
2010-10-08gallivm: Clamp mipmap level and zero mip weight simultaneously.José Fonseca
2010-10-08gallivm: Use lp_build_ifloor_fract for lod computation.José Fonseca
Forgot this one before.
2010-10-08gallivm: Don't compute the second mipmap level when frac(lod) == 0José Fonseca
2010-10-08gallivm: Simplify lp_build_mipmap_level_sizes' interface.José Fonseca
2010-10-08gallivm: Do not do mipfiltering when magnifying.José Fonseca
If lod < 0, then invariably follows that ilevel0 == ilevel1 == 0.
2010-10-07gallivm: Vectorize the rho computation.José Fonseca
2010-10-06gallivm: Compute lod as integer whenever possible.José Fonseca
More accurate/faster results for PIPE_TEX_MIPFILTER_NEAREST. Less FP <-> SI conversion overall.
2010-10-06gallivm: Only apply min/max_lod when necessary.José Fonseca
2010-10-06gallivm: don't apply zero lod_biasKeith Whitwell
2010-10-06gallivm: Combined ifloor & fract helper.José Fonseca
The only way to ensure we don't do redundant FP <-> SI conversions.
2010-10-06gallivm: Fast implementation of iround(log2(x))José Fonseca
Not tested yet, but should be correct.
2010-10-06gallivm: Use a faster (and less accurate) log2 in lod computation.José Fonseca
2010-10-06gallivm: Take the type signedness in consideration in round/ceil/floor.José Fonseca
2010-09-30gallivm: added some commentsBrian Paul
2010-09-30gallivm: check for level=0 case in lp_build_minify()Brian Paul
This lets us avoid the shift and max() operations.
2010-09-30gallivm: More comprehensive border usage logic.José Fonseca
2010-09-29gallivm: Use SSE4.1's ROUNDSS/ROUNDSD for scalar rounding.José Fonseca
2010-09-27llvmpipe: fix swizzling of texture border colorBrian Paul
The pipe_sampler_view's swizzle terms also apply to the texture border color. Simply move the apply_sampler_swizzle() call after we fetch the border color. Fixes many piglit texwrap failures.
2010-09-25gallivm: fix repeat() function for NPOT texturesBrian Paul
The trick of casting the coord to an unsigned value only works for POT textures. Add a bias instead. This fixes a few piglit texwrap failures.
2010-09-25gallivm: Remove dead experimental code.José Fonseca
2010-09-25gallivm: Fetch the lod from the dynamic state when min_lod == max_lod.José Fonseca
2010-09-25gallivm: optimize yuv decodingRoland Scheidegger
this is more a proof to show vector shifts on x86 with per-element shift count are evil. Since we can avoid the shift with a single compare/select, use that instead. Replaces more than 20 instructions (and slow ones at that) with about 3, and cuts compiled shader size with mesa's yuvsqure demo by over 10% (no performance measurements done - but selection is blazing fast). Might want to revisit that for future cpus - unfortunately AVX won't have vector shifts neither, but AMD's XOP will, but even in that case using selection here is probably not slower.
2010-09-25gallivm: don't use URem/UDiv when calculating offsets for blocksRoland Scheidegger
While it's true that llvm can and will indeed replace this with bit arithmetic (since block height/width is POT), it does so (llvm 2.7) by element and hence extracts/shifts/reinserts each element individually. This costs about 16 instructions (and extract is not really fast) vs. 1...
2010-09-25gallivm: fix copy&paste bugRoland Scheidegger
looks like pot_depth should be used, not pot_height (found by accident, not verified)
2010-09-24llvmpipe: make texture border_color dynamic stateBrian Paul
2010-09-24llvmpipe: make min/max lod and lod bias dynamic stateBrian Paul
Before, changing any of these sampler values triggered generation of new JIT code. Added a new flag for the special case of min_lod == max_lod which is hit during auto mipmap generation.
2010-09-22gallivm: Add unorm support to lp_build_lerp()José Fonseca
Unfortunately this can cause segfault with LLVM 2.6, if x is a constant.
2010-09-21gallivm: fix lp_build_sample_compare()Brian Paul
The old code didn't really make sense. We only need to compare the X channel of the texture (depth) against the texcoord. For (bi)linear sampling we should move the calls to this function and compute the final result as (s1+s2+s3+s4) * 0.25. Someday. This fixes the glean glsl1 shadow2D() tests. See fd.o bug 29307.
2010-09-20gallivm: remove debug codeBrian Paul
2010-09-17gallivm: added missing case for PIPE_TEXTURE_RECTBrian Paul
Fixes fd.o bug 30245
2010-09-16gallivm: Remove unnecessary header.Vinson Lee