X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fsvga%2Fsvga_draw_elements.c;h=f0815b144ae85820ff4fe65a2dd95ad6641cc6aa;hb=725671a83a67cc8cf16c0913f6e1835fb272c2fb;hp=c4579177b77864350b078935bccdb1c178254382;hpb=9515b78859b52b4532cc9e06366428f2c49c7869;p=mesa.git diff --git a/src/gallium/drivers/svga/svga_draw_elements.c b/src/gallium/drivers/svga/svga_draw_elements.c index c4579177b77..f0815b144ae 100644 --- a/src/gallium/drivers/svga/svga_draw_elements.c +++ b/src/gallium/drivers/svga/svga_draw_elements.c @@ -33,7 +33,6 @@ #include "svga_resource_buffer.h" #include "svga_winsys.h" #include "svga_context.h" - #include "svga_hw_reg.h" @@ -54,8 +53,9 @@ translate_indices( struct svga_hwtnl *hwtnl, struct pipe_resource *dst = NULL; void *dst_map = NULL; - dst = pipe_buffer_create( pipe->screen, - PIPE_BIND_INDEX_BUFFER, + dst = pipe_buffer_create( pipe->screen, + PIPE_BIND_INDEX_BUFFER, + PIPE_USAGE_STATIC, size ); if (dst == NULL) goto fail; @@ -72,18 +72,18 @@ translate_indices( struct svga_hwtnl *hwtnl, nr, dst_map ); - pipe_buffer_unmap( pipe, src, src_transfer ); - pipe_buffer_unmap( pipe, dst, dst_transfer ); + pipe_buffer_unmap( pipe, src_transfer ); + pipe_buffer_unmap( pipe, dst_transfer ); *out_buf = dst; return PIPE_OK; fail: if (src_map) - pipe_buffer_unmap( pipe, src, src_transfer ); + pipe_buffer_unmap( pipe, src_transfer ); if (dst_map) - pipe_buffer_unmap( pipe, dst, dst_transfer ); + pipe_buffer_unmap( pipe, dst_transfer ); if (dst) pipe->screen->resource_destroy( pipe->screen, dst ); @@ -102,7 +102,7 @@ svga_hwtnl_simple_draw_range_elements( struct svga_hwtnl *hwtnl, int index_bias, unsigned min_index, unsigned max_index, - unsigned prim, + unsigned prim, unsigned start, unsigned count ) { @@ -111,24 +111,25 @@ svga_hwtnl_simple_draw_range_elements( struct svga_hwtnl *hwtnl, unsigned hw_prim; unsigned hw_count; unsigned index_offset = start * index_size; - int ret = PIPE_OK; + enum pipe_error ret = PIPE_OK; hw_prim = svga_translate_prim(prim, count, &hw_count); if (hw_count == 0) goto done; - if (index_buffer && - svga_buffer_is_user_buffer(index_buffer)) + if (index_buffer && + svga_buffer_is_user_buffer(index_buffer)) { assert( index_buffer->width0 >= index_offset + count * index_size ); ret = u_upload_buffer( hwtnl->upload_ib, + 0, index_offset, count * index_size, index_buffer, &index_offset, - &upload_buffer ); - if (ret) + &upload_buffer); + if (ret != PIPE_OK) goto done; /* Don't need to worry about refcounting index_buffer as this is @@ -144,9 +145,9 @@ svga_hwtnl_simple_draw_range_elements( struct svga_hwtnl *hwtnl, range.indexArray.stride = index_size; range.indexWidth = index_size; range.indexBias = index_bias; - + ret = svga_hwtnl_prim( hwtnl, &range, min_index, max_index, index_buffer ); - if (ret) + if (ret != PIPE_OK) goto done; done: @@ -172,8 +173,8 @@ svga_hwtnl_draw_range_elements( struct svga_hwtnl *hwtnl, u_translate_func gen_func; enum pipe_error ret = PIPE_OK; - if (hwtnl->api_fillmode != PIPE_POLYGON_MODE_FILL && - prim >= PIPE_PRIM_TRIANGLES) + if (hwtnl->api_fillmode != PIPE_POLYGON_MODE_FILL && + prim >= PIPE_PRIM_TRIANGLES) { gen_type = u_unfilled_translator( prim, index_size, @@ -198,9 +199,8 @@ svga_hwtnl_draw_range_elements( struct svga_hwtnl *hwtnl, &gen_func ); } - if (gen_type == U_TRANSLATE_MEMCPY) { - /* No need for translation, just pass through to hardware: + /* No need for translation, just pass through to hardware: */ return svga_hwtnl_simple_draw_range_elements( hwtnl, index_buffer, index_size, @@ -226,7 +226,7 @@ svga_hwtnl_draw_range_elements( struct svga_hwtnl *hwtnl, gen_size, gen_func, &gen_buf ); - if (ret) + if (ret != PIPE_OK) goto done; ret = svga_hwtnl_simple_draw_range_elements( hwtnl, @@ -238,7 +238,7 @@ svga_hwtnl_draw_range_elements( struct svga_hwtnl *hwtnl, gen_prim, 0, gen_nr ); - if (ret) + if (ret != PIPE_OK) goto done; done: @@ -248,8 +248,3 @@ svga_hwtnl_draw_range_elements( struct svga_hwtnl *hwtnl, return ret; } } - - - - -