projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge remote branch 'origin/master' into glsl2
[mesa.git]
/
src
/
mesa
/
main
/
shaderobj.c
diff --git
a/src/mesa/main/shaderobj.c
b/src/mesa/main/shaderobj.c
index b6ccc031d054af6c4051fad60bc3d326a865ff0b..129d97422471a581dc0010c981e7df9dc7adeea1 100644
(file)
--- a/
src/mesa/main/shaderobj.c
+++ b/
src/mesa/main/shaderobj.c
@@
-36,7
+36,7
@@
#include "program/program.h"
#include "program/prog_parameter.h"
#include "program/prog_uniform.h"
#include "program/program.h"
#include "program/prog_parameter.h"
#include "program/prog_uniform.h"
-
+#include "talloc.h"
/**********************************************************************/
/*** Shader object functions ***/
/**********************************************************************/
/*** Shader object functions ***/
@@
-92,12
+92,13
@@
_mesa_reference_shader(GLcontext *ctx, struct gl_shader **ptr,
* Allocate a new gl_shader object, initialize it.
* Called via ctx->Driver.NewShader()
*/
* Allocate a new gl_shader object, initialize it.
* Called via ctx->Driver.NewShader()
*/
-st
atic st
ruct gl_shader *
+struct gl_shader *
_mesa_new_shader(GLcontext *ctx, GLuint name, GLenum type)
{
struct gl_shader *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);
+ assert(type == GL_FRAGMENT_SHADER || type == GL_VERTEX_SHADER ||
+ type == GL_GEOMETRY_SHADER_ARB);
+ shader = talloc_zero(NULL, struct gl_shader);
if (shader) {
shader->Type = type;
shader->Name = name;
if (shader) {
shader->Type = type;
shader->Name = name;
@@
-116,10
+117,8
@@
__mesa_delete_shader(GLcontext *ctx, struct gl_shader *sh)
{
if (sh->Source)
free((void *) sh->Source);
{
if (sh->Source)
free((void *) sh->Source);
- if (sh->InfoLog)
- free(sh->InfoLog);
_mesa_reference_program(ctx, &sh->Program, NULL);
_mesa_reference_program(ctx, &sh->Program, NULL);
- free(sh);
+
talloc_
free(sh);
}
}
@@
-234,12
+233,17
@@
static struct gl_shader_program *
_mesa_new_shader_program(GLcontext *ctx, GLuint name)
{
struct gl_shader_program *shProg;
_mesa_new_shader_program(GLcontext *ctx, GLuint name)
{
struct gl_shader_program *shProg;
- shProg =
CALLOC_STRUCT(
gl_shader_program);
+ shProg =
talloc_zero(NULL, struct
gl_shader_program);
if (shProg) {
shProg->Type = GL_SHADER_PROGRAM_MESA;
shProg->Name = name;
shProg->RefCount = 1;
shProg->Attributes = _mesa_new_parameter_list();
if (shProg) {
shProg->Type = GL_SHADER_PROGRAM_MESA;
shProg->Name = name;
shProg->RefCount = 1;
shProg->Attributes = _mesa_new_parameter_list();
+#if FEATURE_ARB_geometry_shader4
+ shProg->Geom.VerticesOut = 0;
+ shProg->Geom.InputType = GL_TRIANGLES;
+ shProg->Geom.OutputType = GL_TRIANGLE_STRIP;
+#endif
}
return shProg;
}
}
return shProg;
}
@@
-254,6
+258,7
@@
_mesa_clear_shader_program_data(GLcontext *ctx,
{
_mesa_reference_vertprog(ctx, &shProg->VertexProgram, NULL);
_mesa_reference_fragprog(ctx, &shProg->FragmentProgram, NULL);
{
_mesa_reference_vertprog(ctx, &shProg->VertexProgram, NULL);
_mesa_reference_fragprog(ctx, &shProg->FragmentProgram, NULL);
+ _mesa_reference_geomprog(ctx, &shProg->GeometryProgram, NULL);
if (shProg->Uniforms) {
_mesa_free_uniform_list(shProg->Uniforms);
if (shProg->Uniforms) {
_mesa_free_uniform_list(shProg->Uniforms);
@@
-298,7
+303,7
@@
_mesa_free_shader_program_data(GLcontext *ctx,
}
if (shProg->InfoLog) {
}
if (shProg->InfoLog) {
- free(shProg->InfoLog);
+
talloc_
free(shProg->InfoLog);
shProg->InfoLog = NULL;
}
shProg->InfoLog = NULL;
}
@@
-321,7
+326,7
@@
__mesa_delete_shader_program(GLcontext *ctx, struct gl_shader_program *shProg)
{
_mesa_free_shader_program_data(ctx, shProg);
{
_mesa_free_shader_program_data(ctx, shProg);
- free(shProg);
+
talloc_
free(shProg);
}
}