mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
code re-org
This commit is contained in:
parent
d881a9c136
commit
f2923613a4
1 changed files with 155 additions and 158 deletions
|
|
@ -47,6 +47,161 @@
|
|||
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a new gl_shader_program object, initialize it.
|
||||
*/
|
||||
struct gl_shader_program *
|
||||
_mesa_new_shader_program(GLcontext *ctx, GLuint name)
|
||||
{
|
||||
struct gl_shader_program *shProg;
|
||||
shProg = CALLOC_STRUCT(gl_shader_program);
|
||||
if (shProg) {
|
||||
shProg->Type = GL_SHADER_PROGRAM;
|
||||
shProg->Name = name;
|
||||
shProg->RefCount = 1;
|
||||
}
|
||||
return shProg;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_free_shader_program_data(GLcontext *ctx,
|
||||
struct gl_shader_program *shProg)
|
||||
{
|
||||
assert(shProg->Type == GL_SHADER_PROGRAM);
|
||||
|
||||
if (shProg->VertexProgram) {
|
||||
if (shProg->VertexProgram->Base.Parameters == shProg->Uniforms) {
|
||||
/* to prevent a double-free in the next call */
|
||||
shProg->VertexProgram->Base.Parameters = NULL;
|
||||
}
|
||||
_mesa_delete_program(ctx, &shProg->VertexProgram->Base);
|
||||
shProg->VertexProgram = NULL;
|
||||
}
|
||||
|
||||
if (shProg->FragmentProgram) {
|
||||
if (shProg->FragmentProgram->Base.Parameters == shProg->Uniforms) {
|
||||
/* to prevent a double-free in the next call */
|
||||
shProg->FragmentProgram->Base.Parameters = NULL;
|
||||
}
|
||||
_mesa_delete_program(ctx, &shProg->FragmentProgram->Base);
|
||||
shProg->FragmentProgram = NULL;
|
||||
}
|
||||
|
||||
|
||||
if (shProg->Uniforms) {
|
||||
_mesa_free_parameter_list(shProg->Uniforms);
|
||||
shProg->Uniforms = NULL;
|
||||
}
|
||||
|
||||
if (shProg->Varying) {
|
||||
_mesa_free_parameter_list(shProg->Varying);
|
||||
shProg->Varying = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
_mesa_free_shader_program(GLcontext *ctx, struct gl_shader_program *shProg)
|
||||
{
|
||||
_mesa_free_shader_program_data(ctx, shProg);
|
||||
_mesa_free(shProg);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Lookup a GLSL program object.
|
||||
*/
|
||||
struct gl_shader_program *
|
||||
_mesa_lookup_shader_program(GLcontext *ctx, GLuint name)
|
||||
{
|
||||
struct gl_shader_program *shProg;
|
||||
if (name) {
|
||||
shProg = (struct gl_shader_program *)
|
||||
_mesa_HashLookup(ctx->Shared->ShaderObjects, name);
|
||||
/* Note that both gl_shader and gl_shader_program objects are kept
|
||||
* in the same hash table. Check the object's type to be sure it's
|
||||
* what we're expecting.
|
||||
*/
|
||||
if (shProg && shProg->Type != GL_SHADER_PROGRAM) {
|
||||
return NULL;
|
||||
}
|
||||
return shProg;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a new gl_shader object, initialize it.
|
||||
*/
|
||||
struct gl_shader *
|
||||
_mesa_new_shader(GLcontext *ctx, GLuint name, GLenum type)
|
||||
{
|
||||
struct gl_shader *shader;
|
||||
assert(type == GL_FRAGMENT_SHADER || type == GL_VERTEX_SHADER);
|
||||
shader = CALLOC_STRUCT(gl_shader);
|
||||
if (shader) {
|
||||
shader->Type = type;
|
||||
shader->Name = name;
|
||||
shader->RefCount = 1;
|
||||
}
|
||||
return shader;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_free_shader(GLcontext *ctx, struct gl_shader *sh)
|
||||
{
|
||||
GLuint i;
|
||||
if (sh->Source)
|
||||
_mesa_free((void *) sh->Source);
|
||||
if (sh->InfoLog)
|
||||
_mesa_free(sh->InfoLog);
|
||||
for (i = 0; i < sh->NumPrograms; i++) {
|
||||
assert(sh->Programs[i]);
|
||||
_mesa_delete_program(ctx, sh->Programs[i]);
|
||||
}
|
||||
if (sh->Programs)
|
||||
_mesa_free(sh->Programs);
|
||||
_mesa_free(sh);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Lookup a GLSL shader object.
|
||||
*/
|
||||
struct gl_shader *
|
||||
_mesa_lookup_shader(GLcontext *ctx, GLuint name)
|
||||
{
|
||||
if (name) {
|
||||
struct gl_shader *sh = (struct gl_shader *)
|
||||
_mesa_HashLookup(ctx->Shared->ShaderObjects, name);
|
||||
/* Note that both gl_shader and gl_shader_program objects are kept
|
||||
* in the same hash table. Check the object's type to be sure it's
|
||||
* what we're expecting.
|
||||
*/
|
||||
if (sh && sh->Type == GL_SHADER_PROGRAM) {
|
||||
assert(sh->Type == GL_VERTEX_SHADER ||
|
||||
sh->Type == GL_FRAGMENT_SHADER);
|
||||
return NULL;
|
||||
}
|
||||
return sh;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_init_shader_state(GLcontext * ctx)
|
||||
{
|
||||
ctx->Shader._FragmentShaderPresent = GL_FALSE;
|
||||
ctx->Shader._VertexShaderPresent = GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -835,161 +990,3 @@ _mesa_validate_program(GLcontext *ctx, GLuint program)
|
|||
image units allowed.
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a new gl_shader_program object, initialize it.
|
||||
*/
|
||||
struct gl_shader_program *
|
||||
_mesa_new_shader_program(GLcontext *ctx, GLuint name)
|
||||
{
|
||||
struct gl_shader_program *shProg;
|
||||
shProg = CALLOC_STRUCT(gl_shader_program);
|
||||
if (shProg) {
|
||||
shProg->Type = GL_SHADER_PROGRAM;
|
||||
shProg->Name = name;
|
||||
shProg->RefCount = 1;
|
||||
}
|
||||
return shProg;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_free_shader_program_data(GLcontext *ctx,
|
||||
struct gl_shader_program *shProg)
|
||||
{
|
||||
assert(shProg->Type == GL_SHADER_PROGRAM);
|
||||
|
||||
if (shProg->VertexProgram) {
|
||||
if (shProg->VertexProgram->Base.Parameters == shProg->Uniforms) {
|
||||
/* to prevent a double-free in the next call */
|
||||
shProg->VertexProgram->Base.Parameters = NULL;
|
||||
}
|
||||
_mesa_delete_program(ctx, &shProg->VertexProgram->Base);
|
||||
shProg->VertexProgram = NULL;
|
||||
}
|
||||
|
||||
if (shProg->FragmentProgram) {
|
||||
if (shProg->FragmentProgram->Base.Parameters == shProg->Uniforms) {
|
||||
/* to prevent a double-free in the next call */
|
||||
shProg->FragmentProgram->Base.Parameters = NULL;
|
||||
}
|
||||
_mesa_delete_program(ctx, &shProg->FragmentProgram->Base);
|
||||
shProg->FragmentProgram = NULL;
|
||||
}
|
||||
|
||||
|
||||
if (shProg->Uniforms) {
|
||||
_mesa_free_parameter_list(shProg->Uniforms);
|
||||
shProg->Uniforms = NULL;
|
||||
}
|
||||
|
||||
if (shProg->Varying) {
|
||||
_mesa_free_parameter_list(shProg->Varying);
|
||||
shProg->Varying = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
_mesa_free_shader_program(GLcontext *ctx, struct gl_shader_program *shProg)
|
||||
{
|
||||
_mesa_free_shader_program_data(ctx, shProg);
|
||||
_mesa_free(shProg);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Lookup a GLSL program object.
|
||||
*/
|
||||
struct gl_shader_program *
|
||||
_mesa_lookup_shader_program(GLcontext *ctx, GLuint name)
|
||||
{
|
||||
struct gl_shader_program *shProg;
|
||||
if (name) {
|
||||
shProg = (struct gl_shader_program *)
|
||||
_mesa_HashLookup(ctx->Shared->ShaderObjects, name);
|
||||
/* Note that both gl_shader and gl_shader_program objects are kept
|
||||
* in the same hash table. Check the object's type to be sure it's
|
||||
* what we're expecting.
|
||||
*/
|
||||
if (shProg && shProg->Type != GL_SHADER_PROGRAM) {
|
||||
return NULL;
|
||||
}
|
||||
return shProg;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a new gl_shader object, initialize it.
|
||||
*/
|
||||
struct gl_shader *
|
||||
_mesa_new_shader(GLcontext *ctx, GLuint name, GLenum type)
|
||||
{
|
||||
struct gl_shader *shader;
|
||||
assert(type == GL_FRAGMENT_SHADER || type == GL_VERTEX_SHADER);
|
||||
shader = CALLOC_STRUCT(gl_shader);
|
||||
if (shader) {
|
||||
shader->Type = type;
|
||||
shader->Name = name;
|
||||
shader->RefCount = 1;
|
||||
}
|
||||
return shader;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_free_shader(GLcontext *ctx, struct gl_shader *sh)
|
||||
{
|
||||
GLuint i;
|
||||
if (sh->Source)
|
||||
_mesa_free((void *) sh->Source);
|
||||
if (sh->InfoLog)
|
||||
_mesa_free(sh->InfoLog);
|
||||
for (i = 0; i < sh->NumPrograms; i++) {
|
||||
assert(sh->Programs[i]);
|
||||
_mesa_delete_program(ctx, sh->Programs[i]);
|
||||
}
|
||||
if (sh->Programs)
|
||||
_mesa_free(sh->Programs);
|
||||
_mesa_free(sh);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Lookup a GLSL shader object.
|
||||
*/
|
||||
struct gl_shader *
|
||||
_mesa_lookup_shader(GLcontext *ctx, GLuint name)
|
||||
{
|
||||
if (name) {
|
||||
struct gl_shader *sh = (struct gl_shader *)
|
||||
_mesa_HashLookup(ctx->Shared->ShaderObjects, name);
|
||||
/* Note that both gl_shader and gl_shader_program objects are kept
|
||||
* in the same hash table. Check the object's type to be sure it's
|
||||
* what we're expecting.
|
||||
*/
|
||||
if (sh && sh->Type == GL_SHADER_PROGRAM) {
|
||||
assert(sh->Type == GL_VERTEX_SHADER ||
|
||||
sh->Type == GL_FRAGMENT_SHADER);
|
||||
return NULL;
|
||||
}
|
||||
return sh;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_init_shader_state(GLcontext * ctx)
|
||||
{
|
||||
ctx->Shader._FragmentShaderPresent = GL_FALSE;
|
||||
ctx->Shader._VertexShaderPresent = GL_FALSE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue