diff options
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r-- | src/mesa/drivers/dri/i915/intel_render.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i915/intel_render.c b/src/mesa/drivers/dri/i915/intel_render.c index 432fc7a14b0..a4041bea9ba 100644 --- a/src/mesa/drivers/dri/i915/intel_render.c +++ b/src/mesa/drivers/dri/i915/intel_render.c @@ -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) |