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
|