From: Emma Anholt Date: Mon, 20 Sep 2021 21:55:56 +0000 (-0700) Subject: freedreno/a5xx+: Set the IJ_LINEAR_* request bits if we need the regs. X-Git-Tag: upstream/22.3.5~17659 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=590ac4789db02e742f78aab4793f96619724d1e2;p=platform%2Fupstream%2Fmesa.git freedreno/a5xx+: Set the IJ_LINEAR_* request bits if we need the regs. Part-of: --- diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index 0813484..4b9b7bb 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -1364,12 +1364,6 @@ tu6_emit_fs_inputs(struct tu_cs *cs, const struct ir3_shader_variant *fs) for (unsigned i = 0; i < ARRAY_SIZE(ij_regid); i++) ij_regid[i] = ir3_find_sysval_regid(fs, SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL + i); - if (VALIDREG(ij_regid[IJ_LINEAR_SAMPLE])) - tu_finishme("linear sample varying"); - - if (VALIDREG(ij_regid[IJ_LINEAR_CENTROID])) - tu_finishme("linear centroid varying"); - if (fs->num_sampler_prefetch > 0) { assert(VALIDREG(ij_regid[IJ_PERSP_PIXEL])); /* also, it seems like ij_pix is *required* to be r0.x */ @@ -1430,14 +1424,15 @@ tu6_emit_fs_inputs(struct tu_cs *cs, const struct ir3_shader_variant *fs) else need_size = true; } - if (VALIDREG(ij_regid[IJ_LINEAR_PIXEL])) - need_size = true; tu_cs_emit_pkt4(cs, REG_A6XX_GRAS_CNTL, 1); tu_cs_emit(cs, CONDREG(ij_regid[IJ_PERSP_PIXEL], A6XX_GRAS_CNTL_IJ_PERSP_PIXEL) | CONDREG(ij_regid[IJ_PERSP_CENTROID], A6XX_GRAS_CNTL_IJ_PERSP_CENTROID) | CONDREG(ij_regid[IJ_PERSP_SAMPLE], A6XX_GRAS_CNTL_IJ_PERSP_SAMPLE) | + CONDREG(ij_regid[IJ_LINEAR_PIXEL], A6XX_GRAS_CNTL_IJ_LINEAR_PIXEL) | + CONDREG(ij_regid[IJ_LINEAR_CENTROID], A6XX_GRAS_CNTL_IJ_LINEAR_CENTROID) | + CONDREG(ij_regid[IJ_LINEAR_SAMPLE], A6XX_GRAS_CNTL_IJ_LINEAR_SAMPLE) | COND(need_size, A6XX_GRAS_CNTL_IJ_LINEAR_PIXEL) | COND(need_size_persamp, A6XX_GRAS_CNTL_IJ_LINEAR_SAMPLE) | COND(fs->fragcoord_compmask != 0, A6XX_GRAS_CNTL_COORD_MASK(fs->fragcoord_compmask))); @@ -1447,6 +1442,9 @@ tu6_emit_fs_inputs(struct tu_cs *cs, const struct ir3_shader_variant *fs) CONDREG(ij_regid[IJ_PERSP_PIXEL], A6XX_RB_RENDER_CONTROL0_IJ_PERSP_PIXEL) | CONDREG(ij_regid[IJ_PERSP_CENTROID], A6XX_RB_RENDER_CONTROL0_IJ_PERSP_CENTROID) | CONDREG(ij_regid[IJ_PERSP_SAMPLE], A6XX_RB_RENDER_CONTROL0_IJ_PERSP_SAMPLE) | + CONDREG(ij_regid[IJ_LINEAR_PIXEL], A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_PIXEL) | + CONDREG(ij_regid[IJ_LINEAR_CENTROID], A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_CENTROID) | + CONDREG(ij_regid[IJ_LINEAR_SAMPLE], A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_SAMPLE) | COND(need_size, A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_PIXEL) | COND(enable_varyings, A6XX_RB_RENDER_CONTROL0_UNK10) | COND(need_size_persamp, A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_SAMPLE) | diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_program.c b/src/gallium/drivers/freedreno/a5xx/fd5_program.c index 531c4e2..2236420 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_program.c +++ b/src/gallium/drivers/freedreno/a5xx/fd5_program.c @@ -542,15 +542,18 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring, OUT_PKT4(ring, REG_A5XX_SP_SP_CNTL, 1); OUT_RING(ring, 0x00000010); /* XXX */ - /* XXX: missing enable bits for per-sample bary linear centroid and - * IJ_PERSP_SIZE (should be identical to a6xx) - */ - OUT_PKT4(ring, REG_A5XX_GRAS_CNTL, 1); OUT_RING(ring, CONDREG(ij_regid[IJ_PERSP_PIXEL], A5XX_GRAS_CNTL_IJ_PERSP_PIXEL) | CONDREG(ij_regid[IJ_PERSP_CENTROID], A5XX_GRAS_CNTL_IJ_PERSP_CENTROID) | + CONDREG(ij_regid[IJ_PERSP_SAMPLE], + A5XX_GRAS_CNTL_IJ_PERSP_SAMPLE) | + CONDREG(ij_regid[IJ_LINEAR_PIXEL], A5XX_GRAS_CNTL_IJ_LINEAR_PIXEL) | + CONDREG(ij_regid[IJ_LINEAR_CENTROID], + A5XX_GRAS_CNTL_IJ_LINEAR_CENTROID) | + CONDREG(ij_regid[IJ_LINEAR_SAMPLE], + A5XX_GRAS_CNTL_IJ_LINEAR_SAMPLE) | COND(s[FS].v->fragcoord_compmask != 0, A5XX_GRAS_CNTL_COORD_MASK(s[FS].v->fragcoord_compmask) | A5XX_GRAS_CNTL_IJ_LINEAR_PIXEL) | @@ -564,6 +567,14 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring, A5XX_RB_RENDER_CONTROL0_IJ_PERSP_PIXEL) | CONDREG(ij_regid[IJ_PERSP_CENTROID], A5XX_RB_RENDER_CONTROL0_IJ_PERSP_CENTROID) | + CONDREG(ij_regid[IJ_PERSP_SAMPLE], + A5XX_RB_RENDER_CONTROL0_IJ_PERSP_SAMPLE) | + CONDREG(ij_regid[IJ_LINEAR_PIXEL], + A5XX_RB_RENDER_CONTROL0_IJ_LINEAR_PIXEL) | + CONDREG(ij_regid[IJ_LINEAR_CENTROID], + A5XX_RB_RENDER_CONTROL0_IJ_LINEAR_CENTROID) | + CONDREG(ij_regid[IJ_LINEAR_SAMPLE], + A5XX_RB_RENDER_CONTROL0_IJ_LINEAR_SAMPLE) | COND(s[FS].v->fragcoord_compmask != 0, A5XX_RB_RENDER_CONTROL0_COORD_MASK(s[FS].v->fragcoord_compmask) | A5XX_RB_RENDER_CONTROL0_IJ_LINEAR_PIXEL) | diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c index c4d9137..621cce2 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c @@ -834,10 +834,6 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_context *ctx, else need_size = true; } - if (VALIDREG(ij_regid[IJ_LINEAR_PIXEL])) - need_size = true; - - /* XXX: enable bits for linear centroid and linear sample bary */ OUT_PKT4(ring, REG_A6XX_GRAS_CNTL, 1); OUT_RING( @@ -846,6 +842,10 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_context *ctx, CONDREG(ij_regid[IJ_PERSP_CENTROID], A6XX_GRAS_CNTL_IJ_PERSP_CENTROID) | CONDREG(ij_regid[IJ_PERSP_SAMPLE], A6XX_GRAS_CNTL_IJ_PERSP_SAMPLE) | + CONDREG(ij_regid[IJ_LINEAR_PIXEL], A6XX_GRAS_CNTL_IJ_LINEAR_PIXEL) | + CONDREG(ij_regid[IJ_LINEAR_CENTROID], + A6XX_GRAS_CNTL_IJ_LINEAR_CENTROID) | + CONDREG(ij_regid[IJ_LINEAR_SAMPLE], A6XX_GRAS_CNTL_IJ_LINEAR_SAMPLE) | COND(need_size, A6XX_GRAS_CNTL_IJ_LINEAR_PIXEL) | COND(need_size_persamp, A6XX_GRAS_CNTL_IJ_LINEAR_SAMPLE) | COND(fs->fragcoord_compmask != 0, @@ -860,6 +860,12 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_context *ctx, A6XX_RB_RENDER_CONTROL0_IJ_PERSP_CENTROID) | CONDREG(ij_regid[IJ_PERSP_SAMPLE], A6XX_RB_RENDER_CONTROL0_IJ_PERSP_SAMPLE) | + CONDREG(ij_regid[IJ_LINEAR_PIXEL], + A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_PIXEL) | + CONDREG(ij_regid[IJ_LINEAR_CENTROID], + A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_CENTROID) | + CONDREG(ij_regid[IJ_LINEAR_SAMPLE], + A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_SAMPLE) | COND(need_size, A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_PIXEL) | COND(enable_varyings, A6XX_RB_RENDER_CONTROL0_UNK10) | COND(need_size_persamp, A6XX_RB_RENDER_CONTROL0_IJ_LINEAR_SAMPLE) |