Hello, Please find an implementation of the ARB_separate_shader_objects extensions. I concentrate mostly on the state part of the extensions aka the pipeline object. I think GLSL already compiled program separately anyway.
I test my implementation on the test that I send yesterday ago on piglit. All tests are ok but I miss a test for new uniform function. Besides there are still some parts unimplemented: 1/ GLX Protocol: not sure it will be useful, as understand GLX is kinda drepecated 2/ Display list: need to be done or maybe enable the extensions on CORE profile Stuff that bug me: 1/ I don't get how to use ralloc_strdup. So I set the ralloc's context to NULL, not sure it is fully correct 2/ I implement the feature as a pure mesa state. I don't know if they're any rule to create driver functions. Maybe it would be better to add CreatePipelineObject/DeletePipelineObject/BindPipeline/UseProgramStages. Opinion is welcome Note: I didn't yet rebase my work on latest mesa. Not sure if it is critical for a preliminary review. Note2: I create the xml manually, don't know if there is any automatic flow. Thanks gregory (12): sso: Create extensions entry points sso: Add pipeline container/state sso: add support of GL_PROGRAM_SEPARABLE and CreateShaderProgramv sso: implement ActiveShaderProgram & GetProgramPipelineiv sso: replace Shader binding point with _Shader sso: rename Shader to the pointer _Shader sso: update meta state sso:Implement _mesa_UseProgramStages sso: implement BindProgramPipeline sso: update glGet: GL_PROGRAM_PIPELINE_BINDING sso: implement ValidateProgramPipeline and GetProgramPipelineInfoLog sso: Finally enable the extension on Gallium src/mapi/glapi/gen/ARB_separate_shader_objects.xml | 392 ++++++++++ src/mapi/glapi/gen/Makefile.am | 1 + src/mapi/glapi/gen/gl_API.xml | 6 +- src/mapi/glapi/gen/gl_genexec.py | 1 + src/mesa/drivers/common/meta.c | 35 +- src/mesa/drivers/dri/i965/brw_gs.c | 2 +- src/mesa/drivers/dri/i965/brw_shader.cpp | 2 +- src/mesa/drivers/dri/i965/brw_vs.c | 4 +- src/mesa/drivers/dri/i965/brw_vs_surface_state.c | 2 +- src/mesa/drivers/dri/i965/brw_wm.c | 4 +- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 2 +- src/mesa/drivers/dri/i965/gen6_sol.c | 6 +- src/mesa/drivers/dri/i965/gen6_vs_state.c | 2 +- src/mesa/drivers/dri/i965/gen6_wm_state.c | 2 +- src/mesa/drivers/dri/i965/gen7_sol_state.c | 4 +- src/mesa/drivers/dri/i965/gen7_vs_state.c | 2 +- src/mesa/drivers/dri/i965/gen7_wm_state.c | 2 +- src/mesa/main/api_validate.c | 2 +- src/mesa/main/context.c | 44 +- src/mesa/main/extensions.c | 1 + src/mesa/main/ff_fragment_shader.cpp | 8 +- src/mesa/main/get.c | 17 + src/mesa/main/get_hash_params.py | 3 + src/mesa/main/mtypes.h | 38 + src/mesa/main/pipelineobj.c | 800 ++++++++++++++++++++ src/mesa/main/pipelineobj.h | 101 +++ src/mesa/main/shaderapi.c | 250 ++++-- src/mesa/main/shaderapi.h | 8 +- src/mesa/main/state.c | 14 +- src/mesa/main/texstate.c | 12 +- src/mesa/main/transformfeedback.c | 4 +- src/mesa/main/uniform_query.cpp | 75 +- src/mesa/main/uniforms.c | 392 +++++++++- src/mesa/main/uniforms.h | 77 ++ src/mesa/program/ir_to_mesa.cpp | 12 +- src/mesa/sources.mak | 1 + src/mesa/state_tracker/st_atom_clip.c | 2 +- src/mesa/state_tracker/st_atom_constbuf.c | 4 +- src/mesa/state_tracker/st_cb_drawpixels.c | 2 +- src/mesa/state_tracker/st_draw.c | 6 +- src/mesa/state_tracker/st_extensions.c | 1 + src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +- src/mesa/state_tracker/st_program.c | 6 +- src/mesa/swrast/s_fragprog.c | 2 +- 44 files changed, 2182 insertions(+), 171 deletions(-) create mode 100644 src/mapi/glapi/gen/ARB_separate_shader_objects.xml create mode 100644 src/mesa/main/pipelineobj.c create mode 100644 src/mesa/main/pipelineobj.h -- 1.7.10.4 _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
