panfrost: Generate polygon list manually for SFBD
On clears without draws, the SFBD GPUs need for userspace to generate the trivial polygon list. Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
8e1ae5fa14
commit
6469c1a445
|
@ -57,6 +57,7 @@
|
||||||
static struct midgard_tiler_descriptor
|
static struct midgard_tiler_descriptor
|
||||||
panfrost_emit_midg_tiler(struct panfrost_batch *batch, unsigned vertex_count)
|
panfrost_emit_midg_tiler(struct panfrost_batch *batch, unsigned vertex_count)
|
||||||
{
|
{
|
||||||
|
struct panfrost_screen *screen = pan_screen(batch->ctx->base.screen);
|
||||||
struct midgard_tiler_descriptor t = {};
|
struct midgard_tiler_descriptor t = {};
|
||||||
unsigned height = batch->key.height;
|
unsigned height = batch->key.height;
|
||||||
unsigned width = batch->key.width;
|
unsigned width = batch->key.width;
|
||||||
|
@ -100,6 +101,15 @@ panfrost_emit_midg_tiler(struct panfrost_batch *batch, unsigned vertex_count)
|
||||||
|
|
||||||
/* Disable the tiler */
|
/* Disable the tiler */
|
||||||
t.hierarchy_mask |= MALI_TILER_DISABLED;
|
t.hierarchy_mask |= MALI_TILER_DISABLED;
|
||||||
|
|
||||||
|
if (screen->require_sfbd) {
|
||||||
|
t.hierarchy_mask = 0xFFF; /* TODO: What's this? */
|
||||||
|
t.polygon_list_size = 0x200;
|
||||||
|
|
||||||
|
/* We don't have a SET_VALUE job, so write the polygon list manually */
|
||||||
|
uint32_t *polygon_list_body = (uint32_t *) (tiler_dummy->cpu + header_size);
|
||||||
|
polygon_list_body[0] = 0xa0000000; /* TODO: Just that? */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
t.polygon_list_body =
|
t.polygon_list_body =
|
||||||
|
|
|
@ -670,11 +670,18 @@ panfrost_batch_get_tiler_heap(struct panfrost_batch *batch)
|
||||||
struct panfrost_bo *
|
struct panfrost_bo *
|
||||||
panfrost_batch_get_tiler_dummy(struct panfrost_batch *batch)
|
panfrost_batch_get_tiler_dummy(struct panfrost_batch *batch)
|
||||||
{
|
{
|
||||||
|
struct panfrost_screen *screen = pan_screen(batch->ctx->base.screen);
|
||||||
|
|
||||||
|
uint32_t create_flags = 0;
|
||||||
|
|
||||||
if (batch->tiler_dummy)
|
if (batch->tiler_dummy)
|
||||||
return batch->tiler_dummy;
|
return batch->tiler_dummy;
|
||||||
|
|
||||||
|
if (!screen->require_sfbd)
|
||||||
|
create_flags = PAN_BO_INVISIBLE;
|
||||||
|
|
||||||
batch->tiler_dummy = panfrost_batch_create_bo(batch, 4096,
|
batch->tiler_dummy = panfrost_batch_create_bo(batch, 4096,
|
||||||
PAN_BO_INVISIBLE,
|
create_flags,
|
||||||
PAN_BO_ACCESS_PRIVATE |
|
PAN_BO_ACCESS_PRIVATE |
|
||||||
PAN_BO_ACCESS_RW |
|
PAN_BO_ACCESS_RW |
|
||||||
PAN_BO_ACCESS_VERTEX_TILER |
|
PAN_BO_ACCESS_VERTEX_TILER |
|
||||||
|
|
Loading…
Reference in New Issue