util_blitter_save_vertex_elements(svga->blitter, (void*)svga->curr.velems);
util_blitter_save_vertex_shader(svga->blitter, svga->curr.vs);
util_blitter_save_geometry_shader(svga->blitter, svga->curr.gs);
+ util_blitter_save_tessctrl_shader(svga->blitter, svga->curr.tcs);
+ util_blitter_save_tesseval_shader(svga->blitter, svga->curr.tes);
util_blitter_save_so_targets(svga->blitter, svga->num_so_targets,
(struct pipe_stream_output_target**)svga->so_targets);
util_blitter_save_rasterizer(svga->blitter, (void*)svga->curr.rast);
- util_blitter_save_viewport(svga->blitter, &svga->curr.viewport);
- util_blitter_save_scissor(svga->blitter, &svga->curr.scissor);
+ util_blitter_save_viewport(svga->blitter, &svga->curr.viewport[0]);
+ util_blitter_save_scissor(svga->blitter, &svga->curr.scissor[0]);
util_blitter_save_fragment_shader(svga->blitter, svga->curr.fs);
util_blitter_save_blend(svga->blitter, (void*)svga->curr.blend);
util_blitter_save_depth_stencil_alpha(svga->blitter,
/* flush any queued prims (don't want them to appear after the clear!) */
svga_hwtnl_flush_retry(svga);
- ret = try_clear( svga, buffers, color, depth, stencil );
-
- if (ret == PIPE_ERROR_OUT_OF_MEMORY) {
- /* Flush command buffer and retry:
- */
- svga_context_flush( svga, NULL );
-
- ret = try_clear( svga, buffers, color, depth, stencil );
- }
+ SVGA_RETRY_OOM(svga, ret, try_clear( svga, buffers, color, depth, stencil));
/*
* Mark target surfaces as dirty
{
struct svga_context *svga = svga_context(pipe);
struct svga_surface *svga_surface_dst;
- enum pipe_error ret;
struct pipe_surface tmpl;
struct pipe_surface *surface;
stencil = 0;
}
else {
- util_format_unpack_z_float(surface->format, &depth, data, 1);
- util_format_unpack_s_8uint(surface->format, &stencil, data, 1);
+ desc->unpack_z_float(&depth, 0, data, 0, 1, 1);
+ desc->unpack_s_8uint(&stencil, 0, data, 0, 1, 1);
}
if (util_format_has_depth(desc)) {
/* clearing whole surface, use direct VGPU10 command */
- ret = SVGA3D_vgpu10_ClearDepthStencilView(svga->swc, dsv,
- clear_flags,
- stencil, depth);
- if (ret != PIPE_OK) {
- /* flush and try again */
- svga_context_flush(svga, NULL);
- ret = SVGA3D_vgpu10_ClearDepthStencilView(svga->swc, dsv,
- clear_flags,
- stencil, depth);
- assert(ret == PIPE_OK);
- }
+ SVGA_RETRY(svga, SVGA3D_vgpu10_ClearDepthStencilView(svga->swc, dsv,
+ clear_flags,
+ stencil, depth));
}
else {
/* To clear subtexture use software fallback */
color.f[0] = color.f[1] = color.f[2] = color.f[3] = 0;
}
else {
- util_format_unpack_rgba(surface->format, color.ui, data, 1);
+ if (util_format_is_pure_sint(surface->format)) {
+ /* signed integer */
+ desc->unpack_rgba_sint(color.i, 0, data, 0, 1, 1);
+ }
+ else if (util_format_is_pure_uint(surface->format)) {
+ /* unsigned integer */
+ desc->unpack_rgba_uint(color.ui, 0, data, 0, 1, 1);
+ }
+ else {
+ /* floating point */
+ desc->unpack_rgba_float(color.f, 0, data, 0, 1, 1);
+ }
}
/* Setup render target view */
}
else {
/* clearing whole surface using VGPU10 command */
- ret = SVGA3D_vgpu10_ClearRenderTargetView(svga->swc, rtv,
- color.f);
- if (ret != PIPE_OK) {
- svga_context_flush(svga,NULL);
- ret = SVGA3D_vgpu10_ClearRenderTargetView(svga->swc, rtv,
- color.f);
- assert(ret == PIPE_OK);
- }
+ SVGA_RETRY(svga, SVGA3D_vgpu10_ClearRenderTargetView(svga->swc, rtv,
+ color.f));
}
}
else {
height);
} else {
enum pipe_error ret;
-
- ret = svga_try_clear_render_target(svga, dst, color);
- if (ret == PIPE_ERROR_OUT_OF_MEMORY) {
- svga_context_flush( svga, NULL );
- ret = svga_try_clear_render_target(svga, dst, color);
- }
-
+
+ SVGA_RETRY_OOM(svga, ret, svga_try_clear_render_target(svga, dst,
+ color));
assert (ret == PIPE_OK);
}
svga_toggle_render_condition(svga, render_condition_enabled, TRUE);