[Mesa-dev] [wip 0/9] GL_OES_get_program_binary extension
Tapani Pälli
tapani.palli at intel.com
Thu Jan 2 03:58:12 PST 2014
Hi;
Here's another take on the get_program_binary extension. I've rewritten big
chunks of it based on Paul's review and comments earlier. Here's a brief list
out of my head of things changed:
- uses mesa compilation time as verification method for cache, not git sha
- much smaller serialization code size, now as part of IR classes
- smaller binary blob size
- does not dump separate 'prototypes block' for functions but instead
deserialization iterates over the whole blob for functions first
- hashtables written faster than previously (iterated only once)
- no 'unique_id' for ir_variables but using the address as identifier
- patch set broken down to more individual patches/changes
Mesa branch with these patches applied on top:
http://cgit.freedesktop.org/~tpalli/mesa/log/?h=oes_get_program_binary
I have plans for the addition of driver backend data but I was hoping this to
be as a separate addition on top. Basically I extend gl_shader_program struct
and offer API for drivers to dump their binary data there, some proto here:
http://cgit.freedesktop.org/~tpalli/mesa/log/?h=driver_interface
(in order to work more data needed like the keys but this is just test)
I have also 'automatic' cache implementation here that can be used to verify
the cache functionality with any application (without extension):
http://cgit.freedesktop.org/~tpalli/mesa/log/?h=new_serialization
Any comments appreciated;
Tapani Pälli (9):
glsl: memory_writer helper class for data serialization
glsl: serialize methods for IR instructions
glsl: memory_map helper class for data deserialization
glsl: add MESA_SHADER_CACHE_MAGIC string for shader binary cache
glsl: export populate_symbol_table function
glsl: ir_deserializer class for the binary shader cache
mesa: iterate method for string_to_uint_map
glsl: functions to serialize gl_shader and gl_shader_program
mesa: OES_get_program_binary extension functionality
src/glsl/Makefile.sources | 3 +
src/glsl/ir.h | 45 ++
src/glsl/ir_deserializer.cpp | 979 ++++++++++++++++++++++++++++++++++++++++++
src/glsl/ir_deserializer.h | 142 ++++++
src/glsl/ir_serialize.cpp | 392 +++++++++++++++++
src/glsl/ir_serialize.h | 35 ++
src/glsl/linker.cpp | 2 +-
src/glsl/linker.h | 3 +
src/glsl/memory_map.h | 174 ++++++++
src/glsl/memory_writer.h | 147 +++++++
src/glsl/shader_cache.cpp | 489 +++++++++++++++++++++
src/glsl/shader_cache.h | 58 +++
src/glsl/shader_cache_magic.h | 36 ++
src/mesa/main/shaderapi.c | 44 +-
src/mesa/program/hash_table.h | 8 +
15 files changed, 2550 insertions(+), 7 deletions(-)
create mode 100644 src/glsl/ir_deserializer.cpp
create mode 100644 src/glsl/ir_deserializer.h
create mode 100644 src/glsl/ir_serialize.cpp
create mode 100644 src/glsl/ir_serialize.h
create mode 100644 src/glsl/memory_map.h
create mode 100644 src/glsl/memory_writer.h
create mode 100644 src/glsl/shader_cache.cpp
create mode 100644 src/glsl/shader_cache.h
create mode 100644 src/glsl/shader_cache_magic.h
--
1.8.3.1
More information about the mesa-dev
mailing list