lima: move pp_max_stack_size to lima_submit
pp_max_stack_size is preserved across draws. Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com> Signed-off-by: Qiang Yu <yuq825@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3755>
This commit is contained in:
@@ -248,8 +248,6 @@ struct lima_context {
|
||||
|
||||
struct pipe_debug_callback debug;
|
||||
|
||||
int pp_max_stack_size;
|
||||
|
||||
unsigned index_offset;
|
||||
struct lima_resource *index_res;
|
||||
};
|
||||
|
@@ -34,6 +34,7 @@
|
||||
|
||||
#include "lima_screen.h"
|
||||
#include "lima_context.h"
|
||||
#include "lima_submit.h"
|
||||
#include "lima_program.h"
|
||||
#include "lima_bo.h"
|
||||
#include "ir/lima_ir.h"
|
||||
@@ -349,7 +350,8 @@ lima_update_fs_state(struct lima_context *ctx)
|
||||
fs->shader = NULL;
|
||||
}
|
||||
|
||||
ctx->pp_max_stack_size = MAX2(ctx->pp_max_stack_size, ctx->fs->stack_size);
|
||||
struct lima_submit *submit = lima_submit_get(ctx);
|
||||
submit->pp_max_stack_size = MAX2(submit->pp_max_stack_size, ctx->fs->stack_size);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@@ -751,7 +751,7 @@ lima_pack_pp_frame_reg(struct lima_submit *submit, uint32_t *frame_reg,
|
||||
|
||||
/* These are "stack size" and "stack offset" shifted,
|
||||
* here they are assumed to be always the same. */
|
||||
frame->fragment_stack_size = ctx->pp_max_stack_size << 16 | ctx->pp_max_stack_size;
|
||||
frame->fragment_stack_size = submit->pp_max_stack_size << 16 | submit->pp_max_stack_size;
|
||||
|
||||
/* related with MSAA and different value when r4p0/r7p0 */
|
||||
frame->supersampled_height = fb->base.height * 2 - 1;
|
||||
@@ -847,10 +847,10 @@ lima_do_submit(struct lima_submit *submit)
|
||||
}
|
||||
|
||||
uint32_t pp_stack_va = 0;
|
||||
if (ctx->pp_max_stack_size) {
|
||||
if (submit->pp_max_stack_size) {
|
||||
lima_submit_create_stream_bo(
|
||||
submit, LIMA_PIPE_PP,
|
||||
screen->num_pp * ctx->pp_max_stack_size * pp_stack_pp_size,
|
||||
screen->num_pp * submit->pp_max_stack_size * pp_stack_pp_size,
|
||||
&pp_stack_va);
|
||||
}
|
||||
|
||||
@@ -864,9 +864,9 @@ lima_do_submit(struct lima_submit *submit)
|
||||
|
||||
for (int i = 0; i < screen->num_pp; i++) {
|
||||
pp_frame.plbu_array_address[i] = ps->va + ps->offset[i];
|
||||
if (ctx->pp_max_stack_size)
|
||||
if (submit->pp_max_stack_size)
|
||||
pp_frame.fragment_stack_address[i] = pp_stack_va +
|
||||
ctx->pp_max_stack_size * pp_stack_pp_size * i;
|
||||
submit->pp_max_stack_size * pp_stack_pp_size * i;
|
||||
}
|
||||
|
||||
lima_dump_command_stream_print(
|
||||
@@ -880,10 +880,10 @@ lima_do_submit(struct lima_submit *submit)
|
||||
lima_pack_pp_frame_reg(submit, pp_frame.frame, pp_frame.wb);
|
||||
pp_frame.num_pp = screen->num_pp;
|
||||
|
||||
if (ctx->pp_max_stack_size)
|
||||
if (submit->pp_max_stack_size)
|
||||
for (int i = 0; i < screen->num_pp; i++)
|
||||
pp_frame.fragment_stack_address[i] = pp_stack_va +
|
||||
ctx->pp_max_stack_size * pp_stack_pp_size * i;
|
||||
submit->pp_max_stack_size * pp_stack_pp_size * i;
|
||||
|
||||
if (ps->map) {
|
||||
for (int i = 0; i < screen->num_pp; i++)
|
||||
@@ -922,8 +922,6 @@ lima_do_submit(struct lima_submit *submit)
|
||||
surf->reload = true;
|
||||
}
|
||||
|
||||
ctx->pp_max_stack_size = 0;
|
||||
|
||||
ctx->damage_rect.minx = ctx->damage_rect.miny = 0xffff;
|
||||
ctx->damage_rect.maxx = ctx->damage_rect.maxy = 0;
|
||||
|
||||
|
@@ -52,6 +52,8 @@ struct lima_submit {
|
||||
struct util_dynarray plbu_cmd_head;
|
||||
|
||||
unsigned resolve;
|
||||
|
||||
int pp_max_stack_size;
|
||||
};
|
||||
|
||||
struct lima_submit *lima_submit_get(struct lima_context *ctx);
|
||||
|
Reference in New Issue
Block a user