On 04/05/2013 02:25 PM, gregory wrote:
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

We don't have any other GLX support for GLSL, so I wouldn't worry about it.

2/ Display list: need to be done or maybe enable the extensions on CORE profile

I haven't had any requests for the functionality with compatibility profiles. As far as I can tell, all of the ISVs that want this feature are already shifting to core profiles.

Maybe Aras can give us one humble ISVs opinion. :)

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

The ralloc memory context is (usually) some other thing allocated by ralloc. When the context is freed, all of the things allocated using that context will also be freed. So,

    a = ralloc_size(NULL, 32);
    b = ralloc_size(a, 32);
    ...
    ralloc_free(a);

Will free both a and b.

You can also use ralloc_steal to reparent an allocation.  So,

    a = ralloc_size(NULL, 32);
    b = ralloc_size(a, 32);
    c = ralloc_size(NULL, 32);

    ralloc_steal(c, b);

    ralloc_free(a);

will only cause a to be freed.  b is now in the context of c.

We use this in the GLSL compiler to, basically, implement a mark-and-sweep garbage collector. As various parts of the compiler allocate new objects and orphan others, we'll do a ralloc_steal pass to reparent all of the objects that are still connected. A ralloc_free of the old context will destroy all the objects that are no longer connected.

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

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to