Rename current_program to CurrentProgram.
authorMichal Krol <mjkrol@gmail.org>
Mon, 13 Feb 2006 11:31:16 +0000 (11:31 +0000)
committerMichal Krol <mjkrol@gmail.org>
Mon, 13 Feb 2006 11:31:16 +0000 (11:31 +0000)
Temporary vertex_shader execution code.

src/mesa/shader/shaderobjects.c
src/mesa/shader/shaderobjects_3dlabs.c

index ac8ff1af487ddcdc5d47cd65f4ac9e649184c348..edd74d0f4a6874029d6efee5c700cfe1675ca497 100644 (file)
@@ -73,9 +73,9 @@ _mesa_GetHandleARB (GLenum pname)
        switch (pname)
        {
        case GL_PROGRAM_OBJECT_ARB:
-               if (ctx->ShaderObjects.current_program != NULL)
-                       return (**ctx->ShaderObjects.current_program)._container._generic.GetName (
-                               (struct gl2_generic_intf **) ctx->ShaderObjects.current_program);
+               if (ctx->ShaderObjects.CurrentProgram != NULL)
+                       return (**ctx->ShaderObjects.CurrentProgram)._container._generic.GetName (
+                               (struct gl2_generic_intf **) ctx->ShaderObjects.CurrentProgram);
                break;
        }
 
@@ -305,7 +305,7 @@ _mesa_LinkProgramARB (GLhandleARB programObj)
                return;
        }
 
-       if (pro == ctx->ShaderObjects.current_program)
+       if (pro == ctx->ShaderObjects.CurrentProgram)
        {
                /* TODO re-install executable program */
        }
@@ -353,13 +353,13 @@ _mesa_UseProgramObjectARB (GLhandleARB programObj)
                }
        }
 
-       if (ctx->ShaderObjects.current_program != NULL)
+       if (ctx->ShaderObjects.CurrentProgram != NULL)
        {
-               (**ctx->ShaderObjects.current_program)._container._generic._unknown.Release (
-                       (struct gl2_unknown_intf **) ctx->ShaderObjects.current_program);
+               (**ctx->ShaderObjects.CurrentProgram)._container._generic._unknown.Release (
+                       (struct gl2_unknown_intf **) ctx->ShaderObjects.CurrentProgram);
        }
 
-       ctx->ShaderObjects.current_program = pro;
+       ctx->ShaderObjects.CurrentProgram = pro;
 }
 
 void GLAPIENTRY
@@ -418,7 +418,7 @@ _mesa_Uniform1fARB (GLint location, GLfloat v0)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform1fARB");
                return;
@@ -430,7 +430,7 @@ _mesa_Uniform2fARB (GLint location, GLfloat v0, GLfloat v1)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform2fARB");
                return;
@@ -442,7 +442,7 @@ _mesa_Uniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform3fARB");
                return;
@@ -454,7 +454,7 @@ _mesa_Uniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform4fARB");
                return;
@@ -466,7 +466,7 @@ _mesa_Uniform1iARB (GLint location, GLint v0)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform1iARB");
                return;
@@ -478,7 +478,7 @@ _mesa_Uniform2iARB (GLint location, GLint v0, GLint v1)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform2iARB");
                return;
@@ -490,7 +490,7 @@ _mesa_Uniform3iARB (GLint location, GLint v0, GLint v1, GLint v2)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform3iARB");
                return;
@@ -502,7 +502,7 @@ _mesa_Uniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform4iARB");
                return;
@@ -514,7 +514,7 @@ _mesa_Uniform1fvARB (GLint location, GLsizei count, const GLfloat *value)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform1fvARB");
                return;
@@ -526,7 +526,7 @@ _mesa_Uniform2fvARB (GLint location, GLsizei count, const GLfloat *value)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform2fvARB");
                return;
@@ -538,7 +538,7 @@ _mesa_Uniform3fvARB (GLint location, GLsizei count, const GLfloat *value)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform3fvARB");
                return;
@@ -550,7 +550,7 @@ _mesa_Uniform4fvARB (GLint location, GLsizei count, const GLfloat *value)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform4fvARB");
                return;
@@ -562,7 +562,7 @@ _mesa_Uniform1ivARB (GLint location, GLsizei count, const GLint *value)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform1ivARB");
                return;
@@ -574,7 +574,7 @@ _mesa_Uniform2ivARB (GLint location, GLsizei count, const GLint *value)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform2ivARB");
                return;
