History log of /external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
49ec647c3b724c53f4be45ed97f8d8b1046e7ccd 06-Jan-2016 Roland Scheidegger <sroland@vmware.com> llvmpipe: avoid most 64 bit math in rasterization

The trick here is to recognize that in the c + n * dcdx calculations,
not only can the lower FIXED_ORDER bits not change (as the dcdx values
have those all zero) but that this means the sign bit of the calculations
cannot be different as well, that is
sign(c + n*dcdx) == sign((c >> FIXED_ORDER) + n*(dcdx >> FIXED_ORDER)).
That shaves off more than enough bits to never require 64bit masks.
A shifted plane c value could still easily exceed 32 bits, however since we
throw out planes which are trivial accept even before binning (and similarly
don't even get to see tris for which there was a trivial reject plane)) this
is never a problem.
The idea isnt't all that revolutionary, in fact something similar was tried
ages ago (9773722c2b09d5f0615a47cecf4347859474dc56) back when the values were
only 32 bit anyway. I believe now it didn't quite work then because the
adjustment needed for testing trivial reject / partial masks wasn't handled
correctly.
This still keeps the separate 32/64 bit paths for now, as the 32 bit one still
looks minimally simpler (and also because if we'd pass in dcdx/dcdy/eo unscaled
from setup which would be a good reason to ditch the 32 bit path, we'd need to
change the special-purpose rasterization functions for small tris).

This passes piglit triangle-rasterization (-fbo -auto -max_size
-subpixelbits 8) and triangle-rasterization-overdraw (with some hacks
to make it work correctly with large sizes) easily (full piglit as
well of course, but most tests wouldn't use triangles large enough to
be affected, that is tris with a bounding box over 128x128).
The profiler says indeed time spent in rast_tri functions is reduced
substantially, BUT of course only if the tris are large. I measured a 3%
improvement in mesa gloss demo when supersized to twice the screen size...

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
fad283ba9e691d0d5d170f388e75542f2c39e559 02-Jan-2016 Roland Scheidegger <sroland@vmware.com> llvmpipe: don't store eo as 64bit int

eo, just like dcdx and dcdy, cannot overflow 32bit.
Store it as unsigned though just in case (it cannot be negative, but
in theory twice as big as dcdx or dcdy so this gives it one more bit).
This doesn't really change anything, albeit it might help minimally on
32bit archs.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
0510ec67e2c5b5ddb4755564314ccfe057555984 25-Oct-2013 Zack Rusin <zackr@vmware.com> llvmpipe: support 8bit subpixel precision

8 bit precision is required by d3d10 but unfortunately
requires 64 bit rasterizer. This commit implements
64 bit rasterization with full support for 8bit subpixel
precision. It's a combination of all individual commits
from the llvmpipe-rast-64 branch.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: José Fonseca <jfonseca@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
8965f042b327ad8697963e757f4607f4bb13a045 15-Oct-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: don't store plane.ei value in binned data

Further reduce the size of a binned triangle.
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
9bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8 15-Oct-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: slightly shrink the size of a binned triangle
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
ef3407672ed4c2c6d070384ea763e73b3da2240a 05-Oct-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: fix off-by-one in tri_16
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
0ff132e5a633170afaed0aea54d01438c895b8ab 08-Oct-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: add rast_tri_4_16 for small lines and points
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
be2fb11f10e0cdd1b05592ea9a1eedbe50d24c9f 15-Sep-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: remove duplicate code

Bad rebase presumably.
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
67b957781d8195b8f8867e994c03b68f8dc5c807 07-Sep-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: pass linear masks to fragment shader

Fragment shader can extract the correct bits for each quad.
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
9f6e8e1d6b8696a3ee96cba01b2466ba7a1a8ef6 07-Sep-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: use opcodes instead of function pointers in bins

Also, move some state from rasterizer struct to the scene.
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
6419ecd02ce43a2614822e228f306d4db589f317 27-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: enforce fixed memory limit on scenes
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
0aa3a09ced07e150901cd0f7a7917556a018c252 22-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: combine linear mask calculation
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
5286dd701640976ffc328e8e85fb3830746851a1 19-Jul-2010 Hui Qi Tay <hqtay@vmware.com> llvmpipe: native rasterization for lines

Rasterize lines directly by treating them as 4-sided polygons.
Still need to check the exact pixel rasteration.
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
98f3ff8f4a761d579ee9b42ee3090635519213a5 20-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: more rasterization counters
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
85d9bc236d6a8ff8f12cbc2150f8c3740354f573 15-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: consolidate several loops in lp_rast_triangle
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
4c0641454b952f2c240de8c83511703f98e1f72f 15-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: eliminate last usage of step array in rast_tmp.h

For 16 and 64 pixel levels, calculate a mask which is linear in x and
y (ie not in the swizzle layout).

When iterating over full and partial masks, figure out position by
manipulating the bit number set in the mask, rather than relying on
postion arrays.

Similarly, calculate the lower-level c values from dcdx, dcdy and the
position rather than relying on the step array.
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
ee0d1c29eeddfa364a18783507acd4d031029ba2 15-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: don't refer to plane->step when dcdx or dcdy would do
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
4b322e71bb169af637864922edfb4108675781bb 15-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: also use build_mask at 16, 64 pixel levels
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
515194968d033d2c0c5678677f7606d38635d747 15-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: version of block4 which doesn't need the full step array

No noticable slowdown with isosurf.
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
510b03539413552a543e25de6b896eb10baf60ae 15-Aug-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: reorganize block4 loop, nice speedup

isosurf 95->115 fps just by exchanging the two inner loops in this
function...
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h
d4b64167b56f780d0dea73193c345622888fbc16 17-Jun-2010 Keith Whitwell <keithw@vmware.com> llvmpipe: pass mask into fragment shader

Move this code back out to C for now, will generate separately.

Shader now takes a mask parameter instead of C0/C1/C2/etc.

Shader does not currently use that parameter and rasterizes whole
pixel stamps always.
/external/mesa3d/src/gallium/drivers/llvmpipe/lp_rast_tri_tmp.h