Age | Commit message (Collapse) | Author |
|
The draw module provides a similar interface to the driver which
is retained as various bits of hardware may be able to take on
incremental parts of the vertex pipeline. However, there's no
need to advertise all this complexity to the state tracker.
There are basically two modes now - normal and passthrough/screen-coords.
|
|
|
|
|
|
The Minimum Resolvable Depth factor depends on the driver and can't just
be computed from the number of Z buffer bits.
Glean's polygon offset test now passes with softpipe.
Still need to determine the MRD factor for other gallium drivers, if they use
the draw module's polygon offset stage...
|
|
|
|
vertex shaders
This may only be practical for the softpipe driver at this time.
|
|
|
|
|
|
Also, rename p_tile.[ch] to u_tile.[ch]
|
|
|
|
|
|
|
|
|
|
When flushing/rendering, some stages (like AA line/point) need to set
pipe/driver state. Those driver functions often call draw_flush().
That leads to recursion.
Use new draw->suspend_flush flag to explicitly prevent that in the key places.
Remove the draw->vcache_flushing field.
Reuse draw->flushing as a debug/assertion var.
|
|
Fixes broken polygon stipple, aaline, aapoint stages
|
|
|
|
Also, provide a separate flag to say whether the driver can handle
clipping/rhw tasks, in addition to the API flag which indicates they
have already been done.
|
|
|
|
This state is effectively private to the vertex processing part
of the draw module.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This will at least allow us to make the initial gains to get decent
vertex performance much more quickly & with higher confidence of getting
it right.
At some later point can look again at code-generating all the
fetch/cliptest/viewport extras in the same block as the vertex shader.
For now, just need to get some decent baseline performance.
|
|
|
|
|
|
|
|
|
|
|
|
Also, implement support in the draw module. We were hardwiring these
to one for quite a long time...
Currently using a draw_set_edgeflags() function, may be better to push
the argument into the draw_arrays() function. TBD.
|
|
Add facility for draw_vbuf.c to reset these vertex ids on flushes.
Pre-initialize vertex ids correctly.
|
|
Also:
1. Added an identity_viewport flag to skip viewport transformation when it
has no effect. Might also add an explicit bypass_viewport flag someday.
2. Separate the code for computing clip codes and doing the viewport transform.
Predicate them separately.
Note: even if bypass_vs is set, we still look at the shader to determine the
number of inputs and outputs.
|
|
|
|
The later follows the naming scheme of other limits.
Keep the old definition until all possible usage is updated.
|
|
Trying to put a structure in place that we can actually optimize.
Initially just implementing a passthrough mode, this will fairly soon
replace all the vertex_cache/prim_queue/shader_queue stuff that's so
hard to understand...
Split the vertex processing into a couple of distinct stages:
- Frontend
- Prepares two lists of elements (fetch and draw) to be processed
by the next stage. This stage doesn't fetch or draw vertices, but
makes the decision which to draw. Multiple implementations of this
will implement different strategies, currently just a vcache
implementation.
- MiddleEnd
- Takes the list of fetch elements, fetches them, runs the vertex
shader, cliptest, viewport transform on them to produce a
linear array of vertex_header vertices.
- Passes that list of vertices, plus the draw_elements (which index
into that list) onto the backend
- Backend
- Either the existing primitive/clipping pipeline, or the vbuf_render
hardware backend provided by the driver.
Currently, the middle-end is the old passthrough code, and it build hardware
vertices, not vertex_header vertices as above. It may be that passthrough
is a special case in this respect.
|
|
|
|
quads)
New draw_enable_point_sprites() function.
Fixes spriteblast.c demo
|
|
|
|
Allows drivers that implement line stipple to turn off this drawing stage.
|
|
stage
|
|
|
|
This fixes a validation/code-path problem. Enabling the stage for the sake
of wide points also inadvertantly caused wide lines to be converted to tris
when we actually want them passed through, such as for the AA line stage.
This is just cleaner now.
Also, replace draw_convert_wide_lines() with draw_wide_line_threshold() as
was done for points. Allows for 1-pixel lines to be converted too if needed.
|
|
vertex attribs
|
|
Use tgsi_scan_shader() to populate a tgsi_shader_info struct and use that instead.
|
|
Specifying a threshold size is a bit more flexible, and allows the option
of converting even 1-pixel points to triangles (set threshold=0).
Also, remove 0.25 pixel bias in wide_point().
|
|
|
|
This simplifies drivers using the draw module and removes the last dependency
on vertex-shader "internals". Since the draw module is producing the
post-transformed vertices, it makes sense to ask it where specific vertex
attributes are located.
This could also simplify some things in the state tracker code for selection,
feedback, rasterpos...
|
|
AA points are drawn by converting the point to a quad, then modifying the
user's fragment shader to compute a coverage value. The final fragment
color's alpha is modulated by the coverage value. Fragments outside the
point's radius are killed.
|