@@ -586,7 +586,7 @@ _mesa_Uniform3ivARB (GLint location, GLsizei count, const GLint *value)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform3ivARB");
                return;
@@ -598,7 +598,7 @@ _mesa_Uniform4ivARB (GLint location, GLsizei count, const GLint *value)
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform4ivARB");
                return;
@@ -610,7 +610,7 @@ _mesa_UniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, c
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix2fvARB");
                return;
@@ -622,7 +622,7 @@ _mesa_UniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, c
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix3fvARB");
                return;
@@ -634,7 +634,7 @@ _mesa_UniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, c
 {
        GET_CURRENT_CONTEXT(ctx);
 
-       if (ctx->ShaderObjects.current_program == NULL)
+       if (ctx->ShaderObjects.CurrentProgram == NULL)
        {
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix4fvARB");
                return;
@@ -1175,7 +1175,7 @@ _mesa_GetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name)
 void
 _mesa_init_shaderobjects (GLcontext *ctx)
 {
-       ctx->ShaderObjects.current_program = NULL;
+       ctx->ShaderObjects.CurrentProgram = NULL;
 
        _mesa_init_shaderobjects_3dlabs (ctx);
 }
index f03f65d7016bddab366a5b3efc14ec0715af6f2f..e55b243da0cbc378852792a7fb5a4d66ade42d58 100755 (executable)
@@ -1,8 +1,8 @@
 /*\r
  * Mesa 3-D graphics library\r
- * Version:  6.3\r
+ * Version:  6.5\r
  *\r
- * Copyright (C) 2005  Brian Paul   All Rights Reserved.\r
+ * Copyright (C) 2005-2006  Brian Paul   All Rights Reserved.\r
  *\r
  * Permission is hereby granted, free of charge, to any person obtaining a\r
  * copy of this software and associated documentation files (the "Software"),\r
@@ -42,6 +42,7 @@
 #include "slang_mesa.h"\r
 #include "Public/ShaderLang.h"\r
 #else\r
+#include "slang_utility.h"\r
 #include "slang_compile.h"\r
 #endif\r
 \r
@@ -465,6 +466,7 @@ struct gl2_shader_obj
        GLcharARB *source;\r
        GLint *offsets;\r
        GLsizei offset_count;\r
+       slang_translation_unit unit;\r
 };\r
 \r
 struct gl2_shader_impl\r
@@ -548,7 +550,6 @@ _shader_Compile (struct gl2_shader_intf **intf)
        char **strings;\r
        TBuiltInResource res;\r
 #else\r
-       slang_translation_unit unit;\r
        slang_unit_type type;\r
        slang_info_log info_log;\r
 #endif\r
@@ -627,7 +628,7 @@ _shader_Compile (struct gl2_shader_intf **intf)
        else\r
                type = slang_unit_vertex_shader;\r
        slang_info_log_construct (&info_log);\r
-       if (_slang_compile (impl->_obj.source, &unit, type, &info_log))\r
+       if (_slang_compile (impl->_obj.source, &impl->_obj.unit, type, &info_log))\r
        {\r
                impl->_obj.compile_status = GL_TRUE;\r
        }\r
@@ -794,6 +795,10 @@ _program_Link (struct gl2_program_intf **intf)
                impl->_obj.link_status = GL_TRUE;\r
 \r
        impl->_obj._container._generic.info_log = _mesa_strdup (ShGetInfoLog (impl->_obj.linker));\r
+#else\r
+       /* TODO: do the real linking */\r
+       impl->_obj.link_status = GL_TRUE;\r
+       impl->_obj._container._generic.info_log = _mesa_strdup ("Link OK.\n");\r
 #endif\r
 }\r
 \r
@@ -1041,6 +1046,109 @@ _mesa_3dlabs_create_program_object (void)
        return 0;\r
 }\r
 \r
