/**************************************************************************
*
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright 2007 VMware, Inc.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* XXX: work in progress
*
- * \author José Fonseca <jrfonseca@tungstengraphics.com>
- * \author Keith Whitwell <keith@tungstengraphics.com>
+ * \author José Fonseca <jfonseca@vmware.com>
+ * \author Keith Whitwell <keithw@vmware.com>
*/
/**
* Basically a cast wrapper.
*/
-static INLINE struct i915_vbuf_render *
+static inline struct i915_vbuf_render *
i915_vbuf_render(struct vbuf_render *render)
{
assert(render);
struct i915_context *i915 = i915_render->i915;
if (i915->vbo_flushed)
- debug_printf("%s bad vbo flush occured stalling on hw\n", __FUNCTION__);
+ debug_printf("%s bad vbo flush occurred stalling on hw\n", __FUNCTION__);
#ifdef VBUF_MAP_BUFFER
return (unsigned char *)i915_render->vbo_ptr + i915_render->vbo_sw_offset;
i915_vbuf_update_vbo_state(render);
}
-static boolean
+static void
i915_vbuf_render_set_primitive(struct vbuf_render *render,
unsigned prim)
{
case PIPE_PRIM_POINTS:
i915_render->hwprim = PRIM3D_POINTLIST;
i915_render->fallback = 0;
- return TRUE;
+ break;
case PIPE_PRIM_LINES:
i915_render->hwprim = PRIM3D_LINELIST;
i915_render->fallback = 0;
- return TRUE;
+ break;
case PIPE_PRIM_LINE_LOOP:
i915_render->hwprim = PRIM3D_LINELIST;
i915_render->fallback = PIPE_PRIM_LINE_LOOP;
- return TRUE;
+ break;
case PIPE_PRIM_LINE_STRIP:
i915_render->hwprim = PRIM3D_LINESTRIP;
i915_render->fallback = 0;
- return TRUE;
+ break;
case PIPE_PRIM_TRIANGLES:
i915_render->hwprim = PRIM3D_TRILIST;
i915_render->fallback = 0;
- return TRUE;
+ break;
case PIPE_PRIM_TRIANGLE_STRIP:
i915_render->hwprim = PRIM3D_TRISTRIP;
i915_render->fallback = 0;
- return TRUE;
+ break;
case PIPE_PRIM_TRIANGLE_FAN:
i915_render->hwprim = PRIM3D_TRIFAN;
i915_render->fallback = 0;
- return TRUE;
+ break;
case PIPE_PRIM_QUADS:
i915_render->hwprim = PRIM3D_TRILIST;
i915_render->fallback = PIPE_PRIM_QUADS;
- return TRUE;
+ break;
case PIPE_PRIM_QUAD_STRIP:
i915_render->hwprim = PRIM3D_TRILIST;
i915_render->fallback = PIPE_PRIM_QUAD_STRIP;
- return TRUE;
+ break;
case PIPE_PRIM_POLYGON:
i915_render->hwprim = PRIM3D_POLY;
i915_render->fallback = 0;
- return TRUE;
+ break;
default:
/* FIXME: Actually, can handle a lot more just fine... */
- return FALSE;
+ assert(0 && "unexpected prim in i915_vbuf_render_set_primitive()");
}
}
case PIPE_PRIM_LINE_LOOP:
if (nr >= 2) {
for (i = start + 1; i < end; i++)
- OUT_BATCH((i-0) | (i+0) << 16);
- OUT_BATCH((i-0) | ( start) << 16);
+ OUT_BATCH((i-1) | (i+0) << 16);
+ OUT_BATCH((i-1) | ( start) << 16);
}
break;
case PIPE_PRIM_QUADS:
i915_emit_hardware_state(i915);
if (!BEGIN_BATCH(1 + (nr_indices + 1)/2)) {
- FLUSH_BATCH(NULL);
+ FLUSH_BATCH(NULL, I915_FLUSH_ASYNC);
/* Make sure state is re-emitted after a flush:
*/
i915_emit_hardware_state(i915);
if (!BEGIN_BATCH(2)) {
- FLUSH_BATCH(NULL);
+ FLUSH_BATCH(NULL, I915_FLUSH_ASYNC);
/* Make sure state is re-emitted after a flush:
*/
i915_emit_hardware_state(i915);
if (!BEGIN_BATCH(1 + (nr_indices + 1)/2)) {
- FLUSH_BATCH(NULL);
+ FLUSH_BATCH(NULL, I915_FLUSH_ASYNC);
/* Make sure state is re-emitted after a flush:
*/
i915_render->i915 = i915;
- i915_render->base.max_vertex_buffer_bytes = 16*4096;
+ i915_render->base.max_vertex_buffer_bytes = 4*4096;
/* NOTE: it must be such that state and vertices indices fit in a single
- * batch buffer.
+ * batch buffer. 4096 is one batch buffer and 430 is the max amount of
+ * state in dwords. The result is the number of 16-bit indices which can
+ * fit in a single batch buffer.
*/
- i915_render->base.max_indices = 16*1024;
+ i915_render->base.max_indices = (4096 - 430 * 4) / 2;
i915_render->base.get_vertex_info = i915_vbuf_render_get_vertex_info;
i915_render->base.allocate_vertices = i915_vbuf_render_allocate_vertices;
struct draw_stage *stage;
render = i915_vbuf_render_create(i915);
- if(!render)
+ if (!render)
return NULL;
stage = draw_vbuf_stage(i915->draw, render);
- if(!stage) {
+ if (!stage) {
render->destroy(render);
return NULL;
}