X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fpanfrost%2Fpan_context.c;h=2fbb19c7d257457269be40210fccb8cfaf50d848;hb=e0a6af9d7b73ee3bf32ba471406810dfc6cfd435;hp=0107f87d6a3d3f5b18082636ee369fafae1a5eda;hpb=ec35159fba57531dd88726504c4813f02a8ed0fd;p=mesa.git diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 0107f87d6a3..2fbb19c7d25 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -76,20 +76,14 @@ panfrost_emit_midg_tiler(struct panfrost_batch *batch, unsigned vertex_count) t.polygon_list_size = panfrost_tiler_full_size( width, height, t.hierarchy_mask, hierarchy); - /* Sanity check */ - if (vertex_count) { - struct panfrost_bo *tiler_heap; - - tiler_heap = panfrost_batch_get_tiler_heap(batch); t.polygon_list = panfrost_batch_get_polygon_list(batch, header_size + t.polygon_list_size); - /* Allow the entire tiler heap */ - t.heap_start = tiler_heap->gpu; - t.heap_end = tiler_heap->gpu + tiler_heap->size; + t.heap_start = device->tiler_heap->gpu; + t.heap_end = device->tiler_heap->gpu + device->tiler_heap->size; } else { struct panfrost_bo *tiler_dummy; @@ -139,21 +133,9 @@ panfrost_clear( * fragment jobs. */ struct panfrost_batch *batch = panfrost_get_fresh_batch_for_fbo(ctx); - - panfrost_batch_add_fbo_bos(batch); panfrost_batch_clear(batch, buffers, color, depth, stencil); } -/* Reset per-frame context, called on context initialisation as well as after - * flushing a frame */ - -void -panfrost_invalidate_frame(struct panfrost_context *ctx) -{ - /* TODO: When does this need to be handled? */ - ctx->active_queries = true; -} - bool panfrost_writes_point_size(struct panfrost_context *ctx) { @@ -163,18 +145,6 @@ panfrost_writes_point_size(struct panfrost_context *ctx) return vs->writes_point_size && ctx->active_prim == PIPE_PRIM_POINTS; } -/* Compute number of UBOs active (more specifically, compute the highest UBO - * number addressable -- if there are gaps, include them in the count anyway). - * We always include UBO #0 in the count, since we *need* uniforms enabled for - * sysvals. */ - -unsigned -panfrost_ubo_count(struct panfrost_context *ctx, enum pipe_shader_type stage) -{ - unsigned mask = ctx->constant_buffer[stage].enabled_mask | 1; - return 32 - __builtin_clz(mask); -} - /* The entire frame is in memory -- send it off to the kernel! */ void @@ -309,26 +279,19 @@ panfrost_draw_vbo( assert(ctx->rasterizer != NULL); if (!(ctx->draw_modes & (1 << mode))) { - if (mode == PIPE_PRIM_QUADS && info->count == 4 && !ctx->rasterizer->base.flatshade) { - mode = PIPE_PRIM_TRIANGLE_FAN; - } else { - if (info->count < 4) { - /* Degenerate case? */ - return; - } - - util_primconvert_save_rasterizer_state(ctx->primconvert, &ctx->rasterizer->base); - util_primconvert_draw_vbo(ctx->primconvert, info); + if (info->count < 4) { + /* Degenerate case? */ return; } + + util_primconvert_save_rasterizer_state(ctx->primconvert, &ctx->rasterizer->base); + util_primconvert_draw_vbo(ctx->primconvert, info); + return; } - /* Now that we have a guaranteed terminating path, find the job. - * Assignment commented out to prevent unused warning */ + /* Now that we have a guaranteed terminating path, find the job. */ struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); - - panfrost_batch_add_fbo_bos(batch); panfrost_batch_set_requirements(batch); /* Take into account a negative bias */ @@ -351,9 +314,6 @@ panfrost_draw_vbo( panfrost_statistics_record(ctx, info); - /* Dispatch "compute jobs" for the vertex/tiler pair as (1, - * vertex_count, 1) */ - panfrost_pack_work_groups_fused(&vertex_prefix, &tiler_prefix, 1, vertex_count, info->instance_count, 1, 1, 1); @@ -406,6 +366,9 @@ panfrost_create_rasterizer_state( so->base = *cso; + /* Gauranteed with the core GL call, so don't expose ARB_polygon_offset */ + assert(cso->offset_clamp == 0.0); + return so; } @@ -421,9 +384,6 @@ panfrost_bind_rasterizer_state( if (!hwcso) return; - /* Gauranteed with the core GL call, so don't expose ARB_polygon_offset */ - assert(ctx->rasterizer->base.offset_clamp == 0.0); - /* Point sprites are emulated */ struct panfrost_shader_state *variant = panfrost_get_shader_state(ctx, PIPE_SHADER_FRAGMENT); @@ -1041,7 +1001,6 @@ panfrost_set_framebuffer_state(struct pipe_context *pctx, util_copy_framebuffer_state(&ctx->pipe_framebuffer, fb); ctx->batch = NULL; - panfrost_invalidate_frame(ctx); /* We may need to generate a new variant if the fragment shader is * keyed to the framebuffer format (due to EXT_framebuffer_fetch) */ @@ -1491,7 +1450,6 @@ panfrost_create_context(struct pipe_screen *screen, void *priv, unsigned flags) /* Prepare for render! */ panfrost_batch_init(ctx); - panfrost_invalidate_frame(ctx); if (!(dev->quirks & IS_BIFROST)) { for (unsigned c = 0; c < PIPE_MAX_COLOR_BUFS; ++c) @@ -1500,6 +1458,7 @@ panfrost_create_context(struct pipe_screen *screen, void *priv, unsigned flags) /* By default mask everything on */ ctx->sample_mask = ~0; + ctx->active_queries = true; return gallium; }