소스 검색

nir: Report progress from nir_split_var_copies().

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
tags/11.1-branchpoint
Kenneth Graunke 10 년 전
부모
커밋
dc18b9357b
2개의 변경된 파일13개의 추가작업 그리고 4개의 파일을 삭제
  1. 1
    1
      src/glsl/nir/nir.h
  2. 12
    3
      src/glsl/nir/nir_split_var_copies.c

+ 1
- 1
src/glsl/nir/nir.h 파일 보기

@@ -1804,7 +1804,7 @@ void nir_dump_dom_frontier(nir_shader *shader, FILE *fp);
void nir_dump_cfg_impl(nir_function_impl *impl, FILE *fp);
void nir_dump_cfg(nir_shader *shader, FILE *fp);

void nir_split_var_copies(nir_shader *shader);
bool nir_split_var_copies(nir_shader *shader);

void nir_lower_var_copy_instr(nir_intrinsic_instr *copy, void *mem_ctx);
void nir_lower_var_copies(nir_shader *shader);

+ 12
- 3
src/glsl/nir/nir_split_var_copies.c 파일 보기

@@ -64,6 +64,7 @@
struct split_var_copies_state {
void *mem_ctx;
void *dead_ctx;
bool progress;
};

static nir_deref *
@@ -198,6 +199,7 @@ split_var_copy_instr(nir_intrinsic_instr *old_copy,
* remove the old one later.
*/
nir_instr_insert_after(&old_copy->instr, &new_copy->instr);
state->progress = true;
}
break;

@@ -256,24 +258,31 @@ split_var_copies_block(nir_block *block, void *void_state)
return true;
}

static void
static bool
split_var_copies_impl(nir_function_impl *impl)
{
struct split_var_copies_state state;

state.mem_ctx = ralloc_parent(impl);
state.dead_ctx = ralloc_context(NULL);
state.progress = false;

nir_foreach_block(impl, split_var_copies_block, &state);

ralloc_free(state.dead_ctx);

return state.progress;
}

void
bool
nir_split_var_copies(nir_shader *shader)
{
bool progress = false;

nir_foreach_overload(shader, overload) {
if (overload->impl)
split_var_copies_impl(overload->impl);
progress = split_var_copies_impl(overload->impl) || progress;
}

return progress;
}

Loading…
취소
저장