if (!svga_render->vbuf) {
svga_render->vbuf_size = MAX2(size, svga_render->vbuf_alloc_size);
- svga_render->vbuf = pipe_buffer_create(screen,
- PIPE_BIND_VERTEX_BUFFER,
- PIPE_USAGE_STREAM,
- svga_render->vbuf_size);
+ svga_render->vbuf = SVGA_TRY_PTR(pipe_buffer_create
+ (screen, PIPE_BIND_VERTEX_BUFFER,
+ PIPE_USAGE_STREAM,
+ svga_render->vbuf_size));
if (!svga_render->vbuf) {
+ svga_retry_enter(svga);
svga_context_flush(svga, NULL);
assert(!svga_render->vbuf);
svga_render->vbuf = pipe_buffer_create(screen,
/* The buffer allocation may fail if we run out of memory.
* The draw module's vbuf code should handle that without crashing.
*/
+ svga_retry_exit(svga);
}
svga->swtnl.new_vdecl = TRUE;
else {
svga_hwtnl_set_flatshade(svga->hwtnl,
svga->curr.rast->templ.flatshade ||
- svga->state.hw_draw.fs->uses_flat_interp,
+ svga_is_using_flat_shading(svga),
svga->curr.rast->templ.flatshade_first);
svga_hwtnl_set_fillmode(svga->hwtnl, svga->curr.rast->hw_fillmode);
struct svga_context *svga = svga_render->svga;
unsigned bias = (svga_render->vbuf_offset - svga_render->vdecl_offset)
/ svga_render->vertex_size;
- enum pipe_error ret = PIPE_OK;
/* instancing will already have been resolved at this point by 'draw' */
const unsigned start_instance = 0;
const unsigned instance_count = 1;
+ boolean retried;
SVGA_STATS_TIME_PUSH(svga_sws(svga), SVGA_STATS_TIME_VBUFDRAWARRAYS);
* redbook/polys.c
*/
svga_update_state_retry(svga, SVGA_STATE_HW_DRAW);
-
- ret = svga_hwtnl_draw_arrays(svga->hwtnl, svga_render->prim, start + bias,
- nr, start_instance, instance_count);
- if (ret != PIPE_OK) {
- svga_context_flush(svga, NULL);
- ret = svga_hwtnl_draw_arrays(svga->hwtnl, svga_render->prim,
- start + bias, nr,
- start_instance, instance_count);
+ SVGA_RETRY_CHECK(svga, svga_hwtnl_draw_arrays
+ (svga->hwtnl, svga_render->prim, start + bias,
+ nr, start_instance, instance_count, 0), retried);
+ if (retried) {
svga->swtnl.new_vbuf = TRUE;
- assert(ret == PIPE_OK);
}
+
SVGA_STATS_TIME_POP(svga_sws(svga));
}
struct svga_context *svga = svga_render->svga;
int bias = (svga_render->vbuf_offset - svga_render->vdecl_offset)
/ svga_render->vertex_size;
- boolean ret;
+ boolean retried;
/* instancing will already have been resolved at this point by 'draw' */
const struct pipe_draw_info info = {
.index_size = 2,
* redbook/polys.c
*/
svga_update_state_retry(svga, SVGA_STATE_HW_DRAW);
- ret = svga_hwtnl_draw_range_elements(svga->hwtnl, &info, nr_indices);
- if (ret != PIPE_OK) {
- svga_context_flush(svga, NULL);
- ret = svga_hwtnl_draw_range_elements(svga->hwtnl, &info, nr_indices);
+ SVGA_RETRY_CHECK(svga, svga_hwtnl_draw_range_elements(svga->hwtnl, &info,
+ nr_indices), retried);
+ if (retried) {
svga->swtnl.new_vbuf = TRUE;
- assert(ret == PIPE_OK);
}
+
SVGA_STATS_TIME_POP(svga_sws(svga));
}