mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 09:20:12 +01:00
nv50: use hw idx buffers where we can
This commit is contained in:
parent
c6e63f3cc2
commit
828f545274
2 changed files with 27 additions and 8 deletions
|
|
@ -134,7 +134,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, int param)
|
|||
case NOUVEAU_CAP_HW_VTXBUF:
|
||||
return 1;
|
||||
case NOUVEAU_CAP_HW_IDXBUF:
|
||||
return 0;
|
||||
return 1;
|
||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||
return 1;
|
||||
case PIPE_CAP_INDEP_BLEND_FUNC:
|
||||
|
|
|
|||
|
|
@ -673,8 +673,6 @@ nv50_draw_elements(struct pipe_context *pipe,
|
|||
struct pipe_screen *pscreen = pipe->screen;
|
||||
void *map;
|
||||
|
||||
map = pipe_buffer_map(pscreen, indexBuffer, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
|
||||
nv50_state_validate(nv50);
|
||||
|
||||
BEGIN_RING(chan, tesla, 0x142c, 1);
|
||||
|
|
@ -685,14 +683,35 @@ nv50_draw_elements(struct pipe_context *pipe,
|
|||
BEGIN_RING(chan, tesla, NV50TCL_VERTEX_BEGIN, 1);
|
||||
OUT_RING (chan, nv50_prim(mode));
|
||||
|
||||
nv50_draw_elements_inline(nv50, map, indexSize, start, count);
|
||||
if (!nv50->vbo_fifo && indexSize == 4) {
|
||||
BEGIN_RING(chan, tesla, NV50TCL_VB_ELEMENT_U32 | 0x30000, 0);
|
||||
OUT_RING (chan, count);
|
||||
nouveau_pushbuf_submit(chan, nouveau_bo(indexBuffer),
|
||||
start << 2, count << 2);
|
||||
} else
|
||||
if (!nv50->vbo_fifo && indexSize == 2) {
|
||||
unsigned vb_start = (start & ~1);
|
||||
unsigned vb_end = (start + count + 1) & ~1;
|
||||
unsigned dwords = (vb_end - vb_start) >> 1;
|
||||
|
||||
BEGIN_RING(chan, tesla, NV50TCL_VB_ELEMENT_U16_SETUP, 1);
|
||||
OUT_RING (chan, ((start & 1) << 31) | count);
|
||||
BEGIN_RING(chan, tesla, NV50TCL_VB_ELEMENT_U16 | 0x30000, 0);
|
||||
OUT_RING (chan, dwords);
|
||||
nouveau_pushbuf_submit(chan, nouveau_bo(indexBuffer),
|
||||
vb_start << 1, dwords << 2);
|
||||
BEGIN_RING(chan, tesla, NV50TCL_VB_ELEMENT_U16_SETUP, 1);
|
||||
OUT_RING (chan, 0);
|
||||
} else {
|
||||
map = pipe_buffer_map(pscreen, indexBuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
nv50_draw_elements_inline(nv50, map, indexSize, start, count);
|
||||
nv50_unmap_vbufs(nv50);
|
||||
pipe_buffer_unmap(pscreen, indexBuffer);
|
||||
}
|
||||
|
||||
BEGIN_RING(chan, tesla, NV50TCL_VERTEX_END, 1);
|
||||
OUT_RING (chan, 0);
|
||||
|
||||
nv50_unmap_vbufs(nv50);
|
||||
|
||||
pipe_buffer_unmap(pscreen, indexBuffer);
|
||||
}
|
||||
|
||||
static INLINE boolean
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue