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:
parent
428bed3bde
commit
c228046b4b
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in New Issue