panfrost: Remove CSO dependency from shader_compile

We want this routine to be generic across graphics and compute, so let
the caller deal with the typing.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Alyssa Rosenzweig 2019-07-31 15:19:09 -07:00
parent 428bed3bde
commit c228046b4b
3 changed files with 26 additions and 10 deletions

View File

@ -35,20 +35,24 @@
#include "tgsi/tgsi_dump.h"
void
panfrost_shader_compile(struct panfrost_context *ctx, struct mali_shader_meta *meta, const char *src, int type, struct panfrost_shader_state *state)
panfrost_shader_compile(
struct panfrost_context *ctx,
struct mali_shader_meta *meta,
enum pipe_shader_ir ir_type,
const void *ir,
const char *src,
int type,
struct panfrost_shader_state *state)
{
uint8_t *dst;
nir_shader *s;
struct pipe_shader_state *cso = state->base;
if (cso->type == PIPE_SHADER_IR_NIR) {
s = nir_shader_clone(NULL, cso->ir.nir);
if (ir_type == PIPE_SHADER_IR_NIR) {
s = nir_shader_clone(NULL, ir);
} else {
assert (cso->type == PIPE_SHADER_IR_TGSI);
//tgsi_dump(cso->tokens, 0);
s = tgsi_to_nir(cso->tokens, ctx->base.screen);
assert (ir_type == PIPE_SHADER_IR_TGSI);
s = tgsi_to_nir(ir, ctx->base.screen);
}
s->info.stage = type == JOB_TYPE_VERTEX ? MESA_SHADER_VERTEX : MESA_SHADER_FRAGMENT;

View File

@ -2120,7 +2120,12 @@ panfrost_bind_shader_state(
/* We finally have a variant, so compile it */
if (!shader_state->compiled) {
panfrost_shader_compile(ctx, shader_state->tripipe, NULL,
panfrost_shader_compile(ctx, shader_state->tripipe,
variants->base.type,
variants->base.type == PIPE_SHADER_IR_NIR ?
variants->base.ir.nir :
variants->base.tokens,
NULL,
panfrost_job_type_for_pipe(type), shader_state);
shader_state->compiled = true;

View File

@ -302,7 +302,14 @@ mali_ptr
panfrost_fragment_job(struct panfrost_context *ctx, bool has_draws);
void
panfrost_shader_compile(struct panfrost_context *ctx, struct mali_shader_meta *meta, const char *src, int type, struct panfrost_shader_state *state);
panfrost_shader_compile(
struct panfrost_context *ctx,
struct mali_shader_meta *meta,
enum pipe_shader_ir ir_type,
const void *ir,
const char *src,
int type,
struct panfrost_shader_state *state);
void
panfrost_pack_work_groups_compute(