ss->ArrayObjects = _mesa_NewHashTable();
+#if FEATURE_ARB_shader_objects
ss->GL2Objects = _mesa_NewHashTable ();
+#endif
ss->Default1D = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_1D);
if (!ss->Default1D)
if (ss->ArrayObjects)
_mesa_DeleteHashTable (ss->ArrayObjects);
+#if FEATURE_ARB_shader_objects
if (ss->GL2Objects)
_mesa_DeleteHashTable (ss->GL2Objects);
+#endif
#if FEATURE_EXT_framebuffer_object
if (ss->FrameBuffers)
_mesa_HashDeleteAll(ss->ArrayObjects, delete_arrayobj_cb, ctx);
_mesa_DeleteHashTable(ss->ArrayObjects);
+#if FEATURE_ARB_shader_objects
_mesa_DeleteHashTable(ss->GL2Objects);
+#endif
#if FEATURE_EXT_framebuffer_object
_mesa_DeleteHashTable(ss->FrameBuffers);
static const char *version_1_4 = "1.4 Mesa " MESA_VERSION_STRING;
static const char *version_1_5 = "1.5 Mesa " MESA_VERSION_STRING;
static const char *version_2_0 = "1.5 Mesa " MESA_VERSION_STRING;/*XXX FIX*/
+
+#if FEATURE_ARB_shading_language_100
static const char *sl_version_110 = "1.10 Mesa " MESA_VERSION_STRING;
+#endif
ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL);
}
/* FALL-THROUGH */
#endif
+#if FEATURE_ARB_shading_language_100
error:
+#endif
default:
_mesa_error( ctx, GL_INVALID_ENUM, "glGetString" );
return (const GLubyte *) 0;
update_texture_state( GLcontext *ctx )
{
GLuint unit;
+
+#if FEATURE_ARB_fragment_shader
struct gl2_program_intf **prog = ctx->ShaderObjects.CurrentProgram;
GLbitfield progteximageusage[MAX_TEXTURE_IMAGE_UNITS];
+#endif
ctx->NewState |= _NEW_TEXTURE; /* TODO: only set this if there are
* actual changes.
ctx->Texture._TexMatEnabled = 0;
ctx->Texture._TexGenEnabled = 0;
+#if FEATURE_ARB_fragment_shader
/*
* Grab texture image usage state from shader program. It must be
* grabbed every time uniform sampler changes, so maybe there is a
if (ctx->ShaderObjects._FragmentShaderPresent) {
(**prog).GetTextureImageUsage (prog, progteximageusage);
}
+#endif /* FEATURE_ARB_fragment_shader */
/*
* Update texture unit state.
texUnit->_GenFlags = 0;
/* Get the bitmask of texture enables */
+#if FEATURE_ARB_fragment_shader
if (ctx->ShaderObjects._FragmentShaderPresent) {
enableBits = progteximageusage[unit];
}
- else if (ctx->FragmentProgram._Enabled) {
+ else
+#endif
+ if (ctx->FragmentProgram._Enabled) {
enableBits = ctx->FragmentProgram.Current->TexturesUsed[unit];
}
else {
#include "shaderobjects_3dlabs.h"
+#if FEATURE_ARB_shader_objects
+
#define RELEASE_GENERIC(x)\
(**x)._unknown.Release ((struct gl2_unknown_intf **) (x))
return loc;
}
+#endif
+
GLvoid
_mesa_init_shaderobjects (GLcontext *ctx)
{
#include "context.h"
+#if FEATURE_ARB_shader_objects
+
/**
* gl2 unique interface identifier.
* Each gl2 interface has its own interface id used for object queries.
UIID_FRAGMENT_SHADER, /* fragment shader */
UIID_VERTEX_SHADER, /* vertex shader */
UIID_PROGRAM, /* program object */
- UIID_3DLABS_SHHANDLE /* encapsulates 3dlabs' ShHandle */
+ UIID_3DLABS_SHHANDLE, /* encapsulates 3DLabs' ShHandle */
+ UIID_DEBUG /* debug object */
};
struct gl2_unknown_intf
GLvoid *(* GetShHandle) (struct gl2_3dlabs_shhandle_intf **);
};
+struct gl2_debug_intf
+{
+ struct gl2_generic_intf _generic;
+ GLvoid (* ClearDebugLog) (struct gl2_debug_intf **, GLenum logType, GLenum shaderType);
+ GLvoid (* GetDebugLog) (struct gl2_debug_intf **, GLenum logType, GLenum shaderType,
+ GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+ GLsizei (* GetDebugLogLength) (struct gl2_debug_intf **, GLenum logType, GLenum shaderType);
+};
-#if FEATURE_ARB_shader_objects
extern void GLAPIENTRY
_mesa_DeleteObjectARB(GLhandleARB obj);
#endif /* FEATURE_ARB_vertex_shader */
+#endif /* FEATURE_ARB_shader_objects */
+
extern void
_mesa_init_shaderobjects (GLcontext *ctx);
-#endif /* FEATURE_ARB_shader_objects */
-
#endif /* SHADEROBJECTS_H */
#include "slang_link.h"
#endif
+#if FEATURE_ARB_shader_objects
+
struct gl2_unknown_obj
{
GLuint reference_count;
#endif
}
+struct gl2_debug_obj
+{
+ struct gl2_generic_obj _generic;
+};
+
+struct gl2_debug_impl
+{
+ struct gl2_debug_intf *_vftbl;
+ struct gl2_debug_obj _obj;
+};
+
+static GLvoid
+_debug_destructor (struct gl2_unknown_intf **intf)
+{
+ struct gl2_debug_impl *impl = (struct gl2_debug_impl *) (intf);
+
+ (void) (impl);
+ /* TODO */
+
+ _generic_destructor (intf);
+}
+
+static struct gl2_unknown_intf **
+_debug_QueryInterface (struct gl2_unknown_intf **intf, enum gl2_uiid uiid)
+{
+ if (uiid == UIID_DEBUG) {
+ (**intf).AddRef (intf);
+ return intf;
+ }
+ return _generic_QueryInterface (intf, uiid);
+}
+
+static GLenum
+_debug_GetType (struct gl2_generic_intf **intf)
+{
+ return /*GL_DEBUG_OBJECT_MESA*/0;
+}
+
+static GLvoid
+_debug_ClearDebugLog (struct gl2_debug_intf **intf, GLenum logType, GLenum shaderType)
+{
+ struct gl2_debug_impl *impl = (struct gl2_debug_impl *) (intf);
+
+ (void) (impl);
+ /* TODO */
+}
+
+static GLvoid
+_debug_GetDebugLog (struct gl2_debug_intf **intf, GLenum logType, GLenum shaderType,
+ GLsizei maxLength, GLsizei *length, GLcharARB *infoLog)
+{
+ struct gl2_debug_impl *impl = (struct gl2_debug_impl *) (intf);
+
+ (void) (impl);
+ /* TODO */
+}
+
+static GLsizei
+_debug_GetDebugLogLength (struct gl2_debug_intf **intf, GLenum logType, GLenum shaderType)
+{
+ struct gl2_debug_impl *impl = (struct gl2_debug_impl *) (intf);
+
+ (void) (impl);
+ /* TODO */
+
+ return 0;
+}
+
+static struct gl2_debug_intf _debug_vftbl = {
+ {
+ {
+ _unknown_AddRef,
+ _unknown_Release,
+ _debug_QueryInterface
+ },
+ _generic_Delete,
+ _debug_GetType,
+ _generic_GetName,
+ _generic_GetDeleteStatus,
+ _generic_GetInfoLog,
+ _generic_GetInfoLogLength
+ },
+ _debug_ClearDebugLog,
+ _debug_GetDebugLog,
+ _debug_GetDebugLogLength
+};
+
+static GLvoid
+_debug_constructor (struct gl2_debug_impl *impl)
+{
+ _generic_constructor ((struct gl2_generic_impl *) (impl));
+ impl->_vftbl = &_debug_vftbl;
+ impl->_obj._generic._unknown._destructor = _debug_destructor;
+}
+
GLhandleARB
_mesa_3dlabs_create_shader_object (GLenum shaderType)
{
return 0;
}
+GLhandleARB
+_mesa_3dlabs_create_debug_object (GLvoid)
+{
+ struct gl2_debug_impl *obj;
+
+ obj = (struct gl2_debug_impl *) (_mesa_malloc (sizeof (struct gl2_debug_impl)));
+ if (obj != NULL) {
+ _debug_constructor (obj);
+ return obj->_obj._generic.name;
+ }
+ return 0;
+}
+
#include "slang_assemble.h"
#include "slang_execute.h"
exec_shader (pro, SLANG_SHADER_VERTEX);
}
+#endif
+
void
_mesa_init_shaderobjects_3dlabs (GLcontext *ctx)
{
#ifndef SHADEROBJECTS_3DLABS_H
#define SHADEROBJECTS_3DLABS_H
+#if FEATURE_ARB_shader_objects
+
extern int _slang_fetch_discard (struct gl2_program_intf **pro, GLboolean *val);
extern GLvoid _slang_exec_fragment_shader (struct gl2_program_intf **pro);
extern GLhandleARB
_mesa_3dlabs_create_program_object (GLvoid);
+extern GLhandleARB
+_mesa_3dlabs_create_debug_object (GLvoid);
+
+#endif /* FEATURE_ARB_shader_objects */
+
extern void
_mesa_init_shaderobjects_3dlabs (GLcontext *ctx);
#include "slang_utility.h"
#include "slang_link.h"
+#if FEATURE_ARB_fragment_shader
+
void
_swrast_exec_arbshader(GLcontext *ctx, struct sw_span *span)
{
}
}
}
+
+#endif /* FEATURE_ARB_fragment_shader */
+
#include "s_context.h"
+#if FEATURE_ARB_fragment_shader
+
extern void _swrast_exec_arbshader (GLcontext *ctx, struct sw_span *span);
+#endif /* FEATURE_ARB_fragment_shader */
+
#endif
interpolate_fog(ctx, span);
/* Compute fragment colors with fragment program or texture lookups */
+#if FEATURE_ARB_fragment_shader
if (ctx->ShaderObjects._FragmentShaderPresent) {
if (span->interpMask & SPAN_Z)
_swrast_span_interpolate_z (ctx, span);
_swrast_exec_arbshader (ctx, span);
}
- else if (ctx->FragmentProgram._Active) {
+ else
+#endif
+ if (ctx->FragmentProgram._Active) {
/* frag prog may need Z values */
if (span->interpMask & SPAN_Z)
_swrast_span_interpolate_z(ctx, span);
if (span->interpMask & SPAN_FOG)
interpolate_fog(ctx, span);
+#if FEATURE_ARB_fragment_shader
if (ctx->ShaderObjects._FragmentShaderPresent) {
if (span->interpMask & SPAN_Z)
_swrast_span_interpolate_z (ctx, span);
_swrast_exec_arbshader (ctx, span);
}
- else if (ctx->FragmentProgram._Active)
+ else
+#endif
+ if (ctx->FragmentProgram._Active)
_swrast_exec_fragment_program( ctx, span );
else if (ctx->ATIFragmentShader._Enabled)
_swrast_exec_fragment_shader( ctx, span );
extern const struct tnl_pipeline_stage _tnl_point_attenuation_stage;
extern const struct tnl_pipeline_stage _tnl_arb_vertex_program_stage;
extern const struct tnl_pipeline_stage _tnl_vertex_program_stage;
+#if FEATURE_ARB_vertex_shader
extern const struct tnl_pipeline_stage _tnl_arb_vertex_shader_stage;
+#endif
extern const struct tnl_pipeline_stage _tnl_render_stage;
/* Shorthand to plug in the default pipeline:
#include "slang_utility.h"
#include "slang_link.h"
+#if FEATURE_ARB_vertex_shader
+
typedef struct
{
GLvector4f outputs[VERT_RESULT_MAX];
run_arb_vertex_shader
};
+#endif /* FEATURE_ARB_vertex_shader */
+