diff options
| -rw-r--r-- | src/gallium/drivers/nvfx/nvfx_context.h | 15 | ||||
| -rw-r--r-- | src/gallium/drivers/nvfx/nvfx_draw.c | 7 | ||||
| -rw-r--r-- | src/gallium/drivers/nvfx/nvfx_vbo.c | 18 | 
3 files changed, 24 insertions, 16 deletions
diff --git a/src/gallium/drivers/nvfx/nvfx_context.h b/src/gallium/drivers/nvfx/nvfx_context.h index e2c6d09fa1..e48f9f3aa8 100644 --- a/src/gallium/drivers/nvfx/nvfx_context.h +++ b/src/gallium/drivers/nvfx/nvfx_context.h @@ -175,9 +175,10 @@ extern void nvfx_clear(struct pipe_context *pipe, unsigned buffers,  /* nvfx_draw.c */  extern struct draw_stage *nvfx_draw_render_stage(struct nvfx_context *nvfx);  extern void nvfx_draw_elements_swtnl(struct pipe_context *pipe, -					struct pipe_resource *idxbuf, -					unsigned ib_size, unsigned mode, -					unsigned start, unsigned count); +                                     struct pipe_resource *idxbuf, +                                     unsigned ib_size, int ib_bias, +                                     unsigned mode, +                                     unsigned start, unsigned count);  extern void nvfx_vtxfmt_validate(struct nvfx_context *nvfx);  /* nvfx_fb.c */ @@ -237,10 +238,10 @@ extern void nvfx_vbo_relocate(struct nvfx_context *nvfx);  extern void nvfx_draw_arrays(struct pipe_context *, unsigned mode,  				unsigned start, unsigned count);  extern void nvfx_draw_elements(struct pipe_context *pipe, -				  struct pipe_resource *indexBuffer, -				  unsigned indexSize, -				  unsigned mode, unsigned start, -				  unsigned count); +                               struct pipe_resource *indexBuffer, +                               unsigned indexSize, int indexBias, +                               unsigned mode, unsigned start, +                               unsigned count);  /* nvfx_vertprog.c */  extern boolean nvfx_vertprog_validate(struct nvfx_context *nvfx); diff --git a/src/gallium/drivers/nvfx/nvfx_draw.c b/src/gallium/drivers/nvfx/nvfx_draw.c index 5eadce1f6d..55b72aced0 100644 --- a/src/gallium/drivers/nvfx/nvfx_draw.c +++ b/src/gallium/drivers/nvfx/nvfx_draw.c @@ -232,7 +232,8 @@ nvfx_draw_render_stage(struct nvfx_context *nvfx)  void  nvfx_draw_elements_swtnl(struct pipe_context *pipe, -			 struct pipe_resource *idxbuf, unsigned idxbuf_size, +			 struct pipe_resource *idxbuf, +			 unsigned idxbuf_size, int idxbuf_bias,  			 unsigned mode, unsigned start, unsigned count)  {  	struct nvfx_context *nvfx = nvfx_context(pipe); @@ -257,9 +258,9 @@ nvfx_draw_elements_swtnl(struct pipe_context *pipe,  		map = pipe_buffer_map(pipe, idxbuf,  				      PIPE_TRANSFER_READ,  				      &ib_transfer); -		draw_set_mapped_element_buffer(nvfx->draw, idxbuf_size, map); +		draw_set_mapped_element_buffer(nvfx->draw, idxbuf_size, idx_bufbias, map);  	} else { -		draw_set_mapped_element_buffer(nvfx->draw, 0, NULL); +		draw_set_mapped_element_buffer(nvfx->draw, 0, 0, NULL);  	}  	if (nvfx->constbuf[PIPE_SHADER_VERTEX]) { diff --git a/src/gallium/drivers/nvfx/nvfx_vbo.c b/src/gallium/drivers/nvfx/nvfx_vbo.c index 5ffbdfcb2a..d441d032d9 100644 --- a/src/gallium/drivers/nvfx/nvfx_vbo.c +++ b/src/gallium/drivers/nvfx/nvfx_vbo.c @@ -167,7 +167,7 @@ nvfx_draw_arrays(struct pipe_context *pipe,  	nvfx_vbo_set_idxbuf(nvfx, NULL, 0);  	if (nvfx->screen->force_swtnl || !nvfx_state_validate(nvfx)) { -		nvfx_draw_elements_swtnl(pipe, NULL, 0, +		nvfx_draw_elements_swtnl(pipe, NULL, 0, 0,                                             mode, start, count);                  return;  	} @@ -372,7 +372,8 @@ nvfx_draw_elements_u32(struct nvfx_context *nvfx, void *ib,  static void  nvfx_draw_elements_inline(struct pipe_context *pipe, -			  struct pipe_resource *ib, unsigned ib_size, +			  struct pipe_resource *ib, +			  unsigned ib_size, int ib_bias,  			  unsigned mode, unsigned start, unsigned count)  {  	struct nvfx_context *nvfx = nvfx_context(pipe); @@ -385,6 +386,8 @@ nvfx_draw_elements_inline(struct pipe_context *pipe,  		return;  	} +	assert(ib_bias == 0); +  	switch (ib_size) {  	case 1:  		nvfx_draw_elements_u08(nvfx, map, mode, start, count); @@ -460,7 +463,8 @@ nvfx_draw_elements_vbo(struct pipe_context *pipe,  void  nvfx_draw_elements(struct pipe_context *pipe, -		   struct pipe_resource *indexBuffer, unsigned indexSize, +		   struct pipe_resource *indexBuffer, +		   unsigned indexSize, int indexBias,  		   unsigned mode, unsigned start, unsigned count)  {  	struct nvfx_context *nvfx = nvfx_context(pipe); @@ -468,15 +472,17 @@ nvfx_draw_elements(struct pipe_context *pipe,  	idxbuf = nvfx_vbo_set_idxbuf(nvfx, indexBuffer, indexSize);  	if (nvfx->screen->force_swtnl || !nvfx_state_validate(nvfx)) { -		nvfx_draw_elements_swtnl(pipe, indexBuffer, indexSize, -                                           mode, start, count); +		nvfx_draw_elements_swtnl(pipe, +		                         indexBuffer, indexSize, indexBias, +		                         mode, start, count);  		return;  	}  	if (idxbuf) {  		nvfx_draw_elements_vbo(pipe, mode, start, count);  	} else { -		nvfx_draw_elements_inline(pipe, indexBuffer, indexSize, +		nvfx_draw_elements_inline(pipe, +		                          indexBuffer, indexSize, indexBias,  					  mode, start, count);  	}  | 
