mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 05:18:08 +02:00
Overhaul of GLSL API functions, dispatching, etc.
This commit is contained in:
parent
5b01c5e9d2
commit
0bf5dbe002
10 changed files with 130 additions and 30 deletions
|
|
@ -1,8 +1,8 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.5
|
||||
* Version: 6.5.3
|
||||
*
|
||||
* Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
|
||||
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
|
|
@ -43,6 +43,7 @@
|
|||
#include "fbobject.h"
|
||||
#include "texrender.h"
|
||||
#endif
|
||||
#include "shader_api.h"
|
||||
#include "arrayobj.h"
|
||||
|
||||
#include "driverfuncs.h"
|
||||
|
|
@ -248,4 +249,45 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
|
|||
driver->EndList = NULL;
|
||||
driver->BeginCallList = NULL;
|
||||
driver->EndCallList = NULL;
|
||||
|
||||
|
||||
/* XXX temporary here */
|
||||
_mesa_init_glsl_driver_functions(driver);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Plug in Mesa's GLSL functions.
|
||||
*/
|
||||
void
|
||||
_mesa_init_glsl_driver_functions(struct dd_function_table *driver)
|
||||
{
|
||||
driver->AttachShader = _mesa_attach_shader;
|
||||
driver->BindAttribLocation = _mesa_bind_attrib_location;
|
||||
driver->CompileShader = _mesa_compile_shader;
|
||||
driver->CreateProgram = _mesa_create_program;
|
||||
driver->CreateShader = _mesa_create_shader;
|
||||
driver->DeleteProgram2 = _mesa_delete_program2;
|
||||
driver->DeleteShader = _mesa_delete_shader;
|
||||
driver->DetachShader = _mesa_detach_shader;
|
||||
driver->GetActiveAttrib = _mesa_get_active_attrib;
|
||||
driver->GetActiveUniform = _mesa_get_active_uniform;
|
||||
driver->GetAttachedShaders = _mesa_get_attached_shaders;
|
||||
driver->GetAttribLocation = _mesa_get_attrib_location;
|
||||
driver->GetHandle = _mesa_get_handle;
|
||||
driver->GetProgramiv = _mesa_get_programiv;
|
||||
driver->GetProgramInfoLog = _mesa_get_program_info_log;
|
||||
driver->GetShaderiv = _mesa_get_shaderiv;
|
||||
driver->GetShaderInfoLog = _mesa_get_shader_info_log;
|
||||
driver->GetShaderSource = _mesa_get_shader_source;
|
||||
driver->GetUniformfv = _mesa_get_uniformfv;
|
||||
driver->GetUniformLocation = _mesa_get_uniform_location;
|
||||
driver->IsProgram = _mesa_is_program;
|
||||
driver->IsShader = _mesa_is_shader;
|
||||
driver->LinkProgram = _mesa_link_program;
|
||||
driver->ShaderSource = _mesa_shader_source;
|
||||
driver->Uniform = _mesa_uniform;
|
||||
driver->UniformMatrix = _mesa_uniform_matrix;
|
||||
driver->UseProgram = _mesa_use_program;
|
||||
driver->ValidateProgram = _mesa_validate_program;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.1
|
||||
* Version: 6.5.3
|
||||
*
|
||||
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
|
||||
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
|
|
@ -29,4 +29,8 @@
|
|||
extern void
|
||||
_mesa_init_driver_functions(struct dd_function_table *driver);
|
||||
|
||||
|
||||
extern void
|
||||
_mesa_init_glsl_driver_functions(struct dd_function_table *driver);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@
|
|||
#include "math/m_xform.h"
|
||||
#include "math/mathmod.h"
|
||||
#endif
|
||||
#include "shaderobjects.h"
|
||||
#include "shaders.h"
|
||||
|
||||
#ifdef USE_SPARC_ASM
|
||||
#include "sparc/sparc.h"
|
||||
|
|
@ -705,7 +705,6 @@ alloc_shared_state( GLcontext *ctx )
|
|||
ss->ArrayObjects = _mesa_NewHashTable();
|
||||
|
||||
#if FEATURE_ARB_shader_objects
|
||||
ss->GL2Objects = _mesa_NewHashTable ();
|
||||
ss->ShaderObjects = _mesa_NewHashTable();
|
||||
ss->ProgramObjects = _mesa_NewHashTable();
|
||||
#endif
|
||||
|
|
@ -784,11 +783,10 @@ alloc_shared_state( GLcontext *ctx )
|
|||
_mesa_DeleteHashTable (ss->ArrayObjects);
|
||||
|
||||
#if FEATURE_ARB_shader_objects
|
||||
if (ss->GL2Objects) {
|
||||
_mesa_DeleteHashTable (ss->GL2Objects);
|
||||
if (ss->ShaderObjects)
|
||||
_mesa_DeleteHashTable (ss->ShaderObjects);
|
||||
if (ss->ProgramObjects)
|
||||
_mesa_DeleteHashTable (ss->ProgramObjects);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if FEATURE_EXT_framebuffer_object
|
||||
|
|
@ -953,8 +951,11 @@ free_shared_state( GLcontext *ctx, struct gl_shared_state *ss )
|
|||
_mesa_DeleteHashTable(ss->ArrayObjects);
|
||||
|
||||
#if FEATURE_ARB_shader_objects
|
||||
_mesa_HashDeleteAll(ss->GL2Objects, delete_shaderobj_cb, ctx);
|
||||
_mesa_DeleteHashTable(ss->GL2Objects);
|
||||
/* XXX SLANG TO-DO */
|
||||
/*
|
||||
struct _mesa_HashTable *ShaderObjects;
|
||||
struct _mesa_HashTable *ProgramObjects;
|
||||
*/
|
||||
#endif
|
||||
|
||||
#if FEATURE_EXT_framebuffer_object
|
||||
|
|
@ -1202,7 +1203,7 @@ init_attrib_groups( GLcontext *ctx )
|
|||
_mesa_init_query( ctx );
|
||||
_mesa_init_rastpos( ctx );
|
||||
_mesa_init_scissor( ctx );
|
||||
_mesa_init_shaderobjects (ctx);
|
||||
_mesa_init_shader_state( ctx );
|
||||
_mesa_init_stencil( ctx );
|
||||
_mesa_init_transform( ctx );
|
||||
_mesa_init_varray( ctx );
|
||||
|
|
|
|||
|
|
@ -821,6 +821,58 @@ struct dd_function_table {
|
|||
void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
* \name GLSL-related functions (ARB extensions and OpenGL 2.x)
|
||||
*/
|
||||
/*@{*/
|
||||
void (*AttachShader)(GLcontext *ctx, GLuint program, GLuint shader);
|
||||
void (*BindAttribLocation)(GLcontext *ctx, GLuint program, GLuint index,
|
||||
const GLcharARB *name);
|
||||
void (*CompileShader)(GLcontext *ctx, GLuint shader);
|
||||
GLuint (*CreateShader)(GLcontext *ctx, GLenum type);
|
||||
GLuint (*CreateProgram)(GLcontext *ctx);
|
||||
void (*DeleteProgram2)(GLcontext *ctx, GLuint program);
|
||||
void (*DeleteShader)(GLcontext *ctx, GLuint shader);
|
||||
void (*DetachShader)(GLcontext *ctx, GLuint program, GLuint shader);
|
||||
void (*GetActiveAttrib)(GLcontext *ctx, GLuint program, GLuint index,
|
||||
GLsizei maxLength, GLsizei * length, GLint * size,
|
||||
GLenum * type, GLcharARB * name);
|
||||
void (*GetActiveUniform)(GLcontext *ctx, GLuint program, GLuint index,
|
||||
GLsizei maxLength, GLsizei *length, GLint *size,
|
||||
GLenum *type, GLcharARB *name);
|
||||
void (*GetAttachedShaders)(GLcontext *ctx, GLuint program, GLsizei maxCount,
|
||||
GLsizei *count, GLuint *obj);
|
||||
GLint (*GetAttribLocation)(GLcontext *ctx, GLuint program,
|
||||
const GLcharARB *name);
|
||||
GLuint (*GetHandle)(GLcontext *ctx, GLenum pname);
|
||||
void (*GetProgramiv)(GLcontext *ctx, GLuint program,
|
||||
GLenum pname, GLint *params);
|
||||
void (*GetProgramInfoLog)(GLcontext *ctx, GLuint program, GLsizei bufSize,
|
||||
GLsizei *length, GLchar *infoLog);
|
||||
void (*GetShaderiv)(GLcontext *ctx, GLuint shader,
|
||||
GLenum pname, GLint *params);
|
||||
void (*GetShaderInfoLog)(GLcontext *ctx, GLuint shader, GLsizei bufSize,
|
||||
GLsizei *length, GLchar *infoLog);
|
||||
void (*GetShaderSource)(GLcontext *ctx, GLuint shader, GLsizei maxLength,
|
||||
GLsizei *length, GLcharARB *sourceOut);
|
||||
void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location,
|
||||
GLfloat *params);
|
||||
GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program,
|
||||
const GLcharARB *name);
|
||||
GLboolean (*IsProgram)(GLcontext *ctx, GLuint name);
|
||||
GLboolean (*IsShader)(GLcontext *ctx, GLuint name);
|
||||
void (*LinkProgram)(GLcontext *ctx, GLuint program);
|
||||
void (*ShaderSource)(GLcontext *ctx, GLuint shader, const GLchar *source);
|
||||
void (*Uniform)(GLcontext *ctx, GLint location, GLsizei count,
|
||||
const GLvoid *values, GLenum type);
|
||||
void (*UniformMatrix)(GLcontext *ctx, GLint cols, GLint rows,
|
||||
GLenum matrixType, GLint location, GLsizei count,
|
||||
GLboolean transpose, const GLfloat *values);
|
||||
void (*UseProgram)(GLcontext *ctx, GLuint program);
|
||||
void (*ValidateProgram)(GLcontext *ctx, GLuint program);
|
||||
/* XXX many more to come */
|
||||
/*@}*/
|
||||
|
||||
|
||||
/**
|
||||
* \name Support for multiple T&L engines
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@
|
|||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.5
|
||||
* Version: 6.5.3
|
||||
*
|
||||
* Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
|
||||
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
|
|
@ -2052,8 +2052,10 @@ struct gl_shader
|
|||
GLuint Name; /**< AKA the handle */
|
||||
GLchar *Source; /**< Source code string */
|
||||
GLboolean CompileStatus;
|
||||
GLboolean DeletePending;
|
||||
GLuint NumPrograms; /**< size of Programs[] array */
|
||||
struct gl_program **Programs; /**< Post-compile assembly code */
|
||||
GLchar *InfoLog;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -2070,21 +2072,24 @@ struct gl_linked_program
|
|||
struct gl_program **Shaders; /**< List of the shaders */
|
||||
struct gl_vertex_program *VertexProgram; /**< Linked vertex program */
|
||||
struct gl_fragment_program *FragmentProgram; /**< Linked fragment prog */
|
||||
GLboolean LinkStatus; /**< GL_LINK_STATUS */
|
||||
struct gl_program_parameter_list *Uniforms; /**< Plus constants, etc */
|
||||
struct gl_program_parameter_list *Varying;
|
||||
struct gl_program_parameter_list *Attributes; /**< Vertex attributes */
|
||||
GLboolean LinkStatus; /**< GL_LINK_STATUS */
|
||||
GLboolean Validated;
|
||||
GLboolean DeletePending;
|
||||
GLchar *InfoLog;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Context state for vertex/fragment shaders.
|
||||
* Context state for GLSL vertex/fragment shaders.
|
||||
*/
|
||||
struct gl_shader_objects_state
|
||||
struct gl_shader_state
|
||||
{
|
||||
struct gl2_program_intf **CurrentProgram;
|
||||
GLboolean _VertexShaderPresent;
|
||||
GLboolean _FragmentShaderPresent;
|
||||
struct gl_linked_program *Linked; /* XXX temporary here */
|
||||
struct gl_linked_program *CurrentProgram;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -2145,7 +2150,6 @@ struct gl_shared_state
|
|||
#endif
|
||||
|
||||
#if FEATURE_ARB_shader_objects
|
||||
struct _mesa_HashTable *GL2Objects;
|
||||
struct _mesa_HashTable *ShaderObjects;
|
||||
struct _mesa_HashTable *ProgramObjects;
|
||||
#endif
|
||||
|
|
@ -2966,7 +2970,7 @@ struct __GLcontextRec
|
|||
|
||||
struct gl_query_state Query; /**< GL_ARB_occlusion_query */
|
||||
|
||||
struct gl_shader_objects_state ShaderObjects; /* GL_ARB_shader_objects */
|
||||
struct gl_shader_state Shader; /**< GLSL shader object state */
|
||||
/*@}*/
|
||||
|
||||
#if FEATURE_EXT_framebuffer_object
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
#include "texenvprogram.h"
|
||||
#endif
|
||||
#if FEATURE_ARB_shader_objects
|
||||
#include "shaderobjects.h"
|
||||
#include "shaders.h"
|
||||
#endif
|
||||
#include "debug.h"
|
||||
#include "dispatch.h"
|
||||
|
|
@ -949,7 +949,7 @@ update_arrays( GLcontext *ctx )
|
|||
static void
|
||||
update_program(GLcontext *ctx)
|
||||
{
|
||||
const struct gl_linked_program *linked = ctx->ShaderObjects.Linked;
|
||||
const struct gl_linked_program *linked = ctx->Shader.CurrentProgram;
|
||||
|
||||
|
||||
/* These _Enabled flags indicate if the program is enabled AND valid. */
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
#include "texenvprogram.h"
|
||||
#include "mtypes.h"
|
||||
#include "math/m_xform.h"
|
||||
#include "shaderobjects.h"
|
||||
/*#include "shaderobjects.h"*/
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ MAIN_SOURCES = \
|
|||
main/rastpos.c \
|
||||
main/rbadaptors.c \
|
||||
main/renderbuffer.c \
|
||||
main/shaders.c \
|
||||
main/state.c \
|
||||
main/stencil.c \
|
||||
main/texcompress.c \
|
||||
|
|
@ -164,10 +165,6 @@ SHADER_SOURCES = \
|
|||
shader/programopt.c \
|
||||
shader/shader_api.c \
|
||||
|
||||
|
||||
## shader/shaderobjects.c \
|
||||
## shader/shaderobjects_3dlabs.c
|
||||
|
||||
SLANG_SOURCES = \
|
||||
shader/slang/slang_analyse.c \
|
||||
shader/slang/slang_assemble.c \
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ _swrast_update_rasterflags( GLcontext *ctx )
|
|||
rasterMask |= FRAGPROG_BIT;
|
||||
}
|
||||
|
||||
if (ctx->ShaderObjects._FragmentShaderPresent) {
|
||||
if (ctx->Shader._FragmentShaderPresent) {
|
||||
rasterMask |= FRAGPROG_BIT;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1365,7 +1365,7 @@ shade_texture_span(GLcontext *ctx, SWspan *span)
|
|||
if (span->interpMask & SPAN_Z)
|
||||
_swrast_span_interpolate_z (ctx, span);
|
||||
|
||||
if (ctx->ShaderObjects.Linked && span->interpMask & SPAN_VARYING)
|
||||
if (ctx->Shader.CurrentProgram && span->interpMask & SPAN_VARYING)
|
||||
interpolate_varying(ctx, span);
|
||||
|
||||
/* Run fragment program/shader now */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue