mesa: add MESA_SHADER_KERNEL
used for CL kernels Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -4097,13 +4097,13 @@ void ac_nir_translate(struct ac_llvm_context *ac, struct ac_shader_abi *abi,
|
|||||||
|
|
||||||
setup_locals(&ctx, func);
|
setup_locals(&ctx, func);
|
||||||
|
|
||||||
if (nir->info.stage == MESA_SHADER_COMPUTE)
|
if (gl_shader_stage_is_compute(nir->info.stage))
|
||||||
setup_shared(&ctx, nir);
|
setup_shared(&ctx, nir);
|
||||||
|
|
||||||
visit_cf_list(&ctx, &func->impl->body);
|
visit_cf_list(&ctx, &func->impl->body);
|
||||||
phi_post_pass(&ctx);
|
phi_post_pass(&ctx);
|
||||||
|
|
||||||
if (nir->info.stage != MESA_SHADER_COMPUTE)
|
if (!gl_shader_stage_is_compute(nir->info.stage))
|
||||||
ctx.abi->emit_outputs(ctx.abi, AC_LLVM_MAX_OUTPUTS,
|
ctx.abi->emit_outputs(ctx.abi, AC_LLVM_MAX_OUTPUTS,
|
||||||
ctx.abi->outputs);
|
ctx.abi->outputs);
|
||||||
|
|
||||||
|
@@ -148,7 +148,7 @@ nir_shader_add_variable(nir_shader *shader, nir_variable *var)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case nir_var_mem_shared:
|
case nir_var_mem_shared:
|
||||||
assert(shader->info.stage == MESA_SHADER_COMPUTE);
|
assert(gl_shader_stage_is_compute(shader->info.stage));
|
||||||
exec_list_push_tail(&shader->shared, &var->node);
|
exec_list_push_tail(&shader->shared, &var->node);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -534,6 +534,7 @@ print_var_decl(nir_variable *var, print_state *state)
|
|||||||
case MESA_SHADER_TESS_CTRL:
|
case MESA_SHADER_TESS_CTRL:
|
||||||
case MESA_SHADER_TESS_EVAL:
|
case MESA_SHADER_TESS_EVAL:
|
||||||
case MESA_SHADER_COMPUTE:
|
case MESA_SHADER_COMPUTE:
|
||||||
|
case MESA_SHADER_KERNEL:
|
||||||
default:
|
default:
|
||||||
/* TODO */
|
/* TODO */
|
||||||
break;
|
break;
|
||||||
@@ -1350,17 +1351,13 @@ nir_print_shader_annotated(nir_shader *shader, FILE *fp,
|
|||||||
if (shader->info.label)
|
if (shader->info.label)
|
||||||
fprintf(fp, "label: %s\n", shader->info.label);
|
fprintf(fp, "label: %s\n", shader->info.label);
|
||||||
|
|
||||||
switch (shader->info.stage) {
|
if (gl_shader_stage_is_compute(shader->info.stage)) {
|
||||||
case MESA_SHADER_COMPUTE:
|
|
||||||
fprintf(fp, "local-size: %u, %u, %u%s\n",
|
fprintf(fp, "local-size: %u, %u, %u%s\n",
|
||||||
shader->info.cs.local_size[0],
|
shader->info.cs.local_size[0],
|
||||||
shader->info.cs.local_size[1],
|
shader->info.cs.local_size[1],
|
||||||
shader->info.cs.local_size[2],
|
shader->info.cs.local_size[2],
|
||||||
shader->info.cs.local_size_variable ? " (variable)" : "");
|
shader->info.cs.local_size_variable ? " (variable)" : "");
|
||||||
fprintf(fp, "shared-size: %u\n", shader->info.cs.shared_size);
|
fprintf(fp, "shared-size: %u\n", shader->info.cs.shared_size);
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(fp, "inputs: %u\n", shader->num_inputs);
|
fprintf(fp, "inputs: %u\n", shader->num_inputs);
|
||||||
|
@@ -43,8 +43,9 @@ gl_shader_stage_name(gl_shader_stage stage)
|
|||||||
ENUM(MESA_SHADER_GEOMETRY),
|
ENUM(MESA_SHADER_GEOMETRY),
|
||||||
ENUM(MESA_SHADER_FRAGMENT),
|
ENUM(MESA_SHADER_FRAGMENT),
|
||||||
ENUM(MESA_SHADER_COMPUTE),
|
ENUM(MESA_SHADER_COMPUTE),
|
||||||
|
ENUM(MESA_SHADER_KERNEL),
|
||||||
};
|
};
|
||||||
STATIC_ASSERT(ARRAY_SIZE(names) == MESA_SHADER_STAGES);
|
STATIC_ASSERT(ARRAY_SIZE(names) == MESA_ALL_SHADER_STAGES);
|
||||||
return NAME(stage);
|
return NAME(stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,6 +61,7 @@ _mesa_shader_stage_to_string(unsigned stage)
|
|||||||
case MESA_SHADER_FRAGMENT: return "fragment";
|
case MESA_SHADER_FRAGMENT: return "fragment";
|
||||||
case MESA_SHADER_GEOMETRY: return "geometry";
|
case MESA_SHADER_GEOMETRY: return "geometry";
|
||||||
case MESA_SHADER_COMPUTE: return "compute";
|
case MESA_SHADER_COMPUTE: return "compute";
|
||||||
|
case MESA_SHADER_KERNEL: return "kernel";
|
||||||
case MESA_SHADER_TESS_CTRL: return "tessellation control";
|
case MESA_SHADER_TESS_CTRL: return "tessellation control";
|
||||||
case MESA_SHADER_TESS_EVAL: return "tessellation evaluation";
|
case MESA_SHADER_TESS_EVAL: return "tessellation evaluation";
|
||||||
}
|
}
|
||||||
@@ -79,6 +81,7 @@ _mesa_shader_stage_to_abbrev(unsigned stage)
|
|||||||
case MESA_SHADER_FRAGMENT: return "FS";
|
case MESA_SHADER_FRAGMENT: return "FS";
|
||||||
case MESA_SHADER_GEOMETRY: return "GS";
|
case MESA_SHADER_GEOMETRY: return "GS";
|
||||||
case MESA_SHADER_COMPUTE: return "CS";
|
case MESA_SHADER_COMPUTE: return "CS";
|
||||||
|
case MESA_SHADER_KERNEL: return "CL";
|
||||||
case MESA_SHADER_TESS_CTRL: return "TCS";
|
case MESA_SHADER_TESS_CTRL: return "TCS";
|
||||||
case MESA_SHADER_TESS_EVAL: return "TES";
|
case MESA_SHADER_TESS_EVAL: return "TES";
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,8 @@
|
|||||||
#ifndef SHADER_ENUMS_H
|
#ifndef SHADER_ENUMS_H
|
||||||
#define SHADER_ENUMS_H
|
#define SHADER_ENUMS_H
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@@ -46,8 +48,16 @@ typedef enum
|
|||||||
MESA_SHADER_GEOMETRY = 3,
|
MESA_SHADER_GEOMETRY = 3,
|
||||||
MESA_SHADER_FRAGMENT = 4,
|
MESA_SHADER_FRAGMENT = 4,
|
||||||
MESA_SHADER_COMPUTE = 5,
|
MESA_SHADER_COMPUTE = 5,
|
||||||
|
/* must be last so it doesn't affect the GL pipeline */
|
||||||
|
MESA_SHADER_KERNEL = 6,
|
||||||
} gl_shader_stage;
|
} gl_shader_stage;
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
gl_shader_stage_is_compute(gl_shader_stage stage)
|
||||||
|
{
|
||||||
|
return stage == MESA_SHADER_COMPUTE || stage == MESA_SHADER_KERNEL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number of STATE_* values we need to address any GL state.
|
* Number of STATE_* values we need to address any GL state.
|
||||||
* Used to dimension arrays.
|
* Used to dimension arrays.
|
||||||
@@ -70,8 +80,16 @@ const char *_mesa_shader_stage_to_string(unsigned stage);
|
|||||||
*/
|
*/
|
||||||
const char *_mesa_shader_stage_to_abbrev(unsigned stage);
|
const char *_mesa_shader_stage_to_abbrev(unsigned stage);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GL related stages (not including CL)
|
||||||
|
*/
|
||||||
#define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
|
#define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All stages
|
||||||
|
*/
|
||||||
|
#define MESA_ALL_SHADER_STAGES (MESA_SHADER_KERNEL + 1)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indexes for vertex program attributes.
|
* Indexes for vertex program attributes.
|
||||||
|
@@ -3767,7 +3767,7 @@ vtn_handle_execution_mode(struct vtn_builder *b, struct vtn_value *entry_point,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SpvExecutionModeLocalSize:
|
case SpvExecutionModeLocalSize:
|
||||||
vtn_assert(b->shader->info.stage == MESA_SHADER_COMPUTE);
|
vtn_assert(gl_shader_stage_is_compute(b->shader->info.stage));
|
||||||
b->shader->info.cs.local_size[0] = mode->literals[0];
|
b->shader->info.cs.local_size[0] = mode->literals[0];
|
||||||
b->shader->info.cs.local_size[1] = mode->literals[1];
|
b->shader->info.cs.local_size[1] = mode->literals[1];
|
||||||
b->shader->info.cs.local_size[2] = mode->literals[2];
|
b->shader->info.cs.local_size[2] = mode->literals[2];
|
||||||
|
@@ -2831,6 +2831,7 @@ static const unsigned max_sysvals[] = {
|
|||||||
[MESA_SHADER_FRAGMENT] = 24, // TODO
|
[MESA_SHADER_FRAGMENT] = 24, // TODO
|
||||||
[MESA_SHADER_VERTEX] = 16,
|
[MESA_SHADER_VERTEX] = 16,
|
||||||
[MESA_SHADER_COMPUTE] = 16, // TODO how many do we actually need?
|
[MESA_SHADER_COMPUTE] = 16, // TODO how many do we actually need?
|
||||||
|
[MESA_SHADER_KERNEL] = 16, // TODO how many do we actually need?
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -56,6 +56,7 @@ shader_t_to_opcode(gl_shader_stage type)
|
|||||||
return CP_LOAD_STATE6_GEOM;
|
return CP_LOAD_STATE6_GEOM;
|
||||||
case MESA_SHADER_FRAGMENT:
|
case MESA_SHADER_FRAGMENT:
|
||||||
case MESA_SHADER_COMPUTE:
|
case MESA_SHADER_COMPUTE:
|
||||||
|
case MESA_SHADER_KERNEL:
|
||||||
return CP_LOAD_STATE6_FRAG;
|
return CP_LOAD_STATE6_FRAG;
|
||||||
default:
|
default:
|
||||||
unreachable("bad shader type");
|
unreachable("bad shader type");
|
||||||
|
@@ -163,6 +163,7 @@ fd6_stage2shadersb(gl_shader_stage type)
|
|||||||
case MESA_SHADER_FRAGMENT:
|
case MESA_SHADER_FRAGMENT:
|
||||||
return SB6_FS_SHADER;
|
return SB6_FS_SHADER;
|
||||||
case MESA_SHADER_COMPUTE:
|
case MESA_SHADER_COMPUTE:
|
||||||
|
case MESA_SHADER_KERNEL:
|
||||||
return SB6_CS_SHADER;
|
return SB6_CS_SHADER;
|
||||||
default:
|
default:
|
||||||
unreachable("bad shader type");
|
unreachable("bad shader type");
|
||||||
|
@@ -105,6 +105,7 @@ fd6_emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
|
|||||||
break;
|
break;
|
||||||
case MESA_SHADER_FRAGMENT:
|
case MESA_SHADER_FRAGMENT:
|
||||||
case MESA_SHADER_COMPUTE:
|
case MESA_SHADER_COMPUTE:
|
||||||
|
case MESA_SHADER_KERNEL:
|
||||||
opcode = CP_LOAD_STATE6_FRAG;
|
opcode = CP_LOAD_STATE6_FRAG;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -480,6 +480,7 @@ fd4_stage2shadersb(gl_shader_stage type)
|
|||||||
case MESA_SHADER_FRAGMENT:
|
case MESA_SHADER_FRAGMENT:
|
||||||
return SB4_FS_SHADER;
|
return SB4_FS_SHADER;
|
||||||
case MESA_SHADER_COMPUTE:
|
case MESA_SHADER_COMPUTE:
|
||||||
|
case MESA_SHADER_KERNEL:
|
||||||
return SB4_CS_SHADER;
|
return SB4_CS_SHADER;
|
||||||
default:
|
default:
|
||||||
unreachable("bad shader type");
|
unreachable("bad shader type");
|
||||||
|
@@ -165,6 +165,7 @@ load_glsl(unsigned num_files, char* const* files, gl_shader_stage stage)
|
|||||||
ir3_glsl_type_size);
|
ir3_glsl_type_size);
|
||||||
break;
|
break;
|
||||||
case MESA_SHADER_COMPUTE:
|
case MESA_SHADER_COMPUTE:
|
||||||
|
case MESA_SHADER_KERNEL:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
errx(1, "unhandled shader stage: %d", stage);
|
errx(1, "unhandled shader stage: %d", stage);
|
||||||
|
@@ -588,7 +588,7 @@ void
|
|||||||
ir3_emit_cs_consts(const struct ir3_shader_variant *v, struct fd_ringbuffer *ring,
|
ir3_emit_cs_consts(const struct ir3_shader_variant *v, struct fd_ringbuffer *ring,
|
||||||
struct fd_context *ctx, const struct pipe_grid_info *info)
|
struct fd_context *ctx, const struct pipe_grid_info *info)
|
||||||
{
|
{
|
||||||
debug_assert(v->type == MESA_SHADER_COMPUTE);
|
debug_assert(gl_shader_stage_is_compute(v->type));
|
||||||
|
|
||||||
emit_common_consts(v, ring, ctx, PIPE_SHADER_COMPUTE);
|
emit_common_consts(v, ring, ctx, PIPE_SHADER_COMPUTE);
|
||||||
|
|
||||||
|
@@ -362,7 +362,7 @@ void si_nir_scan_shader(const struct nir_shader *nir,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nir->info.stage == MESA_SHADER_COMPUTE) {
|
if (gl_shader_stage_is_compute(nir->info.stage)) {
|
||||||
info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH] = nir->info.cs.local_size[0];
|
info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH] = nir->info.cs.local_size[0];
|
||||||
info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_HEIGHT] = nir->info.cs.local_size[1];
|
info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_HEIGHT] = nir->info.cs.local_size[1];
|
||||||
info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_DEPTH] = nir->info.cs.local_size[2];
|
info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_DEPTH] = nir->info.cs.local_size[2];
|
||||||
@@ -1051,7 +1051,7 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir)
|
|||||||
ctx->num_images = util_last_bit(info->images_declared);
|
ctx->num_images = util_last_bit(info->images_declared);
|
||||||
|
|
||||||
if (ctx->shader->selector->info.properties[TGSI_PROPERTY_CS_LOCAL_SIZE]) {
|
if (ctx->shader->selector->info.properties[TGSI_PROPERTY_CS_LOCAL_SIZE]) {
|
||||||
assert(nir->info.stage == MESA_SHADER_COMPUTE);
|
assert(gl_shader_stage_is_compute(nir->info.stage));
|
||||||
si_declare_compute_memory(ctx);
|
si_declare_compute_memory(ctx);
|
||||||
}
|
}
|
||||||
ac_nir_translate(&ctx->ac, &ctx->abi, nir);
|
ac_nir_translate(&ctx->ac, &ctx->abi, nir);
|
||||||
|
@@ -225,6 +225,9 @@ _mesa_shader_stage_to_subroutine(gl_shader_stage stage)
|
|||||||
return GL_TESS_EVALUATION_SUBROUTINE;
|
return GL_TESS_EVALUATION_SUBROUTINE;
|
||||||
case MESA_SHADER_NONE:
|
case MESA_SHADER_NONE:
|
||||||
break;
|
break;
|
||||||
|
case MESA_SHADER_KERNEL:
|
||||||
|
unreachable("not reached");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
unreachable("not reached");
|
unreachable("not reached");
|
||||||
}
|
}
|
||||||
@@ -246,6 +249,7 @@ _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage)
|
|||||||
case MESA_SHADER_TESS_EVAL:
|
case MESA_SHADER_TESS_EVAL:
|
||||||
return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM;
|
return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM;
|
||||||
case MESA_SHADER_NONE:
|
case MESA_SHADER_NONE:
|
||||||
|
case MESA_SHADER_KERNEL:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
unreachable("not reached");
|
unreachable("not reached");
|
||||||
|
Reference in New Issue
Block a user