Lines Matching defs:shader

44 /* Upload shader code to bo, if not already done */
63 etna_dump_shader(const struct etna_shader_variant *shader)
65 if (shader->stage == MESA_SHADER_VERTEX)
70 etna_disasm(shader->code, shader->code_size, PRINT_RAW);
72 printf("num loops: %i\n", shader->num_loops);
73 printf("num temps: %i\n", shader->num_temps);
75 for (int idx = 0; idx < shader->uniforms.count; ++idx) {
79 *((float *)&shader->uniforms.data[idx]),
80 shader->uniforms.data[idx],
81 shader->uniforms.contents[idx]);
84 for (int idx = 0; idx < shader->infile.num_reg; ++idx) {
85 printf(" [%i] name=%s comps=%i\n", shader->infile.reg[idx].reg,
86 (shader->stage == MESA_SHADER_VERTEX) ?
87 gl_vert_attrib_name(shader->infile.reg[idx].slot) :
88 gl_varying_slot_name_for_stage(shader->infile.reg[idx].slot, shader->stage),
89 shader->infile.reg[idx].num_components);
92 for (int idx = 0; idx < shader->outfile.num_reg; ++idx) {
93 printf(" [%i] name=%s comps=%i\n", shader->outfile.reg[idx].reg,
94 (shader->stage == MESA_SHADER_VERTEX) ?
95 gl_varying_slot_name_for_stage(shader->outfile.reg[idx].slot, shader->stage) :
96 gl_frag_result_name(shader->outfile.reg[idx].slot),
97 shader->outfile.reg[idx].num_components);
100 if (shader->stage == MESA_SHADER_VERTEX) {
101 printf(" vs_pos_out_reg=%i\n", shader->vs_pos_out_reg);
102 printf(" vs_pointsize_out_reg=%i\n", shader->vs_pointsize_out_reg);
103 printf(" vs_load_balancing=0x%08x\n", shader->vs_load_balancing);
105 printf(" ps_color_out_reg=%i\n", shader->ps_color_out_reg);
106 printf(" ps_depth_out_reg=%i\n", shader->ps_depth_out_reg);
108 printf(" input_count_unk8=0x%08x\n", shader->input_count_unk8);
187 /* vertex shader outputs point coordinate, provide extra output and make
193 /* vertex shader does not output point coordinate, make sure thate
200 /* if fragment shader doesn't read pointcoord, disable it */
264 * either switched on or off for the entire shader processor.
290 if (!ctx->shader.vs || !ctx->shader.fs)
294 return etna_link_shaders(ctx, &ctx->shader_state, ctx->shader.vs, ctx->shader.fs);
298 etna_destroy_shader(struct etna_shader_variant *shader)
300 assert(shader);
302 FREE(shader->code);
303 FREE(shader->uniforms.data);
304 FREE(shader->uniforms.contents);
305 FREE(shader);
366 etna_shader_stage(struct etna_shader_variant *shader)
368 switch (shader->stage) {
385 "%s shader: %u instructions, %u temps, "
397 return etna_shader_update_vs_inputs(&ctx->shader_state, ctx->shader.vs,
402 create_variant(struct etna_shader *shader, struct etna_shader_key key)
410 v->shader = shader;
412 v->id = ++shader->variant_count;
414 if (etna_disk_cache_retrieve(shader->compiler, v))
423 etna_disk_cache_store(shader->compiler, v);
433 etna_shader_variant(struct etna_shader *shader, struct etna_shader_key key,
438 for (v = shader->variants; v; v = v->next)
443 v = create_variant(shader, key);
445 v->next = shader->variants;
446 shader->variants = v;
459 * compile the initial shader variant asynchronously.
470 struct etna_shader *shader = job;
474 etna_shader_variant(shader, key, &debug);
484 struct etna_shader *shader = CALLOC_STRUCT(etna_shader);
486 if (!shader)
489 shader->id = p_atomic_inc_return(&compiler->shader_count);
490 shader->specs = &screen->specs;
491 shader->compiler = screen->compiler;
492 util_queue_fence_init(&shader->ready);
494 shader->nir = (pss->type == PIPE_SHADER_IR_NIR) ? pss->ir.nir :
497 etna_disk_cache_init_shader_key(compiler, shader);
501 etna_shader_variant(shader, key, &ctx->debug);
504 util_queue_add_job(&screen->shader_compiler_queue, shader, &shader->ready,
508 return shader;
516 struct etna_shader *shader = ss;
519 util_queue_drop_job(&screen->shader_compiler_queue, &shader->ready);
521 v = shader->variants;
531 tgsi_free_tokens(shader->tokens);
532 ralloc_free(shader->nir);
533 util_queue_fence_destroy(&shader->ready);
534 FREE(shader);
542 ctx->shader.bind_fs = hwcso;
551 ctx->shader.bind_vs = hwcso;
569 struct etna_shader *shader = (struct etna_shader *)hwcso;
571 return util_queue_fence_is_signalled(&shader->ready);