+#include "slang_assemble.h"\r
+#include "slang_execute.h"\r
+\r
+static GLubyte *get_address_of (struct gl2_vertex_shader_intf **vs, const char *name)\r
+{\r
+       struct gl2_vertex_shader_impl *impl = (struct gl2_vertex_shader_impl *) vs;\r
+       slang_translation_unit *unit;\r
+       slang_atom atom;\r
+       slang_variable *var;\r
+\r
+       impl = (struct gl2_vertex_shader_impl *) vs;\r
+       unit = &impl->_obj._shader.unit;\r
+       atom = slang_atom_pool_atom (unit->atom_pool, name);\r
+       var = _slang_locate_variable (&unit->globals, atom, 1);\r
+       if (var == NULL || var->address == ~0)\r
+               return NULL;\r
+       return (GLubyte *) unit->machine->mem + var->address;\r
+}\r
+\r
+static int fetch_mem (struct gl2_vertex_shader_intf **vs, const char *name, GLvoid *val,\r
+       GLuint size, GLuint index, int write)\r
+{\r
+       GLubyte *data;\r
+\r
+       data = get_address_of (vs, name) + index * size;\r
+       if (data == NULL)\r
+               return 0;\r
+       if (write)\r
+               _mesa_memcpy (data, val, size);\r
+       else\r
+               _mesa_memcpy (val, data, size);\r
+       return 1;\r
+}\r
+\r
+int _slang_fetch_float (struct gl2_vertex_shader_intf **vs, const char *name, GLfloat *val, int write)\r
+{\r
+       return fetch_mem (vs, name, val, 4, 0, write);\r
+}\r
+\r
+int _slang_fetch_vec3 (struct gl2_vertex_shader_intf **vs, const char *name, GLfloat *val, int write)\r
+{\r
+       return fetch_mem (vs, name, val, 12, 0, write);\r
+}\r
+\r
+int _slang_fetch_vec4 (struct gl2_vertex_shader_intf **vs, const char *name, GLfloat *val,\r
+       GLuint index, int write)\r
+{\r
+       return fetch_mem (vs, name, val, 16, index, write);\r
+}\r
+\r
+int _slang_fetch_mat4 (struct gl2_vertex_shader_intf **vs, const char *name, GLfloat *val,\r
+       GLuint index, int write)\r
+{\r
+       return fetch_mem (vs, name, val, 64, index, write);\r
+}\r
+\r
+/* XXX */\r
+int _slang_call_function (slang_assembly_file *file, slang_function *fun, slang_operation *params,\r
+       unsigned int param_count, int assignment, slang_assembly_name_space *space,\r
+       slang_assembly_local_info *info, struct slang_machine_ *pmach, slang_atom_pool *);\r
+\r
+void exec_vertex_shader (struct gl2_vertex_shader_intf **vs)\r
+{\r
+       struct gl2_vertex_shader_impl *impl = (struct gl2_vertex_shader_impl *) vs;\r
+       slang_translation_unit *unit;\r
+       slang_atom atom;\r
+       unsigned int i;\r
+\r
+       impl = (struct gl2_vertex_shader_impl *) vs;\r
+       unit = &impl->_obj._shader.unit;\r
+       atom = slang_atom_pool_atom (unit->atom_pool, "main");\r
+       for (i = 0; i < unit->functions.num_functions; i++)\r
+               if (atom == unit->functions.functions[i].header.a_name)\r
+                       break;\r
+       if (i < unit->functions.num_functions)\r
+       {\r
+               slang_function *f;\r
+               slang_assembly_file_restore_point point;\r
+               slang_machine mach;\r
+               slang_assembly_local_info info;\r
+               slang_assembly_name_space space;\r
+\r
+               f = &unit->functions.functions[i];\r
+               slang_assembly_file_restore_point_save (unit->assembly, &point);\r
+               mach = *unit->machine;\r
+               mach.ip = unit->assembly->count;\r
+               info.ret_size = 0;\r
+               info.addr_tmp = 0;\r
+               info.swizzle_tmp = 4;\r
+               slang_assembly_file_push_label (unit->assembly, slang_asm_local_alloc, 20);\r
+               slang_assembly_file_push_label (unit->assembly, slang_asm_enter, 20);\r
+               space.funcs = &unit->functions;\r
+               space.structs = &unit->structs;\r
+               space.vars = &unit->globals;\r
+               _slang_call_function (unit->assembly, f, NULL, 0, 0, &space, &info, unit->machine,\r
+                       unit->atom_pool);\r
+               slang_assembly_file_push (unit->assembly, slang_asm_exit);\r
+               _slang_execute2 (unit->assembly, &mach);\r
+               slang_assembly_file_restore_point_load (unit->assembly, &point);\r
+               _mesa_memcpy (unit->machine->mem, mach.mem, SLANG_MACHINE_MEMORY_SIZE * sizeof (slang_machine_slot));\r
+       }\r
+}\r
+\r
 void\r
 _mesa_init_shaderobjects_3dlabs (GLcontext *ctx)\r
 {\r