[Mesa-dev] [WIP 00/13] GL_ARB_explicit_uniform_location extension
Ian Romanick
idr at freedesktop.org
Fri Apr 4 14:33:47 PDT 2014
On 03/27/2014 11:45 PM, Tapani Pälli wrote:
> Hi;
>
> Patches implement the extension, no Piglit regressions and all the tests
> for the extension pass (I've planned some more tests which are not yet
> in though).
>
> Changes shortly:
>
> - opt_dead_code optimization is modifed to build a list of removed
> uniform locations (that had explicit location) as this information
> is required by the extension. For this I had to modify here and
> there to have gl_shader_program structure available.
>
> - link_uniforms is modified to first occupy all explicit locations
> and only then the rest (sorry about patch size but I'm having trouble
> to split it smaller)
>
> - small parser changes, likely needs still more validation checks
>
> I would need some help determining what kind of version checks (gl, glsl)
> should be made in the parser for this extension and also should I rather
> just enable it for everyone or only for Intel, would be cool if someone
> could test this implementation against some other platform.
The extension spec says, "Requires OpenGL 3.3 or
ARB_explicit_attrib_location." I think we can enable it in every driver
that also enables ARB_explicit_attrib_location... according to
docs/GL3.txt, that's "all drivers that support GLSL."
> Also, I'm not sure how to actually get a good MAX_UNIFORM_LOCATIONS
> value, current one is just thrown with a dice. For example this is 65536
> for Nvidia binary driver (with gtx660) but it feels rather big to
> *really* work .. or?
I think this should be set based on GL_MAX_*_UNIFORM_COMPONENTS. An
application should be able to set a location for every uniform. The
worst that will happen if the value is huge is that the application will
ask us to waste a bunch of memory. Applications already have a lot of
ways to ask us to waste memory. :) If we encounter apps that, say, just
use locations 2 and 65534, then we can look at using a different data
structure to avoid the waste.
> Here's a branch with the patches:
> http://cgit.freedesktop.org/~tpalli/mesa/log/?h=exp_uniform_loc
>
> Any comments appreciated, thanks;
>
> // Tapani
>
>
> Tapani Pälli (13):
> glapi: add GL_ARB_explicit_uniform_location
> mesa: add enable bit for ARB_explicit_uniform_location
> mesa: add new enum MAX_UNIFORM_LOCATIONS and default value
> mesa: add a storage for inactive/removed uniform variables
> glsl: change do_common_optimization signature
> glsl: change do_dead_code signature, store uniform locations
> glsl/linker: change link_assign_uniform_locations signature
> glsl/linker: GL_ARB_explicit_uniform_location support
> mesa: support inactive uniforms in glUniform* functions
> glsl: add enable bit for ARB_explicit_uniform_location
> glsl: parser changes for GL_ARB_explicit_uniform_location
> intel: Enable GL_ARB_explicit_uniform_location
> docs: update ARB_explicit_uniform_location status
>
> docs/GL3.txt | 2 +-
> src/glsl/ast_to_hir.cpp | 13 ++
> src/glsl/glcpp/glcpp-parse.y | 3 +
> src/glsl/glsl_lexer.ll | 1 +
> src/glsl/glsl_parser_extras.cpp | 11 +-
> src/glsl/glsl_parser_extras.h | 2 +
> src/glsl/ir_optimization.h | 6 +-
> src/glsl/ir_uniform.h | 5 +-
> src/glsl/link_uniforms.cpp | 239 ++++++++++++++++++++++++---
> src/glsl/linker.cpp | 12 +-
> src/glsl/linker.h | 5 +-
> src/glsl/opt_dead_code.cpp | 40 ++++-
> src/mapi/glapi/gen/gl_API.xml | 6 +
> src/mesa/drivers/dri/i965/brw_shader.cpp | 3 +-
> src/mesa/drivers/dri/i965/intel_extensions.c | 1 +
> src/mesa/main/context.c | 3 +
> src/mesa/main/extensions.c | 1 +
> src/mesa/main/get.c | 1 +
> src/mesa/main/get_hash_params.py | 1 +
> src/mesa/main/mtypes.h | 19 +++
> src/mesa/main/shaderobj.c | 7 +
> src/mesa/main/tests/enum_strings.cpp | 1 +
> src/mesa/main/uniform_query.cpp | 16 ++
> src/mesa/program/ir_to_mesa.cpp | 2 +-
> src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 3 +-
> 25 files changed, 367 insertions(+), 36 deletions(-)
>
More information about the mesa-dev
mailing list