This reverts commit
755c11dc5e94f17097c186edaaa39d818396f14c.
We agreed that this is band-aid that's not very useful and
the proper solution is to rewrite the rasterization algo
so that it operates on 64 bit values.
Signed-off-by: Zack Rusin <zackr@vmware.com>
struct lp_fence;
struct cmd_bin;
-#define FIXED_TYPE_WIDTH 32
/** For sub-pixel positioning */
-#define FIXED_ORDER 8
+#define FIXED_ORDER 4
#define FIXED_ONE (1<<FIXED_ORDER)
-/** Maximum length of an edge in a primitive in pixels.
- * If the framebuffer is large we have to think about fixed-point
- * integer overflow. Coordinates need ((FIXED_TYPE_WIDTH/2) - 1) bits
- * to be able to fit product of two such coordinates inside
- * FIXED_TYPE_WIDTH, any larger and we could overflow a
- * FIXED_TYPE_WIDTH_-bit int.
- */
-#define MAX_FIXED_LENGTH (1 << (((FIXED_TYPE_WIDTH/2) - 1) - FIXED_ORDER))
-
/* Rasterizer output size going to jit fs, width/height */
#define LP_RASTER_BLOCK_SIZE 4
&setup->draw_regions[i]);
}
}
- /*
- * Check if subdivision of triangles is needed if the framebuffer
- * is larger than our MAX_FIXED_LENGTH can accomodate.
+ /* If the framebuffer is large we have to think about fixed-point
+ * integer overflow. For 2K by 2K images, coordinates need 15 bits
+ * (2^11 + 4 subpixel bits). The product of two such numbers would
+ * use 30 bits. Any larger and we could overflow a 32-bit int.
+ *
+ * To cope with this problem we check if triangles are large and
+ * subdivide them if needed.
*/
- setup->subdivide_large_triangles = (setup->fb.width > MAX_FIXED_LENGTH &&
- setup->fb.height > MAX_FIXED_LENGTH);
+ setup->subdivide_large_triangles = (setup->fb.width > 2048 &&
+ setup->fb.height > 2048);
}
setup->dirty = 0;
const float (*v2)[4],
triangle_func_t tri)
{
- const float maxLen = MAX_FIXED_LENGTH; /* longest permissible edge, in pixels */
+ const float maxLen = 2048.0f; /* longest permissible edge, in pixels */
float dx10, dy10, len10;
float dx21, dy21, len21;
float dx02, dy02, len02;