Browse Source

iris: compile a TCS...don't bother with passthrough yet

tags/19.1-branchpoint
Kenneth Graunke 7 years ago
parent
commit
ebb960c6d3
1 changed files with 61 additions and 1 deletions
  1. 61
    1
      src/gallium/drivers/iris/iris_program.c

+ 61
- 1
src/gallium/drivers/iris/iris_program.c View File

@@ -386,10 +386,70 @@ get_unified_tess_slots(const struct iris_context *ice,
}
}

static bool
iris_compile_tcs(struct iris_context *ice,
struct iris_uncompiled_shader *ish,
const struct brw_tcs_prog_key *key)
{
struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen;
const struct brw_compiler *compiler = screen->compiler;
const struct gen_device_info *devinfo = &screen->devinfo;
void *mem_ctx = ralloc_context(NULL);
struct brw_tcs_prog_data *tcs_prog_data =
rzalloc(mem_ctx, struct brw_tcs_prog_data);
struct brw_vue_prog_data *vue_prog_data = &tcs_prog_data->base;
struct brw_stage_prog_data *prog_data = &vue_prog_data->base;

assert(ish->base.type == PIPE_SHADER_IR_NIR);

nir_shader *nir = ish->base.ir.nir;

assign_common_binding_table_offsets(devinfo, nir, prog_data, 0);

iris_setup_uniforms(compiler, mem_ctx, nir, prog_data);

char *error_str = NULL;
const unsigned *program =
brw_compile_tcs(compiler, &ice->dbg, mem_ctx, key, tcs_prog_data, nir,
-1, &error_str);
if (program == NULL) {
dbg_printf("Failed to compile evaluation shader: %s\n", error_str);
ralloc_free(mem_ctx);
return false;
}

iris_setup_push_uniform_range(compiler, prog_data);

iris_upload_and_bind_shader(ice, IRIS_CACHE_TCS, key, program, prog_data,
NULL);

ralloc_free(mem_ctx);
return true;
}

static void
iris_update_compiled_tcs(struct iris_context *ice)
{
// XXX: TCS
struct iris_uncompiled_shader *tcs =
ice->shaders.uncompiled[MESA_SHADER_TESS_CTRL];

if (!tcs)
return;

const struct shader_info *tes_info =
get_shader_info(ice, MESA_SHADER_TESS_EVAL);
struct brw_tcs_prog_key key = {
.program_string_id = tcs->program_id,
.tes_primitive_mode = tes_info->tess.primitive_mode,
};
get_unified_tess_slots(ice, &key.outputs_written,
&key.patch_outputs_written);
ice->vtbl.populate_tcs_key(ice, &key);

if (iris_bind_cached_shader(ice, IRIS_CACHE_TCS, &key))
return;

UNUSED bool success = iris_compile_tcs(ice, tcs, &key);
}

static bool

Loading…
Cancel
Save