nv50: Keep nir directly in nv50_program

Reviewed-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24175>
This commit is contained in:
M Henning
2023-07-16 20:56:59 -04:00
committed by Marge Bot
parent d00d967399
commit 9178b049cc
5 changed files with 18 additions and 34 deletions
@@ -340,19 +340,8 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
info->type = prog->type;
info->target = chipset;
info->bin.sourceRep = prog->pipe.type;
switch (prog->pipe.type) {
case PIPE_SHADER_IR_TGSI:
info->bin.source = (void *)prog->pipe.tokens;
break;
case PIPE_SHADER_IR_NIR:
info->bin.source = (void *)nir_shader_clone(NULL, prog->pipe.ir.nir);
break;
default:
assert(!"unsupported IR!");
free(info);
return false;
}
info->bin.sourceRep = PIPE_SHADER_IR_NIR;
info->bin.source = (void *)nir_shader_clone(NULL, prog->nir);
info->bin.smemSize = prog->cp.smem_size;
info->io.auxCBSlot = 15;
@@ -451,9 +440,9 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
}
}
if (prog->pipe.stream_output.num_outputs)
if (prog->stream_output.num_outputs)
prog->so = nv50_program_create_strmout_state(&info_out,
&prog->pipe.stream_output);
&prog->stream_output);
util_debug_message(debug, SHADER_INFO,
"type: %d, local: %d, shared: %d, gpr: %d, inst: %d, loops: %d, bytes: %d",
@@ -543,7 +532,7 @@ nv50_program_upload_code(struct nv50_context *nv50, struct nv50_program *prog)
void
nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p)
{
const struct pipe_shader_state pipe = p->pipe;
struct nir_shader *nir = p->nir;
const uint8_t type = p->type;
if (p->mem) {
@@ -560,6 +549,6 @@ nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p)
memset(p, 0, sizeof(*p));
p->pipe = pipe;
p->nir = nir;
p->type = type;
}
@@ -24,6 +24,7 @@
#define __NV50_PROG_H__
struct nv50_context;
struct nir_shader;
#include "pipe/p_state.h"
@@ -55,7 +56,8 @@ struct nv50_gmem_state {
};
struct nv50_program {
struct pipe_shader_state pipe;
struct nir_shader *nir;
struct pipe_stream_output_info stream_output;
uint8_t type;
bool translated;
+6 -13
View File
@@ -747,15 +747,13 @@ nv50_sp_state_create(struct pipe_context *pipe,
return NULL;
prog->type = type;
prog->pipe.type = cso->type;
switch (cso->type) {
case PIPE_SHADER_IR_TGSI:
prog->pipe.type = PIPE_SHADER_IR_NIR;
prog->pipe.ir.nir = tgsi_to_nir(cso->tokens, pipe->screen, false);
prog->nir = tgsi_to_nir(cso->tokens, pipe->screen, false);
break;
case PIPE_SHADER_IR_NIR:
prog->pipe.ir.nir = cso->ir.nir;
prog->nir = cso->ir.nir;
break;
default:
assert(!"unsupported IR!");
@@ -764,7 +762,7 @@ nv50_sp_state_create(struct pipe_context *pipe,
}
if (cso->stream_output.num_outputs)
prog->pipe.stream_output = cso->stream_output;
prog->stream_output = cso->stream_output;
prog->translated = nv50_program_translate(
prog, nv50_context(pipe)->screen->base.device->chipset,
@@ -783,10 +781,7 @@ nv50_sp_state_delete(struct pipe_context *pipe, void *hwcso)
nv50_program_destroy(nv50, prog);
simple_mtx_unlock(&nv50->screen->state_lock);
if (prog->pipe.type == PIPE_SHADER_IR_TGSI)
FREE((void *)prog->pipe.tokens);
else if (prog->pipe.type == PIPE_SHADER_IR_NIR)
ralloc_free(prog->pipe.ir.nir);
ralloc_free(prog->nir);
FREE(prog);
}
@@ -848,17 +843,15 @@ nv50_cp_state_create(struct pipe_context *pipe,
if (!prog)
return NULL;
prog->type = PIPE_SHADER_COMPUTE;
prog->pipe.type = cso->ir_type;
switch(cso->ir_type) {
case PIPE_SHADER_IR_TGSI: {
const struct tgsi_token *tokens = cso->prog;
prog->pipe.type = PIPE_SHADER_IR_NIR;
prog->pipe.ir.nir = tgsi_to_nir(tokens, pipe->screen, false);
prog->nir = tgsi_to_nir(tokens, pipe->screen, false);
break;
}
case PIPE_SHADER_IR_NIR:
prog->pipe.ir.nir = (nir_shader *)cso->prog;
prog->nir = (nir_shader *)cso->prog;
break;
default:
assert(!"unsupported IR!");
@@ -1798,7 +1798,7 @@ nv50_blitter_destroy(struct nv50_screen *screen)
struct nv50_program *prog = blitter->fp[i][m];
if (prog) {
nv50_program_destroy(NULL, prog);
ralloc_free((void *)prog->pipe.ir.nir);
ralloc_free((void *)prog->nir);
FREE(prog);
}
}
+2 -2
View File
@@ -855,11 +855,11 @@ nv50_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info,
* means counting vertices in a vertex shader when it has so outputs.
*/
if (nv50->screen->base.class_3d < NVA0_3D_CLASS &&
nv50->vertprog->pipe.stream_output.num_outputs) {
nv50->vertprog->stream_output.num_outputs) {
for (int i = 0; i < nv50->num_so_targets; i++) {
nv50->so_used[i] += info->instance_count *
u_stream_outputs_for_vertices(info->mode, draws[0].count) *
nv50->vertprog->pipe.stream_output.stride[i] * 4;
nv50->vertprog->stream_output.stride[i] * 4;
}
}