diff options
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_draw.c')
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_draw.c | 71 |
1 files changed, 1 insertions, 70 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c index 67038868104..ae7be1ab5a1 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.c +++ b/src/gallium/drivers/freedreno/freedreno_draw.c @@ -32,6 +32,7 @@ #include "util/u_format.h" #include "util/u_helpers.h" +#include "freedreno_blitter.h" #include "freedreno_draw.h" #include "freedreno_context.h" #include "freedreno_fence.h" @@ -303,76 +304,6 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) pipe_resource_reference(&indexbuf, NULL); } -/* Generic clear implementation (partially) using u_blitter: */ -static void -fd_blitter_clear(struct pipe_context *pctx, unsigned buffers, - const union pipe_color_union *color, double depth, unsigned stencil) -{ - struct fd_context *ctx = fd_context(pctx); - struct pipe_framebuffer_state *pfb = &ctx->batch->framebuffer; - struct blitter_context *blitter = ctx->blitter; - - fd_blitter_pipe_begin(ctx, false, true, FD_STAGE_CLEAR); - - util_blitter_common_clear_setup(blitter, pfb->width, pfb->height, - buffers, NULL, NULL); - - struct pipe_stencil_ref sr = { - .ref_value = { stencil & 0xff } - }; - pctx->set_stencil_ref(pctx, &sr); - - struct pipe_constant_buffer cb = { - .buffer_size = 16, - .user_buffer = &color->ui, - }; - pctx->set_constant_buffer(pctx, PIPE_SHADER_FRAGMENT, 0, &cb); - - if (!ctx->clear_rs_state) { - const struct pipe_rasterizer_state tmpl = { - .cull_face = PIPE_FACE_NONE, - .half_pixel_center = 1, - .bottom_edge_rule = 1, - .flatshade = 1, - .depth_clip_near = 1, - .depth_clip_far = 1, - }; - ctx->clear_rs_state = pctx->create_rasterizer_state(pctx, &tmpl); - } - pctx->bind_rasterizer_state(pctx, ctx->clear_rs_state); - - struct pipe_viewport_state vp = { - .scale = { 0.5f * pfb->width, -0.5f * pfb->height, depth }, - .translate = { 0.5f * pfb->width, 0.5f * pfb->height, 0.0f }, - }; - 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, - &ctx->solid_vbuf_state.vertexbuf.vb[0]); - pctx->set_stream_output_targets(pctx, 0, NULL, NULL); - pctx->bind_vs_state(pctx, ctx->solid_prog.vp); - pctx->bind_fs_state(pctx, ctx->solid_prog.fp); - - struct pipe_draw_info info = { - .mode = PIPE_PRIM_MAX, /* maps to DI_PT_RECTLIST */ - .count = 2, - .max_index = 1, - .instance_count = 1, - }; - ctx->draw_vbo(ctx, &info, 0); - - util_blitter_restore_constant_buffer_state(blitter); - util_blitter_restore_vertex_states(blitter); - util_blitter_restore_fragment_states(blitter); - util_blitter_restore_textures(blitter); - util_blitter_restore_fb_state(blitter); - util_blitter_restore_render_cond(blitter); - util_blitter_unset_running_flag(blitter); - - fd_blitter_pipe_end(ctx); -} - static void fd_clear(struct pipe_context *pctx, unsigned buffers, const union pipe_color_union *color, double depth, unsigned stencil) |