mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-23 17:00:22 +01:00
mesa/st: move cloning of NIR shader for compute
Since in the NIR case, driver takes ownership of the NIR shader, we need to clone what is passed to the driver. Normally this is done as part of creating the shader variant (where is clone is anyways needed). But compute shaders have no variants, so we were cloning earlier. The problem is that after the NIR linking optimizations, we ended up cloning *before* all the lowering passes where done. So move this into st_get_cp_variant(), to make compute shaders work more like other shader stages. Signed-off-by: Rob Clark <robdclark@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
12a96aaf90
commit
fd6a96635e
2 changed files with 5 additions and 2 deletions
|
|
@ -431,7 +431,7 @@ set_st_program(struct gl_program *prog,
|
|||
stcp = (struct st_compute_program *)prog;
|
||||
stcp->shader_program = shader_program;
|
||||
stcp->tgsi.ir_type = PIPE_SHADER_IR_NIR;
|
||||
stcp->tgsi.prog = nir_shader_clone(NULL, nir);
|
||||
stcp->tgsi.prog = nir;
|
||||
break;
|
||||
default:
|
||||
unreachable("unknown shader stage");
|
||||
|
|
|
|||
|
|
@ -1659,7 +1659,10 @@ st_get_cp_variant(struct st_context *st,
|
|||
v = CALLOC_STRUCT(st_basic_variant);
|
||||
if (v) {
|
||||
/* fill in new variant */
|
||||
v->driver_shader = pipe->create_compute_state(pipe, tgsi);
|
||||
struct pipe_compute_state cs = *tgsi;
|
||||
if (tgsi->ir_type == PIPE_SHADER_IR_NIR)
|
||||
cs.prog = nir_shader_clone(NULL, tgsi->prog);
|
||||
v->driver_shader = pipe->create_compute_state(pipe, &cs);
|
||||
v->key = key;
|
||||
|
||||
/* insert into list */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue