[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mesa: Changes to 'upstream-experimental'



 .dir-locals.el                                                |    1 
 Android.common.mk                                             |   12 
 Makefile.am                                                   |    1 
 VERSION                                                       |    2 
 appveyor.yml                                                  |   11 
 configure.ac                                                  |   15 
 docs/GL3.txt                                                  |   12 
 docs/envvars.html                                             |   30 
 docs/index.html                                               |    6 
 docs/install.html                                             |    3 
 docs/relnotes.html                                            |    1 
 docs/relnotes/11.1.2.html                                     |  182 
 docs/relnotes/11.2.0.html                                     |    8 
 include/D3D9/d3d9types.h                                      |    1 
 include/c99/inttypes.h                                        |  305 
 include/c99/stdbool.h                                         |   46 
 include/c99/stdint.h                                          |  247 
 include/c99_compat.h                                          |    8 
 include/c99_math.h                                            |   49 
 include/d3dadapter/present.h                                  |    3 
 include/pci_ids/i965_pci_ids.h                                |   18 
 scons/gallium.py                                              |   16 
 src/compiler/.gitignore                                       |    1 
 src/compiler/Makefile.am                                      |    2 
 src/compiler/builtin_type_macros.h                            |    1 
 src/compiler/glsl/.gitignore                                  |    1 
 src/compiler/glsl/ast.h                                       |   12 
 src/compiler/glsl/ast_function.cpp                            |  166 
 src/compiler/glsl/ast_to_hir.cpp                              |  191 
 src/compiler/glsl/ast_type.cpp                                |   13 
 src/compiler/glsl/builtin_functions.cpp                       |    4 
 src/compiler/glsl/builtin_variables.cpp                       |   15 
 src/compiler/glsl/glcpp/glcpp-parse.y                         |    3 
 src/compiler/glsl/glsl_lexer.ll                               |    4 
 src/compiler/glsl/glsl_parser_extras.cpp                      |  115 
 src/compiler/glsl/glsl_parser_extras.h                        |   12 
 src/compiler/glsl/ir.cpp                                      |   17 
 src/compiler/glsl/ir.h                                        |   19 
 src/compiler/glsl/ir_clone.cpp                                |    1 
 src/compiler/glsl/link_uniform_initializers.cpp               |    1 
 src/compiler/glsl/link_uniforms.cpp                           |  164 
 src/compiler/glsl/link_varyings.cpp                           |   54 
 src/compiler/glsl/linker.cpp                                  |  411 -
 src/compiler/glsl/linker.h                                    |   17 
 src/compiler/glsl/lower_discard_flow.cpp                      |    4 
 src/compiler/glsl/main.cpp                                    |   17 
 src/compiler/glsl/opt_tree_grafting.cpp                       |   11 
 src/compiler/glsl/program.h                                   |    5 
 src/compiler/glsl/tests/sampler_types_test.cpp                |    2 
 src/compiler/glsl/tests/uniform_initializer_utils.cpp         |    3 
 src/compiler/glsl/tests/varyings_test.cpp                     |   78 
 src/compiler/glsl_types.cpp                                   |  204 
 src/compiler/glsl_types.h                                     |   38 
 src/compiler/nir/glsl_to_nir.cpp                              |   37 
 src/compiler/nir/nir.c                                        |   24 
 src/compiler/nir/nir.h                                        |  130 
 src/compiler/nir/nir_algebraic.py                             |    9 
 src/compiler/nir/nir_builder.h                                |    2 
 src/compiler/nir/nir_clone.c                                  |    8 
 src/compiler/nir/nir_instr_set.c                              |   18 
 src/compiler/nir/nir_intrinsics.c                             |   10 
 src/compiler/nir/nir_intrinsics.h                             |  177 
 src/compiler/nir/nir_lower_atomics.c                          |    4 
 src/compiler/nir/nir_lower_clip.c                             |    8 
 src/compiler/nir/nir_lower_gs_intrinsics.c                    |    4 
 src/compiler/nir/nir_lower_io.c                               |   12 
 src/compiler/nir/nir_lower_locals_to_regs.c                   |    2 
 src/compiler/nir/nir_lower_samplers.c                         |   29 
 src/compiler/nir/nir_lower_tex.c                              |    6 
 src/compiler/nir/nir_lower_two_sided_color.c                  |    4 
 src/compiler/nir/nir_lower_var_copies.c                       |    2 
 src/compiler/nir/nir_lower_vars_to_ssa.c                      |    5 
 src/compiler/nir/nir_lower_vec_to_movs.c                      |    4 
 src/compiler/nir/nir_opt_algebraic.py                         |   17 
 src/compiler/nir/nir_opt_constant_folding.c                   |   11 
 src/compiler/nir/nir_print.c                                  |   74 
 src/compiler/nir/nir_remove_dead_variables.c                  |    5 
 src/compiler/nir/nir_validate.c                               |    5 
 src/compiler/nir_types.cpp                                    |  144 
 src/compiler/nir_types.h                                      |   38 
 src/egl/Android.mk                                            |    5 
 src/egl/drivers/dri2/platform_android.c                       |   14 
 src/egl/drivers/dri2/platform_x11.c                           |    9 
 src/egl/main/eglapi.c                                         |   10 
 src/egl/main/eglsync.c                                        |    3 
 src/gallium/auxiliary/Makefile.am                             |    4 
 src/gallium/auxiliary/Makefile.sources                        |    4 
 src/gallium/auxiliary/SConscript                              |    2 
 src/gallium/auxiliary/cso_cache/cso_context.c                 |  270 
 src/gallium/auxiliary/cso_cache/cso_context.h                 |   84 
 src/gallium/auxiliary/draw/draw_pipe_pstipple.c               |  330 
 src/gallium/auxiliary/gallivm/lp_bld_debug.cpp                |   53 
 src/gallium/auxiliary/gallivm/lp_bld_init.c                   |    2 
 src/gallium/auxiliary/gallivm/lp_bld_limits.h                 |    3 
 src/gallium/auxiliary/gallivm/lp_bld_misc.cpp                 |   30 
 src/gallium/auxiliary/gallivm/lp_bld_misc.h                   |    7 
 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c               |    7 
 src/gallium/auxiliary/hud/font.c                              |    2 
 src/gallium/auxiliary/hud/hud_context.c                       |   56 
 src/gallium/auxiliary/nir/tgsi_to_nir.c                       |   19 
 src/gallium/auxiliary/pipe-loader/SConscript                  |    2 
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c               |    4 
 src/gallium/auxiliary/postprocess/pp_run.c                    |   58 
 src/gallium/auxiliary/tgsi/tgsi_build.c                       |    1 
 src/gallium/auxiliary/tgsi/tgsi_dump.c                        |    7 
 src/gallium/auxiliary/tgsi/tgsi_exec.c                        |    8 
 src/gallium/auxiliary/tgsi/tgsi_exec.h                        |    3 
 src/gallium/auxiliary/tgsi/tgsi_info.c                        |    1 
 src/gallium/auxiliary/tgsi/tgsi_scan.c                        |  755 +-
 src/gallium/auxiliary/tgsi/tgsi_scan.h                        |    1 
 src/gallium/auxiliary/tgsi/tgsi_strings.c                     |    1 
 src/gallium/auxiliary/tgsi/tgsi_text.c                        |   16 
 src/gallium/auxiliary/tgsi/tgsi_transform.h                   |    2 
 src/gallium/auxiliary/tgsi/tgsi_ureg.c                        |   38 
 src/gallium/auxiliary/tgsi/tgsi_ureg.h                        |    3 
 src/gallium/auxiliary/util/u_blit.c                           |   52 
 src/gallium/auxiliary/util/u_box.h                            |   12 
 src/gallium/auxiliary/util/u_cpu_detect.c                     |    3 
 src/gallium/auxiliary/util/u_debug.c                          |  468 -
 src/gallium/auxiliary/util/u_debug.h                          |   39 
 src/gallium/auxiliary/util/u_debug_image.c                    |  348 +
 src/gallium/auxiliary/util/u_debug_image.h                    |   74 
 src/gallium/auxiliary/util/u_debug_stack.c                    |   61 
 src/gallium/auxiliary/util/u_inlines.h                        |   11 
 src/gallium/auxiliary/util/u_pstipple.c                       |    4 
 src/gallium/auxiliary/util/u_pstipple.h                       |    5 
 src/gallium/auxiliary/util/u_staging.c                        |   50 
 src/gallium/auxiliary/util/u_staging.h                        |   24 
 src/gallium/auxiliary/vl/vl_zscan.c                           |    7 
 src/gallium/auxiliary/vl/vl_zscan.h                           |    1 
 src/gallium/docs/source/context.rst                           |    5 
 src/gallium/docs/source/screen.rst                            |   18 
 src/gallium/drivers/ddebug/dd_context.c                       |   28 
 src/gallium/drivers/ddebug/dd_pipe.h                          |    2 
 src/gallium/drivers/freedreno/a2xx/a2xx.xml.h                 |   11 
 src/gallium/drivers/freedreno/a3xx/a3xx.xml.h                 |  277 
 src/gallium/drivers/freedreno/a3xx/fd3_emit.c                 |    3 
 src/gallium/drivers/freedreno/a4xx/a4xx.xml.h                 | 1042 +++
 src/gallium/drivers/freedreno/a4xx/fd4_context.h              |    2 
 src/gallium/drivers/freedreno/a4xx/fd4_emit.c                 |    3 
 src/gallium/drivers/freedreno/a4xx/fd4_query.c                |  138 
 src/gallium/drivers/freedreno/adreno_common.xml.h             |   13 
 src/gallium/drivers/freedreno/adreno_pm4.xml.h                |   42 
 src/gallium/drivers/freedreno/freedreno_context.h             |    3 
 src/gallium/drivers/freedreno/freedreno_query.h               |   12 
 src/gallium/drivers/freedreno/freedreno_query_hw.c            |   33 
 src/gallium/drivers/freedreno/freedreno_query_hw.h            |    6 
 src/gallium/drivers/freedreno/freedreno_screen.c              |   22 
 src/gallium/drivers/freedreno/freedreno_screen.h              |    1 
 src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c          |   32 
 src/gallium/drivers/freedreno/ir3/ir3_ra.c                    |   30 
 src/gallium/drivers/i915/i915_screen.c                        |    3 
 src/gallium/drivers/ilo/ilo_draw.c                            |    2 
 src/gallium/drivers/ilo/ilo_gpgpu.c                           |    8 
 src/gallium/drivers/ilo/ilo_query.c                           |    9 
 src/gallium/drivers/ilo/ilo_render.c                          |    2 
 src/gallium/drivers/ilo/ilo_screen.c                          |    7 
 src/gallium/drivers/ilo/ilo_state.c                           |    2 
 src/gallium/drivers/llvmpipe/Makefile.am                      |    4 
 src/gallium/drivers/llvmpipe/SConscript                       |    2 
 src/gallium/drivers/llvmpipe/lp_flush.c                       |    1 
 src/gallium/drivers/llvmpipe/lp_rast.c                        |    8 
 src/gallium/drivers/llvmpipe/lp_screen.c                      |    4 
 src/gallium/drivers/llvmpipe/lp_setup_context.h               |   15 
 src/gallium/drivers/llvmpipe/lp_setup_line.c                  |   20 
 src/gallium/drivers/llvmpipe/lp_setup_tri.c                   |   20 
 src/gallium/drivers/nouveau/Makefile.sources                  |    5 
 src/gallium/drivers/nouveau/codegen/nv50_ir.h                 |    2 
 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp    |   22 
 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp    |   97 
 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nv50.cpp     |    5 
 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp     |   39 
 src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp     |   54 
 src/gallium/drivers/nouveau/codegen/nv50_ir_inlines.h         |    4 
 src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp |  103 
 src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.h   |    1 
 src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp      |   35 
 src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp         |   10 
 src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp            |    2 
 src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp        |    1 
 src/gallium/drivers/nouveau/nv30/nv30_query.c                 |    7 
 src/gallium/drivers/nouveau/nv30/nv30_screen.c                |    6 
 src/gallium/drivers/nouveau/nv50/g80_defs.xml.h               |  279 
 src/gallium/drivers/nouveau/nv50/g80_texture.xml.h            |  451 +
 src/gallium/drivers/nouveau/nv50/nv50_compute.c               |   16 
 src/gallium/drivers/nouveau/nv50/nv50_context.h               |    8 
 src/gallium/drivers/nouveau/nv50/nv50_defs.xml.h              |  263 
 src/gallium/drivers/nouveau/nv50/nv50_formats.c               |  744 +-
 src/gallium/drivers/nouveau/nv50/nv50_program.c               |    9 
 src/gallium/drivers/nouveau/nv50/nv50_query_hw.c              |    6 
 src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c           |   12 
 src/gallium/drivers/nouveau/nv50/nv50_screen.c                |   13 
 src/gallium/drivers/nouveau/nv50/nv50_screen.h                |   18 
 src/gallium/drivers/nouveau/nv50/nv50_state.c                 |   69 
 src/gallium/drivers/nouveau/nv50/nv50_state_validate.c        |    3 
 src/gallium/drivers/nouveau/nv50/nv50_stateobj_tex.h          |    1 
 src/gallium/drivers/nouveau/nv50/nv50_surface.c               |   38 
 src/gallium/drivers/nouveau/nv50/nv50_tex.c                   |   92 
 src/gallium/drivers/nouveau/nv50/nv50_texture.xml.h           |  306 
 src/gallium/drivers/nouveau/nv50/nv50_transfer.c              |    6 
 src/gallium/drivers/nouveau/nv50/nv50_vbo.c                   |   13 
 src/gallium/drivers/nouveau/nv_object.xml.h                   |    2 
 src/gallium/drivers/nouveau/nvc0/gm107_texture.xml.h          |  365 +
 src/gallium/drivers/nouveau/nvc0/mme/Makefile                 |    2 
 src/gallium/drivers/nouveau/nvc0/mme/com9097.mme              |   49 
 src/gallium/drivers/nouveau/nvc0/mme/com9097.mme.h            |   33 
 src/gallium/drivers/nouveau/nvc0/mme/com90c0.mme              |   24 
 src/gallium/drivers/nouveau/nvc0/mme/com90c0.mme.h            |   19 
 src/gallium/drivers/nouveau/nvc0/nvc0_compute.c               |  231 
 src/gallium/drivers/nouveau/nvc0/nvc0_compute.h               |    1 
 src/gallium/drivers/nouveau/nvc0/nvc0_context.c               |   41 
 src/gallium/drivers/nouveau/nvc0/nvc0_context.h               |   18 
 src/gallium/drivers/nouveau/nvc0/nvc0_macros.h                |    4 
 src/gallium/drivers/nouveau/nvc0/nvc0_program.c               |    3 
 src/gallium/drivers/nouveau/nvc0/nvc0_query.c                 |   21 
 src/gallium/drivers/nouveau/nvc0/nvc0_query.h                 |    7 
 src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c              |  123 
 src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.h              |    2 
 src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c           |   12 
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c                |   58 
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.h                |   21 
 src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c          |    2 
 src/gallium/drivers/nouveau/nvc0/nvc0_state.c                 |   34 
 src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c        |   44 
 src/gallium/drivers/nouveau/nvc0/nvc0_surface.c               |   36 
 src/gallium/drivers/nouveau/nvc0/nvc0_tex.c                   |  385 -
 src/gallium/drivers/nouveau/nvc0/nvc0_transfer.c              |    2 
 src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c                   |   38 
 src/gallium/drivers/nouveau/nvc0/nve4_compute.c               |   28 
 src/gallium/drivers/nouveau/nvc0/nve4_compute.h               |    1 
 src/gallium/drivers/r300/r300_screen.c                        |   10 
 src/gallium/drivers/r300/r300_transfer.c                      |    2 
 src/gallium/drivers/r600/evergreen_compute.c                  |   94 
 src/gallium/drivers/r600/evergreen_compute_internal.h         |   19 
 src/gallium/drivers/r600/evergreen_state.c                    |   12 
 src/gallium/drivers/r600/r600_llvm.c                          |    5 
 src/gallium/drivers/r600/r600_pipe.c                          |   17 
 src/gallium/drivers/r600/r600_uvd.c                           |    2 
 src/gallium/drivers/radeon/r600_buffer_common.c               |    4 
 src/gallium/drivers/radeon/r600_cs.h                          |    2 
 src/gallium/drivers/radeon/r600_perfcounter.c                 |   38 
 src/gallium/drivers/radeon/r600_pipe_common.c                 |  200 
 src/gallium/drivers/radeon/r600_pipe_common.h                 |   13 
 src/gallium/drivers/radeon/r600_query.c                       |   94 
 src/gallium/drivers/radeon/r600_query.h                       |   32 
 src/gallium/drivers/radeon/r600_texture.c                     |   48 
 src/gallium/drivers/radeon/radeon_elf_util.c                  |   26 
 src/gallium/drivers/radeon/radeon_elf_util.h                  |   14 
 src/gallium/drivers/radeon/radeon_llvm.h                      |    7 
 src/gallium/drivers/radeon/radeon_llvm_emit.c                 |   13 
 src/gallium/drivers/radeon/radeon_llvm_emit.h                 |    1 
 src/gallium/drivers/radeon/radeon_llvm_util.c                 |    6 
 src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c           |  107 
 src/gallium/drivers/radeon/radeon_uvd.c                       |    3 
 src/gallium/drivers/radeon/radeon_winsys.h                    |   49 
 src/gallium/drivers/radeonsi/cik_sdma.c                       |    2 
 src/gallium/drivers/radeonsi/si_blit.c                        |    2 
 src/gallium/drivers/radeonsi/si_compute.c                     |   86 
 src/gallium/drivers/radeonsi/si_descriptors.c                 |  116 
 src/gallium/drivers/radeonsi/si_hw_context.c                  |    3 
 src/gallium/drivers/radeonsi/si_perfcounter.c                 |  121 
 src/gallium/drivers/radeonsi/si_pipe.c                        |  108 
 src/gallium/drivers/radeonsi/si_pipe.h                        |   31 
 src/gallium/drivers/radeonsi/si_shader.c                      | 3391 +++++++---
 src/gallium/drivers/radeonsi/si_shader.h                      |  221 
 src/gallium/drivers/radeonsi/si_state.c                       |  365 -
 src/gallium/drivers/radeonsi/si_state.h                       |   24 
 src/gallium/drivers/radeonsi/si_state_shaders.c               |  666 +
 src/gallium/drivers/radeonsi/sid.h                            |    3 
 src/gallium/drivers/softpipe/Makefile.am                      |    2 
 src/gallium/drivers/softpipe/SConscript                       |    2 
 src/gallium/drivers/softpipe/sp_flush.c                       |    1 
 src/gallium/drivers/softpipe/sp_screen.c                      |    5 
 src/gallium/drivers/svga/svga_pipe_flush.c                    |    1 
 src/gallium/drivers/svga/svga_screen.c                        |   13 
 src/gallium/drivers/svga/svga_tgsi_vgpu10.c                   |    4 
 src/gallium/drivers/trace/Makefile.am                         |    2 
 src/gallium/drivers/trace/SConscript                          |    2 
 src/gallium/drivers/trace/tr_context.c                        |  271 
 src/gallium/drivers/trace/tr_dump_state.c                     |   60 
 src/gallium/drivers/trace/tr_dump_state.h                     |    4 
 src/gallium/drivers/trace/tr_screen.c                         |   25 
 src/gallium/drivers/vc4/vc4_nir_lower_txf_ms.c                |    6 
 src/gallium/drivers/vc4/vc4_program.c                         |    4 
 src/gallium/drivers/vc4/vc4_qir.c                             |    1 
 src/gallium/drivers/vc4/vc4_qir_schedule.c                    |    2 
 src/gallium/drivers/vc4/vc4_qpu_emit.c                        |    2 
 src/gallium/drivers/vc4/vc4_screen.c                          |    7 
 src/gallium/drivers/virgl/virgl_screen.c                      |    4 
 src/gallium/include/pipe/p_context.h                          |   53 
 src/gallium/include/pipe/p_defines.h                          |   22 
 src/gallium/include/pipe/p_screen.h                           |    6 
 src/gallium/include/pipe/p_shader_tokens.h                    |    4 
 src/gallium/include/pipe/p_state.h                            |   56 
 src/gallium/state_trackers/clover/core/kernel.cpp             |   13 
 src/gallium/state_trackers/nine/Makefile.sources              |    3 
 src/gallium/state_trackers/nine/adapter9.c                    |   55 
 src/gallium/state_trackers/nine/adapter9.h                    |   18 
 src/gallium/state_trackers/nine/authenticatedchannel9.c       |   10 
 src/gallium/state_trackers/nine/authenticatedchannel9.h       |   10 
 src/gallium/state_trackers/nine/basetexture9.c                |   16 
 src/gallium/state_trackers/nine/basetexture9.h                |   14 
 src/gallium/state_trackers/nine/buffer9.c                     |  248 
 src/gallium/state_trackers/nine/buffer9.h                     |  101 
 src/gallium/state_trackers/nine/cryptosession9.c              |   18 
 src/gallium/state_trackers/nine/cryptosession9.h              |   18 
 src/gallium/state_trackers/nine/cubetexture9.c                |   27 
 src/gallium/state_trackers/nine/cubetexture9.h                |   10 
 src/gallium/state_trackers/nine/device9.c                     |  403 -
 src/gallium/state_trackers/nine/device9.h                     |  246 
 src/gallium/state_trackers/nine/device9ex.c                   |   88 
 src/gallium/state_trackers/nine/device9ex.h                   |   47 
 src/gallium/state_trackers/nine/device9video.c                |    6 
 src/gallium/state_trackers/nine/device9video.h                |    6 
 src/gallium/state_trackers/nine/guid.c                        |   18 
 src/gallium/state_trackers/nine/guid.h                        |    4 
 src/gallium/state_trackers/nine/indexbuffer9.c                |  107 
 src/gallium/state_trackers/nine/indexbuffer9.h                |   15 
 src/gallium/state_trackers/nine/iunknown.c                    |    8 
 src/gallium/state_trackers/nine/iunknown.h                    |    9 
 src/gallium/state_trackers/nine/nine_ff.c                     |  117 
 src/gallium/state_trackers/nine/nine_flags.h                  |   14 
 src/gallium/state_trackers/nine/nine_limits.h                 |  211 
 src/gallium/state_trackers/nine/nine_lock.c                   |  444 -
 src/gallium/state_trackers/nine/nine_pdata.h                  |    1 
 src/gallium/state_trackers/nine/nine_pipe.c                   |   11 
 src/gallium/state_trackers/nine/nine_pipe.h                   |    8 
 src/gallium/state_trackers/nine/nine_shader.c                 |   57 
 src/gallium/state_trackers/nine/nine_shader.h                 |    1 
 src/gallium/state_trackers/nine/nine_state.c                  |   61 
 src/gallium/state_trackers/nine/nine_state.h                  |   39 
 src/gallium/state_trackers/nine/nineexoverlayextension.c      |    2 
 src/gallium/state_trackers/nine/nineexoverlayextension.h      |    2 
 src/gallium/state_trackers/nine/pixelshader9.c                |    3 
 src/gallium/state_trackers/nine/pixelshader9.h                |    7 
 src/gallium/state_trackers/nine/query9.c                      |    8 
 src/gallium/state_trackers/nine/query9.h                      |    8 
 src/gallium/state_trackers/nine/resource9.c                   |   63 
 src/gallium/state_trackers/nine/resource9.h                   |   16 
 src/gallium/state_trackers/nine/stateblock9.c                 |   54 
 src/gallium/state_trackers/nine/stateblock9.h                 |    4 
 src/gallium/state_trackers/nine/surface9.c                    |   43 
 src/gallium/state_trackers/nine/surface9.h                    |   12 
 src/gallium/state_trackers/nine/swapchain9.c                  |   70 
 src/gallium/state_trackers/nine/swapchain9.h                  |   15 
 src/gallium/state_trackers/nine/swapchain9ex.c                |    6 
 src/gallium/state_trackers/nine/swapchain9ex.h                |    6 
 src/gallium/state_trackers/nine/texture9.c                    |   50 
 src/gallium/state_trackers/nine/texture9.h                    |   10 
 src/gallium/state_trackers/nine/vertexbuffer9.c               |  135 
 src/gallium/state_trackers/nine/vertexbuffer9.h               |   19 
 src/gallium/state_trackers/nine/vertexdeclaration9.c          |   29 
 src/gallium/state_trackers/nine/vertexdeclaration9.h          |    4 
 src/gallium/state_trackers/nine/vertexshader9.c               |    2 
 src/gallium/state_trackers/nine/vertexshader9.h               |    2 
 src/gallium/state_trackers/nine/volume9.c                     |   29 
 src/gallium/state_trackers/nine/volume9.h                     |   14 
 src/gallium/state_trackers/nine/volumetexture9.c              |   23 
 src/gallium/state_trackers/nine/volumetexture9.h              |   10 
 src/gallium/state_trackers/omx/vid_dec_h264.c                 |    7 
 src/gallium/targets/d3dadapter9/drm.c                         |   61 
 src/gallium/targets/graw-null/graw_util.c                     |    1 
 src/gallium/tests/graw/graw_util.h                            |    1 
 src/gallium/tests/trivial/compute.c                           |   11 
 src/gallium/tests/trivial/quad-tex.c                          |    2 
 src/gallium/tests/trivial/tri.c                               |    2 
 src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c                 |   41 
 src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c           |    1 
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c                 |    8 
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c                 |    6 
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c             |   70 
 src/glx/dri2_glx.c                                            |   11 
 src/glx/dri3_glx.c                                            |    7 
 src/glx/dri_common.c                                          |   28 
 src/glx/drisw_glx.c                                           |    4 
 src/glx/glxextensions.c                                       |    1 
 src/glx/glxextensions.h                                       |    1 
 src/mapi/glapi/gen/gl_API.xml                                 |   23 
 src/mapi/glapi/gen/gl_genexec.py                              |    1 
 src/mesa/Makefile.sources                                     |    8 
 src/mesa/drivers/common/meta.c                                |   30 
 src/mesa/drivers/common/meta.h                                |    5 
 src/mesa/drivers/common/meta_copy_image.c                     |   14 
 src/mesa/drivers/dri/common/dri_util.c                        |    1 
 src/mesa/drivers/dri/common/xmlpool/t_options.h               |    5 
 src/mesa/drivers/dri/i915/intel_tex_validate.c                |    1 
 src/mesa/drivers/dri/i965/Makefile.sources                    |    2 
 src/mesa/drivers/dri/i965/brw_blorp.cpp                       |   10 
 src/mesa/drivers/dri/i965/brw_blorp_blit.cpp                  |    7 
 src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp               |    2 
 src/mesa/drivers/dri/i965/brw_compiler.h                      |    5 
 src/mesa/drivers/dri/i965/brw_compute.c                       |   96 
 src/mesa/drivers/dri/i965/brw_context.c                       |   42 
 src/mesa/drivers/dri/i965/brw_context.h                       |    9 
 src/mesa/drivers/dri/i965/brw_defines.h                       |   44 
 src/mesa/drivers/dri/i965/brw_device_info.c                   |   19 
 src/mesa/drivers/dri/i965/brw_draw.c                          |   18 
 src/mesa/drivers/dri/i965/brw_fs.cpp                          |  156 
 src/mesa/drivers/dri/i965/brw_fs.h                            |    8 
 src/mesa/drivers/dri/i965/brw_fs_builder.h                    |   12 
 src/mesa/drivers/dri/i965/brw_fs_combine_constants.cpp        |    6 
 src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp         |    2 
 src/mesa/drivers/dri/i965/brw_fs_generator.cpp                |   20 
 src/mesa/drivers/dri/i965/brw_fs_nir.cpp                      |   72 
 src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp          |    2 
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp                  |   40 
 src/mesa/drivers/dri/i965/brw_link.cpp                        |    2 
 src/mesa/drivers/dri/i965/brw_meta_fast_clear.c               |   22 
 src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c             |   23 
 src/mesa/drivers/dri/i965/brw_meta_updownsample.c             |   38 
 src/mesa/drivers/dri/i965/brw_misc_state.c                    |    2 
 src/mesa/drivers/dri/i965/brw_nir.c                           |   23 
 src/mesa/drivers/dri/i965/brw_nir.h                           |    7 
 src/mesa/drivers/dri/i965/brw_nir_attribute_workarounds.c     |  176 
 src/mesa/drivers/dri/i965/brw_pipe_control.c                  |    2 
 src/mesa/drivers/dri/i965/brw_program.c                       |    2 
 src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp       |    7 
 src/mesa/drivers/dri/i965/brw_shader.cpp                      |    3 
 src/mesa/drivers/dri/i965/brw_state.h                         |    1 
 src/mesa/drivers/dri/i965/brw_state_cache.c                   |   23 
 src/mesa/drivers/dri/i965/brw_state_upload.c                  |    4 
 src/mesa/drivers/dri/i965/brw_surface_formats.c               |    2 
 src/mesa/drivers/dri/i965/brw_vec4.cpp                        |   71 
 src/mesa/drivers/dri/i965/brw_vec4.h                          |    5 
 src/mesa/drivers/dri/i965/brw_vec4_builder.h                  |   17 
 src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp       |   14 
 src/mesa/drivers/dri/i965/brw_vec4_generator.cpp              |   23 
 src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp                 |    4 
 src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp             |   25 
 src/mesa/drivers/dri/i965/brw_vec4_nir.cpp                    |   49 
 src/mesa/drivers/dri/i965/brw_vec4_tcs.cpp                    |    4 
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp                |   27 
 src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp             |  109 
 src/mesa/drivers/dri/i965/brw_wm_iz.cpp                       |    9 
 src/mesa/drivers/dri/i965/brw_wm_state.c                      |    3 
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c              |   43 
 src/mesa/drivers/dri/i965/gen6_constant_state.c               |  190 
 src/mesa/drivers/dri/i965/gen6_vs_state.c                     |   89 
 src/mesa/drivers/dri/i965/gen7_l3_state.c                     |   41 
 src/mesa/drivers/dri/i965/gen7_vs_state.c                     |   75 
 src/mesa/drivers/dri/i965/gen7_wm_state.c                     |   13 
 src/mesa/drivers/dri/i965/gen8_gs_state.c                     |    2 
 src/mesa/drivers/dri/i965/gen8_ps_state.c                     |    9 
 src/mesa/drivers/dri/i965/gen8_surface_state.c                |   68 
 src/mesa/drivers/dri/i965/intel_blit.c                        |    4 
 src/mesa/drivers/dri/i965/intel_copy_image.c                  |   18 
 src/mesa/drivers/dri/i965/intel_extensions.c                  |    3 
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c                 |  222 
 src/mesa/drivers/dri/i965/intel_mipmap_tree.h                 |   24 
 src/mesa/drivers/dri/i965/intel_pixel_bitmap.c                |    2 
 src/mesa/drivers/dri/i965/intel_pixel_read.c                  |    2 
 src/mesa/drivers/dri/i965/intel_reg.h                         |    2 
 src/mesa/drivers/dri/i965/intel_tex_image.c                   |    2 
 src/mesa/drivers/dri/i965/intel_tex_subimage.c                |    2 
 src/mesa/drivers/dri/i965/intel_tex_validate.c                |    1 
 src/mesa/drivers/dri/i965/intel_tiled_memcpy.c                |   69 
 src/mesa/drivers/dri/i965/test_vec4_cmod_propagation.cpp      |   14 
 src/mesa/drivers/dri/i965/test_vec4_copy_propagation.cpp      |   10 
 src/mesa/drivers/dri/i965/test_vec4_register_coalesce.cpp     |   10 
 src/mesa/main/attrib.c                                        |    4 
 src/mesa/main/bufferobj.c                                     |   77 
 src/mesa/main/buffers.c                                       |    6 
 src/mesa/main/clear.c                                         |   87 
 src/mesa/main/compute.c                                       |    3 
 src/mesa/main/config.h                                        |   11 
 src/mesa/main/context.c                                       |    3 
 src/mesa/main/dd.h                                            |   26 
 src/mesa/main/debug_output.c                                  | 1301 +++
 src/mesa/main/debug_output.h                                  |  107 
 src/mesa/main/dlist.c                                         |  456 +
 src/mesa/main/dlist.h                                         |   85 
 src/mesa/main/enable.c                                        |    5 
 src/mesa/main/errors.c                                        | 1286 ---
 src/mesa/main/errors.h                                        |   48 
 src/mesa/main/extensions_table.h                              |    5 
 src/mesa/main/fbobject.c                                      |  147 
 src/mesa/main/fbobject.h                                      |    8 
 src/mesa/main/format_utils.c                                  |   74 
 src/mesa/main/formatquery.c                                   |    5 
 src/mesa/main/framebuffer.h                                   |    5 
 src/mesa/main/genmipmap.c                                     |    2 
 src/mesa/main/get.c                                           |   64 
 src/mesa/main/get_hash_params.py                              |   33 
 src/mesa/main/getstring.c                                     |    1 
 src/mesa/main/glformats.c                                     |    8 
 src/mesa/main/hash.c                                          |    4 
 src/mesa/main/image.c                                         |   33 
 src/mesa/main/imports.c                                       |    8 
 src/mesa/main/imports.h                                       |    3 
 src/mesa/main/mipmap.c                                        |   21 
 src/mesa/main/mtypes.h                                        |   47 
 src/mesa/main/objectlabel.c                                   |   13 
 src/mesa/main/pipelineobj.c                                   |    5 
 src/mesa/main/program_resource.c                              |    4 
 src/mesa/main/queryobj.c                                      |  280 
 src/mesa/main/readpix.c                                       |   69 
 src/mesa/main/shaderapi.c                                     |    1 
 src/mesa/main/shared.c                                        |   17 
 src/mesa/main/state.c                                         |    2 
 src/mesa/main/syncobj.c                                       |   89 
 src/mesa/main/syncobj.h                                       |   11 
 src/mesa/main/texgetimage.c                                   |   14 
 src/mesa/main/teximage.c                                      |   50 
 src/mesa/main/teximage.h                                      |   60 
 src/mesa/main/texobj.c                                        |   33 
 src/mesa/main/texobj.h                                        |   19 
 src/mesa/main/texparam.c                                      |   23 
 src/mesa/main/texstate.c                                      |    2 
 src/mesa/main/texstore.c                                      |    3 
 src/mesa/main/textureview.c                                   |    9 
 src/mesa/main/transformfeedback.h                             |    3 
 src/mesa/main/viewport.c                                      |    4 
 src/mesa/program/ir_to_mesa.cpp                               |   93 
 src/mesa/program/prog_parameter.c                             |   70 
 src/mesa/program/prog_parameter.h                             |    7 
 src/mesa/program/prog_statevars.c                             |    3 
 src/mesa/program/prog_to_nir.c                                |    5 
 src/mesa/program/program.c                                    |    7 
 src/mesa/program/sampler.cpp                                  |  144 
 src/mesa/program/sampler.h                                    |   39 
 src/mesa/state_tracker/st_atom.c                              |   60 
 src/mesa/state_tracker/st_atom.h                              |   17 
 src/mesa/state_tracker/st_atom_atomicbuf.c                    |   26 
 src/mesa/state_tracker/st_atom_constbuf.c                     |   46 
 src/mesa/state_tracker/st_atom_image.c                        |  236 
 src/mesa/state_tracker/st_atom_sampler.c                      |    8 
 src/mesa/state_tracker/st_atom_shader.c                       |   53 
 src/mesa/state_tracker/st_atom_storagebuf.c                   |   25 
 src/mesa/state_tracker/st_atom_texture.c                      |   62 
 src/mesa/state_tracker/st_cb_bitmap.c                         |  515 -
 src/mesa/state_tracker/st_cb_bitmap.h                         |    3 
 src/mesa/state_tracker/st_cb_bufferobjects.c                  |    3 
 src/mesa/state_tracker/st_cb_clear.c                          |  162 
 src/mesa/state_tracker/st_cb_compute.c                        |   85 
 src/mesa/state_tracker/st_cb_compute.h                        |   38 
 src/mesa/state_tracker/st_cb_drawpixels.c                     |  329 
 src/mesa/state_tracker/st_cb_drawtex.c                        |   62 
 src/mesa/state_tracker/st_cb_msaa.c                           |    2 
 src/mesa/state_tracker/st_cb_program.c                        |   61 
 src/mesa/state_tracker/st_cb_queryobj.c                       |  109 
 src/mesa/state_tracker/st_cb_rasterpos.c                      |    2 
 src/mesa/state_tracker/st_cb_readpixels.c                     |    2 
 src/mesa/state_tracker/st_cb_texture.c                        | 1183 +++
 src/mesa/state_tracker/st_cb_texture.h                        |    5 
 src/mesa/state_tracker/st_cb_texturebarrier.c                 |    3 
 src/mesa/state_tracker/st_context.c                           |   84 
 src/mesa/state_tracker/st_context.h                           |   56 
 src/mesa/state_tracker/st_draw.c                              |   96 
 src/mesa/state_tracker/st_draw.h                              |    7 
 src/mesa/state_tracker/st_draw_feedback.c                     |    2 
 src/mesa/state_tracker/st_extensions.c                        |   73 
 src/mesa/state_tracker/st_format.c                            |   42 
 src/mesa/state_tracker/st_format.h                            |    8 
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp                    |  502 +
 src/mesa/state_tracker/st_manager.c                           |    7 
 src/mesa/state_tracker/st_program.c                           |  423 -
 src/mesa/state_tracker/st_program.h                           |  127 
 src/mesa/vbo/vbo.h                                            |    3 
 src/mesa/vbo/vbo_exec_array.c                                 |  148 
 src/mesa/vbo/vbo_minmax_index.c                               |  378 +
 src/mesa/x86-64/xform4.S                                      |   40 
 src/util/Makefile.am                                          |    2 
 src/util/SConscript                                           |    2 
 src/util/hash_table.c                                         |   29 
 src/util/hash_table.h                                         |   11 
 src/util/set.c                                                |    3 
 src/util/tests/hash_table/Makefile.am                         |    1 
 src/util/tests/hash_table/clear.c                             |   91 
 src/util/u_atomic.h                                           |   59 
 569 files changed, 22740 insertions(+), 12283 deletions(-)

New commits:
commit 35b7adb937eeefd4ac8ca3ebb2c7347cc7bcbcf9
Author: Emil Velikov <emil.velikov@collabora.com>
Date:   Mon Feb 22 10:14:23 2016 +0000

    Update version to 11.2.0-rc1
    
    Signed-off-by: Emil Velikov <emil.velikov@collabora.com>

diff --git a/VERSION b/VERSION
index 96cb839..94ba9ae 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-11.2.0-devel
+11.2.0-rc1

commit 4cd5e5b48e24a8b8ff7255022208d3e5fe6557d8
Author: Emil Velikov <emil.velikov@collabora.com>
Date:   Mon Feb 22 10:22:21 2016 +0000

    nouveau: update the Makefile.sources list
    
    Reflect the nv50->g80 change and the new gm107_texture header.
    
    Signed-off-by: Emil Velikov <emil.velikov@collabora.com>

diff --git a/src/gallium/drivers/nouveau/Makefile.sources b/src/gallium/drivers/nouveau/Makefile.sources
index 31a9365..43ffce6 100644
--- a/src/gallium/drivers/nouveau/Makefile.sources
+++ b/src/gallium/drivers/nouveau/Makefile.sources
@@ -60,6 +60,8 @@ NV30_C_SOURCES := \
 	nv30/nvfx_vertprog.c
 
 NV50_C_SOURCES := \
+	nv50/g80_defs.xml.h \
+	nv50/g80_texture.xml.h \
 	nv50/nv50_2d.xml.h \
 	nv50/nv50_3ddefs.xml.h \
 	nv50/nv50_3d.xml.h \
@@ -68,7 +70,6 @@ NV50_C_SOURCES := \
 	nv50/nv50_compute.xml.h \
 	nv50/nv50_context.c \
 	nv50/nv50_context.h \
-	nv50/nv50_defs.xml.h \
 	nv50/nv50_formats.c \
 	nv50/nv50_miptree.c \
 	nv50/nv50_program.c \
@@ -93,7 +94,6 @@ NV50_C_SOURCES := \
 	nv50/nv50_state_validate.c \
 	nv50/nv50_surface.c \
 	nv50/nv50_tex.c \
-	nv50/nv50_texture.xml.h \
 	nv50/nv50_transfer.c \
 	nv50/nv50_transfer.h \
 	nv50/nv50_vbo.c \
@@ -147,6 +147,7 @@ NVC0_CODEGEN_SOURCES := \
 	codegen/nv50_ir_target_nvc0.h
 
 NVC0_C_SOURCES := \
+	nvc0/gm107_texture.xml.h \
 	nvc0/nvc0_3d.xml.h \
 	nvc0/nvc0_compute.c \
 	nvc0/nvc0_compute.h \

commit ff360a52e6700d1085876169ed3b328910b394de
Author: Marek Olšák <marek.olsak@amd.com>
Date:   Thu Feb 11 15:49:34 2016 +0100

    radeonsi: implement binary shaders & shader cache in memory (v2)
    
    v2: handle _mesa_hash_table_insert failure
        other cosmetic changes
    
    Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>

diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index 30f3ec0..37fd4a2 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -564,7 +564,7 @@ static void si_destroy_screen(struct pipe_screen* pscreen)
 		}
 	}
 	pipe_mutex_destroy(sscreen->shader_parts_mutex);
-
+	si_destroy_shader_cache(sscreen);
 	r600_destroy_common_screen(&sscreen->b);
 }
 
@@ -612,7 +612,8 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
 	sscreen->b.b.resource_create = r600_resource_create_common;
 
 	if (!r600_common_screen_init(&sscreen->b, ws) ||
-	    !si_init_gs_info(sscreen)) {
+	    !si_init_gs_info(sscreen) ||
+	    !si_init_shader_cache(sscreen)) {
 		FREE(sscreen);
 		return NULL;
 	}
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index 1ac7bc4..ef860a5 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -80,6 +80,7 @@
 #define SI_MAX_BORDER_COLORS	4096
 
 struct si_compute;
+struct hash_table;
 
 struct si_screen {
 	struct r600_common_screen	b;
@@ -94,6 +95,21 @@ struct si_screen {
 	struct si_shader_part		*tcs_epilogs;
 	struct si_shader_part		*ps_prologs;
 	struct si_shader_part		*ps_epilogs;
+
+	/* Shader cache in memory.
+	 *
+	 * Design & limitations:
+	 * - The shader cache is per screen (= per process), never saved to
+	 *   disk, and skips redundant shader compilations from TGSI to bytecode.
+	 * - It can only be used with one-variant-per-shader support, in which
+	 *   case only the main (typically middle) part of shaders is cached.
+	 * - Only VS, TCS, TES, PS are cached, out of which only the hw VS
+	 *   variants of VS and TES are cached, so LS and ES aren't.
+	 * - GS and CS aren't cached, but it's certainly possible to cache
+	 *   those as well.
+	 */
+	pipe_mutex			shader_cache_mutex;
+	struct hash_table		*shader_cache;
 };
 
 struct si_blend_color {
diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h
index b299b7b..ff5c24d 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -364,8 +364,10 @@ struct si_shader {
 	struct r600_resource		*bo;
 	struct r600_resource		*scratch_bo;
 	union si_shader_key		key;
-	struct radeon_shader_binary	binary;
 	bool				is_binary_shared;
+
+	/* The following data is all that's needed for binary shaders. */
+	struct radeon_shader_binary	binary;
 	struct si_shader_config		config;
 	struct si_shader_info		info;
 };
diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h
index f64c4d4..40792cb 100644
--- a/src/gallium/drivers/radeonsi/si_state.h
+++ b/src/gallium/drivers/radeonsi/si_state.h
@@ -280,6 +280,8 @@ si_create_sampler_view_custom(struct pipe_context *ctx,
 /* si_state_shader.c */
 bool si_update_shaders(struct si_context *sctx);
 void si_init_shader_functions(struct si_context *sctx);
+bool si_init_shader_cache(struct si_screen *sscreen);
+void si_destroy_shader_cache(struct si_screen *sscreen);
 
 /* si_state_draw.c */
 void si_emit_cache_flush(struct si_context *sctx, struct r600_atom *atom);
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index c62cbb7..a6753a7 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -32,10 +32,221 @@
 
 #include "tgsi/tgsi_parse.h"
 #include "tgsi/tgsi_ureg.h"
+#include "util/hash_table.h"
+#include "util/u_hash.h"
 #include "util/u_memory.h"
 #include "util/u_prim.h"
 #include "util/u_simple_shaders.h"
 
+/* SHADER_CACHE */
+
+/**
+ * Return the TGSI binary in a buffer. The first 4 bytes contain its size as
+ * integer.
+ */
+static void *si_get_tgsi_binary(struct si_shader_selector *sel)
+{
+	unsigned tgsi_size = tgsi_num_tokens(sel->tokens) *
+			     sizeof(struct tgsi_token);
+	unsigned size = 4 + tgsi_size + sizeof(sel->so);
+	char *result = (char*)MALLOC(size);
+
+	if (!result)
+		return NULL;
+
+	*((uint32_t*)result) = size;
+	memcpy(result + 4, sel->tokens, tgsi_size);
+	memcpy(result + 4 + tgsi_size, &sel->so, sizeof(sel->so));
+	return result;
+}
+
+/** Copy "data" to "ptr" and return the next dword following copied data. */
+static uint32_t *write_data(uint32_t *ptr, const void *data, unsigned size)
+{
+	memcpy(ptr, data, size);
+	ptr += DIV_ROUND_UP(size, 4);
+	return ptr;
+}
+
+/** Read data from "ptr". Return the next dword following the data. */
+static uint32_t *read_data(uint32_t *ptr, void *data, unsigned size)
+{
+	memcpy(data, ptr, size);
+	ptr += DIV_ROUND_UP(size, 4);
+	return ptr;
+}
+
+/**
+ * Write the size as uint followed by the data. Return the next dword
+ * following the copied data.
+ */
+static uint32_t *write_chunk(uint32_t *ptr, const void *data, unsigned size)
+{
+	*ptr++ = size;
+	return write_data(ptr, data, size);
+}
+
+/**
+ * Read the size as uint followed by the data. Return both via parameters.
+ * Return the next dword following the data.
+ */
+static uint32_t *read_chunk(uint32_t *ptr, void **data, unsigned *size)
+{
+	*size = *ptr++;
+	assert(*data == NULL);
+	*data = malloc(*size);
+	return read_data(ptr, *data, *size);
+}
+
+/**
+ * Return the shader binary in a buffer. The first 4 bytes contain its size
+ * as integer.
+ */
+static void *si_get_shader_binary(struct si_shader *shader)
+{
+	/* There is always a size of data followed by the data itself. */
+	unsigned relocs_size = shader->binary.reloc_count *
+			       sizeof(shader->binary.relocs[0]);
+	unsigned disasm_size = strlen(shader->binary.disasm_string) + 1;
+	unsigned size =
+		4 + /* total size */
+		4 + /* CRC32 of the data below */
+		align(sizeof(shader->config), 4) +
+		align(sizeof(shader->info), 4) +
+		4 + align(shader->binary.code_size, 4) +
+		4 + align(shader->binary.rodata_size, 4) +
+		4 + align(relocs_size, 4) +
+		4 + align(disasm_size, 4);
+	void *buffer = CALLOC(1, size);
+	uint32_t *ptr = (uint32_t*)buffer;
+
+	if (!buffer)
+		return NULL;
+
+	*ptr++ = size;
+	ptr++; /* CRC32 is calculated at the end. */
+
+	ptr = write_data(ptr, &shader->config, sizeof(shader->config));
+	ptr = write_data(ptr, &shader->info, sizeof(shader->info));
+	ptr = write_chunk(ptr, shader->binary.code, shader->binary.code_size);
+	ptr = write_chunk(ptr, shader->binary.rodata, shader->binary.rodata_size);
+	ptr = write_chunk(ptr, shader->binary.relocs, relocs_size);
+	ptr = write_chunk(ptr, shader->binary.disasm_string, disasm_size);
+	assert((char *)ptr - (char *)buffer == size);
+
+	/* Compute CRC32. */
+	ptr = (uint32_t*)buffer;
+	ptr++;
+	*ptr = util_hash_crc32(ptr + 1, size - 8);
+
+	return buffer;
+}
+
+static bool si_load_shader_binary(struct si_shader *shader, void *binary)
+{
+	uint32_t *ptr = (uint32_t*)binary;
+	uint32_t size = *ptr++;
+	uint32_t crc32 = *ptr++;
+	unsigned chunk_size;
+
+	if (util_hash_crc32(ptr, size - 8) != crc32) {
+		fprintf(stderr, "radeonsi: binary shader has invalid CRC32\n");
+		return false;
+	}
+
+	ptr = read_data(ptr, &shader->config, sizeof(shader->config));
+	ptr = read_data(ptr, &shader->info, sizeof(shader->info));
+	ptr = read_chunk(ptr, (void**)&shader->binary.code,
+			 &shader->binary.code_size);
+	ptr = read_chunk(ptr, (void**)&shader->binary.rodata,
+			 &shader->binary.rodata_size);
+	ptr = read_chunk(ptr, (void**)&shader->binary.relocs, &chunk_size);
+	shader->binary.reloc_count = chunk_size / sizeof(shader->binary.relocs[0]);
+	ptr = read_chunk(ptr, (void**)&shader->binary.disasm_string, &chunk_size);
+
+	return true;
+}
+
+/**
+ * Insert a shader into the cache. It's assumed the shader is not in the cache.
+ * Use si_shader_cache_load_shader before calling this.
+ *
+ * Returns false on failure, in which case the tgsi_binary should be freed.
+ */
+static bool si_shader_cache_insert_shader(struct si_screen *sscreen,
+					  void *tgsi_binary,
+					  struct si_shader *shader)
+{
+	void *hw_binary = si_get_shader_binary(shader);
+
+	if (!hw_binary)
+		return false;
+
+	if (_mesa_hash_table_insert(sscreen->shader_cache, tgsi_binary,
+				    hw_binary) == NULL) {
+		FREE(hw_binary);
+		return false;
+	}
+
+	return true;
+}
+
+static bool si_shader_cache_load_shader(struct si_screen *sscreen,
+					void *tgsi_binary,
+				        struct si_shader *shader)
+{
+	struct hash_entry *entry =
+		_mesa_hash_table_search(sscreen->shader_cache, tgsi_binary);
+	if (!entry)
+		return false;
+
+	return si_load_shader_binary(shader, entry->data);
+}
+
+static uint32_t si_shader_cache_key_hash(const void *key)
+{
+	/* The first dword is the key size. */
+	return util_hash_crc32(key, *(uint32_t*)key);
+}
+
+static bool si_shader_cache_key_equals(const void *a, const void *b)
+{
+	uint32_t *keya = (uint32_t*)a;
+	uint32_t *keyb = (uint32_t*)b;
+
+	/* The first dword is the key size. */
+	if (*keya != *keyb)
+		return false;
+
+	return memcmp(keya, keyb, *keya) == 0;
+}
+
+static void si_destroy_shader_cache_entry(struct hash_entry *entry)
+{
+	FREE((void*)entry->key);
+	FREE(entry->data);
+}
+
+bool si_init_shader_cache(struct si_screen *sscreen)
+{
+	pipe_mutex_init(sscreen->shader_cache_mutex);
+	sscreen->shader_cache =
+		_mesa_hash_table_create(NULL,
+					si_shader_cache_key_hash,
+					si_shader_cache_key_equals);
+	return sscreen->shader_cache != NULL;
+}
+
+void si_destroy_shader_cache(struct si_screen *sscreen)
+{
+	if (sscreen->shader_cache)
+		_mesa_hash_table_destroy(sscreen->shader_cache,
+					 si_destroy_shader_cache_entry);
+	pipe_mutex_destroy(sscreen->shader_cache_mutex);
+}
+
+/* SHADER STATES */
+
 static void si_set_tesseval_regs(struct si_shader *shader,
 				 struct si_pm4_state *pm4)
 {
@@ -936,17 +1147,37 @@ static void *si_create_shader_selector(struct pipe_context *ctx,
 	if (sel->type != PIPE_SHADER_GEOMETRY &&
 	    !sscreen->use_monolithic_shaders) {
 		struct si_shader *shader = CALLOC_STRUCT(si_shader);
+		void *tgsi_binary;
 
 		if (!shader)
 			goto error;
 
 		shader->selector = sel;
 
-		if (si_compile_tgsi_shader(sscreen, sctx->tm, shader, false,
-					   &sctx->b.debug) != 0) {
-			FREE(shader);
-			goto error;
+		tgsi_binary = si_get_tgsi_binary(sel);
+
+		/* Try to load the shader from the shader cache. */
+		pipe_mutex_lock(sscreen->shader_cache_mutex);
+
+		if (tgsi_binary &&
+		    si_shader_cache_load_shader(sscreen, tgsi_binary, shader)) {
+			FREE(tgsi_binary);
+		} else {
+			/* Compile the shader if it hasn't been loaded from the cache. */
+			if (si_compile_tgsi_shader(sscreen, sctx->tm, shader, false,
+						   &sctx->b.debug) != 0) {
+				FREE(shader);
+				FREE(tgsi_binary);
+				pipe_mutex_unlock(sscreen->shader_cache_mutex);
+				goto error;
+			}
+
+			if (tgsi_binary &&
+			    !si_shader_cache_insert_shader(sscreen, tgsi_binary, shader))
+				FREE(tgsi_binary);
 		}
+		pipe_mutex_unlock(sscreen->shader_cache_mutex);
+
 		sel->main_shader_part = shader;
 	}


Reply to: