freedreno: remove unnecessary null checks
[mesa.git] / src / gallium / drivers / freedreno / a3xx / fd3_draw.c
index 6ff762e2ae45ef3800df1dedf484a94df12883e1..3906c9b996ecca9053076d3eaf32b564b7b5d04a 100644 (file)
@@ -60,6 +60,9 @@ draw_impl(struct fd_context *ctx, struct fd_ringbuffer *ring,
        const struct pipe_draw_info *info = emit->info;
        enum pc_di_primtype primtype = ctx->primtypes[info->mode];
 
+       if (!(fd3_emit_get_vp(emit) && fd3_emit_get_fp(emit)))
+               return;
+
        fd3_emit_state(ctx, ring, emit);
 
        if (emit->dirty & (FD_DIRTY_VTXBUF | FD_DIRTY_VTXSTATE))
@@ -78,9 +81,9 @@ draw_impl(struct fd_context *ctx, struct fd_ringbuffer *ring,
        OUT_RING(ring, info->primitive_restart ? /* PC_RESTART_INDEX */
                        info->restart_index : 0xffffffff);
 
-       if (ctx->rasterizer && ctx->rasterizer->point_size_per_vertex &&
-               info->mode == PIPE_PRIM_POINTS)
-               primtype = DI_PT_POINTLIST_A2XX;
+       if (ctx->rasterizer->point_size_per_vertex &&
+                       (info->mode == PIPE_PRIM_POINTS))
+               primtype = DI_PT_POINTLIST_PSIZE;
 
        fd_draw_emit(ctx, ring,
                        primtype,
@@ -104,14 +107,12 @@ fixup_shader_state(struct fd_context *ctx, struct ir3_shader_key *key)
                if (last_key->has_per_samp || key->has_per_samp) {
                        if ((last_key->vsaturate_s != key->vsaturate_s) ||
                                        (last_key->vsaturate_t != key->vsaturate_t) ||
-                                       (last_key->vsaturate_r != key->vsaturate_r) ||
-                                       (last_key->vinteger_s != key->vinteger_s))
+                                       (last_key->vsaturate_r != key->vsaturate_r))
                                ctx->prog.dirty |= FD_SHADER_DIRTY_VP;
 
                        if ((last_key->fsaturate_s != key->fsaturate_s) ||
                                        (last_key->fsaturate_t != key->fsaturate_t) ||
-                                       (last_key->fsaturate_r != key->fsaturate_r) ||
-                                       (last_key->finteger_s != key->finteger_s))
+                                       (last_key->fsaturate_r != key->fsaturate_r))
                                ctx->prog.dirty |= FD_SHADER_DIRTY_FP;
                }
 
@@ -129,7 +130,6 @@ static void
 fd3_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info)
 {
        struct fd3_context *fd3_ctx = fd3_context(ctx);
-       struct pipe_framebuffer_state *pfb = &ctx->framebuffer;
        struct fd3_emit emit = {
                .vtx  = &ctx->vtx,
                .prog = &ctx->prog,
@@ -137,24 +137,21 @@ fd3_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info)
                .key = {
                        /* do binning pass first: */
                        .binning_pass = true,
-                       .color_two_side = ctx->rasterizer ? ctx->rasterizer->light_twoside : false,
+                       .color_two_side = ctx->rasterizer->light_twoside,
                        // TODO set .half_precision based on render target format,
                        // ie. float16 and smaller use half, float32 use full..
                        .half_precision = !!(fd_mesa_debug & FD_DBG_FRAGHALF),
-                       .has_per_samp = (fd3_ctx->fsaturate || fd3_ctx->vsaturate ||
-                                                        fd3_ctx->vinteger_s || fd3_ctx->finteger_s),
+                       .has_per_samp = (fd3_ctx->fsaturate || fd3_ctx->vsaturate),
                        .vsaturate_s = fd3_ctx->vsaturate_s,
                        .vsaturate_t = fd3_ctx->vsaturate_t,
                        .vsaturate_r = fd3_ctx->vsaturate_r,
                        .fsaturate_s = fd3_ctx->fsaturate_s,
                        .fsaturate_t = fd3_ctx->fsaturate_t,
                        .fsaturate_r = fd3_ctx->fsaturate_r,
-                       .vinteger_s = fd3_ctx->vinteger_s,
-                       .finteger_s = fd3_ctx->finteger_s,
                },
-               .format = pipe_surface_format(pfb->cbufs[0]),
-               .rasterflat = ctx->rasterizer && ctx->rasterizer->flatshade,
-               .sprite_coord_enable = ctx->rasterizer ? ctx->rasterizer->sprite_coord_enable : 0,
+               .rasterflat = ctx->rasterizer->flatshade,
+               .sprite_coord_enable = ctx->rasterizer->sprite_coord_enable,
+               .sprite_coord_mode = ctx->rasterizer->sprite_coord_mode,
        };
        unsigned dirty;
 
@@ -239,17 +236,15 @@ fd3_clear(struct fd_context *ctx, unsigned buffers,
 {
        struct fd3_context *fd3_ctx = fd3_context(ctx);
        struct pipe_framebuffer_state *pfb = &ctx->framebuffer;
-       enum pipe_format format = pipe_surface_format(pfb->cbufs[0]);
        struct fd_ringbuffer *ring = ctx->ring;
        unsigned dirty = ctx->dirty;
-       unsigned ce, i;
+       unsigned i;
        struct fd3_emit emit = {
                .vtx  = &fd3_ctx->solid_vbuf_state,
                .prog = &ctx->solid_prog,
                .key = {
-                       .half_precision = fd3_half_precision(format),
+                       .half_precision = fd_half_precision(pfb),
                },
-               .format = format,
        };
 
        dirty &= FD_DIRTY_FRAMEBUFFER | FD_DIRTY_SCISSOR;
@@ -326,17 +321,12 @@ fd3_clear(struct fd_context *ctx, unsigned buffers,
                                A3XX_RB_STENCIL_CONTROL_ZFAIL_BF(STENCIL_KEEP));
        }
 
-       if (buffers & PIPE_CLEAR_COLOR) {
-               ce = 0xf;
-       } else {
-               ce = 0x0;
-       }
-
-       for (i = 0; i < 4; i++) {
+       for (i = 0; i < A3XX_MAX_RENDER_TARGETS; i++) {
                OUT_PKT0(ring, REG_A3XX_RB_MRT_CONTROL(i), 1);
                OUT_RING(ring, A3XX_RB_MRT_CONTROL_ROP_CODE(ROP_COPY) |
                                A3XX_RB_MRT_CONTROL_DITHER_MODE(DITHER_ALWAYS) |
-                               A3XX_RB_MRT_CONTROL_COMPONENT_ENABLE(ce));
+                               COND(buffers & (PIPE_CLEAR_COLOR0 << i),
+                                        A3XX_RB_MRT_CONTROL_COMPONENT_ENABLE(0xf)));
 
                OUT_PKT0(ring, REG_A3XX_RB_MRT_BLEND_CONTROL(i), 1);
                OUT_RING(ring, A3XX_RB_MRT_BLEND_CONTROL_RGB_SRC_FACTOR(FACTOR_ONE) |
@@ -352,7 +342,7 @@ fd3_clear(struct fd_context *ctx, unsigned buffers,
 
        fd3_emit_vertex_bufs(ring, &emit);
 
-       fd3_emit_constant(ring, SB_FRAG_SHADER, 0, 0, 4, color->ui, NULL);
+       fd3_emit_const(ring, SHADER_FRAGMENT, 0, 0, 4, color->ui, NULL);
 
        OUT_PKT0(ring, REG_A3XX_PC_PRIM_VTX_CNTL, 1);
        OUT_RING(ring, A3XX_PC_PRIM_VTX_CNTL_STRIDE_IN_VPC(0) |