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: