st/mesa: cleanups after unification of st_vertex/common program

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
This commit is contained in:
Marek Olšák 2019-11-01 22:46:11 -04:00
parent 5fed208285
commit 1375217116
4 changed files with 49 additions and 134 deletions

View file

@ -520,29 +520,11 @@ set_st_program(struct gl_program *prog,
struct gl_shader_program *shader_program,
nir_shader *nir)
{
struct st_program *stvp;
struct st_program *stp;
struct st_program *stp = (struct st_program *)prog;
switch (prog->info.stage) {
case MESA_SHADER_VERTEX:
stvp = (struct st_program *)prog;
stvp->shader_program = shader_program;
stvp->state.type = PIPE_SHADER_IR_NIR;
stvp->state.ir.nir = nir;
break;
case MESA_SHADER_GEOMETRY:
case MESA_SHADER_TESS_CTRL:
case MESA_SHADER_TESS_EVAL:
case MESA_SHADER_COMPUTE:
case MESA_SHADER_FRAGMENT:
stp = (struct st_program *)prog;
stp->shader_program = shader_program;
stp->state.type = PIPE_SHADER_IR_NIR;
stp->state.ir.nir = nir;
break;
default:
unreachable("unknown shader stage");
}
stp->shader_program = shader_program;
stp->state.type = PIPE_SHADER_IR_NIR;
stp->state.ir.nir = nir;
}
static void

View file

@ -7308,26 +7308,7 @@ get_mesa_program_tgsi(struct gl_context *ctx,
return NULL;
}
struct st_program *stvp;
struct st_program *stp;
switch (shader->Stage) {
case MESA_SHADER_VERTEX:
stvp = (struct st_program *)prog;
stvp->glsl_to_tgsi = v;
break;
case MESA_SHADER_FRAGMENT:
case MESA_SHADER_TESS_CTRL:
case MESA_SHADER_TESS_EVAL:
case MESA_SHADER_GEOMETRY:
case MESA_SHADER_COMPUTE:
stp = st_program(prog);
stp->glsl_to_tgsi = v;
break;
default:
assert(!"should not be reached");
return NULL;
}
st_program(prog)->glsl_to_tgsi = v;
PRINT_STATS(v->print_stats());

View file

@ -494,11 +494,8 @@ st_translate_stream_output_info(struct gl_program *prog)
}
/* Translate stream output info. */
struct pipe_stream_output_info *so_info = NULL;
if (prog->info.stage == MESA_SHADER_VERTEX)
so_info = &((struct st_program*)prog)->state.stream_output;
else
so_info = &((struct st_program*)prog)->state.stream_output;
struct pipe_stream_output_info *so_info =
&((struct st_program*)prog)->state.stream_output;
for (unsigned i = 0; i < info->NumOutputs; i++) {
so_info->output[i].register_index =

View file

@ -81,49 +81,29 @@ st_serialise_ir_program(struct gl_context *ctx, struct gl_program *prog,
if (prog->driver_cache_blob)
return;
struct st_program *stp = (struct st_program *)prog;
struct blob blob;
blob_init(&blob);
switch (prog->info.stage) {
case MESA_SHADER_VERTEX: {
struct st_program *stvp = (struct st_program *) prog;
blob_write_uint32(&blob, stvp->num_inputs);
blob_write_bytes(&blob, stvp->index_to_input,
sizeof(stvp->index_to_input));
blob_write_bytes(&blob, stvp->input_to_index,
sizeof(stvp->input_to_index));
blob_write_bytes(&blob, stvp->result_to_output,
sizeof(stvp->result_to_output));
write_stream_out_to_cache(&blob, &stvp->state);
if (nir)
write_nir_to_cache(&blob, prog);
else
write_tgsi_to_cache(&blob, stvp->state.tokens, prog);
break;
if (prog->info.stage == MESA_SHADER_VERTEX) {
blob_write_uint32(&blob, stp->num_inputs);
blob_write_bytes(&blob, stp->index_to_input,
sizeof(stp->index_to_input));
blob_write_bytes(&blob, stp->input_to_index,
sizeof(stp->input_to_index));
blob_write_bytes(&blob, stp->result_to_output,
sizeof(stp->result_to_output));
}
case MESA_SHADER_TESS_CTRL:
case MESA_SHADER_TESS_EVAL:
case MESA_SHADER_GEOMETRY:
case MESA_SHADER_FRAGMENT:
case MESA_SHADER_COMPUTE: {
struct st_program *stcp = (struct st_program *) prog;
if (prog->info.stage == MESA_SHADER_TESS_EVAL ||
prog->info.stage == MESA_SHADER_GEOMETRY)
write_stream_out_to_cache(&blob, &stcp->state);
if (prog->info.stage == MESA_SHADER_VERTEX ||
prog->info.stage == MESA_SHADER_TESS_EVAL ||
prog->info.stage == MESA_SHADER_GEOMETRY)
write_stream_out_to_cache(&blob, &stp->state);
if (nir)
write_nir_to_cache(&blob, prog);
else
write_tgsi_to_cache(&blob, stcp->state.tokens, prog);
break;
}
default:
unreachable("Unsupported stage");
}
if (nir)
write_nir_to_cache(&blob, prog);
else
write_tgsi_to_cache(&blob, stp->state.tokens, prog);
blob_finish(&blob);
}
@ -187,63 +167,38 @@ st_deserialise_ir_program(struct gl_context *ctx,
assert(prog->driver_cache_blob && prog->driver_cache_blob_size > 0);
struct st_program *stp = st_program(prog);
struct blob_reader blob_reader;
blob_reader_init(&blob_reader, buffer, size);
switch (prog->info.stage) {
case MESA_SHADER_VERTEX: {
struct st_program *stvp = (struct st_program *) prog;
if (prog->info.stage == MESA_SHADER_VERTEX) {
st_release_vp_variants(st, stp);
st_release_vp_variants(st, stvp);
stvp->num_inputs = blob_read_uint32(&blob_reader);
blob_copy_bytes(&blob_reader, (uint8_t *) stvp->index_to_input,
sizeof(stvp->index_to_input));
blob_copy_bytes(&blob_reader, (uint8_t *) stvp->input_to_index,
sizeof(stvp->input_to_index));
blob_copy_bytes(&blob_reader, (uint8_t *) stvp->result_to_output,
sizeof(stvp->result_to_output));
read_stream_out_from_cache(&blob_reader, &stvp->state);
if (nir) {
stvp->state.type = PIPE_SHADER_IR_NIR;
stvp->shader_program = shProg;
stvp->state.ir.nir = nir_deserialize(NULL, options, &blob_reader);
prog->nir = stvp->state.ir.nir;
} else {
read_tgsi_from_cache(&blob_reader, &stvp->state.tokens);
}
break;
stp->num_inputs = blob_read_uint32(&blob_reader);
blob_copy_bytes(&blob_reader, (uint8_t *) stp->index_to_input,
sizeof(stp->index_to_input));
blob_copy_bytes(&blob_reader, (uint8_t *) stp->input_to_index,
sizeof(stp->input_to_index));
blob_copy_bytes(&blob_reader, (uint8_t *) stp->result_to_output,
sizeof(stp->result_to_output));
} else if (prog->info.stage == MESA_SHADER_FRAGMENT) {
st_release_fp_variants(st, stp);
} else {
st_release_common_variants(st, stp);
}
case MESA_SHADER_TESS_CTRL:
case MESA_SHADER_TESS_EVAL:
case MESA_SHADER_GEOMETRY:
case MESA_SHADER_FRAGMENT:
case MESA_SHADER_COMPUTE: {
struct st_program *stcp = st_program(prog);
if (prog->info.stage == MESA_SHADER_FRAGMENT)
st_release_fp_variants(st, stcp);
else
st_release_common_variants(st, stcp);
if (prog->info.stage == MESA_SHADER_VERTEX ||
prog->info.stage == MESA_SHADER_TESS_EVAL ||
prog->info.stage == MESA_SHADER_GEOMETRY)
read_stream_out_from_cache(&blob_reader, &stp->state);
if (prog->info.stage == MESA_SHADER_TESS_EVAL ||
prog->info.stage == MESA_SHADER_GEOMETRY)
read_stream_out_from_cache(&blob_reader, &stcp->state);
if (nir) {
stcp->state.type = PIPE_SHADER_IR_NIR;
stcp->state.ir.nir = nir_deserialize(NULL, options, &blob_reader);
stcp->shader_program = shProg;
prog->nir = stcp->state.ir.nir;
} else {
read_tgsi_from_cache(&blob_reader, &stcp->state.tokens);
}
break;
}
default:
unreachable("Unsupported stage");
if (nir) {
stp->state.type = PIPE_SHADER_IR_NIR;
stp->state.ir.nir = nir_deserialize(NULL, options, &blob_reader);
stp->shader_program = shProg;
prog->nir = stp->state.ir.nir;
} else {
read_tgsi_from_cache(&blob_reader, &stp->state.tokens);
}
/* Make sure we don't try to read more data than we wrote. This should