Makefile | 13 bin/mklib | 22 configs/autoconf.in | 4 configs/darwin | 49 configs/darwin-static | 28 configs/darwin-static-x86ppc | 30 configs/default | 7 configs/linux-dri-xcb | 2 configure.ac | 49 debian/changelog | 9 debian/rules | 11 docs/MESA_packed_depth_stencil.spec | 231 docs/MESA_program_debug.spec | 357 docs/MESA_sprite_point.spec | 191 docs/MESA_trace.spec | 360 docs/OLD/MESA_packed_depth_stencil.spec | 231 docs/OLD/MESA_program_debug.spec | 357 docs/OLD/MESA_sprite_point.spec | 191 docs/OLD/MESA_trace.spec | 360 docs/download.html | 2 docs/news.html | 7 docs/relnotes-7.0.4.html | 80 docs/relnotes-7.1.html | 2 docs/relnotes.html | 1 docs/shading.html | 76 include/GL/glext.h | 390 include/GL/glxext.h | 42 include/GL/internal/dri_interface.h | 7 progs/demos/Makefile | 13 progs/demos/fbo_firecube.c | 1041 ++ progs/demos/gearbox.c | 16 progs/fp/.gitignore | 42 progs/glsl/CH06-brick.frag | 36 progs/glsl/CH06-brick.frag.txt | 36 progs/glsl/CH06-brick.vert | 41 progs/glsl/CH06-brick.vert.txt | 41 progs/glsl/CH11-bumpmap.frag | 41 progs/glsl/CH11-bumpmap.frag.txt | 41 progs/glsl/CH11-bumpmap.vert | 38 progs/glsl/CH11-bumpmap.vert.txt | 38 progs/glsl/CH11-toyball.frag | 75 progs/glsl/CH11-toyball.frag.txt | 75 progs/glsl/CH11-toyball.vert | 24 progs/glsl/CH11-toyball.vert.txt | 24 progs/glsl/CH18-mandel.frag | 55 progs/glsl/CH18-mandel.frag.txt | 55 progs/glsl/CH18-mandel.vert | 35 progs/glsl/CH18-mandel.vert.txt | 35 progs/glsl/Makefile | 16 progs/glsl/brick.c | 4 progs/glsl/bump.c | 4 progs/glsl/convolution.frag | 21 progs/glsl/convolution.vert | 5 progs/glsl/convolutions.c | 469 progs/glsl/cubemap.frag | 18 progs/glsl/cubemap.frag.txt | 18 progs/glsl/mandelbrot.c | 4 progs/glsl/multitex.c | 4 progs/glsl/multitex.frag | 15 progs/glsl/multitex.frag.txt | 15 progs/glsl/multitex.vert | 10 progs/glsl/multitex.vert.txt | 10 progs/glsl/pointcoord.c | 205 progs/glsl/reflect.vert | 19 progs/glsl/reflect.vert.txt | 19 progs/glsl/shadowtex.frag | 21 progs/glsl/shadowtex.frag.txt | 21 progs/glsl/simple.vert | 9 progs/glsl/simple.vert.txt | 9 progs/glsl/texdemo1.c | 8 progs/glsl/toyball.c | 4 progs/glsl/trirast.c | 2 progs/glsl/twoside.c | 52 progs/util/shaderutil.c | 15 progs/xdemos/Makefile | 8 progs/xdemos/glxinfo.c | 7 src/glu/Makefile | 2 src/glu/sgi/Makefile | 1 src/glu/sgi/glu.exports | 59 src/glu/sgi/glu.exports.darwin | 59 src/glut/glx/Makefile | 3 src/glw/Makefile | 5 src/glx/x11/Makefile | 3 src/glx/x11/dri_glx.c | 1 src/glx/x11/glxclient.h | 7 src/glx/x11/glxcmds.c | 18 src/glx/x11/glxcurrent.c | 8 src/glx/x11/glxext.c | 14 src/glx/x11/glxextensions.h | 2 src/glx/x11/glxhash.c | 6 src/glx/x11/indirect.c | 80 src/glx/x11/indirect_vertex_array.c | 39 src/glx/x11/singlepix.c | 6 src/mesa/Makefile | 4 src/mesa/drivers/dri/common/depthtmp.h | 9 src/mesa/drivers/dri/common/dri_util.c | 4 src/mesa/drivers/dri/common/utils.c | 4 src/mesa/drivers/dri/gamma/gamma_span.c | 6 src/mesa/drivers/dri/i810/i810span.c | 2 src/mesa/drivers/dri/i915/i830_context.c | 8 src/mesa/drivers/dri/i915/i915_context.c | 1 src/mesa/drivers/dri/i965/brw_clip.h | 5 src/mesa/drivers/dri/i965/brw_clip_tri.c | 10 src/mesa/drivers/dri/i965/brw_clip_unfilled.c | 24 src/mesa/drivers/dri/i965/brw_clip_util.c | 5 src/mesa/drivers/dri/i965/brw_draw_upload.c | 51 src/mesa/drivers/dri/i965/brw_fallback.c | 5 src/mesa/drivers/dri/i965/brw_vs_emit.c | 30 src/mesa/drivers/dri/i965/brw_wm.c | 9 src/mesa/drivers/dri/i965/brw_wm_emit.c | 15 src/mesa/drivers/dri/i965/brw_wm_fp.c | 16 src/mesa/drivers/dri/i965/brw_wm_glsl.c | 14 src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 64 src/mesa/drivers/dri/intel/intel_buffers.c | 50 src/mesa/drivers/dri/intel/intel_context.c | 8 src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 11 src/mesa/drivers/dri/intel/intel_regions.c | 15 src/mesa/drivers/dri/intel/intel_screen.c | 2 src/mesa/drivers/dri/intel/intel_span.c | 5 src/mesa/drivers/dri/intel/intel_tex.c | 9 src/mesa/drivers/dri/intel/intel_tex.h | 8 src/mesa/drivers/dri/intel/intel_tex_image.c | 5 src/mesa/drivers/dri/intel/intel_tex_validate.c | 85 src/mesa/drivers/dri/mach64/mach64_span.c | 2 src/mesa/drivers/dri/mga/mgaspan.c | 6 src/mesa/drivers/dri/nouveau/Makefile | 54 src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c | 627 - src/mesa/drivers/dri/nouveau/nouveau_bufferobj.h | 77 src/mesa/drivers/dri/nouveau/nouveau_card.c | 17 src/mesa/drivers/dri/nouveau/nouveau_card.h | 49 src/mesa/drivers/dri/nouveau/nouveau_card_list.h | 226 src/mesa/drivers/dri/nouveau/nouveau_context.c | 422 src/mesa/drivers/dri/nouveau/nouveau_context.h | 241 src/mesa/drivers/dri/nouveau/nouveau_ctrlreg.h | 44 src/mesa/drivers/dri/nouveau/nouveau_dri.h | 28 src/mesa/drivers/dri/nouveau/nouveau_driver.c | 218 src/mesa/drivers/dri/nouveau/nouveau_driver.h | 42 src/mesa/drivers/dri/nouveau/nouveau_fbo.c | 289 src/mesa/drivers/dri/nouveau/nouveau_fbo.h | 30 src/mesa/drivers/dri/nouveau/nouveau_fifo.c | 153 src/mesa/drivers/dri/nouveau/nouveau_fifo.h | 222 src/mesa/drivers/dri/nouveau/nouveau_lock.c | 81 src/mesa/drivers/dri/nouveau/nouveau_lock.h | 69 src/mesa/drivers/dri/nouveau/nouveau_mem.c | 144 src/mesa/drivers/dri/nouveau/nouveau_mem.h | 23 src/mesa/drivers/dri/nouveau/nouveau_msg.h | 67 src/mesa/drivers/dri/nouveau/nouveau_object.c | 98 src/mesa/drivers/dri/nouveau/nouveau_object.h | 39 src/mesa/drivers/dri/nouveau/nouveau_query.c | 200 src/mesa/drivers/dri/nouveau/nouveau_query.h | 38 src/mesa/drivers/dri/nouveau/nouveau_reg.h | 4998 ---------- src/mesa/drivers/dri/nouveau/nouveau_screen.c | 325 src/mesa/drivers/dri/nouveau/nouveau_screen.h | 61 src/mesa/drivers/dri/nouveau/nouveau_shader.c | 833 - src/mesa/drivers/dri/nouveau/nouveau_shader.h | 454 src/mesa/drivers/dri/nouveau/nouveau_shader_0.c | 1050 -- src/mesa/drivers/dri/nouveau/nouveau_shader_1.c | 16 src/mesa/drivers/dri/nouveau/nouveau_shader_2.c | 264 src/mesa/drivers/dri/nouveau/nouveau_span.c | 123 src/mesa/drivers/dri/nouveau/nouveau_span.h | 39 src/mesa/drivers/dri/nouveau/nouveau_state.c | 368 src/mesa/drivers/dri/nouveau/nouveau_state.h | 50 src/mesa/drivers/dri/nouveau/nouveau_state_cache.c | 69 src/mesa/drivers/dri/nouveau/nouveau_state_cache.h | 29 src/mesa/drivers/dri/nouveau/nouveau_swtcl.c | 127 src/mesa/drivers/dri/nouveau/nouveau_swtcl.h | 55 src/mesa/drivers/dri/nouveau/nouveau_sync.c | 198 src/mesa/drivers/dri/nouveau/nouveau_sync.h | 69 src/mesa/drivers/dri/nouveau/nouveau_tex.c | 49 src/mesa/drivers/dri/nouveau/nouveau_tex.h | 38 src/mesa/drivers/dri/nouveau/nv04_state.c | 540 - src/mesa/drivers/dri/nouveau/nv04_swtcl.c | 619 - src/mesa/drivers/dri/nouveau/nv04_swtcl.h | 12 src/mesa/drivers/dri/nouveau/nv10_state.c | 1009 -- src/mesa/drivers/dri/nouveau/nv10_swtcl.c | 714 - src/mesa/drivers/dri/nouveau/nv10_swtcl.h | 40 src/mesa/drivers/dri/nouveau/nv20_shader.h | 121 src/mesa/drivers/dri/nouveau/nv20_state.c | 824 - src/mesa/drivers/dri/nouveau/nv20_vertprog.c | 447 src/mesa/drivers/dri/nouveau/nv30_fragprog.c | 742 - src/mesa/drivers/dri/nouveau/nv30_shader.h | 379 src/mesa/drivers/dri/nouveau/nv30_state.c | 1002 -- src/mesa/drivers/dri/nouveau/nv30_vertprog.c | 367 src/mesa/drivers/dri/nouveau/nv40_fragprog.c | 224 src/mesa/drivers/dri/nouveau/nv40_shader.h | 467 src/mesa/drivers/dri/nouveau/nv40_vertprog.c | 778 - src/mesa/drivers/dri/nouveau/nv50_state.c | 641 - src/mesa/drivers/dri/r128/r128_span.c | 3 src/mesa/drivers/dri/r200/r200_span.c | 2 src/mesa/drivers/dri/r200/r200_tex.c | 64 src/mesa/drivers/dri/r300/r300_cmdbuf.c | 2 src/mesa/drivers/dri/r300/r300_context.c | 1 src/mesa/drivers/dri/r300/r300_context.h | 1 src/mesa/drivers/dri/r300/r300_fragprog.c | 37 src/mesa/drivers/dri/r300/r300_reg.h | 8 src/mesa/drivers/dri/r300/r300_render.c | 15 src/mesa/drivers/dri/r300/r300_state.c | 60 src/mesa/drivers/dri/r300/r300_tex.c | 2 src/mesa/drivers/dri/r300/r300_texstate.c | 7 src/mesa/drivers/dri/r300/r500_fragprog.c | 148 src/mesa/drivers/dri/r300/r500_fragprog_emit.c | 4 src/mesa/drivers/dri/r300/radeon_nqssadce.c | 2 src/mesa/drivers/dri/r300/radeon_program_alu.c | 27 src/mesa/drivers/dri/r300/radeon_program_alu.h | 5 src/mesa/drivers/dri/r300/radeon_program_pair.c | 28 src/mesa/drivers/dri/r300/radeon_span.c | 4 src/mesa/drivers/dri/r300/radeon_state.c | 4 src/mesa/drivers/dri/radeon/radeon_context.h | 2 src/mesa/drivers/dri/radeon/radeon_screen.c | 12 src/mesa/drivers/dri/radeon/radeon_span.c | 4 src/mesa/drivers/dri/radeon/radeon_tex.h | 4 src/mesa/drivers/dri/radeon/radeon_texmem.c | 2 src/mesa/drivers/dri/radeon/radeon_texstate.c | 83 src/mesa/drivers/dri/s3v/s3v_span.c | 6 src/mesa/drivers/dri/savage/savagespan.c | 8 src/mesa/drivers/dri/sis/sis_span.c | 6 src/mesa/drivers/dri/unichrome/via_span.c | 5 src/mesa/drivers/glide/fxddspan.c | 4 src/mesa/drivers/osmesa/Makefile | 2 src/mesa/drivers/x11/Makefile | 1 src/mesa/drivers/x11/xm_tri.c | 192 src/mesa/main/config.h | 1 src/mesa/main/context.c | 3 src/mesa/main/enable.c | 4 src/mesa/main/execmem.c | 2 src/mesa/main/extensions.c | 4 src/mesa/main/fbobject.c | 14 src/mesa/main/get.c | 63 src/mesa/main/get_gen.py | 9 src/mesa/main/getstring.c | 150 src/mesa/main/glheader.h | 6 src/mesa/main/mtypes.h | 4 src/mesa/main/stencil.c | 96 src/mesa/main/texobj.c | 105 src/mesa/main/texstate.c | 1 src/mesa/main/texstore.c | 126 src/mesa/main/varray.c | 5 src/mesa/main/version.h | 2 src/mesa/shader/arbprogram.c | 202 src/mesa/shader/arbprogram.h | 10 src/mesa/shader/prog_execute.c | 2 src/mesa/shader/prog_parameter.c | 32 src/mesa/shader/prog_parameter.h | 2 src/mesa/shader/prog_print.c | 2 src/mesa/shader/prog_statevars.c | 38 src/mesa/shader/prog_statevars.h | 5 src/mesa/shader/program.c | 209 src/mesa/shader/program.h | 18 src/mesa/shader/programopt.c | 12 src/mesa/shader/shader_api.c | 257 src/mesa/shader/slang/library/slang_120_core.gc | 50 src/mesa/shader/slang/library/slang_120_core_gc.h | 1354 +- src/mesa/shader/slang/library/slang_builtin_120_common_gc.h | 188 src/mesa/shader/slang/library/slang_builtin_120_fragment_gc.h | 2 src/mesa/shader/slang/library/slang_common_builtin.gc | 210 src/mesa/shader/slang/library/slang_common_builtin_gc.h | 1580 +-- src/mesa/shader/slang/library/slang_core.gc | 334 src/mesa/shader/slang/library/slang_core_gc.h | 1589 +-- src/mesa/shader/slang/library/slang_fragment_builtin_gc.h | 190 src/mesa/shader/slang/library/slang_pp_version.syn | 11 src/mesa/shader/slang/library/slang_pp_version_syn.h | 10 src/mesa/shader/slang/library/slang_shader.syn | 94 src/mesa/shader/slang/library/slang_shader_syn.h | 47 src/mesa/shader/slang/library/slang_vertex_builtin_gc.h | 175 src/mesa/shader/slang/slang_builtin.c | 4 src/mesa/shader/slang/slang_codegen.c | 1154 +- src/mesa/shader/slang/slang_codegen.h | 2 src/mesa/shader/slang/slang_compile.c | 326 src/mesa/shader/slang/slang_compile.h | 4 src/mesa/shader/slang/slang_compile_function.c | 2 src/mesa/shader/slang/slang_compile_operation.c | 33 src/mesa/shader/slang/slang_compile_operation.h | 5 src/mesa/shader/slang/slang_compile_struct.c | 3 src/mesa/shader/slang/slang_compile_struct.h | 13 src/mesa/shader/slang/slang_compile_variable.c | 24 src/mesa/shader/slang/slang_compile_variable.h | 11 src/mesa/shader/slang/slang_emit.c | 561 - src/mesa/shader/slang/slang_emit.h | 8 src/mesa/shader/slang/slang_ir.c | 94 src/mesa/shader/slang/slang_ir.h | 32 src/mesa/shader/slang/slang_library_noise.c | 2 src/mesa/shader/slang/slang_link.c | 149 src/mesa/shader/slang/slang_log.c | 2 src/mesa/shader/slang/slang_mem.c | 4 src/mesa/shader/slang/slang_mem.h | 2 src/mesa/shader/slang/slang_preprocess.c | 33 src/mesa/shader/slang/slang_print.c | 27 src/mesa/shader/slang/slang_simplify.c | 301 src/mesa/shader/slang/slang_simplify.h | 28 src/mesa/shader/slang/slang_storage.c | 2 src/mesa/shader/slang/slang_typeinfo.c | 130 src/mesa/shader/slang/slang_typeinfo.h | 10 src/mesa/shader/slang/slang_utility.c | 2 src/mesa/shader/slang/slang_vartable.c | 69 src/mesa/swrast/s_blend.c | 7 src/mesa/swrast/s_context.c | 10 src/mesa/swrast/s_fragprog.c | 1 src/mesa/x86/assyntax.h | 3 src/mesa/x86/common_x86.c | 26 299 files changed, 11267 insertions(+), 28157 deletions(-)
New commits: commit ac8771ee997938a246ca68111e695f7d9a704c96 Author: Julien Cristau <[EMAIL PROTECTED]> Date: Sun Aug 24 17:38:03 2008 +0200 Update changelog diff --git a/debian/changelog b/debian/changelog index 3658514..651b033 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,9 @@ -mesa (7.1~rc3-2) UNRELEASED; urgency=low +mesa (7.1~rc4-1) UNRELEASED; urgency=low * Add parallel build support. + * New upstream release candidate (updated to git commit 7c81124d, which has + GEM reverted) + + libGLU now only exports its public interface (closes: #319388) -- Julien Cristau <[EMAIL PROTECTED]> Mon, 04 Aug 2008 09:36:31 +0200 commit 7c81124d7c4a4d1da9f48cbf7e82ab1a3a970a7a Author: Dave Airlie <[EMAIL PROTECTED]> Date: Sun Aug 24 17:52:40 2008 +1000 Revert "Merge branch 'drm-gem'" This reverts commit 53675e5c05c0598b7ea206d5c27dbcae786a2c03. Conflicts: src/mesa/drivers/dri/i965/brw_wm_surface_state.c diff --git a/src/mesa/drivers/dri/Makefile.template b/src/mesa/drivers/dri/Makefile.template index 072d16c..95eeecc 100644 --- a/src/mesa/drivers/dri/Makefile.template +++ b/src/mesa/drivers/dri/Makefile.template @@ -10,6 +10,11 @@ COMMON_SOURCES = \ ../common/xmlconfig.c \ ../common/drirenderbuffer.c +COMMON_BM_SOURCES = \ + ../common/dri_bufmgr.c \ + ../common/dri_bufmgr_fake.c + + ifeq ($(WINDOW_SYSTEM),dri) WINOBJ= WINLIB= diff --git a/src/mesa/drivers/dri/common/dri_bufmgr.c b/src/mesa/drivers/dri/common/dri_bufmgr.c new file mode 100644 index 0000000..8b5cb76 --- /dev/null +++ b/src/mesa/drivers/dri/common/dri_bufmgr.c @@ -0,0 +1,160 @@ +/* + * Copyright © 2007 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Eric Anholt <[EMAIL PROTECTED]> + * + */ + +#include <string.h> +#include <stdlib.h> +#include <assert.h> +#include "mtypes.h" +#include "dri_bufmgr.h" + +/** @file dri_bufmgr.c + * + * Convenience functions for buffer management methods. + */ + +dri_bo * +dri_bo_alloc(dri_bufmgr *bufmgr, const char *name, unsigned long size, + unsigned int alignment, uint64_t location_mask) +{ + return bufmgr->bo_alloc(bufmgr, name, size, alignment, location_mask); +} + +dri_bo * +dri_bo_alloc_static(dri_bufmgr *bufmgr, const char *name, unsigned long offset, + unsigned long size, void *virtual, + uint64_t location_mask) +{ + return bufmgr->bo_alloc_static(bufmgr, name, offset, size, virtual, + location_mask); +} + +void +dri_bo_reference(dri_bo *bo) +{ + bo->bufmgr->bo_reference(bo); +} + +void +dri_bo_unreference(dri_bo *bo) +{ + if (bo == NULL) + return; + + bo->bufmgr->bo_unreference(bo); +} + +int +dri_bo_map(dri_bo *buf, GLboolean write_enable) +{ + return buf->bufmgr->bo_map(buf, write_enable); +} + +int +dri_bo_unmap(dri_bo *buf) +{ + return buf->bufmgr->bo_unmap(buf); +} + +void +dri_fence_wait(dri_fence *fence) +{ + fence->bufmgr->fence_wait(fence); +} + +void +dri_fence_reference(dri_fence *fence) +{ + fence->bufmgr->fence_reference(fence); +} + +void +dri_fence_unreference(dri_fence *fence) +{ + if (fence == NULL) + return; + + fence->bufmgr->fence_unreference(fence); +} + +void +dri_bo_subdata(dri_bo *bo, unsigned long offset, + unsigned long size, const void *data) +{ + if (size == 0 || data == NULL) + return; + + dri_bo_map(bo, GL_TRUE); + memcpy((unsigned char *)bo->virtual + offset, data, size); + dri_bo_unmap(bo); +} + +void +dri_bo_get_subdata(dri_bo *bo, unsigned long offset, + unsigned long size, void *data) +{ + if (size == 0 || data == NULL) + return; + + dri_bo_map(bo, GL_FALSE); + memcpy(data, (unsigned char *)bo->virtual + offset, size); + dri_bo_unmap(bo); +} + +void +dri_bufmgr_destroy(dri_bufmgr *bufmgr) +{ + bufmgr->destroy(bufmgr); +} + + +int dri_emit_reloc(dri_bo *reloc_buf, uint64_t flags, GLuint delta, + GLuint offset, dri_bo *target_buf) +{ + return reloc_buf->bufmgr->emit_reloc(reloc_buf, flags, delta, offset, target_buf); +} + +void *dri_process_relocs(dri_bo *batch_buf, GLuint *count) +{ + return batch_buf->bufmgr->process_relocs(batch_buf, count); +} + +void dri_post_submit(dri_bo *batch_buf, dri_fence **last_fence) +{ + batch_buf->bufmgr->post_submit(batch_buf, last_fence); +} + +void +dri_bufmgr_set_debug(dri_bufmgr *bufmgr, GLboolean enable_debug) +{ + bufmgr->debug = enable_debug; +} + +int +dri_bufmgr_check_aperture_space(dri_bo *bo) +{ + return bo->bufmgr->check_aperture_space(bo); +} diff --git a/src/mesa/drivers/dri/common/dri_bufmgr.h b/src/mesa/drivers/dri/common/dri_bufmgr.h new file mode 100644 index 0000000..0a726dc --- /dev/null +++ b/src/mesa/drivers/dri/common/dri_bufmgr.h @@ -0,0 +1,260 @@ +/************************************************************************** + * + * Copyright � 2007 Intel Corporation + * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * + **************************************************************************/ +/* + * Authors: Thomas Hellstr�m <thomas-at-tungstengraphics-dot-com> + * Keith Whitwell <keithw-at-tungstengraphics-dot-com> + * Eric Anholt <[EMAIL PROTECTED]> + */ + +#ifndef _DRI_BUFMGR_H_ +#define _DRI_BUFMGR_H_ +#include <xf86drm.h> + +typedef struct _dri_bufmgr dri_bufmgr; +typedef struct _dri_bo dri_bo; +typedef struct _dri_fence dri_fence; + +struct _dri_bo { + /** Size in bytes of the buffer object. */ + unsigned long size; + /** + * Card virtual address (offset from the beginning of the aperture) for the + * object. Only valid while validated. + */ + unsigned long offset; + /** + * Virtual address for accessing the buffer data. Only valid while mapped. + */ + void *virtual; + /** Buffer manager context associated with this buffer object */ + dri_bufmgr *bufmgr; +}; + +struct _dri_fence { + /** + * This is an ORed mask of DRM_BO_FLAG_READ, DRM_BO_FLAG_WRITE, and + * DRM_FLAG_EXE indicating the operations associated with this fence. + * + * It is constant for the life of the fence object. + */ + unsigned int type; + /** Buffer manager context associated with this fence */ + dri_bufmgr *bufmgr; +}; + +/** + * Context for a buffer manager instance. + * + * Contains public methods followed by private storage for the buffer manager. + */ +struct _dri_bufmgr { + /** + * Allocate a buffer object. + * + * Buffer objects are not necessarily initially mapped into CPU virtual + * address space or graphics device aperture. They must be mapped using + * bo_map() to be used by the CPU, and validated for use using bo_validate() + * to be used from the graphics device. + */ + dri_bo *(*bo_alloc)(dri_bufmgr *bufmgr_ctx, const char *name, + unsigned long size, unsigned int alignment, + uint64_t location_mask); + + /** + * Allocates a buffer object for a static allocation. + * + * Static allocations are ones such as the front buffer that are offered by + * the X Server, which are never evicted and never moved. + */ + dri_bo *(*bo_alloc_static)(dri_bufmgr *bufmgr_ctx, const char *name, + unsigned long offset, unsigned long size, + void *virtual, uint64_t location_mask); + + /** Takes a reference on a buffer object */ + void (*bo_reference)(dri_bo *bo); + + /** + * Releases a reference on a buffer object, freeing the data if + * rerefences remain. + */ + void (*bo_unreference)(dri_bo *bo); + + /** + * Maps the buffer into userspace. + * + * This function will block waiting for any existing fence on the buffer to + * clear, first. The resulting mapping is available at buf->virtual. +\ */ + int (*bo_map)(dri_bo *buf, GLboolean write_enable); + + /** Reduces the refcount on the userspace mapping of the buffer object. */ + int (*bo_unmap)(dri_bo *buf); + + /** Takes a reference on a fence object */ + void (*fence_reference)(dri_fence *fence); + + /** + * Releases a reference on a fence object, freeing the data if + * rerefences remain. + */ + void (*fence_unreference)(dri_fence *fence); + + /** + * Blocks until the given fence is signaled. + */ + void (*fence_wait)(dri_fence *fence); + + /** + * Tears down the buffer manager instance. + */ + void (*destroy)(dri_bufmgr *bufmgr); + + /** + * Add relocation entry in reloc_buf, which will be updated with the + * target buffer's real offset on on command submission. + * + * Relocations remain in place for the lifetime of the buffer object. + * + * \param reloc_buf Buffer to write the relocation into. + * \param flags BO flags to be used in validating the target buffer. + * Applicable flags include: + * - DRM_BO_FLAG_READ: The buffer will be read in the process of + * command execution. + * - DRM_BO_FLAG_WRITE: The buffer will be written in the process of + * command execution. + * - DRM_BO_FLAG_MEM_TT: The buffer should be validated in TT memory. + * - DRM_BO_FLAG_MEM_VRAM: The buffer should be validated in video + * memory. + * \param delta Constant value to be added to the relocation target's offset. + * \param offset Byte offset within batch_buf of the relocated pointer. + * \param target Buffer whose offset should be written into the relocation + * entry. + */ + int (*emit_reloc)(dri_bo *reloc_buf, uint64_t flags, GLuint delta, + GLuint offset, dri_bo *target); + + /** + * Processes the relocations, either in userland or by converting the list + * for use in batchbuffer submission. + * + * Kernel-based implementations will return a pointer to the arguments + * to be handed with batchbuffer submission to the kernel. The userland + * implementation performs the buffer validation and emits relocations + * into them the appopriate order. + * + * \param batch_buf buffer at the root of the tree of relocations + * \param count returns the number of buffers validated. + * \return relocation record for use in command submission. + * */ + void *(*process_relocs)(dri_bo *batch_buf, GLuint *count); + + void (*post_submit)(dri_bo *batch_buf, dri_fence **fence); + + int (*check_aperture_space)(dri_bo *bo); + GLboolean debug; /**< Enables verbose debugging printouts */ +}; + +dri_bo *dri_bo_alloc(dri_bufmgr *bufmgr, const char *name, unsigned long size, + unsigned int alignment, uint64_t location_mask); +dri_bo *dri_bo_alloc_static(dri_bufmgr *bufmgr, const char *name, + unsigned long offset, unsigned long size, + void *virtual, uint64_t location_mask); +void dri_bo_reference(dri_bo *bo); +void dri_bo_unreference(dri_bo *bo); +int dri_bo_map(dri_bo *buf, GLboolean write_enable); +int dri_bo_unmap(dri_bo *buf); +void dri_fence_wait(dri_fence *fence); +void dri_fence_reference(dri_fence *fence); +void dri_fence_unreference(dri_fence *fence); + +void dri_bo_subdata(dri_bo *bo, unsigned long offset, + unsigned long size, const void *data); +void dri_bo_get_subdata(dri_bo *bo, unsigned long offset, + unsigned long size, void *data); + +void dri_bufmgr_fake_contended_lock_take(dri_bufmgr *bufmgr); +dri_bufmgr *dri_bufmgr_fake_init(unsigned long low_offset, void *low_virtual, + unsigned long size, + unsigned int (*fence_emit)(void *private), + int (*fence_wait)(void *private, + unsigned int cookie), + void *driver_priv); +void dri_bufmgr_set_debug(dri_bufmgr *bufmgr, GLboolean enable_debug); +void dri_bo_fake_disable_backing_store(dri_bo *bo, + void (*invalidate_cb)(dri_bo *bo, + void *ptr), + void *ptr); +void dri_bufmgr_destroy(dri_bufmgr *bufmgr); + +int dri_emit_reloc(dri_bo *reloc_buf, uint64_t flags, GLuint delta, + GLuint offset, dri_bo *target_buf); +void *dri_process_relocs(dri_bo *batch_buf, uint32_t *count); +void dri_post_process_relocs(dri_bo *batch_buf); +void dri_post_submit(dri_bo *batch_buf, dri_fence **last_fence); +int dri_bufmgr_check_aperture_space(dri_bo *bo); + +#ifndef TTM_API +/* reuse some TTM API */ + +#define DRM_BO_MEM_LOCAL 0 +#define DRM_BO_MEM_TT 1 +#define DRM_BO_MEM_VRAM 2 +#define DRM_BO_MEM_PRIV0 3 +#define DRM_BO_MEM_PRIV1 4 +#define DRM_BO_MEM_PRIV2 5 +#define DRM_BO_MEM_PRIV3 6 +#define DRM_BO_MEM_PRIV4 7 + +#define DRM_BO_FLAG_READ (1ULL << 0) +#define DRM_BO_FLAG_WRITE (1ULL << 1) +#define DRM_BO_FLAG_EXE (1ULL << 2) +#define DRM_BO_MASK_ACCESS (DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE | DRM_BO_FLAG_EXE) +#define DRM_BO_FLAG_NO_EVICT (1ULL << 4) + +#define DRM_BO_FLAG_MAPPABLE (1ULL << 5) +#define DRM_BO_FLAG_SHAREABLE (1ULL << 6) + +#define DRM_BO_FLAG_CACHED (1ULL << 7) + +#define DRM_BO_FLAG_NO_MOVE (1ULL << 8) +#define DRM_BO_FLAG_CACHED_MAPPED (1ULL << 19) +#define DRM_BO_FLAG_FORCE_CACHING (1ULL << 13) +#define DRM_BO_FLAG_FORCE_MAPPABLE (1ULL << 14) +#define DRM_BO_FLAG_TILE (1ULL << 15) + +#define DRM_BO_FLAG_MEM_LOCAL (1ULL << 24) +#define DRM_BO_FLAG_MEM_TT (1ULL << 25) +#define DRM_BO_FLAG_MEM_VRAM (1ULL << 26) + +#define DRM_BO_MASK_MEM 0x00000000FF000000ULL + +#define DRM_FENCE_TYPE_EXE 0x00000001 +#endif + +#endif diff --git a/src/mesa/drivers/dri/common/dri_bufmgr_fake.c b/src/mesa/drivers/dri/common/dri_bufmgr_fake.c new file mode 100644 index 0000000..9bf3f34 --- /dev/null +++ b/src/mesa/drivers/dri/common/dri_bufmgr_fake.c @@ -0,0 +1,1245 @@ +/************************************************************************** + * + * Copyright 2006 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +/* Originally a fake version of the buffer manager so that we can + * prototype the changes in a driver fairly quickly, has been fleshed + * out to a fully functional interim solution. + * + * Basically wraps the old style memory management in the new + * programming interface, but is more expressive and avoids many of + * the bugs in the old texture manager. + */ +#include "mtypes.h" +#include "dri_bufmgr.h" +#include "drm.h" + +#include "simple_list.h" +#include "mm.h" +#include "imports.h" + +#define DBG(...) do { \ + if (bufmgr_fake->bufmgr.debug) \ + _mesa_printf(__VA_ARGS__); \ +} while (0) + +/* Internal flags: + */ +#define BM_NO_BACKING_STORE 0x00000001 +#define BM_NO_FENCE_SUBDATA 0x00000002 +#define BM_PINNED 0x00000004 + +/* Wrapper around mm.c's mem_block, which understands that you must + * wait for fences to expire before memory can be freed. This is + * specific to our use of memcpy for uploads - an upload that was + * processed through the command queue wouldn't need to care about + * fences. + */ +#define MAX_RELOCS 4096 + +struct fake_buffer_reloc +{ + /** Buffer object that the relocation points at. */ + dri_bo *target_buf; + /** Offset of the relocation entry within reloc_buf. */ + GLuint offset; + /** Cached value of the offset when we last performed this relocation. */ + GLuint last_target_offset; + /** Value added to target_buf's offset to get the relocation entry. */ + GLuint delta; + /** Flags to validate the target buffer under. */ + uint64_t validate_flags; +}; + +struct block { + struct block *next, *prev; + struct mem_block *mem; /* BM_MEM_AGP */ + + /** + * Marks that the block is currently in the aperture and has yet to be + * fenced. + */ + unsigned on_hardware:1; + /** + * Marks that the block is currently fenced (being used by rendering) and + * can't be freed until @fence is passed. + */ + unsigned fenced:1; + + /** Fence cookie for the block. */ + unsigned fence; /* Split to read_fence, write_fence */ + + dri_bo *bo; + void *virtual; +}; + +typedef struct _bufmgr_fake { + dri_bufmgr bufmgr; + + unsigned long low_offset; + unsigned long size; + void *virtual; + + struct mem_block *heap; + struct block lru; /* only allocated, non-fence-pending blocks here */ + + unsigned buf_nr; /* for generating ids */ + + struct block on_hardware; /* after bmValidateBuffers */ + struct block fenced; /* after bmFenceBuffers (mi_flush, emit irq, write dword) */ + /* then to bufmgr->lru or free() */ + + unsigned int last_fence; + + unsigned fail:1; + unsigned need_fence:1; + GLboolean thrashing; + + /** + * Driver callback to emit a fence, returning the cookie. + * + * Currently, this also requires that a write flush be emitted before + * emitting the fence, but this should change. + */ + unsigned int (*fence_emit)(void *private); + /** Driver callback to wait for a fence cookie to have passed. */ + int (*fence_wait)(void *private, unsigned int fence_cookie); + /** Driver-supplied argument to driver callbacks */ + void *driver_priv; + + GLboolean debug; + + GLboolean performed_rendering; + + /* keep track of the current total size of objects we have relocs for */ + unsigned long current_total_size; +} dri_bufmgr_fake; + +typedef struct _dri_bo_fake { + dri_bo bo; + + unsigned id; /* debug only */ + const char *name; + + unsigned dirty:1; + unsigned size_accounted:1; /*this buffers size has been accounted against the aperture */ + unsigned card_dirty:1; /* has the card written to this buffer - we make need to copy it back */ + unsigned int refcount; + /* Flags may consist of any of the DRM_BO flags, plus + * DRM_BO_NO_BACKING_STORE and BM_NO_FENCE_SUBDATA, which are the first two + * driver private flags. + */ + uint64_t flags; + unsigned int alignment; + GLboolean is_static, validated; + unsigned int map_count; + + /* Flags for the buffer to be validated with in command submission */ + uint64_t validate_flags; + + /** relocation list */ + struct fake_buffer_reloc *relocs; + GLuint nr_relocs; + + struct block *block; + void *backing_store; + void (*invalidate_cb)(dri_bo *bo, void *ptr); + void *invalidate_ptr; +} dri_bo_fake; + +typedef struct _dri_fence_fake { + dri_fence fence; + + const char *name; + unsigned int refcount; + unsigned int fence_cookie; + GLboolean flushed; +} dri_fence_fake; + +static int clear_fenced(dri_bufmgr_fake *bufmgr_fake, + unsigned int fence_cookie); + +static int dri_fake_check_aperture_space(dri_bo *bo); + +#define MAXFENCE 0x7fffffff + +static GLboolean FENCE_LTE( unsigned a, unsigned b ) +{ + if (a == b) + return GL_TRUE; + + if (a < b && b - a < (1<<24)) + return GL_TRUE; + + if (a > b && MAXFENCE - a + b < (1<<24)) + return GL_TRUE; + + return GL_FALSE; +} + +static unsigned int +_fence_emit_internal(dri_bufmgr_fake *bufmgr_fake) +{ + bufmgr_fake->last_fence = bufmgr_fake->fence_emit(bufmgr_fake->driver_priv); + return bufmgr_fake->last_fence; +} + +static void -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]