mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
i830: Compute initial number of vertices from remaining batch space
In order to prevent an overflow of the batch buffer when emitting triangles, we need to limit the initial primitive to fit within the current batch. To do we need to measure the remaining space and thence compute the maximum number of vertices that fit into that space. Reported-by: Kurt Roeckx <kurt@roeckx.be> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41495 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Eric Anholt <eric@anholt.net> NOTE: This is a candidate for release branches.
This commit is contained in:
parent
7d13a6e64b
commit
33b07893e9
1 changed files with 11 additions and 5 deletions
|
|
@ -119,12 +119,14 @@ intelDmaPrimitive(struct intel_context *intel, GLenum prim)
|
|||
intel_set_prim(intel, hw_prim[prim]);
|
||||
}
|
||||
|
||||
#define INTEL_NO_VBO_STATE_RESERVED 1500
|
||||
|
||||
static INLINE GLuint intel_get_vb_max(struct intel_context *intel)
|
||||
{
|
||||
GLuint ret;
|
||||
|
||||
if (intel->intelScreen->no_vbo)
|
||||
ret = sizeof(intel->batch.map) - 1500;
|
||||
ret = sizeof(intel->batch.map) - INTEL_NO_VBO_STATE_RESERVED;
|
||||
else
|
||||
ret = INTEL_VB_SIZE;
|
||||
ret /= (intel->vertex_size * 4);
|
||||
|
|
@ -133,11 +135,15 @@ static INLINE GLuint intel_get_vb_max(struct intel_context *intel)
|
|||
|
||||
static INLINE GLuint intel_get_current_max(struct intel_context *intel)
|
||||
{
|
||||
GLuint ret;
|
||||
|
||||
if (intel->intelScreen->no_vbo)
|
||||
return intel_get_vb_max(intel);
|
||||
else
|
||||
return (INTEL_VB_SIZE - intel->prim.current_offset) / (intel->vertex_size * 4);
|
||||
if (intel->intelScreen->no_vbo) {
|
||||
ret = intel_batchbuffer_space(intel);
|
||||
ret = ret <= INTEL_NO_VBO_STATE_RESERVED ? 0 : ret - INTEL_NO_VBO_STATE_RESERVED;
|
||||
} else
|
||||
ret = (INTEL_VB_SIZE - intel->prim.current_offset);
|
||||
|
||||
return ret / (intel->vertex_size * 4);
|
||||
}
|
||||
|
||||
#define LOCAL_VARS struct intel_context *intel = intel_context(ctx)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue