util_blitter_save_stencil_ref(sctx->blitter, &sctx->stencil_ref);
util_blitter_save_rasterizer(sctx->blitter, sctx->queued.named.rasterizer);
util_blitter_save_fragment_shader(sctx->blitter, sctx->ps_shader);
+ util_blitter_save_geometry_shader(sctx->blitter, sctx->gs_shader);
util_blitter_save_vertex_shader(sctx->blitter, sctx->vs_shader);
util_blitter_save_vertex_elements(sctx->blitter, sctx->vertex_elements);
if (sctx->queued.named.viewport) {
(struct pipe_stream_output_target**)sctx->b.streamout.targets);
if (op & SI_SAVE_FRAMEBUFFER)
- util_blitter_save_framebuffer(sctx->blitter, &sctx->framebuffer);
+ util_blitter_save_framebuffer(sctx->blitter, &sctx->framebuffer.state);
if (op & SI_SAVE_TEXTURES) {
util_blitter_save_fragment_sampler_states(
double depth, unsigned stencil)
{
struct si_context *sctx = (struct si_context *)ctx;
- struct pipe_framebuffer_state *fb = &sctx->framebuffer;
+ struct pipe_framebuffer_state *fb = &sctx->framebuffer.state;
si_blitter_begin(ctx, SI_CLEAR);
util_blitter_clear(sctx->blitter, fb->width, fb->height,
const struct pipe_box *src_box)
{
struct si_context *sctx = (struct si_context *)ctx;
+ struct r600_texture *rdst = (struct r600_texture*)dst;
+ struct pipe_surface *dst_view, dst_templ;
+ struct pipe_sampler_view src_templ, *src_view;
struct texture_orig_info orig_info[2];
- struct pipe_box sbox;
- const struct pipe_box *psbox = src_box;
+ struct pipe_box sbox, dstbox;
boolean restore_orig[2];
/* Fallback for buffers. */
sbox.width = util_format_get_nblocksx(orig_info[0].format, src_box->width);
sbox.height = util_format_get_nblocksy(orig_info[0].format, src_box->height);
sbox.depth = src_box->depth;
- psbox=&sbox;
+ src_box = &sbox;
si_compressed_to_blittable(dst, dst_level, &orig_info[1]);
restore_orig[1] = TRUE;
restore_orig[1] = TRUE;
}
+ /* Initialize the surface. */
+ util_blitter_default_dst_texture(&dst_templ, dst, dst_level, dstz);
+ dst_view = r600_create_surface_custom(ctx, dst, &dst_templ,
+ rdst->surface.level[dst_level].npix_x,
+ rdst->surface.level[dst_level].npix_y);
+
+ /* Initialize the sampler view. */
+ util_blitter_default_src_texture(&src_templ, src, src_level);
+ src_view = ctx->create_sampler_view(ctx, src, &src_templ);
+
+ u_box_3d(dstx, dsty, dstz, abs(src_box->width), abs(src_box->height),
+ abs(src_box->depth), &dstbox);
+
+ /* Copy. */
si_blitter_begin(ctx, SI_COPY);
- util_blitter_copy_texture(sctx->blitter, dst, dst_level, dstx, dsty, dstz,
- src, src_level, psbox);
+ util_blitter_blit_generic(sctx->blitter, dst_view, &dstbox,
+ src_view, src_box, src->width0, src->height0,
+ PIPE_MASK_RGBAZS, PIPE_TEX_FILTER_NEAREST, NULL);
si_blitter_end(ctx);
+ pipe_surface_reference(&dst_view, NULL);
+ pipe_sampler_view_reference(&src_view, NULL);
+
if (restore_orig[0])
si_reset_blittable_to_orig(src, src_level, &orig_info[0]);