diff options
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_blitter.c')
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_blitter.c | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_blitter.c b/src/gallium/drivers/freedreno/freedreno_blitter.c index c41a0736ecb..43f08f40d81 100644 --- a/src/gallium/drivers/freedreno/freedreno_blitter.c +++ b/src/gallium/drivers/freedreno/freedreno_blitter.c @@ -79,7 +79,9 @@ default_src_texture(struct pipe_sampler_view *src_templ, static void fd_blitter_pipe_begin(struct fd_context *ctx, bool render_cond) assert_dt { - util_blitter_save_vertex_buffer_slot(ctx->blitter, ctx->vtx.vertexbuf.vb); + util_blitter_save_vertex_buffers( + ctx->blitter, ctx->vtx.vertexbuf.vb, + util_last_bit(ctx->vtx.vertexbuf.enabled_mask)); util_blitter_save_vertex_elements(ctx->blitter, ctx->vtx.vtx); util_blitter_save_vertex_shader(ctx->blitter, ctx->prog.vs); util_blitter_save_tessctrl_shader(ctx->blitter, ctx->prog.hs); @@ -88,13 +90,13 @@ fd_blitter_pipe_begin(struct fd_context *ctx, bool render_cond) assert_dt util_blitter_save_so_targets(ctx->blitter, ctx->streamout.num_targets, ctx->streamout.targets); util_blitter_save_rasterizer(ctx->blitter, ctx->rasterizer); - util_blitter_save_viewport(ctx->blitter, &ctx->viewport); - util_blitter_save_scissor(ctx->blitter, &ctx->scissor); + util_blitter_save_viewport(ctx->blitter, &ctx->viewport[0]); + util_blitter_save_scissor(ctx->blitter, &ctx->scissor[0]); util_blitter_save_fragment_shader(ctx->blitter, ctx->prog.fs); util_blitter_save_blend(ctx->blitter, ctx->blend); util_blitter_save_depth_stencil_alpha(ctx->blitter, ctx->zsa); util_blitter_save_stencil_ref(ctx->blitter, &ctx->stencil_ref); - util_blitter_save_sample_mask(ctx->blitter, ctx->sample_mask); + util_blitter_save_sample_mask(ctx->blitter, ctx->sample_mask, ctx->min_samples); util_blitter_save_framebuffer(ctx->blitter, &ctx->framebuffer); util_blitter_save_fragment_sampler_states( ctx->blitter, ctx->tex[PIPE_SHADER_FRAGMENT].num_samplers, @@ -166,7 +168,7 @@ fd_blitter_blit(struct fd_context *ctx, const struct pipe_blit_info *info) util_blitter_blit_generic( ctx->blitter, dst_view, &info->dst.box, src_view, &info->src.box, src->width0, src->height0, info->mask, info->filter, - info->scissor_enable ? &info->scissor : NULL, info->alpha_blend, false); + info->scissor_enable ? &info->scissor : NULL, info->alpha_blend, false, 0); pipe_surface_reference(&dst_view, NULL); pipe_sampler_view_reference(&src_view, NULL); @@ -235,8 +237,8 @@ fd_blitter_clear(struct pipe_context *pctx, unsigned buffers, pctx->set_viewport_states(pctx, 0, 1, &vp); pctx->bind_vertex_elements_state(pctx, ctx->solid_vbuf_state.vtx); - pctx->set_vertex_buffers(pctx, blitter->vb_slot, 1, 0, false, - &ctx->solid_vbuf_state.vertexbuf.vb[0]); + util_set_vertex_buffers(pctx, 1, false, + &ctx->solid_vbuf_state.vertexbuf.vb[0]); pctx->set_stream_output_targets(pctx, 0, NULL, NULL); if (pfb->layers > 1) @@ -254,7 +256,7 @@ fd_blitter_clear(struct pipe_context *pctx, unsigned buffers, pctx->bind_tes_state(pctx, NULL); struct pipe_draw_info info = { - .mode = PIPE_PRIM_MAX, /* maps to DI_PT_RECTLIST */ + .mode = MESA_PRIM_COUNT, /* maps to DI_PT_RECTLIST */ .index_bounds_valid = true, .max_index = 1, .instance_count = MAX2(1, pfb->layers), @@ -279,6 +281,35 @@ fd_blitter_clear(struct pipe_context *pctx, unsigned buffers, fd_blitter_pipe_end(ctx); } +/* Partially generic clear_render_target implementation using u_blitter */ +void +fd_blitter_clear_render_target(struct pipe_context *pctx, struct pipe_surface *ps, + const union pipe_color_union *color, unsigned x, + unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) +{ + struct fd_context *ctx = fd_context(pctx); + + fd_blitter_pipe_begin(ctx, render_condition_enabled); + util_blitter_clear_render_target(ctx->blitter, ps, color, x, y, w, h); + fd_blitter_pipe_end(ctx); +} + +/* Partially generic clear_depth_stencil implementation using u_blitter */ +void +fd_blitter_clear_depth_stencil(struct pipe_context *pctx, struct pipe_surface *ps, + unsigned buffers, double depth, unsigned stencil, + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) +{ + struct fd_context *ctx = fd_context(pctx); + + fd_blitter_pipe_begin(ctx, render_condition_enabled); + util_blitter_clear_depth_stencil(ctx->blitter, ps, buffers, depth, + stencil, x, y, w, h); + fd_blitter_pipe_end(ctx); +} + /** * Optimal hardware path for blitting pixels. * Scaling, format conversion, up- and downsampling (resolve) are allowed. |