/** * Allocate a new gl_shader object, initialize it. * Called via ctx->Driver.NewShader() */ struct gl_shader * _mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type) { struct gl_shader *shader; assert(_mesa_validate_shader_target(ctx, type)); shader = rzalloc(NULL, struct gl_shader); if (shader) { shader->Type = type; shader->Stage = _mesa_shader_enum_to_shader_stage(type); shader->Name = name; _mesa_init_shader(ctx, shader); } return shader; }
extern "C" struct gl_shader * brw_new_shader(struct gl_context *ctx, GLuint name, GLuint type) { struct brw_shader *shader; shader = rzalloc(NULL, struct brw_shader); if (shader) { shader->base.Type = type; shader->base.Stage = _mesa_shader_enum_to_shader_stage(type); shader->base.Name = name; _mesa_init_shader(ctx, &shader->base); } return &shader->base; }
struct gl_shader * _mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type) { struct gl_shader *shader; (void) ctx; assert(type == GL_FRAGMENT_SHADER || type == GL_VERTEX_SHADER); shader = rzalloc(NULL, struct gl_shader); if (shader) { shader->Type = type; shader->Stage = _mesa_shader_enum_to_shader_stage(type); shader->Name = name; shader->RefCount = 1; } return shader; }
void common_builtin::SetUp() { this->mem_ctx = ralloc_context(NULL); this->ir.make_empty(); initialize_context_to_defaults(&this->ctx, API_OPENGL_COMPAT); this->shader = rzalloc(this->mem_ctx, gl_shader); this->shader->Type = this->shader_type; this->shader->Stage = _mesa_shader_enum_to_shader_stage(this->shader_type); this->state = new(mem_ctx) _mesa_glsl_parse_state(&this->ctx, this->shader->Stage, this->shader); _mesa_glsl_initialize_types(this->state); _mesa_glsl_initialize_variables(&this->ir, this->state); }