diff --git a/src/broadcom/common/v3d_util.c b/src/broadcom/common/v3d_util.c index 6f8dee2fbdc..813d4f7f123 100644 --- a/src/broadcom/common/v3d_util.c +++ b/src/broadcom/common/v3d_util.c @@ -268,23 +268,3 @@ v3d_compute_rt_row_row_stride_128_bits(uint32_t tile_width, return (tile_width * bpp) / 2; } - -static inline uint32_t -compute_prog_score(struct v3d_prog_data *p, uint32_t qpu_size) -{ - const uint32_t inst_count = qpu_size / sizeof(uint64_t); - const uint32_t tmu_count = p->tmu_count + p->tmu_spills + p->tmu_fills; - return inst_count + 4 * tmu_count; -} - -void -v3d_update_double_buffer_score(uint32_t vertex_count, - uint32_t vs_qpu_size, - uint32_t fs_qpu_size, - struct v3d_prog_data *vs, - struct v3d_prog_data *fs, - struct v3d_double_buffer_score *score) -{ - score->geom += vertex_count * compute_prog_score(vs, vs_qpu_size); - score->render += compute_prog_score(fs, fs_qpu_size); -} diff --git a/src/broadcom/common/v3d_util.h b/src/broadcom/common/v3d_util.h index f26d467965f..d91c3a30385 100644 --- a/src/broadcom/common/v3d_util.h +++ b/src/broadcom/common/v3d_util.h @@ -27,7 +27,6 @@ #include "util/macros.h" #include "common/v3d_device_info.h" #include "compiler/shader_enums.h" -#include "broadcom/compiler/v3d_compiler.h" #include "util/format/u_formats.h" uint32_t @@ -81,34 +80,4 @@ uint32_t v3d_compute_rt_row_row_stride_128_bits(uint32_t tile_width, uint32_t bpp); -struct v3d_double_buffer_score { - uint32_t geom; - uint32_t render; -}; - -void -v3d_update_double_buffer_score(uint32_t vertex_count, - uint32_t vs_qpu_size, - uint32_t fs_qpu_size, - struct v3d_prog_data *vs, - struct v3d_prog_data *fs, - struct v3d_double_buffer_score *score); - -static inline bool -v3d_double_buffer_score_ok(struct v3d_double_buffer_score *score) -{ - /* Double buffer decreases tile size, which increases - * VS invocations so too much geometry is not good. - */ - if (score->geom > 200000) - return false; - - /* We want enough rendering work to be able to hide - * latency from tile stores. - */ - if (score->render < 200) - return false; - return true; -} - #endif diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h index 063a3ae06ba..49ac9245013 100644 --- a/src/broadcom/compiler/v3d_compiler.h +++ b/src/broadcom/compiler/v3d_compiler.h @@ -1547,6 +1547,36 @@ vir_BRANCH(struct v3d_compile *c, enum v3d_qpu_branch_cond cond) return vir_emit_nondef(c, vir_branch_inst(c, cond)); } +struct v3d_double_buffer_score { + uint32_t geom; + uint32_t render; +}; + +void +v3d_update_double_buffer_score(uint32_t vertex_count, + uint32_t vs_qpu_size, + uint32_t fs_qpu_size, + struct v3d_prog_data *vs, + struct v3d_prog_data *fs, + struct v3d_double_buffer_score *score); + +static inline bool +v3d_double_buffer_score_ok(struct v3d_double_buffer_score *score) +{ + /* Double buffer decreases tile size, which increases + * VS invocations so too much geometry is not good. + */ + if (score->geom > 200000) + return false; + + /* We want enough rendering work to be able to hide + * latency from tile stores. + */ + if (score->render < 200) + return false; + return true; +} + #define vir_for_each_block(block, c) \ list_for_each_entry(struct qblock, block, &c->blocks, link) diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index d137de67695..bae1343c528 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -2523,3 +2523,23 @@ v3d_compute_vpm_config(struct v3d_device_info *devinfo, return true; } + +static inline uint32_t +compute_prog_score(struct v3d_prog_data *p, uint32_t qpu_size) +{ + const uint32_t inst_count = qpu_size / sizeof(uint64_t); + const uint32_t tmu_count = p->tmu_count + p->tmu_spills + p->tmu_fills; + return inst_count + 4 * tmu_count; +} + +void +v3d_update_double_buffer_score(uint32_t vertex_count, + uint32_t vs_qpu_size, + uint32_t fs_qpu_size, + struct v3d_prog_data *vs, + struct v3d_prog_data *fs, + struct v3d_double_buffer_score *score) +{ + score->geom += vertex_count * compute_prog_score(vs, vs_qpu_size); + score->render += compute_prog_score(fs, fs_qpu_size); +} diff --git a/src/broadcom/meson.build b/src/broadcom/meson.build index eff16f31419..3ba003c75ec 100644 --- a/src/broadcom/meson.build +++ b/src/broadcom/meson.build @@ -70,7 +70,7 @@ libbroadcom_v3d = static_library( link_whole : v3d_libs + per_version_libs, link_with: [libv3d_neon], build_by_default : false, - dependencies: [dep_valgrind, dep_thread, idep_mesautil, idep_nir_headers], + dependencies: [dep_valgrind, dep_thread, idep_mesautil], ) if with_broadcom_vk