Exemplo n.º 1
0
bool
brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
{
   struct brw_context *brw = brw_context(ctx);
   struct brw_vs_prog_key key;

   if (!prog->_LinkedShaders[MESA_SHADER_VERTEX])
      return true;

   struct gl_vertex_program *vp = (struct gl_vertex_program *)
      prog->_LinkedShaders[MESA_SHADER_VERTEX]->Program;
   struct brw_vertex_program *bvp = brw_vertex_program(vp);

   memset(&key, 0, sizeof(key));

   brw_vec4_setup_prog_key_for_precompile(ctx, &key.base, bvp->id, &vp->Base);

   // In VK, user clipping is triggered solely from the shader.
   key.base.userclip_active = vp->Base.UsesClipDistanceOut;

   struct brw_vs_compile c;

   brw_vs_init_compile(brw, prog, bvp, &key, &c);
   if (!brw_vs_do_compile(brw, &c)) {
      brw_vs_clear_compile(brw, &c);
      return false;
   }

   // Rather than defer or upload to cache, hand off
   // the compile results back to the brw_context
   brw_shader_program_save_vs_compile(brw->shader_prog, &c);

   return true;
}
Exemplo n.º 2
0
bool
brw_gs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
{
   struct brw_context *brw = brw_context(ctx);
   struct brw_gs_prog_key key;
   uint32_t old_prog_offset = brw->gs.base.prog_offset;
   struct brw_gs_prog_data *old_prog_data = brw->gs.prog_data;
   bool success;

   if (!prog->_LinkedShaders[MESA_SHADER_GEOMETRY])
      return true;

   struct gl_geometry_program *gp = (struct gl_geometry_program *)
      prog->_LinkedShaders[MESA_SHADER_GEOMETRY]->Program;
   struct brw_geometry_program *bgp = brw_geometry_program(gp);

   memset(&key, 0, sizeof(key));

   brw_vec4_setup_prog_key_for_precompile(ctx, &key.base, bgp->id, &gp->Base);

   /* Assume that the set of varyings coming in from the vertex shader exactly
    * matches what the geometry shader requires.
    */
   key.input_varyings = gp->Base.InputsRead;

   success = do_gs_prog(brw, prog, bgp, &key);

   brw->gs.base.prog_offset = old_prog_offset;
   brw->gs.prog_data = old_prog_data;

   return success;
}
Exemplo n.º 3
0
Arquivo: brw_vs.c Projeto: Sheph/mesa
bool
brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
{
   struct brw_context *brw = brw_context(ctx);
   struct brw_vs_prog_key key;
   uint32_t old_prog_offset = brw->vs.base.prog_offset;
   struct brw_vs_prog_data *old_prog_data = brw->vs.prog_data;
   bool success;

   if (!prog->_LinkedShaders[MESA_SHADER_VERTEX])
      return true;

   struct gl_vertex_program *vp = (struct gl_vertex_program *)
      prog->_LinkedShaders[MESA_SHADER_VERTEX]->Program;
   struct brw_vertex_program *bvp = brw_vertex_program(vp);

   memset(&key, 0, sizeof(key));

   brw_vec4_setup_prog_key_for_precompile(ctx, &key.base, bvp->id, &vp->Base);

   success = do_vs_prog(brw, prog, bvp, &key);

   brw->vs.base.prog_offset = old_prog_offset;
   brw->vs.prog_data = old_prog_data;

   return success;
}