pan/midgard: Implement nir_intrinsic_load_num_work_groups

Just a sysval to route through.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Alyssa Rosenzweig 2019-08-06 14:07:10 -07:00
parent 7229af794b
commit 15954ab6ca
5 changed files with 21 additions and 0 deletions

View File

@ -87,6 +87,8 @@ panfrost_launch_grid(struct pipe_context *pipe,
{
struct panfrost_context *ctx = pan_context(pipe);
ctx->compute_grid = info;
struct mali_job_descriptor_header job = {
.job_type = JOB_TYPE_COMPUTE,
.job_descriptor_size = 1,

View File

@ -749,6 +749,14 @@ static void panfrost_upload_ssbo_sysval(
uniform->u[2] = sb.buffer_size;
}
static void panfrost_upload_num_work_groups_sysval(struct panfrost_context *ctx,
struct sysval_uniform *uniform)
{
uniform->u[0] = ctx->compute_grid->grid[0];
uniform->u[1] = ctx->compute_grid->grid[1];
uniform->u[2] = ctx->compute_grid->grid[2];
}
static void panfrost_upload_sysvals(struct panfrost_context *ctx, void *buf,
struct panfrost_shader_state *ss,
enum pipe_shader_type st)
@ -773,6 +781,10 @@ static void panfrost_upload_sysvals(struct panfrost_context *ctx, void *buf,
panfrost_upload_ssbo_sysval(ctx, st, PAN_SYSVAL_ID(sysval),
&uniforms[i]);
break;
case PAN_SYSVAL_NUM_WORK_GROUPS:
panfrost_upload_num_work_groups_sysval(ctx, &uniforms[i]);
break;
default:
assert(0);
}

View File

@ -108,6 +108,9 @@ struct panfrost_context {
/* panfrost_resource -> panfrost_job */
struct hash_table *write_jobs;
/* Within a launch_grid call.. */
const struct pipe_grid_info *compute_grid;
/* Bit mask for supported PIPE_DRAW for this hardware */
unsigned draw_modes;

View File

@ -330,6 +330,8 @@ midgard_nir_sysval_for_intrinsic(nir_intrinsic_instr *instr)
return PAN_SYSVAL_VIEWPORT_SCALE;
case nir_intrinsic_load_viewport_offset:
return PAN_SYSVAL_VIEWPORT_OFFSET;
case nir_intrinsic_load_num_work_groups:
return PAN_SYSVAL_NUM_WORK_GROUPS;
case nir_intrinsic_load_ssbo:
case nir_intrinsic_store_ssbo:
return midgard_sysval_for_ssbo(instr);
@ -1575,6 +1577,7 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr)
case nir_intrinsic_load_viewport_scale:
case nir_intrinsic_load_viewport_offset:
case nir_intrinsic_load_num_work_groups:
emit_sysval_read(ctx, &instr->instr, -1, 3);
break;

View File

@ -67,6 +67,7 @@ enum {
PAN_SYSVAL_VIEWPORT_OFFSET = 2,
PAN_SYSVAL_TEXTURE_SIZE = 3,
PAN_SYSVAL_SSBO = 4,
PAN_SYSVAL_NUM_WORK_GROUPS = 5,
} pan_sysval;
#define PAN_TXS_SYSVAL_ID(texidx, dim, is_array) \