From e4344161bde2e24fcfba65d30d58f087bd8bf94d Mon Sep 17 00:00:00 2001
From: Ian Romanick
Date: Wed, 24 Aug 2011 15:21:58 -0700
Subject: [PATCH] dri: Remove all DRI1 drivers
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
Acked-by: Kristian Høgsberg
Acked-by: Marek Olšák
Acked-by: Alan Coopersmith
Acked-by: Jakob Bornecrantz
Acked-by: Dave Airlie
Build-Tested-by: Jakob Bornecrantz
Tested-by: Eugeni Dodonov
---
configs/freebsd-dri | 3 +-
configs/linux-dri | 3 +-
configs/linux-dri-debug | 2 -
configs/linux-dri-ppc | 2 +-
configs/linux-dri-x86-64 | 6 +-
configs/linux-dri-xcb | 3 +-
configure.ac | 19 +-
docs/install.html | 12 -
docs/libGL.txt | 2 +-
include/pci_ids/pci_id_driver_map.h | 11 -
src/glx/dri_common.c | 2 +-
src/glx/dri_glx.c | 4 +-
src/mesa/drivers/dri/i810/Makefile | 30 -
src/mesa/drivers/dri/i810/i810_3d_reg.h | 630 -----
src/mesa/drivers/dri/i810/i810context.c | 570 -----
src/mesa/drivers/dri/i810/i810context.h | 249 --
src/mesa/drivers/dri/i810/i810ioctl.c | 519 ----
src/mesa/drivers/dri/i810/i810ioctl.h | 48 -
src/mesa/drivers/dri/i810/i810render.c | 174 --
src/mesa/drivers/dri/i810/i810screen.c | 361 ---
src/mesa/drivers/dri/i810/i810screen.h | 100 -
src/mesa/drivers/dri/i810/i810span.c | 138 -
src/mesa/drivers/dri/i810/i810span.h | 14 -
src/mesa/drivers/dri/i810/i810state.c | 1002 --------
src/mesa/drivers/dri/i810/i810state.h | 15 -
src/mesa/drivers/dri/i810/i810tex.c | 546 ----
src/mesa/drivers/dri/i810/i810tex.h | 77 -
src/mesa/drivers/dri/i810/i810texmem.c | 184 --
src/mesa/drivers/dri/i810/i810texstate.c | 750 ------
src/mesa/drivers/dri/i810/i810tris.c | 872 -------
src/mesa/drivers/dri/i810/i810tris.h | 35 -
src/mesa/drivers/dri/i810/i810vb.c | 486 ----
src/mesa/drivers/dri/i810/i810vb.h | 59 -
.../drivers/dri/i810/server/i810_common.h | 191 --
src/mesa/drivers/dri/i810/server/i810_dri.h | 127 -
src/mesa/drivers/dri/i810/server/i810_reg.h | 991 --------
src/mesa/drivers/dri/mach64/Makefile | 31 -
src/mesa/drivers/dri/mach64/mach64_context.c | 356 ---
src/mesa/drivers/dri/mach64/mach64_context.h | 369 ---
src/mesa/drivers/dri/mach64/mach64_dd.c | 129 -
src/mesa/drivers/dri/mach64/mach64_dd.h | 36 -
src/mesa/drivers/dri/mach64/mach64_ioctl.c | 932 -------
src/mesa/drivers/dri/mach64/mach64_ioctl.h | 151 --
src/mesa/drivers/dri/mach64/mach64_lock.c | 95 -
src/mesa/drivers/dri/mach64/mach64_lock.h | 104 -
.../drivers/dri/mach64/mach64_native_vb.c | 257 --
.../drivers/dri/mach64/mach64_native_vbtmp.h | 562 -----
src/mesa/drivers/dri/mach64/mach64_reg.h | 406 ---
src/mesa/drivers/dri/mach64/mach64_screen.c | 462 ----
src/mesa/drivers/dri/mach64/mach64_screen.h | 80 -
src/mesa/drivers/dri/mach64/mach64_span.c | 168 --
src/mesa/drivers/dri/mach64/mach64_span.h | 41 -
src/mesa/drivers/dri/mach64/mach64_state.c | 1186 ---------
src/mesa/drivers/dri/mach64/mach64_state.h | 47 -
src/mesa/drivers/dri/mach64/mach64_tex.c | 563 -----
src/mesa/drivers/dri/mach64/mach64_tex.h | 89 -
src/mesa/drivers/dri/mach64/mach64_texmem.c | 511 ----
src/mesa/drivers/dri/mach64/mach64_texstate.c | 522 ----
src/mesa/drivers/dri/mach64/mach64_tris.c | 1927 --------------
src/mesa/drivers/dri/mach64/mach64_tris.h | 43 -
src/mesa/drivers/dri/mach64/mach64_vb.c | 641 -----
src/mesa/drivers/dri/mach64/mach64_vb.h | 77 -
src/mesa/drivers/dri/mach64/mach64_vbtmp.h | 770 ------
.../drivers/dri/mach64/server/mach64_dri.h | 126 -
src/mesa/drivers/dri/mga/Doxyfile | 234 --
src/mesa/drivers/dri/mga/Makefile | 33 -
src/mesa/drivers/dri/mga/README | 26 -
src/mesa/drivers/dri/mga/mga_texcombine.c | 672 -----
src/mesa/drivers/dri/mga/mga_texstate.c | 898 -------
src/mesa/drivers/dri/mga/mga_xmesa.c | 1005 --------
src/mesa/drivers/dri/mga/mga_xmesa.h | 154 --
src/mesa/drivers/dri/mga/mgacontext.h | 359 ---
src/mesa/drivers/dri/mga/mgadd.c | 70 -
src/mesa/drivers/dri/mga/mgadd.h | 35 -
src/mesa/drivers/dri/mga/mgaioctl.c | 747 ------
src/mesa/drivers/dri/mga/mgaioctl.h | 110 -
src/mesa/drivers/dri/mga/mgapixel.c | 649 -----
src/mesa/drivers/dri/mga/mgapixel.h | 35 -
src/mesa/drivers/dri/mga/mgaregs.h | 1394 -----------
src/mesa/drivers/dri/mga/mgarender.c | 172 --
src/mesa/drivers/dri/mga/mgaspan.c | 227 --
src/mesa/drivers/dri/mga/mgaspan.h | 39 -
src/mesa/drivers/dri/mga/mgastate.c | 1198 ---------
src/mesa/drivers/dri/mga/mgastate.h | 38 -
src/mesa/drivers/dri/mga/mgatex.c | 540 ----
src/mesa/drivers/dri/mga/mgatex.h | 50 -
src/mesa/drivers/dri/mga/mgatexmem.c | 278 ---
src/mesa/drivers/dri/mga/mgatris.c | 914 -------
src/mesa/drivers/dri/mga/mgatris.h | 51 -
src/mesa/drivers/dri/mga/mgavb.c | 478 ----
src/mesa/drivers/dri/mga/mgavb.h | 65 -
src/mesa/drivers/dri/mga/server/mga.h | 114 -
src/mesa/drivers/dri/mga/server/mga_bios.h | 141 --
src/mesa/drivers/dri/mga/server/mga_dri.h | 112 -
src/mesa/drivers/dri/mga/server/mga_macros.h | 117 -
src/mesa/drivers/dri/mga/server/mga_reg.h | 482 ----
src/mesa/drivers/dri/r128/Makefile | 31 -
src/mesa/drivers/dri/r128/r128_context.c | 369 ---
src/mesa/drivers/dri/r128/r128_context.h | 261 --
src/mesa/drivers/dri/r128/r128_dd.c | 139 --
src/mesa/drivers/dri/r128/r128_dd.h | 40 -
src/mesa/drivers/dri/r128/r128_ioctl.c | 820 ------
src/mesa/drivers/dri/r128/r128_ioctl.h | 143 --
src/mesa/drivers/dri/r128/r128_lock.c | 107 -
src/mesa/drivers/dri/r128/r128_lock.h | 107 -
src/mesa/drivers/dri/r128/r128_screen.c | 524 ----
src/mesa/drivers/dri/r128/r128_screen.h | 85 -
src/mesa/drivers/dri/r128/r128_span.c | 449 ----
src/mesa/drivers/dri/r128/r128_span.h | 45 -
src/mesa/drivers/dri/r128/r128_state.c | 1443 -----------
src/mesa/drivers/dri/r128/r128_state.h | 48 -
src/mesa/drivers/dri/r128/r128_tex.c | 615 -----
src/mesa/drivers/dri/r128/r128_tex.h | 84 -
src/mesa/drivers/dri/r128/r128_texmem.c | 299 ---
src/mesa/drivers/dri/r128/r128_texobj.h | 67 -
src/mesa/drivers/dri/r128/r128_texstate.c | 645 -----
src/mesa/drivers/dri/r128/r128_tris.c | 797 ------
src/mesa/drivers/dri/r128/r128_tris.h | 47 -
src/mesa/drivers/dri/r128/server/pci_ids.h | 57 -
src/mesa/drivers/dri/r128/server/r128.h | 464 ----
src/mesa/drivers/dri/r128/server/r128_dri.h | 102 -
.../drivers/dri/r128/server/r128_macros.h | 134 -
src/mesa/drivers/dri/r128/server/r128_reg.h | 1403 -----------
.../drivers/dri/r128/server/r128_version.h | 59 -
src/mesa/drivers/dri/savage/Makefile | 28 -
src/mesa/drivers/dri/savage/savage_3d_reg.h | 711 ------
src/mesa/drivers/dri/savage/savage_bci.h | 612 -----
src/mesa/drivers/dri/savage/savage_init.h | 157 --
src/mesa/drivers/dri/savage/savage_xmesa.c | 1013 --------
src/mesa/drivers/dri/savage/savagecontext.h | 321 ---
src/mesa/drivers/dri/savage/savagedd.c | 95 -
src/mesa/drivers/dri/savage/savagedd.h | 32 -
src/mesa/drivers/dri/savage/savageioctl.c | 662 -----
src/mesa/drivers/dri/savage/savageioctl.h | 203 --
src/mesa/drivers/dri/savage/savagerender.c | 371 ---
src/mesa/drivers/dri/savage/savagespan.c | 282 ---
src/mesa/drivers/dri/savage/savagespan.h | 137 -
src/mesa/drivers/dri/savage/savagestate.c | 1731 -------------
src/mesa/drivers/dri/savage/savagestate.h | 41 -
src/mesa/drivers/dri/savage/savagetex.c | 2123 ----------------
src/mesa/drivers/dri/savage/savagetex.h | 83 -
src/mesa/drivers/dri/savage/savagetris.c | 1306 ----------
src/mesa/drivers/dri/savage/savagetris.h | 48 -
.../drivers/dri/savage/server/savage_dri.h | 76 -
src/mesa/drivers/dri/sis/Makefile | 34 -
src/mesa/drivers/dri/sis/server/sis_common.h | 62 -
src/mesa/drivers/dri/sis/server/sis_dri.h | 75 -
src/mesa/drivers/dri/sis/sis6326_clear.c | 229 --
src/mesa/drivers/dri/sis/sis6326_reg.h | 408 ---
src/mesa/drivers/dri/sis/sis6326_state.c | 736 ------
src/mesa/drivers/dri/sis/sis_alloc.c | 198 --
src/mesa/drivers/dri/sis/sis_alloc.h | 43 -
src/mesa/drivers/dri/sis/sis_clear.c | 408 ---
src/mesa/drivers/dri/sis/sis_context.c | 719 ------
src/mesa/drivers/dri/sis/sis_context.h | 479 ----
src/mesa/drivers/dri/sis/sis_dd.c | 265 --
src/mesa/drivers/dri/sis/sis_dd.h | 38 -
src/mesa/drivers/dri/sis/sis_fog.c | 205 --
src/mesa/drivers/dri/sis/sis_lock.c | 80 -
src/mesa/drivers/dri/sis/sis_lock.h | 86 -
src/mesa/drivers/dri/sis/sis_reg.h | 902 -------
src/mesa/drivers/dri/sis/sis_screen.c | 333 ---
src/mesa/drivers/dri/sis/sis_screen.h | 61 -
src/mesa/drivers/dri/sis/sis_span.c | 197 --
src/mesa/drivers/dri/sis/sis_span.h | 45 -
src/mesa/drivers/dri/sis/sis_state.c | 864 -------
src/mesa/drivers/dri/sis/sis_state.h | 68 -
src/mesa/drivers/dri/sis/sis_stencil.c | 205 --
src/mesa/drivers/dri/sis/sis_stencil.h | 36 -
src/mesa/drivers/dri/sis/sis_tex.c | 568 -----
src/mesa/drivers/dri/sis/sis_tex.h | 37 -
src/mesa/drivers/dri/sis/sis_texstate.c | 712 ------
src/mesa/drivers/dri/sis/sis_tris.c | 1154 ---------
src/mesa/drivers/dri/sis/sis_tris.h | 70 -
src/mesa/drivers/dri/sis/sis_tritmp.h | 250 --
src/mesa/drivers/dri/tdfx/BUGS | 64 -
src/mesa/drivers/dri/tdfx/Makefile | 34 -
.../drivers/dri/tdfx/X86/fx_3dnow_fastpath.S | 83 -
.../drivers/dri/tdfx/X86/fx_3dnow_fasttmp.h | 313 ---
src/mesa/drivers/dri/tdfx/dri_glide.h | 59 -
src/mesa/drivers/dri/tdfx/server/tdfx_dri.h | 27 -
src/mesa/drivers/dri/tdfx/tdfx_context.c | 1013 --------
src/mesa/drivers/dri/tdfx/tdfx_context.h | 1013 --------
src/mesa/drivers/dri/tdfx/tdfx_dd.c | 222 --
src/mesa/drivers/dri/tdfx/tdfx_dd.h | 44 -
src/mesa/drivers/dri/tdfx/tdfx_glide.h | 605 -----
src/mesa/drivers/dri/tdfx/tdfx_lock.c | 100 -
src/mesa/drivers/dri/tdfx/tdfx_lock.h | 143 --
src/mesa/drivers/dri/tdfx/tdfx_pixels.c | 686 -----
src/mesa/drivers/dri/tdfx/tdfx_pixels.h | 76 -
src/mesa/drivers/dri/tdfx/tdfx_render.c | 804 ------
src/mesa/drivers/dri/tdfx/tdfx_render.h | 49 -
src/mesa/drivers/dri/tdfx/tdfx_screen.c | 450 ----
src/mesa/drivers/dri/tdfx/tdfx_screen.h | 72 -
src/mesa/drivers/dri/tdfx/tdfx_span.c | 1386 ----------
src/mesa/drivers/dri/tdfx/tdfx_span.h | 48 -
src/mesa/drivers/dri/tdfx/tdfx_state.c | 1429 -----------
src/mesa/drivers/dri/tdfx/tdfx_state.h | 60 -
src/mesa/drivers/dri/tdfx/tdfx_tex.c | 1868 --------------
src/mesa/drivers/dri/tdfx/tdfx_tex.h | 101 -
src/mesa/drivers/dri/tdfx/tdfx_texman.c | 994 --------
src/mesa/drivers/dri/tdfx/tdfx_texman.h | 83 -
src/mesa/drivers/dri/tdfx/tdfx_texstate.c | 2218 -----------------
src/mesa/drivers/dri/tdfx/tdfx_texstate.h | 43 -
src/mesa/drivers/dri/tdfx/tdfx_tris.c | 1291 ----------
src/mesa/drivers/dri/tdfx/tdfx_tris.h | 41 -
src/mesa/drivers/dri/tdfx/tdfx_vb.c | 347 ---
src/mesa/drivers/dri/tdfx/tdfx_vb.h | 68 -
src/mesa/drivers/dri/tdfx/tdfx_vbtmp.h | 266 --
src/mesa/drivers/dri/unichrome/Makefile | 31 -
src/mesa/drivers/dri/unichrome/server/via.h | 11 -
.../drivers/dri/unichrome/server/via_dri.h | 76 -
.../drivers/dri/unichrome/server/via_driver.h | 308 ---
.../drivers/dri/unichrome/server/via_priv.h | 69 -
.../drivers/dri/unichrome/server/via_regs.h | 198 --
src/mesa/drivers/dri/unichrome/via_3d_reg.h | 1652 ------------
src/mesa/drivers/dri/unichrome/via_context.c | 954 -------
src/mesa/drivers/dri/unichrome/via_context.h | 420 ----
.../drivers/dri/unichrome/via_drmclient.h | 29 -
src/mesa/drivers/dri/unichrome/via_fb.c | 243 --
src/mesa/drivers/dri/unichrome/via_fb.h | 42 -
src/mesa/drivers/dri/unichrome/via_ioctl.c | 981 --------
src/mesa/drivers/dri/unichrome/via_ioctl.h | 133 -
src/mesa/drivers/dri/unichrome/via_memcpy.c | 138 -
src/mesa/drivers/dri/unichrome/via_render.c | 132 -
src/mesa/drivers/dri/unichrome/via_screen.c | 447 ----
src/mesa/drivers/dri/unichrome/via_screen.h | 98 -
src/mesa/drivers/dri/unichrome/via_span.c | 199 --
src/mesa/drivers/dri/unichrome/via_span.h | 35 -
src/mesa/drivers/dri/unichrome/via_state.c | 1529 ------------
src/mesa/drivers/dri/unichrome/via_state.h | 39 -
src/mesa/drivers/dri/unichrome/via_tex.c | 946 -------
src/mesa/drivers/dri/unichrome/via_tex.h | 41 -
.../drivers/dri/unichrome/via_texcombine.c | 423 ----
src/mesa/drivers/dri/unichrome/via_tris.c | 1194 ---------
src/mesa/drivers/dri/unichrome/via_tris.h | 35 -
src/mesa/tnl/NOTES | 4 +-
237 files changed, 17 insertions(+), 85828 deletions(-)
delete mode 100644 src/mesa/drivers/dri/i810/Makefile
delete mode 100644 src/mesa/drivers/dri/i810/i810_3d_reg.h
delete mode 100644 src/mesa/drivers/dri/i810/i810context.c
delete mode 100644 src/mesa/drivers/dri/i810/i810context.h
delete mode 100644 src/mesa/drivers/dri/i810/i810ioctl.c
delete mode 100644 src/mesa/drivers/dri/i810/i810ioctl.h
delete mode 100644 src/mesa/drivers/dri/i810/i810render.c
delete mode 100644 src/mesa/drivers/dri/i810/i810screen.c
delete mode 100644 src/mesa/drivers/dri/i810/i810screen.h
delete mode 100644 src/mesa/drivers/dri/i810/i810span.c
delete mode 100644 src/mesa/drivers/dri/i810/i810span.h
delete mode 100644 src/mesa/drivers/dri/i810/i810state.c
delete mode 100644 src/mesa/drivers/dri/i810/i810state.h
delete mode 100644 src/mesa/drivers/dri/i810/i810tex.c
delete mode 100644 src/mesa/drivers/dri/i810/i810tex.h
delete mode 100644 src/mesa/drivers/dri/i810/i810texmem.c
delete mode 100644 src/mesa/drivers/dri/i810/i810texstate.c
delete mode 100644 src/mesa/drivers/dri/i810/i810tris.c
delete mode 100644 src/mesa/drivers/dri/i810/i810tris.h
delete mode 100644 src/mesa/drivers/dri/i810/i810vb.c
delete mode 100644 src/mesa/drivers/dri/i810/i810vb.h
delete mode 100644 src/mesa/drivers/dri/i810/server/i810_common.h
delete mode 100644 src/mesa/drivers/dri/i810/server/i810_dri.h
delete mode 100644 src/mesa/drivers/dri/i810/server/i810_reg.h
delete mode 100644 src/mesa/drivers/dri/mach64/Makefile
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_context.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_context.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_dd.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_dd.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_ioctl.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_ioctl.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_lock.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_lock.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_native_vb.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_native_vbtmp.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_reg.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_screen.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_screen.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_span.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_span.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_state.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_state.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_tex.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_tex.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_texmem.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_texstate.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_tris.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_tris.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_vb.c
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_vb.h
delete mode 100644 src/mesa/drivers/dri/mach64/mach64_vbtmp.h
delete mode 100644 src/mesa/drivers/dri/mach64/server/mach64_dri.h
delete mode 100644 src/mesa/drivers/dri/mga/Doxyfile
delete mode 100644 src/mesa/drivers/dri/mga/Makefile
delete mode 100644 src/mesa/drivers/dri/mga/README
delete mode 100644 src/mesa/drivers/dri/mga/mga_texcombine.c
delete mode 100644 src/mesa/drivers/dri/mga/mga_texstate.c
delete mode 100644 src/mesa/drivers/dri/mga/mga_xmesa.c
delete mode 100644 src/mesa/drivers/dri/mga/mga_xmesa.h
delete mode 100644 src/mesa/drivers/dri/mga/mgacontext.h
delete mode 100644 src/mesa/drivers/dri/mga/mgadd.c
delete mode 100644 src/mesa/drivers/dri/mga/mgadd.h
delete mode 100644 src/mesa/drivers/dri/mga/mgaioctl.c
delete mode 100644 src/mesa/drivers/dri/mga/mgaioctl.h
delete mode 100644 src/mesa/drivers/dri/mga/mgapixel.c
delete mode 100644 src/mesa/drivers/dri/mga/mgapixel.h
delete mode 100644 src/mesa/drivers/dri/mga/mgaregs.h
delete mode 100644 src/mesa/drivers/dri/mga/mgarender.c
delete mode 100644 src/mesa/drivers/dri/mga/mgaspan.c
delete mode 100644 src/mesa/drivers/dri/mga/mgaspan.h
delete mode 100644 src/mesa/drivers/dri/mga/mgastate.c
delete mode 100644 src/mesa/drivers/dri/mga/mgastate.h
delete mode 100644 src/mesa/drivers/dri/mga/mgatex.c
delete mode 100644 src/mesa/drivers/dri/mga/mgatex.h
delete mode 100644 src/mesa/drivers/dri/mga/mgatexmem.c
delete mode 100644 src/mesa/drivers/dri/mga/mgatris.c
delete mode 100644 src/mesa/drivers/dri/mga/mgatris.h
delete mode 100644 src/mesa/drivers/dri/mga/mgavb.c
delete mode 100644 src/mesa/drivers/dri/mga/mgavb.h
delete mode 100644 src/mesa/drivers/dri/mga/server/mga.h
delete mode 100644 src/mesa/drivers/dri/mga/server/mga_bios.h
delete mode 100644 src/mesa/drivers/dri/mga/server/mga_dri.h
delete mode 100644 src/mesa/drivers/dri/mga/server/mga_macros.h
delete mode 100644 src/mesa/drivers/dri/mga/server/mga_reg.h
delete mode 100644 src/mesa/drivers/dri/r128/Makefile
delete mode 100644 src/mesa/drivers/dri/r128/r128_context.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_context.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_dd.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_dd.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_ioctl.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_ioctl.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_lock.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_lock.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_screen.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_screen.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_span.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_span.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_state.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_state.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_tex.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_tex.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_texmem.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_texobj.h
delete mode 100644 src/mesa/drivers/dri/r128/r128_texstate.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_tris.c
delete mode 100644 src/mesa/drivers/dri/r128/r128_tris.h
delete mode 100644 src/mesa/drivers/dri/r128/server/pci_ids.h
delete mode 100644 src/mesa/drivers/dri/r128/server/r128.h
delete mode 100644 src/mesa/drivers/dri/r128/server/r128_dri.h
delete mode 100644 src/mesa/drivers/dri/r128/server/r128_macros.h
delete mode 100644 src/mesa/drivers/dri/r128/server/r128_reg.h
delete mode 100644 src/mesa/drivers/dri/r128/server/r128_version.h
delete mode 100644 src/mesa/drivers/dri/savage/Makefile
delete mode 100644 src/mesa/drivers/dri/savage/savage_3d_reg.h
delete mode 100644 src/mesa/drivers/dri/savage/savage_bci.h
delete mode 100644 src/mesa/drivers/dri/savage/savage_init.h
delete mode 100644 src/mesa/drivers/dri/savage/savage_xmesa.c
delete mode 100644 src/mesa/drivers/dri/savage/savagecontext.h
delete mode 100644 src/mesa/drivers/dri/savage/savagedd.c
delete mode 100644 src/mesa/drivers/dri/savage/savagedd.h
delete mode 100644 src/mesa/drivers/dri/savage/savageioctl.c
delete mode 100644 src/mesa/drivers/dri/savage/savageioctl.h
delete mode 100644 src/mesa/drivers/dri/savage/savagerender.c
delete mode 100644 src/mesa/drivers/dri/savage/savagespan.c
delete mode 100644 src/mesa/drivers/dri/savage/savagespan.h
delete mode 100644 src/mesa/drivers/dri/savage/savagestate.c
delete mode 100644 src/mesa/drivers/dri/savage/savagestate.h
delete mode 100644 src/mesa/drivers/dri/savage/savagetex.c
delete mode 100644 src/mesa/drivers/dri/savage/savagetex.h
delete mode 100644 src/mesa/drivers/dri/savage/savagetris.c
delete mode 100644 src/mesa/drivers/dri/savage/savagetris.h
delete mode 100644 src/mesa/drivers/dri/savage/server/savage_dri.h
delete mode 100644 src/mesa/drivers/dri/sis/Makefile
delete mode 100644 src/mesa/drivers/dri/sis/server/sis_common.h
delete mode 100644 src/mesa/drivers/dri/sis/server/sis_dri.h
delete mode 100644 src/mesa/drivers/dri/sis/sis6326_clear.c
delete mode 100644 src/mesa/drivers/dri/sis/sis6326_reg.h
delete mode 100644 src/mesa/drivers/dri/sis/sis6326_state.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_alloc.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_alloc.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_clear.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_context.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_context.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_dd.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_dd.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_fog.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_lock.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_lock.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_reg.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_screen.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_screen.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_span.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_span.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_state.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_state.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_stencil.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_stencil.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_tex.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_tex.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_texstate.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_tris.c
delete mode 100644 src/mesa/drivers/dri/sis/sis_tris.h
delete mode 100644 src/mesa/drivers/dri/sis/sis_tritmp.h
delete mode 100644 src/mesa/drivers/dri/tdfx/BUGS
delete mode 100644 src/mesa/drivers/dri/tdfx/Makefile
delete mode 100644 src/mesa/drivers/dri/tdfx/X86/fx_3dnow_fastpath.S
delete mode 100644 src/mesa/drivers/dri/tdfx/X86/fx_3dnow_fasttmp.h
delete mode 100644 src/mesa/drivers/dri/tdfx/dri_glide.h
delete mode 100644 src/mesa/drivers/dri/tdfx/server/tdfx_dri.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_context.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_context.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_dd.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_dd.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_glide.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_lock.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_lock.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_pixels.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_pixels.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_render.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_render.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_screen.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_screen.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_span.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_span.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_state.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_state.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_tex.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_tex.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_texman.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_texman.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_texstate.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_texstate.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_tris.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_tris.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_vb.c
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_vb.h
delete mode 100644 src/mesa/drivers/dri/tdfx/tdfx_vbtmp.h
delete mode 100644 src/mesa/drivers/dri/unichrome/Makefile
delete mode 100644 src/mesa/drivers/dri/unichrome/server/via.h
delete mode 100644 src/mesa/drivers/dri/unichrome/server/via_dri.h
delete mode 100644 src/mesa/drivers/dri/unichrome/server/via_driver.h
delete mode 100644 src/mesa/drivers/dri/unichrome/server/via_priv.h
delete mode 100644 src/mesa/drivers/dri/unichrome/server/via_regs.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_3d_reg.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_context.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_context.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_drmclient.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_fb.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_fb.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_ioctl.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_ioctl.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_memcpy.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_render.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_screen.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_screen.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_span.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_span.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_state.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_state.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_tex.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_tex.h
delete mode 100644 src/mesa/drivers/dri/unichrome/via_texcombine.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_tris.c
delete mode 100644 src/mesa/drivers/dri/unichrome/via_tris.h
diff --git a/configs/freebsd-dri b/configs/freebsd-dri
index 3c83872c08c..c4169b81d4e 100644
--- a/configs/freebsd-dri
+++ b/configs/freebsd-dri
@@ -47,6 +47,5 @@ DRIVER_DIRS = dri
DRM_SOURCE_PATH=$(TOP)/../drm
-DRI_DIRS = i810 i915 i965 mach64 mga r128 r200 r300 radeon tdfx \
- unichrome savage sis
+DRI_DIRS = i915 i965 r200 r300 radeon
diff --git a/configs/linux-dri b/configs/linux-dri
index b82481e0f73..26c73ccf019 100644
--- a/configs/linux-dri
+++ b/configs/linux-dri
@@ -62,8 +62,7 @@ GALLIUM_WINSYS_DIRS = sw sw/xlib drm/vmware drm/intel drm/i965
GALLIUM_TARGET_DIRS =
GALLIUM_STATE_TRACKERS_DIRS = egl
-DRI_DIRS = i810 i915 i965 mach64 mga nouveau r128 r200 r300 r600 radeon \
- savage sis tdfx unichrome swrast
+DRI_DIRS = i915 i965 nouveau r200 r300 r600 radeon swrast
INTEL_LIBS = $(shell pkg-config --libs libdrm_intel)
INTEL_CFLAGS = $(shell pkg-config --cflags libdrm_intel)
diff --git a/configs/linux-dri-debug b/configs/linux-dri-debug
index 0dbf428830a..c42654ce3e2 100644
--- a/configs/linux-dri-debug
+++ b/configs/linux-dri-debug
@@ -11,6 +11,4 @@ ARCH_FLAGS = -DDEBUG
#DRI_DIRS = i915tex i915
#DRI_DIRS = i965
#DRI_DIRS = radeon r200 r300
-#DRI_DIRS = unichrome sis
-#DRI_DIRS = i810 mga r128 tdfx
diff --git a/configs/linux-dri-ppc b/configs/linux-dri-ppc
index a3a3ca83cb3..cc1ab9c4ff8 100644
--- a/configs/linux-dri-ppc
+++ b/configs/linux-dri-ppc
@@ -13,5 +13,5 @@ MESA_ASM_SOURCES = $(PPC_SOURCES)
# Build only the drivers for cards that exist on PowerPC. At some point MGA
# will be added, but not yet.
-DRI_DIRS = mach64 r128 r200 r300 radeon tdfx
+DRI_DIRS = r200 r300 radeon
diff --git a/configs/linux-dri-x86-64 b/configs/linux-dri-x86-64
index 656cf6140d7..84f547812a8 100644
--- a/configs/linux-dri-x86-64
+++ b/configs/linux-dri-x86-64
@@ -16,9 +16,5 @@ LIB_DIR = lib64
# Library/program dependencies
EXTRA_LIB_PATH=-L/usr/X11R6/lib64
-# sis is missing because it has not been converted to use
-# the new interface. i810 are missing because there is no x86-64
-# system where they could *ever* be used.
-#
-DRI_DIRS = i915 i965 mach64 mga r128 r200 r300 radeon savage tdfx unichrome
+DRI_DIRS = i915 i965 r200 r300 radeon
diff --git a/configs/linux-dri-xcb b/configs/linux-dri-xcb
index 15702da1904..a845f71d231 100644
--- a/configs/linux-dri-xcb
+++ b/configs/linux-dri-xcb
@@ -52,5 +52,4 @@ GL_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXext -lXxf86vm -lm -lpthread -ldl \
SRC_DIRS = glx gallium mesa glu
DRIVER_DIRS = dri
-DRI_DIRS = i810 i915 mach64 mga r128 r200 r300 radeon \
- savage sis tdfx unichrome
+DRI_DIRS = i915 r200 r300 radeon
diff --git a/configure.ac b/configure.ac
index c461f43713a..9916a06a92f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1161,25 +1161,20 @@ if test "x$enable_dri" = xyes; then
case "$host_cpu" in
x86_64)
- # sis is missing because they have not be converted to use
- # the new interface. i810 are missing because there is no
- # x86-64 system where they could *ever* be used.
if test "x$DRI_DIRS" = "xyes"; then
- DRI_DIRS="i915 i965 mach64 mga nouveau r128 r200 r300 r600 \
- radeon savage tdfx unichrome swrast"
+ DRI_DIRS="i915 i965 nouveau r200 r300 r600 radeon swrast"
fi
;;
powerpc*)
# Build only the drivers for cards that exist on PowerPC.
- # At some point MGA will be added, but not yet.
if test "x$DRI_DIRS" = "xyes"; then
- DRI_DIRS="mach64 r128 r200 r300 r600 radeon tdfx swrast"
+ DRI_DIRS="r200 r300 r600 radeon swrast"
fi
;;
sparc*)
- # Build only the drivers for cards that exist on sparc`
+ # Build only the drivers for cards that exist on sparc
if test "x$DRI_DIRS" = "xyes"; then
- DRI_DIRS="mach64 r128 r200 r300 r600 radeon swrast"
+ DRI_DIRS="r200 r300 r600 radeon swrast"
fi
;;
esac
@@ -1189,8 +1184,7 @@ if test "x$enable_dri" = xyes; then
DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
if test "x$DRI_DIRS" = "xyes"; then
- DRI_DIRS="i810 i915 i965 mach64 mga nouveau r128 r200 r300 r600 \
- radeon tdfx unichrome savage sis swrast"
+ DRI_DIRS="i915 i965 nouveau r200 r300 r600 radeon swrast"
fi
;;
gnu*)
@@ -1210,8 +1204,7 @@ if test "x$enable_dri" = xyes; then
# default drivers
if test "x$DRI_DIRS" = "xyes"; then
- DRI_DIRS="i810 i915 i965 mach64 mga nouveau r128 r200 r300 r600 radeon \
- savage sis tdfx unichrome swrast"
+ DRI_DIRS="i915 i965 nouveau r200 r300 r600 radeon swrast"
fi
DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/ */ /g'`
diff --git a/docs/install.html b/docs/install.html
index c86a755e4b6..57e671b633f 100644
--- a/docs/install.html
+++ b/docs/install.html
@@ -176,22 +176,10 @@ lrwxrwxrwx 1 brian users 23 Mar 26 07:53 libOSMesa.so.6 -> libOSM
If you built the DRI hardware drivers, you'll also see the DRI drivers:
--rwxr-xr-x 1 brian users 15607851 Jul 21 12:11 ffb_dri.so
--rwxr-xr-x 1 brian users 15148747 Jul 21 12:11 i810_dri.so
--rwxr-xr-x 1 brian users 14497814 Jul 21 12:11 i830_dri.so
-rwxr-xr-x 1 brian users 16895413 Jul 21 12:11 i915_dri.so
--rwxr-xr-x 1 brian users 11320803 Jul 21 12:11 mach64_dri.so
--rwxr-xr-x 1 brian users 11418014 Jul 21 12:12 mga_dri.so
--rwxr-xr-x 1 brian users 11064426 Jul 21 12:12 r128_dri.so
-rwxr-xr-x 1 brian users 11849858 Jul 21 12:12 r200_dri.so
-rwxr-xr-x 1 brian users 16050488 Jul 21 12:11 r300_dri.so
-rwxr-xr-x 1 brian users 11757388 Jul 21 12:12 radeon_dri.so
--rwxr-xr-x 1 brian users 11232304 Jul 21 12:13 s3v_dri.so
--rwxr-xr-x 1 brian users 11062970 Jul 21 12:13 savage_dri.so
--rwxr-xr-x 1 brian users 11214212 Jul 21 12:13 sis_dri.so
--rwxr-xr-x 1 brian users 11368736 Jul 21 12:13 tdfx_dri.so
--rwxr-xr-x 1 brian users 10598868 Jul 21 12:13 trident_dri.so
--rwxr-xr-x 1 brian users 10997120 Jul 21 12:13 unichrome_dri.so
diff --git a/docs/libGL.txt b/docs/libGL.txt
index cb988404370..d06b4e62acd 100644
--- a/docs/libGL.txt
+++ b/docs/libGL.txt
@@ -33,7 +33,7 @@ When libGL.so initializes itself it uses the DRI to determine the
appropriate hardware driver for each screen on the local X display.
The hardware drivers are expected to be in the /usr/X11R6/lib/modules/dri/
directory. Drivers are named with the convention _dri.so where
- is a driver such as "tdfx", "i810", "gamma", etc.
+ is a driver such as "radeon", "i965", "nouveau", etc.
The LIBGL_DRIVERS_DIR environment variable may be used to specify a
different DRI modules directory, overriding /usr/X11R6/lib/modules/dri/.
diff --git a/include/pci_ids/pci_id_driver_map.h b/include/pci_ids/pci_id_driver_map.h
index 9112efd378b..54b56d5f991 100644
--- a/include/pci_ids/pci_id_driver_map.h
+++ b/include/pci_ids/pci_id_driver_map.h
@@ -7,14 +7,6 @@
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
#endif
-#if !defined(DRIVER_MAP_DRI2_ONLY) && !defined(DRIVER_MAP_GALLIUM_ONLY)
-static const int i810_chip_ids[] = {
-#define CHIPSET(chip, desc, misc) chip,
-#include "pci_ids/i810_pci_ids.h"
-#undef CHIPSET
-};
-#endif
-
static const int i915_chip_ids[] = {
#define CHIPSET(chip, desc, misc) chip,
#include "pci_ids/i915_pci_ids.h"
@@ -59,9 +51,6 @@ static const struct {
const int *chip_ids;
int num_chips_ids;
} driver_map[] = {
-#if !defined(DRIVER_MAP_DRI2_ONLY) && !defined(DRIVER_MAP_GALLIUM_ONLY)
- { 0x8086, "i810", i810_chip_ids, ARRAY_SIZE(i810_chip_ids) },
-#endif
{ 0x8086, "i915", i915_chip_ids, ARRAY_SIZE(i915_chip_ids) },
{ 0x8086, "i965", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) },
#ifndef DRIVER_MAP_GALLIUM_ONLY
diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
index e7dba5a68de..eb62c824f35 100644
--- a/src/glx/dri_common.c
+++ b/src/glx/dri_common.c
@@ -91,7 +91,7 @@ ErrorMessageF(const char *f, ...)
* directories specified by the \c LIBGL_DRIVERS_PATH environment variable in
* order to find the driver.
*
- * \param driverName - a name like "tdfx", "i810", "mga", etc.
+ * \param driverName - a name like "i965", "radeon", "nouveau", etc.
*
* \returns
* A handle from \c dlopen, or \c NULL if driver file not found.
diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c
index 6f3b2b8900c..a52159c0657 100644
--- a/src/glx/dri_glx.c
+++ b/src/glx/dri_glx.c
@@ -94,7 +94,7 @@ static const struct glx_context_vtable dri_context_vtable;
/*
* Given a display pointer and screen number, determine the name of
- * the DRI driver for the screen. (I.e. "r128", "tdfx", etc).
+ * the DRI driver for the screen (i.e., "i965", "radeon", "nouveau", etc).
* Return True for success, False for failure.
*/
static Bool
@@ -384,7 +384,7 @@ CallCreateNewScreen(Display *dpy, int scrn, struct dri_screen *psc,
goto handle_error;
}
- /* Get device name (like "tdfx") and the ddx version numbers.
+ /* Get device name (like "radeon") and the ddx version numbers.
* We'll check the version in each DRI driver's "createNewScreen"
* function. */
if (!XF86DRIGetClientDriverName(dpy, scrn,
diff --git a/src/mesa/drivers/dri/i810/Makefile b/src/mesa/drivers/dri/i810/Makefile
deleted file mode 100644
index edc6dd21732..00000000000
--- a/src/mesa/drivers/dri/i810/Makefile
+++ /dev/null
@@ -1,30 +0,0 @@
-# src/mesa/drivers/dri/i810/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = i810_dri.so
-
-include ../Makefile.defines
-
-DRIVER_SOURCES = \
- i810context.c \
- i810ioctl.c \
- i810render.c \
- i810screen.c \
- i810span.c \
- i810state.c \
- i810tex.c \
- i810texmem.c \
- i810texstate.c \
- i810tris.c \
- i810vb.c
-
-C_SOURCES = \
- $(COMMON_SOURCES) \
- $(DRIVER_SOURCES)
-
-ASM_SOURCES =
-
-include ../Makefile.targets
-
diff --git a/src/mesa/drivers/dri/i810/i810_3d_reg.h b/src/mesa/drivers/dri/i810/i810_3d_reg.h
deleted file mode 100644
index 2fbeb64978e..00000000000
--- a/src/mesa/drivers/dri/i810/i810_3d_reg.h
+++ /dev/null
@@ -1,630 +0,0 @@
-
-#ifndef I810_3D_REG_H
-#define I810_3D_REG_H
-
-#include "i810_reg.h"
-
-/* Registers not used in the X server
- */
-
-#define I810_NOP_ID 0x2094
-#define I810_NOP_ID_MASK ((1<<22)-1)
-
-
-/* 3D instructions
- */
-
-
-/* GFXRENDERSTATE_PV_PIXELIZATION_RULE, p149
- *
- * Format:
- * 0: GFX_OP_PV_RULE | PV_*
- *
- */
-#define GFX_OP_PV_RULE ((0x3<<29)|(0x7<<24))
-#define PV_SMALL_TRI_FILTER_ENABLE (0x1<<11)
-#define PV_UPDATE_PIXRULE (0x1<<10)
-#define PV_PIXRULE_ENABLE (0x1<<9)
-#define PV_UPDATE_LINELIST (0x1<<8)
-#define PV_LINELIST_MASK (0x3<<6)
-#define PV_LINELIST_PV0 (0x0<<6)
-#define PV_LINELIST_PV1 (0x1<<6)
-#define PV_UPDATE_TRIFAN (0x1<<5)
-#define PV_TRIFAN_MASK (0x3<<3)
-#define PV_TRIFAN_PV0 (0x0<<3)
-#define PV_TRIFAN_PV1 (0x1<<3)
-#define PV_TRIFAN_PV2 (0x2<<3)
-#define PV_UPDATE_TRISTRIP (0x1<<2)
-#define PV_TRISTRIP_MASK (0x3<<0)
-#define PV_TRISTRIP_PV0 (0x0<<0)
-#define PV_TRISTRIP_PV1 (0x1<<0)
-#define PV_TRISTRIP_PV2 (0x2<<0)
-
-
-/* GFXRENDERSTATE_SCISSOR_ENABLE, p146
- *
- * Format:
- * 0: GFX_OP_SCISSOR | SC_*
- */
-#define GFX_OP_SCISSOR ((0x3<<29)|(0x1c<<24)|(0x10<<19))
-#define SC_UPDATE_SCISSOR (0x1<<1)
-#define SC_ENABLE_MASK (0x1<<0)
-#define SC_ENABLE (0x1<<0)
-
-/* GFXRENDERSTATE_SCISSOR_INFO, p147
- *
- * Format:
- * 0: GFX_OP_SCISSOR_INFO
- * 1: SCI_MIN_*
- * 2: SCI_MAX_*
- */
-#define GFX_OP_SCISSOR_INFO ((0x3<<29)|(0x1d<<24)|(0x81<<16)|(0x1))
-#define SCI_YMIN_MASK (0xffff<<16)
-#define SCI_XMIN_MASK (0xffff<<0)
-#define SCI_YMAX_MASK (0xffff<<16)
-#define SCI_XMAX_MASK (0xffff<<0)
-
-/* GFXRENDERSTATE_DRAWING_RECT_INFO, p144
- *
- * Format:
- * 0: GFX_OP_DRAWRECT_INFO
- * 1: DR1_*
- * 2: DR2_*
- * 3: DR3_*
- * 4: DR4_*
- */
-#define GFX_OP_DRAWRECT_INFO ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3))
-#define DR1_RECT_CLIP_ENABLE (0x0<<31)
-#define DR1_RECT_CLIP_DISABLE (0x1<<31)
-#define DR1_X_DITHER_BIAS_MASK (0x3<<26)
-#define DR1_X_DITHER_BIAS_SHIFT 26
-#define DR1_Y_DITHER_BIAS_MASK (0x3<<24)
-#define DR1_Y_DITHER_BIAS_SHIFT 24
-#define DR2_YMIN_MASK (0xffff<<16)
-#define DR2_XMIN_MASK (0xffff<<0)
-#define DR3_YMAX_MASK (0xffff<<16)
-#define DR3_XMAX_MASK (0xffff<<0)
-#define DR4_YORG_MASK (0x3ff<<16)
-#define DR4_XORG_MASK (0x7ff<<0)
-
-
-/* GFXRENDERSTATE_LINEWIDTH_CULL_SHADE_MODE, p140
- *
- * Format:
- * 0: GFX_OP_LINEWIDTH_CULL_SHADE_MODE | LCS_*
- */
-#define GFX_OP_LINEWIDTH_CULL_SHADE_MODE ((0x3<<29)|(0x2<<24))
-#define LCS_UPDATE_ZMODE (0x1<<20)
-#define LCS_Z_MASK (0xf<<16)
-#define LCS_Z_NEVER (0x1<<16)
-#define LCS_Z_LESS (0x2<<16)
-#define LCS_Z_EQUAL (0x3<<16)
-#define LCS_Z_LEQUAL (0x4<<16)
-#define LCS_Z_GREATER (0x5<<16)
-#define LCS_Z_NOTEQUAL (0x6<<16)
-#define LCS_Z_GEQUAL (0x7<<16)
-#define LCS_Z_ALWAYS (0x8<<16)
-#define LCS_UPDATE_LINEWIDTH (0x1<<15)
-#define LCS_LINEWIDTH_MASK (0x7<<12)
-#define LCS_LINEWIDTH_SHIFT 12
-#define LCS_LINEWIDTH_0_5 (0x1<<12)
-#define LCS_LINEWIDTH_1_0 (0x2<<12)
-#define LCS_LINEWIDTH_2_0 (0x4<<12)
-#define LCS_LINEWIDTH_3_0 (0x6<<12)
-#define LCS_UPDATE_ALPHA_INTERP (0x1<<11)
-#define LCS_ALPHA_FLAT (0x1<<10)
-#define LCS_ALPHA_INTERP (0x0<<10)
-#define LCS_UPDATE_FOG_INTERP (0x1<<9)
-#define LCS_FOG_INTERP (0x0<<8)
-#define LCS_FOG_FLAT (0x1<<8)
-#define LCS_UPDATE_SPEC_INTERP (0x1<<7)
-#define LCS_SPEC_INTERP (0x0<<6)
-#define LCS_SPEC_FLAT (0x1<<6)
-#define LCS_UPDATE_RGB_INTERP (0x1<<5)
-#define LCS_RGB_INTERP (0x0<<4)
-#define LCS_RGB_FLAT (0x1<<4)
-#define LCS_UPDATE_CULL_MODE (0x1<<3)
-#define LCS_CULL_MASK (0x7<<0)
-#define LCS_CULL_DISABLE (0x1<<0)
-#define LCS_CULL_CW (0x2<<0)
-#define LCS_CULL_CCW (0x3<<0)
-#define LCS_CULL_BOTH (0x4<<0)
-
-#define LCS_INTERP_FLAT (LCS_ALPHA_FLAT|LCS_RGB_FLAT|LCS_SPEC_FLAT)
-#define LCS_UPDATE_INTERP (LCS_UPDATE_ALPHA_INTERP| \
- LCS_UPDATE_RGB_INTERP| \
- LCS_UPDATE_SPEC_INTERP)
-
-
-/* GFXRENDERSTATE_BOOLEAN_ENA_1, p142
- *
- */
-#define GFX_OP_BOOL_1 ((0x3<<29)|(0x3<<24))
-#define B1_UPDATE_SPEC_SETUP_ENABLE (1<<19)
-#define B1_SPEC_SETUP_ENABLE (1<<18)
-#define B1_UPDATE_ALPHA_SETUP_ENABLE (1<<17)
-#define B1_ALPHA_SETUP_ENABLE (1<<16)
-#define B1_UPDATE_CI_KEY_ENABLE (1<<15)
-#define B1_CI_KEY_ENABLE (1<<14)
-#define B1_UPDATE_CHROMAKEY_ENABLE (1<<13)
-#define B1_CHROMAKEY_ENABLE (1<<12)
-#define B1_UPDATE_Z_BIAS_ENABLE (1<<11)
-#define B1_Z_BIAS_ENABLE (1<<10)
-#define B1_UPDATE_SPEC_ENABLE (1<<9)
-#define B1_SPEC_ENABLE (1<<8)
-#define B1_UPDATE_FOG_ENABLE (1<<7)
-#define B1_FOG_ENABLE (1<<6)
-#define B1_UPDATE_ALPHA_TEST_ENABLE (1<<5)
-#define B1_ALPHA_TEST_ENABLE (1<<4)
-#define B1_UPDATE_BLEND_ENABLE (1<<3)
-#define B1_BLEND_ENABLE (1<<2)
-#define B1_UPDATE_Z_TEST_ENABLE (1<<1)
-#define B1_Z_TEST_ENABLE (1<<0)
-
-/* GFXRENDERSTATE_BOOLEAN_ENA_2, p143
- *
- */
-#define GFX_OP_BOOL_2 ((0x3<<29)|(0x4<<24))
-#define B2_UPDATE_MAP_CACHE_ENABLE (1<<17)
-#define B2_MAP_CACHE_ENABLE (1<<16)
-#define B2_UPDATE_ALPHA_DITHER_ENABLE (1<<15)
-#define B2_ALPHA_DITHER_ENABLE (1<<14)
-#define B2_UPDATE_FOG_DITHER_ENABLE (1<<13)
-#define B2_FOG_DITHER_ENABLE (1<<12)
-#define B2_UPDATE_SPEC_DITHER_ENABLE (1<<11)
-#define B2_SPEC_DITHER_ENABLE (1<<10)
-#define B2_UPDATE_RGB_DITHER_ENABLE (1<<9)
-#define B2_RGB_DITHER_ENABLE (1<<8)
-#define B2_UPDATE_FB_WRITE_ENABLE (1<<3)
-#define B2_FB_WRITE_ENABLE (1<<2)
-#define B2_UPDATE_ZB_WRITE_ENABLE (1<<1)
-#define B2_ZB_WRITE_ENABLE (1<<0)
-
-
-/* GFXRENDERSTATE_FOG_COLOR, p144
- */
-#define GFX_OP_FOG_COLOR ((0x3<<29)|(0x15<<24))
-#define FOG_RED_SHIFT 16
-#define FOG_GREEN_SHIFT 8
-#define FOG_BLUE_SHIFT 0
-#define FOG_RESERVED_MASK ((0x7<<16)|(0x3<<8)|(0x3))
-
-
-/* GFXRENDERSTATE_Z_BIAS_ALPHA_FUNC_REF, p139
- */
-#define GFX_OP_ZBIAS_ALPHAFUNC ((0x3<<29)|(0x14<<24))
-#define ZA_UPDATE_ZBIAS (1<<22)
-#define ZA_ZBIAS_SHIFT 14
-#define ZA_ZBIAS_MASK (0xff<<14)
-#define ZA_UPDATE_ALPHAFUNC (1<<13)
-#define ZA_ALPHA_MASK (0xf<<9)
-#define ZA_ALPHA_NEVER (1<<9)
-#define ZA_ALPHA_LESS (2<<9)
-#define ZA_ALPHA_EQUAL (3<<9)
-#define ZA_ALPHA_LEQUAL (4<<9)
-#define ZA_ALPHA_GREATER (5<<9)
-#define ZA_ALPHA_NOTEQUAL (6<<9)
-#define ZA_ALPHA_GEQUAL (7<<9)
-#define ZA_ALPHA_ALWAYS (8<<9)
-#define ZA_UPDATE_ALPHAREF (1<<8)
-#define ZA_ALPHAREF_MASK (0xff<<0)
-#define ZA_ALPHAREF_SHIFT 0
-#define ZA_ALPHAREF_RESERVED (0x7<<0)
-
-
-/* GFXRENDERSTATE_SRC_DST_BLEND_MONO, p136
- */
-#define GFX_OP_SRC_DEST_MONO ((0x3<<29)|(0x8<<24))
-#define SDM_UPDATE_MONO_ENABLE (1<<13)
-#define SDM_MONO_ENABLE (1<<12)
-#define SDM_UPDATE_SRC_BLEND (1<<11)
-#define SDM_SRC_MASK (0xf<<6)
-#define SDM_SRC_ZERO (0x1<<6)
-#define SDM_SRC_ONE (0x2<<6)
-#define SDM_SRC_SRC_COLOR (0x3<<6)
-#define SDM_SRC_INV_SRC_COLOR (0x4<<6)
-#define SDM_SRC_SRC_ALPHA (0x5<<6)
-#define SDM_SRC_INV_SRC_ALPHA (0x6<<6)
-#define SDM_SRC_DST_COLOR (0x9<<6)
-#define SDM_SRC_INV_DST_COLOR (0xa<<6)
-#define SDM_SRC_BOTH_SRC_ALPHA (0xc<<6)
-#define SDM_SRC_BOTH_INV_SRC_ALPHA (0xd<<6)
-#define SDM_UPDATE_DST_BLEND (1<<5)
-#define SDM_DST_MASK (0xf<<0)
-#define SDM_DST_ZERO (0x1<<0)
-#define SDM_DST_ONE (0x2<<0)
-#define SDM_DST_SRC_COLOR (0x3<<0)
-#define SDM_DST_INV_SRC_COLOR (0x4<<0)
-#define SDM_DST_SRC_ALPHA (0x5<<0)
-#define SDM_DST_INV_SRC_ALPHA (0x6<<0)
-#define SDM_DST_DST_COLOR (0x9<<0)
-#define SDM_DST_INV_DST_COLOR (0xa<<0)
-#define SDM_DST_BOTH_SRC_ALPHA (0xc<<0)
-#define SDM_DST_BOTH_INV_SRC_ALPHA (0xd<<0)
-
-
-/* GFXRENDERSTATE_COLOR_FACTOR, p134
- *
- * Format:
- * 0: GFX_OP_COLOR_FACTOR
- * 1: ARGB8888 color factor
- */
-#define GFX_OP_COLOR_FACTOR ((0x3<<29)|(0x1d<<24)|(0x1<<16)|0x0)
-
-/* GFXRENDERSTATE_MAP_ALPHA_BLEND_STAGES, p132
- */
-#define GFX_OP_MAP_ALPHA_STAGES ((0x3<<29)|(0x1<<24))
-#define MA_STAGE_SHIFT 20
-#define MA_STAGE_0 (0<<20)
-#define MA_STAGE_1 (1<<20)
-#define MA_STAGE_2 (2<<20)
-
-#define MA_ARG_ONE (0x0<<2)
-#define MA_ARG_ALPHA_FACTOR (0x1<<2)
-#define MA_ARG_ITERATED_ALPHA (0x3<<2)
-#define MA_ARG_CURRENT_ALPHA (0x5<<2)
-#define MA_ARG_TEX0_ALPHA (0x6<<2)
-#define MA_ARG_TEX1_ALPHA (0x7<<2)
-#define MA_ARG_INVERT (0x1)
-#define MA_ARG_DONT_INVERT (0x0)
-
-#define MA_UPDATE_ARG1 (1<<18)
-#define MA_ARG1_SHIFT 13
-#define MA_ARG1_MASK (0x1d << MA_ARG1_SHIFT)
-
-#define MA_UPDATE_ARG2 (1<<12)
-#define MA_ARG2_SHIFT 6
-#define MA_ARG2_MASK (0x1d << MA_ARG2_SHIFT)
-
-#define MA_UPDATE_OP (1<<5)
-#define MA_OP_MASK (0xf)
-#define MA_OP_ARG1 (0x1)
-#define MA_OP_ARG2 (0x2)
-#define MA_OP_MODULATE (0x3)
-#define MA_OP_MODULATE_X2 (0x4)
-#define MA_OP_MODULATE_X4 (0x5)
-#define MA_OP_ADD (0x6)
-#define MA_OP_ADD_SIGNED (0x7)
-#define MA_OP_LIN_BLEND_ITER_ALPHA (0x8)
-#define MA_OP_LIN_BLEND_ALPHA_FACTOR (0xa)
-#define MA_OP_LIN_BLEND_TEX0_ALPHA (0x10)
-#define MA_OP_LIN_BLEND_TEX1_ALPHA (0x11)
-#define MA_OP_SUBTRACT (0x14)
-
-
-/* GFXRENDERSTATE_MAP_COLOR_BLEND_STAGES, p129
- */
-#define GFX_OP_MAP_COLOR_STAGES ((0x3<<29)|(0x0<<24))
-#define MC_STAGE_SHIFT 20
-#define MC_STAGE_0 (0<<20)
-#define MC_STAGE_1 (1<<20)
-#define MC_STAGE_2 (2<<20)
-#define MC_UPDATE_DEST (1<<19)
-#define MC_DEST_MASK (1<<18)
-#define MC_DEST_CURRENT (0<<18)
-#define MC_DEST_ACCUMULATOR (1<<18)
-
-#define MC_ARG_ONE (0x0<<2)
-#define MC_ARG_COLOR_FACTOR (0x1<<2)
-#define MC_ARG_ACCUMULATOR (0x2<<2)
-#define MC_ARG_ITERATED_COLOR (0x3<<2)
-#define MC_ARG_SPECULAR_COLOR (0x4<<2)
-#define MC_ARG_CURRENT_COLOR (0x5<<2)
-#define MC_ARG_TEX0_COLOR (0x6<<2)
-#define MC_ARG_TEX1_COLOR (0x7<<2)
-#define MC_ARG_DONT_REPLICATE_ALPHA (0x0<<1)
-#define MC_ARG_REPLICATE_ALPHA (0x1<<1)
-#define MC_ARG_DONT_INVERT (0x0)
-#define MC_ARG_INVERT (0x1)
-
-#define MC_UPDATE_ARG1 (1<<17)
-#define MC_ARG1_SHIFT 12
-#define MC_ARG1_MASK (0x1f << MC_ARG1_SHIFT)
-
-#define MC_UPDATE_ARG2 (1<<11)
-#define MC_ARG2_SHIFT 6
-#define MC_ARG2_MASK (0x1f << MC_ARG2_SHIFT)
-
-#define MC_UPDATE_OP (1<<5)
-#define MC_OP_MASK (0xf)
-#define MC_OP_DISABLE (0x0)
-#define MC_OP_ARG1 (0x1)
-#define MC_OP_ARG2 (0x2)
-#define MC_OP_MODULATE (0x3)
-#define MC_OP_MODULATE_X2 (0x4)
-#define MC_OP_MODULATE_X4 (0x5)
-#define MC_OP_ADD (0x6)
-#define MC_OP_ADD_SIGNED (0x7)
-#define MC_OP_LIN_BLEND_ITER_ALPHA (0x8)
-#define MC_OP_LIN_BLEND_ALPHA_FACTOR (0xa)
-#define MC_OP_LIN_BLEND_TEX0_ALPHA (0x10)
-#define MC_OP_LIN_BLEND_TEX1_ALPHA (0x11)
-#define MC_OP_LIN_BLEND_TEX0_COLOR (0x12)
-#define MC_OP_LIN_BLEND_TEX1_COLOR (0x13)
-#define MC_OP_SUBTRACT (0x14)
-
-/* GFXRENDERSTATE_MAP_PALETTE_LOAD, p128
- *
- * Format:
- * 0: GFX_OP_MAP_PALETTE_LOAD
- * 1: 16bpp color[0]
- * ...
- * 256: 16bpp color[255]
- */
-#define GFX_OP_MAP_PALETTE_LOAD ((0x3<<29)|(0x1d<<24)|(0x82<<16)|0xff)
-
-/* GFXRENDERSTATE_MAP_LOD_CONTROL, p127
- */
-#define GFX_OP_MAP_LOD_CTL ((0x3<<29)|(0x1c<<24)|(0x4<<19))
-#define MLC_MAP_ID_SHIFT 16
-#define MLC_MAP_0 (0<<16)
-#define MLC_MAP_1 (1<<16)
-#define MLC_UPDATE_DITHER_WEIGHT (1<<10)
-#define MLC_DITHER_WEIGHT_MASK (0x3<<8)
-#define MLC_DITHER_WEIGHT_FULL (0x0<<8)
-#define MLC_DITHER_WEIGHT_50 (0x1<<8)
-#define MLC_DITHER_WEIGHT_25 (0x2<<8)
-#define MLC_DITHER_WEIGHT_12 (0x3<<8)
-#define MLC_UPDATE_LOD_BIAS (1<<7)
-#define MLC_LOD_BIAS_MASK ((1<<7)-1)
-
-/* GFXRENDERSTATE_MAP_LOD_LIMITS, p126
- */
-#define GFX_OP_MAP_LOD_LIMITS ((0x3<<29)|(0x1c<<24)|(0x3<<19))
-#define MLL_MAP_ID_SHIFT 16
-#define MLL_MAP_0 (0<<16)
-#define MLL_MAP_1 (1<<16)
-#define MLL_UPDATE_MAX_MIP (1<<13)
-#define MLL_MAX_MIP_SHIFT 5
-#define MLL_MAX_MIP_MASK (0xff<<5)
-#define MLL_MAX_MIP_ONE (0x10<<5)
-#define MLL_UPDATE_MIN_MIP (1<<4)
-#define MLL_MIN_MIP_SHIFT 0
-#define MLL_MIN_MIP_MASK (0xf<<0)
-
-/* GFXRENDERSTATE_MAP_FILTER, p124
- */
-#define GFX_OP_MAP_FILTER ((0x3<<29)|(0x1c<<24)|(0x2<<19))
-#define MF_MAP_ID_SHIFT 16
-#define MF_MAP_0 (0<<16)
-#define MF_MAP_1 (1<<16)
-#define MF_UPDATE_ANISOTROPIC (1<<12)
-#define MF_ANISOTROPIC_MASK (1<<10)
-#define MF_ANISOTROPIC_ENABLE (1<<10)
-#define MF_UPDATE_MIP_FILTER (1<<9)
-#define MF_MIP_MASK (0x3<<6)
-#define MF_MIP_NONE (0x0<<6)
-#define MF_MIP_NEAREST (0x1<<6)
-#define MF_MIP_DITHER (0x2<<6)
-#define MF_MIP_LINEAR (0x3<<6)
-#define MF_UPDATE_MAG_FILTER (1<<5)
-#define MF_MAG_MASK (1<<3)
-#define MF_MAG_LINEAR (1<<3)
-#define MF_MAG_NEAREST (0<<3)
-#define MF_UPDATE_MIN_FILTER (1<<2)
-#define MF_MIN_MASK (1<<0)
-#define MF_MIN_LINEAR (1<<0)
-#define MF_MIN_NEAREST (0<<0)
-
-/* GFXRENDERSTATE_MAP_INFO, p118
- */
-#define GFX_OP_MAP_INFO ((0x3<<29)|(0x1d<<24)|0x2)
-#define MI1_MAP_ID_SHIFT 28
-#define MI1_MAP_0 (0<<28)
-#define MI1_MAP_1 (1<<28)
-#define MI1_FMT_MASK (0x7<<24)
-#define MI1_FMT_8CI (0x0<<24)
-#define MI1_FMT_8BPP (0x1<<24)
-#define MI1_FMT_16BPP (0x2<<24)
-#define MI1_FMT_422 (0x5<<24)
-#define MI1_PF_MASK (0x3<<21)
-#define MI1_PF_8CI_RGB565 (0x0<<21)
-#define MI1_PF_8CI_ARGB1555 (0x1<<21)
-#define MI1_PF_8CI_ARGB4444 (0x2<<21)
-#define MI1_PF_8CI_AY88 (0x3<<21)
-#define MI1_PF_16BPP_RGB565 (0x0<<21)
-#define MI1_PF_16BPP_ARGB1555 (0x1<<21)
-#define MI1_PF_16BPP_ARGB4444 (0x2<<21)
-#define MI1_PF_16BPP_AY88 (0x3<<21)
-#define MI1_PF_422_YCRCB_SWAP_Y (0x0<<21)
-#define MI1_PF_422_YCRCB (0x1<<21)
-#define MI1_PF_422_YCRCB_SWAP_UV (0x2<<21)
-#define MI1_PF_422_YCRCB_SWAP_YUV (0x3<<21)
-#define MI1_OUTPUT_CHANNEL_MASK (0x3<<19)
-#define MI1_COLOR_CONV_ENABLE (1<<18)
-#define MI1_VERT_STRIDE_MASK (1<<17)
-#define MI1_VERT_STRIDE_1 (1<<17)
-#define MI1_VERT_OFFSET_MASK (1<<16)
-#define MI1_VERT_OFFSET_1 (1<<16)
-#define MI1_ENABLE_FENCE_REGS (1<<10)
-#define MI1_TILED_SURFACE (1<<9)
-#define MI1_TILE_WALK_X (0<<8)
-#define MI1_TILE_WALK_Y (1<<8)
-#define MI1_PITCH_MASK (0xf<<0)
-#define MI2_DIMENSIONS_ARE_LOG2 (1<<31)
-#define MI2_DIMENSIONS_ARE_EXACT (0<<31)
-#define MI2_HEIGHT_SHIFT 16
-#define MI2_HEIGHT_MASK (0x1ff<<16)
-#define MI2_WIDTH_SHIFT 0
-#define MI2_WIDTH_MASK (0x1ff<<0)
-#define MI3_BASE_ADDR_MASK (~0xf)
-
-/* GFXRENDERSTATE_MAP_COORD_SETS, p116
- */
-#define GFX_OP_MAP_COORD_SETS ((0x3<<29)|(0x1c<<24)|(0x1<<19))
-#define MCS_COORD_ID_SHIFT 16
-#define MCS_COORD_0 (0<<16)
-#define MCS_COORD_1 (1<<16)
-#define MCS_UPDATE_NORMALIZED (1<<15)
-#define MCS_NORMALIZED_COORDS_MASK (1<<14)
-#define MCS_NORMALIZED_COORDS (1<<14)
-#define MCS_UPDATE_V_STATE (1<<7)
-#define MCS_V_STATE_MASK (0x3<<4)
-#define MCS_V_WRAP (0x0<<4)
-#define MCS_V_MIRROR (0x1<<4)
-#define MCS_V_CLAMP (0x2<<4)
-#define MCS_V_WRAP_SHORTEST (0x3<<4)
-#define MCS_UPDATE_U_STATE (1<<3)
-#define MCS_U_STATE_MASK (0x3<<0)
-#define MCS_U_WRAP (0x0<<0)
-#define MCS_U_MIRROR (0x1<<0)
-#define MCS_U_CLAMP (0x2<<0)
-#define MCS_U_WRAP_SHORTEST (0x3<<0)
-
-/* GFXRENDERSTATE_MAP_TEXELS, p115
- */
-#define GFX_OP_MAP_TEXELS ((0x3<<29)|(0x1c<<24)|(0x0<<19))
-#define MT_UPDATE_TEXEL1_STATE (1<<15)
-#define MT_TEXEL1_DISABLE (0<<14)
-#define MT_TEXEL1_ENABLE (1<<14)
-#define MT_TEXEL1_COORD0 (0<<11)
-#define MT_TEXEL1_COORD1 (1<<11)
-#define MT_TEXEL1_MAP0 (0<<8)
-#define MT_TEXEL1_MAP1 (1<<8)
-#define MT_UPDATE_TEXEL0_STATE (1<<7)
-#define MT_TEXEL0_DISABLE (0<<6)
-#define MT_TEXEL0_ENABLE (1<<6)
-#define MT_TEXEL0_COORD0 (0<<3)
-#define MT_TEXEL0_COORD1 (1<<3)
-#define MT_TEXEL0_MAP0 (0<<0)
-#define MT_TEXEL0_MAP1 (1<<0)
-
-/* GFXRENDERSTATE_VERTEX_FORMAT, p110
- */
-#define GFX_OP_VERTEX_FMT ((0x3<<29)|(0x5<<24))
-#define VF_TEXCOORD_COUNT_SHIFT 8
-#define VF_TEXCOORD_COUNT_0 (0<<8)
-#define VF_TEXCOORD_COUNT_1 (1<<8)
-#define VF_TEXCOORD_COUNT_2 (2<<8)
-#define VF_SPEC_FOG_ENABLE (1<<7)
-#define VF_RGBA_ENABLE (1<<6)
-#define VF_Z_OFFSET_ENABLE (1<<5)
-#define VF_XYZ (0x1<<1)
-#define VF_XYZW (0x2<<1)
-#define VF_XY (0x3<<1)
-#define VF_XYW (0x4<<1)
-
-
-#define VERT_X_MASK (~0xf)
-#define VERT_X_EDGE_V2V0 (1<<2)
-#define VERT_X_EDGE_V1V2 (1<<1)
-#define VERT_X_EDGE_V0V1 (1<<0)
-
-/* Not enabled fields should not be sent to hardware:
- */
-typedef struct {
- union {
- float x;
- unsigned int edge_flags;
- } x;
- float y;
- float z;
- float z_bias;
- float oow;
- unsigned int argb;
- unsigned int fog_spec_rgb; /* spec g and r ignored. */
- float tu0;
- float tv0;
- float tu1;
- float tv1;
-} i810_full_vertex;
-
-
-
-/* GFXCMDPARSER_BATCH_BUFFER, p105
- *
- * Not clear whether start address must be shifted or not. Not clear
- * whether address is physical system memory, or subject to GTT
- * translation. Because the address appears to be 32 bits long,
- * perhaps it refers to physical system memory...
- */
-#define CMD_OP_BATCH_BUFFER ((0x0<<29)|(0x30<<23)|0x1)
-#define BB1_START_ADDR_MASK (~0x7)
-#define BB1_PROTECTED (1<<0)
-#define BB1_UNPROTECTED (0<<0)
-#define BB2_END_ADDR_MASK (~0x7)
-
-/* Hardware seems to barf on buffers larger than this (in strange ways)...
- */
-#define MAX_BATCH (512*1024)
-
-
-/* GFXCMDPARSER_Z_BUFFER_INFO, p98
- *
- * Base address is in GTT space, and must be 4K aligned
- */
-#define CMD_OP_Z_BUFFER_INFO ((0x0<<29)|(0x16<<23))
-#define ZB_BASE_ADDR_SHIFT 0
-#define ZB_BASE_ADDR_MASK (~((1<<12)-1))
-#define ZB_PITCH_512B (0x0<<0)
-#define ZB_PITCH_1K (0x1<<0)
-#define ZB_PITCH_2K (0x2<<0)
-#define ZB_PITCH_4K (0x3<<0)
-
-/* GFXCMDPARSER_FRONT_BUFFER_INFO, p97
- *
- * Format:
- * 0: CMD_OP_FRONT_BUFFER_INFO | (pitch<
- *
- */
-
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-#include "main/points.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "vbo/vbo.h"
-
-#include "tnl/t_pipeline.h"
-
-#include "drivers/common/driverfuncs.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "i810state.h"
-#include "i810tex.h"
-#include "i810span.h"
-#include "i810tris.h"
-#include "i810vb.h"
-#include "i810ioctl.h"
-
-#include "drirenderbuffer.h"
-#include "utils.h"
-
-#ifndef I810_DEBUG
-int I810_DEBUG = (0);
-#endif
-
-PUBLIC const char __driConfigOptions[] = { 0 };
-const GLuint __driNConfigOptions = 0;
-
-static const GLubyte *i810GetString( struct gl_context *ctx, GLenum name )
-{
- static char buffer[128];
-
- switch (name) {
- case GL_VENDOR:
- return (GLubyte *)"Keith Whitwell";
- case GL_RENDERER: {
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- const char * chipset;
-
- switch (imesa->i810Screen->deviceID) {
- case PCI_CHIP_I810: chipset = "i810"; break;
- case PCI_CHIP_I810_DC100: chipset = "i810 DC-100"; break;
- case PCI_CHIP_I810_E: chipset = "i810E"; break;
- case PCI_CHIP_I815: chipset = "i815"; break;
- default: chipset = "Unknown i810-class Chipset"; break;
- }
-
- (void) driGetRendererString( buffer, chipset, 0 );
- return (GLubyte *) buffer;
- }
- default:
- return 0;
- }
-}
-
-static void i810BufferSize(struct gl_framebuffer *buffer, GLuint *width, GLuint *height)
-{
- GET_CURRENT_CONTEXT(ctx);
- i810ContextPtr imesa = I810_CONTEXT(ctx);
-
- /* Need to lock to make sure the driDrawable is uptodate. This
- * information is used to resize Mesa's software buffers, so it has
- * to be correct.
- */
- LOCK_HARDWARE(imesa);
- *width = imesa->driDrawable->w;
- *height = imesa->driDrawable->h;
- UNLOCK_HARDWARE(imesa);
-}
-
-/* Extension strings exported by the i810 driver.
- */
-static const struct dri_extension card_extensions[] =
-{
- { "GL_ARB_multitexture", NULL },
- { "GL_ARB_texture_env_add", NULL },
- { "GL_ARB_texture_env_combine", NULL },
- { "GL_ARB_texture_env_crossbar", NULL },
- { "GL_ARB_texture_mirrored_repeat", NULL },
- { "GL_EXT_stencil_wrap", NULL },
- { "GL_EXT_texture_edge_clamp", NULL },
- { "GL_EXT_texture_env_combine", NULL },
- { "GL_EXT_texture_lod_bias", NULL },
- { "GL_EXT_texture_rectangle", NULL },
- { "GL_MESA_ycbcr_texture", NULL },
- { "GL_NV_blend_square", NULL },
- { NULL, NULL }
-};
-
-extern const struct tnl_pipeline_stage _i810_render_stage;
-
-static const struct tnl_pipeline_stage *i810_pipeline[] = {
- &_tnl_vertex_transform_stage,
- &_tnl_normal_transform_stage,
- &_tnl_lighting_stage,
- &_tnl_fog_coordinate_stage,
- &_tnl_texgen_stage,
- &_tnl_texture_transform_stage,
- /* REMOVE: point attenuation stage */
-#if 1
- &_i810_render_stage, /* ADD: unclipped rastersetup-to-dma */
-#endif
- &_tnl_render_stage,
- 0,
-};
-
-static const struct dri_debug_control debug_control[] =
-{
- { "fall", DEBUG_FALLBACKS },
- { "tex", DEBUG_TEXTURE },
- { "ioctl", DEBUG_IOCTL },
- { "prim", DEBUG_PRIMS },
- { "vert", DEBUG_VERTS },
- { "state", DEBUG_STATE },
- { "verb", DEBUG_VERBOSE },
- { "dri", DEBUG_DRI },
- { "dma", DEBUG_DMA },
- { "san", DEBUG_SANITY },
- { "sync", DEBUG_SYNC },
- { "sleep", DEBUG_SLEEP },
- { NULL, 0 }
-};
-
-GLboolean
-i810CreateContext( gl_api api,
- const struct gl_config *mesaVis,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate )
-{
- struct gl_context *ctx, *shareCtx;
- i810ContextPtr imesa;
- __DRIscreen *sPriv = driContextPriv->driScreenPriv;
- i810ScreenPrivate *i810Screen = (i810ScreenPrivate *)sPriv->private;
- I810SAREAPtr saPriv = (I810SAREAPtr)
- (((GLubyte *)sPriv->pSAREA) + i810Screen->sarea_priv_offset);
- struct dd_function_table functions;
-
- /* Allocate i810 context */
- imesa = (i810ContextPtr) CALLOC_STRUCT(i810_context_t);
- if (!imesa) {
- return GL_FALSE;
- }
-
- driContextPriv->driverPrivate = imesa;
-
- imesa->i810Screen = i810Screen;
- imesa->driScreen = sPriv;
- imesa->sarea = saPriv;
- imesa->glBuffer = NULL;
-
- /* Init default driver functions then plug in our I810-specific functions
- * (the texture functions are especially important)
- */
- _mesa_init_driver_functions( &functions );
- i810InitIoctlFuncs( &functions );
- i810InitTextureFuncs( &functions );
-
-
- /* Allocate the Mesa context */
- if (sharedContextPrivate)
- shareCtx = ((i810ContextPtr) sharedContextPrivate)->glCtx;
- else
- shareCtx = NULL;
- imesa->glCtx = _mesa_create_context(API_OPENGL, mesaVis, shareCtx,
- &functions, (void*) imesa);
- if (!imesa->glCtx) {
- FREE(imesa);
- return GL_FALSE;
- }
-
- (void) memset( imesa->texture_heaps, 0, sizeof( imesa->texture_heaps ) );
- make_empty_list( & imesa->swapped );
-
- imesa->nr_heaps = 1;
- imesa->texture_heaps[0] = driCreateTextureHeap( 0, imesa,
- i810Screen->textureSize,
- 12,
- I810_NR_TEX_REGIONS,
- imesa->sarea->texList,
- (unsigned *) & imesa->sarea->texAge, /* XXX we shouldn't cast! */
- & imesa->swapped,
- sizeof( struct i810_texture_object_t ),
- (destroy_texture_object_t *) i810DestroyTexObj );
-
-
-
- /* Set the maximum texture size small enough that we can guarentee
- * that both texture units can bind a maximal texture and have them
- * in memory at once.
- */
-
-
-
- ctx = imesa->glCtx;
- ctx->Const.MaxTextureUnits = 2;
- ctx->Const.MaxTextureImageUnits = 2;
- ctx->Const.MaxTextureCoordUnits = 2;
-
-
- /* FIXME: driCalcualteMaxTextureLevels assumes that mipmaps are tightly
- * FIXME: packed, but they're not in Intel graphics hardware.
- */
- driCalculateMaxTextureLevels( imesa->texture_heaps,
- imesa->nr_heaps,
- & ctx->Const,
- 4,
- 11, /* max 2D texture size is 2048x2048 */
- 0, /* 3D textures unsupported */
- 0, /* cube textures unsupported. */
- 0, /* texture rectangles unsupported. */
- 12,
- GL_FALSE,
- 0 );
-
- ctx->Const.MinLineWidth = 1.0;
- ctx->Const.MinLineWidthAA = 1.0;
- ctx->Const.MaxLineWidth = 3.0;
- ctx->Const.MaxLineWidthAA = 3.0;
- ctx->Const.LineWidthGranularity = 1.0;
-
- ctx->Const.MinPointSize = 1.0;
- ctx->Const.MinPointSizeAA = 1.0;
- ctx->Const.MaxPointSize = 3.0;
- ctx->Const.MaxPointSizeAA = 3.0;
- ctx->Const.PointSizeGranularity = 1.0;
-
- /* reinitialize the context point state.
- * It depend on constants in __struct gl_contextRec::Const
- */
- _mesa_init_point(ctx);
-
- ctx->Driver.GetBufferSize = i810BufferSize;
- ctx->Driver.GetString = i810GetString;
-
- /* Who owns who?
- */
- ctx->DriverCtx = (void *) imesa;
- imesa->glCtx = ctx;
-
- /* Initialize the software rasterizer and helper modules.
- */
- _swrast_CreateContext( ctx );
- _vbo_CreateContext( ctx );
- _tnl_CreateContext( ctx );
- _swsetup_CreateContext( ctx );
-
- /* Install the customized pipeline:
- */
- _tnl_destroy_pipeline( ctx );
- _tnl_install_pipeline( ctx, i810_pipeline );
-
- /* Configure swrast and T&L to match hardware characteristics:
- */
- _swrast_allow_pixel_fog( ctx, GL_FALSE );
- _swrast_allow_vertex_fog( ctx, GL_TRUE );
- _tnl_allow_pixel_fog( ctx, GL_FALSE );
- _tnl_allow_vertex_fog( ctx, GL_TRUE );
-
- /* Dri stuff
- */
- imesa->hHWContext = driContextPriv->hHWContext;
- imesa->driFd = sPriv->fd;
- imesa->driHwLock = &sPriv->pSAREA->lock;
-
- imesa->stipple_in_hw = 1;
- imesa->RenderIndex = ~0;
- imesa->dirty = I810_UPLOAD_CTX|I810_UPLOAD_BUFFERS;
- imesa->upload_cliprects = GL_TRUE;
-
- imesa->CurrentTexObj[0] = 0;
- imesa->CurrentTexObj[1] = 0;
-
- _math_matrix_ctr( &imesa->ViewportMatrix );
-
- driInitExtensions( ctx, card_extensions, GL_TRUE );
- /* XXX these should really go right after _mesa_init_driver_functions() */
- i810InitStateFuncs( ctx );
- i810InitTriFuncs( ctx );
- i810InitSpanFuncs( ctx );
- i810InitVB( ctx );
- i810InitState( ctx );
-
-#if DO_DEBUG
- I810_DEBUG = driParseDebugString( getenv( "I810_DEBUG" ),
- debug_control );
- I810_DEBUG |= driParseDebugString( getenv( "INTEL_DEBUG" ),
- debug_control );
-#endif
-
- return GL_TRUE;
-}
-
-void
-i810DestroyContext(__DRIcontext *driContextPriv)
-{
- i810ContextPtr imesa = (i810ContextPtr) driContextPriv->driverPrivate;
-
- assert(imesa); /* should never be null */
- if (imesa) {
- GLboolean release_texture_heaps;
-
-
- release_texture_heaps = (imesa->glCtx->Shared->RefCount == 1);
- _swsetup_DestroyContext( imesa->glCtx );
- _tnl_DestroyContext( imesa->glCtx );
- _vbo_DestroyContext( imesa->glCtx );
- _swrast_DestroyContext( imesa->glCtx );
-
- i810FreeVB( imesa->glCtx );
-
- /* free the Mesa context */
- imesa->glCtx->DriverCtx = NULL;
- _mesa_destroy_context(imesa->glCtx);
- if ( release_texture_heaps ) {
- /* This share group is about to go away, free our private
- * texture object data.
- */
- unsigned int i;
-
- for ( i = 0 ; i < imesa->nr_heaps ; i++ ) {
- driDestroyTextureHeap( imesa->texture_heaps[ i ] );
- imesa->texture_heaps[ i ] = NULL;
- }
-
- assert( is_empty_list( & imesa->swapped ) );
- }
-
- FREE(imesa);
- }
-}
-
-
-void i810XMesaSetFrontClipRects( i810ContextPtr imesa )
-{
- __DRIdrawable *dPriv = imesa->driDrawable;
-
- imesa->numClipRects = dPriv->numClipRects;
- imesa->pClipRects = dPriv->pClipRects;
- imesa->drawX = dPriv->x;
- imesa->drawY = dPriv->y;
-
- i810EmitDrawingRectangle( imesa );
- imesa->upload_cliprects = GL_TRUE;
-}
-
-
-void i810XMesaSetBackClipRects( i810ContextPtr imesa )
-{
- __DRIdrawable *dPriv = imesa->driDrawable;
-
- if (imesa->sarea->pf_enabled == 0 && dPriv->numBackClipRects == 0)
- {
- imesa->numClipRects = dPriv->numClipRects;
- imesa->pClipRects = dPriv->pClipRects;
- imesa->drawX = dPriv->x;
- imesa->drawY = dPriv->y;
- } else {
- imesa->numClipRects = dPriv->numBackClipRects;
- imesa->pClipRects = dPriv->pBackClipRects;
- imesa->drawX = dPriv->backX;
- imesa->drawY = dPriv->backY;
- }
-
- i810EmitDrawingRectangle( imesa );
- imesa->upload_cliprects = GL_TRUE;
-}
-
-
-static void i810XMesaWindowMoved( i810ContextPtr imesa )
-{
- /* Determine current color drawing buffer */
- switch (imesa->glCtx->DrawBuffer->_ColorDrawBufferIndexes[0]) {
- case BUFFER_FRONT_LEFT:
- i810XMesaSetFrontClipRects( imesa );
- break;
- case BUFFER_BACK_LEFT:
- i810XMesaSetBackClipRects( imesa );
- break;
- default:
- /* glDrawBuffer(GL_NONE or GL_FRONT_AND_BACK): software fallback */
- i810XMesaSetFrontClipRects( imesa );
- }
-}
-
-
-GLboolean
-i810UnbindContext(__DRIcontext *driContextPriv)
-{
- i810ContextPtr imesa = (i810ContextPtr) driContextPriv->driverPrivate;
- if (imesa) {
- imesa->dirty = I810_UPLOAD_CTX|I810_UPLOAD_BUFFERS;
- if (imesa->CurrentTexObj[0]) imesa->dirty |= I810_UPLOAD_TEX0;
- if (imesa->CurrentTexObj[1]) imesa->dirty |= I810_UPLOAD_TEX1;
- }
-
- return GL_TRUE;
-}
-
-
-GLboolean
-i810MakeCurrent(__DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv)
-{
- if (driContextPriv) {
- i810ContextPtr imesa = (i810ContextPtr) driContextPriv->driverPrivate;
-
- /* Shouldn't the readbuffer be stored also?
- */
- imesa->driDrawable = driDrawPriv;
-
- _mesa_make_current(imesa->glCtx,
- (struct gl_framebuffer *) driDrawPriv->driverPrivate,
- (struct gl_framebuffer *) driReadPriv->driverPrivate);
-
- /* Are these necessary?
- */
- i810XMesaWindowMoved( imesa );
- }
- else {
- _mesa_make_current(NULL, NULL, NULL);
- }
-
- return GL_TRUE;
-}
-
-static void
-i810UpdatePageFlipping( i810ContextPtr imesa )
-{
- struct gl_context *ctx = imesa->glCtx;
- int front = 0;
-
- /* Determine current color drawing buffer */
- switch (ctx->DrawBuffer->_ColorDrawBufferIndexes[0]) {
- case BUFFER_FRONT_LEFT:
- front = 1;
- break;
- case BUFFER_BACK_LEFT:
- front = 0;
- break;
- default:
- return;
- }
-
- if ( imesa->sarea->pf_current_page == 1 )
- front ^= 1;
-
- driFlipRenderbuffers(ctx->WinSysDrawBuffer, front);
-
- if (front) {
- imesa->BufferSetup[I810_DESTREG_DI1] = imesa->i810Screen->fbOffset | imesa->i810Screen->backPitchBits;
- } else {
- imesa->BufferSetup[I810_DESTREG_DI1] = imesa->i810Screen->backOffset | imesa->i810Screen->backPitchBits;
- }
-
- imesa->dirty |= I810_UPLOAD_BUFFERS;
-}
-
-void i810GetLock( i810ContextPtr imesa, GLuint flags )
-{
- __DRIdrawable *dPriv = imesa->driDrawable;
- __DRIscreen *sPriv = imesa->driScreen;
- I810SAREAPtr sarea = imesa->sarea;
- int me = imesa->hHWContext;
- unsigned i;
-
- drmGetLock(imesa->driFd, imesa->hHWContext, flags);
-
- /* If the window moved, may need to set a new cliprect now.
- *
- * NOTE: This releases and regains the hw lock, so all state
- * checking must be done *after* this call:
- */
- DRI_VALIDATE_DRAWABLE_INFO(sPriv, dPriv);
-
-
- /* If we lost context, need to dump all registers to hardware.
- * Note that we don't care about 2d contexts, even if they perform
- * accelerated commands, so the DRI locking in the X server is even
- * more broken than usual.
- */
- if (sarea->ctxOwner != me) {
- driUpdateFramebufferSize(imesa->glCtx, dPriv);
- imesa->upload_cliprects = GL_TRUE;
- imesa->dirty = I810_UPLOAD_CTX|I810_UPLOAD_BUFFERS;
- if (imesa->CurrentTexObj[0]) imesa->dirty |= I810_UPLOAD_TEX0;
- if (imesa->CurrentTexObj[1]) imesa->dirty |= I810_UPLOAD_TEX1;
- sarea->ctxOwner = me;
- }
-
- /* Shared texture managment - if another client has played with
- * texture space, figure out which if any of our textures have been
- * ejected, and update our global LRU.
- */
- for ( i = 0 ; i < imesa->nr_heaps ; i++ ) {
- DRI_AGE_TEXTURES( imesa->texture_heaps[ i ] );
- }
-
- if (imesa->lastStamp != dPriv->lastStamp) {
- i810UpdatePageFlipping( imesa );
- i810XMesaWindowMoved( imesa );
- imesa->lastStamp = dPriv->lastStamp;
- }
-}
-
-
-void
-i810SwapBuffers( __DRIdrawable *dPriv )
-{
- if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
- i810ContextPtr imesa;
- struct gl_context *ctx;
- imesa = (i810ContextPtr) dPriv->driContextPriv->driverPrivate;
- ctx = imesa->glCtx;
- if (ctx->Visual.doubleBufferMode) {
- _mesa_notifySwapBuffers( ctx ); /* flush pending rendering comands */
- if ( imesa->sarea->pf_active ) {
- i810PageFlip( dPriv );
- } else {
- i810CopyBuffer( dPriv );
- }
- }
- }
- else {
- /* XXX this shouldn't be an error but we can't handle it for now */
- _mesa_problem(NULL, "i810SwapBuffers: drawable has no context!\n");
- }
-}
-
diff --git a/src/mesa/drivers/dri/i810/i810context.h b/src/mesa/drivers/dri/i810/i810context.h
deleted file mode 100644
index 93c7eda7b38..00000000000
--- a/src/mesa/drivers/dri/i810/i810context.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * GLX Hardware Device Driver for Intel i810
- * Copyright (C) 1999 Keith Whitwell
- *
- * 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 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
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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.
- *
- */
-
-#ifndef I810CONTEXT_INC
-#define I810CONTEXT_INC
-
-typedef struct i810_context_t i810Context;
-typedef struct i810_context_t *i810ContextPtr;
-typedef struct i810_texture_object_t *i810TextureObjectPtr;
-
-#include "drm.h"
-#include "main/mtypes.h"
-#include "main/mm.h"
-
-#include "i810screen.h"
-#include "i810tex.h"
-
-
-/* Reasons to disable hardware rasterization.
- */
-#define I810_FALLBACK_TEXTURE 0x1
-#define I810_FALLBACK_DRAW_BUFFER 0x2
-#define I810_FALLBACK_READ_BUFFER 0x4
-#define I810_FALLBACK_COLORMASK 0x8
-#define I810_FALLBACK_SPECULAR 0x20
-#define I810_FALLBACK_LOGICOP 0x40
-#define I810_FALLBACK_RENDERMODE 0x80
-#define I810_FALLBACK_STENCIL 0x100
-#define I810_FALLBACK_BLEND_EQ 0x200
-#define I810_FALLBACK_BLEND_FUNC 0x400
-
-
-#ifndef PCI_CHIP_I810
-#define PCI_CHIP_I810 0x7121
-#define PCI_CHIP_I810_DC100 0x7123
-#define PCI_CHIP_I810_E 0x7125
-#define PCI_CHIP_I815 0x1132
-#endif
-
-#define IS_I810(imesa) (imesa->i810Screen->deviceID == PCI_CHIP_I810 || \
- imesa->i810Screen->deviceID == PCI_CHIP_I810_DC100 || \
- imesa->i810Screen->deviceID == PCI_CHIP_I810_E)
-#define IS_I815(imesa) (imesa->i810Screen->deviceID == PCI_CHIP_I815)
-
-
-#define I810_UPLOAD_TEX(i) (I810_UPLOAD_TEX0<<(i))
-
-/* Use the templated vertex formats:
- */
-#define TAG(x) i810##x
-#include "tnl_dd/t_dd_vertex.h"
-#undef TAG
-
-typedef void (*i810_tri_func)( i810ContextPtr, i810Vertex *, i810Vertex *,
- i810Vertex * );
-typedef void (*i810_line_func)( i810ContextPtr, i810Vertex *, i810Vertex * );
-typedef void (*i810_point_func)( i810ContextPtr, i810Vertex * );
-
-struct i810_context_t {
- GLint refcount;
- struct gl_context *glCtx;
-
- /* Texture object bookkeeping
- */
- unsigned nr_heaps;
- driTexHeap * texture_heaps[1];
- driTextureObject swapped;
-
- struct i810_texture_object_t *CurrentTexObj[2];
-
-
- /* Bit flag to keep track of fallbacks.
- */
- GLuint Fallback;
-
- /* State for i810vb.c and i810tris.c.
- */
- GLuint new_state; /* _NEW_* flags */
- GLuint SetupNewInputs;
- GLuint SetupIndex;
- GLuint RenderIndex;
- GLmatrix ViewportMatrix;
- GLenum render_primitive;
- GLenum reduced_primitive;
- GLuint hw_primitive;
- GLubyte *verts;
-
- drmBufPtr vertex_buffer;
- char *vertex_addr;
- GLuint vertex_low;
- GLuint vertex_high;
- GLuint vertex_last_prim;
-
- GLboolean upload_cliprects;
-
-
- /* Fallback rasterization functions
- */
- i810_point_func draw_point;
- i810_line_func draw_line;
- i810_tri_func draw_tri;
-
- /* Hardware state
- */
- GLuint dirty; /* I810_UPLOAD_* */
- GLuint Setup[I810_CTX_SETUP_SIZE];
- GLuint BufferSetup[I810_DEST_SETUP_SIZE];
- int vertex_size;
- int vertex_stride_shift;
- unsigned int lastStamp;
- GLboolean stipple_in_hw;
-
- GLenum TexEnvImageFmt[2];
-
- /* State which can't be computed completely on the fly:
- */
- GLuint LcsCullMode;
- GLuint LcsLineWidth;
- GLuint LcsPointSize;
-
- /* Funny mesa mirrors
- */
- GLushort ClearColor;
-
- /* DRI stuff
- */
- GLuint needClip;
- struct gl_framebuffer *glBuffer;
- GLboolean doPageFlip;
-
- /* These refer to the current draw (front vs. back) buffer:
- */
- int drawX; /* origin of drawable in draw buffer */
- int drawY;
- GLuint numClipRects; /* cliprects for that buffer */
- drm_clip_rect_t *pClipRects;
-
- int lastSwap;
- int texAge;
- int ctxAge;
- int dirtyAge;
-
-
- GLboolean scissor;
- drm_clip_rect_t draw_rect;
- drm_clip_rect_t scissor_rect;
-
- drm_context_t hHWContext;
- drm_hw_lock_t *driHwLock;
- int driFd;
-
- __DRIdrawable *driDrawable;
- __DRIscreen *driScreen;
- i810ScreenPrivate *i810Screen;
- I810SAREAPtr sarea;
-};
-
-
-#define I810_CONTEXT(ctx) ((i810ContextPtr)(ctx->DriverCtx))
-
-#define GET_DISPATCH_AGE( imesa ) imesa->sarea->last_dispatch
-#define GET_ENQUEUE_AGE( imesa ) imesa->sarea->last_enqueue
-
-
-/* Lock the hardware and validate our state.
- */
-#define LOCK_HARDWARE( imesa ) \
- do { \
- char __ret=0; \
- DRM_CAS(imesa->driHwLock, imesa->hHWContext, \
- (DRM_LOCK_HELD|imesa->hHWContext), __ret); \
- if (__ret) \
- i810GetLock( imesa, 0 ); \
- } while (0)
-
-
-
-/* Release the kernel lock.
- */
-#define UNLOCK_HARDWARE(imesa) \
- DRM_UNLOCK(imesa->driFd, imesa->driHwLock, imesa->hHWContext);
-
-
-/* This is the wrong way to do it, I'm sure. Otherwise the drm
- * bitches that I've already got the heavyweight lock. At worst,
- * this is 3 ioctls. The best solution probably only gets me down
- * to 2 ioctls in the worst case.
- */
-#define LOCK_HARDWARE_QUIESCENT( imesa ) do { \
- LOCK_HARDWARE( imesa ); \
- i810RegetLockQuiescent( imesa ); \
-} while(0)
-
-
-extern void i810GetLock( i810ContextPtr imesa, GLuint flags );
-extern void i810EmitHwStateLocked( i810ContextPtr imesa );
-extern void i810EmitScissorValues( i810ContextPtr imesa, int box_nr, int emit );
-extern void i810EmitDrawingRectangle( i810ContextPtr imesa );
-extern void i810XMesaSetBackClipRects( i810ContextPtr imesa );
-extern void i810XMesaSetFrontClipRects( i810ContextPtr imesa );
-
-#define SUBPIXEL_X -.5
-#define SUBPIXEL_Y -.5
-
-/* ================================================================
- * Debugging:
- */
-#define DO_DEBUG 1
-#if DO_DEBUG
-extern int I810_DEBUG;
-#else
-#define I810_DEBUG 0
-#endif
-
-#define DEBUG_TEXTURE 0x1
-#define DEBUG_STATE 0x2
-#define DEBUG_IOCTL 0x4
-#define DEBUG_PRIMS 0x8
-#define DEBUG_VERTS 0x10
-#define DEBUG_FALLBACKS 0x20
-#define DEBUG_VERBOSE 0x40
-#define DEBUG_DRI 0x80
-#define DEBUG_DMA 0x100
-#define DEBUG_SANITY 0x200
-#define DEBUG_SYNC 0x400
-#define DEBUG_SLEEP 0x800
-
-#endif
diff --git a/src/mesa/drivers/dri/i810/i810ioctl.c b/src/mesa/drivers/dri/i810/i810ioctl.c
deleted file mode 100644
index 4b004d54c65..00000000000
--- a/src/mesa/drivers/dri/i810/i810ioctl.c
+++ /dev/null
@@ -1,519 +0,0 @@
-
-#include /* for usleep() */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "main/dd.h"
-#include "swrast/swrast.h"
-#include "main/mm.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "main/context.h"
-#include "i810ioctl.h"
-#include "i810state.h"
-
-static drmBufPtr i810_get_buffer_ioctl( i810ContextPtr imesa )
-{
- drmI810DMA dma;
- drmBufPtr buf;
- int retcode, i = 0;
-
- while (1) {
- retcode = drmCommandWriteRead(imesa->driFd, DRM_I810_GETBUF,
- &dma, sizeof(drmI810DMA));
-
- if (dma.granted == 1 && retcode == 0)
- break;
-
- if (++i > 1000) {
- drmCommandNone(imesa->driFd, DRM_I810_FLUSH);
- i = 0;
- }
- }
-
- buf = &(imesa->i810Screen->bufs->list[dma.request_idx]);
- buf->idx = dma.request_idx;
- buf->used = 0;
- buf->total = dma.request_size;
- buf->address = (drmAddress)dma.virtual;
-
- return buf;
-}
-
-
-
-#define DEPTH_SCALE ((1<<16)-1)
-
-static void i810Clear( struct gl_context *ctx, GLbitfield mask )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- __DRIdrawable *dPriv = imesa->driDrawable;
- const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask[0]);
- drmI810Clear clear;
- unsigned int i;
-
- clear.flags = 0;
- clear.clear_color = imesa->ClearColor;
- clear.clear_depth = (GLuint) (ctx->Depth.Clear * DEPTH_SCALE);
-
- I810_FIREVERTICES( imesa );
-
- if ((mask & BUFFER_BIT_FRONT_LEFT) && colorMask == ~0U) {
- clear.flags |= I810_FRONT;
- mask &= ~BUFFER_BIT_FRONT_LEFT;
- }
-
- if ((mask & BUFFER_BIT_BACK_LEFT) && colorMask == ~0U) {
- clear.flags |= I810_BACK;
- mask &= ~BUFFER_BIT_BACK_LEFT;
- }
-
- if (mask & BUFFER_BIT_DEPTH) {
- if (ctx->Depth.Mask)
- clear.flags |= I810_DEPTH;
- mask &= ~BUFFER_BIT_DEPTH;
- }
-
- if (clear.flags) {
- GLint cx, cy, cw, ch;
-
- LOCK_HARDWARE( imesa );
-
- /* compute region after locking: */
- cx = ctx->DrawBuffer->_Xmin;
- cy = ctx->DrawBuffer->_Ymin;
- cw = ctx->DrawBuffer->_Xmax - cx;
- ch = ctx->DrawBuffer->_Ymax - cy;
-
- /* flip top to bottom */
- cy = dPriv->h-cy-ch;
- cx += imesa->drawX;
- cy += imesa->drawY;
-
- for (i = 0 ; i < imesa->numClipRects ; )
- {
- unsigned int nr = MIN2(i + I810_NR_SAREA_CLIPRECTS, imesa->numClipRects);
- drm_clip_rect_t *box = imesa->pClipRects;
- drm_clip_rect_t *b = (drm_clip_rect_t *)imesa->sarea->boxes;
- int n = 0;
-
- if (cw != dPriv->w || ch != dPriv->h) {
- /* clear sub region */
- for ( ; i < nr ; i++) {
- GLint x = box[i].x1;
- GLint y = box[i].y1;
- GLint w = box[i].x2 - x;
- GLint h = box[i].y2 - y;
-
- if (x < cx) w -= cx - x, x = cx;
- if (y < cy) h -= cy - y, y = cy;
- if (x + w > cx + cw) w = cx + cw - x;
- if (y + h > cy + ch) h = cy + ch - y;
- if (w <= 0) continue;
- if (h <= 0) continue;
-
- b->x1 = x;
- b->y1 = y;
- b->x2 = x + w;
- b->y2 = y + h;
- b++;
- n++;
- }
- } else {
- /* clear whole buffer */
- for ( ; i < nr ; i++) {
- *b++ = box[i];
- n++;
- }
- }
-
- imesa->sarea->nbox = n;
- drmCommandWrite(imesa->driFd, DRM_I810_CLEAR,
- &clear, sizeof(drmI810Clear));
- }
-
- UNLOCK_HARDWARE( imesa );
- imesa->upload_cliprects = GL_TRUE;
- }
-
- if (mask)
- _swrast_Clear( ctx, mask );
-}
-
-
-
-
-/*
- * Copy the back buffer to the front buffer.
- */
-void i810CopyBuffer( const __DRIdrawable *dPriv )
-{
- i810ContextPtr imesa;
- drm_clip_rect_t *pbox;
- int nbox, i, tmp;
-
- assert(dPriv);
- assert(dPriv->driContextPriv);
- assert(dPriv->driContextPriv->driverPrivate);
-
- imesa = (i810ContextPtr) dPriv->driContextPriv->driverPrivate;
-
- I810_FIREVERTICES( imesa );
- LOCK_HARDWARE( imesa );
-
- pbox = (drm_clip_rect_t *)dPriv->pClipRects;
- nbox = dPriv->numClipRects;
-
- for (i = 0 ; i < nbox ; )
- {
- int nr = MIN2(i + I810_NR_SAREA_CLIPRECTS, dPriv->numClipRects);
- drm_clip_rect_t *b = (drm_clip_rect_t *)imesa->sarea->boxes;
-
- imesa->sarea->nbox = nr - i;
-
- for ( ; i < nr ; i++)
- *b++ = pbox[i];
-
- drmCommandNone(imesa->driFd, DRM_I810_SWAP);
- }
-
- tmp = GET_ENQUEUE_AGE(imesa);
- UNLOCK_HARDWARE( imesa );
-
- /* multiarb will suck the life out of the server without this throttle:
- */
- if (GET_DISPATCH_AGE(imesa) < imesa->lastSwap) {
- i810WaitAge(imesa, imesa->lastSwap);
- }
-
- imesa->lastSwap = tmp;
- imesa->upload_cliprects = GL_TRUE;
-}
-
-
-/*
- * XXX implement when full-screen extension is done.
- */
-void i810PageFlip( const __DRIdrawable *dPriv )
-{
- i810ContextPtr imesa;
- int tmp, ret;
-
- assert(dPriv);
- assert(dPriv->driContextPriv);
- assert(dPriv->driContextPriv->driverPrivate);
-
- imesa = (i810ContextPtr) dPriv->driContextPriv->driverPrivate;
-
- I810_FIREVERTICES( imesa );
- LOCK_HARDWARE( imesa );
-
- if (dPriv->pClipRects) {
- memcpy(&(imesa->sarea->boxes[0]), &(dPriv->pClipRects[0]),
- sizeof(drm_clip_rect_t));
- imesa->sarea->nbox = 1;
- }
- ret = drmCommandNone(imesa->driFd, DRM_I810_FLIP);
- if (ret) {
- fprintf(stderr, "%s: %d\n", __FUNCTION__, ret);
- UNLOCK_HARDWARE( imesa );
- exit(1);
- }
-
- tmp = GET_ENQUEUE_AGE(imesa);
- UNLOCK_HARDWARE( imesa );
-
- /* multiarb will suck the life out of the server without this throttle:
- */
- if (GET_DISPATCH_AGE(imesa) < imesa->lastSwap) {
- i810WaitAge(imesa, imesa->lastSwap);
- }
-
- /* i810SetDrawBuffer( imesa->glCtx, imesa->glCtx->Color.DriverDrawBuffer );*/
- i810DrawBuffer( imesa->glCtx, imesa->glCtx->Color.DrawBuffer[0] );
- imesa->upload_cliprects = GL_TRUE;
- imesa->lastSwap = tmp;
- return;
-}
-
-
-/* This waits for *everybody* to finish rendering -- overkill.
- */
-void i810DmaFinish( i810ContextPtr imesa )
-{
- I810_FIREVERTICES( imesa );
-
- LOCK_HARDWARE( imesa );
- i810RegetLockQuiescent( imesa );
- UNLOCK_HARDWARE( imesa );
-}
-
-
-void i810RegetLockQuiescent( i810ContextPtr imesa )
-{
- drmUnlock(imesa->driFd, imesa->hHWContext);
- i810GetLock( imesa, DRM_LOCK_QUIESCENT );
-}
-
-void i810WaitAgeLocked( i810ContextPtr imesa, int age )
-{
- int i = 0, j;
-
- while (++i < 5000) {
- drmCommandNone(imesa->driFd, DRM_I810_GETAGE);
- if (GET_DISPATCH_AGE(imesa) >= age)
- return;
- for (j = 0 ; j < 1000 ; j++)
- ;
- }
-
- drmCommandNone(imesa->driFd, DRM_I810_FLUSH);
-}
-
-
-void i810WaitAge( i810ContextPtr imesa, int age )
-{
- int i = 0, j;
-
- while (++i < 5000) {
- drmCommandNone(imesa->driFd, DRM_I810_GETAGE);
- if (GET_DISPATCH_AGE(imesa) >= age)
- return;
- for (j = 0 ; j < 1000 ; j++)
- ;
- }
-
- i = 0;
- while (++i < 1000) {
- drmCommandNone(imesa->driFd, DRM_I810_GETAGE);
- if (GET_DISPATCH_AGE(imesa) >= age)
- return;
- usleep(1000);
- }
-
- LOCK_HARDWARE(imesa);
- drmCommandNone(imesa->driFd, DRM_I810_FLUSH);
- UNLOCK_HARDWARE(imesa);
-}
-
-
-
-
-static int intersect_rect( drm_clip_rect_t *out,
- drm_clip_rect_t *a,
- drm_clip_rect_t *b )
-{
- *out = *a;
- if (b->x1 > out->x1) out->x1 = b->x1;
- if (b->x2 < out->x2) out->x2 = b->x2;
- if (out->x1 >= out->x2) return 0;
-
- if (b->y1 > out->y1) out->y1 = b->y1;
- if (b->y2 < out->y2) out->y2 = b->y2;
- if (out->y1 >= out->y2) return 0;
- return 1;
-}
-
-
-static void emit_state( i810ContextPtr imesa )
-{
- GLuint dirty = imesa->dirty;
- I810SAREAPtr sarea = imesa->sarea;
-
- if (dirty & I810_UPLOAD_BUFFERS) {
- memcpy( sarea->BufferState, imesa->BufferSetup,
- sizeof(imesa->BufferSetup) );
- }
-
- if (dirty & I810_UPLOAD_CTX) {
- memcpy( sarea->ContextState, imesa->Setup,
- sizeof(imesa->Setup) );
- }
-
- if (dirty & I810_UPLOAD_TEX0) {
- memcpy(sarea->TexState[0],
- imesa->CurrentTexObj[0]->Setup,
- sizeof(imesa->CurrentTexObj[0]->Setup));
- }
-
- if (dirty & I810_UPLOAD_TEX1) {
- GLuint *setup = sarea->TexState[1];
-
- memcpy( setup,
- imesa->CurrentTexObj[1]->Setup,
- sizeof(imesa->CurrentTexObj[1]->Setup));
-
- /* Need this for the case where both units are bound to the same
- * texobj.
- */
- setup[I810_TEXREG_MI1] ^= (MI1_MAP_0 ^ MI1_MAP_1);
- setup[I810_TEXREG_MLC] ^= (MLC_MAP_0 ^ MLC_MAP_1);
- setup[I810_TEXREG_MLL] ^= (MLL_MAP_0 ^ MLL_MAP_1);
- setup[I810_TEXREG_MCS] ^= (MCS_COORD_0 ^ MCS_COORD_1);
- setup[I810_TEXREG_MF] ^= (MF_MAP_0 ^ MF_MAP_1);
- }
-
- sarea->dirty = dirty;
- imesa->dirty = 0;
-}
-
-
-static void age_imesa( i810ContextPtr imesa, int age )
-{
- if (imesa->CurrentTexObj[0]) imesa->CurrentTexObj[0]->base.timestamp = age;
- if (imesa->CurrentTexObj[1]) imesa->CurrentTexObj[1]->base.timestamp = age;
-}
-
-
-void i810FlushPrimsLocked( i810ContextPtr imesa )
-{
- drm_clip_rect_t *pbox = imesa->pClipRects;
- int nbox = imesa->numClipRects;
- drmBufPtr buffer = imesa->vertex_buffer;
- I810SAREAPtr sarea = imesa->sarea;
- drmI810Vertex vertex;
- int i;
-
- if (I810_DEBUG & DEBUG_STATE)
- i810PrintDirty( __FUNCTION__, imesa->dirty );
-
- if (imesa->dirty)
- emit_state( imesa );
-
- vertex.idx = buffer->idx;
- vertex.used = imesa->vertex_low;
- vertex.discard = 0;
- sarea->vertex_prim = imesa->hw_primitive;
-
- if (!nbox) {
- vertex.used = 0;
- }
- else if (nbox > I810_NR_SAREA_CLIPRECTS) {
- imesa->upload_cliprects = GL_TRUE;
- }
-
- if (!nbox || !imesa->upload_cliprects)
- {
- if (nbox == 1)
- sarea->nbox = 0;
- else
- sarea->nbox = nbox;
-
- vertex.discard = 1;
- drmCommandWrite(imesa->driFd, DRM_I810_VERTEX,
- &vertex, sizeof(drmI810Vertex));
- age_imesa(imesa, sarea->last_enqueue);
- }
- else
- {
- for (i = 0 ; i < nbox ; )
- {
- int nr = MIN2(i + I810_NR_SAREA_CLIPRECTS, nbox);
- drm_clip_rect_t *b = (drm_clip_rect_t *)sarea->boxes;
-
- if (imesa->scissor) {
- sarea->nbox = 0;
-
- for ( ; i < nr ; i++) {
- b->x1 = pbox[i].x1 - imesa->drawX;
- b->y1 = pbox[i].y1 - imesa->drawY;
- b->x2 = pbox[i].x2 - imesa->drawX;
- b->y2 = pbox[i].y2 - imesa->drawY;
-
- if (intersect_rect(b, b, &imesa->scissor_rect)) {
- sarea->nbox++;
- b++;
- }
- }
-
- /* Culled?
- */
- if (!sarea->nbox) {
- if (nr < nbox) continue;
- vertex.used = 0;
- }
- } else {
- sarea->nbox = nr - i;
- for ( ; i < nr ; i++, b++) {
- b->x1 = pbox[i].x1 - imesa->drawX;
- b->y1 = pbox[i].y1 - imesa->drawY;
- b->x2 = pbox[i].x2 - imesa->drawX;
- b->y2 = pbox[i].y2 - imesa->drawY;
- }
- }
-
- /* Finished with the buffer?
- */
- if (nr == nbox)
- vertex.discard = 1;
-
- drmCommandWrite(imesa->driFd, DRM_I810_VERTEX,
- &vertex, sizeof(drmI810Vertex));
- age_imesa(imesa, imesa->sarea->last_enqueue);
- }
- }
-
- /* Reset imesa vars:
- */
- imesa->vertex_buffer = 0;
- imesa->vertex_addr = 0;
- imesa->vertex_low = 0;
- imesa->vertex_high = 0;
- imesa->vertex_last_prim = 0;
- imesa->dirty = 0;
- imesa->upload_cliprects = GL_FALSE;
-}
-
-void i810FlushPrimsGetBuffer( i810ContextPtr imesa )
-{
- LOCK_HARDWARE(imesa);
-
- if (imesa->vertex_buffer)
- i810FlushPrimsLocked( imesa );
-
- imesa->vertex_buffer = i810_get_buffer_ioctl( imesa );
- imesa->vertex_high = imesa->vertex_buffer->total;
- imesa->vertex_addr = (char *)imesa->vertex_buffer->address;
- imesa->vertex_low = 4; /* leave room for instruction header */
- imesa->vertex_last_prim = imesa->vertex_low;
- UNLOCK_HARDWARE(imesa);
-}
-
-
-void i810FlushPrims( i810ContextPtr imesa )
-{
- if (imesa->vertex_buffer) {
- LOCK_HARDWARE( imesa );
- i810FlushPrimsLocked( imesa );
- UNLOCK_HARDWARE( imesa );
- }
-}
-
-
-
-int i810_check_copy(int fd)
-{
- return(drmCommandNone(fd, DRM_I810_DOCOPY));
-}
-
-static void i810Flush( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- I810_FIREVERTICES( imesa );
-}
-
-static void i810Finish( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- i810DmaFinish( imesa );
-}
-
-void i810InitIoctlFuncs( struct dd_function_table *functions )
-{
- functions->Flush = i810Flush;
- functions->Clear = i810Clear;
- functions->Finish = i810Finish;
-}
diff --git a/src/mesa/drivers/dri/i810/i810ioctl.h b/src/mesa/drivers/dri/i810/i810ioctl.h
deleted file mode 100644
index 926e38ce51c..00000000000
--- a/src/mesa/drivers/dri/i810/i810ioctl.h
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#ifndef I810_IOCTL_H
-#define I810_IOCTL_H
-
-#include "i810context.h"
-
-void i810EmitPrim( i810ContextPtr imesa );
-void i810FlushPrims( i810ContextPtr mmesa );
-void i810FlushPrimsLocked( i810ContextPtr mmesa );
-void i810FlushPrimsGetBuffer( i810ContextPtr imesa );
-
-void i810WaitAgeLocked( i810ContextPtr imesa, int age );
-void i810WaitAge( i810ContextPtr imesa, int age );
-void i810DmaFinish( i810ContextPtr imesa );
-void i810RegetLockQuiescent( i810ContextPtr imesa );
-void i810InitIoctlFuncs( struct dd_function_table *functions );
-void i810CopyBuffer( const __DRIdrawable *dpriv );
-void i810PageFlip( const __DRIdrawable *dpriv );
-int i810_check_copy(int fd);
-
-#define I810_STATECHANGE(imesa, flag) \
-do { \
- if (imesa->vertex_low != imesa->vertex_last_prim) \
- i810FlushPrims(imesa); \
- imesa->dirty |= flag; \
-} while (0) \
-
-
-#define I810_FIREVERTICES(imesa) \
-do { \
- if (imesa->vertex_buffer) { \
- i810FlushPrims(imesa); \
- } \
-} while (0)
-
-static INLINE GLuint *i810AllocDmaLow( i810ContextPtr imesa, int bytes )
-{
- if (imesa->vertex_low + bytes > imesa->vertex_high)
- i810FlushPrimsGetBuffer( imesa );
-
- {
- GLuint *start = (GLuint *)(imesa->vertex_addr + imesa->vertex_low);
- imesa->vertex_low += bytes;
- return start;
- }
-}
-
-#endif
diff --git a/src/mesa/drivers/dri/i810/i810render.c b/src/mesa/drivers/dri/i810/i810render.c
deleted file mode 100644
index 45f0954bbe2..00000000000
--- a/src/mesa/drivers/dri/i810/i810render.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Intel i810 DRI driver for Mesa 3.5
- *
- * Copyright (C) 1999-2000 Keith Whitwell 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, 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 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 KEITH WHITWELL 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.
- *
- * Author:
- * Keith Whitwell
- */
-
-
-/*
- * Render unclipped vertex buffers by emitting vertices directly to
- * dma buffers. Use strip/fan hardware acceleration where possible.
- *
- */
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/imports.h"
-#include "main/mtypes.h"
-
-#include "math/m_xform.h"
-
-#include "tnl/t_context.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "i810context.h"
-#include "i810tris.h"
-#include "i810vb.h"
-#include "i810ioctl.h"
-
-/*
- * Render unclipped vertex buffers by emitting vertices directly to
- * dma buffers. Use strip/fan hardware primitives where possible.
- * Try to simulate missing primitives with indexed vertices.
- */
-#define HAVE_POINTS 0
-#define HAVE_LINES 1
-#define HAVE_LINE_STRIPS 1
-#define HAVE_TRIANGLES 1
-#define HAVE_TRI_STRIPS 1
-#define HAVE_TRI_STRIP_1 0 /* has it, template can't use it yet */
-#define HAVE_TRI_FANS 1
-#define HAVE_POLYGONS 1
-#define HAVE_QUADS 0
-#define HAVE_QUAD_STRIPS 0
-
-#define HAVE_ELTS 0
-
-
-static GLuint hw_prim[GL_POLYGON+1] = {
- 0,
- PR_LINES,
- 0,
- PR_LINESTRIP,
- PR_TRIANGLES,
- PR_TRISTRIP_0,
- PR_TRIFAN,
- 0,
- 0,
- PR_POLYGON
-};
-
-static const GLenum reduced_prim[GL_POLYGON+1] = {
- GL_POINTS,
- GL_LINES,
- GL_LINES,
- GL_LINES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES
-};
-
-
-
-
-#define LOCAL_VARS i810ContextPtr imesa = I810_CONTEXT(ctx)
-#define INIT( prim ) do { \
- I810_STATECHANGE(imesa, 0); \
- i810RasterPrimitive( ctx, reduced_prim[prim], hw_prim[prim] ); \
-} while (0)
-#define GET_CURRENT_VB_MAX_VERTS() \
- (((int)imesa->vertex_high - (int)imesa->vertex_low) / (imesa->vertex_size*4))
-#define GET_SUBSEQUENT_VB_MAX_VERTS() \
- (I810_DMA_BUF_SZ-4) / (imesa->vertex_size * 4)
-
-#define ALLOC_VERTS( nr ) \
- i810AllocDmaLow( imesa, (nr) * imesa->vertex_size * 4)
-#define EMIT_VERTS( ctx, j, nr, buf ) \
- i810_emit_contiguous_verts(ctx, j, (j)+(nr), buf)
-
-#define FLUSH() I810_FIREVERTICES( imesa )
-
-
-#define TAG(x) i810_##x
-#include "tnl_dd/t_dd_dmatmp.h"
-
-
-/**********************************************************************/
-/* Render pipeline stage */
-/**********************************************************************/
-
-
-static GLboolean i810_run_render( struct gl_context *ctx,
- struct tnl_pipeline_stage *stage )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- GLuint i;
-
- /* Don't handle clipping or indexed vertices.
- */
- if (imesa->RenderIndex != 0 ||
- !i810_validate_render( ctx, VB )) {
- return GL_TRUE;
- }
-
- imesa->SetupNewInputs = VERT_BIT_POS;
-
- tnl->Driver.Render.Start( ctx );
-
- for (i = 0 ; i < VB->PrimitiveCount ; i++)
- {
- GLuint prim = _tnl_translate_prim(&VB->Primitive[i]);
- GLuint start = VB->Primitive[i].start;
- GLuint length = VB->Primitive[i].count;
-
- if (!length)
- continue;
-
- i810_render_tab_verts[prim & PRIM_MODE_MASK]( ctx, start, start + length,
- prim );
- }
-
- tnl->Driver.Render.Finish( ctx );
-
- return GL_FALSE; /* finished the pipe */
-}
-
-
-
-const struct tnl_pipeline_stage _i810_render_stage =
-{
- "i810 render",
- NULL,
- NULL,
- NULL,
- NULL,
- i810_run_render /* run */
-};
diff --git a/src/mesa/drivers/dri/i810/i810screen.c b/src/mesa/drivers/dri/i810/i810screen.c
deleted file mode 100644
index fc56b61b4e6..00000000000
--- a/src/mesa/drivers/dri/i810/i810screen.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, 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 PRECISION INSIGHT 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell
- *
- */
-
-
-#include "main/glheader.h"
-#include "main/imports.h"
-#include "main/context.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-#include "main/simple_list.h"
-#include "utils.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "i810state.h"
-#include "i810tex.h"
-#include "i810span.h"
-
-#include "GL/internal/dri_interface.h"
-
-static const __DRIconfig **
-i810FillInModes( __DRIscreen *psp,
- unsigned pixel_bits, unsigned depth_bits,
- unsigned stencil_bits, GLboolean have_back_buffer )
-{
- __DRIconfig **configs;
- struct gl_config * m;
- unsigned depth_buffer_factor;
- unsigned back_buffer_factor;
- unsigned i;
-
- /* Right now GLX_SWAP_COPY_OML isn't supported, but it would be easy
- * enough to add support. Basically, if a context is created with an
- * fbconfig where the swap method is GLX_SWAP_COPY_OML, pageflipping
- * will never be used.
- */
- static const GLenum back_buffer_modes[] = {
- GLX_NONE, GLX_SWAP_UNDEFINED_OML /*, GLX_SWAP_COPY_OML */
- };
-
- uint8_t depth_bits_array[2];
- uint8_t stencil_bits_array[2];
- uint8_t msaa_samples_array[1];
-
- depth_bits_array[0] = depth_bits;
- depth_bits_array[1] = depth_bits;
-
- /* Just like with the accumulation buffer, always provide some modes
- * with a stencil buffer. It will be a sw fallback, but some apps won't
- * care about that.
- */
- stencil_bits_array[0] = 0;
- stencil_bits_array[1] = (stencil_bits == 0) ? 8 : stencil_bits;
-
- msaa_samples_array[0] = 0;
-
- depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 2 : 1;
- back_buffer_factor = (have_back_buffer) ? 2 : 1;
-
- configs = driCreateConfigs(GL_RGB, GL_UNSIGNED_SHORT_5_6_5,
- depth_bits_array, stencil_bits_array,
- depth_buffer_factor,
- back_buffer_modes, back_buffer_factor,
- msaa_samples_array, 1, GL_TRUE);
- if (configs == NULL) {
- fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
- __func__, __LINE__ );
- return NULL;
- }
-
- /* Mark the visual as slow if there are "fake" stencil bits.
- */
- for (i = 0; configs[i]; i++) {
- m = &configs[i]->modes;
- if ((m->stencilBits != 0) && (m->stencilBits != stencil_bits)) {
- m->visualRating = GLX_SLOW_CONFIG;
- }
- }
-
- return (const __DRIconfig **) configs;
-}
-
-
-/* static int i810_malloc_proxy_buf(drmBufMapPtr buffers) */
-/* { */
-/* char *buffer; */
-/* drmBufPtr buf; */
-/* int i; */
-
-/* buffer = CALLOC(I810_DMA_BUF_SZ); */
-/* if(buffer == NULL) return -1; */
-/* for(i = 0; i < I810_DMA_BUF_NR; i++) { */
-/* buf = &(buffers->list[i]); */
-/* buf->address = (drmAddress)buffer; */
-/* } */
-/* return 0; */
-/* } */
-
-static drmBufMapPtr i810_create_empty_buffers(void)
-{
- drmBufMapPtr retval;
-
- retval = (drmBufMapPtr)_mesa_align_malloc(sizeof(drmBufMap), 32);
- if(retval == NULL) return NULL;
- memset(retval, 0, sizeof(drmBufMap));
- retval->list = (drmBufPtr)_mesa_align_malloc(sizeof(drmBuf) * I810_DMA_BUF_NR, 32);
- if(retval->list == NULL) {
- _mesa_align_free(retval);
- return NULL;
- }
- memset(retval->list, 0, sizeof(drmBuf) * I810_DMA_BUF_NR);
- return retval;
-}
-
-
-static const __DRIconfig **
-i810InitScreen(__DRIscreen *sPriv)
-{
- static const __DRIversion ddx_expected = { 1, 0, 0 };
- static const __DRIversion dri_expected = { 4, 0, 0 };
- static const __DRIversion drm_expected = { 1, 2, 0 };
- i810ScreenPrivate *i810Screen;
- I810DRIPtr gDRIPriv = (I810DRIPtr)sPriv->pDevPriv;
-
- if ( ! driCheckDriDdxDrmVersions2( "i810",
- &sPriv->dri_version, & dri_expected,
- &sPriv->ddx_version, & ddx_expected,
- &sPriv->drm_version, & drm_expected ) ) {
- return NULL;
- }
-
- if (sPriv->devPrivSize != sizeof(I810DRIRec)) {
- fprintf(stderr,"\nERROR! sizeof(I810DRIRec) does not match passed size from device driver\n");
- return GL_FALSE;
- }
-
- /* Allocate the private area */
- i810Screen = (i810ScreenPrivate *)CALLOC(sizeof(i810ScreenPrivate));
- if (!i810Screen) {
- __driUtilMessage("i810InitDriver: alloc i810ScreenPrivate struct failed");
- return GL_FALSE;
- }
-
- i810Screen->driScrnPriv = sPriv;
- sPriv->private = (void *)i810Screen;
-
- i810Screen->deviceID=gDRIPriv->deviceID;
- i810Screen->width=gDRIPriv->width;
- i810Screen->height=gDRIPriv->height;
- i810Screen->mem=gDRIPriv->mem;
- i810Screen->cpp=gDRIPriv->cpp;
- i810Screen->fbStride=gDRIPriv->fbStride;
- i810Screen->fbOffset=gDRIPriv->fbOffset;
-
- if (gDRIPriv->bitsPerPixel == 15)
- i810Screen->fbFormat = DV_PF_555;
- else
- i810Screen->fbFormat = DV_PF_565;
-
- i810Screen->backOffset=gDRIPriv->backOffset;
- i810Screen->depthOffset=gDRIPriv->depthOffset;
- i810Screen->backPitch = gDRIPriv->auxPitch;
- i810Screen->backPitchBits = gDRIPriv->auxPitchBits;
- i810Screen->textureOffset=gDRIPriv->textureOffset;
- i810Screen->textureSize=gDRIPriv->textureSize;
- i810Screen->logTextureGranularity = gDRIPriv->logTextureGranularity;
-
- i810Screen->bufs = i810_create_empty_buffers();
- if (i810Screen->bufs == NULL) {
- __driUtilMessage("i810InitDriver: i810_create_empty_buffers() failed");
- FREE(i810Screen);
- return GL_FALSE;
- }
-
- i810Screen->back.handle = gDRIPriv->backbuffer;
- i810Screen->back.size = gDRIPriv->backbufferSize;
-
- if (drmMap(sPriv->fd,
- i810Screen->back.handle,
- i810Screen->back.size,
- (drmAddress *)&i810Screen->back.map) != 0) {
- FREE(i810Screen);
- sPriv->private = NULL;
- __driUtilMessage("i810InitDriver: drmMap failed");
- return GL_FALSE;
- }
-
- i810Screen->depth.handle = gDRIPriv->depthbuffer;
- i810Screen->depth.size = gDRIPriv->depthbufferSize;
-
- if (drmMap(sPriv->fd,
- i810Screen->depth.handle,
- i810Screen->depth.size,
- (drmAddress *)&i810Screen->depth.map) != 0) {
- drmUnmap(i810Screen->back.map, i810Screen->back.size);
- FREE(i810Screen);
- sPriv->private = NULL;
- __driUtilMessage("i810InitDriver: drmMap (2) failed");
- return GL_FALSE;
- }
-
- i810Screen->tex.handle = gDRIPriv->textures;
- i810Screen->tex.size = gDRIPriv->textureSize;
-
- if (drmMap(sPriv->fd,
- i810Screen->tex.handle,
- i810Screen->tex.size,
- (drmAddress *)&i810Screen->tex.map) != 0) {
- drmUnmap(i810Screen->back.map, i810Screen->back.size);
- drmUnmap(i810Screen->depth.map, i810Screen->depth.size);
- FREE(i810Screen);
- sPriv->private = NULL;
- __driUtilMessage("i810InitDriver: drmMap (3) failed");
- return GL_FALSE;
- }
-
- i810Screen->sarea_priv_offset = gDRIPriv->sarea_priv_offset;
-
- return i810FillInModes(sPriv, 16, 16, 0, 1);
-}
-
-static void
-i810DestroyScreen(__DRIscreen *sPriv)
-{
- i810ScreenPrivate *i810Screen = (i810ScreenPrivate *)sPriv->private;
-
- /* Need to unmap all the bufs and maps here:
- */
- drmUnmap(i810Screen->back.map, i810Screen->back.size);
- drmUnmap(i810Screen->depth.map, i810Screen->depth.size);
- drmUnmap(i810Screen->tex.map, i810Screen->tex.size);
-
- FREE(i810Screen);
- sPriv->private = NULL;
-}
-
-
-/**
- * Create a buffer which corresponds to the window.
- */
-static GLboolean
-i810CreateBuffer( __DRIscreen *driScrnPriv,
- __DRIdrawable *driDrawPriv,
- const struct gl_config *mesaVis,
- GLboolean isPixmap )
-{
- i810ScreenPrivate *screen = (i810ScreenPrivate *) driScrnPriv->private;
-
- if (isPixmap) {
- return GL_FALSE; /* not implemented */
- }
- else {
- struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
-
- {
- driRenderbuffer *frontRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- driScrnPriv->pFB,
- screen->cpp,
- /*screen->frontOffset*/0, screen->backPitch,
- driDrawPriv);
- i810SetSpanFunctions(frontRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
- }
-
- if (mesaVis->doubleBufferMode) {
- driRenderbuffer *backRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- screen->back.map,
- screen->cpp,
- screen->backOffset, screen->backPitch,
- driDrawPriv);
- i810SetSpanFunctions(backRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
- }
-
- if (mesaVis->depthBits == 16) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z16,
- screen->depth.map,
- screen->cpp,
- screen->depthOffset, screen->backPitch,
- driDrawPriv);
- i810SetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
-
- _mesa_add_soft_renderbuffers(fb,
- GL_FALSE, /* color */
- GL_FALSE, /* depth */
- mesaVis->stencilBits > 0,
- mesaVis->accumRedBits > 0,
- GL_FALSE, /* alpha */
- GL_FALSE /* aux */);
- driDrawPriv->driverPrivate = (void *) fb;
-
- return (driDrawPriv->driverPrivate != NULL);
- }
-}
-
-
-static void
-i810DestroyBuffer(__DRIdrawable *driDrawPriv)
-{
- _mesa_reference_framebuffer((struct gl_framebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-const struct __DriverAPIRec driDriverAPI = {
- .InitScreen = i810InitScreen,
- .DestroyScreen = i810DestroyScreen,
- .CreateContext = i810CreateContext,
- .DestroyContext = i810DestroyContext,
- .CreateBuffer = i810CreateBuffer,
- .DestroyBuffer = i810DestroyBuffer,
- .SwapBuffers = i810SwapBuffers,
- .MakeCurrent = i810MakeCurrent,
- .UnbindContext = i810UnbindContext,
- .GetSwapInfo = NULL,
- .GetDrawableMSC = NULL,
- .WaitForMSC = NULL,
- .WaitForSBC = NULL,
- .SwapBuffersMSC = NULL
-};
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
- &driCoreExtension.base,
- &driLegacyExtension.base,
- NULL
-};
diff --git a/src/mesa/drivers/dri/i810/i810screen.h b/src/mesa/drivers/dri/i810/i810screen.h
deleted file mode 100644
index 25c1072ce06..00000000000
--- a/src/mesa/drivers/dri/i810/i810screen.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, 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 PRECISION INSIGHT 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell
- *
- */
-
-#ifndef _I810_INIT_H_
-#define _I810_INIT_H_
-
-#include
-#include "dri_util.h"
-
-typedef struct {
- drm_handle_t handle;
- drmSize size;
- char *map;
-} i810Region, *i810RegionPtr;
-
-typedef struct {
- i810Region front;
- i810Region back;
- i810Region depth;
- i810Region tex;
-
- int deviceID;
- int width;
- int height;
- int mem;
-
- int cpp; /* for front and back buffers */
- int bitsPerPixel;
-
- int fbFormat;
- int fbOffset;
- int fbStride;
-
- int backOffset;
- int depthOffset;
-
- int backPitch;
- int backPitchBits;
-
- int textureOffset;
- int textureSize;
- int logTextureGranularity;
-
- __DRIscreen *driScrnPriv;
- drmBufMapPtr bufs;
- unsigned int sarea_priv_offset;
-} i810ScreenPrivate;
-
-
-extern GLboolean
-i810CreateContext( gl_api api,
- const struct gl_config *mesaVis,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate );
-
-extern void
-i810DestroyContext(__DRIcontext *driContextPriv);
-
-extern GLboolean
-i810UnbindContext(__DRIcontext *driContextPriv);
-
-extern GLboolean
-i810MakeCurrent(__DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv);
-
-extern void
-i810SwapBuffers(__DRIdrawable *driDrawPriv);
-
-#endif
diff --git a/src/mesa/drivers/dri/i810/i810span.c b/src/mesa/drivers/dri/i810/i810span.c
deleted file mode 100644
index dddab8bb51e..00000000000
--- a/src/mesa/drivers/dri/i810/i810span.c
+++ /dev/null
@@ -1,138 +0,0 @@
-#include "main/glheader.h"
-#include "main/macros.h"
-#include "main/mtypes.h"
-#include "main/colormac.h"
-#include "swrast/swrast.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "i810span.h"
-#include "i810ioctl.h"
-
-
-#define DBG 0
-
-#define LOCAL_VARS \
- i810ContextPtr imesa = I810_CONTEXT(ctx); \
- __DRIdrawable *dPriv = imesa->driDrawable; \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- GLuint pitch = drb->pitch; \
- GLuint height = dPriv->h; \
- GLushort p; \
- char *buf = (char *)(drb->flippedData + \
- dPriv->x * 2 + \
- dPriv->y * pitch); \
- (void) buf; (void) p
-
-#define LOCAL_DEPTH_VARS \
- i810ContextPtr imesa = I810_CONTEXT(ctx); \
- __DRIdrawable *dPriv = imesa->driDrawable; \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- GLuint pitch = drb->pitch; \
- GLuint height = dPriv->h; \
- char *buf = (char *)(drb->Base.Data + \
- dPriv->x * 2 + \
- dPriv->y * pitch)
-
-#define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_565( color[0], color[1], color[2] )
-
-#define Y_FLIP(_y) (height - _y - 1)
-
-#define HW_LOCK()
-
-#define HW_UNLOCK()
-
-/* 16 bit, 565 rgb color spanline and pixel functions
- */
-#define WRITE_RGBA( _x, _y, r, g, b, a ) \
- *(GLushort *)(buf + _x*2 + _y*pitch) = ( (((int)r & 0xf8) << 8) | \
- (((int)g & 0xfc) << 3) | \
- (((int)b & 0xf8) >> 3))
-#define WRITE_PIXEL( _x, _y, p ) \
- *(GLushort *)(buf + _x*2 + _y*pitch) = p
-
-#define READ_RGBA( rgba, _x, _y ) \
-do { \
- GLushort p = *(GLushort *)(buf + _x*2 + _y*pitch); \
- rgba[0] = ((p >> 8) & 0xf8) * 255 / 0xf8; \
- rgba[1] = ((p >> 3) & 0xfc) * 255 / 0xfc; \
- rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \
- rgba[3] = 255; \
-} while(0)
-
-#define TAG(x) i810##x##_565
-#include "spantmp.h"
-
-/* 16 bit depthbuffer functions.
- */
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH( _x, _y, d ) \
- *(GLushort *)(buf + (_x)*2 + (_y)*pitch) = d;
-
-#define READ_DEPTH( d, _x, _y ) \
- d = *(GLushort *)(buf + (_x)*2 + (_y)*pitch);
-
-#define TAG(x) i810##x##_z16
-#include "depthtmp.h"
-
-
-/* Move locking out to get reasonable span performance.
- */
-void i810SpanRenderStart( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- I810_FIREVERTICES(imesa);
- LOCK_HARDWARE(imesa);
- i810RegetLockQuiescent( imesa );
-}
-
-void i810SpanRenderFinish( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- _swrast_flush( ctx );
- UNLOCK_HARDWARE( imesa );
-}
-
-void i810InitSpanFuncs( struct gl_context *ctx )
-{
- struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
- swdd->SpanRenderStart = i810SpanRenderStart;
- swdd->SpanRenderFinish = i810SpanRenderFinish;
-}
-
-
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-i810SetSpanFunctions(driRenderbuffer *drb, const struct gl_config *vis)
-{
- if (drb->Base.InternalFormat == GL_RGBA) {
- /* always 565 RGB */
- i810InitPointers_565(&drb->Base);
- }
- else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
- i810InitDepthPointers_z16(&drb->Base);
- }
- else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT24) {
- /* should never get here */
- drb->Base.GetRow = NULL;
- drb->Base.GetValues = NULL;
- drb->Base.PutRow = NULL;
- drb->Base.PutMonoRow = NULL;
- drb->Base.PutValues = NULL;
- drb->Base.PutMonoValues = NULL;
- }
- else if (drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) {
- drb->Base.GetRow = NULL;
- drb->Base.GetValues = NULL;
- drb->Base.PutRow = NULL;
- drb->Base.PutMonoRow = NULL;
- drb->Base.PutValues = NULL;
- drb->Base.PutMonoValues = NULL;
- }
-}
diff --git a/src/mesa/drivers/dri/i810/i810span.h b/src/mesa/drivers/dri/i810/i810span.h
deleted file mode 100644
index 184a37a103b..00000000000
--- a/src/mesa/drivers/dri/i810/i810span.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _I810_SPAN_H
-#define _I810_SPAN_H
-
-#include "drirenderbuffer.h"
-
-extern void i810InitSpanFuncs( struct gl_context *ctx );
-
-extern void i810SpanRenderFinish( struct gl_context *ctx );
-extern void i810SpanRenderStart( struct gl_context *ctx );
-
-extern void
-i810SetSpanFunctions(driRenderbuffer *rb, const struct gl_config *vis);
-
-#endif
diff --git a/src/mesa/drivers/dri/i810/i810state.c b/src/mesa/drivers/dri/i810/i810state.c
deleted file mode 100644
index 6040abf7fac..00000000000
--- a/src/mesa/drivers/dri/i810/i810state.c
+++ /dev/null
@@ -1,1002 +0,0 @@
-
-#include
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/dd.h"
-#include "main/colormac.h"
-#include "swrast/swrast.h"
-#include "tnl/tnl.h"
-#include "tnl/t_pipeline.h"
-#include "vbo/vbo.h"
-#include "swrast_setup/swrast_setup.h"
-
-#include "texmem.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "i810context.h"
-#include "i810state.h"
-#include "i810tex.h"
-#include "i810ioctl.h"
-
-
-static INLINE GLuint i810PackColor(GLuint format,
- GLubyte r, GLubyte g,
- GLubyte b, GLubyte a)
-{
-
- if (I810_DEBUG&DEBUG_DRI)
- fprintf(stderr, "%s\n", __FUNCTION__);
-
- switch (format) {
- case DV_PF_555:
- return PACK_COLOR_1555( a, r, g, b );
- case DV_PF_565:
- return PACK_COLOR_565( r, g, b );
- default:
- fprintf(stderr, "unknown format %d\n", (int)format);
- return 0;
- }
-}
-
-
-static void i810AlphaFunc(struct gl_context *ctx, GLenum func, GLfloat ref)
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLuint a = (ZA_UPDATE_ALPHAFUNC|ZA_UPDATE_ALPHAREF);
- GLubyte refByte;
-
- CLAMPED_FLOAT_TO_UBYTE(refByte, ref);
-
- switch (ctx->Color.AlphaFunc) {
- case GL_NEVER: a |= ZA_ALPHA_NEVER; break;
- case GL_LESS: a |= ZA_ALPHA_LESS; break;
- case GL_GEQUAL: a |= ZA_ALPHA_GEQUAL; break;
- case GL_LEQUAL: a |= ZA_ALPHA_LEQUAL; break;
- case GL_GREATER: a |= ZA_ALPHA_GREATER; break;
- case GL_NOTEQUAL: a |= ZA_ALPHA_NOTEQUAL; break;
- case GL_EQUAL: a |= ZA_ALPHA_EQUAL; break;
- case GL_ALWAYS: a |= ZA_ALPHA_ALWAYS; break;
- default: return;
- }
-
- a |= ((refByte & 0xfc) << ZA_ALPHAREF_SHIFT);
-
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_ZA] &= ~(ZA_ALPHA_MASK|ZA_ALPHAREF_MASK);
- imesa->Setup[I810_CTXREG_ZA] |= a;
-}
-
-static void i810BlendEquationSeparate(struct gl_context *ctx,
- GLenum modeRGB, GLenum modeA)
-{
- assert( modeRGB == modeA );
-
- /* Can only do GL_ADD equation in hardware */
- FALLBACK( I810_CONTEXT(ctx), I810_FALLBACK_BLEND_EQ,
- modeRGB != GL_FUNC_ADD);
-
- /* BlendEquation sets ColorLogicOpEnabled in an unexpected
- * manner.
- */
- FALLBACK( I810_CONTEXT(ctx), I810_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
-}
-
-static void i810BlendFuncSeparate( struct gl_context *ctx, GLenum sfactorRGB,
- GLenum dfactorRGB, GLenum sfactorA,
- GLenum dfactorA )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLuint a = SDM_UPDATE_SRC_BLEND | SDM_UPDATE_DST_BLEND;
- GLboolean fallback = GL_FALSE;
-
- switch (ctx->Color.Blend[0].SrcRGB) {
- case GL_ZERO: a |= SDM_SRC_ZERO; break;
- case GL_ONE: a |= SDM_SRC_ONE; break;
- case GL_SRC_COLOR: a |= SDM_SRC_SRC_COLOR; break;
- case GL_ONE_MINUS_SRC_COLOR: a |= SDM_SRC_INV_SRC_COLOR; break;
- case GL_SRC_ALPHA: a |= SDM_SRC_SRC_ALPHA; break;
- case GL_ONE_MINUS_SRC_ALPHA: a |= SDM_SRC_INV_SRC_ALPHA; break;
- case GL_DST_ALPHA: a |= SDM_SRC_ONE; break;
- case GL_ONE_MINUS_DST_ALPHA: a |= SDM_SRC_ZERO; break;
- case GL_DST_COLOR: a |= SDM_SRC_DST_COLOR; break;
- case GL_ONE_MINUS_DST_COLOR: a |= SDM_SRC_INV_DST_COLOR; break;
-
- /* (f, f, f, 1), f = min(As, 1 - Ad) = min(As, 1 - 1) = 0
- * So (f, f, f, 1) = (0, 0, 0, 1). Since there is no destination alpha and
- * the only supported alpha operation is GL_FUNC_ADD, the result modulating
- * the source alpha with the alpha factor is largely irrelevant.
- */
- case GL_SRC_ALPHA_SATURATE: a |= SDM_SRC_ZERO; break;
-
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- fallback = GL_TRUE;
- break;
- default:
- return;
- }
-
- switch (ctx->Color.Blend[0].DstRGB) {
- case GL_ZERO: a |= SDM_DST_ZERO; break;
- case GL_ONE: a |= SDM_DST_ONE; break;
- case GL_SRC_COLOR: a |= SDM_DST_SRC_COLOR; break;
- case GL_ONE_MINUS_SRC_COLOR: a |= SDM_DST_INV_SRC_COLOR; break;
- case GL_SRC_ALPHA: a |= SDM_DST_SRC_ALPHA; break;
- case GL_ONE_MINUS_SRC_ALPHA: a |= SDM_DST_INV_SRC_ALPHA; break;
- case GL_DST_ALPHA: a |= SDM_DST_ONE; break;
- case GL_ONE_MINUS_DST_ALPHA: a |= SDM_DST_ZERO; break;
- case GL_DST_COLOR: a |= SDM_DST_DST_COLOR; break;
- case GL_ONE_MINUS_DST_COLOR: a |= SDM_DST_INV_DST_COLOR; break;
-
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- fallback = GL_TRUE;
- break;
- default:
- return;
- }
-
- FALLBACK( imesa, I810_FALLBACK_BLEND_FUNC, fallback);
- if (!fallback) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_SDM] &= ~(SDM_SRC_MASK|SDM_DST_MASK);
- imesa->Setup[I810_CTXREG_SDM] |= a;
- }
-}
-
-
-
-static void i810DepthFunc(struct gl_context *ctx, GLenum func)
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- int zmode;
-
- switch(func) {
- case GL_NEVER: zmode = LCS_Z_NEVER; break;
- case GL_ALWAYS: zmode = LCS_Z_ALWAYS; break;
- case GL_LESS: zmode = LCS_Z_LESS; break;
- case GL_LEQUAL: zmode = LCS_Z_LEQUAL; break;
- case GL_EQUAL: zmode = LCS_Z_EQUAL; break;
- case GL_GREATER: zmode = LCS_Z_GREATER; break;
- case GL_GEQUAL: zmode = LCS_Z_GEQUAL; break;
- case GL_NOTEQUAL: zmode = LCS_Z_NOTEQUAL; break;
- default: return;
- }
-
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_LCS] &= ~LCS_Z_MASK;
- imesa->Setup[I810_CTXREG_LCS] |= zmode;
-}
-
-static void i810DepthMask(struct gl_context *ctx, GLboolean flag)
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
-
- if (flag)
- imesa->Setup[I810_CTXREG_B2] |= B2_ZB_WRITE_ENABLE;
- else
- imesa->Setup[I810_CTXREG_B2] &= ~B2_ZB_WRITE_ENABLE;
-}
-
-
-/* =============================================================
- * Polygon stipple
- *
- * The i810 supports a 4x4 stipple natively, GL wants 32x32.
- * Fortunately stipple is usually a repeating pattern.
- */
-static void i810PolygonStipple( struct gl_context *ctx, const GLubyte *mask )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- const GLubyte *m = mask;
- GLubyte p[4];
- int i,j,k;
- int active = (ctx->Polygon.StippleFlag &&
- imesa->reduced_primitive == GL_TRIANGLES);
- GLuint newMask;
-
- if (active) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_ST1] &= ~ST1_ENABLE;
- }
-
- p[0] = mask[12] & 0xf; p[0] |= p[0] << 4;
- p[1] = mask[8] & 0xf; p[1] |= p[1] << 4;
- p[2] = mask[4] & 0xf; p[2] |= p[2] << 4;
- p[3] = mask[0] & 0xf; p[3] |= p[3] << 4;
-
- for (k = 0 ; k < 8 ; k++)
- for (j = 0 ; j < 4; j++)
- for (i = 0 ; i < 4 ; i++)
- if (*m++ != p[j]) {
- imesa->stipple_in_hw = 0;
- return;
- }
-
- newMask = ((p[0] & 0xf) << 0) |
- ((p[1] & 0xf) << 4) |
- ((p[2] & 0xf) << 8) |
- ((p[3] & 0xf) << 12);
-
- if (newMask == 0xffff) {
- /* this is needed to make conform pass */
- imesa->stipple_in_hw = 0;
- return;
- }
-
- imesa->Setup[I810_CTXREG_ST1] &= ~0xffff;
- imesa->Setup[I810_CTXREG_ST1] |= newMask;
- imesa->stipple_in_hw = 1;
-
- if (active)
- imesa->Setup[I810_CTXREG_ST1] |= ST1_ENABLE;
-}
-
-
-
-/* =============================================================
- * Hardware clipping
- */
-
-
-static void i810Scissor( struct gl_context *ctx, GLint x, GLint y,
- GLsizei w, GLsizei h )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
-
- if (ctx->Scissor.Enabled) {
- I810_FIREVERTICES(imesa); /* don't pipeline cliprect changes */
- imesa->upload_cliprects = GL_TRUE;
- }
-
- imesa->scissor_rect.x1 = x;
- imesa->scissor_rect.y1 = imesa->driDrawable->h - (y + h);
- imesa->scissor_rect.x2 = x + w;
- imesa->scissor_rect.y2 = imesa->driDrawable->h - y;
-}
-
-
-static void i810LogicOp( struct gl_context *ctx, GLenum opcode )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- FALLBACK( imesa, I810_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled && opcode != GL_COPY) );
-}
-
-/* Fallback to swrast for select and feedback.
- */
-static void i810RenderMode( struct gl_context *ctx, GLenum mode )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- FALLBACK( imesa, I810_FALLBACK_RENDERMODE, (mode != GL_RENDER) );
-}
-
-
-void i810DrawBuffer(struct gl_context *ctx, GLenum mode )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- int front = 0;
-
- if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
- /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */
- FALLBACK( imesa, I810_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0]) {
- case BUFFER_FRONT_LEFT:
- front = 1;
- break;
- case BUFFER_BACK_LEFT:
- front = 0;
- break;
- default:
- FALLBACK( imesa, I810_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- if ( imesa->sarea->pf_current_page == 1 )
- front ^= 1;
-
- FALLBACK( imesa, I810_FALLBACK_DRAW_BUFFER, GL_FALSE );
- I810_FIREVERTICES(imesa);
- I810_STATECHANGE(imesa, I810_UPLOAD_BUFFERS);
-
- if (front)
- {
- imesa->BufferSetup[I810_DESTREG_DI1] = (imesa->i810Screen->fbOffset |
- imesa->i810Screen->backPitchBits);
- i810XMesaSetFrontClipRects( imesa );
- }
- else
- {
- imesa->BufferSetup[I810_DESTREG_DI1] = (imesa->i810Screen->backOffset |
- imesa->i810Screen->backPitchBits);
- i810XMesaSetBackClipRects( imesa );
- }
-}
-
-
-static void i810ReadBuffer(struct gl_context *ctx, GLenum mode )
-{
- /* XXX anything? */
-}
-
-
-static void i810ClearColor(struct gl_context *ctx, const GLfloat color[4] )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLubyte c[4];
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
- imesa->ClearColor = i810PackColor( imesa->i810Screen->fbFormat,
- c[0], c[1], c[2], c[3] );
-}
-
-
-/* =============================================================
- * Culling - the i810 isn't quite as clean here as the rest of
- * its interfaces, but it's not bad.
- */
-static void i810CullFaceFrontFace(struct gl_context *ctx, GLenum unused)
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLuint mode = LCS_CULL_BOTH;
-
- if (ctx->Polygon.CullFaceMode != GL_FRONT_AND_BACK) {
- mode = LCS_CULL_CW;
- if (ctx->Polygon.CullFaceMode == GL_FRONT)
- mode ^= (LCS_CULL_CW ^ LCS_CULL_CCW);
- if (ctx->Polygon.FrontFace != GL_CCW)
- mode ^= (LCS_CULL_CW ^ LCS_CULL_CCW);
- }
-
- imesa->LcsCullMode = mode;
-
- if (ctx->Polygon.CullFlag)
- {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_LCS] &= ~LCS_CULL_MASK;
- imesa->Setup[I810_CTXREG_LCS] |= mode;
- }
-}
-
-
-static void i810LineWidth( struct gl_context *ctx, GLfloat widthf )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- /* AA, non-AA limits are same */
- const int width = (int) CLAMP(ctx->Line.Width,
- ctx->Const.MinLineWidth,
- ctx->Const.MaxLineWidth);
-
- imesa->LcsLineWidth = 0;
- if (width & 1) imesa->LcsLineWidth |= LCS_LINEWIDTH_1_0;
- if (width & 2) imesa->LcsLineWidth |= LCS_LINEWIDTH_2_0;
-
- if (imesa->reduced_primitive == GL_LINES) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_LCS] &= ~LCS_LINEWIDTH_3_0;
- imesa->Setup[I810_CTXREG_LCS] |= imesa->LcsLineWidth;
- }
-}
-
-static void i810PointSize( struct gl_context *ctx, GLfloat sz )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- /* AA, non-AA limits are same */
- const int size = (int) CLAMP(ctx->Point.Size,
- ctx->Const.MinPointSize,
- ctx->Const.MaxPointSize);
-
- imesa->LcsPointSize = 0;
- if (size & 1) imesa->LcsPointSize |= LCS_LINEWIDTH_1_0;
- if (size & 2) imesa->LcsPointSize |= LCS_LINEWIDTH_2_0;
-
- if (imesa->reduced_primitive == GL_POINTS) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_LCS] &= ~LCS_LINEWIDTH_3_0;
- imesa->Setup[I810_CTXREG_LCS] |= imesa->LcsPointSize;
- }
-}
-
-/* =============================================================
- * Color masks
- */
-
-static void i810ColorMask(struct gl_context *ctx,
- GLboolean r, GLboolean g,
- GLboolean b, GLboolean a )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- GLuint tmp = 0;
-
- if (r && g && b) {
- tmp = imesa->Setup[I810_CTXREG_B2] | B2_FB_WRITE_ENABLE;
- FALLBACK( imesa, I810_FALLBACK_COLORMASK, GL_FALSE );
- } else if (!r && !g && !b) {
- tmp = imesa->Setup[I810_CTXREG_B2] & ~B2_FB_WRITE_ENABLE;
- FALLBACK( imesa, I810_FALLBACK_COLORMASK, GL_FALSE );
- } else {
- FALLBACK( imesa, I810_FALLBACK_COLORMASK, GL_TRUE );
- return;
- }
-
- if (tmp != imesa->Setup[I810_CTXREG_B2]) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_B2] = tmp;
- imesa->dirty |= I810_UPLOAD_CTX;
- }
-}
-
-/* Seperate specular not fully implemented on the i810.
- */
-static void i810LightModelfv(struct gl_context *ctx, GLenum pname,
- const GLfloat *param)
-{
- if (pname == GL_LIGHT_MODEL_COLOR_CONTROL)
- {
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- FALLBACK( imesa, I810_FALLBACK_SPECULAR,
- (ctx->Light.Enabled &&
- ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR));
- }
-}
-
-/* But the 815 has it...
- */
-static void i810LightModelfv_i815(struct gl_context *ctx, GLenum pname,
- const GLfloat *param)
-{
- if (pname == GL_LIGHT_MODEL_COLOR_CONTROL)
- {
- i810ContextPtr imesa = I810_CONTEXT( ctx );
-
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
- imesa->Setup[I810_CTXREG_B1] |= B1_SPEC_ENABLE;
- else
- imesa->Setup[I810_CTXREG_B1] &= ~B1_SPEC_ENABLE;
- }
-}
-
-/* In Mesa 3.5 we can reliably do native flatshading.
- */
-static void i810ShadeModel(struct gl_context *ctx, GLenum mode)
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- if (mode == GL_FLAT)
- imesa->Setup[I810_CTXREG_LCS] |= LCS_INTERP_FLAT;
- else
- imesa->Setup[I810_CTXREG_LCS] &= ~LCS_INTERP_FLAT;
-}
-
-
-
-/* =============================================================
- * Fog
- */
-static void i810Fogfv(struct gl_context *ctx, GLenum pname, const GLfloat *param)
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
-
- if (pname == GL_FOG_COLOR) {
- GLuint color = (((GLubyte)(ctx->Fog.Color[0]*255.0F) << 16) |
- ((GLubyte)(ctx->Fog.Color[1]*255.0F) << 8) |
- ((GLubyte)(ctx->Fog.Color[2]*255.0F) << 0));
-
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_FOG] = ((GFX_OP_FOG_COLOR | color) &
- ~FOG_RESERVED_MASK);
- }
-}
-
-
-/* =============================================================
- */
-static void i810Enable(struct gl_context *ctx, GLenum cap, GLboolean state)
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
-
- switch(cap) {
- case GL_ALPHA_TEST:
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_B1] &= ~B1_ALPHA_TEST_ENABLE;
- if (state)
- imesa->Setup[I810_CTXREG_B1] |= B1_ALPHA_TEST_ENABLE;
- break;
- case GL_BLEND:
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_B1] &= ~B1_BLEND_ENABLE;
- if (state)
- imesa->Setup[I810_CTXREG_B1] |= B1_BLEND_ENABLE;
-
- /* For some reason enable(GL_BLEND) affects ColorLogicOpEnabled.
- */
- FALLBACK( imesa, I810_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
- break;
- case GL_DEPTH_TEST:
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_B1] &= ~B1_Z_TEST_ENABLE;
- if (state)
- imesa->Setup[I810_CTXREG_B1] |= B1_Z_TEST_ENABLE;
- break;
- case GL_SCISSOR_TEST:
- /* XXX without these next two lines, conform's scissor test fails */
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- I810_STATECHANGE(imesa, I810_UPLOAD_BUFFERS);
- I810_FIREVERTICES(imesa); /* don't pipeline cliprect changes */
- imesa->upload_cliprects = GL_TRUE;
- imesa->scissor = state;
- break;
- case GL_POLYGON_STIPPLE:
- if (imesa->stipple_in_hw && imesa->reduced_primitive == GL_TRIANGLES)
- {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_ST1] &= ~ST1_ENABLE;
- if (state)
- imesa->Setup[I810_CTXREG_ST1] |= ST1_ENABLE;
- }
- break;
- case GL_LINE_SMOOTH:
- /* Need to fatten the lines by .5, or they disappear...
- */
- if (imesa->reduced_primitive == GL_LINES) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_AA] &= ~AA_ENABLE;
- imesa->Setup[I810_CTXREG_LCS] &= ~LCS_LINEWIDTH_0_5;
- if (state) {
- imesa->Setup[I810_CTXREG_AA] |= AA_ENABLE;
- imesa->Setup[I810_CTXREG_LCS] |= LCS_LINEWIDTH_0_5;
- }
- }
- break;
- case GL_POINT_SMOOTH:
- if (imesa->reduced_primitive == GL_POINTS) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_AA] &= ~AA_ENABLE;
- imesa->Setup[I810_CTXREG_LCS] &= ~LCS_LINEWIDTH_0_5;
- if (state) {
- imesa->Setup[I810_CTXREG_AA] |= AA_ENABLE;
- imesa->Setup[I810_CTXREG_LCS] |= LCS_LINEWIDTH_0_5;
- }
- }
- break;
- case GL_POLYGON_SMOOTH:
- if (imesa->reduced_primitive == GL_TRIANGLES) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_AA] &= ~AA_ENABLE;
- if (state)
- imesa->Setup[I810_CTXREG_AA] |= AA_ENABLE;
- }
- break;
- case GL_FOG:
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_B1] &= ~B1_FOG_ENABLE;
- if (state)
- imesa->Setup[I810_CTXREG_B1] |= B1_FOG_ENABLE;
- break;
- case GL_CULL_FACE:
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_LCS] &= ~LCS_CULL_MASK;
- if (state)
- imesa->Setup[I810_CTXREG_LCS] |= imesa->LcsCullMode;
- else
- imesa->Setup[I810_CTXREG_LCS] |= LCS_CULL_DISABLE;
- break;
- case GL_TEXTURE_2D:
- case GL_TEXTURE_RECTANGLE_NV:
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- if (ctx->Texture.CurrentUnit == 0) {
- imesa->Setup[I810_CTXREG_MT] &= ~MT_TEXEL0_ENABLE;
- if (state)
- imesa->Setup[I810_CTXREG_MT] |= MT_TEXEL0_ENABLE;
- } else {
- imesa->Setup[I810_CTXREG_MT] &= ~MT_TEXEL1_ENABLE;
- if (state)
- imesa->Setup[I810_CTXREG_MT] |= MT_TEXEL1_ENABLE;
- }
- break;
- case GL_COLOR_LOGIC_OP:
- FALLBACK( imesa, I810_FALLBACK_LOGICOP,
- (state && ctx->Color.LogicOp != GL_COPY));
- break;
- case GL_STENCIL_TEST:
- FALLBACK( imesa, I810_FALLBACK_STENCIL, state );
- break;
- default:
- ;
- }
-}
-
-
-
-
-
-
-
-/* =============================================================
- */
-
-
-
-
-void i810EmitDrawingRectangle( i810ContextPtr imesa )
-{
- __DRIdrawable *dPriv = imesa->driDrawable;
- i810ScreenPrivate *i810Screen = imesa->i810Screen;
- int x0 = imesa->drawX;
- int y0 = imesa->drawY;
- int x1 = x0 + dPriv->w;
- int y1 = y0 + dPriv->h;
- GLuint dr2, dr3, dr4;
-
-
- /* Coordinate origin of the window - may be offscreen.
- */
- dr4 = imesa->BufferSetup[I810_DESTREG_DR4] = ((y0<<16) |
- (((unsigned)x0)&0xFFFF));
-
- /* Clip to screen.
- */
- if (x0 < 0) x0 = 0;
- if (y0 < 0) y0 = 0;
- if (x1 > i810Screen->width-1) x1 = i810Screen->width-1;
- if (y1 > i810Screen->height-1) y1 = i810Screen->height-1;
-
-
- /* Onscreen drawing rectangle.
- */
- dr2 = imesa->BufferSetup[I810_DESTREG_DR2] = ((y0<<16) | x0);
- dr3 = imesa->BufferSetup[I810_DESTREG_DR3] = (((y1+1)<<16) | (x1+1));
-
-
- imesa->dirty |= I810_UPLOAD_BUFFERS;
-}
-
-
-
-static void i810CalcViewport( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- const GLfloat *v = ctx->Viewport._WindowMap.m;
- GLfloat *m = imesa->ViewportMatrix.m;
-
- /* See also i810_translate_vertex. SUBPIXEL adjustments can be done
- * via state vars, too.
- */
- m[MAT_SX] = v[MAT_SX];
- m[MAT_TX] = v[MAT_TX] + SUBPIXEL_X;
- m[MAT_SY] = - v[MAT_SY];
- m[MAT_TY] = - v[MAT_TY] + imesa->driDrawable->h + SUBPIXEL_Y;
- m[MAT_SZ] = v[MAT_SZ] * (1.0 / 0xffff);
- m[MAT_TZ] = v[MAT_TZ] * (1.0 / 0xffff);
-}
-
-static void i810Viewport( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height )
-{
- i810CalcViewport( ctx );
-}
-
-static void i810DepthRange( struct gl_context *ctx,
- GLclampd nearval, GLclampd farval )
-{
- i810CalcViewport( ctx );
-}
-
-
-
-void i810PrintDirty( const char *msg, GLuint state )
-{
- fprintf(stderr, "%s (0x%x): %s%s%s%s\n",
- msg,
- (unsigned int) state,
- (state & I810_UPLOAD_TEX0) ? "upload-tex0, " : "",
- (state & I810_UPLOAD_TEX1) ? "upload-tex1, " : "",
- (state & I810_UPLOAD_CTX) ? "upload-ctx, " : "",
- (state & I810_UPLOAD_BUFFERS) ? "upload-bufs, " : ""
- );
-}
-
-
-
-void i810InitState( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- i810ScreenPrivate *i810Screen = imesa->i810Screen;
-
- memset(imesa->Setup, 0, sizeof(imesa->Setup));
-
- imesa->Setup[I810_CTXREG_VF] = 0;
-
- imesa->Setup[I810_CTXREG_MT] = (GFX_OP_MAP_TEXELS |
- MT_UPDATE_TEXEL1_STATE |
- MT_TEXEL1_COORD1 |
- MT_TEXEL1_MAP1 |
- MT_TEXEL1_DISABLE |
- MT_UPDATE_TEXEL0_STATE |
- MT_TEXEL0_COORD0 |
- MT_TEXEL0_MAP0 |
- MT_TEXEL0_DISABLE);
-
- imesa->Setup[I810_CTXREG_MC0] = ( GFX_OP_MAP_COLOR_STAGES |
- MC_STAGE_0 |
- MC_UPDATE_DEST |
- MC_DEST_CURRENT |
- MC_UPDATE_ARG1 |
- ((MC_ARG_ITERATED_COLOR |
- MC_ARG_DONT_REPLICATE_ALPHA |
- MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
- MC_UPDATE_ARG2 |
- ((MC_ARG_ONE |
- MC_ARG_DONT_REPLICATE_ALPHA |
- MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
- MC_UPDATE_OP |
- MC_OP_ARG1 );
-
- imesa->Setup[I810_CTXREG_MC1] = ( GFX_OP_MAP_COLOR_STAGES |
- MC_STAGE_1 |
- MC_UPDATE_DEST |
- MC_DEST_CURRENT |
- MC_UPDATE_ARG1 |
- ((MC_ARG_ONE |
- MC_ARG_DONT_REPLICATE_ALPHA |
- MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
- MC_UPDATE_ARG2 |
- ((MC_ARG_ONE |
- MC_ARG_DONT_REPLICATE_ALPHA |
- MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
- MC_UPDATE_OP |
- MC_OP_DISABLE );
-
-
- imesa->Setup[I810_CTXREG_MC2] = ( GFX_OP_MAP_COLOR_STAGES |
- MC_STAGE_2 |
- MC_UPDATE_DEST |
- MC_DEST_CURRENT |
- MC_UPDATE_ARG1 |
- ((MC_ARG_CURRENT_COLOR |
- MC_ARG_REPLICATE_ALPHA |
- MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
- MC_UPDATE_ARG2 |
- ((MC_ARG_ONE |
- MC_ARG_DONT_REPLICATE_ALPHA |
- MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
- MC_UPDATE_OP |
- MC_OP_DISABLE );
-
-
- imesa->Setup[I810_CTXREG_MA0] = ( GFX_OP_MAP_ALPHA_STAGES |
- MA_STAGE_0 |
- MA_UPDATE_ARG1 |
- ((MA_ARG_ITERATED_ALPHA |
- MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
- MA_UPDATE_ARG2 |
- ((MA_ARG_CURRENT_ALPHA |
- MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
- MA_UPDATE_OP |
- MA_OP_ARG1 );
-
-
- imesa->Setup[I810_CTXREG_MA1] = ( GFX_OP_MAP_ALPHA_STAGES |
- MA_STAGE_1 |
- MA_UPDATE_ARG1 |
- ((MA_ARG_CURRENT_ALPHA |
- MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
- MA_UPDATE_ARG2 |
- ((MA_ARG_CURRENT_ALPHA |
- MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
- MA_UPDATE_OP |
- MA_OP_ARG1 );
-
-
- imesa->Setup[I810_CTXREG_MA2] = ( GFX_OP_MAP_ALPHA_STAGES |
- MA_STAGE_2 |
- MA_UPDATE_ARG1 |
- ((MA_ARG_CURRENT_ALPHA |
- MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
- MA_UPDATE_ARG2 |
- ((MA_ARG_CURRENT_ALPHA |
- MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
- MA_UPDATE_OP |
- MA_OP_ARG1 );
-
-
- imesa->Setup[I810_CTXREG_SDM] = ( GFX_OP_SRC_DEST_MONO |
- SDM_UPDATE_MONO_ENABLE |
- 0 |
- SDM_UPDATE_SRC_BLEND |
- SDM_SRC_ONE |
- SDM_UPDATE_DST_BLEND |
- SDM_DST_ZERO );
-
- /* Use for colormask:
- */
- imesa->Setup[I810_CTXREG_CF0] = GFX_OP_COLOR_FACTOR;
- imesa->Setup[I810_CTXREG_CF1] = 0xffffffff;
-
- imesa->Setup[I810_CTXREG_ZA] = (GFX_OP_ZBIAS_ALPHAFUNC |
- ZA_UPDATE_ALPHAFUNC |
- ZA_ALPHA_ALWAYS |
- ZA_UPDATE_ZBIAS |
- 0 |
- ZA_UPDATE_ALPHAREF |
- 0x0);
-
- imesa->Setup[I810_CTXREG_FOG] = (GFX_OP_FOG_COLOR |
- (0xffffff & ~FOG_RESERVED_MASK));
-
- /* Choose a pipe
- */
- imesa->Setup[I810_CTXREG_B1] = ( GFX_OP_BOOL_1 |
- B1_UPDATE_SPEC_SETUP_ENABLE |
- 0 |
- B1_UPDATE_ALPHA_SETUP_ENABLE |
- B1_ALPHA_SETUP_ENABLE |
- B1_UPDATE_CI_KEY_ENABLE |
- 0 |
- B1_UPDATE_CHROMAKEY_ENABLE |
- 0 |
- B1_UPDATE_Z_BIAS_ENABLE |
- 0 |
- B1_UPDATE_SPEC_ENABLE |
- 0 |
- B1_UPDATE_FOG_ENABLE |
- 0 |
- B1_UPDATE_ALPHA_TEST_ENABLE |
- 0 |
- B1_UPDATE_BLEND_ENABLE |
- 0 |
- B1_UPDATE_Z_TEST_ENABLE |
- 0 );
-
- imesa->Setup[I810_CTXREG_B2] = ( GFX_OP_BOOL_2 |
- B2_UPDATE_MAP_CACHE_ENABLE |
- B2_MAP_CACHE_ENABLE |
- B2_UPDATE_ALPHA_DITHER_ENABLE |
- 0 |
- B2_UPDATE_FOG_DITHER_ENABLE |
- 0 |
- B2_UPDATE_SPEC_DITHER_ENABLE |
- 0 |
- B2_UPDATE_RGB_DITHER_ENABLE |
- B2_RGB_DITHER_ENABLE |
- B2_UPDATE_FB_WRITE_ENABLE |
- B2_FB_WRITE_ENABLE |
- B2_UPDATE_ZB_WRITE_ENABLE |
- B2_ZB_WRITE_ENABLE );
-
- imesa->Setup[I810_CTXREG_LCS] = ( GFX_OP_LINEWIDTH_CULL_SHADE_MODE |
- LCS_UPDATE_ZMODE |
- LCS_Z_LESS |
- LCS_UPDATE_LINEWIDTH |
- LCS_LINEWIDTH_1_0 |
- LCS_UPDATE_ALPHA_INTERP |
- LCS_ALPHA_INTERP |
- LCS_UPDATE_FOG_INTERP |
- 0 |
- LCS_UPDATE_SPEC_INTERP |
- 0 |
- LCS_UPDATE_RGB_INTERP |
- LCS_RGB_INTERP |
- LCS_UPDATE_CULL_MODE |
- LCS_CULL_DISABLE);
-
- imesa->LcsCullMode = LCS_CULL_CW;
- imesa->LcsLineWidth = LCS_LINEWIDTH_1_0;
- imesa->LcsPointSize = LCS_LINEWIDTH_1_0;
-
- imesa->Setup[I810_CTXREG_PV] = ( GFX_OP_PV_RULE |
- PV_UPDATE_PIXRULE |
- PV_PIXRULE_ENABLE |
- PV_UPDATE_LINELIST |
- PV_LINELIST_PV1 |
- PV_UPDATE_TRIFAN |
- PV_TRIFAN_PV2 |
- PV_UPDATE_TRISTRIP |
- PV_TRISTRIP_PV2 );
-
-
- imesa->Setup[I810_CTXREG_ST0] = GFX_OP_STIPPLE;
- imesa->Setup[I810_CTXREG_ST1] = 0;
-
- imesa->Setup[I810_CTXREG_AA] = ( GFX_OP_ANTIALIAS |
- AA_UPDATE_EDGEFLAG |
- 0 |
- AA_UPDATE_POLYWIDTH |
- AA_POLYWIDTH_05 |
- AA_UPDATE_LINEWIDTH |
- AA_LINEWIDTH_05 |
- AA_UPDATE_BB_EXPANSION |
- 0 |
- AA_UPDATE_AA_ENABLE |
- 0 );
-
- memset(imesa->BufferSetup, 0, sizeof(imesa->BufferSetup));
- imesa->BufferSetup[I810_DESTREG_DI0] = CMD_OP_DESTBUFFER_INFO;
-
- if (imesa->glCtx->Visual.doubleBufferMode && imesa->sarea->pf_current_page == 0) {
- /* use back buffer by default */
- imesa->BufferSetup[I810_DESTREG_DI1] = (i810Screen->backOffset |
- i810Screen->backPitchBits);
- } else {
- /* use front buffer by default */
- imesa->BufferSetup[I810_DESTREG_DI1] = (i810Screen->fbOffset |
- i810Screen->backPitchBits);
- }
-
- imesa->BufferSetup[I810_DESTREG_DV0] = GFX_OP_DESTBUFFER_VARS;
- imesa->BufferSetup[I810_DESTREG_DV1] = (DV_HORG_BIAS_OGL |
- DV_VORG_BIAS_OGL |
- i810Screen->fbFormat);
-
- imesa->BufferSetup[I810_DESTREG_DR0] = GFX_OP_DRAWRECT_INFO;
- imesa->BufferSetup[I810_DESTREG_DR1] = DR1_RECT_CLIP_ENABLE;
-}
-
-
-static void i810InvalidateState( struct gl_context *ctx, GLuint new_state )
-{
- _swrast_InvalidateState( ctx, new_state );
- _swsetup_InvalidateState( ctx, new_state );
- _vbo_InvalidateState( ctx, new_state );
- _tnl_InvalidateState( ctx, new_state );
- I810_CONTEXT(ctx)->new_state |= new_state;
-}
-
-
-void i810InitStateFuncs(struct gl_context *ctx)
-{
- /* Callbacks for internal Mesa events.
- */
- ctx->Driver.UpdateState = i810InvalidateState;
-
- /* API callbacks
- */
- ctx->Driver.AlphaFunc = i810AlphaFunc;
- ctx->Driver.BlendEquationSeparate = i810BlendEquationSeparate;
- ctx->Driver.BlendFuncSeparate = i810BlendFuncSeparate;
- ctx->Driver.ClearColor = i810ClearColor;
- ctx->Driver.ColorMask = i810ColorMask;
- ctx->Driver.CullFace = i810CullFaceFrontFace;
- ctx->Driver.DepthFunc = i810DepthFunc;
- ctx->Driver.DepthMask = i810DepthMask;
- ctx->Driver.Enable = i810Enable;
- ctx->Driver.Fogfv = i810Fogfv;
- ctx->Driver.FrontFace = i810CullFaceFrontFace;
- ctx->Driver.LineWidth = i810LineWidth;
- ctx->Driver.LogicOpcode = i810LogicOp;
- ctx->Driver.PolygonStipple = i810PolygonStipple;
- ctx->Driver.RenderMode = i810RenderMode;
- ctx->Driver.Scissor = i810Scissor;
- ctx->Driver.DrawBuffer = i810DrawBuffer;
- ctx->Driver.ReadBuffer = i810ReadBuffer;
- ctx->Driver.ShadeModel = i810ShadeModel;
- ctx->Driver.DepthRange = i810DepthRange;
- ctx->Driver.Viewport = i810Viewport;
- ctx->Driver.PointSize = i810PointSize;
-
- if (IS_I815(I810_CONTEXT(ctx))) {
- ctx->Driver.LightModelfv = i810LightModelfv_i815;
- } else {
- ctx->Driver.LightModelfv = i810LightModelfv;
- }
-}
diff --git a/src/mesa/drivers/dri/i810/i810state.h b/src/mesa/drivers/dri/i810/i810state.h
deleted file mode 100644
index 96af1237651..00000000000
--- a/src/mesa/drivers/dri/i810/i810state.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _I810_STATE_H
-#define _I810_STATE_H
-
-#include "i810context.h"
-
-extern void i810InitState( struct gl_context *ctx );
-extern void i810InitStateFuncs( struct gl_context *ctx );
-extern void i810PrintDirty( const char *msg, GLuint state );
-extern void i810DrawBuffer(struct gl_context *ctx, GLenum mode );
-
-extern void i810Fallback( i810ContextPtr imesa, GLuint bit, GLboolean mode );
-#define FALLBACK( imesa, bit, mode ) i810Fallback( imesa, bit, mode )
-
-
-#endif
diff --git a/src/mesa/drivers/dri/i810/i810tex.c b/src/mesa/drivers/dri/i810/i810tex.c
deleted file mode 100644
index dba4ebaa5c7..00000000000
--- a/src/mesa/drivers/dri/i810/i810tex.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- * GLX Hardware Device Driver for Intel i810
- * Copyright (C) 1999 Keith Whitwell
- *
- * 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 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
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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.
- *
- */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/imports.h"
-#include "main/simple_list.h"
-#include "main/enums.h"
-#include "main/texstore.h"
-#include "main/teximage.h"
-#include "main/texobj.h"
-#include "main/colormac.h"
-#include "main/mm.h"
-
-#include "texmem.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "i810context.h"
-#include "i810tex.h"
-#include "i810ioctl.h"
-
-
-/*
- * Compute the 'S2.4' lod bias factor from the floating point OpenGL bias.
- */
-static GLuint i810ComputeLodBias(GLfloat bias)
-{
- int b = (int) (bias * 16.0) + 12;
- if (b > 63)
- b = 63;
- else if (b < -64)
- b = -64;
- return (GLuint) (b & MLC_LOD_BIAS_MASK);
-}
-
-
-static void i810SetTexWrapping(i810TextureObjectPtr tex,
- GLenum swrap, GLenum twrap)
-{
- tex->Setup[I810_TEXREG_MCS] &= ~(MCS_U_STATE_MASK| MCS_V_STATE_MASK);
-
- switch( swrap ) {
- case GL_REPEAT:
- tex->Setup[I810_TEXREG_MCS] |= MCS_U_WRAP;
- break;
- case GL_CLAMP:
- case GL_CLAMP_TO_EDGE:
- tex->Setup[I810_TEXREG_MCS] |= MCS_U_CLAMP;
- break;
- case GL_MIRRORED_REPEAT:
- tex->Setup[I810_TEXREG_MCS] |= MCS_U_MIRROR;
- break;
- default:
- _mesa_problem(NULL, "bad S wrap mode in %s", __FUNCTION__);
- }
-
- switch( twrap ) {
- case GL_REPEAT:
- tex->Setup[I810_TEXREG_MCS] |= MCS_V_WRAP;
- break;
- case GL_CLAMP:
- case GL_CLAMP_TO_EDGE:
- tex->Setup[I810_TEXREG_MCS] |= MCS_V_CLAMP;
- break;
- case GL_MIRRORED_REPEAT:
- tex->Setup[I810_TEXREG_MCS] |= MCS_V_MIRROR;
- break;
- default:
- _mesa_problem(NULL, "bad T wrap mode in %s", __FUNCTION__);
- }
-}
-
-
-static void i810SetTexFilter(i810ContextPtr imesa,
- i810TextureObjectPtr t,
- GLenum minf, GLenum magf,
- GLfloat bias)
-{
- t->Setup[I810_TEXREG_MF] &= ~(MF_MIN_MASK|
- MF_MAG_MASK|
- MF_MIP_MASK);
- t->Setup[I810_TEXREG_MLC] &= ~(MLC_LOD_BIAS_MASK);
-
- switch (minf) {
- case GL_NEAREST:
- t->Setup[I810_TEXREG_MF] |= MF_MIN_NEAREST | MF_MIP_NONE;
- break;
- case GL_LINEAR:
- t->Setup[I810_TEXREG_MF] |= MF_MIN_LINEAR | MF_MIP_NONE;
- break;
- case GL_NEAREST_MIPMAP_NEAREST:
- t->Setup[I810_TEXREG_MF] |= MF_MIN_NEAREST | MF_MIP_NEAREST;
- if (magf == GL_LINEAR) {
- /*bias -= 0.5;*/ /* this doesn't work too good */
- }
- break;
- case GL_LINEAR_MIPMAP_NEAREST:
- t->Setup[I810_TEXREG_MF] |= MF_MIN_LINEAR | MF_MIP_NEAREST;
- break;
- case GL_NEAREST_MIPMAP_LINEAR:
- if (IS_I815(imesa))
- t->Setup[I810_TEXREG_MF] |= MF_MIN_NEAREST | MF_MIP_LINEAR;
- else
- t->Setup[I810_TEXREG_MF] |= MF_MIN_NEAREST | MF_MIP_DITHER;
- /*
- if (magf == GL_LINEAR) {
- bias -= 0.5;
- }
- */
- bias -= 0.5; /* always biasing here looks better */
- break;
- case GL_LINEAR_MIPMAP_LINEAR:
- if (IS_I815(imesa))
- t->Setup[I810_TEXREG_MF] |= MF_MIN_LINEAR | MF_MIP_LINEAR;
- else
- t->Setup[I810_TEXREG_MF] |= MF_MIN_LINEAR | MF_MIP_DITHER;
- break;
- default:
- return;
- }
-
- switch (magf) {
- case GL_NEAREST:
- t->Setup[I810_TEXREG_MF] |= MF_MAG_NEAREST;
- break;
- case GL_LINEAR:
- t->Setup[I810_TEXREG_MF] |= MF_MAG_LINEAR;
- break;
- default:
- return;
- }
-
- t->Setup[I810_TEXREG_MLC] |= i810ComputeLodBias(bias);
-}
-
-
-static void
-i810SetTexBorderColor( i810TextureObjectPtr t, const GLfloat color[4] )
-{
- /* Need a fallback.
- */
-}
-
-
-static i810TextureObjectPtr
-i810AllocTexObj( struct gl_context *ctx, struct gl_texture_object *texObj )
-{
- i810TextureObjectPtr t;
- i810ContextPtr imesa = I810_CONTEXT(ctx);
-
- t = CALLOC_STRUCT( i810_texture_object_t );
- texObj->DriverData = t;
- if ( t != NULL ) {
- GLfloat bias = ctx->Texture.Unit[ctx->Texture.CurrentUnit].LodBias;
- /* Initialize non-image-dependent parts of the state:
- */
- t->base.tObj = texObj;
- t->Setup[I810_TEXREG_MI0] = GFX_OP_MAP_INFO;
- t->Setup[I810_TEXREG_MI1] = MI1_MAP_0;
- t->Setup[I810_TEXREG_MI2] = MI2_DIMENSIONS_ARE_LOG2;
- t->Setup[I810_TEXREG_MLC] = (GFX_OP_MAP_LOD_CTL |
- MLC_MAP_0 |
- /*MLC_DITHER_WEIGHT_FULL |*/
- MLC_DITHER_WEIGHT_12 |
- MLC_UPDATE_LOD_BIAS |
- 0x0);
- t->Setup[I810_TEXREG_MCS] = (GFX_OP_MAP_COORD_SETS |
- MCS_COORD_0 |
- MCS_UPDATE_NORMALIZED |
- MCS_NORMALIZED_COORDS |
- MCS_UPDATE_V_STATE |
- MCS_V_WRAP |
- MCS_UPDATE_U_STATE |
- MCS_U_WRAP);
- t->Setup[I810_TEXREG_MF] = (GFX_OP_MAP_FILTER |
- MF_MAP_0 |
- MF_UPDATE_ANISOTROPIC |
- MF_UPDATE_MIP_FILTER |
- MF_UPDATE_MAG_FILTER |
- MF_UPDATE_MIN_FILTER);
-
- make_empty_list( & t->base );
-
- i810SetTexWrapping( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT );
- /*i830SetTexMaxAnisotropy( t, texObj->MaxAnisotropy );*/
- i810SetTexFilter( imesa, t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter, bias );
- i810SetTexBorderColor( t, texObj->Sampler.BorderColor.f );
- }
-
- return t;
-}
-
-
-static void i810TexParameter( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj,
- GLenum pname, const GLfloat *params )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- i810TextureObjectPtr t = (i810TextureObjectPtr) tObj->DriverData;
-
- if (!t)
- return;
-
- if ( target != GL_TEXTURE_2D )
- return;
-
- /* Can't do the update now as we don't know whether to flush
- * vertices or not. Setting imesa->new_state means that
- * i810UpdateTextureState() will be called before any triangles are
- * rendered. If a statechange has occurred, it will be detected at
- * that point, and buffered vertices flushed.
- */
- switch (pname) {
- case GL_TEXTURE_MIN_FILTER:
- case GL_TEXTURE_MAG_FILTER:
- {
- GLfloat bias = ctx->Texture.Unit[ctx->Texture.CurrentUnit].LodBias;
- i810SetTexFilter( imesa, t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter, bias );
- }
- break;
-
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- i810SetTexWrapping( t, tObj->Sampler.WrapS, tObj->Sampler.WrapT );
- break;
-
- case GL_TEXTURE_BORDER_COLOR:
- i810SetTexBorderColor( t, tObj->Sampler.BorderColor.f );
- break;
-
- case GL_TEXTURE_BASE_LEVEL:
- case GL_TEXTURE_MAX_LEVEL:
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- /* This isn't the most efficient solution but there doesn't appear to
- * be a nice alternative for Radeon. Since there's no LOD clamping,
- * we just have to rely on loading the right subset of mipmap levels
- * to simulate a clamped LOD.
- */
- I810_FIREVERTICES( I810_CONTEXT(ctx) );
- driSwapOutTextureObject( (driTextureObject *) t );
- break;
-
- default:
- return;
- }
-
- if (t == imesa->CurrentTexObj[0]) {
- I810_STATECHANGE( imesa, I810_UPLOAD_TEX0 );
- }
-
- if (t == imesa->CurrentTexObj[1]) {
- I810_STATECHANGE( imesa, I810_UPLOAD_TEX1 );
- }
-}
-
-
-/**
- * Setup hardware bits for new texture environment settings.
- *
- * \todo
- * Determine whether or not \c param can be used instead of
- * \c texUnit->EnvColor in the \c GL_TEXTURE_ENV_COLOR case.
- */
-static void i810TexEnv( struct gl_context *ctx, GLenum target,
- GLenum pname, const GLfloat *param )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- const GLuint unit = ctx->Texture.CurrentUnit;
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
-
- /* Only one env color. Need a fallback if env colors are different
- * and texture setup references env color in both units.
- */
- switch (pname) {
- case GL_TEXTURE_ENV_COLOR: {
- GLubyte c[4];
- GLuint envColor;
-
- UNCLAMPED_FLOAT_TO_RGBA_CHAN( c, texUnit->EnvColor );
- envColor = PACK_COLOR_8888( c[3], c[0], c[1], c[2] );
-
- if (imesa->Setup[I810_CTXREG_CF1] != envColor) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_CF1] = envColor;
- }
- break;
- }
-
- case GL_TEXTURE_ENV_MODE:
- imesa->TexEnvImageFmt[unit] = 0; /* force recalc of env state */
- break;
-
- case GL_TEXTURE_LOD_BIAS: {
- if ( texUnit->_Current != NULL ) {
- const struct gl_texture_object *tObj = texUnit->_Current;
- i810TextureObjectPtr t = (i810TextureObjectPtr) tObj->DriverData;
-
- t->Setup[I810_TEXREG_MLC] &= ~(MLC_LOD_BIAS_MASK);
- t->Setup[I810_TEXREG_MLC] |= i810ComputeLodBias(*param);
- }
- break;
- }
-
- default:
- break;
- }
-}
-
-
-
-#if 0
-static void i810TexImage1D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint border,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *pack,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- i810TextureObjectPtr t = (i810TextureObjectPtr) texObj->DriverData;
- if (t) {
- i810SwapOutTexObj( imesa, t );
- }
-}
-
-static void i810TexSubImage1D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLsizei width,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *pack,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
-}
-#endif
-
-
-static void i810TexImage2D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint height, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- driTextureObject *t = (driTextureObject *) texObj->DriverData;
- if (t) {
- I810_FIREVERTICES( I810_CONTEXT(ctx) );
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) i810AllocTexObj( ctx, texObj );
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
- return;
- }
- }
- _mesa_store_teximage2d( ctx, target, level, internalFormat,
- width, height, border, format, type,
- pixels, packing, texObj, texImage );
-}
-
-static void i810TexSubImage2D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- driTextureObject *t = (driTextureObject *)texObj->DriverData;
- if (t) {
- I810_FIREVERTICES( I810_CONTEXT(ctx) );
- driSwapOutTextureObject( t );
- }
- _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width,
- height, format, type, pixels, packing, texObj,
- texImage);
-}
-
-
-static void i810BindTexture( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj )
-{
- assert( (target != GL_TEXTURE_2D) || (tObj->DriverData != NULL) );
-}
-
-
-static void i810DeleteTexture( struct gl_context *ctx, struct gl_texture_object *tObj )
-{
- driTextureObject * t = (driTextureObject *) tObj->DriverData;
- if (t) {
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- if (imesa)
- I810_FIREVERTICES( imesa );
- driDestroyTextureObject( t );
- }
- /* Free mipmap images and the texture object itself */
- _mesa_delete_texture_object(ctx, tObj);
-}
-
-/**
- * Choose a Mesa texture format to match the requested format.
- *
- * The i810 only supports 5 texture modes that are useful to Mesa. That
- * makes this routine pretty simple.
- */
-static gl_format
-i810ChooseTextureFormat( struct gl_context *ctx, GLint internalFormat,
- GLenum format, GLenum type )
-{
- switch ( internalFormat ) {
- case 4:
- case GL_RGBA:
- case GL_RGBA2:
- case GL_RGBA4:
- case GL_RGB5_A1:
- case GL_RGBA8:
- case GL_RGB10_A2:
- case GL_RGBA12:
- case GL_RGBA16:
- case GL_COMPRESSED_RGBA:
- if ( ((format == GL_BGRA) && (type == GL_UNSIGNED_SHORT_1_5_5_5_REV))
- || ((format == GL_RGBA) && (type == GL_UNSIGNED_SHORT_5_5_5_1))
- || (internalFormat == GL_RGB5_A1) ) {
- return MESA_FORMAT_ARGB1555;
- }
- return MESA_FORMAT_ARGB4444;
-
- case 3:
- case GL_RGB:
- case GL_COMPRESSED_RGB:
- case GL_R3_G3_B2:
- case GL_RGB4:
- case GL_RGB5:
- case GL_RGB8:
- case GL_RGB10:
- case GL_RGB12:
- case GL_RGB16:
- return MESA_FORMAT_RGB565;
-
- case GL_ALPHA:
- case GL_ALPHA4:
- case GL_ALPHA8:
- case GL_ALPHA12:
- case GL_ALPHA16:
- case GL_COMPRESSED_ALPHA:
- case 1:
- case GL_LUMINANCE:
- case GL_LUMINANCE4:
- case GL_LUMINANCE8:
- case GL_LUMINANCE12:
- case GL_LUMINANCE16:
- case GL_COMPRESSED_LUMINANCE:
- case 2:
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE4_ALPHA4:
- case GL_LUMINANCE6_ALPHA2:
- case GL_LUMINANCE8_ALPHA8:
- case GL_LUMINANCE12_ALPHA4:
- case GL_LUMINANCE12_ALPHA12:
- case GL_LUMINANCE16_ALPHA16:
- case GL_COMPRESSED_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- case GL_INTENSITY4:
- case GL_INTENSITY8:
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- case GL_COMPRESSED_INTENSITY:
- return MESA_FORMAT_AL88;
-
- case GL_YCBCR_MESA:
- if (type == GL_UNSIGNED_SHORT_8_8_MESA ||
- type == GL_UNSIGNED_BYTE)
- return MESA_FORMAT_YCBCR;
- else
- return MESA_FORMAT_YCBCR_REV;
-
- default:
- fprintf(stderr, "unexpected texture format in %s\n", __FUNCTION__);
- return MESA_FORMAT_NONE;
- }
-
- return MESA_FORMAT_NONE; /* never get here */
-}
-
-/**
- * Allocate a new texture object.
- * Called via ctx->Driver.NewTextureObject.
- * Note: this function will be called during context creation to
- * allocate the default texture objects.
- * Note: we could use containment here to 'derive' the driver-specific
- * texture object from the core mesa gl_texture_object. Not done at this time.
- */
-static struct gl_texture_object *
-i810NewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
-{
- struct gl_texture_object *obj;
- obj = _mesa_new_texture_object(ctx, name, target);
- i810AllocTexObj( ctx, obj );
- return obj;
-}
-
-void i810InitTextureFuncs( struct dd_function_table *functions )
-{
- functions->ChooseTextureFormat = i810ChooseTextureFormat;
- functions->TexImage2D = i810TexImage2D;
- functions->TexSubImage2D = i810TexSubImage2D;
- functions->BindTexture = i810BindTexture;
- functions->NewTextureObject = i810NewTextureObject;
- functions->DeleteTexture = i810DeleteTexture;
- functions->TexParameter = i810TexParameter;
- functions->TexEnv = i810TexEnv;
- functions->IsTextureResident = driIsTextureResident;
-}
diff --git a/src/mesa/drivers/dri/i810/i810tex.h b/src/mesa/drivers/dri/i810/i810tex.h
deleted file mode 100644
index b396848b79f..00000000000
--- a/src/mesa/drivers/dri/i810/i810tex.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * GLX Hardware Device Driver for Intel i810
- * Copyright (C) 1999 Keith Whitwell
- *
- * 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 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
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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.
- *
- *
- */
-
-#ifndef I810TEX_INC
-#define I810TEX_INC
-
-#include "main/mtypes.h"
-#include "main/mm.h"
-
-#include "i810_3d_reg.h"
-#include "texmem.h"
-
-#define I810_TEX_MAXLEVELS 11
-
-/* For shared texture space managment, these texture objects may also
- * be used as proxies for regions of texture memory containing other
- * client's textures. Such proxy textures (not to be confused with GL
- * proxy textures) are subject to the same LRU aging we use for our
- * own private textures, and thus we have a mechanism where we can
- * fairly decide between kicking out our own textures and those of
- * other clients.
- *
- * Non-local texture objects have a valid MemBlock to describe the
- * region managed by the other client, and can be identified by
- * 't->globj == 0'
- */
-struct i810_texture_object_t {
- driTextureObject base;
-
- int Pitch;
- int Height;
- int texelBytes;
- char *BufAddr;
-
- GLuint max_level;
-
- struct {
- const struct gl_texture_image *image;
- int offset; /* into BufAddr */
- int height;
- int internalFormat;
- } image[I810_TEX_MAXLEVELS];
-
- GLuint Setup[I810_TEX_SETUP_SIZE];
- GLuint dirty;
-
-};
-
-void i810UpdateTextureState( struct gl_context *ctx );
-void i810InitTextureFuncs( struct dd_function_table *functions );
-
-void i810DestroyTexObj( i810ContextPtr imesa, i810TextureObjectPtr t );
-int i810UploadTexImagesLocked( i810ContextPtr imesa, i810TextureObjectPtr t );
-
-#endif
diff --git a/src/mesa/drivers/dri/i810/i810texmem.c b/src/mesa/drivers/dri/i810/i810texmem.c
deleted file mode 100644
index 6e6b21cf2b9..00000000000
--- a/src/mesa/drivers/dri/i810/i810texmem.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * GLX Hardware Device Driver for Intel i810
- * Copyright (C) 1999 Keith Whitwell
- * Texmem interface changes (C) 2003 Dave Airlie
- *
- * 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 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
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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.
- *
- */
-
-#include "main/glheader.h"
-#include "main/macros.h"
-#include "main/mtypes.h"
-#include "main/simple_list.h"
-#include "main/enums.h"
-#include "main/colormac.h"
-#include "main/mm.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-#include "i810context.h"
-#include "i810tex.h"
-#include "i810ioctl.h"
-
-
-void i810DestroyTexObj(i810ContextPtr imesa, i810TextureObjectPtr t)
-{
- /* See if it was the driver's current object.
- */
- if ( imesa != NULL ) {
- if (imesa->CurrentTexObj[0] == t) {
- imesa->CurrentTexObj[0] = 0;
- imesa->dirty &= ~I810_UPLOAD_TEX0;
- }
-
- if (imesa->CurrentTexObj[1] == t) {
- imesa->CurrentTexObj[1] = 0;
- imesa->dirty &= ~I810_UPLOAD_TEX1;
- }
- }
-}
-
-
-
-#if defined(i386) || defined(__i386__)
-/* From linux kernel i386 header files, copes with odd sizes better
- * than COPY_DWORDS would:
- */
-static INLINE void * __memcpy(void * to, const void * from, size_t n)
-{
-int d0, d1, d2;
-__asm__ __volatile__(
- "rep ; movsl\n\t"
- "testb $2,%b4\n\t"
- "je 1f\n\t"
- "movsw\n"
- "1:\ttestb $1,%b4\n\t"
- "je 2f\n\t"
- "movsb\n"
- "2:"
- : "=&c" (d0), "=&D" (d1), "=&S" (d2)
- :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from)
- : "memory");
-return (to);
-}
-#else
-/* Allow compilation on other architectures */
-#define __memcpy memcpy
-#endif
-
-/* Upload an image from mesa's internal copy.
- */
-static void i810UploadTexLevel( i810ContextPtr imesa,
- i810TextureObjectPtr t, int hwlevel )
-{
- const struct gl_texture_image *image = t->image[hwlevel].image;
- int j;
- GLuint texelBytes;
-
- if (!image || !image->Data)
- return;
-
- texelBytes = _mesa_get_format_bytes(image->TexFormat);
-
- if (image->Width * texelBytes == t->Pitch) {
- GLubyte *dst = (GLubyte *)(t->BufAddr + t->image[hwlevel].offset);
- GLubyte *src = (GLubyte *)image->Data;
-
- memcpy( dst, src, t->Pitch * image->Height );
- }
- else {
- switch (texelBytes) {
- case 1:
- {
- GLubyte *dst = (GLubyte *)(t->BufAddr + t->image[hwlevel].offset);
- GLubyte *src = (GLubyte *)image->Data;
-
- for (j = 0 ; j < image->Height ; j++, dst += t->Pitch) {
- __memcpy(dst, src, image->Width );
- src += image->Width;
- }
- }
- break;
- case 2:
- {
- GLushort *dst = (GLushort *)(t->BufAddr + t->image[hwlevel].offset);
- GLushort *src = (GLushort *)image->Data;
-
- for (j = 0 ; j < image->Height ; j++, dst += (t->Pitch/2)) {
- __memcpy(dst, src, image->Width * 2 );
- src += image->Width;
- }
- }
- break;
- default:
- fprintf(stderr, "%s: Not supported texel size %d\n",
- __FUNCTION__, texelBytes);
- }
- }
-}
-
-/* This is called with the lock held. May have to eject our own and/or
- * other client's texture objects to make room for the upload.
- */
-int i810UploadTexImagesLocked( i810ContextPtr imesa, i810TextureObjectPtr t )
-{
- int i;
- int ofs;
- int numLevels;
-
- /* Do we need to eject LRU texture objects?
- */
- if (!t->base.memBlock) {
- int heap;
-
- heap = driAllocateTexture( imesa->texture_heaps, imesa->nr_heaps,
- (driTextureObject *) t);
-
- if ( heap == -1 ) {
- return -1;
- }
-
- assert(t->base.memBlock);
- ofs = t->base.memBlock->ofs;
- t->BufAddr = imesa->i810Screen->tex.map + ofs;
- t->Setup[I810_TEXREG_MI3] = imesa->i810Screen->textureOffset + ofs;
-
- if (t == imesa->CurrentTexObj[0])
- I810_STATECHANGE(imesa, I810_UPLOAD_TEX0);
-
- if (t == imesa->CurrentTexObj[1])
- I810_STATECHANGE(imesa, I810_UPLOAD_TEX1);
-
- /* i810UpdateTexLRU( imesa, t );*/
- }
- driUpdateTextureLRU( (driTextureObject *) t );
-
- if (imesa->texture_heaps[0]->timestamp >= GET_DISPATCH_AGE(imesa))
- i810WaitAgeLocked( imesa, imesa->texture_heaps[0]->timestamp );
-
- numLevels = t->base.lastLevel - t->base.firstLevel + 1;
- for (i = 0 ; i < numLevels ; i++)
- if (t->base.dirty_images[0] & (1<base.dirty_images[0] = 0;
-
- return 0;
-}
diff --git a/src/mesa/drivers/dri/i810/i810texstate.c b/src/mesa/drivers/dri/i810/i810texstate.c
deleted file mode 100644
index 5b505e71a48..00000000000
--- a/src/mesa/drivers/dri/i810/i810texstate.c
+++ /dev/null
@@ -1,750 +0,0 @@
-/*
- * GLX Hardware Device Driver for Intel i810
- * Copyright (C) 1999 Keith Whitwell
- *
- * 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 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
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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.
- *
- */
-
-#include "main/glheader.h"
-#include "main/macros.h"
-#include "main/mtypes.h"
-#include "main/simple_list.h"
-#include "main/enums.h"
-#include "main/mm.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "i810context.h"
-#include "i810tex.h"
-#include "i810state.h"
-#include "i810ioctl.h"
-
-
-
-
-static void i810SetTexImages( i810ContextPtr imesa,
- struct gl_texture_object *tObj )
-{
- GLuint height, width, pitch, i, textureFormat, log_pitch;
- i810TextureObjectPtr t = (i810TextureObjectPtr) tObj->DriverData;
- const struct gl_texture_image *baseImage = tObj->Image[0][tObj->BaseLevel];
- GLint numLevels;
- GLint log2Width, log2Height;
-
-/* fprintf(stderr, "%s\n", __FUNCTION__); */
-
- t->texelBytes = 2;
- switch (baseImage->TexFormat) {
- case MESA_FORMAT_ARGB1555:
- textureFormat = MI1_FMT_16BPP | MI1_PF_16BPP_ARGB1555;
- break;
- case MESA_FORMAT_ARGB4444:
- textureFormat = MI1_FMT_16BPP | MI1_PF_16BPP_ARGB4444;
- break;
- case MESA_FORMAT_RGB565:
- textureFormat = MI1_FMT_16BPP | MI1_PF_16BPP_RGB565;
- break;
- case MESA_FORMAT_AL88:
- textureFormat = MI1_FMT_16BPP | MI1_PF_16BPP_AY88;
- break;
- case MESA_FORMAT_YCBCR:
- textureFormat = MI1_FMT_422 | MI1_PF_422_YCRCB_SWAP_Y
- | MI1_COLOR_CONV_ENABLE;
- break;
- case MESA_FORMAT_YCBCR_REV:
- textureFormat = MI1_FMT_422 | MI1_PF_422_YCRCB
- | MI1_COLOR_CONV_ENABLE;
- break;
- case MESA_FORMAT_CI8:
- textureFormat = MI1_FMT_8CI | MI1_PF_8CI_ARGB4444;
- t->texelBytes = 1;
- break;
-
- default:
- fprintf(stderr, "i810SetTexImages: bad image->Format\n" );
- return;
- }
-
- driCalculateTextureFirstLastLevel( (driTextureObject *) t );
-
- numLevels = t->base.lastLevel - t->base.firstLevel + 1;
-
- log2Width = tObj->Image[0][t->base.firstLevel]->WidthLog2;
- log2Height = tObj->Image[0][t->base.firstLevel]->HeightLog2;
-
- /* Figure out the amount of memory required to hold all the mipmap
- * levels. Choose the smallest pitch to accomodate the largest
- * mipmap:
- */
- width = tObj->Image[0][t->base.firstLevel]->Width * t->texelBytes;
- for (pitch = 32, log_pitch=2 ; pitch < width ; pitch *= 2 )
- log_pitch++;
-
- /* All images must be loaded at this pitch. Count the number of
- * lines required:
- */
- for ( height = i = 0 ; i < numLevels ; i++ ) {
- t->image[i].image = tObj->Image[0][t->base.firstLevel + i];
- t->image[i].offset = height * pitch;
- t->image[i].internalFormat = baseImage->_BaseFormat;
- height += t->image[i].image->Height;
- }
-
- t->Pitch = pitch;
- t->base.totalSize = height*pitch;
- t->max_level = i-1;
- t->dirty = I810_UPLOAD_TEX0 | I810_UPLOAD_TEX1;
- t->Setup[I810_TEXREG_MI1] = (MI1_MAP_0 | textureFormat | log_pitch);
- t->Setup[I810_TEXREG_MLL] = (GFX_OP_MAP_LOD_LIMITS |
- MLL_MAP_0 |
- MLL_UPDATE_MAX_MIP |
- MLL_UPDATE_MIN_MIP |
- ((numLevels - 1) << MLL_MIN_MIP_SHIFT));
-
- LOCK_HARDWARE( imesa );
- i810UploadTexImagesLocked( imesa, t );
- UNLOCK_HARDWARE( imesa );
-}
-
-/* ================================================================
- * Texture combine functions
- */
-
-
-static void set_color_stage( unsigned color, int stage,
- i810ContextPtr imesa )
-{
- if ( color != imesa->Setup[I810_CTXREG_MC0 + stage] ) {
- I810_STATECHANGE( imesa, I810_UPLOAD_CTX );
- imesa->Setup[I810_CTXREG_MC0 + stage] = color;
- }
-}
-
-
-static void set_alpha_stage( unsigned alpha, int stage,
- i810ContextPtr imesa )
-{
- if ( alpha != imesa->Setup[I810_CTXREG_MA0 + stage] ) {
- I810_STATECHANGE( imesa, I810_UPLOAD_CTX );
- imesa->Setup[I810_CTXREG_MA0 + stage] = alpha;
- }
-}
-
-
-static const unsigned operand_modifiers[] = {
- 0, MC_ARG_INVERT,
- MC_ARG_REPLICATE_ALPHA, MC_ARG_INVERT | MC_ARG_REPLICATE_ALPHA
-};
-
-/**
- * Configure the hardware bits for the specified texture environment.
- *
- * Configures the hardware bits for the texture environment state for the
- * specified texture unit. As combine stages are added, the values pointed
- * to by \c color_stage and \c alpha_stage are incremented.
- *
- * \param ctx GL context pointer.
- * \param unit Texture unit to be added.
- * \param color_stage Next available hardware color combine stage.
- * \param alpha_stage Next available hardware alpha combine stage.
- *
- * \returns
- * If the combine mode for the specified texture unit could be added without
- * requiring a software fallback, \c GL_TRUE is returned. Otherwise,
- * \c GL_FALSE is returned.
- *
- * \todo
- * If the mode is (GL_REPLACE, GL_PREVIOUS), treat it as though the texture
- * stage is disabled. That is, don't emit any combine stages.
- *
- * \todo
- * Add support for ATI_texture_env_combine3 modes. This will require using
- * two combine stages.
- *
- * \todo
- * Add support for the missing \c GL_INTERPOLATE modes. This will require
- * using all three combine stages. There is a comment in the function
- * describing how this might work.
- *
- * \todo
- * If, after all the combine stages have been emitted, a texture is never
- * actually used, disable the texture unit. That should save texture some
- * memory bandwidth. This won't happen in this function, but this seems like
- * a reasonable place to make note of it.
- */
-static GLboolean
-i810UpdateTexEnvCombine( struct gl_context *ctx, GLuint unit,
- int * color_stage, int * alpha_stage )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
- GLuint color_arg[3] = {
- MC_ARG_ONE, MC_ARG_ONE, MC_ARG_ONE
- };
- GLuint alpha_arg[3] = {
- MA_ARG_ITERATED_ALPHA, MA_ARG_ITERATED_ALPHA, MA_ARG_ITERATED_ALPHA
- };
- GLuint i;
- GLuint color_combine, alpha_combine;
- const GLuint numColorArgs = texUnit->_CurrentCombine->_NumArgsRGB;
- const GLuint numAlphaArgs = texUnit->_CurrentCombine->_NumArgsA;
- GLuint RGBshift = texUnit->_CurrentCombine->ScaleShiftRGB;
- GLuint Ashift = texUnit->_CurrentCombine->ScaleShiftA;
-
-
- if ( !texUnit->_ReallyEnabled ) {
- return GL_TRUE;
- }
-
-
- if ((*color_stage >= 3) || (*alpha_stage >= 3)) {
- return GL_FALSE;
- }
-
-
- /* Step 1:
- * Extract the color and alpha combine function arguments.
- */
-
- for ( i = 0 ; i < numColorArgs ; i++ ) {
- unsigned op = texUnit->_CurrentCombine->OperandRGB[i] - GL_SRC_COLOR;
- assert(op >= 0);
- assert(op <= 3);
- switch ( texUnit->_CurrentCombine->SourceRGB[i] ) {
- case GL_TEXTURE0:
- color_arg[i] = MC_ARG_TEX0_COLOR;
- break;
- case GL_TEXTURE1:
- color_arg[i] = MC_ARG_TEX1_COLOR;
- break;
- case GL_TEXTURE:
- color_arg[i] = (unit == 0)
- ? MC_ARG_TEX0_COLOR : MC_ARG_TEX1_COLOR;
- break;
- case GL_CONSTANT:
- color_arg[i] = MC_ARG_COLOR_FACTOR;
- break;
- case GL_PRIMARY_COLOR:
- color_arg[i] = MC_ARG_ITERATED_COLOR;
- break;
- case GL_PREVIOUS:
- color_arg[i] = (unit == 0)
- ? MC_ARG_ITERATED_COLOR : MC_ARG_CURRENT_COLOR;
- break;
- case GL_ZERO:
- /* Toggle the low bit of the op value. The is the 'invert' bit,
- * and it acts to convert GL_ZERO+op to the equivalent GL_ONE+op.
- */
- op ^= 1;
-
- /*FALLTHROUGH*/
-
- case GL_ONE:
- color_arg[i] = MC_ARG_ONE;
- break;
- default:
- return GL_FALSE;
- }
-
- color_arg[i] |= operand_modifiers[op];
- }
-
-
- for ( i = 0 ; i < numAlphaArgs ; i++ ) {
- unsigned op = texUnit->_CurrentCombine->OperandA[i] - GL_SRC_ALPHA;
- assert(op >= 0);
- assert(op <= 1);
- switch ( texUnit->_CurrentCombine->SourceA[i] ) {
- case GL_TEXTURE0:
- alpha_arg[i] = MA_ARG_TEX0_ALPHA;
- break;
- case GL_TEXTURE1:
- alpha_arg[i] = MA_ARG_TEX1_ALPHA;
- break;
- case GL_TEXTURE:
- alpha_arg[i] = (unit == 0)
- ? MA_ARG_TEX0_ALPHA : MA_ARG_TEX1_ALPHA;
- break;
- case GL_CONSTANT:
- alpha_arg[i] = MA_ARG_ALPHA_FACTOR;
- break;
- case GL_PRIMARY_COLOR:
- alpha_arg[i] = MA_ARG_ITERATED_ALPHA;
- break;
- case GL_PREVIOUS:
- alpha_arg[i] = (unit == 0)
- ? MA_ARG_ITERATED_ALPHA : MA_ARG_CURRENT_ALPHA;
- break;
- case GL_ZERO:
- /* Toggle the low bit of the op value. The is the 'invert' bit,
- * and it acts to convert GL_ZERO+op to the equivalent GL_ONE+op.
- */
- op ^= 1;
-
- /*FALLTHROUGH*/
-
- case GL_ONE:
- if (i != 2) {
- return GL_FALSE;
- }
-
- alpha_arg[i] = MA_ARG_ONE;
- break;
- default:
- return GL_FALSE;
- }
-
- alpha_arg[i] |= operand_modifiers[op];
- }
-
-
- /* Step 2:
- * Build up the color and alpha combine functions.
- */
- switch ( texUnit->_CurrentCombine->ModeRGB ) {
- case GL_REPLACE:
- color_combine = MC_OP_ARG1;
- break;
- case GL_MODULATE:
- color_combine = MC_OP_MODULATE + RGBshift;
- RGBshift = 0;
- break;
- case GL_ADD:
- color_combine = MC_OP_ADD;
- break;
- case GL_ADD_SIGNED:
- color_combine = MC_OP_ADD_SIGNED;
- break;
- case GL_SUBTRACT:
- color_combine = MC_OP_SUBTRACT;
- break;
- case GL_INTERPOLATE:
- /* For interpolation, the i810 hardware has some limitations. It
- * can't handle using the secondary or diffuse color (diffuse alpha
- * is okay) for the third argument.
- *
- * It is possible to emulate the missing modes by using multiple
- * combine stages. Unfortunately it requires all three stages to
- * emulate a single interpolate stage. The (arg0*arg2) portion is
- * done in stage zero and writes to MC_DEST_ACCUMULATOR. The
- * (arg1*(1-arg2)) portion is done in stage 1, and the final stage is
- * (MC_ARG1_ACCUMULATOR | MC_ARG2_CURRENT_COLOR | MC_OP_ADD).
- *
- * It can also be done without using the accumulator by rearranging
- * the equation as (arg1 + (arg2 * (arg0 - arg1))). Too bad the i810
- * doesn't support the MODULATE_AND_ADD mode that the i830 supports.
- * If it did, the interpolate could be done in only two stages.
- */
-
- if ( (color_arg[2] & MC_ARG_INVERT) != 0 ) {
- unsigned temp = color_arg[0];
-
- color_arg[0] = color_arg[1];
- color_arg[1] = temp;
- color_arg[2] &= ~MC_ARG_INVERT;
- }
-
- switch (color_arg[2]) {
- case (MC_ARG_ONE):
- case (MC_ARG_ONE | MC_ARG_REPLICATE_ALPHA):
- color_combine = MC_OP_ARG1;
- color_arg[1] = MC_ARG_ONE;
- break;
-
- case (MC_ARG_COLOR_FACTOR):
- return GL_FALSE;
-
- case (MC_ARG_COLOR_FACTOR | MC_ARG_REPLICATE_ALPHA):
- color_combine = MC_OP_LIN_BLEND_ALPHA_FACTOR;
- break;
-
- case (MC_ARG_ITERATED_COLOR):
- return GL_FALSE;
-
- case (MC_ARG_ITERATED_COLOR | MC_ARG_REPLICATE_ALPHA):
- color_combine = MC_OP_LIN_BLEND_ITER_ALPHA;
- break;
-
- case (MC_ARG_SPECULAR_COLOR):
- case (MC_ARG_SPECULAR_COLOR | MC_ARG_REPLICATE_ALPHA):
- return GL_FALSE;
-
- case (MC_ARG_TEX0_COLOR):
- color_combine = MC_OP_LIN_BLEND_TEX0_COLOR;
- break;
-
- case (MC_ARG_TEX0_COLOR | MC_ARG_REPLICATE_ALPHA):
- color_combine = MC_OP_LIN_BLEND_TEX0_ALPHA;
- break;
-
- case (MC_ARG_TEX1_COLOR):
- color_combine = MC_OP_LIN_BLEND_TEX1_COLOR;
- break;
-
- case (MC_ARG_TEX1_COLOR | MC_ARG_REPLICATE_ALPHA):
- color_combine = MC_OP_LIN_BLEND_TEX1_ALPHA;
- break;
-
- default:
- return GL_FALSE;
- }
- break;
-
- default:
- return GL_FALSE;
- }
-
-
- switch ( texUnit->_CurrentCombine->ModeA ) {
- case GL_REPLACE:
- alpha_combine = MA_OP_ARG1;
- break;
- case GL_MODULATE:
- alpha_combine = MA_OP_MODULATE + Ashift;
- Ashift = 0;
- break;
- case GL_ADD:
- alpha_combine = MA_OP_ADD;
- break;
- case GL_ADD_SIGNED:
- alpha_combine = MA_OP_ADD_SIGNED;
- break;
- case GL_SUBTRACT:
- alpha_combine = MA_OP_SUBTRACT;
- break;
- case GL_INTERPOLATE:
- if ( (alpha_arg[2] & MA_ARG_INVERT) != 0 ) {
- unsigned temp = alpha_arg[0];
-
- alpha_arg[0] = alpha_arg[1];
- alpha_arg[1] = temp;
- alpha_arg[2] &= ~MA_ARG_INVERT;
- }
-
- switch (alpha_arg[2]) {
- case MA_ARG_ONE:
- alpha_combine = MA_OP_ARG1;
- alpha_arg[1] = MA_ARG_ITERATED_ALPHA;
- break;
-
- case MA_ARG_ALPHA_FACTOR:
- alpha_combine = MA_OP_LIN_BLEND_ALPHA_FACTOR;
- break;
-
- case MA_ARG_ITERATED_ALPHA:
- alpha_combine = MA_OP_LIN_BLEND_ITER_ALPHA;
- break;
-
- case MA_ARG_TEX0_ALPHA:
- alpha_combine = MA_OP_LIN_BLEND_TEX0_ALPHA;
- break;
-
- case MA_ARG_TEX1_ALPHA:
- alpha_combine = MA_OP_LIN_BLEND_TEX1_ALPHA;
- break;
-
- default:
- return GL_FALSE;
- }
- break;
-
- default:
- return GL_FALSE;
- }
-
-
- color_combine |= GFX_OP_MAP_COLOR_STAGES | (*color_stage << MC_STAGE_SHIFT)
- | MC_UPDATE_DEST | MC_DEST_CURRENT
- | MC_UPDATE_ARG1 | (color_arg[0] << MC_ARG1_SHIFT)
- | MC_UPDATE_ARG2 | (color_arg[1] << MC_ARG2_SHIFT)
- | MC_UPDATE_OP;
-
- alpha_combine |= GFX_OP_MAP_ALPHA_STAGES | (*alpha_stage << MA_STAGE_SHIFT)
- | MA_UPDATE_ARG1 | (alpha_arg[0] << MA_ARG1_SHIFT)
- | MA_UPDATE_ARG2 | (alpha_arg[1] << MA_ARG2_SHIFT)
- | MA_UPDATE_OP;
-
- set_color_stage( color_combine, *color_stage, imesa );
- set_alpha_stage( alpha_combine, *alpha_stage, imesa );
- (*color_stage)++;
- (*alpha_stage)++;
-
-
- /* Step 3:
- * Apply the scale factor.
- */
- /* The only operation where the i810 directly supports adding a post-
- * scale factor is modulate. For all the other modes the post-scale is
- * emulated by inserting and extra modulate stage. For the modulate
- * case, the scaling is handled above when color_combine / alpha_combine
- * are initially set.
- */
-
- if ( RGBshift != 0 ) {
- const unsigned color_scale = GFX_OP_MAP_COLOR_STAGES
- | (*color_stage << MC_STAGE_SHIFT)
- | MC_UPDATE_DEST | MC_DEST_CURRENT
- | MC_UPDATE_ARG1 | (MC_ARG_CURRENT_COLOR << MC_ARG1_SHIFT)
- | MC_UPDATE_ARG2 | (MC_ARG_ONE << MC_ARG2_SHIFT)
- | MC_UPDATE_OP | (MC_OP_MODULATE + RGBshift);
-
- if ( *color_stage >= 3 ) {
- return GL_FALSE;
- }
-
- set_color_stage( color_scale, *color_stage, imesa );
- (*color_stage)++;
- }
-
-
- if ( Ashift != 0 ) {
- const unsigned alpha_scale = GFX_OP_MAP_ALPHA_STAGES
- | (*alpha_stage << MA_STAGE_SHIFT)
- | MA_UPDATE_ARG1 | (MA_ARG_CURRENT_ALPHA << MA_ARG1_SHIFT)
- | MA_UPDATE_ARG2 | (MA_ARG_ONE << MA_ARG2_SHIFT)
- | MA_UPDATE_OP | (MA_OP_MODULATE + Ashift);
-
- if ( *alpha_stage >= 3 ) {
- return GL_FALSE;
- }
-
- set_alpha_stage( alpha_scale, *alpha_stage, imesa );
- (*alpha_stage)++;
- }
-
- return GL_TRUE;
-}
-
-static GLboolean enable_tex_common( struct gl_context *ctx, GLuint unit )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
- struct gl_texture_object *tObj = texUnit->_Current;
- i810TextureObjectPtr t = (i810TextureObjectPtr)tObj->DriverData;
-
- if (tObj->Image[0][tObj->BaseLevel]->Border > 0) {
- return GL_FALSE;
- }
-
- /* Upload teximages (not pipelined)
- */
- if (t->base.dirty_images[0]) {
- I810_FIREVERTICES(imesa);
- i810SetTexImages( imesa, tObj );
- if (!t->base.memBlock) {
- return GL_FALSE;
- }
- }
-
- /* Update state if this is a different texture object to last
- * time.
- */
- if (imesa->CurrentTexObj[unit] != t) {
- I810_STATECHANGE(imesa, (I810_UPLOAD_TEX0<CurrentTexObj[unit] = t;
- t->base.bound |= (1U << unit);
-
- /* XXX: should be locked */
- driUpdateTextureLRU( (driTextureObject *) t );
- }
-
- imesa->TexEnvImageFmt[unit] = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
- return GL_TRUE;
-}
-
-static GLboolean enable_tex_rect( struct gl_context *ctx, GLuint unit )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
- struct gl_texture_object *tObj = texUnit->_Current;
- i810TextureObjectPtr t = (i810TextureObjectPtr)tObj->DriverData;
- GLint Width, Height;
-
- Width = tObj->Image[0][t->base.firstLevel]->Width - 1;
- Height = tObj->Image[0][t->base.firstLevel]->Height - 1;
-
- I810_STATECHANGE(imesa, (I810_UPLOAD_TEX0<Setup[I810_TEXREG_MCS] &= ~MCS_NORMALIZED_COORDS;
- t->Setup[I810_TEXREG_MCS] |= MCS_UPDATE_NORMALIZED;
- t->Setup[I810_TEXREG_MI2] = (MI2_DIMENSIONS_ARE_EXACT |
- (Height << MI2_HEIGHT_SHIFT) | Width);
-
- return GL_TRUE;
-}
-
-static GLboolean enable_tex_2d( struct gl_context *ctx, GLuint unit )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
- struct gl_texture_object *tObj = texUnit->_Current;
- i810TextureObjectPtr t = (i810TextureObjectPtr)tObj->DriverData;
- GLint log2Width, log2Height;
-
-
- log2Width = tObj->Image[0][t->base.firstLevel]->WidthLog2;
- log2Height = tObj->Image[0][t->base.firstLevel]->HeightLog2;
-
- I810_STATECHANGE(imesa, (I810_UPLOAD_TEX0<Setup[I810_TEXREG_MCS] |= MCS_NORMALIZED_COORDS | MCS_UPDATE_NORMALIZED;
- t->Setup[I810_TEXREG_MI2] = (MI2_DIMENSIONS_ARE_LOG2 |
- (log2Height << MI2_HEIGHT_SHIFT) | log2Width);
-
- return GL_TRUE;
-}
-
-static void disable_tex( struct gl_context *ctx, GLuint unit )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
-
- imesa->CurrentTexObj[unit] = 0;
- imesa->TexEnvImageFmt[unit] = 0;
- imesa->dirty &= ~(I810_UPLOAD_TEX0<Texture.Unit[unit];
- GLboolean ret;
-
- switch(texUnit->_ReallyEnabled) {
- case TEXTURE_2D_BIT:
- ret = enable_tex_common( ctx, unit);
- ret &= enable_tex_2d(ctx, unit);
- if (ret == GL_FALSE) {
- FALLBACK( imesa, I810_FALLBACK_TEXTURE, GL_TRUE );
- }
- break;
- case TEXTURE_RECT_BIT:
- ret = enable_tex_common( ctx, unit);
- ret &= enable_tex_rect(ctx, unit);
- if (ret == GL_FALSE) {
- FALLBACK( imesa, I810_FALLBACK_TEXTURE, GL_TRUE );
- }
- break;
- case 0:
- disable_tex(ctx, unit);
- break;
- }
-
-
- if (!i810UpdateTexEnvCombine( ctx, unit,
- next_color_stage, next_alpha_stage )) {
- FALLBACK( imesa, I810_FALLBACK_TEXTURE, GL_TRUE );
- }
-
- return;
-}
-
-
-void i810UpdateTextureState( struct gl_context *ctx )
-{
- static const unsigned color_pass[3] = {
- GFX_OP_MAP_COLOR_STAGES | MC_STAGE_0 | MC_UPDATE_DEST | MC_DEST_CURRENT
- | MC_UPDATE_ARG1 | (MC_ARG_ITERATED_COLOR << MC_ARG1_SHIFT)
- | MC_UPDATE_ARG2 | (MC_ARG_ONE << MC_ARG2_SHIFT)
- | MC_UPDATE_OP | MC_OP_ARG1,
- GFX_OP_MAP_COLOR_STAGES | MC_STAGE_1 | MC_UPDATE_DEST | MC_DEST_CURRENT
- | MC_UPDATE_ARG1 | (MC_ARG_CURRENT_COLOR << MC_ARG1_SHIFT)
- | MC_UPDATE_ARG2 | (MC_ARG_ONE << MC_ARG2_SHIFT)
- | MC_UPDATE_OP | MC_OP_ARG1,
- GFX_OP_MAP_COLOR_STAGES | MC_STAGE_2 | MC_UPDATE_DEST | MC_DEST_CURRENT
- | MC_UPDATE_ARG1 | (MC_ARG_CURRENT_COLOR << MC_ARG1_SHIFT)
- | MC_UPDATE_ARG2 | (MC_ARG_ONE << MC_ARG2_SHIFT)
- | MC_UPDATE_OP | MC_OP_ARG1
- };
- static const unsigned alpha_pass[3] = {
- GFX_OP_MAP_ALPHA_STAGES | MA_STAGE_0
- | MA_UPDATE_ARG1 | (MA_ARG_ITERATED_ALPHA << MA_ARG1_SHIFT)
- | MA_UPDATE_ARG2 | (MA_ARG_ITERATED_ALPHA << MA_ARG2_SHIFT)
- | MA_UPDATE_OP | MA_OP_ARG1,
- GFX_OP_MAP_ALPHA_STAGES | MA_STAGE_1
- | MA_UPDATE_ARG1 | (MA_ARG_CURRENT_ALPHA << MA_ARG1_SHIFT)
- | MA_UPDATE_ARG2 | (MA_ARG_CURRENT_ALPHA << MA_ARG2_SHIFT)
- | MA_UPDATE_OP | MA_OP_ARG1,
- GFX_OP_MAP_ALPHA_STAGES | MA_STAGE_2
- | MA_UPDATE_ARG1 | (MA_ARG_CURRENT_ALPHA << MA_ARG1_SHIFT)
- | MA_UPDATE_ARG2 | (MA_ARG_CURRENT_ALPHA << MA_ARG2_SHIFT)
- | MA_UPDATE_OP | MA_OP_ARG1
- };
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- int next_color_stage = 0;
- int next_alpha_stage = 0;
-
-
- /* fprintf(stderr, "%s\n", __FUNCTION__); */
- FALLBACK( imesa, I810_FALLBACK_TEXTURE, GL_FALSE );
-
- i810UpdateTexUnit( ctx, 0, & next_color_stage, & next_alpha_stage );
- i810UpdateTexUnit( ctx, 1, & next_color_stage, & next_alpha_stage );
-
- /* There needs to be at least one combine stage emitted that just moves
- * the incoming primary color to the current color register. In addition,
- * there number be the same number of color and alpha stages emitted.
- * Finally, if there are less than 3 combine stages, a MC_OP_DISABLE stage
- * must be emitted.
- */
-
- while ( (next_color_stage == 0) ||
- (next_color_stage < next_alpha_stage) ) {
- set_color_stage( color_pass[ next_color_stage ], next_color_stage,
- imesa );
- next_color_stage++;
- }
-
- assert( next_color_stage <= 3 );
-
- while ( next_alpha_stage < next_color_stage ) {
- set_alpha_stage( alpha_pass[ next_alpha_stage ], next_alpha_stage,
- imesa );
- next_alpha_stage++;
- }
-
- assert( next_alpha_stage <= 3 );
- assert( next_color_stage == next_alpha_stage );
-
- if ( next_color_stage < 3 ) {
- const unsigned color = GFX_OP_MAP_COLOR_STAGES
- | (next_color_stage << MC_STAGE_SHIFT)
- | MC_UPDATE_DEST | MC_DEST_CURRENT
- | MC_UPDATE_ARG1 | (MC_ARG_ONE << MC_ARG1_SHIFT)
- | MC_UPDATE_ARG2 | (MC_ARG_ONE << MC_ARG2_SHIFT)
- | MC_UPDATE_OP | (MC_OP_DISABLE);
-
- const unsigned alpha = GFX_OP_MAP_ALPHA_STAGES
- | (next_color_stage << MC_STAGE_SHIFT)
- | MA_UPDATE_ARG1 | (MA_ARG_CURRENT_ALPHA << MA_ARG1_SHIFT)
- | MA_UPDATE_ARG2 | (MA_ARG_CURRENT_ALPHA << MA_ARG2_SHIFT)
- | MA_UPDATE_OP | (MA_OP_ARG1);
-
- set_color_stage( color, next_color_stage, imesa );
- set_alpha_stage( alpha, next_alpha_stage, imesa );
- }
-}
diff --git a/src/mesa/drivers/dri/i810/i810tris.c b/src/mesa/drivers/dri/i810/i810tris.c
deleted file mode 100644
index ec22a3deb36..00000000000
--- a/src/mesa/drivers/dri/i810/i810tris.c
+++ /dev/null
@@ -1,872 +0,0 @@
-/**************************************************************************
-
-Copyright 2001 VA Linux Systems Inc., Fremont, California.
-
-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
-on 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
-ATI, VA LINUX SYSTEMS AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell
- */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "main/enums.h"
-#include "main/colormac.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-
-#include "i810tris.h"
-#include "i810state.h"
-#include "i810vb.h"
-#include "i810ioctl.h"
-
-static void i810RenderPrimitive( struct gl_context *ctx, GLenum prim );
-
-/***********************************************************************
- * Emit primitives as inline vertices *
- ***********************************************************************/
-
-#if defined(USE_X86_ASM)
-#define COPY_DWORDS( j, vb, vertsize, v ) \
-do { \
- int __tmp; \
- __asm__ __volatile__( "rep ; movsl" \
- : "=%c" (j), "=D" (vb), "=S" (__tmp) \
- : "0" (vertsize), \
- "D" ((long)vb), \
- "S" ((long)v) ); \
-} while (0)
-#else
-#define COPY_DWORDS( j, vb, vertsize, v ) \
-do { \
- for ( j = 0 ; j < vertsize ; j++ ) \
- vb[j] = ((GLuint *)v)[j]; \
- vb += vertsize; \
-} while (0)
-#endif
-
-static INLINE void i810_draw_triangle( i810ContextPtr imesa,
- i810VertexPtr v0,
- i810VertexPtr v1,
- i810VertexPtr v2 )
-{
- GLuint vertsize = imesa->vertex_size;
- GLuint *vb = i810AllocDmaLow( imesa, 3 * 4 * vertsize );
- int j;
-
- COPY_DWORDS( j, vb, vertsize, v0 );
- COPY_DWORDS( j, vb, vertsize, v1 );
- COPY_DWORDS( j, vb, vertsize, v2 );
-}
-
-
-static INLINE void i810_draw_quad( i810ContextPtr imesa,
- i810VertexPtr v0,
- i810VertexPtr v1,
- i810VertexPtr v2,
- i810VertexPtr v3 )
-{
- GLuint vertsize = imesa->vertex_size;
- GLuint *vb = i810AllocDmaLow( imesa, 6 * 4 * vertsize );
- int j;
-
- COPY_DWORDS( j, vb, vertsize, v0 );
- COPY_DWORDS( j, vb, vertsize, v1 );
- COPY_DWORDS( j, vb, vertsize, v3 );
- COPY_DWORDS( j, vb, vertsize, v1 );
- COPY_DWORDS( j, vb, vertsize, v2 );
- COPY_DWORDS( j, vb, vertsize, v3 );
-}
-
-
-static INLINE void i810_draw_point( i810ContextPtr imesa,
- i810VertexPtr tmp )
-{
- GLfloat sz = 0.5 * CLAMP(imesa->glCtx->Point.Size,
- imesa->glCtx->Const.MinPointSize,
- imesa->glCtx->Const.MaxPointSize);
- int vertsize = imesa->vertex_size;
- GLuint *vb = i810AllocDmaLow( imesa, 2 * 4 * vertsize );
- int j;
-
- /* Draw a point as a horizontal line.
- */
- *(float *)&vb[0] = tmp->v.x - sz + 0.125;
- for (j = 1 ; j < vertsize ; j++)
- vb[j] = tmp->ui[j];
- vb += vertsize;
-
- *(float *)&vb[0] = tmp->v.x + sz + 0.125;
- for (j = 1 ; j < vertsize ; j++)
- vb[j] = tmp->ui[j];
- vb += vertsize;
-}
-
-
-static INLINE void i810_draw_line( i810ContextPtr imesa,
- i810VertexPtr v0,
- i810VertexPtr v1 )
-{
- GLuint vertsize = imesa->vertex_size;
- GLuint *vb = i810AllocDmaLow( imesa, 2 * 4 * vertsize );
- int j;
-
- COPY_DWORDS( j, vb, vertsize, v0 );
- COPY_DWORDS( j, vb, vertsize, v1 );
-}
-
-
-
-/***********************************************************************
- * Macros for t_dd_tritmp.h to draw basic primitives *
- ***********************************************************************/
-
-#define TRI( a, b, c ) \
-do { \
- if (0) fprintf(stderr, "hw TRI\n"); \
- if (DO_FALLBACK) \
- imesa->draw_tri( imesa, a, b, c ); \
- else \
- i810_draw_triangle( imesa, a, b, c ); \
-} while (0)
-
-#define QUAD( a, b, c, d ) \
-do { \
- if (0) fprintf(stderr, "hw QUAD\n"); \
- if (DO_FALLBACK) { \
- imesa->draw_tri( imesa, a, b, d ); \
- imesa->draw_tri( imesa, b, c, d ); \
- } else \
- i810_draw_quad( imesa, a, b, c, d ); \
-} while (0)
-
-#define LINE( v0, v1 ) \
-do { \
- if (0) fprintf(stderr, "hw LINE\n"); \
- if (DO_FALLBACK) \
- imesa->draw_line( imesa, v0, v1 ); \
- else \
- i810_draw_line( imesa, v0, v1 ); \
-} while (0)
-
-#define POINT( v0 ) \
-do { \
- if (0) fprintf(stderr, "hw POINT\n"); \
- if (DO_FALLBACK) \
- imesa->draw_point( imesa, v0 ); \
- else \
- i810_draw_point( imesa, v0 ); \
-} while (0)
-
-
-/***********************************************************************
- * Build render functions from dd templates *
- ***********************************************************************/
-
-#define I810_OFFSET_BIT 0x01
-#define I810_TWOSIDE_BIT 0x02
-#define I810_UNFILLED_BIT 0x04
-#define I810_FALLBACK_BIT 0x08
-#define I810_MAX_TRIFUNC 0x10
-
-
-static struct {
- tnl_points_func points;
- tnl_line_func line;
- tnl_triangle_func triangle;
- tnl_quad_func quad;
-} rast_tab[I810_MAX_TRIFUNC];
-
-
-#define DO_FALLBACK (IND & I810_FALLBACK_BIT)
-#define DO_OFFSET (IND & I810_OFFSET_BIT)
-#define DO_UNFILLED (IND & I810_UNFILLED_BIT)
-#define DO_TWOSIDE (IND & I810_TWOSIDE_BIT)
-#define DO_FLAT 0
-#define DO_TRI 1
-#define DO_QUAD 1
-#define DO_LINE 1
-#define DO_POINTS 1
-#define DO_FULL_QUAD 1
-
-#define HAVE_SPEC 1
-#define HAVE_BACK_COLORS 0
-#define HAVE_HW_FLATSHADE 1
-#define VERTEX i810Vertex
-#define TAB rast_tab
-
-
-#define DEPTH_SCALE (1.0/0xffff)
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) _v->v.x
-#define VERT_Y(_v) _v->v.y
-#define VERT_Z(_v) _v->v.z
-#define AREA_IS_CCW( a ) (a > 0)
-#define GET_VERTEX(e) (imesa->verts + (e * imesa->vertex_size * sizeof(int)))
-
-#define VERT_SET_RGBA( v, c ) \
-do { \
- i810_color_t *color = (i810_color_t *)&((v)->ui[coloroffset]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->blue, (c)[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->alpha, (c)[3]); \
-} while (0)
-
-#define VERT_COPY_RGBA( v0, v1 ) v0->ui[coloroffset] = v1->ui[coloroffset]
-
-#define VERT_SET_SPEC( v0, c ) \
-do { \
- if (havespec) { \
- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.blue, (c)[2]); \
- } \
-} while (0)
-#define VERT_COPY_SPEC( v0, v1 ) \
-do { \
- if (havespec) { \
- v0->v.specular.red = v1->v.specular.red; \
- v0->v.specular.green = v1->v.specular.green; \
- v0->v.specular.blue = v1->v.specular.blue; \
- } \
-} while (0)
-
-#define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[coloroffset]
-#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[coloroffset] = color[idx]
-#define VERT_SAVE_SPEC( idx ) if (havespec) spec[idx] = v[idx]->ui[5]
-#define VERT_RESTORE_SPEC( idx ) if (havespec) v[idx]->ui[5] = spec[idx]
-
-#define LOCAL_VARS(n) \
- i810ContextPtr imesa = I810_CONTEXT(ctx); \
- GLuint color[n] = { 0 }; \
- GLuint spec[n] = { 0 }; \
- GLuint coloroffset = (imesa->vertex_size == 4 ? 3 : 4); \
- GLboolean havespec = (imesa->vertex_size > 4); \
- (void) color; (void) spec; (void) coloroffset; (void) havespec;
-
-
-/***********************************************************************
- * Helpers for rendering unfilled primitives *
- ***********************************************************************/
-
-static const GLuint hw_prim[GL_POLYGON+1] = {
- PR_LINES,
- PR_LINES,
- PR_LINES,
- PR_LINES,
- PR_TRIANGLES,
- PR_TRIANGLES,
- PR_TRIANGLES,
- PR_TRIANGLES,
- PR_TRIANGLES,
- PR_TRIANGLES
-};
-
-#define RASTERIZE(x) if (imesa->hw_primitive != hw_prim[x]) \
- i810RasterPrimitive( ctx, x, hw_prim[x] )
-#define RENDER_PRIMITIVE imesa->render_primitive
-#define TAG(x) x
-#define IND I810_FALLBACK_BIT
-#include "tnl_dd/t_dd_unfilled.h"
-#undef IND
-
-/***********************************************************************
- * Generate GL render functions *
- ***********************************************************************/
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_TWOSIDE_BIT|I810_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_OFFSET_BIT|I810_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_TWOSIDE_BIT|I810_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_TWOSIDE_BIT|I810_OFFSET_BIT|I810_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_FALLBACK_BIT)
-#define TAG(x) x##_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_OFFSET_BIT|I810_FALLBACK_BIT)
-#define TAG(x) x##_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_TWOSIDE_BIT|I810_FALLBACK_BIT)
-#define TAG(x) x##_twoside_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_TWOSIDE_BIT|I810_OFFSET_BIT|I810_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_UNFILLED_BIT|I810_FALLBACK_BIT)
-#define TAG(x) x##_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_OFFSET_BIT|I810_UNFILLED_BIT|I810_FALLBACK_BIT)
-#define TAG(x) x##_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_TWOSIDE_BIT|I810_UNFILLED_BIT|I810_FALLBACK_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (I810_TWOSIDE_BIT|I810_OFFSET_BIT|I810_UNFILLED_BIT| \
- I810_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-static void init_rast_tab( void )
-{
- init();
- init_offset();
- init_twoside();
- init_twoside_offset();
- init_unfilled();
- init_offset_unfilled();
- init_twoside_unfilled();
- init_twoside_offset_unfilled();
- init_fallback();
- init_offset_fallback();
- init_twoside_fallback();
- init_twoside_offset_fallback();
- init_unfilled_fallback();
- init_offset_unfilled_fallback();
- init_twoside_unfilled_fallback();
- init_twoside_offset_unfilled_fallback();
-}
-
-
-/***********************************************************************
- * Rasterization fallback helpers *
- ***********************************************************************/
-
-
-/* This code is hit only when a mix of accelerated and unaccelerated
- * primitives are being drawn, and only for the unaccelerated
- * primitives.
- */
-static void
-i810_fallback_tri( i810ContextPtr imesa,
- i810Vertex *v0,
- i810Vertex *v1,
- i810Vertex *v2 )
-{
- struct gl_context *ctx = imesa->glCtx;
- SWvertex v[3];
- i810_translate_vertex( ctx, v0, &v[0] );
- i810_translate_vertex( ctx, v1, &v[1] );
- i810_translate_vertex( ctx, v2, &v[2] );
- _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
-}
-
-
-static void
-i810_fallback_line( i810ContextPtr imesa,
- i810Vertex *v0,
- i810Vertex *v1 )
-{
- struct gl_context *ctx = imesa->glCtx;
- SWvertex v[2];
- i810_translate_vertex( ctx, v0, &v[0] );
- i810_translate_vertex( ctx, v1, &v[1] );
- _swrast_Line( ctx, &v[0], &v[1] );
-}
-
-
-static void
-i810_fallback_point( i810ContextPtr imesa,
- i810Vertex *v0 )
-{
- struct gl_context *ctx = imesa->glCtx;
- SWvertex v[1];
- i810_translate_vertex( ctx, v0, &v[0] );
- _swrast_Point( ctx, &v[0] );
-}
-
-
-
-/**********************************************************************/
-/* Render unclipped begin/end objects */
-/**********************************************************************/
-
-#define IND 0
-#define V(x) (i810Vertex *)(vertptr + ((x)*vertsize*sizeof(int)))
-#define RENDER_POINTS( start, count ) \
- for ( ; start < count ; start++) POINT( V(ELT(start)) );
-#define RENDER_LINE( v0, v1 ) LINE( V(v0), V(v1) )
-#define RENDER_TRI( v0, v1, v2 ) TRI( V(v0), V(v1), V(v2) )
-#define RENDER_QUAD( v0, v1, v2, v3 ) QUAD( V(v0), V(v1), V(v2), V(v3) )
-#define INIT(x) i810RenderPrimitive( ctx, x )
-#undef LOCAL_VARS
-#define LOCAL_VARS \
- i810ContextPtr imesa = I810_CONTEXT(ctx); \
- GLubyte *vertptr = (GLubyte *)imesa->verts; \
- const GLuint vertsize = imesa->vertex_size; \
- const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
- (void) elt;
-#define RESET_STIPPLE
-#define RESET_OCCLUSION
-#define PRESERVE_VB_DEFS
-#define ELT(x) x
-#define TAG(x) i810_##x##_verts
-#include "tnl/t_vb_rendertmp.h"
-#undef ELT
-#undef TAG
-#define TAG(x) i810_##x##_elts
-#define ELT(x) elt[x]
-#include "tnl/t_vb_rendertmp.h"
-
-/**********************************************************************/
-/* Render clipped primitives */
-/**********************************************************************/
-
-
-
-static void i810RenderClippedPoly( struct gl_context *ctx, const GLuint *elts,
- GLuint n )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLuint prim = imesa->render_primitive;
-
- /* Render the new vertices as an unclipped polygon.
- */
- {
- GLuint *tmp = VB->Elts;
- VB->Elts = (GLuint *)elts;
- tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n,
- PRIM_BEGIN|PRIM_END );
- VB->Elts = tmp;
- }
-
- /* Restore the render primitive
- */
- if (prim != GL_POLYGON)
- tnl->Driver.Render.PrimitiveNotify( ctx, prim );
-}
-
-static void i810RenderClippedLine( struct gl_context *ctx, GLuint ii, GLuint jj )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->Driver.Render.Line( ctx, ii, jj );
-}
-
-static void i810FastRenderClippedPoly( struct gl_context *ctx, const GLuint *elts,
- GLuint n )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- GLuint vertsize = imesa->vertex_size;
- GLuint *vb = i810AllocDmaLow( imesa, (n-2) * 3 * 4 * vertsize );
- GLubyte *vertptr = (GLubyte *)imesa->verts;
- const GLuint *start = (const GLuint *)V(elts[0]);
- int i,j;
-
- for (i = 2 ; i < n ; i++) {
- COPY_DWORDS( j, vb, vertsize, V(elts[i-1]) );
- COPY_DWORDS( j, vb, vertsize, V(elts[i]) );
- COPY_DWORDS( j, vb, vertsize, start );
- }
-}
-
-/**********************************************************************/
-/* Choose render functions */
-/**********************************************************************/
-
-/***********************************************************************
- * Rasterization fallback helpers *
- ***********************************************************************/
-
-
-
-#define _I810_NEW_RENDERSTATE (_DD_NEW_LINE_STIPPLE | \
- _DD_NEW_TRI_UNFILLED | \
- _DD_NEW_TRI_LIGHT_TWOSIDE | \
- _DD_NEW_TRI_OFFSET | \
- _DD_NEW_TRI_STIPPLE | \
- _NEW_POLYGONSTIPPLE)
-
-#define POINT_FALLBACK (0)
-#define LINE_FALLBACK (DD_LINE_STIPPLE)
-#define TRI_FALLBACK (0)
-#define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK|\
- DD_TRI_STIPPLE)
-#define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
-
-static void i810ChooseRenderState(struct gl_context *ctx)
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLuint flags = ctx->_TriangleCaps;
- GLuint index = 0;
-
- if (I810_DEBUG & DEBUG_STATE)
- fprintf(stderr,"\n%s\n",__FUNCTION__);
-
- if (flags & (ANY_FALLBACK_FLAGS|ANY_RASTER_FLAGS)) {
- if (flags & ANY_RASTER_FLAGS) {
- if (flags & DD_TRI_LIGHT_TWOSIDE) index |= I810_TWOSIDE_BIT;
- if (flags & DD_TRI_OFFSET) index |= I810_OFFSET_BIT;
- if (flags & DD_TRI_UNFILLED) index |= I810_UNFILLED_BIT;
- }
-
- imesa->draw_point = i810_draw_point;
- imesa->draw_line = i810_draw_line;
- imesa->draw_tri = i810_draw_triangle;
-
- /* Hook in fallbacks for specific primitives.
- */
- if (flags & ANY_FALLBACK_FLAGS)
- {
- if (flags & POINT_FALLBACK)
- imesa->draw_point = i810_fallback_point;
-
- if (flags & LINE_FALLBACK)
- imesa->draw_line = i810_fallback_line;
-
- if (flags & TRI_FALLBACK)
- imesa->draw_tri = i810_fallback_tri;
-
- if ((flags & DD_TRI_STIPPLE) && !imesa->stipple_in_hw)
- imesa->draw_tri = i810_fallback_tri;
-
- index |= I810_FALLBACK_BIT;
- }
- }
-
- if (imesa->RenderIndex != index) {
- imesa->RenderIndex = index;
-
- tnl->Driver.Render.Points = rast_tab[index].points;
- tnl->Driver.Render.Line = rast_tab[index].line;
- tnl->Driver.Render.Triangle = rast_tab[index].triangle;
- tnl->Driver.Render.Quad = rast_tab[index].quad;
-
- if (index == 0) {
- tnl->Driver.Render.PrimTabVerts = i810_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = i810_render_tab_elts;
- tnl->Driver.Render.ClippedLine = line; /* from tritmp.h */
- tnl->Driver.Render.ClippedPolygon = i810FastRenderClippedPoly;
- } else {
- tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
- tnl->Driver.Render.ClippedLine = i810RenderClippedLine;
- tnl->Driver.Render.ClippedPolygon = i810RenderClippedPoly;
- }
- }
-}
-
-static const GLenum reduced_prim[GL_POLYGON+1] = {
- GL_POINTS,
- GL_LINES,
- GL_LINES,
- GL_LINES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES
-};
-
-
-/**********************************************************************/
-/* High level hooks for t_vb_render.c */
-/**********************************************************************/
-
-
-
-/* Determine the rasterized primitive when not drawing unfilled
- * polygons.
- *
- * Used only for the default render stage which always decomposes
- * primitives to trianges/lines/points. For the accelerated stage,
- * which renders strips as strips, the equivalent calculations are
- * performed in i810render.c.
- */
-static void i810RenderPrimitive( struct gl_context *ctx, GLenum prim )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLuint rprim = reduced_prim[prim];
-
- imesa->render_primitive = prim;
-
- if (rprim == GL_TRIANGLES && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
- return;
-
- if (imesa->reduced_primitive != rprim ||
- hw_prim[prim] != imesa->hw_primitive) {
- i810RasterPrimitive( ctx, rprim, hw_prim[prim] );
- }
-}
-
-static void i810RunPipeline( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
-
- if (imesa->new_state) {
- if (imesa->new_state & _NEW_TEXTURE)
- i810UpdateTextureState( ctx ); /* may modify imesa->new_state */
-
- if (!imesa->Fallback) {
- if (imesa->new_state & _I810_NEW_VERTEX)
- i810ChooseVertexState( ctx );
-
- if (imesa->new_state & _I810_NEW_RENDERSTATE)
- i810ChooseRenderState( ctx );
- }
-
- imesa->new_state = 0;
- }
-
- _tnl_run_pipeline( ctx );
-}
-
-static void i810RenderStart( struct gl_context *ctx )
-{
- /* Check for projective textureing. Make sure all texcoord
- * pointers point to something. (fix in mesa?)
- */
- i810CheckTexSizes( ctx );
-}
-
-static void i810RenderFinish( struct gl_context *ctx )
-{
- if (I810_CONTEXT(ctx)->RenderIndex & I810_FALLBACK_BIT)
- _swrast_flush( ctx );
-}
-
-
-
-
-/* System to flush dma and emit state changes based on the rasterized
- * primitive.
- */
-void i810RasterPrimitive( struct gl_context *ctx,
- GLenum rprim,
- GLuint hwprim )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLuint st1 = imesa->Setup[I810_CTXREG_ST1];
- GLuint aa = imesa->Setup[I810_CTXREG_AA];
- GLuint lcs = imesa->Setup[I810_CTXREG_LCS];
-
- st1 &= ~ST1_ENABLE;
- aa &= ~AA_ENABLE;
-
- if (I810_DEBUG & DEBUG_PRIMS) {
- /* Prints reduced prim, and hw prim */
- char *prim_name = "Unknown";
-
- switch(hwprim) {
- case PR_LINES:
- prim_name = "Lines";
- break;
- case PR_LINESTRIP:
- prim_name = "LineStrip";
- break;
- case PR_TRIANGLES:
- prim_name = "Triangles";
- break;
- case PR_TRISTRIP_0:
- prim_name = "TriStrip_0";
- break;
- case PR_TRIFAN:
- prim_name = "TriFan";
- break;
- case PR_POLYGON:
- prim_name = "Polygons";
- break;
- default:
- break;
- }
-
- fprintf(stderr, "%s : rprim(%s), hwprim(%s)\n",
- __FUNCTION__,
- _mesa_lookup_enum_by_nr(rprim),
- prim_name);
- }
-
- switch (rprim) {
- case GL_TRIANGLES:
- if (ctx->Polygon.StippleFlag)
- st1 |= ST1_ENABLE;
- if (ctx->Polygon.SmoothFlag)
- aa |= AA_ENABLE;
- break;
- case GL_LINES:
- lcs &= ~(LCS_LINEWIDTH_3_0|LCS_LINEWIDTH_0_5);
- lcs |= imesa->LcsLineWidth;
- if (ctx->Line.SmoothFlag) {
- aa |= AA_ENABLE;
- lcs |= LCS_LINEWIDTH_0_5;
- }
- break;
- case GL_POINTS:
- lcs &= ~(LCS_LINEWIDTH_3_0|LCS_LINEWIDTH_0_5);
- lcs |= imesa->LcsPointSize;
- if (ctx->Point.SmoothFlag) {
- aa |= AA_ENABLE;
- lcs |= LCS_LINEWIDTH_0_5;
- }
- break;
- default:
- return;
- }
-
- imesa->reduced_primitive = rprim;
-
- if (st1 != imesa->Setup[I810_CTXREG_ST1] ||
- aa != imesa->Setup[I810_CTXREG_AA] ||
- lcs != imesa->Setup[I810_CTXREG_LCS])
- {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->hw_primitive = hwprim;
- imesa->Setup[I810_CTXREG_LCS] = lcs;
- imesa->Setup[I810_CTXREG_ST1] = st1;
- imesa->Setup[I810_CTXREG_AA] = aa;
- }
- else if (hwprim != imesa->hw_primitive) {
- I810_STATECHANGE(imesa, 0);
- imesa->hw_primitive = hwprim;
- }
-}
-
-/**********************************************************************/
-/* Transition to/from hardware rasterization. */
-/**********************************************************************/
-static char *fallbackStrings[] = {
- "Texture",
- "Draw buffer",
- "Read buffer",
- "Color mask",
- "Render mode",
- "Stencil",
- "Stipple",
- "User disable"
-};
-
-
-static char *getFallbackString(GLuint bit)
-{
- int i = 0;
- while (bit > 1) {
- i++;
- bit >>= 1;
- }
- return fallbackStrings[i];
-}
-
-void i810Fallback( i810ContextPtr imesa, GLuint bit, GLboolean mode )
-{
- struct gl_context *ctx = imesa->glCtx;
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- GLuint oldfallback = imesa->Fallback;
-
- if (0) fprintf(stderr, "%s old %x bit %x mode %d\n", __FUNCTION__,
- imesa->Fallback, bit, mode );
-
- if (mode) {
- imesa->Fallback |= bit;
- if (oldfallback == 0) {
- I810_FIREVERTICES(imesa);
- if (I810_DEBUG & DEBUG_FALLBACKS)
- fprintf(stderr, "ENTER FALLBACK %s\n", getFallbackString( bit ));
- _swsetup_Wakeup( ctx );
- imesa->RenderIndex = ~0;
- }
- }
- else {
- imesa->Fallback &= ~bit;
- if (oldfallback == bit) {
- _swrast_flush( ctx );
- if (I810_DEBUG & DEBUG_FALLBACKS)
- fprintf(stderr, "LEAVE FALLBACK %s\n", getFallbackString( bit ));
- tnl->Driver.Render.Start = i810RenderStart;
- tnl->Driver.Render.PrimitiveNotify = i810RenderPrimitive;
- tnl->Driver.Render.Finish = i810RenderFinish;
- tnl->Driver.Render.BuildVertices = i810BuildVertices;
- imesa->new_state |= (_I810_NEW_RENDERSTATE|_I810_NEW_VERTEX);
- }
- }
-}
-
-
-/**********************************************************************/
-/* Initialization. */
-/**********************************************************************/
-
-
-void i810InitTriFuncs( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- static int firsttime = 1;
-
- if (firsttime) {
- init_rast_tab();
- firsttime = 0;
- }
-
- tnl->Driver.RunPipeline = i810RunPipeline;
- tnl->Driver.Render.Start = i810RenderStart;
- tnl->Driver.Render.Finish = i810RenderFinish;
- tnl->Driver.Render.PrimitiveNotify = i810RenderPrimitive;
- tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
- tnl->Driver.Render.BuildVertices = i810BuildVertices;
-}
diff --git a/src/mesa/drivers/dri/i810/i810tris.h b/src/mesa/drivers/dri/i810/i810tris.h
deleted file mode 100644
index 07a0ebf69f3..00000000000
--- a/src/mesa/drivers/dri/i810/i810tris.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * GLX Hardware Device Driver for Intel i810
- * Copyright (C) 1999 Keith Whitwell
- *
- * 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 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
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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.
- *
- *
- */
-
-#ifndef I810TRIS_INC
-#define I810TRIS_INC
-
-#include "main/mtypes.h"
-
-extern void i810PrintRenderState( const char *msg, GLuint state );
-extern void i810InitTriFuncs( struct gl_context *ctx );
-extern void i810RasterPrimitive( struct gl_context *ctx, GLenum rprim, GLuint hwprim );
-
-#endif
diff --git a/src/mesa/drivers/dri/i810/i810vb.c b/src/mesa/drivers/dri/i810/i810vb.c
deleted file mode 100644
index 333e07c0eaa..00000000000
--- a/src/mesa/drivers/dri/i810/i810vb.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * GLX Hardware Device Driver for Intel i810
- * Copyright (C) 1999 Keith Whitwell
- *
- * 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 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
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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.
- *
- *
- */
-
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/imports.h"
-#include "main/macros.h"
-#include "main/colormac.h"
-
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_context.h"
-
-#include "i810screen.h"
-#include "i810_dri.h"
-#include "i810context.h"
-#include "i810vb.h"
-#include "i810ioctl.h"
-#include "i810state.h"
-
-
-#define I810_TEX1_BIT 0x1
-#define I810_TEX0_BIT 0x2
-#define I810_RGBA_BIT 0x4
-#define I810_SPEC_BIT 0x8
-#define I810_FOG_BIT 0x10
-#define I810_XYZW_BIT 0x20
-#define I810_PTEX_BIT 0x40
-#define I810_MAX_SETUP 0x80
-
-static struct {
- void (*emit)( struct gl_context *, GLuint, GLuint, void *, GLuint );
- tnl_interp_func interp;
- tnl_copy_pv_func copy_pv;
- GLboolean (*check_tex_sizes)( struct gl_context *ctx );
- GLuint vertex_size;
- GLuint vertex_format;
-} setup_tab[I810_MAX_SETUP];
-
-#define TINY_VERTEX_FORMAT (GFX_OP_VERTEX_FMT | \
- VF_TEXCOORD_COUNT_0 | \
- VF_RGBA_ENABLE | \
- VF_XYZ)
-
-#define NOTEX_VERTEX_FORMAT (GFX_OP_VERTEX_FMT | \
- VF_TEXCOORD_COUNT_0 | \
- VF_SPEC_FOG_ENABLE | \
- VF_RGBA_ENABLE | \
- VF_XYZW)
-
-#define TEX0_VERTEX_FORMAT (GFX_OP_VERTEX_FMT | \
- VF_TEXCOORD_COUNT_1 | \
- VF_SPEC_FOG_ENABLE | \
- VF_RGBA_ENABLE | \
- VF_XYZW)
-
-#define TEX1_VERTEX_FORMAT (GFX_OP_VERTEX_FMT | \
- VF_TEXCOORD_COUNT_2 | \
- VF_SPEC_FOG_ENABLE | \
- VF_RGBA_ENABLE | \
- VF_XYZW)
-
-#define PROJ_TEX1_VERTEX_FORMAT 0
-#define TEX2_VERTEX_FORMAT 0
-#define TEX3_VERTEX_FORMAT 0
-#define PROJ_TEX3_VERTEX_FORMAT 0
-
-#define DO_XYZW (IND & I810_XYZW_BIT)
-#define DO_RGBA (IND & I810_RGBA_BIT)
-#define DO_SPEC (IND & I810_SPEC_BIT)
-#define DO_FOG (IND & I810_FOG_BIT)
-#define DO_TEX0 (IND & I810_TEX0_BIT)
-#define DO_TEX1 (IND & I810_TEX1_BIT)
-#define DO_TEX2 0
-#define DO_TEX3 0
-#define DO_PTEX (IND & I810_PTEX_BIT)
-
-#define VERTEX i810Vertex
-#define VERTEX_COLOR i810_color_t
-#define GET_VIEWPORT_MAT() I810_CONTEXT(ctx)->ViewportMatrix.m
-#define GET_TEXSOURCE(n) n
-#define GET_VERTEX_FORMAT() I810_CONTEXT(ctx)->Setup[I810_CTXREG_VF]
-#define GET_VERTEX_STORE() I810_CONTEXT(ctx)->verts
-#define GET_VERTEX_SIZE() I810_CONTEXT(ctx)->vertex_size * sizeof(GLuint)
-#define INVALIDATE_STORED_VERTICES()
-
-#define HAVE_HW_VIEWPORT 0
-#define HAVE_HW_DIVIDE 0
-#define HAVE_RGBA_COLOR 0
-#define HAVE_TINY_VERTICES 1
-#define HAVE_NOTEX_VERTICES 1
-#define HAVE_TEX0_VERTICES 1
-#define HAVE_TEX1_VERTICES 1
-#define HAVE_TEX2_VERTICES 0
-#define HAVE_TEX3_VERTICES 0
-#define HAVE_PTEX_VERTICES 0
-
-#define UNVIEWPORT_VARS GLfloat h = I810_CONTEXT(ctx)->driDrawable->h
-#define UNVIEWPORT_X(x) x - SUBPIXEL_X
-#define UNVIEWPORT_Y(y) - y + h + SUBPIXEL_Y
-#define UNVIEWPORT_Z(z) z * (float)0xffff
-
-#define PTEX_FALLBACK() FALLBACK(I810_CONTEXT(ctx), I810_FALLBACK_TEXTURE, 1)
-
-#define INTERP_VERTEX setup_tab[I810_CONTEXT(ctx)->SetupIndex].interp
-#define COPY_PV_VERTEX setup_tab[I810_CONTEXT(ctx)->SetupIndex].copy_pv
-
-
-/***********************************************************************
- * Generate pv-copying and translation functions *
- ***********************************************************************/
-
-#define TAG(x) i810_##x
-#include "tnl_dd/t_dd_vb.c"
-
-/***********************************************************************
- * Generate vertex emit and interp functions *
- ***********************************************************************/
-
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT)
-#define TAG(x) x##_wg
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_SPEC_BIT)
-#define TAG(x) x##_wgs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_TEX0_BIT)
-#define TAG(x) x##_wgt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_TEX0_BIT|I810_TEX1_BIT)
-#define TAG(x) x##_wgt0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_TEX0_BIT|I810_PTEX_BIT)
-#define TAG(x) x##_wgpt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_SPEC_BIT|I810_TEX0_BIT)
-#define TAG(x) x##_wgst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_SPEC_BIT|I810_TEX0_BIT|\
- I810_TEX1_BIT)
-#define TAG(x) x##_wgst0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_SPEC_BIT|I810_TEX0_BIT|\
- I810_PTEX_BIT)
-#define TAG(x) x##_wgspt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_FOG_BIT)
-#define TAG(x) x##_wgf
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_FOG_BIT|I810_SPEC_BIT)
-#define TAG(x) x##_wgfs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_FOG_BIT|I810_TEX0_BIT)
-#define TAG(x) x##_wgft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_FOG_BIT|I810_TEX0_BIT|\
- I810_TEX1_BIT)
-#define TAG(x) x##_wgft0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_FOG_BIT|I810_TEX0_BIT|\
- I810_PTEX_BIT)
-#define TAG(x) x##_wgfpt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_FOG_BIT|I810_SPEC_BIT|\
- I810_TEX0_BIT)
-#define TAG(x) x##_wgfst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_FOG_BIT|I810_SPEC_BIT|\
- I810_TEX0_BIT|I810_TEX1_BIT)
-#define TAG(x) x##_wgfst0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_XYZW_BIT|I810_RGBA_BIT|I810_FOG_BIT|I810_SPEC_BIT|\
- I810_TEX0_BIT|I810_PTEX_BIT)
-#define TAG(x) x##_wgfspt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_TEX0_BIT)
-#define TAG(x) x##_t0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_TEX0_BIT|I810_TEX1_BIT)
-#define TAG(x) x##_t0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_FOG_BIT)
-#define TAG(x) x##_f
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_FOG_BIT|I810_TEX0_BIT)
-#define TAG(x) x##_ft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_FOG_BIT|I810_TEX0_BIT|I810_TEX1_BIT)
-#define TAG(x) x##_ft0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT)
-#define TAG(x) x##_g
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_SPEC_BIT)
-#define TAG(x) x##_gs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_TEX0_BIT)
-#define TAG(x) x##_gt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_TEX0_BIT|I810_TEX1_BIT)
-#define TAG(x) x##_gt0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_SPEC_BIT|I810_TEX0_BIT)
-#define TAG(x) x##_gst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_SPEC_BIT|I810_TEX0_BIT|I810_TEX1_BIT)
-#define TAG(x) x##_gst0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_FOG_BIT)
-#define TAG(x) x##_gf
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_FOG_BIT|I810_SPEC_BIT)
-#define TAG(x) x##_gfs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_FOG_BIT|I810_TEX0_BIT)
-#define TAG(x) x##_gft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_FOG_BIT|I810_TEX0_BIT|I810_TEX1_BIT)
-#define TAG(x) x##_gft0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_FOG_BIT|I810_SPEC_BIT|I810_TEX0_BIT)
-#define TAG(x) x##_gfst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (I810_RGBA_BIT|I810_FOG_BIT|I810_SPEC_BIT|I810_TEX0_BIT|\
- I810_TEX1_BIT)
-#define TAG(x) x##_gfst0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-
-static void init_setup_tab( void )
-{
- init_wg();
- init_wgs();
- init_wgt0();
- init_wgt0t1();
- init_wgpt0();
- init_wgst0();
- init_wgst0t1();
- init_wgspt0();
- init_wgf();
- init_wgfs();
- init_wgft0();
- init_wgft0t1();
- init_wgfpt0();
- init_wgfst0();
- init_wgfst0t1();
- init_wgfspt0();
- init_t0();
- init_t0t1();
- init_f();
- init_ft0();
- init_ft0t1();
- init_g();
- init_gs();
- init_gt0();
- init_gt0t1();
- init_gst0();
- init_gst0t1();
- init_gf();
- init_gfs();
- init_gft0();
- init_gft0t1();
- init_gfst0();
- init_gfst0t1();
-}
-
-
-
-static void i810PrintSetupFlags(const char *msg, GLuint flags )
-{
- fprintf(stderr, "%s(%x): %s%s%s%s%s%s\n",
- msg,
- (int)flags,
- (flags & I810_XYZW_BIT) ? " xyzw," : "",
- (flags & I810_RGBA_BIT) ? " rgba," : "",
- (flags & I810_SPEC_BIT) ? " spec," : "",
- (flags & I810_FOG_BIT) ? " fog," : "",
- (flags & I810_TEX0_BIT) ? " tex-0," : "",
- (flags & I810_TEX1_BIT) ? " tex-1," : "");
-}
-
-
-
-void i810CheckTexSizes( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- i810ContextPtr imesa = I810_CONTEXT( ctx );
-
- if (!setup_tab[imesa->SetupIndex].check_tex_sizes(ctx)) {
- /* Invalidate stored verts
- */
- imesa->SetupNewInputs = ~0;
- imesa->SetupIndex |= I810_PTEX_BIT;
-
- if (!imesa->Fallback &&
- !(ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
- tnl->Driver.Render.Interp = setup_tab[imesa->SetupIndex].interp;
- tnl->Driver.Render.CopyPV = setup_tab[imesa->SetupIndex].copy_pv;
- }
- if (imesa->Fallback) {
- tnl->Driver.Render.Start(ctx);
- }
- }
-}
-
-void i810BuildVertices( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- GLuint newinputs )
-{
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- GLuint stride = imesa->vertex_size * sizeof(int);
- GLubyte *v = ((GLubyte *)imesa->verts + (start * stride));
-
- if (0) fprintf(stderr, "%s\n", __FUNCTION__);
-
- newinputs |= imesa->SetupNewInputs;
- imesa->SetupNewInputs = 0;
-
- if (!newinputs)
- return;
-
- if (newinputs & VERT_BIT_POS) {
- setup_tab[imesa->SetupIndex].emit( ctx, start, count, v, stride );
- } else {
- GLuint ind = 0;
-
- if (newinputs & VERT_BIT_COLOR0)
- ind |= I810_RGBA_BIT;
-
- if (newinputs & VERT_BIT_COLOR1)
- ind |= I810_SPEC_BIT;
-
- if (newinputs & VERT_BIT_TEX0)
- ind |= I810_TEX0_BIT;
-
- if (newinputs & VERT_BIT_TEX1)
- ind |= I810_TEX1_BIT;
-
- if (newinputs & VERT_BIT_FOG)
- ind |= I810_FOG_BIT;
-
- if (imesa->SetupIndex & I810_PTEX_BIT)
- ind = ~0;
-
- ind &= imesa->SetupIndex;
-
- if (ind) {
- setup_tab[ind].emit( ctx, start, count, v, stride );
- }
- }
-}
-
-void i810ChooseVertexState( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- i810ContextPtr imesa = I810_CONTEXT( ctx );
- GLuint ind = I810_XYZW_BIT|I810_RGBA_BIT;
-
- if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)
- ind |= I810_SPEC_BIT;
-
- if (ctx->Fog.Enabled)
- ind |= I810_FOG_BIT;
-
- if (ctx->Texture._EnabledUnits & 0x2)
- /* unit 1 enabled */
- ind |= I810_TEX1_BIT|I810_TEX0_BIT;
- else if (ctx->Texture._EnabledUnits & 0x1)
- /* unit 0 enabled */
- ind |= I810_TEX0_BIT;
-
- imesa->SetupIndex = ind;
-
- if (I810_DEBUG & (DEBUG_VERTS|DEBUG_STATE))
- i810PrintSetupFlags( __FUNCTION__, ind );
-
- if (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED)) {
- tnl->Driver.Render.Interp = i810_interp_extras;
- tnl->Driver.Render.CopyPV = i810_copy_pv_extras;
- } else {
- tnl->Driver.Render.Interp = setup_tab[ind].interp;
- tnl->Driver.Render.CopyPV = setup_tab[ind].copy_pv;
- }
-
- if (setup_tab[ind].vertex_format != imesa->Setup[I810_CTXREG_VF]) {
- I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
- imesa->Setup[I810_CTXREG_VF] = setup_tab[ind].vertex_format;
- imesa->vertex_size = setup_tab[ind].vertex_size;
- }
-}
-
-
-
-void *i810_emit_contiguous_verts( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- void *dest )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLuint stride = imesa->vertex_size * 4;
- setup_tab[imesa->SetupIndex].emit( ctx, start, count, dest, stride );
- return (void *)((char *)dest + stride * (count - start));
-}
-
-
-
-void i810InitVB( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- GLuint size = TNL_CONTEXT(ctx)->vb.Size;
-
- imesa->verts = (GLubyte *)_mesa_align_malloc(size * 4 * 16, 32);
-
- {
- static int firsttime = 1;
- if (firsttime) {
- init_setup_tab();
- firsttime = 0;
- }
- }
-}
-
-
-void i810FreeVB( struct gl_context *ctx )
-{
- i810ContextPtr imesa = I810_CONTEXT(ctx);
- if (imesa->verts) {
- _mesa_align_free(imesa->verts);
- imesa->verts = 0;
- }
-}
diff --git a/src/mesa/drivers/dri/i810/i810vb.h b/src/mesa/drivers/dri/i810/i810vb.h
deleted file mode 100644
index e321518507e..00000000000
--- a/src/mesa/drivers/dri/i810/i810vb.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * GLX Hardware Device Driver for Intel i810
- * Copyright (C) 1999 Keith Whitwell
- *
- * 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 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
- * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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.
- *
- *
- */
-
-#ifndef I810VB_INC
-#define I810VB_INC
-
-#include "main/mtypes.h"
-#include "swrast/swrast.h"
-
-#define _I810_NEW_VERTEX (_NEW_TEXTURE | \
- _DD_NEW_SEPARATE_SPECULAR | \
- _DD_NEW_TRI_UNFILLED | \
- _DD_NEW_TRI_LIGHT_TWOSIDE | \
- _NEW_FOG)
-
-
-extern void i810ChooseVertexState( struct gl_context *ctx );
-extern void i810CheckTexSizes( struct gl_context *ctx );
-extern void i810BuildVertices( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- GLuint newinputs );
-
-
-extern void *i810_emit_contiguous_verts( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- void *dest );
-
-extern void i810_translate_vertex( struct gl_context *ctx,
- const i810Vertex *src,
- SWvertex *dst );
-
-extern void i810InitVB( struct gl_context *ctx );
-extern void i810FreeVB( struct gl_context *ctx );
-
-#endif
diff --git a/src/mesa/drivers/dri/i810/server/i810_common.h b/src/mesa/drivers/dri/i810/server/i810_common.h
deleted file mode 100644
index 29be444b45e..00000000000
--- a/src/mesa/drivers/dri/i810/server/i810_common.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/* i810_common.h -- common header definitions for I810 2D/3D/DRM suite
- *
- * Copyright 2002 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, 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
- * PRECISION INSIGHT 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.
- *
- * Converted to common header format:
- * Jens Owen
- *
- *
- */
-
-/* WARNING: If you change any of these defines, make sure to change
- * the kernel include file as well (i810_drm.h)
- */
-
-#ifndef _I810_COMMON_H_
-#define _I810_COMMON_H_
-
-#ifndef _I810_DEFINES_
-#define _I810_DEFINES_
-#define I810_USE_BATCH 1
-
-#define I810_DMA_BUF_ORDER 12
-#define I810_DMA_BUF_SZ (1<
- *
- * based on the i740 driver by
- * Kevin E. Martin
- *
- *
- */
-
-#ifndef _I810_REG_H
-#define _I810_REG_H
-
-/* I/O register offsets
- */
-#define SRX 0x3C4 /* p208 */
-#define GRX 0x3CE /* p213 */
-#define ARX 0x3C0 /* p224 */
-
-/* VGA Color Palette Registers */
-#define DACMASK 0x3C6 /* p232 */
-#define DACSTATE 0x3C7 /* p232 */
-#define DACRX 0x3C7 /* p233 */
-#define DACWX 0x3C8 /* p233 */
-#define DACDATA 0x3C9 /* p233 */
-
-/* CRT Controller Registers (CRX) */
-#define START_ADDR_HI 0x0C /* p246 */
-#define START_ADDR_LO 0x0D /* p247 */
-#define VERT_SYNC_END 0x11 /* p249 */
-#define EXT_VERT_TOTAL 0x30 /* p257 */
-#define EXT_VERT_DISPLAY 0x31 /* p258 */
-#define EXT_VERT_SYNC_START 0x32 /* p259 */
-#define EXT_VERT_BLANK_START 0x33 /* p260 */
-#define EXT_HORIZ_TOTAL 0x35 /* p261 */
-#define EXT_HORIZ_BLANK 0x39 /* p261 */
-#define EXT_START_ADDR 0x40 /* p262 */
-#define EXT_START_ADDR_ENABLE 0x80
-#define EXT_OFFSET 0x41 /* p263 */
-#define EXT_START_ADDR_HI 0x42 /* p263 */
-#define INTERLACE_CNTL 0x70 /* p264 */
-#define INTERLACE_ENABLE 0x80
-#define INTERLACE_DISABLE 0x00
-
-/* Miscellaneous Output Register
- */
-#define MSR_R 0x3CC /* p207 */
-#define MSR_W 0x3C2 /* p207 */
-#define IO_ADDR_SELECT 0x01
-
-#define MDA_BASE 0x3B0 /* p207 */
-#define CGA_BASE 0x3D0 /* p207 */
-
-/* CR80 - IO Control, p264
- */
-#define IO_CTNL 0x80
-#define EXTENDED_ATTR_CNTL 0x02
-#define EXTENDED_CRTC_CNTL 0x01
-
-/* GR10 - Address mapping, p221
- */
-#define ADDRESS_MAPPING 0x10
-#define PAGE_TO_LOCAL_MEM_ENABLE 0x10
-#define GTT_MEM_MAP_ENABLE 0x08
-#define PACKED_MODE_ENABLE 0x04
-#define LINEAR_MODE_ENABLE 0x02
-#define PAGE_MAPPING_ENABLE 0x01
-
-/* Blitter control, p378
- */
-#define BITBLT_CNTL 0x7000c
-#define COLEXP_MODE 0x30
-#define COLEXP_8BPP 0x00
-#define COLEXP_16BPP 0x10
-#define COLEXP_24BPP 0x20
-#define COLEXP_RESERVED 0x30
-#define BITBLT_STATUS 0x01
-
-/* p375.
- */
-#define DISPLAY_CNTL 0x70008
-#define VGA_WRAP_MODE 0x02
-#define VGA_WRAP_AT_256KB 0x00
-#define VGA_NO_WRAP 0x02
-#define GUI_MODE 0x01
-#define STANDARD_VGA_MODE 0x00
-#define HIRES_MODE 0x01
-
-/* p375
- */
-#define PIXPIPE_CONFIG_0 0x70009
-#define DAC_8_BIT 0x80
-#define DAC_6_BIT 0x00
-#define HW_CURSOR_ENABLE 0x10
-#define EXTENDED_PALETTE 0x01
-
-/* p375
- */
-#define PIXPIPE_CONFIG_1 0x7000a
-#define DISPLAY_COLOR_MODE 0x0F
-#define DISPLAY_VGA_MODE 0x00
-#define DISPLAY_8BPP_MODE 0x02
-#define DISPLAY_15BPP_MODE 0x04
-#define DISPLAY_16BPP_MODE 0x05
-#define DISPLAY_24BPP_MODE 0x06
-#define DISPLAY_32BPP_MODE 0x07
-
-/* p375
- */
-#define PIXPIPE_CONFIG_2 0x7000b
-#define DISPLAY_GAMMA_ENABLE 0x08
-#define DISPLAY_GAMMA_DISABLE 0x00
-#define OVERLAY_GAMMA_ENABLE 0x04
-#define OVERLAY_GAMMA_DISABLE 0x00
-
-
-/* p380
- */
-#define DISPLAY_BASE 0x70020
-#define DISPLAY_BASE_MASK 0x03fffffc
-
-
-/* Cursor control registers, pp383-384
- */
-/* Desktop (845G, 865G) */
-#define CURSOR_CONTROL 0x70080
-#define CURSOR_ENABLE 0x80000000
-#define CURSOR_GAMMA_ENABLE 0x40000000
-#define CURSOR_STRIDE_MASK 0x30000000
-#define CURSOR_FORMAT_SHIFT 24
-#define CURSOR_FORMAT_MASK (0x07 << CURSOR_FORMAT_SHIFT)
-#define CURSOR_FORMAT_2C (0x00 << CURSOR_FORMAT_SHIFT)
-#define CURSOR_FORMAT_3C (0x01 << CURSOR_FORMAT_SHIFT)
-#define CURSOR_FORMAT_4C (0x02 << CURSOR_FORMAT_SHIFT)
-#define CURSOR_FORMAT_ARGB (0x04 << CURSOR_FORMAT_SHIFT)
-#define CURSOR_FORMAT_XRGB (0x05 << CURSOR_FORMAT_SHIFT)
-
-/* Mobile and i810 */
-#define CURSOR_A_CONTROL CURSOR_CONTROL
-#define CURSOR_ORIGIN_SCREEN 0x00 /* i810 only */
-#define CURSOR_ORIGIN_DISPLAY 0x1 /* i810 only */
-#define CURSOR_MODE 0x27
-#define CURSOR_MODE_DISABLE 0x00
-#define CURSOR_MODE_32_4C_AX 0x01 /* i810 only */
-#define CURSOR_MODE_64_3C 0x04
-#define CURSOR_MODE_64_4C_AX 0x05
-#define CURSOR_MODE_64_4C 0x06
-#define CURSOR_MODE_64_32B_AX 0x07
-#define CURSOR_MODE_64_ARGB_AX (0x20 | CURSOR_MODE_64_32B_AX)
-#define MCURSOR_PIPE_SELECT (1 << 28)
-#define MCURSOR_PIPE_A 0x00
-#define MCURSOR_PIPE_B (1 << 28)
-#define MCURSOR_GAMMA_ENABLE (1 << 26)
-#define MCURSOR_MEM_TYPE_LOCAL (1 << 25)
-
-
-#define CURSOR_BASEADDR 0x70084
-#define CURSOR_A_BASE CURSOR_BASEADDR
-#define CURSOR_BASEADDR_MASK 0x1FFFFF00
-#define CURSOR_A_POSITION 0x70088
-#define CURSOR_POS_SIGN 0x8000
-#define CURSOR_POS_MASK 0x007FF
-#define CURSOR_X_SHIFT 0
-#define CURSOR_Y_SHIFT 16
-#define CURSOR_X_LO 0x70088
-#define CURSOR_X_HI 0x70089
-#define CURSOR_X_POS 0x00
-#define CURSOR_X_NEG 0x80
-#define CURSOR_Y_LO 0x7008A
-#define CURSOR_Y_HI 0x7008B
-#define CURSOR_Y_POS 0x00
-#define CURSOR_Y_NEG 0x80
-
-#define CURSOR_A_PALETTE0 0x70090
-#define CURSOR_A_PALETTE1 0x70094
-#define CURSOR_A_PALETTE2 0x70098
-#define CURSOR_A_PALETTE3 0x7009C
-
-#define CURSOR_SIZE 0x700A0
-#define CURSOR_SIZE_MASK 0x3FF
-#define CURSOR_SIZE_HSHIFT 0
-#define CURSOR_SIZE_VSHIFT 12
-
-
-/* Similar registers exist in Device 0 on the i810 (pp55-65), but I'm
- * not sure they refer to local (graphics) memory.
- *
- * These details are for the local memory control registers,
- * (pp301-310). The test machines are not equiped with local memory,
- * so nothing is tested. Only a single row seems to be supported.
- */
-#define DRAM_ROW_TYPE 0x3000
-#define DRAM_ROW_0 0x01
-#define DRAM_ROW_0_SDRAM 0x01
-#define DRAM_ROW_0_EMPTY 0x00
-#define DRAM_ROW_CNTL_LO 0x3001
-#define DRAM_PAGE_MODE_CTRL 0x10
-#define DRAM_RAS_TO_CAS_OVRIDE 0x08
-#define DRAM_CAS_LATENCY 0x04
-#define DRAM_RAS_TIMING 0x02
-#define DRAM_RAS_PRECHARGE 0x01
-#define DRAM_ROW_CNTL_HI 0x3002
-#define DRAM_REFRESH_RATE 0x18
-#define DRAM_REFRESH_DISABLE 0x00
-#define DRAM_REFRESH_60HZ 0x08
-#define DRAM_REFRESH_FAST_TEST 0x10
-#define DRAM_REFRESH_RESERVED 0x18
-#define DRAM_SMS 0x07
-#define DRAM_SMS_NORMAL 0x00
-#define DRAM_SMS_NOP_ENABLE 0x01
-#define DRAM_SMS_ABPCE 0x02
-#define DRAM_SMS_MRCE 0x03
-#define DRAM_SMS_CBRCE 0x04
-
-/* p307
- */
-#define DPMS_SYNC_SELECT 0x5002
-#define VSYNC_CNTL 0x08
-#define VSYNC_ON 0x00
-#define VSYNC_OFF 0x08
-#define HSYNC_CNTL 0x02
-#define HSYNC_ON 0x00
-#define HSYNC_OFF 0x02
-
-
-
-/* p317, 319
- */
-#define VCLK2_VCO_M 0x6008 /* treat as 16 bit? (includes msbs) */
-#define VCLK2_VCO_N 0x600a
-#define VCLK2_VCO_DIV_SEL 0x6012
-
-#define VCLK_DIVISOR_VGA0 0x6000
-#define VCLK_DIVISOR_VGA1 0x6004
-#define VCLK_POST_DIV 0x6010
-
-#define POST_DIV_SELECT 0x70
-#define POST_DIV_1 0x00
-#define POST_DIV_2 0x10
-#define POST_DIV_4 0x20
-#define POST_DIV_8 0x30
-#define POST_DIV_16 0x40
-#define POST_DIV_32 0x50
-#define VCO_LOOP_DIV_BY_4M 0x00
-#define VCO_LOOP_DIV_BY_16M 0x04
-
-
-/* Instruction Parser Mode Register
- * - p281
- * - 2 new bits.
- */
-#define INST_PM 0x20c0
-#define AGP_SYNC_PACKET_FLUSH_ENABLE 0x20 /* reserved */
-#define SYNC_PACKET_FLUSH_ENABLE 0x10
-#define TWO_D_INST_DISABLE 0x08
-#define THREE_D_INST_DISABLE 0x04
-#define STATE_VAR_UPDATE_DISABLE 0x02
-#define PAL_STIP_DISABLE 0x01
-
-#define INST_DONE 0x2090
-#define INST_PS 0x20c4
-
-#define MEMMODE 0x20dc
-
-
-/* Instruction parser error register. p279
- */
-#define IPEIR 0x2088
-#define IPEHR 0x208C
-
-
-/* General error reporting regs, p296
- */
-#define EIR 0x20B0
-#define EMR 0x20B4
-#define ESR 0x20B8
-#define IP_ERR 0x0001
-#define ERROR_RESERVED 0xffc6
-
-
-/* Interrupt Control Registers
- * - new bits for i810
- * - new register hwstam (mask)
- */
-#define HWSTAM 0x2098 /* p290 */
-#define IER 0x20a0 /* p291 */
-#define IIR 0x20a4 /* p292 */
-#define IMR 0x20a8 /* p293 */
-#define ISR 0x20ac /* p294 */
-#define HW_ERROR 0x8000
-#define SYNC_STATUS_TOGGLE 0x1000
-#define DPY_0_FLIP_PENDING 0x0800
-#define DPY_1_FLIP_PENDING 0x0400 /* not implemented on i810 */
-#define OVL_0_FLIP_PENDING 0x0200
-#define OVL_1_FLIP_PENDING 0x0100 /* not implemented on i810 */
-#define DPY_0_VBLANK 0x0080
-#define DPY_0_EVENT 0x0040
-#define DPY_1_VBLANK 0x0020 /* not implemented on i810 */
-#define DPY_1_EVENT 0x0010 /* not implemented on i810 */
-#define HOST_PORT_EVENT 0x0008 /* */
-#define CAPTURE_EVENT 0x0004 /* */
-#define USER_DEFINED 0x0002
-#define BREAKPOINT 0x0001
-
-
-#define INTR_RESERVED (0x6000 | \
- DPY_1_FLIP_PENDING | \
- OVL_1_FLIP_PENDING | \
- DPY_1_VBLANK | \
- DPY_1_EVENT | \
- HOST_PORT_EVENT | \
- CAPTURE_EVENT )
-
-/* FIFO Watermark and Burst Length Control Register
- *
- * - different offset and contents on i810 (p299) (fewer bits per field)
- * - some overlay fields added
- * - what does it all mean?
- */
-#define FWATER_BLC 0x20d8
-#define FWATER_BLC2 0x20dc
-#define MM_BURST_LENGTH 0x00700000
-#define MM_FIFO_WATERMARK 0x0001F000
-#define LM_BURST_LENGTH 0x00000700
-#define LM_FIFO_WATERMARK 0x0000001F
-
-
-/* Fence/Tiling ranges [0..7]
- */
-#define FENCE 0x2000
-#define FENCE_NR 8
-
-#define I830_FENCE_START_MASK 0x07f80000
-
-#define FENCE_START_MASK 0x03F80000
-#define FENCE_X_MAJOR 0x00000000
-#define FENCE_Y_MAJOR 0x00001000
-#define FENCE_SIZE_MASK 0x00000700
-#define FENCE_SIZE_512K 0x00000000
-#define FENCE_SIZE_1M 0x00000100
-#define FENCE_SIZE_2M 0x00000200
-#define FENCE_SIZE_4M 0x00000300
-#define FENCE_SIZE_8M 0x00000400
-#define FENCE_SIZE_16M 0x00000500
-#define FENCE_SIZE_32M 0x00000600
-#define FENCE_SIZE_64M 0x00000700
-#define FENCE_PITCH_MASK 0x00000070
-#define FENCE_PITCH_1 0x00000000
-#define FENCE_PITCH_2 0x00000010
-#define FENCE_PITCH_4 0x00000020
-#define FENCE_PITCH_8 0x00000030
-#define FENCE_PITCH_16 0x00000040
-#define FENCE_PITCH_32 0x00000050
-#define FENCE_PITCH_64 0x00000060
-#define FENCE_VALID 0x00000001
-
-
-/* Registers to control page table, p274
- */
-#define PGETBL_CTL 0x2020
-#define PGETBL_ADDR_MASK 0xFFFFF000
-#define PGETBL_ENABLE_MASK 0x00000001
-#define PGETBL_ENABLED 0x00000001
-
-/* Register containing pge table error results, p276
- */
-#define PGE_ERR 0x2024
-#define PGE_ERR_ADDR_MASK 0xFFFFF000
-#define PGE_ERR_ID_MASK 0x00000038
-#define PGE_ERR_CAPTURE 0x00000000
-#define PGE_ERR_OVERLAY 0x00000008
-#define PGE_ERR_DISPLAY 0x00000010
-#define PGE_ERR_HOST 0x00000018
-#define PGE_ERR_RENDER 0x00000020
-#define PGE_ERR_BLITTER 0x00000028
-#define PGE_ERR_MAPPING 0x00000030
-#define PGE_ERR_CMD_PARSER 0x00000038
-#define PGE_ERR_TYPE_MASK 0x00000007
-#define PGE_ERR_INV_TABLE 0x00000000
-#define PGE_ERR_INV_PTE 0x00000001
-#define PGE_ERR_MIXED_TYPES 0x00000002
-#define PGE_ERR_PAGE_MISS 0x00000003
-#define PGE_ERR_ILLEGAL_TRX 0x00000004
-#define PGE_ERR_LOCAL_MEM 0x00000005
-#define PGE_ERR_TILED 0x00000006
-
-
-
-/* Page table entries loaded via mmio region, p323
- */
-#define PTE_BASE 0x10000
-#define PTE_ADDR_MASK 0x3FFFF000
-#define PTE_TYPE_MASK 0x00000006
-#define PTE_LOCAL 0x00000002
-#define PTE_MAIN_UNCACHED 0x00000000
-#define PTE_MAIN_CACHED 0x00000006
-#define PTE_VALID_MASK 0x00000001
-#define PTE_VALID 0x00000001
-
-
-/* Ring buffer registers, p277, overview p19
- */
-#define LP_RING 0x2030
-#define HP_RING 0x2040
-
-#define RING_TAIL 0x00
-#define TAIL_ADDR 0x000FFFF8
-#define I830_TAIL_MASK 0x001FFFF8
-
-#define RING_HEAD 0x04
-#define HEAD_WRAP_COUNT 0xFFE00000
-#define HEAD_WRAP_ONE 0x00200000
-#define HEAD_ADDR 0x001FFFFC
-#define I830_HEAD_MASK 0x001FFFFC
-
-#define RING_START 0x08
-#define START_ADDR 0x00FFFFF8
-#define I830_RING_START_MASK 0xFFFFF000
-
-#define RING_LEN 0x0C
-#define RING_NR_PAGES 0x000FF000
-#define I830_RING_NR_PAGES 0x001FF000
-#define RING_REPORT_MASK 0x00000006
-#define RING_REPORT_64K 0x00000002
-#define RING_REPORT_128K 0x00000004
-#define RING_NO_REPORT 0x00000000
-#define RING_VALID_MASK 0x00000001
-#define RING_VALID 0x00000001
-#define RING_INVALID 0x00000000
-
-
-
-/* BitBlt Instructions
- *
- * There are many more masks & ranges yet to add.
- */
-#define BR00_BITBLT_CLIENT 0x40000000
-#define BR00_OP_COLOR_BLT 0x10000000
-#define BR00_OP_SRC_COPY_BLT 0x10C00000
-#define BR00_OP_FULL_BLT 0x11400000
-#define BR00_OP_MONO_SRC_BLT 0x11800000
-#define BR00_OP_MONO_SRC_COPY_BLT 0x11000000
-#define BR00_OP_MONO_PAT_BLT 0x11C00000
-#define BR00_OP_MONO_SRC_COPY_IMMEDIATE_BLT (0x61 << 22)
-#define BR00_OP_TEXT_IMMEDIATE_BLT 0xc000000
-
-
-#define BR00_TPCY_DISABLE 0x00000000
-#define BR00_TPCY_ENABLE 0x00000010
-
-#define BR00_TPCY_ROP 0x00000000
-#define BR00_TPCY_NO_ROP 0x00000020
-#define BR00_TPCY_EQ 0x00000000
-#define BR00_TPCY_NOT_EQ 0x00000040
-
-#define BR00_PAT_MSB_FIRST 0x00000000 /* ? */
-
-#define BR00_PAT_VERT_ALIGN 0x000000e0
-
-#define BR00_LENGTH 0x0000000F
-
-#define BR09_DEST_ADDR 0x03FFFFFF
-
-#define BR11_SOURCE_PITCH 0x00003FFF
-
-#define BR12_SOURCE_ADDR 0x03FFFFFF
-
-#define BR13_SOLID_PATTERN 0x80000000
-#define BR13_RIGHT_TO_LEFT 0x40000000
-#define BR13_LEFT_TO_RIGHT 0x00000000
-#define BR13_MONO_TRANSPCY 0x20000000
-#define BR13_USE_DYN_DEPTH 0x04000000
-#define BR13_DYN_8BPP 0x00000000
-#define BR13_DYN_16BPP 0x01000000
-#define BR13_DYN_24BPP 0x02000000
-#define BR13_ROP_MASK 0x00FF0000
-#define BR13_DEST_PITCH 0x0000FFFF
-#define BR13_PITCH_SIGN_BIT 0x00008000
-
-#define BR14_DEST_HEIGHT 0xFFFF0000
-#define BR14_DEST_WIDTH 0x0000FFFF
-
-#define BR15_PATTERN_ADDR 0x03FFFFFF
-
-#define BR16_SOLID_PAT_COLOR 0x00FFFFFF
-#define BR16_BACKGND_PAT_CLR 0x00FFFFFF
-
-#define BR17_FGND_PAT_CLR 0x00FFFFFF
-
-#define BR18_SRC_BGND_CLR 0x00FFFFFF
-#define BR19_SRC_FGND_CLR 0x00FFFFFF
-
-
-/* Instruction parser instructions
- */
-
-#define INST_PARSER_CLIENT 0x00000000
-#define INST_OP_FLUSH 0x02000000
-#define INST_FLUSH_MAP_CACHE 0x00000001
-
-
-#define GFX_OP_USER_INTERRUPT ((0<<29)|(2<<23))
-
-
-/* Registers in the i810 host-pci bridge pci config space which affect
- * the i810 graphics operations.
- */
-#define SMRAM_MISCC 0x70
-#define GMS 0x000000c0
-#define GMS_DISABLE 0x00000000
-#define GMS_ENABLE_BARE 0x00000040
-#define GMS_ENABLE_512K 0x00000080
-#define GMS_ENABLE_1M 0x000000c0
-#define USMM 0x00000030
-#define USMM_DISABLE 0x00000000
-#define USMM_TSEG_ZERO 0x00000010
-#define USMM_TSEG_512K 0x00000020
-#define USMM_TSEG_1M 0x00000030
-#define GFX_MEM_WIN_SIZE 0x00010000
-#define GFX_MEM_WIN_32M 0x00010000
-#define GFX_MEM_WIN_64M 0x00000000
-
-/* Overkill? I don't know. Need to figure out top of mem to make the
- * SMRAM calculations come out. Linux seems to have problems
- * detecting it all on its own, so this seems a reasonable double
- * check to any user supplied 'mem=...' boot param.
- *
- * ... unfortunately this reg doesn't work according to spec on the
- * test hardware.
- */
-#define WHTCFG_PAMR_DRP 0x50
-#define SYS_DRAM_ROW_0_SHIFT 16
-#define SYS_DRAM_ROW_1_SHIFT 20
-#define DRAM_MASK 0x0f
-#define DRAM_VALUE_0 0
-#define DRAM_VALUE_1 8
-/* No 2 value defined */
-#define DRAM_VALUE_3 16
-#define DRAM_VALUE_4 16
-#define DRAM_VALUE_5 24
-#define DRAM_VALUE_6 32
-#define DRAM_VALUE_7 32
-#define DRAM_VALUE_8 48
-#define DRAM_VALUE_9 64
-#define DRAM_VALUE_A 64
-#define DRAM_VALUE_B 96
-#define DRAM_VALUE_C 128
-#define DRAM_VALUE_D 128
-#define DRAM_VALUE_E 192
-#define DRAM_VALUE_F 256 /* nice one, geezer */
-#define LM_FREQ_MASK 0x10
-#define LM_FREQ_133 0x10
-#define LM_FREQ_100 0x00
-
-
-
-
-/* These are 3d state registers, but the state is invarient, so we let
- * the X server handle it:
- */
-
-
-
-/* GFXRENDERSTATE_COLOR_CHROMA_KEY, p135
- */
-#define GFX_OP_COLOR_CHROMA_KEY ((0x3<<29)|(0x1d<<24)|(0x2<<16)|0x1)
-#define CC1_UPDATE_KILL_WRITE (1<<28)
-#define CC1_ENABLE_KILL_WRITE (1<<27)
-#define CC1_DISABLE_KILL_WRITE 0
-#define CC1_UPDATE_COLOR_IDX (1<<26)
-#define CC1_UPDATE_CHROMA_LOW (1<<25)
-#define CC1_UPDATE_CHROMA_HI (1<<24)
-#define CC1_CHROMA_LOW_MASK ((1<<24)-1)
-#define CC2_COLOR_IDX_SHIFT 24
-#define CC2_COLOR_IDX_MASK (0xff<<24)
-#define CC2_CHROMA_HI_MASK ((1<<24)-1)
-
-
-#define GFX_CMD_CONTEXT_SEL ((0<<29)|(0x5<<23))
-#define CS_UPDATE_LOAD (1<<17)
-#define CS_UPDATE_USE (1<<16)
-#define CS_UPDATE_LOAD (1<<17)
-#define CS_LOAD_CTX0 0
-#define CS_LOAD_CTX1 (1<<8)
-#define CS_USE_CTX0 0
-#define CS_USE_CTX1 (1<<0)
-
-/* I810 LCD/TV registers */
-#define LCD_TV_HTOTAL 0x60000
-#define LCD_TV_C 0x60018
-#define LCD_TV_OVRACT 0x6001C
-
-#define LCD_TV_ENABLE (1 << 31)
-#define LCD_TV_VGAMOD (1 << 28)
-
-/* I830 CRTC registers */
-#define HTOTAL_A 0x60000
-#define HBLANK_A 0x60004
-#define HSYNC_A 0x60008
-#define VTOTAL_A 0x6000c
-#define VBLANK_A 0x60010
-#define VSYNC_A 0x60014
-#define PIPEASRC 0x6001c
-#define BCLRPAT_A 0x60020
-
-#define HTOTAL_B 0x61000
-#define HBLANK_B 0x61004
-#define HSYNC_B 0x61008
-#define VTOTAL_B 0x6100c
-#define VBLANK_B 0x61010
-#define VSYNC_B 0x61014
-#define PIPEBSRC 0x6101c
-#define BCLRPAT_B 0x61020
-
-#define DPLL_A 0x06014
-#define DPLL_B 0x06018
-#define FPA0 0x06040
-#define FPA1 0x06044
-
-#define I830_HTOTAL_MASK 0xfff0000
-#define I830_HACTIVE_MASK 0x7ff
-
-#define I830_HBLANKEND_MASK 0xfff0000
-#define I830_HBLANKSTART_MASK 0xfff
-
-#define I830_HSYNCEND_MASK 0xfff0000
-#define I830_HSYNCSTART_MASK 0xfff
-
-#define I830_VTOTAL_MASK 0xfff0000
-#define I830_VACTIVE_MASK 0x7ff
-
-#define I830_VBLANKEND_MASK 0xfff0000
-#define I830_VBLANKSTART_MASK 0xfff
-
-#define I830_VSYNCEND_MASK 0xfff0000
-#define I830_VSYNCSTART_MASK 0xfff
-
-#define I830_PIPEA_HORZ_MASK 0x7ff0000
-#define I830_PIPEA_VERT_MASK 0x7ff
-
-#define ADPA 0x61100
-#define ADPA_DAC_ENABLE (1<<31)
-#define ADPA_DAC_DISABLE 0
-#define ADPA_PIPE_SELECT_MASK (1<<30)
-#define ADPA_PIPE_A_SELECT 0
-#define ADPA_PIPE_B_SELECT (1<<30)
-#define ADPA_USE_VGA_HVPOLARITY (1<<15)
-#define ADPA_SETS_HVPOLARITY 0
-#define ADPA_VSYNC_CNTL_DISABLE (1<<11)
-#define ADPA_VSYNC_CNTL_ENABLE 0
-#define ADPA_HSYNC_CNTL_DISABLE (1<<10)
-#define ADPA_HSYNC_CNTL_ENABLE 0
-#define ADPA_VSYNC_ACTIVE_HIGH (1<<4)
-#define ADPA_VSYNC_ACTIVE_LOW 0
-#define ADPA_HSYNC_ACTIVE_HIGH (1<<3)
-#define ADPA_HSYNC_ACTIVE_LOW 0
-
-
-#define DVOA 0x61120
-#define DVOB 0x61140
-#define DVOC 0x61160
-#define DVO_ENABLE (1<<31)
-
-#define DVOA_SRCDIM 0x61124
-#define DVOB_SRCDIM 0x61144
-#define DVOC_SRCDIM 0x61164
-
-#define LVDS 0x61180
-
-#define PIPEACONF 0x70008
-#define PIPEACONF_ENABLE (1<<31)
-#define PIPEACONF_DISABLE 0
-#define PIPEACONF_DOUBLE_WIDE (1<<30)
-#define PIPEACONF_SINGLE_WIDE 0
-#define PIPEACONF_PIPE_UNLOCKED 0
-#define PIPEACONF_PIPE_LOCKED (1<<25)
-#define PIPEACONF_PALETTE 0
-#define PIPEACONF_GAMMA (1<<24)
-
-#define PIPEBCONF 0x71008
-#define PIPEBCONF_ENABLE (1<<31)
-#define PIPEBCONF_DISABLE 0
-#define PIPEBCONF_GAMMA (1<<24)
-#define PIPEBCONF_PALETTE 0
-
-#define DSPACNTR 0x70180
-#define DSPBCNTR 0x71180
-#define DISPLAY_PLANE_ENABLE (1<<31)
-#define DISPLAY_PLANE_DISABLE 0
-#define DISPPLANE_GAMMA_ENABLE (1<<30)
-#define DISPPLANE_GAMMA_DISABLE 0
-#define DISPPLANE_PIXFORMAT_MASK (0xf<<26)
-#define DISPPLANE_8BPP (0x2<<26)
-#define DISPPLANE_15_16BPP (0x4<<26)
-#define DISPPLANE_16BPP (0x5<<26)
-#define DISPPLANE_32BPP_NO_ALPHA (0x6<<26)
-#define DISPPLANE_32BPP (0x7<<26)
-#define DISPPLANE_STEREO_ENABLE (1<<25)
-#define DISPPLANE_STEREO_DISABLE 0
-#define DISPPLANE_SEL_PIPE_MASK (1<<24)
-#define DISPPLANE_SEL_PIPE_A 0
-#define DISPPLANE_SEL_PIPE_B (1<<24)
-#define DISPPLANE_SRC_KEY_ENABLE (1<<22)
-#define DISPPLANE_SRC_KEY_DISABLE 0
-#define DISPPLANE_LINE_DOUBLE (1<<20)
-#define DISPPLANE_NO_LINE_DOUBLE 0
-#define DISPPLANE_STEREO_POLARITY_FIRST 0
-#define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
-/* plane B only */
-#define DISPPLANE_ALPHA_TRANS_ENABLE (1<<15)
-#define DISPPLANE_ALPHA_TRANS_DISABLE 0
-#define DISPPLANE_SPRITE_ABOVE_DISPLAYA 0
-#define DISPPLANE_SPRITE_ABOVE_OVERLAY (1)
-
-#define DSPABASE 0x70184
-#define DSPASTRIDE 0x70188
-
-#define DSPBBASE 0x71184
-#define DSPBADDR DSPBBASE
-#define DSPBSTRIDE 0x71188
-
-/* Various masks for reserved bits, etc. */
-#define I830_FWATER1_MASK (~((1<<11)|(1<<10)|(1<<9)| \
- (1<<8)|(1<<26)|(1<<25)|(1<<24)|(1<<5)|(1<<4)|(1<<3)| \
- (1<<2)|(1<<1)|1|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)))
-#define I830_FWATER2_MASK ~(0)
-
-#define DV0A_RESERVED ((1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<16)|(1<<5)|(1<<1)|1)
-#define DV0B_RESERVED ((1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<16)|(1<<5)|(1<<1)|1)
-#define VGA0_N_DIVISOR_MASK ((1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
-#define VGA0_M1_DIVISOR_MASK ((1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8))
-#define VGA0_M2_DIVISOR_MASK ((1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
-#define VGA0_M1M2N_RESERVED ~(VGA0_N_DIVISOR_MASK|VGA0_M1_DIVISOR_MASK|VGA0_M2_DIVISOR_MASK)
-#define VGA0_POSTDIV_MASK ((1<<7)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
-#define VGA1_POSTDIV_MASK ((1<<15)|(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8))
-#define VGA_POSTDIV_RESERVED ~(VGA0_POSTDIV_MASK|VGA1_POSTDIV_MASK|(1<<7)|(1<<15))
-#define DPLLA_POSTDIV_MASK ((1<<23)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
-#define DPLLA_RESERVED ((1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<22)|(1<<15)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
-#define ADPA_RESERVED ((1<<2)|(1<<1)|1|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
-#define SUPER_WORD 32
-#define BURST_A_MASK ((1<<11)|(1<<10)|(1<<9)|(1<<8))
-#define BURST_B_MASK ((1<<26)|(1<<25)|(1<<24))
-#define WATER_A_MASK ((1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
-#define WATER_B_MASK ((1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
-#define WATER_RESERVED ((1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<23)|(1<<22)|(1<<21)|(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<7)|(1<<6))
-#define PIPEACONF_RESERVED ((1<<29)|(1<<28)|(1<<27)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|0xffff)
-#define PIPEBCONF_RESERVED ((1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<26)|(1<<25)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|0xffff)
-#define DSPACNTR_RESERVED ((1<<23)|(1<<19)|(1<<17)|(1<<16)|0xffff)
-#define DSPBCNTR_RESERVED ((1<<23)|(1<<19)|(1<<17)|(1<<16)|0x7ffe)
-
-#define I830_GMCH_CTRL 0x52
-
-#define I830_GMCH_ENABLED 0x4
-#define I830_GMCH_MEM_MASK 0x1
-#define I830_GMCH_MEM_64M 0x1
-#define I830_GMCH_MEM_128M 0
-
-#define I830_GMCH_GMS_MASK 0x70
-#define I830_GMCH_GMS_DISABLED 0x00
-#define I830_GMCH_GMS_LOCAL 0x10
-#define I830_GMCH_GMS_STOLEN_512 0x20
-#define I830_GMCH_GMS_STOLEN_1024 0x30
-#define I830_GMCH_GMS_STOLEN_8192 0x40
-
-#define I830_RDRAM_CHANNEL_TYPE 0x03010
-#define I830_RDRAM_ND(x) (((x) & 0x20) >> 5)
-#define I830_RDRAM_DDT(x) (((x) & 0x18) >> 3)
-
-#define I855_GMCH_GMS_MASK (0x7 << 4)
-#define I855_GMCH_GMS_DISABLED 0x00
-#define I855_GMCH_GMS_STOLEN_1M (0x1 << 4)
-#define I855_GMCH_GMS_STOLEN_4M (0x2 << 4)
-#define I855_GMCH_GMS_STOLEN_8M (0x3 << 4)
-#define I855_GMCH_GMS_STOLEN_16M (0x4 << 4)
-#define I855_GMCH_GMS_STOLEN_32M (0x5 << 4)
-
-#define I85X_CAPID 0x44
-#define I85X_VARIANT_MASK 0x7
-#define I85X_VARIANT_SHIFT 5
-#define I855_GME 0x0
-#define I855_GM 0x4
-#define I852_GME 0x2
-#define I852_GM 0x5
-
-/* BLT commands */
-#define COLOR_BLT_CMD ((2<<29)|(0x40<<22)|(0x3))
-#define COLOR_BLT_WRITE_ALPHA (1<<21)
-#define COLOR_BLT_WRITE_RGB (1<<20)
-
-#define XY_COLOR_BLT_CMD ((2<<29)|(0x50<<22)|(0x4))
-#define XY_COLOR_BLT_WRITE_ALPHA (1<<21)
-#define XY_COLOR_BLT_WRITE_RGB (1<<20)
-
-#define XY_SETUP_CLIP_BLT_CMD ((2<<29)|(3<<22)|1)
-
-#define XY_SRC_COPY_BLT_CMD ((2<<29)|(0x53<<22)|6)
-#define XY_SRC_COPY_BLT_WRITE_ALPHA (1<<21)
-#define XY_SRC_COPY_BLT_WRITE_RGB (1<<20)
-
-#define SRC_COPY_BLT_CMD ((2<<29)|(0x43<<22)|0x4)
-#define SRC_COPY_BLT_WRITE_ALPHA (1<<21)
-#define SRC_COPY_BLT_WRITE_RGB (1<<20)
-
-#define XY_MONO_PAT_BLT_CMD ((0x2<<29)|(0x52<<22)|0x7)
-#define XY_MONO_PAT_VERT_SEED ((1<<10)|(1<<9)|(1<<8))
-#define XY_MONO_PAT_HORT_SEED ((1<<14)|(1<<13)|(1<<12))
-#define XY_MONO_PAT_BLT_WRITE_ALPHA (1<<21)
-#define XY_MONO_PAT_BLT_WRITE_RGB (1<<20)
-
-#define XY_MONO_SRC_BLT_CMD ((0x2<<29)|(0x54<<22)|(0x6))
-#define XY_MONO_SRC_BLT_WRITE_ALPHA (1<<21)
-#define XY_MONO_SRC_BLT_WRITE_RGB (1<<20)
-
-/* 3d state */
-#define STATE3D_FOG_MODE ((3<<29)|(0x1d<<24)|(0x89<<16)|2)
-#define FOG_MODE_VERTEX (1<<31)
-#define STATE3D_MAP_COORD_TRANSFORM ((3<<29)|(0x1d<<24)|(0x8c<<16))
-#define DISABLE_TEX_TRANSFORM (1<<28)
-#define TEXTURE_SET(x) (x<<29)
-#define STATE3D_RASTERIZATION_RULES ((3<<29)|(0x07<<24))
-#define POINT_RASTER_ENABLE (1<<15)
-#define POINT_RASTER_OGL (1<<13)
-#define STATE3D_VERTEX_TRANSFORM ((3<<29)|(0x1d<<24)|(0x8b<<16))
-#define DISABLE_VIEWPORT_TRANSFORM (1<<31)
-#define DISABLE_PERSPECTIVE_DIVIDE (1<<29)
-
-#define MI_SET_CONTEXT (0x18<<23)
-#define CTXT_NO_RESTORE (1)
-#define CTXT_PALETTE_SAVE_DISABLE (1<<3)
-#define CTXT_PALETTE_RESTORE_DISABLE (1<<2)
-
-/* Dword 0 */
-#define MI_VERTEX_BUFFER (0x17<<23)
-#define MI_VERTEX_BUFFER_IDX(x) (x<<20)
-#define MI_VERTEX_BUFFER_PITCH(x) (x<<13)
-#define MI_VERTEX_BUFFER_WIDTH(x) (x<<6)
-/* Dword 1 */
-#define MI_VERTEX_BUFFER_DISABLE (1)
-
-/* Overlay Flip */
-#define MI_OVERLAY_FLIP (0x11<<23)
-#define MI_OVERLAY_FLIP_CONTINUE (0<<21)
-#define MI_OVERLAY_FLIP_ON (1<<21)
-#define MI_OVERLAY_FLIP_OFF (2<<21)
-
-/* Wait for Events */
-#define MI_WAIT_FOR_EVENT (0x03<<23)
-#define MI_WAIT_FOR_OVERLAY_FLIP (1<<16)
-
-/* Flush */
-#define MI_FLUSH (0x04<<23)
-#define MI_WRITE_DIRTY_STATE (1<<4)
-#define MI_END_SCENE (1<<3)
-#define MI_INHIBIT_RENDER_CACHE_FLUSH (1<<2)
-#define MI_INVALIDATE_MAP_CACHE (1<<0)
-
-/* Noop */
-#define MI_NOOP 0x00
-#define MI_NOOP_WRITE_ID (1<<22)
-#define MI_NOOP_ID_MASK (1<<22 - 1)
-
-#define STATE3D_COLOR_FACTOR ((0x3<<29)|(0x1d<<24)|(0x01<<16))
-
-/* STATE3D_FOG_MODE stuff */
-#define ENABLE_FOG_SOURCE (1<<27)
-#define ENABLE_FOG_CONST (1<<24)
-#define ENABLE_FOG_DENSITY (1<<23)
-
-
-#define MAX_DISPLAY_PIPES 2
-
-typedef enum {
- CrtIndex = 0,
- TvIndex,
- DfpIndex,
- LfpIndex,
- Tv2Index,
- Dfp2Index,
- UnknownIndex,
- Unknown2Index,
- NumDisplayTypes,
- NumKnownDisplayTypes = UnknownIndex
-} DisplayType;
-
-/* What's connected to the pipes (as reported by the BIOS) */
-#define PIPE_ACTIVE_MASK 0xff
-#define PIPE_CRT_ACTIVE (1 << CrtIndex)
-#define PIPE_TV_ACTIVE (1 << TvIndex)
-#define PIPE_DFP_ACTIVE (1 << DfpIndex)
-#define PIPE_LCD_ACTIVE (1 << LfpIndex)
-#define PIPE_TV2_ACTIVE (1 << Tv2Index)
-#define PIPE_DFP2_ACTIVE (1 << Dfp2Index)
-#define PIPE_UNKNOWN_ACTIVE ((1 << UnknownIndex) | \
- (1 << Unknown2Index))
-
-#define PIPE_SIZED_DISP_MASK (PIPE_DFP_ACTIVE | \
- PIPE_LCD_ACTIVE | \
- PIPE_DFP2_ACTIVE)
-
-#define PIPE_A_SHIFT 0
-#define PIPE_B_SHIFT 8
-#define PIPE_SHIFT(n) ((n) == 0 ? \
- PIPE_A_SHIFT : PIPE_B_SHIFT)
-
-/*
- * Some BIOS scratch area registers. The 845 (and 830?) store the amount
- * of video memory available to the BIOS in SWF1.
- */
-
-#define SWF0 0x71410
-#define SWF1 0x71414
-#define SWF2 0x71418
-#define SWF3 0x7141c
-#define SWF4 0x71420
-#define SWF5 0x71424
-#define SWF6 0x71428
-
-/*
- * 855 scratch registers.
- */
-#define SWF00 0x70410
-#define SWF01 0x70414
-#define SWF02 0x70418
-#define SWF03 0x7041c
-#define SWF04 0x70420
-#define SWF05 0x70424
-#define SWF06 0x70428
-
-#define SWF10 SWF0
-#define SWF11 SWF1
-#define SWF12 SWF2
-#define SWF13 SWF3
-#define SWF14 SWF4
-#define SWF15 SWF5
-#define SWF16 SWF6
-
-#define SWF30 0x72414
-#define SWF31 0x72418
-#define SWF32 0x7241c
-
-/*
- * Overlay registers. These are overlay registers accessed via MMIO.
- * Those loaded via the overlay register page are defined in i830_video.c.
- */
-#define OVADD 0x30000
-
-#define DOVSTA 0x30008
-#define OC_BUF (0x3<<20)
-
-#define OGAMC5 0x30010
-#define OGAMC4 0x30014
-#define OGAMC3 0x30018
-#define OGAMC2 0x3001c
-#define OGAMC1 0x30020
-#define OGAMC0 0x30024
-
-
-/*
- * Palette registers
- */
-#define PALETTE_A 0x0a000
-#define PALETTE_B 0x0a800
-
-#endif /* _I810_REG_H */
diff --git a/src/mesa/drivers/dri/mach64/Makefile b/src/mesa/drivers/dri/mach64/Makefile
deleted file mode 100644
index 0474c1a165f..00000000000
--- a/src/mesa/drivers/dri/mach64/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-# src/mesa/drivers/dri/mach64/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = mach64_dri.so
-
-include ../Makefile.defines
-
-DRIVER_SOURCES = \
- mach64_context.c \
- mach64_ioctl.c \
- mach64_screen.c \
- mach64_span.c \
- mach64_state.c \
- mach64_tex.c \
- mach64_texmem.c \
- mach64_texstate.c \
- mach64_tris.c \
- mach64_vb.c \
- mach64_dd.c \
- mach64_lock.c
-
-C_SOURCES = \
- $(COMMON_SOURCES) \
- $(DRIVER_SOURCES)
-
-ASM_SOURCES =
-
-include ../Makefile.targets
-
diff --git a/src/mesa/drivers/dri/mach64/mach64_context.c b/src/mesa/drivers/dri/mach64/mach64_context.c
deleted file mode 100644
index 35b01a97402..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_context.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * Jos�Fonseca
- */
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "vbo/vbo.h"
-
-#include "tnl/tnl.h"
-#include "tnl/t_pipeline.h"
-
-#include "drivers/common/driverfuncs.h"
-
-#include "mach64_context.h"
-#include "mach64_ioctl.h"
-#include "mach64_dd.h"
-#include "mach64_span.h"
-#include "mach64_state.h"
-#include "mach64_tex.h"
-#include "mach64_tris.h"
-#include "mach64_vb.h"
-
-#include "utils.h"
-#include "vblank.h"
-
-#ifndef MACH64_DEBUG
-int MACH64_DEBUG = (0);
-#endif
-
-static const struct dri_debug_control debug_control[] =
-{
- { "sync", DEBUG_ALWAYS_SYNC },
- { "api", DEBUG_VERBOSE_API },
- { "msg", DEBUG_VERBOSE_MSG },
- { "lru", DEBUG_VERBOSE_LRU },
- { "dri", DEBUG_VERBOSE_DRI },
- { "ioctl", DEBUG_VERBOSE_IOCTL },
- { "prims", DEBUG_VERBOSE_PRIMS },
- { "count", DEBUG_VERBOSE_COUNT },
- { "nowait", DEBUG_NOWAIT },
- { "fall", DEBUG_VERBOSE_FALLBACK },
- { NULL, 0 }
-};
-
-static const struct dri_extension card_extensions[] =
-{
- { "GL_ARB_multitexture", NULL },
- { "GL_EXT_texture_edge_clamp", NULL },
- { "GL_MESA_ycbcr_texture", NULL },
- { NULL, NULL }
-};
-
-
-/* Create the device specific context.
- */
-GLboolean mach64CreateContext( gl_api api,
- const struct gl_config *glVisual,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate )
-{
- struct gl_context *ctx, *shareCtx;
- __DRIscreen *driScreen = driContextPriv->driScreenPriv;
- struct dd_function_table functions;
- mach64ContextPtr mmesa;
- mach64ScreenPtr mach64Screen;
- int i, heap;
- GLuint *c_textureSwapsPtr = NULL;
-
-#if DO_DEBUG
- MACH64_DEBUG = driParseDebugString(getenv("MACH64_DEBUG"), debug_control);
-#endif
-
- /* Allocate the mach64 context */
- mmesa = (mach64ContextPtr) CALLOC( sizeof(*mmesa) );
- if ( !mmesa )
- return GL_FALSE;
-
- /* Init default driver functions then plug in our Mach64-specific functions
- * (the texture functions are especially important)
- */
- _mesa_init_driver_functions( &functions );
- mach64InitDriverFuncs( &functions );
- mach64InitIoctlFuncs( &functions );
- mach64InitTextureFuncs( &functions );
-
- /* Allocate the Mesa context */
- if (sharedContextPrivate)
- shareCtx = ((mach64ContextPtr) sharedContextPrivate)->glCtx;
- else
- shareCtx = NULL;
- mmesa->glCtx = _mesa_create_context(API_OPENGL, glVisual, shareCtx,
- &functions, (void *)mmesa);
- if (!mmesa->glCtx) {
- FREE(mmesa);
- return GL_FALSE;
- }
- driContextPriv->driverPrivate = mmesa;
- ctx = mmesa->glCtx;
-
- mmesa->driContext = driContextPriv;
- mmesa->driScreen = driScreen;
- mmesa->driDrawable = NULL;
- mmesa->hHWContext = driContextPriv->hHWContext;
- mmesa->driHwLock = &driScreen->pSAREA->lock;
- mmesa->driFd = driScreen->fd;
-
- mach64Screen = mmesa->mach64Screen = (mach64ScreenPtr)driScreen->private;
-
- /* Parse configuration files */
- driParseConfigFiles (&mmesa->optionCache, &mach64Screen->optionCache,
- mach64Screen->driScreen->myNum, "mach64");
-
- mmesa->sarea = (drm_mach64_sarea_t *)((char *)driScreen->pSAREA +
- sizeof(drm_sarea_t));
-
- mmesa->CurrentTexObj[0] = NULL;
- mmesa->CurrentTexObj[1] = NULL;
-
- (void) memset( mmesa->texture_heaps, 0, sizeof( mmesa->texture_heaps ) );
- make_empty_list( &mmesa->swapped );
-
- mmesa->firstTexHeap = mach64Screen->firstTexHeap;
- mmesa->lastTexHeap = mach64Screen->firstTexHeap + mach64Screen->numTexHeaps;
-
- for ( i = mmesa->firstTexHeap ; i < mmesa->lastTexHeap ; i++ ) {
- mmesa->texture_heaps[i] = driCreateTextureHeap( i, mmesa,
- mach64Screen->texSize[i],
- 6, /* align to 64-byte boundary, use 12 for page-size boundary */
- MACH64_NR_TEX_REGIONS,
- (drmTextureRegionPtr)mmesa->sarea->tex_list[i],
- &mmesa->sarea->tex_age[i],
- &mmesa->swapped,
- sizeof( mach64TexObj ),
- (destroy_texture_object_t *) mach64DestroyTexObj );
-
-#if ENABLE_PERF_BOXES
- c_textureSwapsPtr = & mmesa->c_textureSwaps;
-#endif
- driSetTextureSwapCounterLocation( mmesa->texture_heaps[i],
- c_textureSwapsPtr );
- }
-
- mmesa->RenderIndex = -1; /* Impossible value */
- mmesa->vert_buf = NULL;
- mmesa->num_verts = 0;
- mmesa->new_state = MACH64_NEW_ALL;
- mmesa->dirty = MACH64_UPLOAD_ALL;
-
- /* Set the maximum texture size small enough that we can
- * guarentee that both texture units can bind a maximal texture
- * and have them both in memory (on-card or AGP) at once.
- * Test for 2 textures * bytes/texel * size * size. There's no
- * need to account for mipmaps since we only upload one level.
- */
-
- ctx->Const.MaxTextureUnits = 2;
- ctx->Const.MaxTextureImageUnits = 2;
- ctx->Const.MaxTextureCoordUnits = 2;
- ctx->Const.MaxDrawBuffers = 1;
-
- heap = mach64Screen->IsPCI ? MACH64_CARD_HEAP : MACH64_AGP_HEAP;
-
- driCalculateMaxTextureLevels( & mmesa->texture_heaps[heap],
- 1,
- & ctx->Const,
- mach64Screen->cpp,
- 10, /* max 2D texture size is 1024x1024 */
- 0, /* 3D textures unsupported. */
- 0, /* cube textures unsupported. */
- 0, /* texture rectangles unsupported. */
- 1, /* mipmapping unsupported. */
- GL_TRUE, /* need to have both textures in
- either local or AGP memory */
- 0 );
-
-#if ENABLE_PERF_BOXES
- mmesa->boxes = ( getenv( "LIBGL_PERFORMANCE_BOXES" ) != NULL );
-#endif
-
- /* Allocate the vertex buffer
- */
- mmesa->vert_buf = _mesa_align_malloc(MACH64_BUFFER_SIZE, 32);
- if ( !mmesa->vert_buf )
- return GL_FALSE;
- mmesa->vert_used = 0;
- mmesa->vert_total = MACH64_BUFFER_SIZE;
-
- /* Initialize the software rasterizer and helper modules.
- */
- _swrast_CreateContext( ctx );
- _vbo_CreateContext( ctx );
- _tnl_CreateContext( ctx );
- _swsetup_CreateContext( ctx );
-
- /* Install the customized pipeline:
- */
-/* _tnl_destroy_pipeline( ctx ); */
-/* _tnl_install_pipeline( ctx, mach64_pipeline ); */
-
- /* Configure swrast and T&L to match hardware characteristics:
- */
- _swrast_allow_pixel_fog( ctx, GL_FALSE );
- _swrast_allow_vertex_fog( ctx, GL_TRUE );
- _tnl_allow_pixel_fog( ctx, GL_FALSE );
- _tnl_allow_vertex_fog( ctx, GL_TRUE );
-
- driInitExtensions( ctx, card_extensions, GL_TRUE );
-
- mach64InitVB( ctx );
- mach64InitTriFuncs( ctx );
- mach64DDInitStateFuncs( ctx );
- mach64DDInitSpanFuncs( ctx );
- mach64DDInitState( mmesa );
-
- mmesa->do_irqs = (mmesa->mach64Screen->irq && !getenv("MACH64_NO_IRQS"));
-
- driContextPriv->driverPrivate = (void *)mmesa;
-
- if (driQueryOptionb(&mmesa->optionCache, "no_rast")) {
- fprintf(stderr, "disabling 3D acceleration\n");
- FALLBACK(mmesa, MACH64_FALLBACK_DISABLE, 1);
- }
-
- return GL_TRUE;
-}
-
-/* Destroy the device specific context.
- */
-void mach64DestroyContext( __DRIcontext *driContextPriv )
-{
- mach64ContextPtr mmesa = (mach64ContextPtr) driContextPriv->driverPrivate;
-
- assert(mmesa); /* should never be null */
- if ( mmesa ) {
- GLboolean release_texture_heaps;
-
- release_texture_heaps = (mmesa->glCtx->Shared->RefCount == 1);
-
- _swsetup_DestroyContext( mmesa->glCtx );
- _tnl_DestroyContext( mmesa->glCtx );
- _vbo_DestroyContext( mmesa->glCtx );
- _swrast_DestroyContext( mmesa->glCtx );
-
- if (release_texture_heaps) {
- /* This share group is about to go away, free our private
- * texture object data.
- */
- int i;
-
- for ( i = mmesa->firstTexHeap ; i < mmesa->lastTexHeap ; i++ ) {
- driDestroyTextureHeap( mmesa->texture_heaps[i] );
- mmesa->texture_heaps[i] = NULL;
- }
-
- assert( is_empty_list( & mmesa->swapped ) );
- }
-
- mach64FreeVB( mmesa->glCtx );
-
- /* Free the vertex buffer */
- if ( mmesa->vert_buf )
- _mesa_align_free( mmesa->vert_buf );
-
- /* free the Mesa context */
- mmesa->glCtx->DriverCtx = NULL;
- _mesa_destroy_context(mmesa->glCtx);
-
- FREE( mmesa );
- }
-}
-
-/* Force the context `c' to be the current context and associate with it
- * buffer `b'.
- */
-GLboolean
-mach64MakeCurrent( __DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv )
-{
- if ( driContextPriv ) {
- GET_CURRENT_CONTEXT(ctx);
- mach64ContextPtr oldMach64Ctx = ctx ? MACH64_CONTEXT(ctx) : NULL;
- mach64ContextPtr newMach64Ctx = (mach64ContextPtr) driContextPriv->driverPrivate;
-
- if ( newMach64Ctx != oldMach64Ctx ) {
- newMach64Ctx->new_state |= MACH64_NEW_CONTEXT;
- newMach64Ctx->dirty = MACH64_UPLOAD_ALL;
- }
-
-
- if ( newMach64Ctx->driDrawable != driDrawPriv ) {
- if (driDrawPriv->swap_interval == (unsigned)-1) {
- driDrawPriv->vblFlags = (newMach64Ctx->do_irqs)
- ? driGetDefaultVBlankFlags(&newMach64Ctx->optionCache)
- : VBLANK_FLAG_NO_IRQ;
-
- driDrawableInitVBlank( driDrawPriv );
- }
-
- newMach64Ctx->driDrawable = driDrawPriv;
- mach64CalcViewport( newMach64Ctx->glCtx );
- }
-
- _mesa_make_current( newMach64Ctx->glCtx,
- (struct gl_framebuffer *) driDrawPriv->driverPrivate,
- (struct gl_framebuffer *) driReadPriv->driverPrivate );
-
-
- newMach64Ctx->new_state |= MACH64_NEW_CLIP;
- } else {
- _mesa_make_current( NULL, NULL, NULL );
- }
-
- return GL_TRUE;
-}
-
-
-/* Force the context `c' to be unbound from its buffer.
- */
-GLboolean
-mach64UnbindContext( __DRIcontext *driContextPriv )
-{
- return GL_TRUE;
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_context.h b/src/mesa/drivers/dri/mach64/mach64_context.h
deleted file mode 100644
index 70bc0ae79de..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_context.h
+++ /dev/null
@@ -1,369 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * Jos�Fonseca
- */
-
-#ifndef __MACH64_CONTEXT_H__
-#define __MACH64_CONTEXT_H__
-
-#include "dri_util.h"
-#include "drm.h"
-#include "mach64_drm.h"
-
-#include "main/mtypes.h"
-
-#include "mach64_reg.h"
-
-#include "texmem.h"
-
-struct mach64_context;
-typedef struct mach64_context mach64ContextRec;
-typedef struct mach64_context *mach64ContextPtr;
-
-#include "mach64_lock.h"
-#include "mach64_screen.h"
-
-/* Experimental driver options */
-#define MACH64_CLIENT_STATE_EMITS 0
-
-/* Performace monitoring */
-#define ENABLE_PERF_BOXES 1
-
-/* Native vertex format */
-#define MACH64_NATIVE_VTXFMT 1
-
-/* Flags for what context state needs to be updated:
- */
-#define MACH64_NEW_ALPHA 0x0001
-#define MACH64_NEW_DEPTH 0x0002
-#define MACH64_NEW_FOG 0x0004
-#define MACH64_NEW_CLIP 0x0008
-#define MACH64_NEW_CULL 0x0010
-#define MACH64_NEW_MASKS 0x0020
-#define MACH64_NEW_RENDER_UNUSED 0x0040
-#define MACH64_NEW_WINDOW 0x0080
-#define MACH64_NEW_TEXTURE 0x0100
-#define MACH64_NEW_CONTEXT 0x0200
-#define MACH64_NEW_ALL 0x03ff
-
-/* Flags for software fallback cases:
- */
-#define MACH64_FALLBACK_TEXTURE 0x0001
-#define MACH64_FALLBACK_DRAW_BUFFER 0x0002
-#define MACH64_FALLBACK_READ_BUFFER 0x0004
-#define MACH64_FALLBACK_STENCIL 0x0008
-#define MACH64_FALLBACK_RENDER_MODE 0x0010
-#define MACH64_FALLBACK_LOGICOP 0x0020
-#define MACH64_FALLBACK_SEP_SPECULAR 0x0040
-#define MACH64_FALLBACK_BLEND_EQ 0x0080
-#define MACH64_FALLBACK_BLEND_FUNC 0x0100
-#define MACH64_FALLBACK_DISABLE 0x0200
-
-#define CARD32 GLuint /* KW: For building in mesa tree */
-
-#if MACH64_NATIVE_VTXFMT
-
-/* The vertex structures.
- */
-
-/* The size of this union is not of relevence:
- */
-union mach64_vertex_t {
- GLfloat f[16];
- GLuint ui[16];
- GLushort us2[16][2];
- GLubyte ub4[16][4];
-};
-
-typedef union mach64_vertex_t mach64Vertex, *mach64VertexPtr;
-
-#else
-
-/* Use the templated vertex format:
- */
-#define TAG(x) mach64##x
-#include "tnl_dd/t_dd_vertex.h"
-#undef TAG
-
-#endif /* MACH64_NATIVE_VTXFMT */
-
-/* Subpixel offsets for window coordinates:
- * These are enough to fix most glean tests except polygonOffset.
- * There are also still some gaps that show in e.g. the tunnel Mesa demo
- * or the lament xscreensaver hack.
- */
-#define SUBPIXEL_X (0.0125F)
-#define SUBPIXEL_Y (0.15F)
-
-
-typedef void (*mach64_tri_func)( mach64ContextPtr,
- mach64Vertex *,
- mach64Vertex *,
- mach64Vertex * );
-
-typedef void (*mach64_line_func)( mach64ContextPtr,
- mach64Vertex *,
- mach64Vertex * );
-
-typedef void (*mach64_point_func)( mach64ContextPtr,
- mach64Vertex * );
-
-struct mach64_texture_object {
- driTextureObject base;
-
- GLuint bufAddr;
-
- GLint heap; /* same as base.heap->heapId */
-
- /* For communicating values from mach64AllocTexObj(), mach64SetTexImages()
- * to mach64UpdateTextureUnit(). Alternately, we can use the tObj values or
- * set the context registers directly.
- */
- GLint widthLog2;
- GLint heightLog2;
- GLint maxLog2;
-
- GLint hasAlpha;
- GLint textureFormat;
-
- GLboolean BilinearMin;
- GLboolean BilinearMag;
- GLboolean ClampS;
- GLboolean ClampT;
-};
-
-typedef struct mach64_texture_object mach64TexObj, *mach64TexObjPtr;
-
-struct mach64_context {
- struct gl_context *glCtx;
-
- /* Driver and hardware state management
- */
- GLuint new_state;
- GLuint dirty; /* Hardware state to be updated */
- drm_mach64_context_regs_t setup;
-
- GLuint NewGLState;
- GLuint Fallback;
- GLuint SetupIndex;
- GLuint SetupNewInputs;
- GLuint RenderIndex;
- GLfloat hw_viewport[16];
- GLfloat depth_scale;
- GLuint vertex_size;
- GLuint vertex_stride_shift;
- GLuint vertex_format;
- GLuint num_verts;
- GLubyte *verts;
-
- CARD32 Color; /* Current draw color */
- CARD32 ClearColor; /* Color used to clear color buffer */
- CARD32 ClearDepth; /* Value used to clear depth buffer */
-
- /* Map GL texture units onto hardware
- */
- GLint multitex;
- GLint tmu_source[2];
- GLint tex_dest[2];
-
- /* Texture object bookkeeping
- */
- mach64TexObjPtr CurrentTexObj[2];
-
- GLint firstTexHeap, lastTexHeap;
- driTexHeap *texture_heaps[MACH64_NR_TEX_HEAPS];
- driTextureObject swapped;
-
- /* Fallback rasterization functions
- */
- mach64_point_func draw_point;
- mach64_line_func draw_line;
- mach64_tri_func draw_tri;
-
- /* Culling */
- GLfloat backface_sign;
-
- /* DMA buffers
- */
- void *vert_buf;
- size_t vert_total;
- unsigned vert_used;
-
- GLuint hw_primitive;
- GLenum render_primitive;
-
- /* Visual, drawable, cliprect and scissor information
- */
- GLint drawOffset, drawPitch;
- GLint drawX, drawY; /* origin of drawable in draw buffer */
- GLint readOffset, readPitch;
-
- GLuint numClipRects; /* Cliprects for the draw buffer */
- drm_clip_rect_t *pClipRects;
-
- GLint scissor;
- drm_clip_rect_t ScissorRect; /* Current software scissor */
-
- /* Mirrors of some DRI state
- */
- __DRIcontext *driContext; /* DRI context */
- __DRIscreen *driScreen; /* DRI screen */
- __DRIdrawable *driDrawable; /* DRI drawable bound to this ctx */
-
- unsigned int lastStamp; /* mirror driDrawable->lastStamp */
-
- drm_context_t hHWContext;
- drm_hw_lock_t *driHwLock;
- int driFd;
-
- mach64ScreenPtr mach64Screen; /* Screen private DRI data */
- drm_mach64_sarea_t *sarea; /* Private SAREA data */
-
- GLuint hardwareWentIdle;
-
-#if ENABLE_PERF_BOXES
- /* Performance counters
- */
- GLuint boxes; /* Draw performance boxes */
- GLuint c_clears;
- GLuint c_drawWaits;
- GLuint c_textureSwaps;
- GLuint c_textureBytes;
- GLuint c_agpTextureBytes;
- GLuint c_texsrc_agp;
- GLuint c_texsrc_card;
- GLuint c_vertexBuffers;
-#endif
-
- /* VBI
- */
- GLuint do_irqs;
-
- /* Configuration cache
- */
- driOptionCache optionCache;
-};
-
-#define MACH64_CONTEXT(ctx) ((mach64ContextPtr)(ctx->DriverCtx))
-
-
-extern GLboolean mach64CreateContext( gl_api api,
- const struct gl_config *glVisual,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate );
-
-extern void mach64DestroyContext( __DRIcontext * );
-
-extern GLboolean mach64MakeCurrent( __DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv );
-
-extern GLboolean mach64UnbindContext( __DRIcontext *driContextPriv );
-
-/* ================================================================
- * Byte ordering
- */
-#if MESA_LITTLE_ENDIAN == 1
-#define LE32_IN( x ) ( *(GLuint *)(x) )
-#define LE32_IN_FLOAT( x ) ( *(GLfloat *)(x) )
-#define LE32_OUT( x, y ) do { *(GLuint *)(x) = (y); } while (0)
-#define LE32_OUT_FLOAT( x, y ) do { *(GLfloat *)(x) = (y); } while (0)
-#else
-#if defined(__OpenBSD__) || defined(__NetBSD__)
-#include
-#define bswap_32 bswap32
-#else
-#include
-#endif
-
-#define LE32_IN( x ) bswap_32( *(GLuint *)(x) )
-#define LE32_IN_FLOAT( x ) \
-({ \
- GLuint __tmp = bswap_32( *(GLuint *)(x) ); \
- *(GLfloat *)&__tmp; \
-})
-#define LE32_OUT( x, y ) do { *(GLuint *)(x) = bswap_32( y ); } while (0)
-#define LE32_OUT_FLOAT( x, y ) \
-do { \
- GLuint __tmp; \
- *(GLfloat *)&__tmp = (y); \
- *(GLuint *)(x) = bswap_32( __tmp ); \
-} while (0)
-#endif
-
-/* ================================================================
- * DMA buffers
- */
-
-#define DMALOCALS CARD32 *buf=NULL; int requested=0; int outcount=0
-
-/* called while locked for interleaved client-side state emits */
-#define DMAGETPTR( dwords ) \
-do { \
- requested = (dwords); \
- buf = (CARD32 *)mach64AllocDmaLocked( mmesa, ((dwords)*4) ); \
- outcount = 0; \
-} while(0)
-
-#define DMAOUTREG( reg, val ) \
-do { \
- LE32_OUT( &buf[outcount++], ADRINDEX( reg ) ); \
- LE32_OUT( &buf[outcount++], ( val ) ); \
-} while(0)
-
-#define DMAADVANCE() \
-do { \
- if (outcount < requested) { \
- mmesa->vert_used -= (requested - outcount) * 4; \
- } \
-} while(0)
-
-/* ================================================================
- * Debugging:
- */
-
-#define DO_DEBUG 1
-
-#if DO_DEBUG
-extern int MACH64_DEBUG;
-#else
-#define MACH64_DEBUG 0
-#endif
-
-#define DEBUG_ALWAYS_SYNC 0x001
-#define DEBUG_VERBOSE_API 0x002
-#define DEBUG_VERBOSE_MSG 0x004
-#define DEBUG_VERBOSE_LRU 0x008
-#define DEBUG_VERBOSE_DRI 0x010
-#define DEBUG_VERBOSE_IOCTL 0x020
-#define DEBUG_VERBOSE_PRIMS 0x040
-#define DEBUG_VERBOSE_COUNT 0x080
-#define DEBUG_NOWAIT 0x100
-#define DEBUG_VERBOSE_FALLBACK 0x200
-#endif /* __MACH64_CONTEXT_H__ */
diff --git a/src/mesa/drivers/dri/mach64/mach64_dd.c b/src/mesa/drivers/dri/mach64/mach64_dd.c
deleted file mode 100644
index 2b557a70202..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_dd.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#include "mach64_context.h"
-#include "mach64_ioctl.h"
-#include "mach64_dd.h"
-
-#include "main/context.h"
-
-#include "utils.h"
-
-/* Return the current color buffer size.
- */
-static void mach64DDGetBufferSize( struct gl_framebuffer *buffer,
- GLuint *width, GLuint *height )
-{
- GET_CURRENT_CONTEXT(ctx);
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- LOCK_HARDWARE( mmesa );
- *width = mmesa->driDrawable->w;
- *height = mmesa->driDrawable->h;
- UNLOCK_HARDWARE( mmesa );
-}
-
-/* Return various strings for glGetString().
- */
-static const GLubyte *mach64DDGetString( struct gl_context *ctx, GLenum name )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- static char buffer[128];
- unsigned offset;
- const char * card_name = "Mach64 [Rage Pro]";
- GLuint agp_mode = mmesa->mach64Screen->IsPCI ? 0 :
- mmesa->mach64Screen->AGPMode;
-
- switch ( name ) {
- case GL_VENDOR:
- return (GLubyte*)"Gareth Hughes, Leif Delgass, José Fonseca";
-
- case GL_RENDERER:
-
- offset = driGetRendererString( buffer, card_name, agp_mode );
- return (GLubyte *)buffer;
-
- default:
- return NULL;
- }
-}
-
-/* Send all commands to the hardware. If vertex buffers or indirect
- * buffers are in use, then we need to make sure they are sent to the
- * hardware. All commands that are normally sent to the ring are
- * already considered `flushed'.
- */
-static void mach64DDFlush( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- LOCK_HARDWARE( mmesa );
- FLUSH_DMA_LOCKED( mmesa );
- UNLOCK_HARDWARE( mmesa );
-
-#if ENABLE_PERF_BOXES
- if ( mmesa->boxes ) {
- LOCK_HARDWARE( mmesa );
- mach64PerformanceBoxesLocked( mmesa );
- UNLOCK_HARDWARE( mmesa );
- }
-
- /* Log the performance counters if necessary */
- mach64PerformanceCounters( mmesa );
-#endif
-}
-
-/* Make sure all commands have been sent to the hardware and have
- * completed processing.
- */
-static void mach64DDFinish( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
-#if ENABLE_PERF_BOXES
- /* Bump the performance counter */
- mmesa->c_drawWaits++;
-#endif
-
- mach64DDFlush( ctx );
- mach64WaitForIdle( mmesa );
-}
-
-/* Initialize the driver's misc functions.
- */
-void mach64InitDriverFuncs( struct dd_function_table *functions )
-{
- functions->GetBufferSize = mach64DDGetBufferSize;
- functions->GetString = mach64DDGetString;
- functions->Finish = mach64DDFinish;
- functions->Flush = mach64DDFlush;
-
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_dd.h b/src/mesa/drivers/dri/mach64/mach64_dd.h
deleted file mode 100644
index 0a2ce064120..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_dd.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- *
- */
-
-#ifndef __MACH64_DD_H__
-#define __MACH64_DD_H__
-
-extern void mach64InitDriverFuncs( struct dd_function_table *functions );
-
-#endif
diff --git a/src/mesa/drivers/dri/mach64/mach64_ioctl.c b/src/mesa/drivers/dri/mach64/mach64_ioctl.c
deleted file mode 100644
index 0146e0d0515..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_ioctl.c
+++ /dev/null
@@ -1,932 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * Jos�Fonseca
- */
-#include
-
-#include "mach64_context.h"
-#include "mach64_state.h"
-#include "mach64_ioctl.h"
-#include "mach64_tex.h"
-
-#include "main/imports.h"
-#include "main/macros.h"
-
-#include "swrast/swrast.h"
-
-#include "vblank.h"
-
-#define MACH64_TIMEOUT 10 /* the DRM already has a timeout, so keep this small */
-
-
-/* =============================================================
- * Hardware vertex buffer handling
- */
-
-/* Get a new VB from the pool of vertex buffers in AGP space.
- */
-drmBufPtr mach64GetBufferLocked( mach64ContextPtr mmesa )
-{
- int fd = mmesa->mach64Screen->driScreen->fd;
- int index = 0;
- int size = 0;
- drmDMAReq dma;
- drmBufPtr buf = NULL;
- int to = 0;
- int ret;
-
- dma.context = mmesa->hHWContext;
- dma.send_count = 0;
- dma.send_list = NULL;
- dma.send_sizes = NULL;
- dma.flags = 0;
- dma.request_count = 1;
- dma.request_size = MACH64_BUFFER_SIZE;
- dma.request_list = &index;
- dma.request_sizes = &size;
- dma.granted_count = 0;
-
- while ( !buf && ( to++ < MACH64_TIMEOUT ) ) {
- ret = drmDMA( fd, &dma );
-
- if ( ret == 0 ) {
- buf = &mmesa->mach64Screen->buffers->list[index];
- buf->used = 0;
-#if ENABLE_PERF_BOXES
- /* Bump the performance counter */
- mmesa->c_vertexBuffers++;
-#endif
- return buf;
- }
- }
-
- if ( !buf ) {
- drmCommandNone( fd, DRM_MACH64_RESET );
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "Error: Could not get new VB... exiting\n" );
- exit( -1 );
- }
-
- return buf;
-}
-
-void mach64FlushVerticesLocked( mach64ContextPtr mmesa )
-{
- drm_clip_rect_t *pbox = mmesa->pClipRects;
- int nbox = mmesa->numClipRects;
- void *buffer = mmesa->vert_buf;
- int count = mmesa->vert_used;
- int prim = mmesa->hw_primitive;
- int fd = mmesa->driScreen->fd;
- drm_mach64_vertex_t vertex;
- int i;
-
- mmesa->num_verts = 0;
- mmesa->vert_used = 0;
-
- if ( !count )
- return;
-
- if ( mmesa->dirty & ~MACH64_UPLOAD_CLIPRECTS )
- mach64EmitHwStateLocked( mmesa );
-
- if ( !nbox )
- count = 0;
-
- if ( nbox > MACH64_NR_SAREA_CLIPRECTS )
- mmesa->dirty |= MACH64_UPLOAD_CLIPRECTS;
-
- if ( !count || !(mmesa->dirty & MACH64_UPLOAD_CLIPRECTS) ) {
- int to = 0;
- int ret;
-
- /* FIXME: Is this really necessary */
- if ( nbox == 1 )
- mmesa->sarea->nbox = 0;
- else
- mmesa->sarea->nbox = nbox;
-
- vertex.prim = prim;
- vertex.buf = buffer;
- vertex.used = count;
- vertex.discard = 1;
- do {
- ret = drmCommandWrite( fd, DRM_MACH64_VERTEX,
- &vertex, sizeof(drm_mach64_vertex_t) );
- } while ( ( ret == -EAGAIN ) && ( to++ < MACH64_TIMEOUT ) );
- if ( ret ) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "Error flushing vertex buffer: return = %d\n", ret );
- exit( -1 );
- }
-
- } else {
-
- for ( i = 0 ; i < nbox ; ) {
- int nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS, nbox );
- drm_clip_rect_t *b = mmesa->sarea->boxes;
- int discard = 0;
- int to = 0;
- int ret;
-
- mmesa->sarea->nbox = nr - i;
- for ( ; i < nr ; i++ ) {
- *b++ = pbox[i];
- }
-
- /* Finished with the buffer?
- */
- if ( nr == nbox ) {
- discard = 1;
- }
-
- mmesa->sarea->dirty |= MACH64_UPLOAD_CLIPRECTS;
-
- vertex.prim = prim;
- vertex.buf = buffer;
- vertex.used = count;
- vertex.discard = discard;
- do {
- ret = drmCommandWrite( fd, DRM_MACH64_VERTEX,
- &vertex, sizeof(drm_mach64_vertex_t) );
- } while ( ( ret == -EAGAIN ) && ( to++ < MACH64_TIMEOUT ) );
- if ( ret ) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "Error flushing vertex buffer: return = %d\n", ret );
- exit( -1 );
- }
- }
- }
-
- mmesa->dirty &= ~MACH64_UPLOAD_CLIPRECTS;
-}
-
-/* ================================================================
- * Texture uploads
- */
-
-void mach64FireBlitLocked( mach64ContextPtr mmesa, void *buffer,
- GLint offset, GLint pitch, GLint format,
- GLint x, GLint y, GLint width, GLint height )
-{
- drm_mach64_blit_t blit;
- int to = 0;
- int ret;
-
- blit.buf = buffer;
- blit.offset = offset;
- blit.pitch = pitch;
- blit.format = format;
- blit.x = x;
- blit.y = y;
- blit.width = width;
- blit.height = height;
-
- do {
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_BLIT,
- &blit, sizeof(drm_mach64_blit_t) );
- } while ( ( ret == -EAGAIN ) && ( to++ < MACH64_TIMEOUT ) );
-
- if ( ret ) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_BLIT: return = %d\n", ret );
- exit( -1 );
- }
-}
-
-
-/* ================================================================
- * SwapBuffers with client-side throttling
- */
-static void delay( void ) {
-/* Prevent an optimizing compiler from removing a spin loop */
-}
-
-/* Throttle the frame rate -- only allow MACH64_MAX_QUEUED_FRAMES
- * pending swap buffers requests at a time.
- *
- * GH: We probably don't want a timeout here, as we can wait as
- * long as we want for a frame to complete. If it never does, then
- * the card has locked.
- */
-static int mach64WaitForFrameCompletion( mach64ContextPtr mmesa )
-{
- int fd = mmesa->driFd;
- int i;
- int wait = 0;
- int frames;
-
- while ( 1 ) {
- drm_mach64_getparam_t gp;
- int ret;
-
- if ( mmesa->sarea->frames_queued < MACH64_MAX_QUEUED_FRAMES ) {
- break;
- }
-
- if (MACH64_DEBUG & DEBUG_NOWAIT) {
- return 1;
- }
-
- gp.param = MACH64_PARAM_FRAMES_QUEUED;
- gp.value = &frames; /* also copied into sarea->frames_queued by DRM */
-
- ret = drmCommandWriteRead( fd, DRM_MACH64_GETPARAM, &gp, sizeof(gp) );
-
- if ( ret ) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_GETPARAM: return = %d\n", ret );
- exit( -1 );
- }
-
- /* Spin in place a bit so we aren't hammering the register */
- wait++;
-
- for ( i = 0 ; i < 1024 ; i++ ) {
- delay();
- }
-
- }
-
- return wait;
-}
-
-/* Copy the back color buffer to the front color buffer.
- */
-void mach64CopyBuffer( __DRIdrawable *dPriv )
-{
- mach64ContextPtr mmesa;
- GLint nbox, i, ret;
- drm_clip_rect_t *pbox;
- GLboolean missed_target;
-
- assert(dPriv);
- assert(dPriv->driContextPriv);
- assert(dPriv->driContextPriv->driverPrivate);
-
- mmesa = (mach64ContextPtr) dPriv->driContextPriv->driverPrivate;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "\n********************************\n" );
- fprintf( stderr, "\n%s( %p )\n\n",
- __FUNCTION__, mmesa->glCtx );
- fflush( stderr );
- }
-
- /* Flush any outstanding vertex buffers */
- FLUSH_BATCH( mmesa );
-
- LOCK_HARDWARE( mmesa );
-
- /* Throttle the frame rate -- only allow one pending swap buffers
- * request at a time.
- */
- if ( !mach64WaitForFrameCompletion( mmesa ) ) {
- mmesa->hardwareWentIdle = 1;
- } else {
- mmesa->hardwareWentIdle = 0;
- }
-
-#if ENABLE_PERF_BOXES
- if ( mmesa->boxes ) {
- mach64PerformanceBoxesLocked( mmesa );
- }
-#endif
-
- UNLOCK_HARDWARE( mmesa );
- driWaitForVBlank( dPriv, &missed_target );
- LOCK_HARDWARE( mmesa );
-
- /* use front buffer cliprects */
- nbox = dPriv->numClipRects;
- pbox = dPriv->pClipRects;
-
- for ( i = 0 ; i < nbox ; ) {
- GLint nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS , nbox );
- drm_clip_rect_t *b = mmesa->sarea->boxes;
- GLint n = 0;
-
- for ( ; i < nr ; i++ ) {
- *b++ = pbox[i];
- n++;
- }
- mmesa->sarea->nbox = n;
-
- ret = drmCommandNone( mmesa->driFd, DRM_MACH64_SWAP );
-
- if ( ret ) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_SWAP: return = %d\n", ret );
- exit( -1 );
- }
- }
-
- if ( MACH64_DEBUG & DEBUG_ALWAYS_SYNC ) {
- mach64WaitForIdleLocked( mmesa );
- }
-
- UNLOCK_HARDWARE( mmesa );
-
- mmesa->dirty |= (MACH64_UPLOAD_CONTEXT |
- MACH64_UPLOAD_MISC |
- MACH64_UPLOAD_CLIPRECTS);
-
-#if ENABLE_PERF_BOXES
- /* Log the performance counters if necessary */
- mach64PerformanceCounters( mmesa );
-#endif
-}
-
-#if ENABLE_PERF_BOXES
-/* ================================================================
- * Performance monitoring
- */
-
-void mach64PerformanceCounters( mach64ContextPtr mmesa )
-{
-
- if (MACH64_DEBUG & DEBUG_VERBOSE_COUNT) {
- /* report performance counters */
- fprintf( stderr, "mach64CopyBuffer: vertexBuffers:%i drawWaits:%i clears:%i\n",
- mmesa->c_vertexBuffers, mmesa->c_drawWaits, mmesa->c_clears );
- }
-
- mmesa->c_vertexBuffers = 0;
- mmesa->c_drawWaits = 0;
- mmesa->c_clears = 0;
-
- if ( mmesa->c_textureSwaps || mmesa->c_textureBytes || mmesa->c_agpTextureBytes ) {
- if (MACH64_DEBUG & DEBUG_VERBOSE_COUNT) {
- fprintf( stderr, " textureSwaps:%i textureBytes:%i agpTextureBytes:%i\n",
- mmesa->c_textureSwaps, mmesa->c_textureBytes, mmesa->c_agpTextureBytes );
- }
- mmesa->c_textureSwaps = 0;
- mmesa->c_textureBytes = 0;
- mmesa->c_agpTextureBytes = 0;
- }
-
- mmesa->c_texsrc_agp = 0;
- mmesa->c_texsrc_card = 0;
-
- if (MACH64_DEBUG & DEBUG_VERBOSE_COUNT)
- fprintf( stderr, "---------------------------------------------------------\n" );
-}
-
-
-void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
-{
- GLint ret;
- drm_mach64_clear_t clear;
- GLint x, y, w, h;
- GLuint color;
- GLint nbox;
- GLint x1, y1, x2, y2;
- drm_clip_rect_t *b = mmesa->sarea->boxes;
-
- /* save cliprects */
- nbox = mmesa->sarea->nbox;
- x1 = b[0].x1;
- y1 = b[0].y1;
- x2 = b[0].x2;
- y2 = b[0].y2;
-
- /* setup a single cliprect and call the clear ioctl for each box */
- mmesa->sarea->nbox = 1;
-
- w = h = 8;
- x = mmesa->drawX;
- y = mmesa->drawY;
- b[0].x1 = x;
- b[0].x2 = x + w;
- b[0].y1 = y;
- b[0].y2 = y + h;
-
- clear.flags = MACH64_BACK;
- clear.clear_depth = 0;
-
- /* Red box if DDFinish was called to wait for rendering to complete */
- if ( mmesa->c_drawWaits ) {
- color = mach64PackColor( mmesa->mach64Screen->cpp, 255, 0, 0, 0 );
-
- clear.x = x;
- clear.y = y;
- clear.w = w;
- clear.h = h;
- clear.clear_color = color;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if (ret < 0) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
-
- }
-
- x += w;
- b[0].x1 = x;
- b[0].x2 = x + w;
-
- /* draw a green box if we had to wait for previous frame(s) to complete */
- if ( !mmesa->hardwareWentIdle ) {
- color = mach64PackColor( mmesa->mach64Screen->cpp, 0, 255, 0, 0 );
-
- clear.x = x;
- clear.y = y;
- clear.w = w;
- clear.h = h;
- clear.clear_color = color;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if (ret < 0) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
-
- }
-
- x += w;
- w = 20;
- b[0].x1 = x;
-
- /* show approx. ratio of AGP/card textures used - Blue = AGP, Purple = Card */
- if ( mmesa->c_texsrc_agp || mmesa->c_texsrc_card ) {
- color = mach64PackColor( mmesa->mach64Screen->cpp, 0, 0, 255, 0 );
- w = ((GLfloat)mmesa->c_texsrc_agp / (GLfloat)(mmesa->c_texsrc_agp + mmesa->c_texsrc_card))*20;
- if (w > 1) {
-
- b[0].x2 = x + w;
-
- clear.x = x;
- clear.y = y;
- clear.w = w;
- clear.h = h;
- clear.clear_color = color;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if (ret < 0) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
- }
-
- x += w;
- w = 20 - w;
-
- if (w > 1) {
- b[0].x1 = x;
- b[0].x2 = x + w;
-
- color = mach64PackColor( mmesa->mach64Screen->cpp, 255, 0, 255, 0 );
-
- clear.x = x;
- clear.y = y;
- clear.w = w;
- clear.h = h;
- clear.clear_color = color;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if (ret < 0) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
- }
- }
-
- x += w;
- w = 8;
- b[0].x1 = x;
- b[0].x2 = x + w;
-
- /* Yellow box if we swapped textures */
- if ( mmesa->c_textureSwaps ) {
- color = mach64PackColor( mmesa->mach64Screen->cpp, 255, 255, 0, 0 );
-
- clear.x = x;
- clear.y = y;
- clear.w = w;
- clear.h = h;
- clear.clear_color = color;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if (ret < 0) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
-
- }
-
- h = 4;
- x += 8;
- b[0].x1 = x;
- b[0].y2 = y + h;
-
- /* Purple bar for card memory texture blits/uploads */
- if ( mmesa->c_textureBytes ) {
- color = mach64PackColor( mmesa->mach64Screen->cpp, 255, 0, 255, 0 );
- w = mmesa->c_textureBytes / 16384;
- if ( w <= 0 )
- w = 1;
- if (w > (mmesa->driDrawable->w - 44))
- w = mmesa->driDrawable->w - 44;
-
- b[0].x2 = x + w;
-
- clear.x = x;
- clear.y = y;
- clear.w = w;
- clear.h = h;
- clear.clear_color = color;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if (ret < 0) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
- }
-
- /* Blue bar for AGP memory texture blits/uploads */
- if ( mmesa->c_agpTextureBytes ) {
- color = mach64PackColor( mmesa->mach64Screen->cpp, 0, 0, 255, 0 );
- w = mmesa->c_agpTextureBytes / 16384;
- if ( w <= 0 )
- w = 1;
- if (w > (mmesa->driDrawable->w - 44))
- w = mmesa->driDrawable->w - 44;
-
- y += 4;
- b[0].x2 = x + w;
- b[0].y1 = y;
- b[0].y2 = y + h;
-
- clear.x = x;
- clear.y = y;
- clear.w = w;
- clear.h = h;
- clear.clear_color = color;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if (ret < 0) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
- }
-
- /* Pink bar for number of vertex buffers used */
- if ( mmesa->c_vertexBuffers ) {
- color = mach64PackColor( mmesa->mach64Screen->cpp, 196, 128, 128, 0 );
-
- w = mmesa->c_vertexBuffers;
- if (w > (mmesa->driDrawable->w))
- w = mmesa->driDrawable->w;
-
- h = 8;
- x = mmesa->drawX;
- y = mmesa->drawY + 8;
- b[0].x1 = x;
- b[0].x2 = x + w;
- b[0].y1 = y;
- b[0].y2 = y + h;
-
- clear.x = x;
- clear.y = y;
- clear.w = w;
- clear.h = h;
- clear.clear_color = color;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if (ret < 0) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
- }
-
- /* restore cliprects */
- mmesa->sarea->nbox = nbox;
- b[0].x1 = x1;
- b[0].y1 = y1;
- b[0].x2 = x2;
- b[0].y2 = y2;
-
-}
-
-#endif
-
-/* ================================================================
- * Buffer clear
- */
-
-static void mach64DDClear( struct gl_context *ctx, GLbitfield mask )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
- __DRIdrawable *dPriv = mmesa->driDrawable;
- drm_mach64_clear_t clear;
- GLuint flags = 0;
- GLint i;
- GLint ret;
- GLint cx, cy, cw, ch;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "mach64DDClear\n");
- }
-
-#if ENABLE_PERF_BOXES
- /* Bump the performance counter */
- mmesa->c_clears++;
-#endif
-
- FLUSH_BATCH( mmesa );
-
- /* The only state changes we care about here are the RGBA colormask
- * and scissor/clipping. We'll just update that state, if needed.
- */
- if ( mmesa->new_state & (MACH64_NEW_MASKS | MACH64_NEW_CLIP) ) {
- const GLuint save_state = mmesa->new_state;
- mmesa->new_state &= (MACH64_NEW_MASKS | MACH64_NEW_CLIP);
- mach64DDUpdateHWState( ctx );
- mmesa->new_state = save_state & ~(MACH64_NEW_MASKS | MACH64_NEW_CLIP);
- }
-
- if ( mask & BUFFER_BIT_FRONT_LEFT ) {
- flags |= MACH64_FRONT;
- mask &= ~BUFFER_BIT_FRONT_LEFT;
- }
-
- if ( mask & BUFFER_BIT_BACK_LEFT ) {
- flags |= MACH64_BACK;
- mask &= ~BUFFER_BIT_BACK_LEFT;
- }
-
- if ( ( mask & BUFFER_BIT_DEPTH ) && ctx->Depth.Mask ) {
- flags |= MACH64_DEPTH;
- mask &= ~BUFFER_BIT_DEPTH;
- }
-
- if ( mask )
- _swrast_Clear( ctx, mask );
-
- if ( !flags )
- return;
-
- LOCK_HARDWARE( mmesa );
-
- /* compute region after locking: */
- cx = ctx->DrawBuffer->_Xmin;
- cy = ctx->DrawBuffer->_Ymin;
- cw = ctx->DrawBuffer->_Xmax - cx;
- ch = ctx->DrawBuffer->_Ymax - cy;
-
- /* Flip top to bottom */
- cx += mmesa->drawX;
- cy = mmesa->drawY + dPriv->h - cy - ch;
-
- /* HACK?
- */
- if ( mmesa->dirty & ~MACH64_UPLOAD_CLIPRECTS ) {
- mach64EmitHwStateLocked( mmesa );
- }
-
- for ( i = 0 ; i < mmesa->numClipRects ; ) {
- int nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS, mmesa->numClipRects );
- drm_clip_rect_t *box = mmesa->pClipRects;
- drm_clip_rect_t *b = mmesa->sarea->boxes;
- GLint n = 0;
-
- if (cw != dPriv->w || ch != dPriv->h) {
- /* clear subregion */
- for ( ; i < nr ; i++ ) {
- GLint x = box[i].x1;
- GLint y = box[i].y1;
- GLint w = box[i].x2 - x;
- GLint h = box[i].y2 - y;
-
- if ( x < cx ) w -= cx - x, x = cx;
- if ( y < cy ) h -= cy - y, y = cy;
- if ( x + w > cx + cw ) w = cx + cw - x;
- if ( y + h > cy + ch ) h = cy + ch - y;
- if ( w <= 0 ) continue;
- if ( h <= 0 ) continue;
-
- b->x1 = x;
- b->y1 = y;
- b->x2 = x + w;
- b->y2 = y + h;
- b++;
- n++;
- }
- } else {
- /* clear whole window */
- for ( ; i < nr ; i++ ) {
- *b++ = box[i];
- n++;
- }
- }
-
- mmesa->sarea->nbox = n;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_IOCTL ) {
- fprintf( stderr,
- "DRM_MACH64_CLEAR: flag 0x%x color %x depth %x nbox %d\n",
- flags,
- (GLuint)mmesa->ClearColor,
- (GLuint)mmesa->ClearDepth,
- mmesa->sarea->nbox );
- }
-
- clear.flags = flags;
- clear.x = cx;
- clear.y = cy;
- clear.w = cw;
- clear.h = ch;
- clear.clear_color = mmesa->ClearColor;
- clear.clear_depth = mmesa->ClearDepth;
-
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm_mach64_clear_t) );
-
- if ( ret ) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "DRM_MACH64_CLEAR: return = %d\n", ret );
- exit( -1 );
- }
- }
-
- UNLOCK_HARDWARE( mmesa );
-
- mmesa->dirty |= (MACH64_UPLOAD_CONTEXT |
- MACH64_UPLOAD_MISC |
- MACH64_UPLOAD_CLIPRECTS);
-
-}
-
-
-void mach64WaitForIdleLocked( mach64ContextPtr mmesa )
-{
- int fd = mmesa->driFd;
- int to = 0;
- int ret;
-
- do {
- ret = drmCommandNone( fd, DRM_MACH64_IDLE );
- } while ( ( ret == -EBUSY ) && ( to++ < MACH64_TIMEOUT ) );
-
- if ( ret < 0 ) {
- drmCommandNone( fd, DRM_MACH64_RESET );
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "Error: Mach64 timed out... exiting\n" );
- exit( -1 );
- }
-}
-
-/* Flush the DMA queue to the hardware */
-void mach64FlushDMALocked( mach64ContextPtr mmesa )
-{
- int fd = mmesa->driFd;
- int ret;
-
- ret = drmCommandNone( fd, DRM_MACH64_FLUSH );
-
- if ( ret < 0 ) {
- drmCommandNone( fd, DRM_MACH64_RESET );
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "Error flushing DMA... exiting\n" );
- exit( -1 );
- }
-
- mmesa->dirty |= (MACH64_UPLOAD_CONTEXT |
- MACH64_UPLOAD_MISC |
- MACH64_UPLOAD_CLIPRECTS);
-
-}
-
-/* For client-side state emits - currently unused */
-void mach64UploadHwStateLocked( mach64ContextPtr mmesa )
-{
- drm_mach64_sarea_t *sarea = mmesa->sarea;
-
- drm_mach64_context_regs_t *regs = &sarea->context_state;
- unsigned int dirty = sarea->dirty;
- CARD32 offset = ((regs->tex_size_pitch & 0xf0) >> 2);
-
- DMALOCALS;
-
- DMAGETPTR( 19*2 );
-
- if ( dirty & MACH64_UPLOAD_MISC ) {
- DMAOUTREG( MACH64_DP_MIX, regs->dp_mix );
- DMAOUTREG( MACH64_DP_SRC, regs->dp_src );
- DMAOUTREG( MACH64_CLR_CMP_CNTL, regs->clr_cmp_cntl );
- DMAOUTREG( MACH64_GUI_TRAJ_CNTL, regs->gui_traj_cntl );
- DMAOUTREG( MACH64_SC_LEFT_RIGHT, regs->sc_left_right );
- DMAOUTREG( MACH64_SC_TOP_BOTTOM, regs->sc_top_bottom );
- sarea->dirty &= ~MACH64_UPLOAD_MISC;
- }
-
- if ( dirty & MACH64_UPLOAD_DST_OFF_PITCH ) {
- DMAOUTREG( MACH64_DST_OFF_PITCH, regs->dst_off_pitch );
- sarea->dirty &= ~MACH64_UPLOAD_DST_OFF_PITCH;
- }
- if ( dirty & MACH64_UPLOAD_Z_OFF_PITCH ) {
- DMAOUTREG( MACH64_Z_OFF_PITCH, regs->z_off_pitch );
- sarea->dirty &= ~MACH64_UPLOAD_Z_OFF_PITCH;
- }
- if ( dirty & MACH64_UPLOAD_Z_ALPHA_CNTL ) {
- DMAOUTREG( MACH64_Z_CNTL, regs->z_cntl );
- DMAOUTREG( MACH64_ALPHA_TST_CNTL, regs->alpha_tst_cntl );
- sarea->dirty &= ~MACH64_UPLOAD_Z_ALPHA_CNTL;
- }
- if ( dirty & MACH64_UPLOAD_SCALE_3D_CNTL ) {
- DMAOUTREG( MACH64_SCALE_3D_CNTL, regs->scale_3d_cntl );
- sarea->dirty &= ~MACH64_UPLOAD_SCALE_3D_CNTL;
- }
- if ( dirty & MACH64_UPLOAD_DP_FOG_CLR ) {
- DMAOUTREG( MACH64_DP_FOG_CLR, regs->dp_fog_clr );
- sarea->dirty &= ~MACH64_UPLOAD_DP_FOG_CLR;
- }
- if ( dirty & MACH64_UPLOAD_DP_WRITE_MASK ) {
- DMAOUTREG( MACH64_DP_WRITE_MASK, regs->dp_write_mask );
- sarea->dirty &= ~MACH64_UPLOAD_DP_WRITE_MASK;
- }
- if ( dirty & MACH64_UPLOAD_DP_PIX_WIDTH ) {
- DMAOUTREG( MACH64_DP_PIX_WIDTH, regs->dp_pix_width );
- sarea->dirty &= ~MACH64_UPLOAD_DP_PIX_WIDTH;
- }
- if ( dirty & MACH64_UPLOAD_SETUP_CNTL ) {
- DMAOUTREG( MACH64_SETUP_CNTL, regs->setup_cntl );
- sarea->dirty &= ~MACH64_UPLOAD_SETUP_CNTL;
- }
-
- if ( dirty & MACH64_UPLOAD_TEXTURE ) {
- DMAOUTREG( MACH64_TEX_SIZE_PITCH, regs->tex_size_pitch );
- DMAOUTREG( MACH64_TEX_CNTL, regs->tex_cntl );
- DMAOUTREG( MACH64_SECONDARY_TEX_OFF, regs->secondary_tex_off );
- DMAOUTREG( MACH64_TEX_0_OFF + offset, regs->tex_offset );
- sarea->dirty &= ~MACH64_UPLOAD_TEXTURE;
- }
-
-#if 0
- if ( dirty & MACH64_UPLOAD_CLIPRECTS ) {
- DMAOUTREG( MACH64_SC_LEFT_RIGHT, regs->sc_left_right );
- DMAOUTREG( MACH64_SC_TOP_BOTTOM, regs->sc_top_bottom );
- sarea->dirty &= ~MACH64_UPLOAD_CLIPRECTS;
- }
-#endif
-
- sarea->dirty = 0;
-
- DMAADVANCE();
-}
-
-void mach64InitIoctlFuncs( struct dd_function_table *functions )
-{
- functions->Clear = mach64DDClear;
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_ioctl.h b/src/mesa/drivers/dri/mach64/mach64_ioctl.h
deleted file mode 100644
index 9145ee6e6cf..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_ioctl.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#ifndef __MACH64_IOCTL_H__
-#define __MACH64_IOCTL_H__
-
-#include
-#include
-
-#include "mach64_dri.h"
-#include "mach64_reg.h"
-#include "mach64_lock.h"
-
-#define MACH64_BUFFER_MAX_DWORDS (MACH64_BUFFER_SIZE / sizeof(CARD32))
-
-
-extern drmBufPtr mach64GetBufferLocked( mach64ContextPtr mmesa );
-extern void mach64FlushVerticesLocked( mach64ContextPtr mmesa );
-extern void mach64FlushDMALocked( mach64ContextPtr mmesa );
-extern void mach64UploadHwStateLocked( mach64ContextPtr mmesa );
-
-static INLINE void *mach64AllocDmaLow( mach64ContextPtr mmesa, int bytes )
-{
- CARD32 *head;
-
- if ( mmesa->vert_used + bytes > mmesa->vert_total ) {
- LOCK_HARDWARE( mmesa );
- mach64FlushVerticesLocked( mmesa );
- UNLOCK_HARDWARE( mmesa );
- }
-
- head = (CARD32 *)((char *)mmesa->vert_buf + mmesa->vert_used);
- mmesa->vert_used += bytes;
-
- return head;
-}
-
-static INLINE void *mach64AllocDmaLocked( mach64ContextPtr mmesa, int bytes )
-{
- CARD32 *head;
-
- if ( mmesa->vert_used + bytes > mmesa->vert_total ) {
- mach64FlushVerticesLocked( mmesa );
- }
-
- head = (CARD32 *)((char *)mmesa->vert_buf + mmesa->vert_used);
- mmesa->vert_used += bytes;
-
- return head;
-}
-
-extern void mach64FireBlitLocked( mach64ContextPtr mmesa, void *buffer,
- GLint offset, GLint pitch, GLint format,
- GLint x, GLint y, GLint width, GLint height );
-
-extern void mach64CopyBuffer( __DRIdrawable *dPriv );
-#if ENABLE_PERF_BOXES
-extern void mach64PerformanceCounters( mach64ContextPtr mmesa );
-extern void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa );
-#endif
-extern void mach64WaitForIdleLocked( mach64ContextPtr mmesa );
-
-extern void mach64InitIoctlFuncs( struct dd_function_table *functions );
-
-/* ================================================================
- * Helper macros:
- */
-
-#define FLUSH_BATCH( mmesa ) \
-do { \
- if ( MACH64_DEBUG & DEBUG_VERBOSE_IOCTL ) \
- fprintf( stderr, "FLUSH_BATCH in %s\n", __FUNCTION__ ); \
- if ( mmesa->vert_used ) { \
- mach64FlushVertices( mmesa ); \
- } \
-} while (0)
-
-/* According to a comment in ATIMach64Sync (atimach64.c) in the DDX:
- *
- * "For VTB's and later, the first CPU read of the framebuffer will return
- * zeroes [...] This appears to be due to some kind of engine
- * caching of framebuffer data I haven't found any way of disabling, or
- * otherwise circumventing."
- */
-#define FINISH_DMA_LOCKED( mmesa ) \
-do { \
- CARD32 _tmp; \
- if ( MACH64_DEBUG & DEBUG_VERBOSE_IOCTL ) \
- fprintf( stderr, "FINISH_DMA_LOCKED in %s\n", __FUNCTION__ ); \
- if ( mmesa->vert_used ) { \
- mach64FlushVerticesLocked( mmesa ); \
- } \
- mach64WaitForIdleLocked( mmesa ); \
- /* pre-read framebuffer to counter caching problem */ \
- _tmp = *(volatile CARD32 *)mmesa->driScreen->pFB; \
-} while (0)
-
-#define FLUSH_DMA_LOCKED( mmesa ) \
-do { \
- if ( MACH64_DEBUG & DEBUG_VERBOSE_IOCTL ) \
- fprintf( stderr, "FLUSH_DMA_LOCKED in %s\n", __FUNCTION__ ); \
- if ( mmesa->vert_used ) { \
- mach64FlushVerticesLocked( mmesa ); \
- } \
- mach64FlushDMALocked( mmesa ); \
-} while (0)
-
-#define mach64FlushVertices( mmesa ) \
-do { \
- LOCK_HARDWARE( mmesa ); \
- mach64FlushVerticesLocked( mmesa ); \
- UNLOCK_HARDWARE( mmesa ); \
-} while (0)
-
-#define mach64WaitForIdle( mmesa ) \
-do { \
- LOCK_HARDWARE( mmesa ); \
- mach64WaitForIdleLocked( mmesa ); \
- UNLOCK_HARDWARE( mmesa ); \
-} while (0)
-
-
-#endif /* __MACH64_IOCTL_H__ */
diff --git a/src/mesa/drivers/dri/mach64/mach64_lock.c b/src/mesa/drivers/dri/mach64/mach64_lock.c
deleted file mode 100644
index 1a95a8f619d..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_lock.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#include "mach64_context.h"
-#include "mach64_state.h"
-#include "mach64_lock.h"
-#include "drirenderbuffer.h"
-
-#if DEBUG_LOCKING
-char *prevLockFile = NULL;
-int prevLockLine = 0;
-#endif
-
-
-/* Update the hardware state. This is called if another context has
- * grabbed the hardware lock, which includes the X server. This
- * function also updates the driver's window state after the X server
- * moves, resizes or restacks a window -- the change will be reflected
- * in the drawable position and clip rects. Since the X server grabs
- * the hardware lock when it changes the window state, this routine will
- * automatically be called after such a change.
- */
-void mach64GetLock( mach64ContextPtr mmesa, GLuint flags )
-{
- __DRIdrawable *dPriv = mmesa->driDrawable;
- __DRIscreen *sPriv = mmesa->driScreen;
- drm_mach64_sarea_t *sarea = mmesa->sarea;
- int i;
-
- drmGetLock( mmesa->driFd, mmesa->hHWContext, flags );
-
- /* The window might have moved, so we might need to get new clip
- * rects.
- *
- * NOTE: This releases and regrabs the hw lock to allow the X server
- * to respond to the DRI protocol request for new drawable info.
- * Since the hardware state depends on having the latest drawable
- * clip rects, all state checking must be done _after_ this call.
- */
- DRI_VALIDATE_DRAWABLE_INFO( sPriv, dPriv );
-
- if ( mmesa->lastStamp != dPriv->lastStamp ) {
- mmesa->lastStamp = dPriv->lastStamp;
- if (mmesa->glCtx->DrawBuffer->_ColorDrawBufferIndexes[0] == BUFFER_BACK_LEFT)
- mach64SetCliprects( mmesa->glCtx, GL_BACK_LEFT );
- else
- mach64SetCliprects( mmesa->glCtx, GL_FRONT_LEFT );
- driUpdateFramebufferSize( mmesa->glCtx, dPriv );
- mach64CalcViewport( mmesa->glCtx );
- }
-
- mmesa->dirty |= (MACH64_UPLOAD_CONTEXT
- | MACH64_UPLOAD_MISC
- | MACH64_UPLOAD_CLIPRECTS);
-
- /* EXA render acceleration uses the texture engine, so restore it */
- mmesa->dirty |= (MACH64_UPLOAD_TEXTURE);
-
- if ( sarea->ctx_owner != mmesa->hHWContext ) {
- sarea->ctx_owner = mmesa->hHWContext;
- mmesa->dirty = MACH64_UPLOAD_ALL;
- }
-
- for ( i = mmesa->firstTexHeap ; i < mmesa->lastTexHeap ; i++ ) {
- DRI_AGE_TEXTURES( mmesa->texture_heaps[i] );
- }
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_lock.h b/src/mesa/drivers/dri/mach64/mach64_lock.h
deleted file mode 100644
index 3130b183e33..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_lock.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- *
- */
-
-#ifndef __MACH64_LOCK_H__
-#define __MACH64_LOCK_H__
-
-extern void mach64GetLock( mach64ContextPtr mmesa, GLuint flags );
-
-
-/* Turn DEBUG_LOCKING on to find locking conflicts.
- */
-#define DEBUG_LOCKING 1
-
-#if DEBUG_LOCKING
-extern char *prevLockFile;
-extern int prevLockLine;
-
-#define DEBUG_LOCK() \
- do { \
- prevLockFile = (__FILE__); \
- prevLockLine = (__LINE__); \
- } while (0)
-
-#define DEBUG_RESET() \
- do { \
- prevLockFile = 0; \
- prevLockLine = 0; \
- } while (0)
-
-#define DEBUG_CHECK_LOCK() \
- do { \
- if ( prevLockFile ) { \
- fprintf( stderr, \
- "LOCK SET!\n\tPrevious %s:%d\n\tCurrent: %s:%d\n", \
- prevLockFile, prevLockLine, __FILE__, __LINE__ ); \
- exit( 1 ); \
- } \
- } while (0)
-
-#else
-
-#define DEBUG_LOCK()
-#define DEBUG_RESET()
-#define DEBUG_CHECK_LOCK()
-
-#endif
-
-/*
- * !!! We may want to separate locks from locks with validation. This
- * could be used to improve performance for those things commands that
- * do not do any drawing !!!
- */
-
-/* Lock the hardware and validate our state.
- */
-#define LOCK_HARDWARE( mmesa ) \
- do { \
- char __ret = 0; \
- DEBUG_CHECK_LOCK(); \
- DRM_CAS( mmesa->driHwLock, mmesa->hHWContext, \
- (DRM_LOCK_HELD | mmesa->hHWContext), __ret ); \
- if ( __ret ) \
- mach64GetLock( mmesa, 0 ); \
- DEBUG_LOCK(); \
- } while (0)
-
-/* Unlock the hardware.
- */
-#define UNLOCK_HARDWARE( mmesa ) \
- do { \
- DRM_UNLOCK( mmesa->driFd, \
- mmesa->driHwLock, \
- mmesa->hHWContext ); \
- DEBUG_RESET(); \
- } while (0)
-
-#endif /* __MACH64_LOCK_H__ */
diff --git a/src/mesa/drivers/dri/mach64/mach64_native_vb.c b/src/mesa/drivers/dri/mach64/mach64_native_vb.c
deleted file mode 100644
index d8426ddee1c..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_native_vb.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Mesa 3-D graphics library
- * Version: 3.5
- *
- * Copyright (C) 1999-2001 Brian Paul 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, 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 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
- * BRIAN PAUL 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.
- *
- * Original authors:
- * Keith Whitwell
- *
- * Adapted to Mach64 by:
- * José Fonseca
- */
-
-#include "math/m_translate.h"
-
-#ifndef LOCALVARS
-#define LOCALVARS
-#endif
-
-void TAG(translate_vertex)(struct gl_context *ctx,
- const VERTEX *src,
- SWvertex *dst)
-{
- LOCALVARS
- GLuint format = GET_VERTEX_FORMAT();
- UNVIEWPORT_VARS;
- CARD32 *p = (CARD32 *)src + 10 - mmesa->vertex_size;
-
- dst->attrib[FRAG_ATTRIB_WPOS][3] = 1.0;
-
- switch ( format ) {
- case TEX1_VERTEX_FORMAT:
-#ifdef MACH64_PREMULT_TEXCOORDS
- {
- float rhw = 1.0 / LE32_IN_FLOAT( p + 2 );
-
- dst->attrib[FRAG_ATTRIB_TEX1][0] = rhw*LE32_IN_FLOAT( p++ );
- dst->attrib[FRAG_ATTRIB_TEX1][1] = rhw*LE32_IN_FLOAT( p++ );
- }
-#else
- dst->attrib[FRAG_ATTRIB_TEX1][0] = LE32_IN_FLOAT( p++ );
- dst->attrib[FRAG_ATTRIB_TEX1][1] = LE32_IN_FLOAT( p++ );
-#endif
- dst->attrib[FRAG_ATTRIB_TEX1][3] = 1.0;
- p++;
-
- case TEX0_VERTEX_FORMAT:
-#ifdef MACH64_PREMULT_TEXCOORDS
- {
- float rhw = 1.0 / LE32_IN_FLOAT( p + 2 );
-
- dst->attrib[FRAG_ATTRIB_TEX0][0] = rhw*LE32_IN_FLOAT( p++ );
- dst->attrib[FRAG_ATTRIB_TEX0][1] = rhw*LE32_IN_FLOAT( p++ );
- }
-#else
- dst->attrib[FRAG_ATTRIB_TEX0][0] = LE32_IN_FLOAT( p++ );
- dst->attrib[FRAG_ATTRIB_TEX0][1] = LE32_IN_FLOAT( p++ );
-#endif
- dst->attrib[FRAG_ATTRIB_TEX0][3] = 1.0;
- dst->attrib[FRAG_ATTRIB_WPOS][3] = LE32_IN_FLOAT( p++ );
-
- case NOTEX_VERTEX_FORMAT:
- dst->attrib[FRAG_ATTRIB_COL1][2] = UBYTE_TO_FLOAT(((GLubyte *)p)[0]);
- dst->attrib[FRAG_ATTRIB_COL1][1] = UBYTE_TO_FLOAT(((GLubyte *)p)[1]);
- dst->attrib[FRAG_ATTRIB_COL1][0] = UBYTE_TO_FLOAT(((GLubyte *)p)[2]);
- dst->attrib[FRAG_ATTRIB_FOGC][0] = ((GLubyte *)p)[3]; /*XXX int->float?*/
- p++;
-
- case TINY_VERTEX_FORMAT:
- dst->attrib[FRAG_ATTRIB_WPOS][2] = UNVIEWPORT_Z( LE32_IN( p++ ) );
-
- dst->color[2] = ((GLubyte *)p)[0];
- dst->color[1] = ((GLubyte *)p)[1];
- dst->color[0] = ((GLubyte *)p)[2];
- dst->color[3] = ((GLubyte *)p)[3];
- p++;
-
- {
- GLuint xy = LE32_IN( p );
-
- dst->attrib[FRAG_ATTRIB_WPOS][0] = UNVIEWPORT_X( (GLfloat)(GLshort)( xy >> 16 ) );
- dst->attrib[FRAG_ATTRIB_WPOS][1] = UNVIEWPORT_Y( (GLfloat)(GLshort)( xy & 0xffff ) );
- }
- }
-
- assert( p + 1 - (CARD32 *)src == 10 );
-
- dst->pointSize = ctx->Point.Size;
-}
-
-
-
-void TAG(print_vertex)( struct gl_context *ctx, const VERTEX *v )
-{
- LOCALVARS
- GLuint format = GET_VERTEX_FORMAT();
- CARD32 *p = (CARD32 *)v + 10 - mmesa->vertex_size;
-
- switch ( format ) {
- case TEX1_VERTEX_FORMAT:
- {
- GLfloat u, v, w;
-#ifdef MACH64_PREMULT_TEXCOORDS
- float rhw = 1.0 / LE32_IN_FLOAT( p + 2 );
-
- u = rhw*LE32_IN_FLOAT( p++ );
- v = rhw*LE32_IN_FLOAT( p++ );
-#else
- u = LE32_IN_FLOAT( p++ );
- v = LE32_IN_FLOAT( p++ );
-#endif
- w = LE32_IN_FLOAT( p++ );
- fprintf( stderr, "u1 %f v1 %f w1 %f\n", u, v, w );
- }
-
- case TEX0_VERTEX_FORMAT:
- {
- GLfloat u, v, w;
-#ifdef MACH64_PREMULT_TEXCOORDS
- float rhw = 1.0 / LE32_IN_FLOAT( p + 2 );
-
- u = rhw*LE32_IN_FLOAT( p++ );
- v = rhw*LE32_IN_FLOAT( p++ );
-#else
- u = LE32_IN_FLOAT( p++ );
- v = LE32_IN_FLOAT( p++ );
-#endif
- w = LE32_IN_FLOAT( p++ );
- fprintf( stderr, "u0 %f v0 %f w0 %f\n", u, v, w );
- }
-
- case NOTEX_VERTEX_FORMAT:
- {
- GLubyte r, g, b, a;
-
- b = ((GLubyte *)p)[0];
- g = ((GLubyte *)p)[1];
- r = ((GLubyte *)p)[2];
- a = ((GLubyte *)p)[3];
- p++;
- fprintf(stderr, "spec: r %d g %d b %d a %d\n", r, g, b, a);
- }
-
- case TINY_VERTEX_FORMAT:
- {
- GLuint xy;
- GLfloat x, y, z;
- GLubyte r, g, b, a;
-
- z = LE32_IN( p++ ) / 65536.0;
-
- b = ((GLubyte *)p)[0];
- g = ((GLubyte *)p)[1];
- r = ((GLubyte *)p)[2];
- a = ((GLubyte *)p)[3];
- p++;
- xy = LE32_IN( p );
- x = (GLfloat)(GLshort)( xy >> 16 ) / 4.0;
- y = (GLfloat)(GLshort)( xy & 0xffff ) / 4.0;
-
- fprintf(stderr, "x %f y %f z %f\n", x, y, z);
- fprintf(stderr, "r %d g %d b %d a %d\n", r, g, b, a);
- }
- }
-
- assert( p + 1 - (CARD32 *)v == 10 );
-
- fprintf(stderr, "\n");
-}
-
-/* Interpolate the elements of the VB not included in typical hardware
- * vertices.
- *
- * NOTE: All these arrays are guarenteed by tnl to be writeable and
- * have good stride.
- */
-#ifndef INTERP_QUALIFIER
-#define INTERP_QUALIFIER static
-#endif
-
-#define GET_COLOR(ptr, idx) ((ptr)->data[idx])
-
-
-INTERP_QUALIFIER void TAG(interp_extras)( struct gl_context *ctx,
- GLfloat t,
- GLuint dst, GLuint out, GLuint in,
- GLboolean force_boundary )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
- if (VB->BackfaceColorPtr) {
- assert(VB->BackfaceColorPtr->stride == 4 * sizeof(GLfloat));
-
- INTERP_4F( t,
- GET_COLOR(VB->BackfaceColorPtr, dst),
- GET_COLOR(VB->BackfaceColorPtr, out),
- GET_COLOR(VB->BackfaceColorPtr, in) );
-
- if (VB->BackfaceSecondaryColorPtr) {
- INTERP_3F( t,
- GET_COLOR(VB->BackfaceSecondaryColorPtr, dst),
- GET_COLOR(VB->BackfaceSecondaryColorPtr, out),
- GET_COLOR(VB->BackfaceSecondaryColorPtr, in) );
- }
- }
-
- if (VB->EdgeFlag) {
- VB->EdgeFlag[dst] = VB->EdgeFlag[out] || force_boundary;
- }
-
- INTERP_VERTEX(ctx, t, dst, out, in, force_boundary);
-}
-
-INTERP_QUALIFIER void TAG(copy_pv_extras)( struct gl_context *ctx,
- GLuint dst, GLuint src )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
- if (VB->BackfaceColorPtr) {
- COPY_4FV( GET_COLOR(VB->BackfaceColorPtr, dst),
- GET_COLOR(VB->BackfaceColorPtr, src) );
-
- if (VB->BackfaceSecondaryColorPtr) {
- COPY_4FV( GET_COLOR(VB->BackfaceSecondaryColorPtr, dst),
- GET_COLOR(VB->BackfaceSecondaryColorPtr, src) );
- }
- }
-
- COPY_PV_VERTEX(ctx, dst, src);
-}
-
-
-#undef INTERP_QUALIFIER
-#undef GET_COLOR
-
-#undef IND
-#undef TAG
diff --git a/src/mesa/drivers/dri/mach64/mach64_native_vbtmp.h b/src/mesa/drivers/dri/mach64/mach64_native_vbtmp.h
deleted file mode 100644
index 8345f5cdbcc..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_native_vbtmp.h
+++ /dev/null
@@ -1,562 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Mesa 3-D graphics library
- * Version: 3.5
- *
- * Copyright (C) 1999-2001 Brian Paul 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, 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 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
- * BRIAN PAUL 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.
- *
- * Original authors:
- * Keith Whitwell
- *
- * Adapted to Mach64 by:
- * José Fonseca
- */
-
-
-/* DO_XYZW: Emit xyz and maybe w coordinates.
- * DO_RGBA: Emit color.
- * DO_SPEC: Emit specular color.
- * DO_FOG: Emit fog coordinate in specular alpha.
- * DO_TEX0: Emit tex0 u,v coordinates.
- * DO_TEX1: Emit tex1 u,v coordinates.
- * DO_PTEX: Emit tex0,1 q coordinates where possible.
- *
- * Additionally, this template assumes it is emitting *transformed*
- * vertices; the modifications to emit untransformed vertices (ie. to
- * t&l hardware) are probably too great to cooexist with the code
- * already in this file.
- */
-
-#define VIEWPORT_X(x) ((GLint) ((s[0] * (x) + s[12]) * 4.0))
-#define VIEWPORT_Y(y) ((GLint) ((s[5] * (y) + s[13]) * 4.0))
-#define VIEWPORT_Z(z) (((GLuint) (s[10] * (z) + s[14])) << 15)
-
-#ifndef LOCALVARS
-#define LOCALVARS
-#endif
-
-static void TAG(emit)( struct gl_context *ctx,
- GLuint start, GLuint end,
- void *dest,
- GLuint stride )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-#if DO_TEX1
- GLfloat (*tc1)[4];
- GLuint tc1_stride;
-#if DO_PTEX
- GLuint tc1_size;
-#endif
-#endif
-#if DO_TEX0
- GLfloat (*tc0)[4];
- GLuint tc0_stride;
-#if DO_PTEX
- GLuint tc0_size;
-#endif
-#endif
-#if DO_SPEC
- GLfloat (*spec)[4];
- GLuint spec_stride;
-#endif
-#if DO_FOG
- GLfloat (*fog)[4];
- GLuint fog_stride;
-#endif
-#if DO_RGBA
- GLfloat (*col)[4];
- GLuint col_stride;
-#endif
- GLfloat (*coord)[4];
- GLuint coord_stride;
- VERTEX *v = (VERTEX *)dest;
- const GLfloat *s = GET_VIEWPORT_MAT();
-#if DO_TEX1 || DO_TEX0 || DO_XYZW
- const GLubyte *mask = VB->ClipMask;
-#endif
- int i;
-
-#if !DO_XYZW
- (void) s; /* Quiet compiler */
-#endif
-/* fprintf(stderr, "%s(big) importable %d %d..%d\n", */
-/* __FUNCTION__, VB->importable_data, start, end); */
-
-#if DO_TEX1
- {
- const GLuint t1 = GET_TEXSOURCE(1);
- tc1 = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->data;
- tc1_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->stride;
-#if DO_PTEX
- tc1_size = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->size;
-#endif
- }
-#endif
-
-#if DO_TEX0
- {
- const GLuint t0 = GET_TEXSOURCE(0);
- tc0 = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->data;
- tc0_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->stride;
-#if DO_PTEX
- tc0_size = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->size;
-#endif
- }
-#endif
-
-#if DO_SPEC
- if (VB->AttribPtr[_TNL_ATTRIB_COLOR1]) {
- spec = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->data;
- spec_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->stride;
- } else {
- spec = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR1];
- spec_stride = 0;
- }
-#endif
-
-#if DO_FOG
- if (VB->AttribPtr[_TNL_ATTRIB_FOG]) {
- fog = VB->AttribPtr[_TNL_ATTRIB_FOG]->data;
- fog_stride = VB->AttribPtr[_TNL_ATTRIB_FOG]->stride;
- } else {
- static GLfloat tmp[4] = {0, 0, 0, 0};
- fog = &tmp;
- fog_stride = 0;
- }
-#endif
-
-#if DO_RGBA
- col = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data;
- col_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride;
-#endif
-
- coord = VB->NdcPtr->data;
- coord_stride = VB->NdcPtr->stride;
-
- if (start) {
-#if DO_TEX1
- STRIDE_4F(tc1, start * tc1_stride);
-#endif
-#if DO_TEX0
- STRIDE_4F(tc0, start * tc0_stride);
-#endif
-#if DO_SPEC
- STRIDE_4F(spec, start * spec_stride);
-#endif
-#if DO_FOG
- STRIDE_4F(fog, start * fog_stride);
-#endif
-#if DO_RGBA
- STRIDE_4F(col, start * col_stride);
-#endif
- STRIDE_4F(coord, start * coord_stride);
- }
-
- for (i=start; i < end; i++, v = (VERTEX *)((GLubyte *)v + stride)) {
- CARD32 *p = (CARD32 *)v;
-#if DO_TEX1 || DO_TEX0
- GLfloat w;
-
- if (mask[i] == 0) {
- /* unclipped */
- w = coord[0][3];
- } else {
- /* clipped */
- w = 1.0;
- }
-#endif
-
-#if DO_TEX1
-#if DO_PTEX
- if (tc1_size == 4) {
-#ifdef MACH64_PREMULT_TEXCOORDS
- LE32_OUT_FLOAT( p++, w*tc1[0][0] ); /* VERTEX_?_SECONDARY_S */
- LE32_OUT_FLOAT( p++, w*tc1[0][1] ); /* VERTEX_?_SECONDARY_T */
- LE32_OUT_FLOAT( p++, w*tc1[0][3] ); /* VERTEX_?_SECONDARY_W */
-#else /* !MACH64_PREMULT_TEXCOORDS */
- float rhw = 1.0 / tc1[0][3];
- LE32_OUT_FLOAT( p++, rhw*tc1[0][0] ); /* VERTEX_?_SECONDARY_S */
- LE32_OUT_FLOAT( p++, rhw*tc1[0][1] ); /* VERTEX_?_SECONDARY_T */
- LE32_OUT_FLOAT( p++, w*tc1[0][3] ); /* VERTEX_?_SECONDARY_W */
-#endif /* !MACH64_PREMULT_TEXCOORDS */
- } else {
-#endif /* DO_PTEX */
-#ifdef MACH64_PREMULT_TEXCOORDS
- LE32_OUT_FLOAT( p++, w*tc1[0][0] ); /* VERTEX_?_SECONDARY_S */
- LE32_OUT_FLOAT( p++, w*tc1[0][1] ); /* VERTEX_?_SECONDARY_T */
- LE32_OUT_FLOAT( p++, w ); /* VERTEX_?_SECONDARY_W */
-#else /* !MACH64_PREMULT_TEXCOORDS */
- LE32_OUT_FLOAT( p++, tc1[0][0] ); /* VERTEX_?_SECONDARY_S */
- LE32_OUT_FLOAT( p++, tc1[0][1] ); /* VERTEX_?_SECONDARY_T */
- LE32_OUT_FLOAT( p++, w ); /* VERTEX_?_SECONDARY_W */
-#endif /* !MACH64_PREMULT_TEXCOORDS */
-#if DO_PTEX
- }
-#endif /* DO_PTEX */
- STRIDE_4F(tc1, tc1_stride);
-#else /* !DO_TEX1 */
- p += 3;
-#endif /* !DO_TEX1 */
-
-#if DO_TEX0
-#if DO_PTEX
- if (tc0_size == 4) {
-#ifdef MACH64_PREMULT_TEXCOORDS
- LE32_OUT_FLOAT( p++, w*tc0[0][0] ); /* VERTEX_?_S */
- LE32_OUT_FLOAT( p++, w*tc0[0][1] ); /* VERTEX_?_T */
- LE32_OUT_FLOAT( p++, w*tc0[0][3] ); /* VERTEX_?_W */
-#else /* !MACH64_PREMULT_TEXCOORDS */
- float rhw = 1.0 / tc0[0][3];
- LE32_OUT_FLOAT( p++, rhw*tc0[0][0] ); /* VERTEX_?_S */
- LE32_OUT_FLOAT( p++, rhw*tc0[0][1] ); /* VERTEX_?_T */
- LE32_OUT_FLOAT( p++, w*tc0[0][3] ); /* VERTEX_?_W */
-#endif /* !MACH64_PREMULT_TEXCOORDS */
- } else {
-#endif /* DO_PTEX */
-#ifdef MACH64_PREMULT_TEXCOORDS
- LE32_OUT_FLOAT( p++, w*tc0[0][0] ); /* VERTEX_?_S */
- LE32_OUT_FLOAT( p++, w*tc0[0][1] ); /* VERTEX_?_T */
- LE32_OUT_FLOAT( p++, w ); /* VERTEX_?_W */
-#else /* !MACH64_PREMULT_TEXCOORDS */
- LE32_OUT_FLOAT( p++, tc0[0][0] ); /* VERTEX_?_S */
- LE32_OUT_FLOAT( p++, tc0[0][1] ); /* VERTEX_?_T */
- LE32_OUT_FLOAT( p++, w ); /* VERTEX_?_W */
-#endif /* !MACH64_PREMULT_TEXCOORDS */
-#if DO_PTEX
- }
-#endif /* DO_PTEX */
- STRIDE_4F(tc0, tc0_stride);
-#else /* !DO_TEX0 */
- p += 3;
-#endif /* !DO_TEX0 */
-
-#if DO_SPEC
- UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[0], spec[0][2]); /* VERTEX_?_SPEC_B */
- UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[1], spec[0][1]); /* VERTEX_?_SPEC_G */
- UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[2], spec[0][0]); /* VERTEX_?_SPEC_R */
-
- STRIDE_4F(spec, spec_stride);
-#endif
-#if DO_FOG
- UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[3], fog[0][0]); /* VERTEX_?_SPEC_A */
- /* ((GLubyte *)p)[3] = fog[0][0] * 255.0; */
- STRIDE_4F(fog, fog_stride);
-#endif
- p++;
-
-#if DO_XYZW
- if (mask[i] == 0) {
- /* unclipped */
- LE32_OUT( p++, VIEWPORT_Z( coord[0][2] ) ); /* VERTEX_?_Z */
- } else {
-#endif
- p++;
-#if DO_XYZW
- }
-#endif
-
-#if DO_RGBA
- UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[0], col[0][2]);
- UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[1], col[0][1]);
- UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[2], col[0][0]);
- UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[3], col[0][3]);
- p++;
- STRIDE_4F(col, col_stride);
-#else
- p++;
-#endif
-
-#if DO_XYZW
- if (mask[i] == 0) {
- /* unclipped */
- LE32_OUT( p,
- (VIEWPORT_X( coord[0][0] ) << 16) | /* VERTEX_?_X */
- (VIEWPORT_Y( coord[0][1] ) & 0xffff) ); /* VERTEX_?_Y */
-
- if (MACH64_DEBUG & DEBUG_VERBOSE_PRIMS) {
- fprintf( stderr, "%s: vert %d: %.2f %.2f %.2f %x\n",
- __FUNCTION__,
- i,
- (LE32_IN( p ) >> 16)/4.0,
- (LE32_IN( p ) & 0xffff)/4.0,
- LE32_IN( p - 2 )/65536.0,
- *(GLuint *)(p - 1) );
- }
- }
-#endif
-#if DO_TEX1 || DO_TEX0 || DO_XYZW
- STRIDE_4F(coord, coord_stride);
-#endif
-
- assert( p + 1 - (CARD32 *)v == 10 );
- }
-}
-
-#if DO_XYZW && DO_RGBA
-
-static GLboolean TAG(check_tex_sizes)( struct gl_context *ctx )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
- /* Force 'missing' texcoords to something valid.
- */
- if (DO_TEX1 && VB->AttribPtr[_TNL_ATTRIB_TEX0] == 0)
- VB->AttribPtr[_TNL_ATTRIB_TEX0] = VB->AttribPtr[_TNL_ATTRIB_TEX1];
-
- if (DO_PTEX)
- return GL_TRUE;
-
- /* No hardware support for projective texture. Can fake it for
- * TEX0 only.
- */
- if ((DO_TEX1 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(1)]->size == 4)) {
- PTEX_FALLBACK();
- return GL_FALSE;
- }
-
- if (DO_TEX0 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(0)]->size == 4) {
- if (DO_TEX1) {
- PTEX_FALLBACK();
- }
- return GL_FALSE;
- }
-
- return GL_TRUE;
-}
-
-
-static void TAG(interp)( struct gl_context *ctx,
- GLfloat t,
- GLuint edst, GLuint eout, GLuint ein,
- GLboolean force_boundary )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLubyte *ddverts = GET_VERTEX_STORE();
- GLuint size = GET_VERTEX_SIZE();
- const GLfloat *dstclip = VB->ClipPtr->data[edst];
- GLfloat w;
- const GLfloat *s = GET_VIEWPORT_MAT();
-
- CARD32 *dst = (CARD32 *)(ddverts + (edst * size));
- CARD32 *in = (CARD32 *)(ddverts + (ein * size));
- CARD32 *out = (CARD32 *)(ddverts + (eout * size));
-
- (void)s;
-
- w = (dstclip[3] == 0.0F) ? 1.0 : (1.0 / dstclip[3]);
-
-#if DO_TEX1
- {
- GLfloat temp;
-#if DO_PTEX
- GLfloat wout = VB->NdcPtr->data[eout][3];
- GLfloat win = VB->NdcPtr->data[ein][3];
- GLfloat qout = LE32_IN_FLOAT( out + 2 ) / wout;
- GLfloat qin = LE32_IN_FLOAT( in + 2 ) / win;
- GLfloat qdst, rqdst;
-
- INTERP_F( t, qdst, qout, qin );
- rqdst = 1.0 / qdst;
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ) * qout, LE32_IN_FLOAT( in ) * qin );
- LE32_OUT_FLOAT( dst, temp*rqdst ); /* VERTEX_?_SECONDARY_S */
- dst++; out++; in++;
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ) * qout, LE32_IN_FLOAT( in ) * qin );
- LE32_OUT_FLOAT( dst, temp*rqdst ); /* VERTEX_?_SECONDARY_T */
- dst++; out++; in++;
-
- LE32_OUT_FLOAT( dst, w*rqdst ); /* VERTEX_?_SECONDARY_W */
- dst++; out++; in++;
-#else /* !DO_PTEX */
-#ifdef MACH64_PREMULT_TEXCOORDS
- GLfloat qout = w / LE32_IN_FLOAT( out + 2 );
- GLfloat qin = w / LE32_IN_FLOAT( in + 2 );
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ) * qout, LE32_IN_FLOAT( in ) * qin );
- LE32_OUT_FLOAT( dst, temp ); /* VERTEX_?_SECONDARY_S */
- dst++; out++; in++;
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ) * qout, LE32_IN_FLOAT( in ) * qin );
- LE32_OUT_FLOAT( dst, temp ); /* VERTEX_?_SECONDARY_T */
- dst++; out++; in++;
-#else /* !MACH64_PREMULT_TEXCOORDS */
- INTERP_F( t, temp, LE32_IN_FLOAT( out ), LE32_IN_FLOAT( in ) );
- LE32_OUT_FLOAT( dst, temp ); /* VERTEX_?_SECONDARY_S */
- dst++; out++; in++;
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ), LE32_IN_FLOAT( in ) );
- LE32_OUT_FLOAT( dst, temp ); /* VERTEX_?_SECONDARY_T */
- dst++; out++; in++;
-#endif /* !MACH64_PREMULT_TEXCOORDS */
- LE32_OUT_FLOAT( dst, w ); /* VERTEX_?_SECONDARY_W */
- dst++; out++; in++;
-#endif /* !DO_PTEX */
- }
-#else /* !DO_TEX1 */
- dst += 3; out += 3; in += 3;
-#endif /* !DO_TEX1 */
-
-#if DO_TEX0
- {
- GLfloat temp;
-#if DO_PTEX
- GLfloat wout = VB->NdcPtr->data[eout][3];
- GLfloat win = VB->NdcPtr->data[ein][3];
- GLfloat qout = LE32_IN_FLOAT( out + 2 ) / wout;
- GLfloat qin = LE32_IN_FLOAT( in + 2 ) / win;
- GLfloat qdst, rqdst;
-
- INTERP_F( t, qdst, qout, qin );
- rqdst = 1.0 / qdst;
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ) * qout, LE32_IN_FLOAT( in ) * qin );
- LE32_OUT_FLOAT( dst, temp*rqdst ); /* VERTEX_?_S */
- dst++; out++; in++;
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ) * qout, LE32_IN_FLOAT( in ) * qin );
- LE32_OUT_FLOAT( dst, temp*rqdst ); /* VERTEX_?_T */
- dst++; out++; in++;
-
- LE32_OUT_FLOAT( dst, w*rqdst ); /* VERTEX_?_W */
- dst++; out++; in++;
-#else /* !DO_PTEX */
-#ifdef MACH64_PREMULT_TEXCOORDS
- GLfloat qout = w / LE32_IN_FLOAT( out + 2 );
- GLfloat qin = w / LE32_IN_FLOAT( in + 2 );
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ) * qout, LE32_IN_FLOAT( in ) * qin );
- LE32_OUT_FLOAT( dst, temp ); /* VERTEX_?_S */
- dst++; out++; in++;
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ) * qout, LE32_IN_FLOAT( in ) * qin );
- LE32_OUT_FLOAT( dst, temp ); /* VERTEX_?_T */
- dst++; out++; in++;
-#else /* !MACH64_PREMULT_TEXCOORDS */
- INTERP_F( t, temp, LE32_IN_FLOAT( out ), LE32_IN_FLOAT( in ) );
- LE32_OUT_FLOAT( dst, temp ); /* VERTEX_?_S */
- dst++; out++; in++;
-
- INTERP_F( t, temp, LE32_IN_FLOAT( out ), LE32_IN_FLOAT( in ) );
- LE32_OUT_FLOAT( dst, temp ); /* VERTEX_?_T */
- dst++; out++; in++;
-#endif /* !MACH64_PREMULT_TEXCOORDS */
- LE32_OUT_FLOAT( dst, w ); /* VERTEX_?_W */
- dst++; out++; in++;
-#endif /* !DO_PTEX */
- }
-#else /* !DO_TEX0 */
- dst += 3; out += 3; in += 3;
-#endif /* !DO_TEX0 */
-
-#if DO_SPEC
- INTERP_UB( t, ((GLubyte *)dst)[0], ((GLubyte *)out)[0], ((GLubyte *)in)[0] ); /* VERTEX_?_SPEC_B */
- INTERP_UB( t, ((GLubyte *)dst)[1], ((GLubyte *)out)[1], ((GLubyte *)in)[1] ); /* VERTEX_?_SPEC_G */
- INTERP_UB( t, ((GLubyte *)dst)[2], ((GLubyte *)out)[2], ((GLubyte *)in)[2] ); /* VERTEX_?_SPEC_R */
-#endif
-
-#if DO_FOG
- INTERP_UB( t, ((GLubyte *)dst)[3], ((GLubyte *)out)[3], ((GLubyte *)in)[3] ); /* VERTEX_?_SPEC_A */
-#endif /* DO_FOG */
-
- dst++; out++; in++;
-
- LE32_OUT( dst, VIEWPORT_Z( dstclip[2] * w ) ); /* VERTEX_?_Z */
- dst++; out++; in++;
-
- INTERP_UB( t, ((GLubyte *)dst)[0], ((GLubyte *)out)[0], ((GLubyte *)in)[0] ); /* VERTEX_?_B */
- INTERP_UB( t, ((GLubyte *)dst)[1], ((GLubyte *)out)[1], ((GLubyte *)in)[1] ); /* VERTEX_?_G */
- INTERP_UB( t, ((GLubyte *)dst)[2], ((GLubyte *)out)[2], ((GLubyte *)in)[2] ); /* VERTEX_?_R */
- INTERP_UB( t, ((GLubyte *)dst)[3], ((GLubyte *)out)[3], ((GLubyte *)in)[3] ); /* VERTEX_?_A */
- dst++; /*out++; in++;*/
-
- LE32_OUT( dst,
- (VIEWPORT_X( dstclip[0] * w ) << 16) | /* VERTEX_?_X */
- (VIEWPORT_Y( dstclip[1] * w ) & 0xffff) ); /* VERTEX_?_Y */
-
- assert( dst + 1 - (CARD32 *)(ddverts + (edst * size)) == 10 );
- assert( in + 2 - (CARD32 *)(ddverts + (ein * size)) == 10 );
- assert( out + 2 - (CARD32 *)(ddverts + (eout * size)) == 10 );
-
- if (MACH64_DEBUG & DEBUG_VERBOSE_PRIMS) {
- fprintf( stderr, "%s: dst vert: %.2f %.2f %.2f %x\n",
- __FUNCTION__,
- (GLshort)(LE32_IN( dst ) >> 16)/4.0,
- (GLshort)(LE32_IN( dst ) & 0xffff)/4.0,
- LE32_IN( dst - 2 )/65536.0,
- *(GLuint *)(dst - 1) );
- }
-}
-
-#endif /* DO_RGBA && DO_XYZW */
-
-
-static void TAG(copy_pv)( struct gl_context *ctx, GLuint edst, GLuint esrc )
-{
-#if DO_SPEC || DO_FOG || DO_RGBA
- LOCALVARS
- GLubyte *verts = GET_VERTEX_STORE();
- GLuint size = GET_VERTEX_SIZE();
- GLuint *dst = (GLuint *)(verts + (edst * size));
- GLuint *src = (GLuint *)(verts + (esrc * size));
-#endif
-
-#if DO_SPEC || DO_FOG
- dst[6] = src[6]; /* VERTEX_?_SPEC_ARGB */
-#endif
-
-#if DO_RGBA
- dst[8] = src[8]; /* VERTEX_?_ARGB */
-#endif
-}
-
-static void TAG(init)( void )
-{
- setup_tab[IND].emit = TAG(emit);
-
-#if DO_XYZW && DO_RGBA
- setup_tab[IND].check_tex_sizes = TAG(check_tex_sizes);
- setup_tab[IND].interp = TAG(interp);
-#endif
-
- setup_tab[IND].copy_pv = TAG(copy_pv);
-
-#if DO_TEX1
- setup_tab[IND].vertex_format = TEX1_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 10;
-#elif DO_TEX0
- setup_tab[IND].vertex_format = TEX0_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 7;
-#elif DO_SPEC || DO_FOG
- setup_tab[IND].vertex_format = NOTEX_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 4;
-#else
- setup_tab[IND].vertex_format = TINY_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 3;
-#endif
-
-}
-
-
-#undef IND
-#undef TAG
diff --git a/src/mesa/drivers/dri/mach64/mach64_reg.h b/src/mesa/drivers/dri/mach64/mach64_reg.h
deleted file mode 100644
index cb944e10230..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_reg.h
+++ /dev/null
@@ -1,406 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#ifndef __MACH64_REG_H__
-#define __MACH64_REG_H__
-
-/*
- * Not sure how this compares with the G200, but the Rage Pro has two
- * banks of registers, with bank 0 at (aperture base + memmap offset - 1KB)
- * and bank 1 at (aperture base + memmap offset - 2KB). But, to send them
- * via DMA, we need to encode them as memory map select rather than physical
- * offsets.
- */
-#define DWMREG0 0x0400
-#define DWMREG0_END 0x07ff
-#define DWMREG1 0x0000
-#define DWMREG1_END 0x03ff
-
-#define ISREG0(r) ( ( (r) >= DWMREG0 ) && ( (r) <= DWMREG0_END ) )
-#define ADRINDEX0(r) ( ((r) - DWMREG0) >> 2 )
-#define ADRINDEX1(r) ( ( ((r) - DWMREG1) >> 2 ) | 0x0100 )
-#define ADRINDEX(r) ( ISREG0(r) ? ADRINDEX0(r) : ADRINDEX1(r) )
-
-#define MMREG0 0x0000
-#define MMREG0_END 0x00ff
-
-#define ISMMREG0(r) ( ( (r) >= MMREG0 ) && ( (r) <= MMREG0_END ) )
-#define MMSELECT0(r) ( ((r)<<2) + DWMREG0 )
-#define MMSELECT1(r) ( ( (((r) & 0xff)<<2) + DWMREG1 ) )
-#define MMSELECT(r) ( ISMMREG0(r) ? MMSELECT0(r) : MMSELECT1(r) )
-
-/* FIXME: If register reads are necessary, we should account for endianess here */
-#define MACH64_BASE(reg) ((CARD32)(mmesa->mach64Screen->mmio.map))
-#define MACH64_ADDR(reg) (MACH64_BASE(reg) + reg)
-
-#define MACH64_DEREF(reg) *(__volatile__ CARD32 *)MACH64_ADDR(reg)
-#define MACH64_READ(reg) MACH64_DEREF(reg)
-
-
-/* ================================================================
- * Registers
- */
-
-#define MACH64_ALPHA_TST_CNTL 0x0550
-# define MACH64_ALPHA_TEST_EN (1 << 0)
-# define MACH64_ALPHA_TEST_MASK (7 << 4)
-# define MACH64_ALPHA_TEST_NEVER (0 << 4)
-# define MACH64_ALPHA_TEST_LESS (1 << 4)
-# define MACH64_ALPHA_TEST_LEQUAL (2 << 4)
-# define MACH64_ALPHA_TEST_EQUAL (3 << 4)
-# define MACH64_ALPHA_TEST_GEQUAL (4 << 4)
-# define MACH64_ALPHA_TEST_GREATER (5 << 4)
-# define MACH64_ALPHA_TEST_NOTEQUAL (6 << 4)
-# define MACH64_ALPHA_TEST_ALWAYS (7 << 4)
-# define MACH64_ALPHA_MOD_MSB (1 << 7)
-# define MACH64_ALPHA_DST_MASK (7 << 8)
-# define MACH64_ALPHA_DST_ZERO (0 << 8)
-# define MACH64_ALPHA_DST_ONE (1 << 8)
-# define MACH64_ALPHA_DST_SRCALPHA (4 << 8)
-# define MACH64_ALPHA_DST_INVSRCALPHA (5 << 8)
-# define MACH64_ALPHA_DST_DSTALPHA (6 << 8)
-# define MACH64_ALPHA_DST_INVDSTALPHA (7 << 8)
-# define MACH64_ALPHA_TST_SRC_TEXEL (0 << 12)
-# define MACH64_ALPHA_TST_SRC_SRCALPHA (1 << 12)
-# define MACH64_REF_ALPHA_MASK (0xff << 16)
-# define MACH64_REF_ALPHA_SHIFT 16
-# define MACH64_COMPOSITE_SHADOW (1 << 30)
-# define MACH64_SPECULAR_LIGHT_EN (1 << 31)
-
-#define MACH64_BUS_CNTL 0x04a0
-# define MACH64_BUS_MSTR_RESET (1 << 1)
-# define MACH64_BUS_FLUSH_BUF (1 << 2)
-# define MACH64_BUS_MASTER_DIS (1 << 6)
-# define MACH64_BUS_EXT_REG_EN (1 << 27)
-
-#define MACH64_COMPOSITE_SHADOW_ID 0x0798
-
-#define MACH64_CLR_CMP_CLR 0x0700
-#define MACH64_CLR_CMP_CNTL 0x0708
-#define MACH64_CLR_CMP_MASK 0x0704
-
-#define MACH64_DP_BKGD_CLR 0x06c0
-#define MACH64_DP_FOG_CLR 0x06c4
-#define MACH64_DP_FGRD_BKGD_CLR 0x06e0
-#define MACH64_DP_FRGD_CLR 0x06c4
-#define MACH64_DP_FGRD_CLR_MIX 0x06dc
-
-#define MACH64_DP_MIX 0x06d4
-# define BKGD_MIX_NOT_D (0 << 0)
-# define BKGD_MIX_ZERO (1 << 0)
-# define BKGD_MIX_ONE (2 << 0)
-# define MACH64_BKGD_MIX_D (3 << 0)
-# define BKGD_MIX_NOT_S (4 << 0)
-# define BKGD_MIX_D_XOR_S (5 << 0)
-# define BKGD_MIX_NOT_D_XOR_S (6 << 0)
-# define MACH64_BKGD_MIX_S (7 << 0)
-# define BKGD_MIX_NOT_D_OR_NOT_S (8 << 0)
-# define BKGD_MIX_D_OR_NOT_S (9 << 0)
-# define BKGD_MIX_NOT_D_OR_S (10 << 0)
-# define BKGD_MIX_D_OR_S (11 << 0)
-# define BKGD_MIX_D_AND_S (12 << 0)
-# define BKGD_MIX_NOT_D_AND_S (13 << 0)
-# define BKGD_MIX_D_AND_NOT_S (14 << 0)
-# define BKGD_MIX_NOT_D_AND_NOT_S (15 << 0)
-# define BKGD_MIX_D_PLUS_S_DIV2 (23 << 0)
-# define FRGD_MIX_NOT_D (0 << 16)
-# define FRGD_MIX_ZERO (1 << 16)
-# define FRGD_MIX_ONE (2 << 16)
-# define FRGD_MIX_D (3 << 16)
-# define FRGD_MIX_NOT_S (4 << 16)
-# define FRGD_MIX_D_XOR_S (5 << 16)
-# define FRGD_MIX_NOT_D_XOR_S (6 << 16)
-# define MACH64_FRGD_MIX_S (7 << 16)
-# define FRGD_MIX_NOT_D_OR_NOT_S (8 << 16)
-# define FRGD_MIX_D_OR_NOT_S (9 << 16)
-# define FRGD_MIX_NOT_D_OR_S (10 << 16)
-# define FRGD_MIX_D_OR_S (11 << 16)
-# define FRGD_MIX_D_AND_S (12 << 16)
-# define FRGD_MIX_NOT_D_AND_S (13 << 16)
-# define FRGD_MIX_D_AND_NOT_S (14 << 16)
-# define FRGD_MIX_NOT_D_AND_NOT_S (15 << 16)
-# define FRGD_MIX_D_PLUS_S_DIV2 (23 << 16)
-
-#define MACH64_DP_PIX_WIDTH 0x06d0
-# define MACH64_COMPOSITE_PIX_WIDTH_MASK (0xf << 4)
-# define MACH64_HOST_TRIPLE_ENABLE (1 << 13)
-# define MACH64_BYTE_ORDER_MSB_TO_LSB (0 << 24)
-# define MACH64_BYTE_ORDER_LSB_TO_MSB (1 << 24)
-# define MACH64_SCALE_PIX_WIDTH_MASK (0xf << 28)
-
-#define MACH64_DP_SRC 0x06d8
-# define MACH64_BKGD_SRC_BKGD_CLR (0 << 0)
-# define MACH64_BKGD_SRC_FRGD_CLR (1 << 0)
-# define MACH64_BKGD_SRC_HOST (2 << 0)
-# define MACH64_BKGD_SRC_BLIT (3 << 0)
-# define MACH64_BKGD_SRC_PATTERN (4 << 0)
-# define MACH64_BKGD_SRC_3D (5 << 0)
-# define MACH64_FRGD_SRC_BKGD_CLR (0 << 8)
-# define MACH64_FRGD_SRC_FRGD_CLR (1 << 8)
-# define MACH64_FRGD_SRC_HOST (2 << 8)
-# define MACH64_FRGD_SRC_BLIT (3 << 8)
-# define MACH64_FRGD_SRC_PATTERN (4 << 8)
-# define MACH64_FRGD_SRC_3D (5 << 8)
-# define MACH64_MONO_SRC_ONE (0 << 16)
-# define MACH64_MONO_SRC_PATTERN (1 << 16)
-# define MACH64_MONO_SRC_HOST (2 << 16)
-# define MACH64_MONO_SRC_BLIT (3 << 16)
-
-#define MACH64_DP_WRITE_MASK 0x06c8
-
-#define MACH64_DST_CNTL 0x0530
-# define MACH64_DST_X_RIGHT_TO_LEFT (0 << 0)
-# define MACH64_DST_X_LEFT_TO_RIGHT (1 << 0)
-# define MACH64_DST_Y_BOTTOM_TO_TOP (0 << 1)
-# define MACH64_DST_Y_TOP_TO_BOTTOM (1 << 1)
-# define MACH64_DST_X_MAJOR (0 << 2)
-# define MACH64_DST_Y_MAJOR (1 << 2)
-# define MACH64_DST_X_TILE (1 << 3)
-# define MACH64_DST_Y_TILE (1 << 4)
-# define MACH64_DST_LAST_PEL (1 << 5)
-# define MACH64_DST_POLYGON_ENABLE (1 << 6)
-# define MACH64_DST_24_ROTATION_ENABLE (1 << 7)
-
-#define MACH64_DST_HEIGHT_WIDTH 0x0518
-#define MACH64_DST_OFF_PITCH 0x0500
-#define MACH64_DST_WIDTH_HEIGHT 0x06ec
-#define MACH64_DST_X_Y 0x06e8
-#define MACH64_DST_Y_X 0x050c
-
-#define MACH64_FIFO_STAT 0x0710
-# define MACH64_FIFO_SLOT_MASK 0x0000ffff
-# define MACH64_FIFO_ERR (1 << 31)
-
-#define MACH64_GEN_TEST_CNTL 0x04d0
-#define MACH64_GUI_CMDFIFO_DEBUG 0x0170
-#define MACH64_GUI_CMDFIFO_DATA 0x0174
-#define MACH64_GUI_CNTL 0x0178
-#define MACH64_GUI_STAT 0x0738
-# define MACH64_GUI_ACTIVE (1 << 0)
-#define MACH64_GUI_TRAJ_CNTL 0x0730
-
-#define MACH64_HOST_CNTL 0x0640
-#define MACH64_HOST_DATA0 0x0600
-#define MACH64_HW_DEBUG 0x047c
-
-#define MACH64_ONE_OVER_AREA 0x029c
-#define MACH64_ONE_OVER_AREA_UC 0x0300
-
-#define MACH64_PAT_REG0 0x0680
-#define MACH64_PAT_REG1 0x0684
-
-#define MACH64_SC_LEFT_RIGHT 0x06a8
-#define MACH64_SC_TOP_BOTTOM 0x06b4
-#define MACH64_SCALE_3D_CNTL 0x05fc
-# define MACH64_SCALE_PIX_EXPAND_ZERO_EXTEND (0 << 0)
-# define MACH64_SCALE_PIX_EXPAND_DYNAMIC_RANGE (1 << 0)
-# define MACH64_SCALE_DITHER_ERROR_DIFFUSE (0 << 1)
-# define MACH64_SCALE_DITHER_2D_TABLE (1 << 1)
-# define MACH64_DITHER_EN (1 << 2)
-# define MACH64_DITHER_INIT_CURRENT (O << 3)
-# define MACH64_DITHER_INIT_RESET (1 << 3)
-# define MACH64_ROUND_EN (1 << 4)
-# define MACH64_TEX_CACHE_DIS (1 << 5)
-# define MACH64_SCALE_3D_FCN_MASK (3 << 6)
-# define MACH64_SCALE_3D_FCN_NOP (0 << 6)
-# define MACH64_SCALE_3D_FCN_SCALE (1 << 6)
-# define MACH64_SCALE_3D_FCN_TEXTURE (2 << 6)
-# define MACH64_SCALE_3D_FCN_SHADE (3 << 6)
-# define MACH64_TEXTURE_DISABLE (1 << 6)
-# define MACH64_EDGE_ANTI_ALIAS (1 << 8)
-# define MACH64_TEX_CACHE_SPLIT (1 << 9)
-# define MACH64_APPLE_YUV_MODE (1 << 10)
-# define MACH64_ALPHA_FOG_EN_MASK (3 << 11)
-# define MACH64_ALPHA_FOG_DIS (0 << 11)
-# define MACH64_ALPHA_FOG_EN_ALPHA (1 << 11)
-# define MACH64_ALPHA_FOG_EN_FOG (2 << 11)
-# define MACH64_ALPHA_BLEND_SAT (1 << 13)
-# define MACH64_RED_DITHER_MAX (1 << 14)
-# define MACH64_SIGNED_DST_CLAMP (1 << 15)
-# define MACH64_ALPHA_BLEND_SRC_MASK (7 << 16)
-# define MACH64_ALPHA_BLEND_SRC_ZERO (0 << 16)
-# define MACH64_ALPHA_BLEND_SRC_ONE (1 << 16)
-# define MACH64_ALPHA_BLEND_SRC_DSTCOLOR (2 << 16)
-# define MACH64_ALPHA_BLEND_SRC_INVDSTCOLOR (3 << 16)
-# define MACH64_ALPHA_BLEND_SRC_SRCALPHA (4 << 16)
-# define MACH64_ALPHA_BLEND_SRC_INVSRCALPHA (5 << 16)
-# define MACH64_ALPHA_BLEND_SRC_DSTALPHA (6 << 16)
-# define MACH64_ALPHA_BLEND_SRC_INVDSTALPHA (7 << 16)
-# define MACH64_ALPHA_BLEND_DST_MASK (7 << 19)
-# define MACH64_ALPHA_BLEND_DST_ZERO (0 << 19)
-# define MACH64_ALPHA_BLEND_DST_ONE (1 << 19)
-# define MACH64_ALPHA_BLEND_DST_SRCCOLOR (2 << 19)
-# define MACH64_ALPHA_BLEND_DST_INVSRCCOLOR (3 << 19)
-# define MACH64_ALPHA_BLEND_DST_SRCALPHA (4 << 19)
-# define MACH64_ALPHA_BLEND_DST_INVSRCALPHA (5 << 19)
-# define MACH64_ALPHA_BLEND_DST_DSTALPHA (6 << 19)
-# define MACH64_ALPHA_BLEND_DST_INVDSTALPHA (7 << 19)
-# define MACH64_TEX_LIGHT_FCN_MASK (3 << 22)
-# define MACH64_TEX_LIGHT_FCN_REPLACE (0 << 22)
-# define MACH64_TEX_LIGHT_FCN_MODULATE (1 << 22)
-# define MACH64_TEX_LIGHT_FCN_ALPHA_DECAL (2 << 22)
-# define MACH64_MIP_MAP_DISABLE (1 << 24)
-# define MACH64_BILINEAR_TEX_EN (1 << 25)
-# define MACH64_TEX_BLEND_FCN_MASK (3 << 26)
-# define MACH64_TEX_BLEND_FCN_NEAREST (0 << 26)
-# define MACH64_TEX_BLEND_FCN_LINEAR (2 << 26)
-# define MACH64_TEX_BLEND_FCN_TRILINEAR (3 << 26)
-# define MACH64_TEX_AMASK_AEN (1 << 28)
-# define MACH64_TEX_AMASK_BLEND_EDGE (1 << 29)
-# define MACH64_TEX_MAP_AEN (1 << 30)
-# define MACH64_SRC_3D_HOST_FIFO (1 << 31)
-#define MACH64_SCRATCH_REG0 0x0480
-#define MACH64_SCRATCH_REG1 0x0484
-#define MACH64_SECONDARY_TEX_OFF 0x0778
-#define MACH64_SETUP_CNTL 0x0304
-# define MACH64_DONT_START_TRI (1 << 0)
-# define MACH64_DONT_START_ANY (1 << 2)
-# define MACH64_FLAT_SHADE_MASK (3 << 3)
-# define MACH64_FLAT_SHADE_OFF (0 << 3)
-# define MACH64_FLAT_SHADE_VERTEX_1 (1 << 3)
-# define MACH64_FLAT_SHADE_VERTEX_2 (2 << 3)
-# define MACH64_FLAT_SHADE_VERTEX_3 (3 << 3)
-# define MACH64_SOLID_MODE_OFF (0 << 5)
-# define MACH64_SOLID_MODE_ON (1 << 5)
-# define MACH64_LOG_MAX_INC_ADJ (1 << 6)
-# define MACH64_SET_UP_CONTINUE (1 << 31)
-#define MACH64_SRC_CNTL 0x05b4
-#define MACH64_SRC_HEIGHT1 0x0594
-#define MACH64_SRC_HEIGHT2 0x05ac
-#define MACH64_SRC_HEIGHT1_WIDTH1 0x0598
-#define MACH64_SRC_HEIGHT2_WIDTH2 0x05b0
-#define MACH64_SRC_OFF_PITCH 0x0580
-#define MACH64_SRC_WIDTH1 0x0590
-#define MACH64_SRC_Y_X 0x058c
-
-#define MACH64_TEX_0_OFF 0x05c0
-#define MACH64_TEX_CNTL 0x0774
-# define MACH64_LOD_BIAS_SHIFT 0
-# define MACH64_LOD_BIAS_MASK (0xf << 0)
-# define MACH64_COMP_FACTOR_SHIFT 4
-# define MACH64_COMP_FACTOR_MASK (0xf << 4)
-# define MACH64_TEXTURE_COMPOSITE (1 << 8)
-# define MACH64_COMP_COMBINE_BLEND (0 << 9)
-# define MACH64_COMP_COMBINE_MODULATE (1 << 9)
-# define MACH64_COMP_BLEND_NEAREST (0 << 11)
-# define MACH64_COMP_BLEND_BILINEAR (1 << 11)
-# define MACH64_COMP_FILTER_NEAREST (0 << 12)
-# define MACH64_COMP_FILTER_BILINEAR (1 << 12)
-# define MACH64_COMP_ALPHA (1 << 13)
-# define MACH64_TEXTURE_TILING (1 << 14)
-# define MACH64_COMPOSITE_TEX_TILING (1 << 15)
-# define MACH64_TEX_COLLISION_DISABLE (1 << 16)
-# define MACH64_TEXTURE_CLAMP_S (1 << 17)
-# define MACH64_TEXTURE_CLAMP_T (1 << 18)
-# define MACH64_TEX_ST_MULT_W (0 << 19)
-# define MACH64_TEX_ST_DIRECT (1 << 19)
-# define MACH64_TEX_SRC_LOCAL (0 << 20)
-# define MACH64_TEX_SRC_AGP (1 << 20)
-# define MACH64_TEX_UNCOMPRESSED (0 << 21)
-# define MACH64_TEX_VQ_COMPRESSED (1 << 21)
-# define MACH64_COMP_TEX_UNCOMPRESSED (0 << 22)
-# define MACH64_COMP_TEX_VQ_COMPRESSED (1 << 22)
-# define MACH64_TEX_CACHE_FLUSH (1 << 23)
-# define MACH64_SEC_TEX_CLAMP_S (1 << 24)
-# define MACH64_SEC_TEX_CLAMP_T (1 << 25)
-# define MACH64_TEX_WRAP_S (1 << 28)
-# define MACH64_TEX_WRAP_T (1 << 29)
-# define MACH64_TEX_CACHE_SIZE_4K (1 << 30)
-# define MACH64_TEX_CACHE_SIZE_2K (1 << 30)
-# define MACH64_SECONDARY_STW (1 << 31)
-#define MACH64_TEX_PALETTE 0x077c
-#define MACH64_TEX_PALETTE_INDEX 0x0740
-#define MACH64_TEX_SIZE_PITCH 0x0770
-
-#define MACH64_VERTEX_1_ARGB 0x0254
-#define MACH64_VERTEX_1_S 0x0240
-#define MACH64_VERTEX_1_SECONDARY_S 0x0328
-#define MACH64_VERTEX_1_SECONDARY_T 0x032c
-#define MACH64_VERTEX_1_SECONDARY_W 0x0330
-#define MACH64_VERTEX_1_SPEC_ARGB 0x024c
-#define MACH64_VERTEX_1_T 0x0244
-#define MACH64_VERTEX_1_W 0x0248
-#define MACH64_VERTEX_1_X_Y 0x0258
-#define MACH64_VERTEX_1_Z 0x0250
-#define MACH64_VERTEX_2_ARGB 0x0274
-#define MACH64_VERTEX_2_S 0x0260
-#define MACH64_VERTEX_2_SECONDARY_S 0x0334
-#define MACH64_VERTEX_2_SECONDARY_T 0x0338
-#define MACH64_VERTEX_2_SECONDARY_W 0x033c
-#define MACH64_VERTEX_2_SPEC_ARGB 0x026c
-#define MACH64_VERTEX_2_T 0x0264
-#define MACH64_VERTEX_2_W 0x0268
-#define MACH64_VERTEX_2_X_Y 0x0278
-#define MACH64_VERTEX_2_Z 0x0270
-#define MACH64_VERTEX_3_ARGB 0x0294
-#define MACH64_VERTEX_3_S 0x0280
-#define MACH64_VERTEX_3_SECONDARY_S 0x02a0
-#define MACH64_VERTEX_3_SECONDARY_T 0x02a4
-#define MACH64_VERTEX_3_SECONDARY_W 0x02a8
-#define MACH64_VERTEX_3_SPEC_ARGB 0x028c
-#define MACH64_VERTEX_3_T 0x0284
-#define MACH64_VERTEX_3_W 0x0288
-#define MACH64_VERTEX_3_X_Y 0x0298
-#define MACH64_VERTEX_3_Z 0x0290
-
-#define MACH64_Z_CNTL 0x054c
-# define MACH64_Z_EN (1 << 0)
-# define MACH64_Z_SRC_2D (1 << 1)
-# define MACH64_Z_TEST_MASK (7 << 4)
-# define MACH64_Z_TEST_NEVER (0 << 4)
-# define MACH64_Z_TEST_LESS (1 << 4)
-# define MACH64_Z_TEST_LEQUAL (2 << 4)
-# define MACH64_Z_TEST_EQUAL (3 << 4)
-# define MACH64_Z_TEST_GEQUAL (4 << 4)
-# define MACH64_Z_TEST_GREATER (5 << 4)
-# define MACH64_Z_TEST_NOTEQUAL (6 << 4)
-# define MACH64_Z_TEST_ALWAYS (7 << 4)
-# define MACH64_Z_MASK_EN (1 << 8)
-#define MACH64_Z_OFF_PITCH 0x0548
-
-
-
-#define MACH64_DATATYPE_CI8 2
-#define MACH64_DATATYPE_ARGB1555 3
-#define MACH64_DATATYPE_RGB565 4
-#define MACH64_DATATYPE_ARGB8888 6
-#define MACH64_DATATYPE_RGB332 7
-#define MACH64_DATATYPE_Y8 8
-#define MACH64_DATATYPE_RGB8 9
-#define MACH64_DATATYPE_VYUY422 11
-#define MACH64_DATATYPE_YVYU422 12
-#define MACH64_DATATYPE_AYUV444 14
-#define MACH64_DATATYPE_ARGB4444 15
-
-#define MACH64_LAST_FRAME_REG MACH64_PAT_REG0
-#define MACH64_LAST_DISPATCH_REG MACH64_PAT_REG1
-
-#endif /* __MACH64_REG_H__ */
diff --git a/src/mesa/drivers/dri/mach64/mach64_screen.c b/src/mesa/drivers/dri/mach64/mach64_screen.c
deleted file mode 100644
index 956bccbcd6c..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_screen.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * Jos�Fonseca
- */
-
-#include "mach64_context.h"
-#include "mach64_ioctl.h"
-#include "mach64_span.h"
-
-#include "main/context.h"
-#include "main/imports.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-
-#include "utils.h"
-#include "vblank.h"
-
-#include "GL/internal/dri_interface.h"
-
-/* Mach64 configuration
- */
-#include "xmlpool.h"
-
-PUBLIC const char __driConfigOptions[] =
-DRI_CONF_BEGIN
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_DEBUG
- DRI_CONF_NO_RAST(false)
-#if ENABLE_PERF_BOXES
- DRI_CONF_PERFORMANCE_BOXES(false)
-#endif
- DRI_CONF_SECTION_END
-DRI_CONF_END;
-#if ENABLE_PERF_BOXES
-static const GLuint __driNConfigOptions = 3;
-#else
-static const GLuint __driNConfigOptions = 2;
-#endif
-
-static const __DRIconfig **
-mach64FillInModes( __DRIscreen *psp,
- unsigned pixel_bits, unsigned depth_bits,
- unsigned stencil_bits, GLboolean have_back_buffer )
-{
- __DRIconfig **configs;
- struct gl_config * m;
- GLenum fb_format;
- GLenum fb_type;
- unsigned depth_buffer_factor;
- unsigned back_buffer_factor;
- unsigned i;
-
- /* Right now GLX_SWAP_COPY_OML isn't supported, but it would be easy
- * enough to add support. Basically, if a context is created with an
- * fbconfig where the swap method is GLX_SWAP_COPY_OML, pageflipping
- * will never be used.
- */
- static const GLenum back_buffer_modes[] = {
- GLX_NONE, GLX_SWAP_UNDEFINED_OML /*, GLX_SWAP_COPY_OML */
- };
-
- uint8_t depth_bits_array[2];
- uint8_t stencil_bits_array[2];
- uint8_t msaa_samples_array[1];
-
- depth_bits_array[0] = depth_bits;
- depth_bits_array[1] = depth_bits;
-
- /* Just like with the accumulation buffer, always provide some modes
- * with a stencil buffer. It will be a sw fallback, but some apps won't
- * care about that.
- */
- stencil_bits_array[0] = 0;
- stencil_bits_array[1] = (stencil_bits == 0) ? 8 : stencil_bits;
-
- msaa_samples_array[0] = 0;
-
- depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 2 : 1;
- back_buffer_factor = (have_back_buffer) ? 2 : 1;
-
- if (pixel_bits == 16) {
- fb_format = GL_RGB;
- fb_type = GL_UNSIGNED_SHORT_5_6_5;
- }
- else {
- fb_format = GL_BGRA;
- fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- configs = driCreateConfigs(fb_format, fb_type,
- depth_bits_array, stencil_bits_array,
- depth_buffer_factor, back_buffer_modes,
- back_buffer_factor,
- msaa_samples_array, 1, GL_TRUE);
- if (configs == NULL) {
- fprintf(stderr, "[%s:%u] Error creating FBConfig!\n",
- __func__, __LINE__);
- return NULL;
- }
-
- /* Mark the visual as slow if there are "fake" stencil bits.
- */
- for (i = 0; configs[i]; i++) {
- m = &configs[i]->modes;
- if ((m->stencilBits != 0) && (m->stencilBits != stencil_bits)) {
- m->visualRating = GLX_SLOW_CONFIG;
- }
- }
-
- return (const __DRIconfig **) configs;
-}
-
-
-/* Create the device specific screen private data struct.
- */
-static mach64ScreenRec *
-mach64CreateScreen( __DRIscreen *sPriv )
-{
- mach64ScreenPtr mach64Screen;
- ATIDRIPtr serverInfo = (ATIDRIPtr)sPriv->pDevPriv;
- int i;
-
- if (sPriv->devPrivSize != sizeof(ATIDRIRec)) {
- fprintf(stderr,"\nERROR! sizeof(ATIDRIRec) does not match passed size from device driver\n");
- return GL_FALSE;
- }
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_DRI )
- fprintf( stderr, "%s\n", __FUNCTION__ );
-
- /* Allocate the private area */
- mach64Screen = (mach64ScreenPtr) CALLOC( sizeof(*mach64Screen) );
- if ( !mach64Screen ) return NULL;
-
- /* parse information in __driConfigOptions */
- driParseOptionInfo (&mach64Screen->optionCache,
- __driConfigOptions, __driNConfigOptions);
-
- mach64Screen->IsPCI = serverInfo->IsPCI;
-
- {
- drm_mach64_getparam_t gp;
- int ret;
-
- gp.param = MACH64_PARAM_IRQ_NR;
- gp.value = (void *) &mach64Screen->irq;
-
- ret = drmCommandWriteRead( sPriv->fd, DRM_MACH64_GETPARAM,
- &gp, sizeof(gp));
- if (ret) {
- fprintf(stderr, "DRM_MACH64_GETPARAM (MACH64_PARAM_IRQ_NR): %d\n", ret);
- FREE( mach64Screen );
- return NULL;
- }
- }
-
- mach64Screen->mmio.handle = serverInfo->regs;
- mach64Screen->mmio.size = serverInfo->regsSize;
- if ( drmMap( sPriv->fd,
- mach64Screen->mmio.handle,
- mach64Screen->mmio.size,
- (drmAddressPtr)&mach64Screen->mmio.map ) != 0 ) {
- FREE( mach64Screen );
- return NULL;
- }
-
- mach64Screen->buffers = drmMapBufs( sPriv->fd );
- if ( !mach64Screen->buffers ) {
- drmUnmap( (drmAddress)mach64Screen->mmio.map,
- mach64Screen->mmio.size );
- FREE( mach64Screen );
- return NULL;
- }
-
- if ( !mach64Screen->IsPCI ) {
- mach64Screen->agpTextures.handle = serverInfo->agp;
- mach64Screen->agpTextures.size = serverInfo->agpSize;
- if ( drmMap( sPriv->fd,
- mach64Screen->agpTextures.handle,
- mach64Screen->agpTextures.size,
- (drmAddressPtr)&mach64Screen->agpTextures.map ) ) {
- drmUnmapBufs( mach64Screen->buffers );
- drmUnmap( (drmAddress)mach64Screen->mmio.map, mach64Screen->mmio.size );
- FREE( mach64Screen );
- return NULL;
- }
- }
-
- mach64Screen->AGPMode = serverInfo->AGPMode;
-
- mach64Screen->chipset = serverInfo->chipset;
- mach64Screen->width = serverInfo->width;
- mach64Screen->height = serverInfo->height;
- mach64Screen->mem = serverInfo->mem;
- mach64Screen->cpp = serverInfo->cpp;
-
- mach64Screen->frontOffset = serverInfo->frontOffset;
- mach64Screen->frontPitch = serverInfo->frontPitch;
- mach64Screen->backOffset = serverInfo->backOffset;
- mach64Screen->backPitch = serverInfo->backPitch;
- mach64Screen->depthOffset = serverInfo->depthOffset;
- mach64Screen->depthPitch = serverInfo->depthPitch;
-
- mach64Screen->texOffset[MACH64_CARD_HEAP] = serverInfo->textureOffset;
- mach64Screen->texSize[MACH64_CARD_HEAP] = serverInfo->textureSize;
- mach64Screen->logTexGranularity[MACH64_CARD_HEAP] =
- serverInfo->logTextureGranularity;
-
- if ( mach64Screen->IsPCI ) {
- mach64Screen->numTexHeaps = MACH64_NR_TEX_HEAPS - 1;
- mach64Screen->firstTexHeap = MACH64_CARD_HEAP;
- mach64Screen->texOffset[MACH64_AGP_HEAP] = 0;
- mach64Screen->texSize[MACH64_AGP_HEAP] = 0;
- mach64Screen->logTexGranularity[MACH64_AGP_HEAP] = 0;
- } else {
- if (serverInfo->textureSize > 0) {
- mach64Screen->numTexHeaps = MACH64_NR_TEX_HEAPS;
- mach64Screen->firstTexHeap = MACH64_CARD_HEAP;
- } else {
- mach64Screen->numTexHeaps = MACH64_NR_TEX_HEAPS - 1;
- mach64Screen->firstTexHeap = MACH64_AGP_HEAP;
- }
- mach64Screen->texOffset[MACH64_AGP_HEAP] = serverInfo->agpTextureOffset;
- mach64Screen->texSize[MACH64_AGP_HEAP] = serverInfo->agpSize;
- mach64Screen->logTexGranularity[MACH64_AGP_HEAP] = serverInfo->logAgpTextureGranularity;
- }
-
- mach64Screen->driScreen = sPriv;
-
- i = 0;
- if ( mach64Screen->irq != 0 ) {
- mach64Screen->extensions[i++] = &driSwapControlExtension.base;
- mach64Screen->extensions[i++] = &driMediaStreamCounterExtension.base;
- }
- mach64Screen->extensions[i++] = NULL;
- sPriv->extensions = mach64Screen->extensions;
-
- return mach64Screen;
-}
-
-/* Destroy the device specific screen private data struct.
- */
-static void
-mach64DestroyScreen( __DRIscreen *driScreen )
-{
- mach64ScreenRec *mach64Screen = (mach64ScreenRec *) driScreen->private;
-
- if ( !mach64Screen )
- return;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_DRI )
- fprintf( stderr, "%s\n", __FUNCTION__ );
-
- if ( !mach64Screen->IsPCI ) {
- drmUnmap( (drmAddress)mach64Screen->agpTextures.map,
- mach64Screen->agpTextures.size );
- }
-
- drmUnmapBufs( mach64Screen->buffers );
- drmUnmap( (drmAddress)mach64Screen->mmio.map, mach64Screen->mmio.size );
-
- FREE( mach64Screen );
- driScreen->private = NULL;
-}
-
-
-/* Create and initialize the Mesa and driver specific pixmap buffer
- * data.
- */
-static GLboolean
-mach64CreateBuffer( __DRIscreen *driScrnPriv,
- __DRIdrawable *driDrawPriv,
- const struct gl_config *mesaVis,
- GLboolean isPixmap )
-{
- mach64ScreenPtr screen = (mach64ScreenPtr) driScrnPriv->private;
-
- if (isPixmap) {
- return GL_FALSE; /* not implemented */
- }
- else {
- struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
-
- {
- driRenderbuffer *frontRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- NULL,
- screen->cpp,
- screen->frontOffset, screen->frontPitch,
- driDrawPriv);
- mach64SetSpanFunctions(frontRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
- }
-
- if (mesaVis->doubleBufferMode) {
- driRenderbuffer *backRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- NULL,
- screen->cpp,
- screen->backOffset, screen->backPitch,
- driDrawPriv);
- mach64SetSpanFunctions(backRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
- }
-
- if (mesaVis->depthBits == 16) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z16,
- NULL, screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- mach64SetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
- else if (mesaVis->depthBits == 24) {
- /* XXX I don't think 24-bit Z is supported - so this isn't used */
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z24_S8,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- mach64SetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
-
- _mesa_add_soft_renderbuffers(fb,
- GL_FALSE, /* color */
- GL_FALSE, /* depth */
- mesaVis->stencilBits > 0,
- mesaVis->accumRedBits > 0,
- GL_FALSE, /* alpha */
- GL_FALSE /* aux */);
- driDrawPriv->driverPrivate = (void *) fb;
-
- return (driDrawPriv->driverPrivate != NULL);
- }
-}
-
-
-static void
-mach64DestroyBuffer(__DRIdrawable *driDrawPriv)
-{
- _mesa_reference_framebuffer((struct gl_framebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-
-/* Copy the back color buffer to the front color buffer */
-static void
-mach64SwapBuffers(__DRIdrawable *dPriv)
-{
- if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
- mach64ContextPtr mmesa;
- struct gl_context *ctx;
- mmesa = (mach64ContextPtr) dPriv->driContextPriv->driverPrivate;
- ctx = mmesa->glCtx;
- if (ctx->Visual.doubleBufferMode) {
- _mesa_notifySwapBuffers( ctx ); /* flush pending rendering comands */
- mach64CopyBuffer( dPriv );
- }
- }
- else {
- /* XXX this shouldn't be an error but we can't handle it for now */
- _mesa_problem(NULL, "%s: drawable has no context!", __FUNCTION__);
- }
-}
-
-
-/* Initialize the driver specific screen private data.
- */
-static GLboolean
-mach64InitDriver( __DRIscreen *driScreen )
-{
- driScreen->private = (void *) mach64CreateScreen( driScreen );
-
- if ( !driScreen->private ) {
- mach64DestroyScreen( driScreen );
- return GL_FALSE;
- }
-
- return GL_TRUE;
-}
-
-/**
- * This is the driver specific part of the createNewScreen entry point.
- *
- * \todo maybe fold this into intelInitDriver
- *
- * \return the struct gl_config supported by this driver
- */
-static const __DRIconfig **
-mach64InitScreen(__DRIscreen *psp)
-{
- static const __DRIversion ddx_expected = { 6, 4, 0 };
- static const __DRIversion dri_expected = { 4, 0, 0 };
- static const __DRIversion drm_expected = { 2, 0, 0 };
- ATIDRIPtr dri_priv = (ATIDRIPtr) psp->pDevPriv;
-
- if ( ! driCheckDriDdxDrmVersions2( "Mach64",
- &psp->dri_version, & dri_expected,
- &psp->ddx_version, & ddx_expected,
- &psp->drm_version, & drm_expected ) ) {
- return NULL;
- }
-
- if (!mach64InitDriver(psp))
- return NULL;
-
- return mach64FillInModes( psp, dri_priv->cpp * 8, 16, 0, 1);
-}
-
-const struct __DriverAPIRec driDriverAPI = {
- .InitScreen = mach64InitScreen,
- .DestroyScreen = mach64DestroyScreen,
- .CreateContext = mach64CreateContext,
- .DestroyContext = mach64DestroyContext,
- .CreateBuffer = mach64CreateBuffer,
- .DestroyBuffer = mach64DestroyBuffer,
- .SwapBuffers = mach64SwapBuffers,
- .MakeCurrent = mach64MakeCurrent,
- .UnbindContext = mach64UnbindContext,
- .GetSwapInfo = NULL,
- .GetDrawableMSC = driDrawableGetMSC32,
- .WaitForMSC = driWaitForMSC32,
- .WaitForSBC = NULL,
- .SwapBuffersMSC = NULL
-};
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
- &driCoreExtension.base,
- &driLegacyExtension.base,
- NULL
-};
diff --git a/src/mesa/drivers/dri/mach64/mach64_screen.h b/src/mesa/drivers/dri/mach64/mach64_screen.h
deleted file mode 100644
index 1966809c03c..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_screen.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#ifndef __MACH64_SCREEN_H__
-#define __MACH64_SCREEN_H__
-
-#include "xmlconfig.h"
-
-typedef struct {
- drm_handle_t handle; /* Handle to the DRM region */
- drmSize size; /* Size of the DRM region */
- drmAddress *map; /* Mapping of the DRM region */
-} mach64RegionRec, *mach64RegionPtr;
-
-typedef struct {
- int chipset;
- int width;
- int height;
- int mem;
- int cpp;
-
- unsigned int frontOffset;
- unsigned int frontPitch;
- unsigned int backOffset;
- unsigned int backPitch;
-
- unsigned int depthOffset;
- unsigned int depthPitch;
-
- int IsPCI;
- int AGPMode;
- unsigned int irq; /* IRQ number (0 means none) */
-
- /* Shared Texture data */
- int firstTexHeap, numTexHeaps;
- int texOffset[MACH64_NR_TEX_HEAPS];
- int texSize[MACH64_NR_TEX_HEAPS];
- int logTexGranularity[MACH64_NR_TEX_HEAPS];
-
- mach64RegionRec mmio;
- mach64RegionRec agpTextures;
-
- drmBufMapPtr buffers;
-
- __DRIscreen *driScreen;
-
- driOptionCache optionCache;
-
- const __DRIextension *extensions[4];
-} mach64ScreenRec, *mach64ScreenPtr;
-
-#endif /* __MACH64_SCREEN_H__ */
diff --git a/src/mesa/drivers/dri/mach64/mach64_span.c b/src/mesa/drivers/dri/mach64/mach64_span.c
deleted file mode 100644
index 4b853c2af34..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_span.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * Jos�Fonseca
- */
-
-#include "mach64_context.h"
-#include "mach64_ioctl.h"
-#include "mach64_span.h"
-
-#include "swrast/swrast.h"
-
-#define DBG 0
-
-#define LOCAL_VARS \
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx); \
- __DRIscreen *sPriv = mmesa->driScreen; \
- __DRIdrawable *dPriv = mmesa->driDrawable; \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- GLuint height = dPriv->h; \
- GLushort p; \
- (void) p;
-
-#define LOCAL_DEPTH_VARS \
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx); \
- __DRIdrawable *dPriv = mmesa->driDrawable; \
- __DRIscreen *driScreen = mmesa->driScreen; \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- GLuint height = dPriv->h; \
- char *buf = (char *)(driScreen->pFB + drb->offset + \
- (dPriv->x + dPriv->y * drb->pitch) * 2)
-
-#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
-
-#define Y_FLIP( _y ) (height - _y - 1)
-
-#define HW_LOCK()
-
-/* FIXME could/should we use dPriv->numClipRects like the other drivers? */
-#define HW_CLIPLOOP() \
- do { \
- int _nc = mmesa->numClipRects; \
- \
- while ( _nc-- ) { \
- int minx = mmesa->pClipRects[_nc].x1 - mmesa->drawX; \
- int miny = mmesa->pClipRects[_nc].y1 - mmesa->drawY; \
- int maxx = mmesa->pClipRects[_nc].x2 - mmesa->drawX; \
- int maxy = mmesa->pClipRects[_nc].y2 - mmesa->drawY;
-
-#define HW_ENDCLIPLOOP() \
- } \
- } while (0)
-
-#define HW_UNLOCK()
-
-
-
-/* ================================================================
- * Color buffer
- */
-
-/* 16 bit, RGB565 color spanline and pixel functions
- */
-#define SPANTMP_PIXEL_FMT GL_RGB
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
-
-#define TAG(x) mach64##x##_RGB565
-#define TAG2(x,y) mach64##x##_RGB565##y
-#define GET_PTR(X,Y) (sPriv->pFB + drb->offset \
- + ((dPriv->y + (Y)) * drb->pitch + (dPriv->x + (X))) * drb->cpp)
-#include "spantmp2.h"
-
-
-/* 32 bit, ARGB8888 color spanline and pixel functions
- */
-/* FIXME the old code always read back alpha as 0xff, i.e. fully opaque.
- Was there a reason to do so ? If so that'll won't work with that template... */
-#define SPANTMP_PIXEL_FMT GL_BGRA
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-
-#define TAG(x) mach64##x##_ARGB8888
-#define TAG2(x,y) mach64##x##_ARGB8888##y
-#define GET_PTR(X,Y) (sPriv->pFB + drb->offset \
- + ((dPriv->y + (Y)) * drb->pitch + (dPriv->x + (X))) * drb->cpp)
-#include "spantmp2.h"
-
-
-/* ================================================================
- * Depth buffer
- */
-
-/* 16 bit depthbuffer functions.
- */
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH( _x, _y, d ) \
- *(GLushort *)(buf + ((_x) + (_y) * drb->pitch) * 2) = d;
-
-#define READ_DEPTH( d, _x, _y ) \
- d = *(GLushort *)(buf + ((_x) + (_y) * drb->pitch) * 2);
-
-#define TAG(x) mach64##x##_z16
-#include "depthtmp.h"
-
-
-static void mach64SpanRenderStart( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- LOCK_HARDWARE( mmesa );
- FINISH_DMA_LOCKED( mmesa );
-}
-
-static void mach64SpanRenderFinish( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- _swrast_flush( ctx );
- UNLOCK_HARDWARE( mmesa );
-}
-
-void mach64DDInitSpanFuncs( struct gl_context *ctx )
-{
- struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
- swdd->SpanRenderStart = mach64SpanRenderStart;
- swdd->SpanRenderFinish = mach64SpanRenderFinish;
-}
-
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-mach64SetSpanFunctions(driRenderbuffer *drb, const struct gl_config *vis)
-{
- if (drb->Base.Format == MESA_FORMAT_RGB565) {
- mach64InitPointers_RGB565(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
- mach64InitPointers_ARGB8888(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_Z16) {
- mach64InitDepthPointers_z16(&drb->Base);
- }
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_span.h b/src/mesa/drivers/dri/mach64/mach64_span.h
deleted file mode 100644
index 2742e93c8e2..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_span.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- *
- */
-
-#ifndef __MACH64_SPAN_H__
-#define __MACH64_SPAN_H__
-
-#include "drirenderbuffer.h"
-
-extern void mach64DDInitSpanFuncs( struct gl_context *ctx );
-
-extern void
-mach64SetSpanFunctions(driRenderbuffer *rb, const struct gl_config *vis);
-
-#endif
diff --git a/src/mesa/drivers/dri/mach64/mach64_state.c b/src/mesa/drivers/dri/mach64/mach64_state.c
deleted file mode 100644
index c1a4e63204f..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_state.c
+++ /dev/null
@@ -1,1186 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * Jos�Fonseca
- */
-
-#include "mach64_context.h"
-#include "mach64_state.h"
-#include "mach64_ioctl.h"
-#include "mach64_tris.h"
-#include "mach64_vb.h"
-#include "mach64_tex.h"
-
-#include "main/enums.h"
-#include "main/colormac.h"
-#include "swrast/swrast.h"
-#include "vbo/vbo.h"
-#include "tnl/tnl.h"
-#include "swrast_setup/swrast_setup.h"
-
-
-/* =============================================================
- * Alpha blending
- */
-
-static void mach64UpdateAlphaMode( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint a = mmesa->setup.alpha_tst_cntl;
- GLuint s = mmesa->setup.scale_3d_cntl;
- GLuint m = mmesa->setup.dp_write_mask;
-
- if ( ctx->Color.AlphaEnabled ) {
- GLubyte ref;
-
- CLAMPED_FLOAT_TO_UBYTE(ref, ctx->Color.AlphaRef);
-
- a &= ~(MACH64_ALPHA_TEST_MASK | MACH64_REF_ALPHA_MASK);
-
- switch ( ctx->Color.AlphaFunc ) {
- case GL_NEVER:
- a |= MACH64_ALPHA_TEST_NEVER;
- break;
- case GL_LESS:
- a |= MACH64_ALPHA_TEST_LESS;
- break;
- case GL_LEQUAL:
- a |= MACH64_ALPHA_TEST_LEQUAL;
- break;
- case GL_EQUAL:
- a |= MACH64_ALPHA_TEST_EQUAL;
- break;
- case GL_GEQUAL:
- a |= MACH64_ALPHA_TEST_GEQUAL;
- break;
- case GL_GREATER:
- a |= MACH64_ALPHA_TEST_GREATER;
- break;
- case GL_NOTEQUAL:
- a |= MACH64_ALPHA_TEST_NOTEQUAL;
- break;
- case GL_ALWAYS:
- a |= MACH64_ALPHA_TEST_ALWAYS;
- break;
- }
-
- a |= (ref << MACH64_REF_ALPHA_SHIFT);
- a |= MACH64_ALPHA_TEST_EN;
- } else {
- a &= ~MACH64_ALPHA_TEST_EN;
- }
-
- FALLBACK( mmesa, MACH64_FALLBACK_BLEND_FUNC, GL_FALSE );
-
- if ( ctx->Color.BlendEnabled ) {
- s &= ~(MACH64_ALPHA_BLEND_SRC_MASK |
- MACH64_ALPHA_BLEND_DST_MASK |
- MACH64_ALPHA_BLEND_SAT);
-
- switch ( ctx->Color.Blend[0].SrcRGB ) {
- case GL_ZERO:
- s |= MACH64_ALPHA_BLEND_SRC_ZERO;
- break;
- case GL_ONE:
- s |= MACH64_ALPHA_BLEND_SRC_ONE;
- break;
- case GL_DST_COLOR:
- s |= MACH64_ALPHA_BLEND_SRC_DSTCOLOR;
- break;
- case GL_ONE_MINUS_DST_COLOR:
- s |= MACH64_ALPHA_BLEND_SRC_INVDSTCOLOR;
- break;
- case GL_SRC_ALPHA:
- s |= MACH64_ALPHA_BLEND_SRC_SRCALPHA;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- s |= MACH64_ALPHA_BLEND_SRC_INVSRCALPHA;
- break;
- case GL_DST_ALPHA:
- s |= MACH64_ALPHA_BLEND_SRC_DSTALPHA;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- s |= MACH64_ALPHA_BLEND_SRC_INVDSTALPHA;
- break;
- case GL_SRC_ALPHA_SATURATE:
- s |= (MACH64_ALPHA_BLEND_SRC_SRCALPHA |
- MACH64_ALPHA_BLEND_SAT);
- break;
- default:
- FALLBACK( mmesa, MACH64_FALLBACK_BLEND_FUNC, GL_TRUE );
- }
-
- switch ( ctx->Color.Blend[0].DstRGB ) {
- case GL_ZERO:
- s |= MACH64_ALPHA_BLEND_DST_ZERO;
- break;
- case GL_ONE:
- s |= MACH64_ALPHA_BLEND_DST_ONE;
- break;
- case GL_SRC_COLOR:
- s |= MACH64_ALPHA_BLEND_DST_SRCCOLOR;
- break;
- case GL_ONE_MINUS_SRC_COLOR:
- s |= MACH64_ALPHA_BLEND_DST_INVSRCCOLOR;
- break;
- case GL_SRC_ALPHA:
- s |= MACH64_ALPHA_BLEND_DST_SRCALPHA;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- s |= MACH64_ALPHA_BLEND_DST_INVSRCALPHA;
- break;
- case GL_DST_ALPHA:
- s |= MACH64_ALPHA_BLEND_DST_DSTALPHA;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- s |= MACH64_ALPHA_BLEND_DST_INVDSTALPHA;
- break;
- default:
- FALLBACK( mmesa, MACH64_FALLBACK_BLEND_FUNC, GL_TRUE );
- }
-
- m = 0xffffffff; /* Can't color mask and blend at the same time */
- s &= ~MACH64_ALPHA_FOG_EN_FOG; /* Can't fog and blend at the same time */
- s |= MACH64_ALPHA_FOG_EN_ALPHA;
- } else {
- s &= ~MACH64_ALPHA_FOG_EN_ALPHA;
- }
-
- if ( mmesa->setup.alpha_tst_cntl != a ) {
- mmesa->setup.alpha_tst_cntl = a;
- mmesa->dirty |= MACH64_UPLOAD_Z_ALPHA_CNTL;
- }
- if ( mmesa->setup.scale_3d_cntl != s ) {
- mmesa->setup.scale_3d_cntl = s;
- mmesa->dirty |= MACH64_UPLOAD_SCALE_3D_CNTL;
- }
- if ( mmesa->setup.dp_write_mask != m ) {
- mmesa->setup.dp_write_mask = m;
- mmesa->dirty |= MACH64_UPLOAD_DP_WRITE_MASK;
- }
-}
-
-static void mach64DDAlphaFunc( struct gl_context *ctx, GLenum func, GLfloat ref )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_ALPHA;
-}
-
-static void mach64DDBlendEquationSeparate( struct gl_context *ctx,
- GLenum modeRGB, GLenum modeA )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- assert( modeRGB == modeA );
- FLUSH_BATCH( mmesa );
-
- /* BlendEquation affects ColorLogicOpEnabled
- */
- FALLBACK( MACH64_CONTEXT(ctx), MACH64_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
-
- /* Can only do blend addition, not min, max, subtract, etc. */
- FALLBACK( MACH64_CONTEXT(ctx), MACH64_FALLBACK_BLEND_EQ,
- modeRGB != GL_FUNC_ADD);
-
- mmesa->new_state |= MACH64_NEW_ALPHA;
-}
-
-static void mach64DDBlendFuncSeparate( struct gl_context *ctx,
- GLenum sfactorRGB, GLenum dfactorRGB,
- GLenum sfactorA, GLenum dfactorA )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_ALPHA;
-}
-
-
-/* =============================================================
- * Depth testing
- */
-
-static void mach64UpdateZMode( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint z = mmesa->setup.z_cntl;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_MSG ) {
- fprintf( stderr, "%s:\n", __FUNCTION__ );
- }
-
- if ( ctx->Depth.Test ) {
- z &= ~MACH64_Z_TEST_MASK;
-
- switch ( ctx->Depth.Func ) {
- case GL_NEVER:
- z |= MACH64_Z_TEST_NEVER;
- break;
- case GL_ALWAYS:
- z |= MACH64_Z_TEST_ALWAYS;
- break;
- case GL_LESS:
- z |= MACH64_Z_TEST_LESS;
- break;
- case GL_LEQUAL:
- z |= MACH64_Z_TEST_LEQUAL;
- break;
- case GL_EQUAL:
- z |= MACH64_Z_TEST_EQUAL;
- break;
- case GL_GEQUAL:
- z |= MACH64_Z_TEST_GEQUAL;
- break;
- case GL_GREATER:
- z |= MACH64_Z_TEST_GREATER;
- break;
- case GL_NOTEQUAL:
- z |= MACH64_Z_TEST_NOTEQUAL;
- break;
- }
-
- z |= MACH64_Z_EN;
- } else {
- z &= ~MACH64_Z_EN;
- }
-
- if ( ctx->Depth.Mask ) {
- z |= MACH64_Z_MASK_EN;
- } else {
- z &= ~MACH64_Z_MASK_EN;
- }
-
- if ( mmesa->setup.z_cntl != z ) {
- mmesa->setup.z_cntl = z;
- mmesa->dirty |= MACH64_UPLOAD_Z_ALPHA_CNTL;
- }
-}
-
-static void mach64DDDepthFunc( struct gl_context *ctx, GLenum func )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_DEPTH;
-}
-
-static void mach64DDDepthMask( struct gl_context *ctx, GLboolean flag )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_DEPTH;
-}
-
-static void mach64DDClearDepth( struct gl_context *ctx, GLclampd d )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- /* Always have a 16-bit depth buffer.
- */
- mmesa->ClearDepth = d * 0xffff;
-}
-
-
-/* =============================================================
- * Fog
- */
-
-static void mach64UpdateFogAttrib( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- CARD32 s = mmesa->setup.scale_3d_cntl;
- GLubyte c[4];
- CARD32 col;
-
- /* Can't fog if blending is on */
- if ( ctx->Color.BlendEnabled )
- return;
-
- if ( ctx->Fog.Enabled ) {
- s |= MACH64_ALPHA_FOG_EN_FOG;
- s &= ~(MACH64_ALPHA_BLEND_SRC_MASK |
- MACH64_ALPHA_BLEND_DST_MASK |
- MACH64_ALPHA_BLEND_SAT);
- /* From Utah-glx: "fog color is now dest and fog factor is alpha, so
- * use GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA"
- */
- s |= (MACH64_ALPHA_BLEND_SRC_SRCALPHA |
- MACH64_ALPHA_BLEND_DST_INVSRCALPHA);
- /* From Utah-glx: "can't use texture alpha when fogging" */
- s &= ~MACH64_TEX_MAP_AEN;
- } else {
- s &= ~(MACH64_ALPHA_BLEND_SRC_MASK |
- MACH64_ALPHA_BLEND_DST_MASK |
- MACH64_ALPHA_BLEND_SAT);
- s |= (MACH64_ALPHA_BLEND_SRC_ONE |
- MACH64_ALPHA_BLEND_DST_ZERO);
- s &= ~MACH64_ALPHA_FOG_EN_FOG;
- }
-
- c[0] = FLOAT_TO_UBYTE( ctx->Fog.Color[0] );
- c[1] = FLOAT_TO_UBYTE( ctx->Fog.Color[1] );
- c[2] = FLOAT_TO_UBYTE( ctx->Fog.Color[2] );
- c[3] = FLOAT_TO_UBYTE( ctx->Fog.Color[3] );
-
- col = mach64PackColor( 4, c[0], c[1], c[2], c[3] );
-
- if ( mmesa->setup.dp_fog_clr != col ) {
- mmesa->setup.dp_fog_clr = col;
- mmesa->dirty |= MACH64_UPLOAD_DP_FOG_CLR;
- }
- if ( mmesa->setup.scale_3d_cntl != s ) {
- mmesa->setup.scale_3d_cntl = s;
- mmesa->dirty |= MACH64_UPLOAD_SCALE_3D_CNTL;
- }
-
-}
-
-static void mach64DDFogfv( struct gl_context *ctx, GLenum pname, const GLfloat *param )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_FOG;
-}
-
-
-/* =============================================================
- * Clipping
- */
-
-static void mach64UpdateClipping( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- mach64ScreenPtr mach64Screen = mmesa->mach64Screen;
-
- if ( mmesa->driDrawable ) {
- __DRIdrawable *drawable = mmesa->driDrawable;
- int x1 = 0;
- int y1 = 0;
- int x2 = drawable->w - 1;
- int y2 = drawable->h - 1;
-
- if ( ctx->Scissor.Enabled ) {
- if ( ctx->Scissor.X > x1 ) {
- x1 = ctx->Scissor.X;
- }
- if ( drawable->h - ctx->Scissor.Y - ctx->Scissor.Height > y1 ) {
- y1 = drawable->h - ctx->Scissor.Y - ctx->Scissor.Height;
- }
- if ( ctx->Scissor.X + ctx->Scissor.Width - 1 < x2 ) {
- x2 = ctx->Scissor.X + ctx->Scissor.Width - 1;
- }
- if ( drawable->h - ctx->Scissor.Y - 1 < y2 ) {
- y2 = drawable->h - ctx->Scissor.Y - 1;
- }
- }
-
- x1 += drawable->x;
- y1 += drawable->y;
- x2 += drawable->x;
- y2 += drawable->y;
-
- /* clamp to screen borders */
- if (x1 < 0) x1 = 0;
- if (y1 < 0) y1 = 0;
- if (x2 < 0) x2 = 0;
- if (y2 < 0) y2 = 0;
- if (x2 > mach64Screen->width-1) x2 = mach64Screen->width-1;
- if (y2 > mach64Screen->height-1) y2 = mach64Screen->height-1;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_MSG ) {
- fprintf( stderr, "%s: drawable %3d %3d %3d %3d\n",
- __FUNCTION__,
- drawable->x,
- drawable->y,
- drawable->w,
- drawable->h );
- fprintf( stderr, "%s: scissor %3d %3d %3d %3d\n",
- __FUNCTION__,
- ctx->Scissor.X,
- ctx->Scissor.Y,
- ctx->Scissor.Width,
- ctx->Scissor.Height );
- fprintf( stderr, "%s: final %3d %3d %3d %3d\n",
- __FUNCTION__, x1, y1, x2, y2 );
- fprintf( stderr, "\n" );
- }
-
- mmesa->setup.sc_top_bottom = ((y1 << 0) |
- (y2 << 16));
-
- mmesa->setup.sc_left_right = ((x1 << 0) |
- (x2 << 16));
-
- /* UPLOAD_MISC reduces the dirty state, we just need to
- * emit the scissor to the SAREA. We need to dirty cliprects
- * since the scissor and cliprects are intersected to update the
- * single hardware scissor
- */
- mmesa->dirty |= MACH64_UPLOAD_MISC | MACH64_UPLOAD_CLIPRECTS;
- }
-}
-
-static void mach64DDScissor( struct gl_context *ctx,
- GLint x, GLint y, GLsizei w, GLsizei h )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_CLIP;
-}
-
-
-/* =============================================================
- * Culling
- */
-
-static void mach64UpdateCull( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLfloat backface_sign = 1;
-
- if ( ctx->Polygon.CullFlag /*&& ctx->PB->primitive == GL_POLYGON*/ ) {
- backface_sign = 1;
- switch ( ctx->Polygon.CullFaceMode ) {
- case GL_BACK:
- if ( ctx->Polygon.FrontFace == GL_CCW )
- backface_sign = -1;
- break;
- case GL_FRONT:
- if ( ctx->Polygon.FrontFace != GL_CCW )
- backface_sign = -1;
- break;
- default:
- case GL_FRONT_AND_BACK:
- backface_sign = 0;
- break;
- }
- } else {
- backface_sign = 0;
- }
-
- mmesa->backface_sign = backface_sign;
-
-}
-
-static void mach64DDCullFace( struct gl_context *ctx, GLenum mode )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_CULL;
-}
-
-static void mach64DDFrontFace( struct gl_context *ctx, GLenum mode )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_CULL;
-}
-
-
-/* =============================================================
- * Masks
- */
-
-static void mach64UpdateMasks( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint mask = 0xffffffff;
-
- /* mach64 can't color mask with alpha blending enabled */
- if ( !ctx->Color.BlendEnabled ) {
- mask = mach64PackColor( mmesa->mach64Screen->cpp,
- ctx->Color.ColorMask[0][RCOMP],
- ctx->Color.ColorMask[0][GCOMP],
- ctx->Color.ColorMask[0][BCOMP],
- ctx->Color.ColorMask[0][ACOMP] );
- }
-
- if ( mmesa->setup.dp_write_mask != mask ) {
- mmesa->setup.dp_write_mask = mask;
- mmesa->dirty |= MACH64_UPLOAD_DP_WRITE_MASK;
- }
-}
-
-static void mach64DDColorMask( struct gl_context *ctx,
- GLboolean r, GLboolean g,
- GLboolean b, GLboolean a )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_MASKS;
-}
-
-
-/* =============================================================
- * Rendering attributes
- *
- * We really don't want to recalculate all this every time we bind a
- * texture. These things shouldn't change all that often, so it makes
- * sense to break them out of the core texture state update routines.
- */
-
-static void mach64UpdateSpecularLighting( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint a = mmesa->setup.alpha_tst_cntl;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_MSG ) {
- fprintf( stderr, "%s:\n", __FUNCTION__ );
- }
-
- if ( ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR &&
- ctx->Light.Enabled ) {
- a |= MACH64_SPECULAR_LIGHT_EN;
- } else {
- a &= ~MACH64_SPECULAR_LIGHT_EN;
- }
-
- if ( mmesa->setup.alpha_tst_cntl != a ) {
- mmesa->setup.alpha_tst_cntl = a;
- mmesa->dirty |= MACH64_UPLOAD_Z_ALPHA_CNTL;
- mmesa->new_state |= MACH64_NEW_CONTEXT;
- }
-}
-
-static void mach64DDLightModelfv( struct gl_context *ctx, GLenum pname,
- const GLfloat *param )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- if ( pname == GL_LIGHT_MODEL_COLOR_CONTROL ) {
- FLUSH_BATCH( mmesa );
- mach64UpdateSpecularLighting(ctx);
- }
-}
-
-static void mach64DDShadeModel( struct gl_context *ctx, GLenum mode )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint s = mmesa->setup.setup_cntl;
-
- s &= ~MACH64_FLAT_SHADE_MASK;
-
- switch ( mode ) {
- case GL_FLAT:
- s |= MACH64_FLAT_SHADE_VERTEX_3;
- break;
- case GL_SMOOTH:
- s |= MACH64_FLAT_SHADE_OFF;
- break;
- default:
- return;
- }
-
- if ( mmesa->setup.setup_cntl != s ) {
- FLUSH_BATCH( mmesa );
- mmesa->setup.setup_cntl = s;
-
- mmesa->dirty |= MACH64_UPLOAD_SETUP_CNTL;
- }
-}
-
-
-/* =============================================================
- * Viewport
- */
-
-
-void mach64CalcViewport( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- const GLfloat *v = ctx->Viewport._WindowMap.m;
- GLfloat *m = mmesa->hw_viewport;
-
- /* See also mach64_translate_vertex.
- */
- m[MAT_SX] = v[MAT_SX];
- m[MAT_TX] = v[MAT_TX] + (GLfloat)mmesa->drawX + SUBPIXEL_X;
- m[MAT_SY] = - v[MAT_SY];
- m[MAT_TY] = - v[MAT_TY] + mmesa->driDrawable->h + (GLfloat)mmesa->drawY + SUBPIXEL_Y;
- m[MAT_SZ] = v[MAT_SZ] * mmesa->depth_scale;
- m[MAT_TZ] = v[MAT_TZ] * mmesa->depth_scale;
-
- mmesa->SetupNewInputs = ~0;
-}
-
-static void mach64Viewport( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height )
-{
- mach64CalcViewport( ctx );
-}
-
-static void mach64DepthRange( struct gl_context *ctx,
- GLclampd nearval, GLclampd farval )
-{
- mach64CalcViewport( ctx );
-}
-
-
-/* =============================================================
- * Miscellaneous
- */
-
-static void mach64DDClearColor( struct gl_context *ctx,
- const GLfloat color[4] )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLubyte c[4];
-
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-
- mmesa->ClearColor = mach64PackColor( mmesa->mach64Screen->cpp,
- c[0], c[1], c[2], c[3] );
-}
-
-static void mach64DDLogicOpCode( struct gl_context *ctx, GLenum opcode )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- if ( ctx->Color.ColorLogicOpEnabled ) {
- FLUSH_BATCH( mmesa );
-
- FALLBACK( mmesa, MACH64_FALLBACK_LOGICOP, opcode != GL_COPY);
- }
-}
-
-void mach64SetCliprects( struct gl_context *ctx, GLenum mode )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- __DRIdrawable *dPriv = mmesa->driDrawable;
-
- switch ( mode ) {
- case GL_FRONT_LEFT:
- mmesa->numClipRects = dPriv->numClipRects;
- mmesa->pClipRects = dPriv->pClipRects;
- mmesa->drawX = dPriv->x;
- mmesa->drawY = dPriv->y;
- break;
- case GL_BACK_LEFT:
- if ( dPriv->numBackClipRects == 0 ) {
- mmesa->numClipRects = dPriv->numClipRects;
- mmesa->pClipRects = dPriv->pClipRects;
- mmesa->drawX = dPriv->x;
- mmesa->drawY = dPriv->y;
- } else {
- mmesa->numClipRects = dPriv->numBackClipRects;
- mmesa->pClipRects = dPriv->pBackClipRects;
- mmesa->drawX = dPriv->backX;
- mmesa->drawY = dPriv->backY;
- }
- break;
- default:
- return;
- }
-
- mach64UpdateClipping( ctx );
-
- mmesa->dirty |= MACH64_UPLOAD_CLIPRECTS;
-}
-
-static void mach64DDDrawBuffer( struct gl_context *ctx, GLenum mode )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
-
- if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
- /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */
- FALLBACK( mmesa, MACH64_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0] ) {
- case BUFFER_FRONT_LEFT:
- FALLBACK( mmesa, MACH64_FALLBACK_DRAW_BUFFER, GL_FALSE );
- mach64SetCliprects( ctx, GL_FRONT_LEFT );
- if (MACH64_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf(stderr,"%s: BUFFER_BIT_FRONT_LEFT\n", __FUNCTION__);
- break;
- case BUFFER_BACK_LEFT:
- FALLBACK( mmesa, MACH64_FALLBACK_DRAW_BUFFER, GL_FALSE );
- mach64SetCliprects( ctx, GL_BACK_LEFT );
- if (MACH64_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf(stderr,"%s: BUFFER_BIT_BACK_LEFT\n", __FUNCTION__);
- break;
- default:
- FALLBACK( mmesa, MACH64_FALLBACK_DRAW_BUFFER, GL_TRUE );
- if (MACH64_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf(stderr,"%s: fallback (mode=%d)\n", __FUNCTION__, mode);
- break;
- }
-
- mmesa->setup.dst_off_pitch = (((mmesa->drawPitch/8) << 22) |
- (mmesa->drawOffset >> 3));
-
- mmesa->dirty |= MACH64_UPLOAD_DST_OFF_PITCH;
-}
-
-static void mach64DDReadBuffer( struct gl_context *ctx, GLenum mode )
-{
- /* nothing, until we implement h/w glRead/CopyPixels or CopyTexImage */
-}
-
-/* =============================================================
- * State enable/disable
- */
-
-static void mach64DDEnable( struct gl_context *ctx, GLenum cap, GLboolean state )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %s = %s )\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr( cap ),
- state ? "GL_TRUE" : "GL_FALSE" );
- }
-
- switch ( cap ) {
- case GL_ALPHA_TEST:
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_ALPHA;
- break;
-
- case GL_BLEND:
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_ALPHA;
-
- /* enable(GL_BLEND) affects ColorLogicOpEnabled.
- */
- FALLBACK( mmesa, MACH64_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
- break;
-
- case GL_CULL_FACE:
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_CULL;
- break;
-
- case GL_DEPTH_TEST:
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_DEPTH;
- break;
-
- case GL_DITHER:
- do {
- GLuint s = mmesa->setup.scale_3d_cntl;
- FLUSH_BATCH( mmesa );
-
- if ( ctx->Color.DitherFlag ) {
- /* Dithering causes problems w/ 24bpp depth */
- if ( mmesa->mach64Screen->cpp == 4 )
- s |= MACH64_ROUND_EN;
- else
- s |= MACH64_DITHER_EN;
- } else {
- s &= ~MACH64_DITHER_EN;
- s &= ~MACH64_ROUND_EN;
- }
-
- if ( mmesa->setup.scale_3d_cntl != s ) {
- mmesa->setup.scale_3d_cntl = s;
- mmesa->dirty |= ( MACH64_UPLOAD_SCALE_3D_CNTL );
- }
- } while (0);
- break;
-
- case GL_FOG:
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_FOG;
- break;
-
- case GL_INDEX_LOGIC_OP:
- case GL_COLOR_LOGIC_OP:
- FLUSH_BATCH( mmesa );
- FALLBACK( mmesa, MACH64_FALLBACK_LOGICOP,
- state && ctx->Color.LogicOp != GL_COPY );
- break;
-
- case GL_LIGHTING:
- mach64UpdateSpecularLighting(ctx);
- break;
-
- case GL_SCISSOR_TEST:
- FLUSH_BATCH( mmesa );
- mmesa->scissor = state;
- mmesa->new_state |= MACH64_NEW_CLIP;
- break;
-
- case GL_STENCIL_TEST:
- FLUSH_BATCH( mmesa );
- FALLBACK( mmesa, MACH64_FALLBACK_STENCIL, state );
- break;
-
- case GL_TEXTURE_1D:
- case GL_TEXTURE_2D:
- case GL_TEXTURE_3D:
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_TEXTURE;
- break;
-
- default:
- return;
- }
-}
-
-/* =============================================================
- * Render mode
- */
-
-static void mach64DDRenderMode( struct gl_context *ctx, GLenum mode )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- FALLBACK( mmesa, MACH64_FALLBACK_RENDER_MODE, (mode != GL_RENDER) );
-}
-
-/* =============================================================
- * State initialization, management
- */
-
-static void mach64DDPrintDirty( const char *msg, GLuint state )
-{
- fprintf( stderr,
- "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s\n",
- msg,
- state,
- (state & MACH64_UPLOAD_DST_OFF_PITCH) ? "dst_off_pitch, " : "",
- (state & MACH64_UPLOAD_Z_ALPHA_CNTL) ? "z_alpha_cntl, " : "",
- (state & MACH64_UPLOAD_SCALE_3D_CNTL) ? "scale_3d_cntl, " : "",
- (state & MACH64_UPLOAD_DP_FOG_CLR) ? "dp_fog_clr, " : "",
- (state & MACH64_UPLOAD_DP_WRITE_MASK) ? "dp_write_mask, " : "",
- (state & MACH64_UPLOAD_DP_PIX_WIDTH) ? "dp_pix_width, " : "",
- (state & MACH64_UPLOAD_SETUP_CNTL) ? "setup_cntl, " : "",
- (state & MACH64_UPLOAD_MISC) ? "misc, " : "",
- (state & MACH64_UPLOAD_TEXTURE) ? "texture, " : "",
- (state & MACH64_UPLOAD_TEX0IMAGE) ? "tex0 image, " : "",
- (state & MACH64_UPLOAD_TEX1IMAGE) ? "tex1 image, " : "",
- (state & MACH64_UPLOAD_CLIPRECTS) ? "cliprects, " : "" );
-}
-
-/*
- * Load the current context's state into the hardware.
- *
- * NOTE: Be VERY careful about ensuring the context state is marked for
- * upload, the only place it shouldn't be uploaded is when the setup
- * state has changed in ReducedPrimitiveChange as this comes right after
- * a state update.
- *
- * Blits of any type should always upload the context and masks after
- * they are done.
- */
-void mach64EmitHwStateLocked( mach64ContextPtr mmesa )
-{
- drm_mach64_sarea_t *sarea = mmesa->sarea;
- drm_mach64_context_regs_t *regs = &(mmesa->setup);
- mach64TexObjPtr t0 = mmesa->CurrentTexObj[0];
- mach64TexObjPtr t1 = mmesa->CurrentTexObj[1];
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_MSG ) {
- mach64DDPrintDirty( __FUNCTION__, mmesa->dirty );
- }
-
- if ( t0 && t1 && mmesa->mach64Screen->numTexHeaps > 1 ) {
- if (t0->heap != t1->heap ||
- (mmesa->dirty & MACH64_UPLOAD_TEX0IMAGE) ||
- (mmesa->dirty & MACH64_UPLOAD_TEX1IMAGE))
- mach64UploadMultiTexImages( mmesa, t0, t1 );
- } else {
- if ( mmesa->dirty & MACH64_UPLOAD_TEX0IMAGE ) {
- if ( t0 ) mach64UploadTexImages( mmesa, t0 );
- }
- if ( mmesa->dirty & MACH64_UPLOAD_TEX1IMAGE ) {
- if ( t1 ) mach64UploadTexImages( mmesa, t1 );
- }
- }
-
- if ( mmesa->dirty & (MACH64_UPLOAD_CONTEXT | MACH64_UPLOAD_MISC) ) {
- memcpy( &sarea->context_state, regs,
- MACH64_NR_CONTEXT_REGS * sizeof(GLuint) );
- }
-
- if ( mmesa->dirty & MACH64_UPLOAD_TEXTURE ) {
- mach64EmitTexStateLocked( mmesa, t0, t1 );
- }
-
- sarea->vertsize = mmesa->vertex_size;
-
- /* Turn off the texture cache flushing.
- */
- mmesa->setup.tex_cntl &= ~MACH64_TEX_CACHE_FLUSH;
-
- sarea->dirty |= mmesa->dirty;
-
- mmesa->dirty &= MACH64_UPLOAD_CLIPRECTS;
-}
-
-static void mach64DDPrintState( const char *msg, GLuint flags )
-{
- fprintf( stderr,
- "%s: (0x%x) %s%s%s%s%s%s%s%s%s\n",
- msg,
- flags,
- (flags & MACH64_NEW_CONTEXT) ? "context, " : "",
- (flags & MACH64_NEW_ALPHA) ? "alpha, " : "",
- (flags & MACH64_NEW_DEPTH) ? "depth, " : "",
- (flags & MACH64_NEW_FOG) ? "fog, " : "",
- (flags & MACH64_NEW_CLIP) ? "clip, " : "",
- (flags & MACH64_NEW_TEXTURE) ? "texture, " : "",
- (flags & MACH64_NEW_CULL) ? "cull, " : "",
- (flags & MACH64_NEW_MASKS) ? "masks, " : "",
- (flags & MACH64_NEW_WINDOW) ? "window, " : "" );
-}
-
-/* Update the hardware state */
-void mach64DDUpdateHWState( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- int new_state = mmesa->new_state;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_MSG ) {
- fprintf( stderr, "%s:\n", __FUNCTION__ );
- }
-
- if ( new_state )
- {
- FLUSH_BATCH( mmesa );
-
- mmesa->new_state = 0;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_MSG )
- mach64DDPrintState( __FUNCTION__, new_state );
-
- /* Update the various parts of the context's state.
- */
- if ( new_state & MACH64_NEW_ALPHA )
- mach64UpdateAlphaMode( ctx );
-
- if ( new_state & MACH64_NEW_DEPTH )
- mach64UpdateZMode( ctx );
-
- if ( new_state & MACH64_NEW_FOG )
- mach64UpdateFogAttrib( ctx );
-
- if ( new_state & MACH64_NEW_CLIP )
- mach64UpdateClipping( ctx );
-
- if ( new_state & MACH64_NEW_WINDOW )
- mach64CalcViewport( ctx );
-
- if ( new_state & MACH64_NEW_CULL )
- mach64UpdateCull( ctx );
-
- if ( new_state & MACH64_NEW_MASKS )
- mach64UpdateMasks( ctx );
-
- if ( new_state & MACH64_NEW_TEXTURE )
- mach64UpdateTextureState( ctx );
- }
-}
-
-
-static void mach64DDInvalidateState( struct gl_context *ctx, GLuint new_state )
-{
- _swrast_InvalidateState( ctx, new_state );
- _swsetup_InvalidateState( ctx, new_state );
- _vbo_InvalidateState( ctx, new_state );
- _tnl_InvalidateState( ctx, new_state );
- MACH64_CONTEXT(ctx)->NewGLState |= new_state;
-}
-
-
-/* Initialize the context's hardware state */
-void mach64DDInitState( mach64ContextPtr mmesa )
-{
- GLuint format;
-
- switch ( mmesa->mach64Screen->cpp ) {
- case 2:
- format = MACH64_DATATYPE_RGB565;
- break;
- case 4:
- format = MACH64_DATATYPE_ARGB8888;
- break;
- default:
- fprintf( stderr, "Error: Unsupported pixel depth... exiting\n" );
- exit( -1 );
- }
-
- /* Always have a 16-bit depth buffer
- * but Z coordinates are specified in 16.1 format to the setup engine.
- */
- mmesa->depth_scale = 2.0;
-
- mmesa->ClearColor = 0x00000000;
- mmesa->ClearDepth = 0x0000ffff;
-
- mmesa->Fallback = 0;
-
- if ( mmesa->glCtx->Visual.doubleBufferMode ) {
- mmesa->drawOffset = mmesa->readOffset = mmesa->mach64Screen->backOffset;
- mmesa->drawPitch = mmesa->readPitch = mmesa->mach64Screen->backPitch;
- } else {
- mmesa->drawOffset = mmesa->readOffset = mmesa->mach64Screen->frontOffset;
- mmesa->drawPitch = mmesa->readPitch = mmesa->mach64Screen->frontPitch;
- }
-
- /* Harware state:
- */
- mmesa->setup.dst_off_pitch = (((mmesa->drawPitch/8) << 22) |
- (mmesa->drawOffset >> 3));
-
- mmesa->setup.z_off_pitch = (((mmesa->mach64Screen->depthPitch/8) << 22) |
- (mmesa->mach64Screen->depthOffset >> 3));
-
- mmesa->setup.z_cntl = (MACH64_Z_TEST_LESS |
- MACH64_Z_MASK_EN);
-
- mmesa->setup.alpha_tst_cntl = (MACH64_ALPHA_TEST_ALWAYS |
- MACH64_ALPHA_DST_SRCALPHA |
- MACH64_ALPHA_TST_SRC_TEXEL |
- (0 << MACH64_REF_ALPHA_SHIFT));
-
- mmesa->setup.scale_3d_cntl = (MACH64_SCALE_PIX_EXPAND_DYNAMIC_RANGE |
- /* MACH64_SCALE_DITHER_ERROR_DIFFUSE | */
- MACH64_SCALE_DITHER_2D_TABLE |
- /* MACH64_DITHER_INIT_CURRENT | */
- MACH64_DITHER_INIT_RESET |
- MACH64_SCALE_3D_FCN_SHADE |
- MACH64_ALPHA_FOG_DIS |
- MACH64_ALPHA_BLEND_SRC_ONE |
- MACH64_ALPHA_BLEND_DST_ZERO |
- MACH64_TEX_LIGHT_FCN_MODULATE |
- MACH64_MIP_MAP_DISABLE |
- MACH64_BILINEAR_TEX_EN |
- MACH64_TEX_BLEND_FCN_LINEAR);
-
- /* GL spec says dithering initially enabled, but dithering causes
- * problems w/ 24bpp depth
- */
- if ( mmesa->mach64Screen->cpp == 4 )
- mmesa->setup.scale_3d_cntl |= MACH64_ROUND_EN;
- else
- mmesa->setup.scale_3d_cntl |= MACH64_DITHER_EN;
-
- mmesa->setup.sc_left_right = 0x1fff0000;
- mmesa->setup.sc_top_bottom = 0x3fff0000;
-
- mmesa->setup.dp_fog_clr = 0x00ffffff;
- mmesa->setup.dp_write_mask = 0xffffffff;
-
- mmesa->setup.dp_pix_width = ((format << 0) |
- (format << 4) |
- (format << 8) |
- (format << 16) |
- (format << 28));
-
- mmesa->setup.dp_mix = (MACH64_BKGD_MIX_S |
- MACH64_FRGD_MIX_S);
- mmesa->setup.dp_src = (MACH64_BKGD_SRC_3D |
- MACH64_FRGD_SRC_3D |
- MACH64_MONO_SRC_ONE);
-
- mmesa->setup.clr_cmp_cntl = 0x00000000;
- mmesa->setup.gui_traj_cntl = (MACH64_DST_X_LEFT_TO_RIGHT |
- MACH64_DST_Y_TOP_TO_BOTTOM);
-
- mmesa->setup.setup_cntl = (MACH64_FLAT_SHADE_OFF |
- MACH64_SOLID_MODE_OFF |
- MACH64_LOG_MAX_INC_ADJ);
- mmesa->setup.setup_cntl = 0;
-
- mmesa->setup.tex_size_pitch = 0x00000000;
-
- mmesa->setup.tex_cntl = ((0 << MACH64_LOD_BIAS_SHIFT) |
- (0 << MACH64_COMP_FACTOR_SHIFT) |
- MACH64_COMP_COMBINE_MODULATE |
- MACH64_COMP_BLEND_NEAREST |
- MACH64_COMP_FILTER_NEAREST |
- /* MACH64_TEXTURE_TILING | */
-#ifdef MACH64_PREMULT_TEXCOORDS
- MACH64_TEX_ST_DIRECT |
-#endif
- MACH64_TEX_SRC_LOCAL |
- MACH64_TEX_UNCOMPRESSED |
- MACH64_TEX_CACHE_FLUSH |
- MACH64_TEX_CACHE_SIZE_4K);
-
- mmesa->setup.secondary_tex_off = 0x00000000;
- mmesa->setup.tex_offset = 0x00000000;
-
- mmesa->new_state = MACH64_NEW_ALL;
-}
-
-/* Initialize the driver's state functions.
- */
-void mach64DDInitStateFuncs( struct gl_context *ctx )
-{
- ctx->Driver.UpdateState = mach64DDInvalidateState;
-
- ctx->Driver.ClearColor = mach64DDClearColor;
- ctx->Driver.DrawBuffer = mach64DDDrawBuffer;
- ctx->Driver.ReadBuffer = mach64DDReadBuffer;
-
- ctx->Driver.ColorMask = mach64DDColorMask;
- ctx->Driver.AlphaFunc = mach64DDAlphaFunc;
- ctx->Driver.BlendEquationSeparate = mach64DDBlendEquationSeparate;
- ctx->Driver.BlendFuncSeparate = mach64DDBlendFuncSeparate;
- ctx->Driver.ClearDepth = mach64DDClearDepth;
- ctx->Driver.CullFace = mach64DDCullFace;
- ctx->Driver.FrontFace = mach64DDFrontFace;
- ctx->Driver.DepthFunc = mach64DDDepthFunc;
- ctx->Driver.DepthMask = mach64DDDepthMask;
- ctx->Driver.Enable = mach64DDEnable;
- ctx->Driver.Fogfv = mach64DDFogfv;
- ctx->Driver.Hint = NULL;
- ctx->Driver.Lightfv = NULL;
- ctx->Driver.LightModelfv = mach64DDLightModelfv;
- ctx->Driver.LogicOpcode = mach64DDLogicOpCode;
- ctx->Driver.PolygonMode = NULL;
- ctx->Driver.PolygonStipple = NULL;
- ctx->Driver.RenderMode = mach64DDRenderMode;
- ctx->Driver.Scissor = mach64DDScissor;
- ctx->Driver.ShadeModel = mach64DDShadeModel;
-
- ctx->Driver.DepthRange = mach64DepthRange;
- ctx->Driver.Viewport = mach64Viewport;
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_state.h b/src/mesa/drivers/dri/mach64/mach64_state.h
deleted file mode 100644
index 41c4d01d1df..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_state.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- */
-
-#ifndef __MACH64_STATE_H__
-#define __MACH64_STATE_H__
-
-#include "mach64_context.h"
-
-extern void mach64DDInitState( mach64ContextPtr mmesa );
-extern void mach64DDInitStateFuncs( struct gl_context *ctx );
-
-extern void mach64SetCliprects( struct gl_context *ctx, GLenum mode );
-extern void mach64CalcViewport( struct gl_context *ctx );
-
-extern void mach64DDUpdateState( struct gl_context *ctx );
-extern void mach64DDUpdateHWState( struct gl_context *ctx );
-
-extern void mach64EmitHwStateLocked( mach64ContextPtr mmesa );
-
-#endif
diff --git a/src/mesa/drivers/dri/mach64/mach64_tex.c b/src/mesa/drivers/dri/mach64/mach64_tex.c
deleted file mode 100644
index 8e10b314b64..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_tex.c
+++ /dev/null
@@ -1,563 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#include "mach64_context.h"
-#include "mach64_ioctl.h"
-#include "mach64_tex.h"
-
-#include "main/simple_list.h"
-#include "main/enums.h"
-#include "main/texstore.h"
-#include "main/teximage.h"
-#include "main/texobj.h"
-#include "main/imports.h"
-
-
-static void mach64SetTexWrap( mach64TexObjPtr t,
- GLenum swrap, GLenum twrap )
-{
- switch ( swrap ) {
- case GL_CLAMP:
- case GL_CLAMP_TO_EDGE:
- case GL_CLAMP_TO_BORDER:
- t->ClampS = GL_TRUE;
- break;
- case GL_REPEAT:
- t->ClampS = GL_FALSE;
- break;
- }
-
- switch ( twrap ) {
- case GL_CLAMP:
- case GL_CLAMP_TO_EDGE:
- case GL_CLAMP_TO_BORDER:
- t->ClampT = GL_TRUE;
- break;
- case GL_REPEAT:
- t->ClampT = GL_FALSE;
- break;
- }
-}
-
-static void mach64SetTexFilter( mach64TexObjPtr t,
- GLenum minf, GLenum magf )
-{
- switch ( minf ) {
- case GL_NEAREST:
- case GL_NEAREST_MIPMAP_NEAREST:
- case GL_NEAREST_MIPMAP_LINEAR:
- t->BilinearMin = GL_FALSE;
- break;
- case GL_LINEAR:
- case GL_LINEAR_MIPMAP_NEAREST:
- case GL_LINEAR_MIPMAP_LINEAR:
- t->BilinearMin = GL_TRUE;
- break;
- }
-
- switch ( magf ) {
- case GL_NEAREST:
- t->BilinearMag = GL_FALSE;
- break;
- case GL_LINEAR:
- t->BilinearMag = GL_TRUE;
- break;
- }
-}
-
-static void mach64SetTexBorderColor( mach64TexObjPtr t, const GLfloat c[4] )
-{
-#if 0
- GLuint border = mach64PackColor( 4, c[0], c[1], c[2], c[3] );
-#endif
-}
-
-
-static mach64TexObjPtr
-mach64AllocTexObj( struct gl_texture_object *texObj )
-{
- mach64TexObjPtr t;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API )
- fprintf( stderr, "%s( %p )\n", __FUNCTION__, texObj );
-
- t = (mach64TexObjPtr) CALLOC_STRUCT( mach64_texture_object );
- texObj->DriverData = t;
- if ( !t )
- return NULL;
-
- /* Initialize non-image-dependent parts of the state:
- */
- t->base.tObj = texObj;
- t->base.dirty_images[0] = (1 << 0);
-
- t->bufAddr = 0;
-
- make_empty_list( (driTextureObject *) t );
-
- mach64SetTexWrap( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT );
- mach64SetTexFilter( t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter );
- mach64SetTexBorderColor( t, texObj->Sampler.BorderColor.f );
-
- return t;
-}
-
-
-/* Called by the _mesa_store_teximage[123]d() functions. */
-static gl_format
-mach64ChooseTextureFormat( struct gl_context *ctx, GLint internalFormat,
- GLenum format, GLenum type )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- (void) format;
- (void) type;
-
- switch ( internalFormat ) {
- case GL_ALPHA:
- case GL_ALPHA4:
- case GL_ALPHA8:
- case GL_ALPHA12:
- case GL_ALPHA16:
- case GL_COMPRESSED_ALPHA:
- case 2:
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE4_ALPHA4:
- case GL_LUMINANCE6_ALPHA2:
- case GL_LUMINANCE8_ALPHA8:
- case GL_LUMINANCE12_ALPHA4:
- case GL_LUMINANCE12_ALPHA12:
- case GL_LUMINANCE16_ALPHA16:
- case GL_COMPRESSED_LUMINANCE_ALPHA:
- case 4:
- case GL_RGBA:
- case GL_RGBA2:
- case GL_COMPRESSED_RGBA:
- if (mmesa->mach64Screen->cpp == 4)
- return MESA_FORMAT_ARGB8888;
- else
- return MESA_FORMAT_ARGB4444;
-
- case GL_RGB5_A1:
- if (mmesa->mach64Screen->cpp == 4)
- return MESA_FORMAT_ARGB8888;
- else
- return MESA_FORMAT_ARGB1555;
-
- case GL_RGBA8:
- case GL_RGB10_A2:
- case GL_RGBA12:
- case GL_RGBA16:
- case GL_RGBA4:
- if (mmesa->mach64Screen->cpp == 4)
- return MESA_FORMAT_ARGB8888;
- else
- return MESA_FORMAT_ARGB4444;
-
- case 3:
- case GL_RGB:
- case GL_R3_G3_B2:
- case GL_RGB4:
- case GL_RGB5:
- case GL_RGB8:
- case GL_RGB10:
- case GL_RGB12:
- case GL_RGB16:
- case GL_COMPRESSED_RGB:
- if (mmesa->mach64Screen->cpp == 4)
- return MESA_FORMAT_ARGB8888;
- else
- return MESA_FORMAT_RGB565;
-
- case 1:
- case GL_LUMINANCE:
- case GL_LUMINANCE4:
- case GL_LUMINANCE8:
- case GL_LUMINANCE12:
- case GL_LUMINANCE16:
- case GL_COMPRESSED_LUMINANCE:
- if (mmesa->mach64Screen->cpp == 4)
- return MESA_FORMAT_ARGB8888; /* inefficient but accurate */
- else
- return MESA_FORMAT_ARGB1555;
-
- case GL_INTENSITY4:
- case GL_INTENSITY:
- case GL_INTENSITY8:
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- case GL_COMPRESSED_INTENSITY:
- if (mmesa->mach64Screen->cpp == 4)
- return MESA_FORMAT_ARGB8888; /* inefficient but accurate */
- else
- return MESA_FORMAT_ARGB4444;
-
- case GL_COLOR_INDEX:
- case GL_COLOR_INDEX1_EXT:
- case GL_COLOR_INDEX2_EXT:
- case GL_COLOR_INDEX4_EXT:
- case GL_COLOR_INDEX8_EXT:
- case GL_COLOR_INDEX12_EXT:
- case GL_COLOR_INDEX16_EXT:
- return MESA_FORMAT_CI8;
-
- case GL_YCBCR_MESA:
- if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
- type == GL_UNSIGNED_BYTE)
- return MESA_FORMAT_YCBCR;
- else
- return MESA_FORMAT_YCBCR_REV;
-
- default:
- _mesa_problem( ctx, "unexpected format in %s", __FUNCTION__ );
- return MESA_FORMAT_NONE;
- }
-}
-
-static void mach64TexImage1D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- if ( t ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) mach64AllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage1D");
- return;
- }
- }
-
- /* Note, this will call mach64ChooseTextureFormat */
- _mesa_store_teximage1d( ctx, target, level, internalFormat,
- width, border, format, type,
- pixels, packing, texObj, texImage );
-
- mmesa->new_state |= MACH64_NEW_TEXTURE;
-}
-
-static void mach64TexSubImage1D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLsizei width,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- assert( t ); /* this _should_ be true */
- if ( t ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) mach64AllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexSubImage1D");
- return;
- }
- }
-
- _mesa_store_texsubimage1d(ctx, target, level, xoffset, width,
- format, type, pixels, packing, texObj,
- texImage);
-
- mmesa->new_state |= MACH64_NEW_TEXTURE;
-}
-
-static void mach64TexImage2D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint height, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- if ( t ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) mach64AllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
- return;
- }
- }
-
- /* Note, this will call mach64ChooseTextureFormat */
- _mesa_store_teximage2d( ctx, target, level, internalFormat,
- width, height, border, format, type, pixels,
- &ctx->Unpack, texObj, texImage );
-
- mmesa->new_state |= MACH64_NEW_TEXTURE;
-}
-
-static void mach64TexSubImage2D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- assert( t ); /* this _should_ be true */
- if ( t ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) mach64AllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexSubImage2D");
- return;
- }
- }
-
- _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width,
- height, format, type, pixels, packing, texObj,
- texImage);
-
- mmesa->new_state |= MACH64_NEW_TEXTURE;
-}
-
-/* ================================================================
- * Device Driver API texture functions
- */
-
-static void mach64DDTexEnv( struct gl_context *ctx, GLenum target,
- GLenum pname, const GLfloat *param )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-#if 0
- struct gl_texture_unit *texUnit;
- GLubyte c[4];
-#endif
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %s )\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr( pname ) );
- }
-
- switch ( pname ) {
- case GL_TEXTURE_ENV_MODE:
- FLUSH_BATCH( mmesa );
- mmesa->new_state |= MACH64_NEW_TEXTURE | MACH64_NEW_ALPHA;
- break;
-
-#if 0
- case GL_TEXTURE_ENV_COLOR:
- texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
- CLAMPED_FLOAT_TO_UBYTE( c[0], texUnit->EnvColor[0] );
- CLAMPED_FLOAT_TO_UBYTE( c[1], texUnit->EnvColor[1] );
- CLAMPED_FLOAT_TO_UBYTE( c[2], texUnit->EnvColor[2] );
- CLAMPED_FLOAT_TO_UBYTE( c[3], texUnit->EnvColor[3] );
- mmesa->env_color = mach64PackColor( 32, c[0], c[1], c[2], c[3] );
- if ( mmesa->setup.constant_color_c != mmesa->env_color ) {
- FLUSH_BATCH( mmesa );
- mmesa->setup.constant_color_c = mmesa->env_color;
-
- mmesa->new_state |= MACH64_NEW_TEXTURE;
-
- /* More complex multitexture/multipass fallbacks for GL_BLEND
- * can be done later, but this allows a single pass GL_BLEND
- * in some cases (ie. Performer town demo).
- */
- mmesa->blend_flags &= ~MACH64_BLEND_ENV_COLOR;
- if ( mmesa->env_color != 0x00000000 &&
- mmesa->env_color != 0xff000000 &&
- mmesa->env_color != 0x00ffffff &&
- mmesa->env_color != 0xffffffff )) {
- mmesa->blend_flags |= MACH64_BLEND_ENV_COLOR;
- }
- }
- break;
-#endif
-
- default:
- return;
- }
-}
-
-static void mach64DDTexParameter( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj,
- GLenum pname, const GLfloat *params )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- mach64TexObjPtr t = (mach64TexObjPtr)tObj->DriverData;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %s )\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr( pname ) );
- }
-
- if ( ( target != GL_TEXTURE_2D ) &&
- ( target != GL_TEXTURE_1D ) ) {
- return;
- }
-
- if (!t) {
- t = mach64AllocTexObj(tObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexParameter");
- return;
- }
- }
-
- switch ( pname ) {
- case GL_TEXTURE_MIN_FILTER:
- case GL_TEXTURE_MAG_FILTER:
- if ( t->base.bound ) FLUSH_BATCH( mmesa );
- mach64SetTexFilter( t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter );
- break;
-
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- if ( t->base.bound ) FLUSH_BATCH( mmesa );
- mach64SetTexWrap( t, tObj->Sampler.WrapS, tObj->Sampler.WrapT );
- break;
-
- case GL_TEXTURE_BORDER_COLOR:
- if ( t->base.bound ) FLUSH_BATCH( mmesa );
- mach64SetTexBorderColor( t, tObj->Sampler.BorderColor.f );
- break;
-
- case GL_TEXTURE_BASE_LEVEL:
- /* From Radeon/Rage128:
- * This isn't the most efficient solution but there doesn't appear to
- * be a nice alternative. Since there's no LOD clamping,
- * we just have to rely on loading the right subset of mipmap levels
- * to simulate a clamped LOD.
- *
- * For mach64 we're only concerned with the base level
- * since that's the only texture we upload.
- */
- if ( t->base.bound ) FLUSH_BATCH( mmesa );
- driSwapOutTextureObject( (driTextureObject *) t );
- break;
-
- default:
- return;
- }
-
- mmesa->new_state |= MACH64_NEW_TEXTURE;
-}
-
-static void mach64DDBindTexture( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLint unit = ctx->Texture.CurrentUnit;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p ) unit=%d\n",
- __FUNCTION__, tObj, unit );
- }
-
- FLUSH_BATCH( mmesa );
-
- if ( mmesa->CurrentTexObj[unit] ) {
- mmesa->CurrentTexObj[unit]->base.bound &= ~(1 << unit);
- mmesa->CurrentTexObj[unit] = NULL;
- }
-
- mmesa->new_state |= MACH64_NEW_TEXTURE;
-}
-
-static void mach64DDDeleteTexture( struct gl_context *ctx,
- struct gl_texture_object *tObj )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- driTextureObject * t = (driTextureObject *) tObj->DriverData;
-
- if ( t ) {
- if ( t->bound && mmesa ) {
- FLUSH_BATCH( mmesa );
-
- mmesa->new_state |= MACH64_NEW_TEXTURE;
- }
-
- driDestroyTextureObject( t );
-
- /* Free mipmap images and the texture object itself */
- _mesa_delete_texture_object(ctx, tObj);
- }
-}
-
-/**
- * Allocate a new texture object.
- * Called via ctx->Driver.NewTextureObject.
- * Note: we could use containment here to 'derive' the driver-specific
- * texture object from the core mesa gl_texture_object. Not done at this time.
- */
-static struct gl_texture_object *
-mach64NewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
-{
- struct gl_texture_object *obj;
- obj = _mesa_new_texture_object(ctx, name, target);
- mach64AllocTexObj( obj );
- return obj;
-}
-
-void mach64InitTextureFuncs( struct dd_function_table *functions )
-{
- functions->TexEnv = mach64DDTexEnv;
- functions->ChooseTextureFormat = mach64ChooseTextureFormat;
- functions->TexImage1D = mach64TexImage1D;
- functions->TexSubImage1D = mach64TexSubImage1D;
- functions->TexImage2D = mach64TexImage2D;
- functions->TexSubImage2D = mach64TexSubImage2D;
- functions->TexParameter = mach64DDTexParameter;
- functions->BindTexture = mach64DDBindTexture;
- functions->NewTextureObject = mach64NewTextureObject;
- functions->DeleteTexture = mach64DDDeleteTexture;
- functions->IsTextureResident = driIsTextureResident;
-
- driInitTextureFormats();
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_tex.h b/src/mesa/drivers/dri/mach64/mach64_tex.h
deleted file mode 100644
index 03699828538..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_tex.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#ifndef __MACH64_TEX_H__
-#define __MACH64_TEX_H__
-
-extern void mach64UpdateTextureState( struct gl_context *ctx );
-
-extern void mach64UploadTexImages( mach64ContextPtr mach64ctx,
- mach64TexObjPtr t );
-
-extern void mach64UploadMultiTexImages( mach64ContextPtr mach64ctx,
- mach64TexObjPtr t0, mach64TexObjPtr t1 );
-
-extern void mach64DestroyTexObj( mach64ContextPtr mach64ctx,
- mach64TexObjPtr t );
-
-extern void mach64EmitTexStateLocked( mach64ContextPtr mmesa,
- mach64TexObjPtr t0,
- mach64TexObjPtr t1 );
-
-extern void mach64InitTextureFuncs( struct dd_function_table *functions );
-
-/* ================================================================
- * Color conversion macros:
- */
-
-#define MACH64PACKCOLOR332(r, g, b) \
- (((r) & 0xe0) | (((g) & 0xe0) >> 3) | (((b) & 0xc0) >> 6))
-
-#define MACH64PACKCOLOR1555(r, g, b, a) \
- ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) | \
- ((a) ? 0x8000 : 0))
-
-#define MACH64PACKCOLOR565(r, g, b) \
- ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))
-
-#define MACH64PACKCOLOR888(r, g, b) \
- (((r) << 16) | ((g) << 8) | (b))
-
-#define MACH64PACKCOLOR8888(r, g, b, a) \
- (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-
-#define MACH64PACKCOLOR4444(r, g, b, a) \
- ((((a) & 0xf0) << 8) | (((r) & 0xf0) << 4) | ((g) & 0xf0) | ((b) >> 4))
-
-static INLINE GLuint mach64PackColor( GLuint cpp,
- GLubyte r, GLubyte g,
- GLubyte b, GLubyte a )
-{
- switch ( cpp ) {
- case 2:
- return MACH64PACKCOLOR565( r, g, b );
- case 4:
- return MACH64PACKCOLOR8888( r, g, b, a );
- default:
- return 0;
- }
-}
-
-#endif
diff --git a/src/mesa/drivers/dri/mach64/mach64_texmem.c b/src/mesa/drivers/dri/mach64/mach64_texmem.c
deleted file mode 100644
index b09954ce235..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_texmem.c
+++ /dev/null
@@ -1,511 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
- * on 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
- * ATI, PRECISION INSIGHT AND/OR THEIR 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.
- */
-
-/*
- * Authors:
- * Gareth Hughes
- * Leif Delgass
- * Jose Fonseca
- */
-
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-
-#include "mach64_context.h"
-#include "mach64_ioctl.h"
-#include "mach64_tex.h"
-
-
-/* Destroy hardware state associated with texture `t'.
- */
-void mach64DestroyTexObj( mach64ContextPtr mmesa, mach64TexObjPtr t )
-{
- unsigned i;
-
- /* See if it was the driver's current object.
- */
- if ( mmesa != NULL )
- {
- for ( i = 0 ; i < mmesa->glCtx->Const.MaxTextureUnits ; i++ )
- {
- if ( t == mmesa->CurrentTexObj[ i ] ) {
- assert( t->base.bound & (1 << i) );
- mmesa->CurrentTexObj[ i ] = NULL;
- }
- }
- }
-}
-
-/* Upload the texture image associated with texture `t' at level `level'
- * at the address relative to `start'.
- */
-static void mach64UploadAGPSubImage( mach64ContextPtr mmesa,
- mach64TexObjPtr t, int level,
- int x, int y, int width, int height )
-{
- mach64ScreenRec *mach64Screen = mmesa->mach64Screen;
- struct gl_texture_image *image;
- int texelsPerDword = 0;
- int dwords;
- GLuint texelBytes;
-
- /* Ensure we have a valid texture to upload */
- if ( ( level < 0 ) || ( level > mmesa->glCtx->Const.MaxTextureLevels ) )
- return;
-
- image = t->base.tObj->Image[0][level];
- if ( !image )
- return;
-
- texelBytes = _mesa_get_format_bytes(image->TexFormat);
-
- switch ( texelBytes ) {
- case 1: texelsPerDword = 4; break;
- case 2: texelsPerDword = 2; break;
- case 4: texelsPerDword = 1; break;
- }
-
-#if 1
- /* FIXME: The subimage index calcs are wrong... */
- x = 0;
- y = 0;
- width = image->Width;
- height = image->Height;
-#endif
-
- dwords = width * height / texelsPerDword;
-
-#if ENABLE_PERF_BOXES
- /* Bump the performance counter */
- mmesa->c_agpTextureBytes += (dwords << 2);
-#endif
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "mach64UploadSubImage: %d,%d of %d,%d at %d,%d\n",
- width, height, image->Width, image->Height, x, y );
- fprintf( stderr, " blit ofs: 0x%07x pitch: 0x%x dwords: %d\n",
- (GLuint)t->bufAddr, (GLint)width, dwords );
- }
-
- assert(image->Data);
-
- {
- CARD32 *dst = (CARD32 *)((char *)mach64Screen->agpTextures.map + t->base.memBlock->ofs);
- const GLubyte *src = (const GLubyte *) image->Data +
- (y * image->Width + x) * texelBytes;
- const GLuint bytes = width * height * texelBytes;
- memcpy(dst, src, bytes);
- }
-
-}
-
-/* Upload the texture image associated with texture `t' at level `level'
- * at the address relative to `start'.
- */
-static void mach64UploadLocalSubImage( mach64ContextPtr mmesa,
- mach64TexObjPtr t, int level,
- int x, int y, int width, int height )
-{
- struct gl_texture_image *image;
- int texelsPerDword = 0;
- int imageWidth, imageHeight;
- int remaining, rows;
- int format, dwords;
- const int maxdwords = (MACH64_BUFFER_MAX_DWORDS - (MACH64_HOSTDATA_BLIT_OFFSET / 4));
- CARD32 pitch, offset;
- int i;
- GLuint texelBytes;
-
- /* Ensure we have a valid texture to upload */
- if ( ( level < 0 ) || ( level > mmesa->glCtx->Const.MaxTextureLevels ) )
- return;
-
- image = t->base.tObj->Image[0][level];
- if ( !image )
- return;
-
- texelBytes = _mesa_get_format_bytes(image->TexFormat);
-
- switch ( texelBytes ) {
- case 1: texelsPerDword = 4; break;
- case 2: texelsPerDword = 2; break;
- case 4: texelsPerDword = 1; break;
- }
-
-#if 1
- /* FIXME: The subimage index calcs are wrong... */
- x = 0;
- y = 0;
- width = image->Width;
- height = image->Height;
-#endif
-
- imageWidth = image->Width;
- imageHeight = image->Height;
-
- format = t->textureFormat;
-
- /* The texel upload routines have a minimum width, so force the size
- * if needed.
- */
- if ( imageWidth < texelsPerDword ) {
- int factor;
-
- factor = texelsPerDword / imageWidth;
- imageWidth = texelsPerDword;
- imageHeight /= factor;
- if ( imageHeight == 0 ) {
- /* In this case, the texel converter will actually walk a
- * texel or two off the end of the image, but normal malloc
- * alignment should prevent it from ever causing a fault.
- */
- imageHeight = 1;
- }
- }
-
- /* We can't upload to a pitch less than 64 texels so we will need to
- * linearly upload all modified rows for textures smaller than this.
- * This makes the x/y/width/height different for the blitter and the
- * texture walker.
- */
- if ( imageWidth >= 64 ) {
- /* The texture walker and the blitter look identical */
- pitch = imageWidth >> 3;
- } else {
- int factor;
- int y2;
- int start, end;
-
- start = (y * imageWidth) & ~63;
- end = (y + height) * imageWidth;
-
- if ( end - start < 64 ) {
- /* Handle the case where the total number of texels
- * uploaded is < 64.
- */
- x = 0;
- y = start / 64;
- width = end - start;
- height = 1;
- } else {
- /* Upload some number of full 64 texel blit rows */
- factor = 64 / imageWidth;
-
- y2 = y + height - 1;
- y /= factor;
- y2 /= factor;
-
- x = 0;
- width = 64;
- height = y2 - y + 1;
- }
-
- /* Fixed pitch of 64 */
- pitch = 8;
- }
-
- dwords = width * height / texelsPerDword;
- offset = t->bufAddr;
-
-#if ENABLE_PERF_BOXES
- /* Bump the performance counter */
- mmesa->c_textureBytes += (dwords << 2);
-#endif
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "mach64UploadSubImage: %d,%d of %d,%d at %d,%d\n",
- width, height, image->Width, image->Height, x, y );
- fprintf( stderr, " blit ofs: 0x%07x pitch: 0x%x dwords: %d\n",
- (GLuint)offset, (GLint)width, dwords );
- }
-
- /* Subdivide the texture if required (account for the registers added by the drm) */
- if ( dwords <= maxdwords ) {
- rows = height;
- } else {
- rows = (maxdwords * texelsPerDword) / (2 * width);
- }
-
- for ( i = 0, remaining = height ;
- remaining > 0 ;
- remaining -= rows, y += rows, i++ )
- {
- height = MIN2(remaining, rows);
-
- assert(image->Data);
-
- {
- const GLubyte *src = (const GLubyte *) image->Data +
- (y * image->Width + x) * texelBytes;
-
- mach64FireBlitLocked( mmesa, (void *)src, offset, pitch, format,
- x, y, width, height );
- }
-
- }
-
- mmesa->new_state |= MACH64_NEW_CONTEXT;
- mmesa->dirty |= MACH64_UPLOAD_CONTEXT | MACH64_UPLOAD_MISC;
-}
-
-
-/* Upload the texture images associated with texture `t'. This might
- * require removing our own and/or other client's texture objects to
- * make room for these images.
- */
-void mach64UploadTexImages( mach64ContextPtr mmesa, mach64TexObjPtr t )
-{
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p, %p )\n",
- __FUNCTION__, mmesa->glCtx, t );
- }
-
- assert(t);
- assert(t->base.tObj);
-
- if ( !t->base.memBlock ) {
- int heap;
-
- /* NULL heaps are skipped */
- heap = driAllocateTexture( mmesa->texture_heaps, MACH64_NR_TEX_HEAPS,
- (driTextureObject *) t );
-
- if ( heap == -1 ) {
- fprintf( stderr, "%s: upload texture failure, sz=%d\n", __FUNCTION__,
- t->base.totalSize );
- exit(-1);
- return;
- }
-
- t->heap = heap;
-
- /* Set the base offset of the texture image */
- assert(t->base.memBlock);
- t->bufAddr = mmesa->mach64Screen->texOffset[heap] + t->base.memBlock->ofs;
-
- /* Force loading the new state into the hardware */
- mmesa->dirty |= (MACH64_UPLOAD_SCALE_3D_CNTL |
- MACH64_UPLOAD_TEXTURE);
- }
-
- /* Let the world know we've used this memory recently */
- driUpdateTextureLRU( (driTextureObject *) t );
-
- /* Upload any images that are new */
- if ( t->base.dirty_images[0] ) {
- const GLint j = t->base.tObj->BaseLevel;
- if (t->heap == MACH64_AGP_HEAP) {
- /* Need to make sure any vertex buffers in the queue complete */
- mach64WaitForIdleLocked( mmesa );
- mach64UploadAGPSubImage( mmesa, t, j, 0, 0,
- t->base.tObj->Image[0][j]->Width,
- t->base.tObj->Image[0][j]->Height );
- } else {
- mach64UploadLocalSubImage( mmesa, t, j, 0, 0,
- t->base.tObj->Image[0][j]->Width,
- t->base.tObj->Image[0][j]->Height );
- }
-
- mmesa->setup.tex_cntl |= MACH64_TEX_CACHE_FLUSH;
- t->base.dirty_images[0] = 0;
- }
-
- mmesa->dirty |= MACH64_UPLOAD_TEXTURE;
-}
-
-
-/* Allocate memory from the same texture heap `heap' for both textures
- * `u0' and `u1'.
- */
-static int mach64AllocateMultiTex( mach64ContextPtr mmesa,
- mach64TexObjPtr u0,
- mach64TexObjPtr u1,
- int heap, GLboolean alloc_u0 )
-{
- /* Both objects should be bound */
- assert( u0->base.bound && u1->base.bound );
-
- if ( alloc_u0 ) {
- /* Evict u0 from its current heap */
- if ( u0->base.memBlock ) {
- assert( u0->heap != heap );
- driSwapOutTextureObject( (driTextureObject *) u0 );
- }
-
- /* Try to allocate u0 in the chosen heap */
- u0->heap = driAllocateTexture( &mmesa->texture_heaps[heap], 1,
- (driTextureObject *) u0 );
-
- if ( u0->heap == -1 ) {
- return -1;
- }
- }
-
- /* Evict u1 from its current heap */
- if ( u1->base.memBlock ) {
- assert( u1->heap != heap );
- driSwapOutTextureObject( (driTextureObject *) u1 );
- }
-
- /* Try to allocate u1 in the same heap as u0 */
- u1->heap = driAllocateTexture( &mmesa->texture_heaps[heap], 1,
- (driTextureObject *) u1 );
-
- if ( u1->heap == -1 ) {
- return -1;
- }
-
- /* Bound objects are not evicted */
- assert( u0->base.memBlock && u1->base.memBlock );
- assert( u0->heap == u1->heap );
-
- return heap;
-}
-
-/* The mach64 needs to have both primary and secondary textures in either
- * local or AGP memory, so we need a "buddy system" to make sure that allocation
- * succeeds or fails for both textures.
- */
-void mach64UploadMultiTexImages( mach64ContextPtr mmesa,
- mach64TexObjPtr t0,
- mach64TexObjPtr t1 )
-{
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p, %p %p )\n",
- __FUNCTION__, mmesa->glCtx, t0, t1 );
- }
-
- assert(t0 && t1);
- assert(t0->base.tObj && t1->base.tObj);
-
- if ( !t0->base.memBlock || !t1->base.memBlock || t0->heap != t1->heap ) {
- mach64TexObjPtr u0 = NULL;
- mach64TexObjPtr u1 = NULL;
- unsigned totalSize = t0->base.totalSize + t1->base.totalSize;
-
- int heap, ret;
-
- /* Check if one of the textures is already swapped in a heap and the
- * other texture fits in that heap.
- */
- if ( t0->base.memBlock && totalSize <= t0->base.heap->size ) {
- u0 = t0;
- u1 = t1;
- } else if ( t1->base.memBlock && totalSize <= t1->base.heap->size ) {
- u0 = t1;
- u1 = t0;
- }
-
- if ( u0 ) {
- heap = u0->heap;
-
- ret = mach64AllocateMultiTex( mmesa, u0, u1, heap, GL_FALSE );
- } else {
- /* Both textures are swapped out or collocation is impossible */
- u0 = t0;
- u1 = t1;
-
- /* Choose the heap appropriately */
- heap = MACH64_CARD_HEAP;
-
- if ( totalSize > mmesa->texture_heaps[heap]->size ) {
- heap = MACH64_AGP_HEAP;
- }
-
- ret = mach64AllocateMultiTex( mmesa, u0, u1, heap, GL_TRUE );
- }
-
- if ( ret == -1 && heap == MACH64_CARD_HEAP ) {
- /* Try AGP if local memory failed */
- heap = MACH64_AGP_HEAP;
-
- ret = mach64AllocateMultiTex( mmesa, u0, u1, heap, GL_TRUE );
- }
-
- if ( ret == -1 ) {
- /* FIXME:
- * Swap out all textures from the AGP heap and re-run allocation, this
- * should succeed in all cases.
- */
- fprintf( stderr, "%s: upload multi-texture failure, sz0=%d sz1=%d\n",
- __FUNCTION__, t0->base.totalSize, t1->base.totalSize );
- exit(-1);
- }
-
- /* Set the base offset of the texture image */
- assert(t0->base.memBlock);
- t0->bufAddr = mmesa->mach64Screen->texOffset[heap] + t0->base.memBlock->ofs;
- assert(t1->base.memBlock);
- t1->bufAddr = mmesa->mach64Screen->texOffset[heap] + t1->base.memBlock->ofs;
-
- /* Force loading the new state into the hardware */
- mmesa->dirty |= (MACH64_UPLOAD_SCALE_3D_CNTL |
- MACH64_UPLOAD_TEXTURE);
- }
-
- /* Let the world know we've used this memory recently */
- driUpdateTextureLRU( (driTextureObject *) t0 );
- driUpdateTextureLRU( (driTextureObject *) t1 );
-
- /* Upload any images that are new */
- if ( t0->base.dirty_images[0] ) {
- const GLint j0 = t0->base.tObj->BaseLevel;
- if (t0->heap == MACH64_AGP_HEAP) {
- /* Need to make sure any vertex buffers in the queue complete */
- mach64WaitForIdleLocked( mmesa );
- mach64UploadAGPSubImage( mmesa, t0, j0, 0, 0,
- t0->base.tObj->Image[0][j0]->Width,
- t0->base.tObj->Image[0][j0]->Height );
- } else {
- mach64UploadLocalSubImage( mmesa, t0, j0, 0, 0,
- t0->base.tObj->Image[0][j0]->Width,
- t0->base.tObj->Image[0][j0]->Height );
- }
- mmesa->setup.tex_cntl |= MACH64_TEX_CACHE_FLUSH;
- t0->base.dirty_images[0] = 0;
- }
- if ( t1->base.dirty_images[0] ) {
- const GLint j1 = t1->base.tObj->BaseLevel;
- if (t1->heap == MACH64_AGP_HEAP) {
- /* Need to make sure any vertex buffers in the queue complete */
- mach64WaitForIdleLocked( mmesa );
- mach64UploadAGPSubImage( mmesa, t1, j1, 0, 0,
- t1->base.tObj->Image[0][j1]->Width,
- t1->base.tObj->Image[0][j1]->Height );
- } else {
- mach64UploadLocalSubImage( mmesa, t1, j1, 0, 0,
- t1->base.tObj->Image[0][j1]->Width,
- t1->base.tObj->Image[0][j1]->Height );
- }
-
- mmesa->setup.tex_cntl |= MACH64_TEX_CACHE_FLUSH;
- t1->base.dirty_images[0] = 0;
- }
-
- mmesa->dirty |= MACH64_UPLOAD_TEXTURE;
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_texstate.c b/src/mesa/drivers/dri/mach64/mach64_texstate.c
deleted file mode 100644
index 70365c8461f..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_texstate.c
+++ /dev/null
@@ -1,522 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#include "main/glheader.h"
-#include "main/imports.h"
-#include "main/context.h"
-#include "main/macros.h"
-
-#include "mach64_context.h"
-#include "mach64_ioctl.h"
-#include "mach64_tris.h"
-#include "mach64_tex.h"
-
-static void mach64SetTexImages( mach64ContextPtr mmesa,
- const struct gl_texture_object *tObj )
-{
- mach64TexObjPtr t = (mach64TexObjPtr) tObj->DriverData;
- struct gl_texture_image *baseImage = tObj->Image[0][tObj->BaseLevel];
- int totalSize;
-
- assert(t);
- assert(baseImage);
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API )
- fprintf( stderr, "%s( %p )\n", __FUNCTION__, tObj );
-
- switch (baseImage->TexFormat) {
- case MESA_FORMAT_ARGB8888:
- t->textureFormat = MACH64_DATATYPE_ARGB8888;
- break;
- case MESA_FORMAT_ARGB4444:
- t->textureFormat = MACH64_DATATYPE_ARGB4444;
- break;
- case MESA_FORMAT_RGB565:
- t->textureFormat = MACH64_DATATYPE_RGB565;
- break;
- case MESA_FORMAT_ARGB1555:
- t->textureFormat = MACH64_DATATYPE_ARGB1555;
- break;
- case MESA_FORMAT_RGB332:
- t->textureFormat = MACH64_DATATYPE_RGB332;
- break;
- case MESA_FORMAT_RGB888:
- t->textureFormat = MACH64_DATATYPE_RGB8;
- break;
- case MESA_FORMAT_CI8:
- t->textureFormat = MACH64_DATATYPE_CI8;
- break;
- case MESA_FORMAT_YCBCR:
- t->textureFormat = MACH64_DATATYPE_YVYU422;
- break;
- case MESA_FORMAT_YCBCR_REV:
- t->textureFormat = MACH64_DATATYPE_VYUY422;
- break;
- default:
- _mesa_problem(mmesa->glCtx, "Bad texture format in %s", __FUNCTION__);
- };
-
- totalSize = ( baseImage->Height *
- baseImage->Width *
- _mesa_get_format_bytes(baseImage->TexFormat) );
-
- totalSize = (totalSize + 31) & ~31;
-
- t->base.totalSize = totalSize;
- t->base.firstLevel = tObj->BaseLevel;
- t->base.lastLevel = tObj->BaseLevel;
-
- /* Set the texture format */
- if ( ( baseImage->_BaseFormat == GL_RGBA ) ||
- ( baseImage->_BaseFormat == GL_ALPHA ) ||
- ( baseImage->_BaseFormat == GL_LUMINANCE_ALPHA ) ) {
- t->hasAlpha = 1;
- } else {
- t->hasAlpha = 0;
- }
-
- t->widthLog2 = baseImage->WidthLog2;
- t->heightLog2 = baseImage->HeightLog2;
- t->maxLog2 = baseImage->MaxLog2;
-}
-
-static void mach64UpdateTextureEnv( struct gl_context *ctx, int unit )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLint source = mmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- const struct gl_texture_object *tObj = texUnit->_Current;
- const GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
- GLuint s = mmesa->setup.scale_3d_cntl;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p, %d )\n",
- __FUNCTION__, ctx, unit );
- }
-
-/* REPLACE MODULATE DECAL GL_BLEND
- *
- * ALPHA C = Cf C = Cf undef C = Cf
- * A = At A = AfAt A = AfAt
- *
- * LUMINANCE C = Ct C = CfCt undef C = Cf(1-Ct)+CcCt
- * A = Af A = Af A = Af
- *
- * LUMINANCE_ALPHA C = Ct C = CfCt undef C = Cf(1-Ct)+CcCt
- * A = At A = AfAt A = AfAt
- *
- * INTENSITY C = Ct C = CfCt undef C = Cf(1-Ct)+CcCt
- * A = At A = AfAt A = Af(1-At)+AcAt
- *
- * RGB C = Ct C = CfCt C = Ct C = Cf(1-Ct)+CcCt
- * A = Af A = Af A = Af A = Af
- *
- * RGBA C = Ct C = CfCt C = Cf(1-At)+CtAt C = Cf(1-Ct)+CcCt
- * A = At A = AfAt A = Af A = AfAt
- */
-
-
- if ( unit == 0 ) {
- s &= ~MACH64_TEX_LIGHT_FCN_MASK;
-
- /* Set the texture environment state
- * Need to verify these are working correctly, but the
- * texenv Mesa demo seems to work.
- */
- switch ( texUnit->EnvMode ) {
- case GL_REPLACE:
- switch ( format ) {
- case GL_ALPHA:
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- /* Not compliant - can't get At */
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- default:
- s |= MACH64_TEX_LIGHT_FCN_REPLACE;
- }
- break;
- case GL_MODULATE:
- switch ( format ) {
- case GL_ALPHA:
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- case GL_RGB:
- case GL_LUMINANCE:
- /* These should be compliant */
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- case GL_RGBA:
- /* Should fallback when blending enabled for complete compliance */
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- default:
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- }
- break;
- case GL_DECAL:
- switch ( format ) {
- case GL_RGBA:
- s |= MACH64_TEX_LIGHT_FCN_ALPHA_DECAL;
- break;
- case GL_RGB:
- s |= MACH64_TEX_LIGHT_FCN_REPLACE;
- break;
- case GL_ALPHA:
- case GL_LUMINANCE_ALPHA:
- /* undefined - disable texturing, pass fragment unmodified */
- /* Also, pass fragment alpha instead of texture alpha */
- s &= ~MACH64_TEX_MAP_AEN;
- s |= MACH64_TEXTURE_DISABLE;
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- case GL_LUMINANCE:
- case GL_INTENSITY:
- /* undefined - disable texturing, pass fragment unmodified */
- s |= MACH64_TEXTURE_DISABLE;
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- default:
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- }
- break;
- case GL_BLEND:
- /* GL_BLEND not supported by RagePRO, use software */
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- case GL_ADD:
- case GL_COMBINE:
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- break;
- default:
- s |= MACH64_TEX_LIGHT_FCN_MODULATE;
- }
-
- if ( mmesa->setup.scale_3d_cntl != s ) {
- mmesa->setup.scale_3d_cntl = s;
- mmesa->dirty |= MACH64_UPLOAD_SCALE_3D_CNTL;
- }
-
- } else {
- /* blend = 0, modulate = 1 - initialize to blend */
- mmesa->setup.tex_cntl &= ~MACH64_COMP_COMBINE_MODULATE;
- /* Set the texture composite function for multitexturing*/
- switch ( texUnit->EnvMode ) {
- case GL_BLEND:
- /* GL_BLEND not supported by RagePRO, use software */
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- mmesa->setup.tex_cntl |= MACH64_COMP_COMBINE_MODULATE;
- break;
- case GL_MODULATE:
- /* Should fallback when blending enabled for complete compliance */
- mmesa->setup.tex_cntl |= MACH64_COMP_COMBINE_MODULATE;
- break;
- case GL_REPLACE:
- switch ( format ) {
- case GL_ALPHA:
- mmesa->setup.tex_cntl |= MACH64_COMP_COMBINE_MODULATE;
- break;
- default: /* not supported by RagePRO */
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- mmesa->setup.tex_cntl |= MACH64_COMP_COMBINE_MODULATE;
- }
- break;
- case GL_DECAL:
- switch ( format ) {
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- /* undefined, disable compositing and pass fragment unmodified */
- mmesa->setup.tex_cntl &= ~MACH64_TEXTURE_COMPOSITE;
- break;
- default: /* not supported by RagePRO */
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- mmesa->setup.tex_cntl |= MACH64_COMP_COMBINE_MODULATE;
- }
- break;
- case GL_ADD:
- case GL_COMBINE:
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- mmesa->setup.tex_cntl |= MACH64_COMP_COMBINE_MODULATE;
- break;
- default:
- mmesa->setup.tex_cntl |= MACH64_COMP_COMBINE_MODULATE;
- }
- }
-}
-
-
-static void mach64UpdateTextureUnit( struct gl_context *ctx, int unit )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- int source = mmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- const struct gl_texture_object *tObj = ctx->Texture.Unit[source]._Current;
- mach64TexObjPtr t = tObj->DriverData;
- GLuint d = mmesa->setup.dp_pix_width;
- GLuint s = mmesa->setup.scale_3d_cntl;
-
- assert(unit == 0 || unit == 1); /* only two tex units */
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p, %d ) enabled=0x%x 0x%x\n",
- __FUNCTION__, ctx, unit, ctx->Texture.Unit[0]._ReallyEnabled,
- ctx->Texture.Unit[1]._ReallyEnabled);
- }
-
- if (texUnit->_ReallyEnabled & (TEXTURE_1D_BIT | TEXTURE_2D_BIT)) {
-
- assert(t); /* should have driver tex data by now */
-
- /* Fallback if there's a texture border */
- if ( tObj->Image[0][tObj->BaseLevel]->Border > 0 ) {
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- return;
- }
-
- /* Upload teximages */
- if (t->base.dirty_images[0]) {
- mach64SetTexImages( mmesa, tObj );
- mmesa->dirty |= (MACH64_UPLOAD_TEX0IMAGE << unit);
- }
-
- /* Bind to the given texture unit */
- mmesa->CurrentTexObj[unit] = t;
- t->base.bound |= (1 << unit);
-
- if ( t->base.memBlock )
- driUpdateTextureLRU( (driTextureObject *) t ); /* XXX: should be locked! */
-
- /* register setup */
- if ( unit == 0 ) {
- d &= ~MACH64_SCALE_PIX_WIDTH_MASK;
- d |= (t->textureFormat << 28);
-
- s &= ~(MACH64_TEXTURE_DISABLE |
- MACH64_TEX_CACHE_SPLIT |
- MACH64_TEX_BLEND_FCN_MASK |
- MACH64_TEX_MAP_AEN);
-
- if ( mmesa->multitex ) {
- s |= MACH64_TEX_BLEND_FCN_TRILINEAR | MACH64_TEX_CACHE_SPLIT;
- } else if ( t->BilinearMin ) {
- s |= MACH64_TEX_BLEND_FCN_LINEAR;
- } else {
- s |= MACH64_TEX_BLEND_FCN_NEAREST;
- }
- if ( t->BilinearMag ) {
- s |= MACH64_BILINEAR_TEX_EN;
- } else {
- s &= ~MACH64_BILINEAR_TEX_EN;
- }
-
- if ( t->hasAlpha ) {
- s |= MACH64_TEX_MAP_AEN;
- }
-
- mmesa->setup.tex_cntl &= ~(MACH64_TEXTURE_CLAMP_S |
- MACH64_TEXTURE_CLAMP_T |
- MACH64_SECONDARY_STW);
-
- if ( t->ClampS ) {
- mmesa->setup.tex_cntl |= MACH64_TEXTURE_CLAMP_S;
- }
- if ( t->ClampT ) {
- mmesa->setup.tex_cntl |= MACH64_TEXTURE_CLAMP_T;
- }
-
- mmesa->setup.tex_size_pitch |= ((t->widthLog2 << 0) |
- (t->maxLog2 << 4) |
- (t->heightLog2 << 8));
- } else {
-
- /* Enable texture mapping mode */
- s &= ~MACH64_TEXTURE_DISABLE;
-
- d &= ~MACH64_COMPOSITE_PIX_WIDTH_MASK;
- d |= (t->textureFormat << 4);
-
- mmesa->setup.tex_cntl &= ~(MACH64_COMP_ALPHA |
- MACH64_SEC_TEX_CLAMP_S |
- MACH64_SEC_TEX_CLAMP_T);
- mmesa->setup.tex_cntl |= (MACH64_TEXTURE_COMPOSITE |
- MACH64_SECONDARY_STW);
-
- if ( t->BilinearMin ) {
- mmesa->setup.tex_cntl |= MACH64_COMP_BLEND_BILINEAR;
- } else {
- mmesa->setup.tex_cntl &= ~MACH64_COMP_BLEND_BILINEAR;
- }
- if ( t->BilinearMag ) {
- mmesa->setup.tex_cntl |= MACH64_COMP_FILTER_BILINEAR;
- } else {
- mmesa->setup.tex_cntl &= ~MACH64_COMP_FILTER_BILINEAR;
- }
-
- if ( t->hasAlpha ) {
- mmesa->setup.tex_cntl |= MACH64_COMP_ALPHA;
- }
- if ( t->ClampS ) {
- mmesa->setup.tex_cntl |= MACH64_SEC_TEX_CLAMP_S;
- }
- if ( t->ClampT ) {
- mmesa->setup.tex_cntl |= MACH64_SEC_TEX_CLAMP_T;
- }
-
- mmesa->setup.tex_size_pitch |= ((t->widthLog2 << 16) |
- (t->maxLog2 << 20) |
- (t->heightLog2 << 24));
- }
-
- if ( mmesa->setup.scale_3d_cntl != s ) {
- mmesa->setup.scale_3d_cntl = s;
- mmesa->dirty |= MACH64_UPLOAD_SCALE_3D_CNTL;
- }
-
- if ( mmesa->setup.dp_pix_width != d ) {
- mmesa->setup.dp_pix_width = d;
- mmesa->dirty |= MACH64_UPLOAD_DP_PIX_WIDTH;
- }
- }
- else if (texUnit->_ReallyEnabled) {
- /* 3D or cube map texture enabled - fallback */
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_TRUE );
- }
- else {
- /* texture unit disabled */
- }
-}
-
-
-/* Update the hardware texture state */
-void mach64UpdateTextureState( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p ) en=0x%x 0x%x\n",
- __FUNCTION__, ctx, ctx->Texture.Unit[0]._ReallyEnabled,
- ctx->Texture.Unit[1]._ReallyEnabled);
- }
-
- /* Clear any texturing fallbacks */
- FALLBACK( mmesa, MACH64_FALLBACK_TEXTURE, GL_FALSE );
-
- /* Unbind any currently bound textures */
- if ( mmesa->CurrentTexObj[0] ) mmesa->CurrentTexObj[0]->base.bound = 0;
- if ( mmesa->CurrentTexObj[1] ) mmesa->CurrentTexObj[1]->base.bound = 0;
- mmesa->CurrentTexObj[0] = NULL;
- mmesa->CurrentTexObj[1] = NULL;
-
- /* Disable all texturing until it is known to be good */
- mmesa->setup.scale_3d_cntl |= MACH64_TEXTURE_DISABLE;
- mmesa->setup.scale_3d_cntl &= ~MACH64_TEX_MAP_AEN;
- mmesa->setup.tex_cntl &= ~MACH64_TEXTURE_COMPOSITE;
-
- mmesa->setup.tex_size_pitch = 0x00000000;
-
- mmesa->tmu_source[0] = 0;
- mmesa->tmu_source[1] = 1;
- mmesa->multitex = 0;
-
- if (ctx->Texture._EnabledUnits & 0x2) {
- /* unit 1 enabled */
- if (ctx->Texture._EnabledUnits & 0x1) {
- /* units 0 and 1 enabled */
- mmesa->multitex = 1;
- mach64UpdateTextureUnit( ctx, 0 );
- mach64UpdateTextureEnv( ctx, 0 );
- mach64UpdateTextureUnit( ctx, 1 );
- mach64UpdateTextureEnv( ctx, 1 );
- } else {
- mmesa->tmu_source[0] = 1;
- mmesa->tmu_source[1] = 0;
- mach64UpdateTextureUnit( ctx, 0 );
- mach64UpdateTextureEnv( ctx, 0 );
- }
- } else if (ctx->Texture._EnabledUnits & 0x1) {
- /* only unit 0 enabled */
- mach64UpdateTextureUnit( ctx, 0 );
- mach64UpdateTextureEnv( ctx, 0 );
- }
-
- mmesa->dirty |= (MACH64_UPLOAD_SCALE_3D_CNTL |
- MACH64_UPLOAD_TEXTURE);
-}
-
-
-/* Due to the way we must program texture state into the Rage Pro,
- * we must leave these calculations to the absolute last minute.
- */
-void mach64EmitTexStateLocked( mach64ContextPtr mmesa,
- mach64TexObjPtr t0,
- mach64TexObjPtr t1 )
-{
- drm_mach64_sarea_t *sarea = mmesa->sarea;
- drm_mach64_context_regs_t *regs = &(mmesa->setup);
-
- /* for multitex, both textures must be local or AGP */
- if ( t0 && t1 )
- assert(t0->heap == t1->heap);
-
- if ( t0 ) {
- if (t0->heap == MACH64_CARD_HEAP) {
-#if ENABLE_PERF_BOXES
- mmesa->c_texsrc_card++;
-#endif
- mmesa->setup.tex_cntl &= ~MACH64_TEX_SRC_AGP;
- } else {
-#if ENABLE_PERF_BOXES
- mmesa->c_texsrc_agp++;
-#endif
- mmesa->setup.tex_cntl |= MACH64_TEX_SRC_AGP;
- }
- mmesa->setup.tex_offset = t0->bufAddr;
- }
-
- if ( t1 ) {
- mmesa->setup.secondary_tex_off = t1->bufAddr;
- }
-
- memcpy( &sarea->context_state.tex_size_pitch, ®s->tex_size_pitch,
- MACH64_NR_TEXTURE_REGS * sizeof(GLuint) );
-}
-
diff --git a/src/mesa/drivers/dri/mach64/mach64_tris.c b/src/mesa/drivers/dri/mach64/mach64_tris.c
deleted file mode 100644
index 024ee2f4353..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_tris.c
+++ /dev/null
@@ -1,1927 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-#include "mach64_tris.h"
-#include "mach64_state.h"
-#include "mach64_context.h"
-#include "mach64_vb.h"
-#include "mach64_ioctl.h"
-
-static const GLuint hw_prim[GL_POLYGON+1] = {
- MACH64_PRIM_POINTS,
- MACH64_PRIM_LINES,
- MACH64_PRIM_LINE_LOOP,
- MACH64_PRIM_LINE_STRIP,
- MACH64_PRIM_TRIANGLES,
- MACH64_PRIM_TRIANGLE_STRIP,
- MACH64_PRIM_TRIANGLE_FAN,
- MACH64_PRIM_QUADS,
- MACH64_PRIM_QUAD_STRIP,
- MACH64_PRIM_POLYGON,
-};
-
-static void mach64RasterPrimitive( struct gl_context *ctx, GLuint hwprim );
-static void mach64RenderPrimitive( struct gl_context *ctx, GLenum prim );
-
-
-/* FIXME: Remove this when native template is finished. */
-#define MACH64_PRINT_BUFFER 0
-
-/***********************************************************************
- * Emit primitives as inline vertices *
- ***********************************************************************/
-
-#if defined(USE_X86_ASM)
-#define DO_COPY_VERTEX( vb, vertsize, v, n, m ) \
-do { \
- register const CARD32 *__p __asm__( "esi" ) = (CARD32 *)v + 10 - vertsize; \
- register int __s __asm__( "ecx" ) = vertsize; \
- if ( vertsize > 7 ) { \
- *vb++ = (2 << 16) | ADRINDEX( MACH64_VERTEX_##n##_SECONDARY_S ); \
- __asm__ __volatile__( "movsl ; movsl ; movsl" \
- : "=D" (vb), "=S" (__p) \
- : "0" (vb), "1" (__p) ); \
- __s -= 3; \
- } \
- *vb++ = ((__s - 1 + m) << 16) | \
- (ADRINDEX( MACH64_VERTEX_##n##_X_Y ) - (__s - 1) ); \
- __asm__ __volatile__( "rep ; movsl" \
- : "=%c" (__s), "=D" (vb), "=S" (__p) \
- : "0" (__s), "1" (vb), "2" (__p) ); \
-} while (0)
-#else
-#define DO_COPY_VERTEX( vb, vertsize, v, n, m ) \
-do { \
- CARD32 *__p = (CARD32 *)v + 10 - vertsize; \
- int __s = vertsize; \
- if ( vertsize > 7 ) { \
- LE32_OUT( vb++, (2 << 16) | \
- ADRINDEX( MACH64_VERTEX_##n##_SECONDARY_S ) ); \
- *vb++ = *__p++; \
- *vb++ = *__p++; \
- *vb++ = *__p++; \
- __s -= 3; \
- } \
- LE32_OUT( vb++, ((__s - 1 + m) << 16) | \
- (ADRINDEX( MACH64_VERTEX_##n##_X_Y ) - (__s - 1)) ); \
- while ( __s-- ) { \
- *vb++ = *__p++; \
- } \
-} while (0)
-#endif
-
-#define COPY_VERTEX( vb, vertsize, v, n ) DO_COPY_VERTEX( vb, vertsize, v, n, 0 )
-#define COPY_VERTEX_OOA( vb, vertsize, v, n ) DO_COPY_VERTEX( vb, vertsize, v, n, 1 )
-
-
-static INLINE void mach64_draw_quad( mach64ContextPtr mmesa,
- mach64VertexPtr v0,
- mach64VertexPtr v1,
- mach64VertexPtr v2,
- mach64VertexPtr v3 )
-{
-#if MACH64_NATIVE_VTXFMT
- struct gl_context *ctx = mmesa->glCtx;
- const GLuint vertsize = mmesa->vertex_size;
- GLint a;
- GLfloat ooa;
- GLuint xy;
- const GLuint xyoffset = 9;
- GLint xx[3], yy[3]; /* 2 fractional bits for hardware */
- unsigned vbsiz = (vertsize + (vertsize > 7 ? 2 : 1)) * 4 + 2;
- CARD32 *vb, *vbchk;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS ) {
- fprintf(stderr, "%s:\n", __FUNCTION__);
- fprintf(stderr,"Vertex 1:\n");
- mach64_print_vertex( ctx, v0 );
- fprintf(stderr,"Vertex 2:\n");
- mach64_print_vertex( ctx, v1 );
- fprintf(stderr,"Vertex 3:\n");
- mach64_print_vertex( ctx, v2 );
- fprintf(stderr,"Vertex 4:\n");
- mach64_print_vertex( ctx, v3 );
- }
-
- xy = LE32_IN( &v0->ui[xyoffset] );
- xx[0] = (GLshort)( xy >> 16 );
- yy[0] = (GLshort)( xy & 0xffff );
-
- xy = LE32_IN( &v1->ui[xyoffset] );
- xx[1] = (GLshort)( xy >> 16 );
- yy[1] = (GLshort)( xy & 0xffff );
-
- xy = LE32_IN( &v3->ui[xyoffset] );
- xx[2] = (GLshort)( xy >> 16 );
- yy[2] = (GLshort)( xy & 0xffff );
-
- a = (xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]);
-
- if ( (mmesa->backface_sign &&
- ((a < 0 && !signbit( mmesa->backface_sign )) ||
- (a > 0 && signbit( mmesa->backface_sign )))) ) {
- /* cull quad */
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS )
- fprintf(stderr,"Quad culled\n");
- return;
- }
-
- ooa = 16.0 / a;
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * sizeof(CARD32) );
- vbchk = vb + vbsiz;
-
- COPY_VERTEX( vb, vertsize, v0, 1 );
- COPY_VERTEX( vb, vertsize, v1, 2 );
- COPY_VERTEX_OOA( vb, vertsize, v3, 3 );
- LE32_OUT( vb++, *(CARD32 *)&ooa );
-
- xy = LE32_IN( &v2->ui[xyoffset] );
- xx[0] = (GLshort)( xy >> 16 );
- yy[0] = (GLshort)( xy & 0xffff );
-
- a = (xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]);
-
- ooa = 16.0 / a;
-
- COPY_VERTEX_OOA( vb, vertsize, v2, 1 );
- LE32_OUT( vb++, *(CARD32 *)&ooa );
-
- assert( vb == vbchk );
-
-#if MACH64_PRINT_BUFFER
- {
- int i;
- fprintf(stderr, "quad:\n");
- for (i = 0; i < vbsiz; i++)
- fprintf(stderr, " %08lx\n", *(vb - vbsiz + i));
- fprintf(stderr, "\n");
- }
-#endif
-#else
- GLuint vertsize = mmesa->vertex_size;
- GLint coloridx;
- GLfloat ooa;
- GLint xx[3], yy[3]; /* 2 fractional bits for hardware */
- unsigned vbsiz =
- ((
- 1 +
- (vertsize > 6 ? 2 : 0) +
- (vertsize > 4 ? 2 : 0) +
- 3 +
- (mmesa->multitex ? 4 : 0)
- ) * 4 + 4);
- CARD32 *vb;
- unsigned vbidx = 0;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS ) {
- fprintf(stderr, "%s:\n", __FUNCTION__);
- fprintf(stderr,"Vertex 1: x: %.2f, y: %.2f, z: %.2f, w: %f\n\ts0: %f, t0: %f\n\ts1: %f, t1: %f\n",
- v0->v.x, v0->v.y, v0->v.z, v0->v.w, v0->v.u0, v0->v.v0, v0->v.u1, v0->v.v1);
- fprintf(stderr,"Vertex 2: x: %.2f, y: %.2f, z: %.2f, w: %f\n\ts0: %f, t0: %f\n\ts1: %f, t1: %f\n",
- v1->v.x, v1->v.y, v1->v.z, v1->v.w, v1->v.u0, v1->v.v0, v1->v.u1, v1->v.v1);
- fprintf(stderr,"Vertex 3: x: %.2f, y: %.2f, z: %.2f, w: %f\n\ts0: %f, t0: %f\n\ts1: %f, t1: %f\n",
- v2->v.x, v2->v.y, v2->v.z, v2->v.w, v2->v.u0, v2->v.v0, v2->v.u1, v2->v.v1);
- fprintf(stderr,"Vertex 4: x: %.2f, y: %.2f, z: %.2f, w: %f\n\ts0: %f, t0: %f\n\ts1: %f, t1: %f\n",
- v3->v.x, v3->v.y, v3->v.z, v3->v.w, v3->v.u0, v3->v.v0, v3->v.u1, v3->v.v1);
- }
-
-#if MACH64_CLIENT_STATE_EMITS
- /* Enable for interleaved client-side state emits */
- LOCK_HARDWARE( mmesa );
- if ( mmesa->dirty ) {
- mach64EmitHwStateLocked( mmesa );
- }
- if ( mmesa->sarea->dirty ) {
- mach64UploadHwStateLocked( mmesa );
- }
- UNLOCK_HARDWARE( mmesa );
-#endif
-
- xx[0] = (GLint)(v0->v.x * 4);
- yy[0] = (GLint)(v0->v.y * 4);
-
- xx[1] = (GLint)(v1->v.x * 4);
- yy[1] = (GLint)(v1->v.y * 4);
-
- xx[2] = (GLint)(v3->v.x * 4);
- yy[2] = (GLint)(v3->v.y * 4);
-
- ooa = 0.25 * 0.25 * ((xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]));
-
- if ( ooa * mmesa->backface_sign < 0 ) {
- /* cull quad */
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS )
- fprintf(stderr,"Quad culled\n");
- return;
- }
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * 4 );
-
- ooa = 1.0 / ooa;
-
- coloridx = (vertsize > 4) ? 4: 3;
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_1_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_1_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v0->ui[6] ); /* MACH64_VERTEX_1_S */
- LE32_OUT( &vb[vbidx++], v0->ui[7] ); /* MACH64_VERTEX_1_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_1_W */
- LE32_OUT( &vb[vbidx++], v0->ui[5] ); /* MACH64_VERTEX_1_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v0->v.z) << 15) ); /* MACH64_VERTEX_1_Z */
- vb[vbidx++] = v0->ui[coloridx]; /* MACH64_VERTEX_1_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[0] << 16) | (yy[0] & 0xffff) ); /* MACH64_VERTEX_1_X_Y */
-
- if (mmesa->multitex) {
- /* setup for 3 sequential reg writes */
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_SECONDARY_S) );
- LE32_OUT( &vb[vbidx++], v0->ui[8] ); /* MACH64_VERTEX_1_SECONDARY_S */
- LE32_OUT( &vb[vbidx++], v0->ui[9] ); /* MACH64_VERTEX_1_SECONDARY_T */
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_1_SECONDARY_W */
- }
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_2_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_2_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_2_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v1->ui[6] ); /* MACH64_VERTEX_2_S */
- LE32_OUT( &vb[vbidx++], v1->ui[7] ); /* MACH64_VERTEX_2_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v1->ui[3] ); /* MACH64_VERTEX_2_W */
- LE32_OUT( &vb[vbidx++], v1->ui[5] ); /* MACH64_VERTEX_2_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v1->v.z) << 15) ); /* MACH64_VERTEX_2_Z */
- vb[vbidx++] = v1->ui[coloridx]; /* MACH64_VERTEX_2_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[1] << 16) | (yy[1] & 0xffff) ); /* MACH64_VERTEX_2_X_Y */
-
- if (mmesa->multitex) {
- /* setup for 3 sequential reg writes */
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_2_SECONDARY_S) );
- LE32_OUT( &vb[vbidx++], v1->ui[8] ); /* MACH64_VERTEX_2_SECONDARY_S */
- LE32_OUT( &vb[vbidx++], v1->ui[9] ); /* MACH64_VERTEX_2_SECONDARY_T */
- LE32_OUT( &vb[vbidx++], v1->ui[3] ); /* MACH64_VERTEX_2_SECONDARY_W */
- }
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_3_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_3_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_3_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v3->ui[6] ); /* MACH64_VERTEX_3_S */
- LE32_OUT( &vb[vbidx++], v3->ui[7] ); /* MACH64_VERTEX_3_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v3->ui[3] ); /* MACH64_VERTEX_3_W */
- LE32_OUT( &vb[vbidx++], v3->ui[5] ); /* MACH64_VERTEX_3_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v3->v.z) << 15) ); /* MACH64_VERTEX_3_Z */
- vb[vbidx++] = v3->ui[coloridx]; /* MACH64_VERTEX_3_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[2] << 16) | (yy[2] & 0xffff) ); /* MACH64_VERTEX_3_X_Y */
-
- if (mmesa->multitex) {
- /* setup for 3 sequential reg writes */
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_3_SECONDARY_S) );
- LE32_OUT( &vb[vbidx++], v3->ui[8] ); /* MACH64_VERTEX_3_SECONDARY_S */
- LE32_OUT( &vb[vbidx++], v3->ui[9] ); /* MACH64_VERTEX_3_SECONDARY_T */
- LE32_OUT( &vb[vbidx++], v3->ui[3] ); /* MACH64_VERTEX_3_SECONDARY_W */
- }
-
- LE32_OUT( &vb[vbidx++], ADRINDEX(MACH64_ONE_OVER_AREA_UC) );
- LE32_OUT( &vb[vbidx++], *(GLuint *)&ooa );
-
- xx[0] = (GLint)(v2->v.x * 4);
- yy[0] = (GLint)(v2->v.y * 4);
-
- ooa = 0.25 * 0.25 * ((xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]));
- ooa = 1.0 / ooa;
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_1_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_1_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v2->ui[6] ); /* MACH64_VERTEX_1_S */
- LE32_OUT( &vb[vbidx++], v2->ui[7] ); /* MACH64_VERTEX_1_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v2->ui[3] ); /* MACH64_VERTEX_1_W */
- LE32_OUT( &vb[vbidx++], v2->ui[5] ); /* MACH64_VERTEX_1_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v2->v.z) << 15) ); /* MACH64_VERTEX_1_Z */
- vb[vbidx++] = v2->ui[coloridx]; /* MACH64_VERTEX_1_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[0] << 16) | (yy[0] & 0xffff) ); /* MACH64_VERTEX_1_X_Y */
-
- if (mmesa->multitex) {
- /* setup for 3 sequential reg writes */
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_SECONDARY_S) );
- LE32_OUT( &vb[vbidx++], v2->ui[8] ); /* MACH64_VERTEX_1_SECONDARY_S */
- LE32_OUT( &vb[vbidx++], v2->ui[9] ); /* MACH64_VERTEX_1_SECONDARY_T */
- LE32_OUT( &vb[vbidx++], v2->ui[3] ); /* MACH64_VERTEX_1_SECONDARY_W */
- }
-
- LE32_OUT( &vb[vbidx++], ADRINDEX(MACH64_ONE_OVER_AREA_UC) );
- LE32_OUT( &vb[vbidx++], *(GLuint *)&ooa );
-
- assert(vbsiz == vbidx);
-
-#if MACH64_PRINT_BUFFER
- {
- int i;
- fprintf(stderr, "quad:\n");
- for (i = 0; i < vbsiz; i++)
- fprintf(stderr, " %08lx\n", *(vb + i));
- fprintf(stderr, "\n");
- }
-#endif
-#endif
-}
-
-static INLINE void mach64_draw_triangle( mach64ContextPtr mmesa,
- mach64VertexPtr v0,
- mach64VertexPtr v1,
- mach64VertexPtr v2 )
-{
-#if MACH64_NATIVE_VTXFMT
- struct gl_context *ctx = mmesa->glCtx;
- GLuint vertsize = mmesa->vertex_size;
- GLint a;
- GLfloat ooa;
- GLuint xy;
- const GLuint xyoffset = 9;
- GLint xx[3], yy[3]; /* 2 fractional bits for hardware */
- unsigned vbsiz = (vertsize + (vertsize > 7 ? 2 : 1)) * 3 + 1;
- CARD32 *vb, *vbchk;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS ) {
- fprintf(stderr, "%s:\n", __FUNCTION__);
- fprintf(stderr,"Vertex 1:\n");
- mach64_print_vertex( ctx, v0 );
- fprintf(stderr,"Vertex 2:\n");
- mach64_print_vertex( ctx, v1 );
- fprintf(stderr,"Vertex 3:\n");
- mach64_print_vertex( ctx, v2 );
- }
-
- xy = LE32_IN( &v0->ui[xyoffset] );
- xx[0] = (GLshort)( xy >> 16 );
- yy[0] = (GLshort)( xy & 0xffff );
-
- xy = LE32_IN( &v1->ui[xyoffset] );
- xx[1] = (GLshort)( xy >> 16 );
- yy[1] = (GLshort)( xy & 0xffff );
-
- xy = LE32_IN( &v2->ui[xyoffset] );
- xx[2] = (GLshort)( xy >> 16 );
- yy[2] = (GLshort)( xy & 0xffff );
-
- a = (xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]);
-
- if ( mmesa->backface_sign &&
- ((a < 0 && !signbit( mmesa->backface_sign )) ||
- (a > 0 && signbit( mmesa->backface_sign ))) ) {
- /* cull triangle */
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS )
- fprintf(stderr,"Triangle culled\n");
- return;
- }
-
- ooa = 16.0 / a;
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * sizeof(CARD32) );
- vbchk = vb + vbsiz;
-
- COPY_VERTEX( vb, vertsize, v0, 1 );
- COPY_VERTEX( vb, vertsize, v1, 2 );
- COPY_VERTEX_OOA( vb, vertsize, v2, 3 );
- LE32_OUT( vb++, *(CARD32 *)&ooa );
-
- assert( vb == vbchk );
-
-#if MACH64_PRINT_BUFFER
- {
- int i;
- fprintf(stderr, "tri:\n");
- for (i = 0; i < vbsiz; i++)
- fprintf(stderr, " %08lx\n", *(vb - vbsiz + i));
- fprintf(stderr, "\n");
- }
-#endif
-#else
- GLuint vertsize = mmesa->vertex_size;
- GLint coloridx;
- GLfloat ooa;
- GLint xx[3], yy[3]; /* 2 fractional bits for hardware */
- unsigned vbsiz =
- ((
- 1 +
- (vertsize > 6 ? 2 : 0) +
- (vertsize > 4 ? 2 : 0) +
- 3 +
- (mmesa->multitex ? 4 : 0)
- ) * 3 + 2);
- CARD32 *vb;
- unsigned vbidx = 0;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS ) {
- fprintf(stderr, "%s:\n", __FUNCTION__);
- fprintf(stderr,"Vertex 1: x: %.2f, y: %.2f, z: %.2f, w: %f\n\ts0: %f, t0: %f\n\ts1: %f, t1: %f\n",
- v0->v.x, v0->v.y, v0->v.z, v0->v.w, v0->v.u0, v0->v.v0, v0->v.u1, v0->v.v1);
- fprintf(stderr,"Vertex 2: x: %.2f, y: %.2f, z: %.2f, w: %f\n\ts0: %f, t0: %f\n\ts1: %f, t1: %f\n",
- v1->v.x, v1->v.y, v1->v.z, v1->v.w, v1->v.u0, v1->v.v0, v1->v.u1, v1->v.v1);
- fprintf(stderr,"Vertex 3: x: %.2f, y: %.2f, z: %.2f, w: %f\n\ts0: %f, t0: %f\n\ts1: %f, t1: %f\n",
- v2->v.x, v2->v.y, v2->v.z, v2->v.w, v2->v.u0, v2->v.v0, v2->v.u1, v2->v.v1);
- }
-
-#if MACH64_CLIENT_STATE_EMITS
- /* Enable for interleaved client-side state emits */
- LOCK_HARDWARE( mmesa );
- if ( mmesa->dirty ) {
- mach64EmitHwStateLocked( mmesa );
- }
- if ( mmesa->sarea->dirty ) {
- mach64UploadHwStateLocked( mmesa );
- }
- UNLOCK_HARDWARE( mmesa );
-#endif
-
- xx[0] = (GLint)(v0->v.x * 4);
- yy[0] = (GLint)(v0->v.y * 4);
-
- xx[1] = (GLint)(v1->v.x * 4);
- yy[1] = (GLint)(v1->v.y * 4);
-
- xx[2] = (GLint)(v2->v.x * 4);
- yy[2] = (GLint)(v2->v.y * 4);
-
- ooa = 0.25 * 0.25 * ((xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]));
-
- if ( ooa * mmesa->backface_sign < 0 ) {
- /* cull triangle */
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS )
- fprintf(stderr,"Triangle culled\n");
- return;
- }
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * 4 );
-
- ooa = 1.0 / ooa;
-
- coloridx = (vertsize > 4) ? 4: 3;
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_1_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_1_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v0->ui[6] ); /* MACH64_VERTEX_1_S */
- LE32_OUT( &vb[vbidx++], v0->ui[7] ); /* MACH64_VERTEX_1_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_1_W */
- LE32_OUT( &vb[vbidx++], v0->ui[5] ); /* MACH64_VERTEX_1_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v0->v.z) << 15) ); /* MACH64_VERTEX_1_Z */
- vb[vbidx++] = v0->ui[coloridx]; /* MACH64_VERTEX_1_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[0] << 16) | (yy[0] & 0xffff) ); /* MACH64_VERTEX_1_X_Y */
-
- if (mmesa->multitex) {
- /* setup for 3 sequential reg writes */
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_SECONDARY_S) );
- LE32_OUT( &vb[vbidx++], v0->ui[8] ); /* MACH64_VERTEX_1_SECONDARY_S */
- LE32_OUT( &vb[vbidx++], v0->ui[9] ); /* MACH64_VERTEX_1_SECONDARY_T */
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_1_SECONDARY_W */
- }
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_2_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_2_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_2_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v1->ui[6] ); /* MACH64_VERTEX_2_S */
- LE32_OUT( &vb[vbidx++], v1->ui[7] ); /* MACH64_VERTEX_2_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v1->ui[3] ); /* MACH64_VERTEX_2_W */
- LE32_OUT( &vb[vbidx++], v1->ui[5] ); /* MACH64_VERTEX_2_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v1->v.z) << 15) ); /* MACH64_VERTEX_2_Z */
- vb[vbidx++] = v1->ui[coloridx]; /* MACH64_VERTEX_2_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[1] << 16) | (yy[1] & 0xffff) ); /* MACH64_VERTEX_2_X_Y */
-
- if (mmesa->multitex) {
- /* setup for 3 sequential reg writes */
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_2_SECONDARY_S) );
- LE32_OUT( &vb[vbidx++], v1->ui[8] ); /* MACH64_VERTEX_2_SECONDARY_S */
- LE32_OUT( &vb[vbidx++], v1->ui[9] ); /* MACH64_VERTEX_2_SECONDARY_T */
- LE32_OUT( &vb[vbidx++], v1->ui[3] ); /* MACH64_VERTEX_2_SECONDARY_W */
- }
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_3_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_3_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_3_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v2->ui[6] ); /* MACH64_VERTEX_3_S */
- LE32_OUT( &vb[vbidx++], v2->ui[7] ); /* MACH64_VERTEX_3_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v2->ui[3] ); /* MACH64_VERTEX_3_W */
- LE32_OUT( &vb[vbidx++], v2->ui[5] ); /* MACH64_VERTEX_3_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v2->v.z) << 15) ); /* MACH64_VERTEX_3_Z */
- vb[vbidx++] = v2->ui[coloridx]; /* MACH64_VERTEX_3_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[2] << 16) | (yy[2] & 0xffff) ); /* MACH64_VERTEX_3_X_Y */
-
- if (mmesa->multitex) {
- /* setup for 3 sequential reg writes */
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_3_SECONDARY_S) );
- LE32_OUT( &vb[vbidx++], v2->ui[8] ); /* MACH64_VERTEX_3_SECONDARY_S */
- LE32_OUT( &vb[vbidx++], v2->ui[9] ); /* MACH64_VERTEX_3_SECONDARY_T */
- LE32_OUT( &vb[vbidx++], v2->ui[3] ); /* MACH64_VERTEX_3_SECONDARY_W */
- }
-
- LE32_OUT( &vb[vbidx++], ADRINDEX(MACH64_ONE_OVER_AREA_UC) );
- LE32_OUT( &vb[vbidx++], *(GLuint *)&ooa );
-
- assert(vbsiz == vbidx);
-
-#if MACH64_PRINT_BUFFER
- {
- int i;
- fprintf(stderr, "tri:\n");
- for (i = 0; i < vbsiz; ++i)
- fprintf(stderr, " %08lx\n", *(vb + i));
- fprintf(stderr, "\n");
- }
-#endif
-#endif
-}
-
-static INLINE void mach64_draw_line( mach64ContextPtr mmesa,
- mach64VertexPtr v0,
- mach64VertexPtr v1 )
-{
-#if MACH64_NATIVE_VTXFMT
- struct gl_context *ctx = mmesa->glCtx;
- const GLuint vertsize = mmesa->vertex_size;
- /* 2 fractional bits for hardware: */
- const int width = (int) (2.0 * CLAMP(mmesa->glCtx->Line.Width,
- mmesa->glCtx->Const.MinLineWidth,
- mmesa->glCtx->Const.MaxLineWidth));
- GLfloat ooa;
- GLuint *pxy0, *pxy1;
- GLuint xy0old, xy0, xy1old, xy1;
- const GLuint xyoffset = 9;
- GLint x0, y0, x1, y1;
- GLint dx, dy, ix, iy;
- unsigned vbsiz = (vertsize + (vertsize > 7 ? 2 : 1)) * 4 + 2;
- CARD32 *vb, *vbchk;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS ) {
- fprintf(stderr, "%s:\n", __FUNCTION__);
- fprintf(stderr,"Vertex 1:\n");
- mach64_print_vertex( ctx, v0 );
- fprintf(stderr,"Vertex 2:\n");
- mach64_print_vertex( ctx, v1 );
- }
-
- pxy0 = &v0->ui[xyoffset];
- xy0old = *pxy0;
- xy0 = LE32_IN( &xy0old );
- x0 = (GLshort)( xy0 >> 16 );
- y0 = (GLshort)( xy0 & 0xffff );
-
- pxy1 = &v1->ui[xyoffset];
- xy1old = *pxy1;
- xy1 = LE32_IN( &xy1old );
- x1 = (GLshort)( xy1 >> 16 );
- y1 = (GLshort)( xy1 & 0xffff );
-
- if ( (dx = x1 - x0) < 0 ) {
- dx = -dx;
- }
- if ( (dy = y1 - y0) < 0 ) {
- dy = -dy;
- }
-
- /* adjust vertices depending on line direction */
- if ( dx > dy ) {
- ix = 0;
- iy = width;
- ooa = 8.0 / ((x1 - x0) * width);
- } else {
- ix = width;
- iy = 0;
- ooa = 8.0 / ((y0 - y1) * width);
- }
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * sizeof(CARD32) );
- vbchk = vb + vbsiz;
-
- LE32_OUT( pxy0, (( x0 - ix ) << 16) | (( y0 - iy ) & 0xffff) );
- COPY_VERTEX( vb, vertsize, v0, 1 );
- LE32_OUT( pxy1, (( x1 - ix ) << 16) | (( y1 - iy ) & 0xffff) );
- COPY_VERTEX( vb, vertsize, v1, 2 );
- LE32_OUT( pxy0, (( x0 + ix ) << 16) | (( y0 + iy ) & 0xffff) );
- COPY_VERTEX_OOA( vb, vertsize, v0, 3 );
- LE32_OUT( vb++, *(CARD32 *)&ooa );
-
- ooa = -ooa;
-
- LE32_OUT( pxy1, (( x1 + ix ) << 16) | (( y1 + iy ) & 0xffff) );
- COPY_VERTEX_OOA( vb, vertsize, v1, 1 );
- LE32_OUT( vb++, *(CARD32 *)&ooa );
-
- *pxy0 = xy0old;
- *pxy1 = xy1old;
-#else /* !MACH64_NATIVE_VTXFMT */
- GLuint vertsize = mmesa->vertex_size;
- GLint coloridx;
- float width = 1.0; /* Only support 1 pix lines now */
- GLfloat ooa;
- GLint xx[3], yy[3]; /* 2 fractional bits for hardware */
- unsigned vbsiz =
- ((
- 1 +
- (vertsize > 6 ? 2 : 0) +
- (vertsize > 4 ? 2 : 0) +
- 3 +
- (mmesa->multitex ? 4 : 0)
- ) * 4 + 4);
- CARD32 *vb;
- unsigned vbidx = 0;
-
- GLfloat hw, dx, dy, ix, iy;
- GLfloat x0 = v0->v.x;
- GLfloat y0 = v0->v.y;
- GLfloat x1 = v1->v.x;
- GLfloat y1 = v1->v.y;
-
-#if MACH64_CLIENT_STATE_EMITS
- /* Enable for interleaved client-side state emits */
- LOCK_HARDWARE( mmesa );
- if ( mmesa->dirty ) {
- mach64EmitHwStateLocked( mmesa );
- }
- if ( mmesa->sarea->dirty ) {
- mach64UploadHwStateLocked( mmesa );
- }
- UNLOCK_HARDWARE( mmesa );
-#endif
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS ) {
- fprintf(stderr, "%s:\n", __FUNCTION__);
- fprintf(stderr,"Vertex 1: x: %.2f, y: %.2f, z: %.2f, w: %f\n",
- v0->v.x, v0->v.y, v0->v.z, v0->v.w);
- fprintf(stderr,"Vertex 2: x: %.2f, y: %.2f, z: %.2f, w: %f\n",
- v1->v.x, v1->v.y, v1->v.z, v1->v.w);
- }
-
- hw = 0.5F * width;
- if (hw > 0.1F && hw < 0.5F) {
- hw = 0.5F;
- }
-
- /* adjust vertices depending on line direction */
- dx = v0->v.x - v1->v.x;
- dy = v0->v.y - v1->v.y;
- if (dx * dx > dy * dy) {
- /* X-major line */
- ix = 0.0F;
- iy = hw;
- if (x1 < x0) {
- x0 += 0.5F;
- x1 += 0.5F;
- }
- y0 -= 0.5F;
- y1 -= 0.5F;
- }
- else {
- /* Y-major line */
- ix = hw;
- iy = 0.0F;
- if (y1 > y0) {
- y0 -= 0.5F;
- y1 -= 0.5F;
- }
- x0 += 0.5F;
- x1 += 0.5F;
- }
-
- xx[0] = (GLint)((x0 - ix) * 4);
- yy[0] = (GLint)((y0 - iy) * 4);
-
- xx[1] = (GLint)((x1 - ix) * 4);
- yy[1] = (GLint)((y1 - iy) * 4);
-
- xx[2] = (GLint)((x0 + ix) * 4);
- yy[2] = (GLint)((y0 + iy) * 4);
-
- ooa = 0.25 * 0.25 * ((xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]));
-
- if ( ooa * mmesa->backface_sign < 0 ) {
- /* cull line */
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS )
- fprintf(stderr,"Line culled\n");
- return;
- }
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * 4 );
-
- ooa = 1.0 / ooa;
-
- coloridx = (vertsize > 4) ? 4: 3;
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_1_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_1_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v0->ui[6] ); /* MACH64_VERTEX_1_S */
- LE32_OUT( &vb[vbidx++], v0->ui[7] ); /* MACH64_VERTEX_1_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_1_W */
- LE32_OUT( &vb[vbidx++], v0->ui[5] ); /* MACH64_VERTEX_1_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v0->v.z) << 15) ); /* MACH64_VERTEX_1_Z */
- vb[vbidx++] = v0->ui[coloridx]; /* MACH64_VERTEX_1_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[0] << 16) | (yy[0] & 0xffff) ); /* MACH64_VERTEX_1_X_Y */
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_2_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_2_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_2_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v1->ui[6] ); /* MACH64_VERTEX_2_S */
- LE32_OUT( &vb[vbidx++], v1->ui[7] ); /* MACH64_VERTEX_2_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v1->ui[3] ); /* MACH64_VERTEX_2_W */
- LE32_OUT( &vb[vbidx++], v1->ui[5] ); /* MACH64_VERTEX_2_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v1->v.z) << 15) ); /* MACH64_VERTEX_2_Z */
- vb[vbidx++] = v1->ui[coloridx]; /* MACH64_VERTEX_2_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[1] << 16) | (yy[1] & 0xffff) ); /* MACH64_VERTEX_2_X_Y */
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_3_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_3_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_3_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v0->ui[6] ); /* MACH64_VERTEX_3_S */
- LE32_OUT( &vb[vbidx++], v0->ui[7] ); /* MACH64_VERTEX_3_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_3_W */
- LE32_OUT( &vb[vbidx++], v0->ui[5] ); /* MACH64_VERTEX_3_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v0->v.z) << 15) ); /* MACH64_VERTEX_3_Z */
- vb[vbidx++] = v0->ui[coloridx]; /* MACH64_VERTEX_3_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[2] << 16) | (yy[2] & 0xffff) ); /* MACH64_VERTEX_3_X_Y */
-
- LE32_OUT( &vb[vbidx++], ADRINDEX(MACH64_ONE_OVER_AREA_UC) );
- LE32_OUT( &vb[vbidx++], *(GLuint *)&ooa );
-
- xx[0] = (GLint)((x1 + ix) * 4);
- yy[0] = (GLint)((y1 + iy) * 4);
-
- ooa = 0.25 * 0.25 * ((xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]));
- ooa = 1.0 / ooa;
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_1_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_1_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v1->ui[6] ); /* MACH64_VERTEX_1_S */
- LE32_OUT( &vb[vbidx++], v1->ui[7] ); /* MACH64_VERTEX_1_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v1->ui[3] ); /* MACH64_VERTEX_1_W */
- LE32_OUT( &vb[vbidx++], v1->ui[5] ); /* MACH64_VERTEX_1_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v1->v.z) << 15) ); /* MACH64_VERTEX_1_Z */
- vb[vbidx++] = v1->ui[coloridx]; /* MACH64_VERTEX_1_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[0] << 16) | (yy[0] & 0xffff) ); /* MACH64_VERTEX_1_X_Y */
-
- LE32_OUT( &vb[vbidx++], ADRINDEX(MACH64_ONE_OVER_AREA_UC) );
- LE32_OUT( &vb[vbidx++], *(GLuint *)&ooa );
-
- assert(vbsiz == vbidx);
-#endif
-}
-
-static INLINE void mach64_draw_point( mach64ContextPtr mmesa,
- mach64VertexPtr v0 )
-{
-#if MACH64_NATIVE_VTXFMT
- struct gl_context *ctx = mmesa->glCtx;
- const GLuint vertsize = mmesa->vertex_size;
- /* 2 fractional bits for hardware: */
- GLint sz = (GLint) (2.0 * CLAMP(mmesa->glCtx->Point.Size,
- ctx->Const.MinPointSize,
- ctx->Const.MaxPointSize));
- GLfloat ooa;
- GLuint *pxy;
- GLuint xyold, xy;
- const GLuint xyoffset = 9;
- GLint x, y;
- unsigned vbsiz = (vertsize + (vertsize > 7 ? 2 : 1)) * 4 + 2;
- CARD32 *vb, *vbchk;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS ) {
- fprintf(stderr, "%s:\n", __FUNCTION__);
- fprintf(stderr,"Vertex 1:\n");
- mach64_print_vertex( ctx, v0 );
- }
-
- if( !sz )
- sz = 1; /* round to the nearest supported size */
-
- pxy = &v0->ui[xyoffset];
- xyold = *pxy;
- xy = LE32_IN( &xyold );
- x = (GLshort)( xy >> 16 );
- y = (GLshort)( xy & 0xffff );
-
- ooa = 4.0 / (sz * sz);
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * sizeof(CARD32) );
- vbchk = vb + vbsiz;
-
- LE32_OUT( pxy, (( x - sz ) << 16) | (( y - sz ) & 0xffff) );
- COPY_VERTEX( vb, vertsize, v0, 1 );
- LE32_OUT( pxy, (( x + sz ) << 16) | (( y - sz ) & 0xffff) );
- COPY_VERTEX( vb, vertsize, v0, 2 );
- LE32_OUT( pxy, (( x - sz ) << 16) | (( y + sz ) & 0xffff) );
- COPY_VERTEX_OOA( vb, vertsize, v0, 3 );
- LE32_OUT( vb++, *(CARD32 *)&ooa );
-
- ooa = -ooa;
-
- LE32_OUT( pxy, (( x + sz ) << 16) | (( y + sz ) & 0xffff) );
- COPY_VERTEX_OOA( vb, vertsize, v0, 1 );
- LE32_OUT( vb++, *(CARD32 *)&ooa );
-
- *pxy = xyold;
-#else /* !MACH64_NATIVE_VTXFMT */
- GLuint vertsize = mmesa->vertex_size;
- GLint coloridx;
- float sz = 1.0; /* Only support 1 pix points now */
- GLfloat ooa;
- GLint xx[3], yy[3]; /* 2 fractional bits for hardware */
- unsigned vbsiz =
- ((
- 1 +
- (vertsize > 6 ? 2 : 0) +
- (vertsize > 4 ? 2 : 0) +
- 3 +
- (mmesa->multitex ? 4 : 0)
- ) * 4 + 4);
- CARD32 *vb;
- unsigned vbidx = 0;
-
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS ) {
- fprintf(stderr, "%s:\n", __FUNCTION__);
- fprintf(stderr,"Vertex 1: x: %.2f, y: %.2f, z: %.2f, w: %f\n",
- v0->v.x, v0->v.y, v0->v.z, v0->v.w);
- }
-
-#if MACH64_CLIENT_STATE_EMITS
- /* Enable for interleaved client-side state emits */
- LOCK_HARDWARE( mmesa );
- if ( mmesa->dirty ) {
- mach64EmitHwStateLocked( mmesa );
- }
- if ( mmesa->sarea->dirty ) {
- mach64UploadHwStateLocked( mmesa );
- }
- UNLOCK_HARDWARE( mmesa );
-#endif
-
- xx[0] = (GLint)((v0->v.x - sz) * 4);
- yy[0] = (GLint)((v0->v.y - sz) * 4);
-
- xx[1] = (GLint)((v0->v.x + sz) * 4);
- yy[1] = (GLint)((v0->v.y - sz) * 4);
-
- xx[2] = (GLint)((v0->v.x - sz) * 4);
- yy[2] = (GLint)((v0->v.y + sz) * 4);
-
- ooa = 0.25 * 0.25 * ((xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]));
-
- if ( ooa * mmesa->backface_sign < 0 ) {
- /* cull quad */
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS )
- fprintf(stderr,"Point culled\n");
- return;
- }
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * 4 );
-
- ooa = 1.0 / ooa;
-
- coloridx = (vertsize > 4) ? 4: 3;
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_1_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_1_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v0->ui[6] ); /* MACH64_VERTEX_1_S */
- LE32_OUT( &vb[vbidx++], v0->ui[7] ); /* MACH64_VERTEX_1_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_1_W */
- LE32_OUT( &vb[vbidx++], v0->ui[5] ); /* MACH64_VERTEX_1_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v0->v.z) << 15) ); /* MACH64_VERTEX_1_Z */
- vb[vbidx++] = v0->ui[coloridx]; /* MACH64_VERTEX_1_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[0] << 16) | (yy[0] & 0xffff) ); /* MACH64_VERTEX_1_X_Y */
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_2_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_2_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_2_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v0->ui[6] ); /* MACH64_VERTEX_2_S */
- LE32_OUT( &vb[vbidx++], v0->ui[7] ); /* MACH64_VERTEX_2_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_2_W */
- LE32_OUT( &vb[vbidx++], v0->ui[5] ); /* MACH64_VERTEX_2_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v0->v.z) << 15) ); /* MACH64_VERTEX_2_Z */
- vb[vbidx++] = v0->ui[coloridx]; /* MACH64_VERTEX_2_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[1] << 16) | (yy[1] & 0xffff) ); /* MACH64_VERTEX_2_X_Y */
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_3_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_3_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_3_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v0->ui[6] ); /* MACH64_VERTEX_3_S */
- LE32_OUT( &vb[vbidx++], v0->ui[7] ); /* MACH64_VERTEX_3_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_3_W */
- LE32_OUT( &vb[vbidx++], v0->ui[5] ); /* MACH64_VERTEX_3_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v0->v.z) << 15) ); /* MACH64_VERTEX_3_Z */
- vb[vbidx++] = v0->ui[coloridx]; /* MACH64_VERTEX_3_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[2] << 16) | (yy[2] & 0xffff) ); /* MACH64_VERTEX_3_X_Y */
-
- LE32_OUT( &vb[vbidx++], ADRINDEX(MACH64_ONE_OVER_AREA_UC) );
- LE32_OUT( &vb[vbidx++], *(GLuint *)&ooa );
-
- xx[0] = (GLint)((v0->v.x + sz) * 4);
- yy[0] = (GLint)((v0->v.y + sz) * 4);
-
- ooa = 0.25 * 0.25 * ((xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]));
- ooa = 1.0 / ooa;
-
- /* setup for 3,5, or 7 sequential reg writes based on vertex format */
- switch (vertsize) {
- case 6:
- LE32_OUT( &vb[vbidx++], (4 << 16) | ADRINDEX(MACH64_VERTEX_1_W) );
- break;
- case 4:
- LE32_OUT( &vb[vbidx++], (2 << 16) | ADRINDEX(MACH64_VERTEX_1_Z) );
- break;
- default: /* vertsize >= 8 */
- LE32_OUT( &vb[vbidx++], (6 << 16) | ADRINDEX(MACH64_VERTEX_1_S) );
- break;
- }
- if (vertsize > 6) {
- LE32_OUT( &vb[vbidx++], v0->ui[6] ); /* MACH64_VERTEX_1_S */
- LE32_OUT( &vb[vbidx++], v0->ui[7] ); /* MACH64_VERTEX_1_T */
- }
- if (vertsize > 4) {
- LE32_OUT( &vb[vbidx++], v0->ui[3] ); /* MACH64_VERTEX_1_W */
- LE32_OUT( &vb[vbidx++], v0->ui[5] ); /* MACH64_VERTEX_1_SPEC_ARGB */
- }
- LE32_OUT( &vb[vbidx++], ((GLint)(v0->v.z) << 15) ); /* MACH64_VERTEX_1_Z */
- vb[vbidx++] = v0->ui[coloridx]; /* MACH64_VERTEX_1_ARGB */
- LE32_OUT( &vb[vbidx++], (xx[0] << 16) | (yy[0] & 0xffff) ); /* MACH64_VERTEX_1_X_Y */
-
- LE32_OUT( &vb[vbidx++], ADRINDEX(MACH64_ONE_OVER_AREA_UC) );
- LE32_OUT( &vb[vbidx++], *(GLuint *)&ooa );
-
- assert(vbsiz == vbidx);
-#endif
-}
-
-/***********************************************************************
- * Macros for t_dd_tritmp.h to draw basic primitives *
- ***********************************************************************/
-
-#define TRI( a, b, c ) \
-do { \
- if (DO_FALLBACK) \
- mmesa->draw_tri( mmesa, a, b, c ); \
- else \
- mach64_draw_triangle( mmesa, a, b, c ); \
-} while (0)
-
-#define QUAD( a, b, c, d ) \
-do { \
- if (DO_FALLBACK) { \
- mmesa->draw_tri( mmesa, a, b, d ); \
- mmesa->draw_tri( mmesa, b, c, d ); \
- } else \
- mach64_draw_quad( mmesa, a, b, c, d ); \
-} while (0)
-
-#define LINE( v0, v1 ) \
-do { \
- if (DO_FALLBACK) \
- mmesa->draw_line( mmesa, v0, v1 ); \
- else \
- mach64_draw_line( mmesa, v0, v1 ); \
-} while (0)
-
-#define POINT( v0 ) \
-do { \
- if (DO_FALLBACK) \
- mmesa->draw_point( mmesa, v0 ); \
- else \
- mach64_draw_point( mmesa, v0 ); \
-} while (0)
-
-
-/***********************************************************************
- * Build render functions from dd templates *
- ***********************************************************************/
-
-#define MACH64_OFFSET_BIT 0x01
-#define MACH64_TWOSIDE_BIT 0x02
-#define MACH64_UNFILLED_BIT 0x04
-#define MACH64_FALLBACK_BIT 0x08
-#define MACH64_MAX_TRIFUNC 0x10
-
-static struct {
- tnl_points_func points;
- tnl_line_func line;
- tnl_triangle_func triangle;
- tnl_quad_func quad;
-} rast_tab[MACH64_MAX_TRIFUNC];
-
-
-#define DO_FALLBACK (IND & MACH64_FALLBACK_BIT)
-#define DO_OFFSET (IND & MACH64_OFFSET_BIT)
-#define DO_UNFILLED (IND & MACH64_UNFILLED_BIT)
-#define DO_TWOSIDE (IND & MACH64_TWOSIDE_BIT)
-#define DO_FLAT 0
-#define DO_TRI 1
-#define DO_QUAD 1
-#define DO_LINE 1
-#define DO_POINTS 1
-#define DO_FULL_QUAD 1
-
-#define HAVE_SPEC 1
-#define HAVE_BACK_COLORS 0
-#define HAVE_HW_FLATSHADE 1
-#define VERTEX mach64Vertex
-#define TAB rast_tab
-
-#if MACH64_NATIVE_VTXFMT
-
-/* #define DEPTH_SCALE 65536.0 */
-#define DEPTH_SCALE 1
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) ((GLfloat)(GLshort)(LE32_IN( &(_v)->ui[xyoffset] ) & 0xffff) / 4.0)
-#define VERT_Y(_v) ((GLfloat)(GLshort)(LE32_IN( &(_v)->ui[xyoffset] ) >> 16) / 4.0)
-#define VERT_Z(_v) ((GLfloat) LE32_IN( &(_v)->ui[zoffset] ))
-#define INSANE_VERTICES
-#define VERT_SET_Z(_v,val) LE32_OUT( &(_v)->ui[zoffset], (GLuint)(val) )
-#define VERT_Z_ADD(_v,val) LE32_OUT( &(_v)->ui[zoffset], LE32_IN( &(_v)->ui[zoffset] ) + (GLuint)(val) )
-#define AREA_IS_CCW( a ) ((a) < 0)
-#define GET_VERTEX(e) (mmesa->verts + ((e) * mmesa->vertex_size * sizeof(int)))
-
-#define MACH64_COLOR( dst, src ) \
-do { \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[0], src[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[1], src[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[2], src[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[3], src[3]); \
-} while (0)
-
-#define MACH64_SPEC( dst, src ) \
-do { \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[0], src[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[1], src[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[2], src[0]); \
-} while (0)
-
-#define VERT_SET_RGBA( v, c ) MACH64_COLOR( v->ub4[coloroffset], c )
-#define VERT_COPY_RGBA( v0, v1 ) v0->ui[coloroffset] = v1->ui[coloroffset]
-#define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[coloroffset]
-#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[coloroffset] = color[idx]
-
-#define VERT_SET_SPEC( v, c ) if (havespec) MACH64_SPEC( v->ub4[specoffset], c )
-#define VERT_COPY_SPEC( v0, v1 ) if (havespec) COPY_3V( v0->ub4[specoffset], v1->ub4[specoffset] )
-#define VERT_SAVE_SPEC( idx ) if (havespec) spec[idx] = v[idx]->ui[specoffset]
-#define VERT_RESTORE_SPEC( idx ) if (havespec) v[idx]->ui[specoffset] = spec[idx]
-
-#define LOCAL_VARS(n) \
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx); \
- GLuint color[n] = { 0 }; \
- GLuint spec[n] = { 0 }; \
- GLuint vertex_size = mmesa->vertex_size; \
- const GLuint xyoffset = 9; \
- const GLuint coloroffset = 8; \
- const GLuint zoffset = 7; \
- const GLuint specoffset = 6; \
- GLboolean havespec = vertex_size >= 4 ? 1 : 0; \
- (void) color; (void) spec; (void) vertex_size; \
- (void) xyoffset; (void) coloroffset; (void) zoffset; \
- (void) specoffset; (void) havespec;
-
-#else
-
-#define DEPTH_SCALE 1.0
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) _v->v.x
-#define VERT_Y(_v) _v->v.y
-#define VERT_Z(_v) _v->v.z
-#define AREA_IS_CCW( a ) (a > 0)
-#define GET_VERTEX(e) (mmesa->verts + ((e) * mmesa->vertex_size * sizeof(int)))
-
-#define MACH64_COLOR( dst, src ) \
-do { \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[0], src[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[1], src[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[2], src[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[3], src[3]); \
-} while (0)
-
-#define MACH64_SPEC( dst, src ) \
-do { \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[0], src[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[1], src[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(dst[2], src[0]); \
-} while (0)
-
-#define VERT_SET_RGBA( v, c ) MACH64_COLOR( v->ub4[coloroffset], c )
-#define VERT_COPY_RGBA( v0, v1 ) v0->ui[coloroffset] = v1->ui[coloroffset]
-#define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[coloroffset]
-#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[coloroffset] = color[idx]
-
-#define VERT_SET_SPEC( v, c ) if (havespec) MACH64_SPEC( v->ub4[5], c )
-#define VERT_COPY_SPEC( v0, v1 ) if (havespec) COPY_3V(v0->ub4[5], v1->ub4[5])
-#define VERT_SAVE_SPEC( idx ) if (havespec) spec[idx] = v[idx]->ui[5]
-#define VERT_RESTORE_SPEC( idx ) if (havespec) v[idx]->ui[5] = spec[idx]
-
-#define LOCAL_VARS(n) \
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx); \
- GLuint color[n], spec[n]; \
- GLuint coloroffset = (mmesa->vertex_size == 4 ? 3 : 4); \
- GLboolean havespec = (mmesa->vertex_size == 4 ? 0 : 1); \
- (void) color; (void) spec; (void) coloroffset; (void) havespec;
-
-#endif
-
-/***********************************************************************
- * Helpers for rendering unfilled primitives *
- ***********************************************************************/
-
-#define RASTERIZE(x) if (mmesa->hw_primitive != hw_prim[x]) \
- mach64RasterPrimitive( ctx, hw_prim[x] )
-#define RENDER_PRIMITIVE mmesa->render_primitive
-#define IND MACH64_FALLBACK_BIT
-#define TAG(x) x
-#include "tnl_dd/t_dd_unfilled.h"
-#undef IND
-
-
-/***********************************************************************
- * Generate GL render functions *
- ***********************************************************************/
-
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_TWOSIDE_BIT|MACH64_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_OFFSET_BIT|MACH64_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_TWOSIDE_BIT|MACH64_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_TWOSIDE_BIT|MACH64_OFFSET_BIT|MACH64_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_FALLBACK_BIT)
-#define TAG(x) x##_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_OFFSET_BIT|MACH64_FALLBACK_BIT)
-#define TAG(x) x##_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_TWOSIDE_BIT|MACH64_FALLBACK_BIT)
-#define TAG(x) x##_twoside_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_TWOSIDE_BIT|MACH64_OFFSET_BIT|MACH64_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_UNFILLED_BIT|MACH64_FALLBACK_BIT)
-#define TAG(x) x##_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_OFFSET_BIT|MACH64_UNFILLED_BIT|MACH64_FALLBACK_BIT)
-#define TAG(x) x##_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_TWOSIDE_BIT|MACH64_UNFILLED_BIT|MACH64_FALLBACK_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MACH64_TWOSIDE_BIT|MACH64_OFFSET_BIT|MACH64_UNFILLED_BIT| \
- MACH64_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-static void init_rast_tab( void )
-{
- init();
- init_offset();
- init_twoside();
- init_twoside_offset();
- init_unfilled();
- init_offset_unfilled();
- init_twoside_unfilled();
- init_twoside_offset_unfilled();
- init_fallback();
- init_offset_fallback();
- init_twoside_fallback();
- init_twoside_offset_fallback();
- init_unfilled_fallback();
- init_offset_unfilled_fallback();
- init_twoside_unfilled_fallback();
- init_twoside_offset_unfilled_fallback();
-}
-
-
-/***********************************************************************
- * Rasterization fallback helpers *
- ***********************************************************************/
-
-
-/* This code is hit only when a mix of accelerated and unaccelerated
- * primitives are being drawn, and only for the unaccelerated
- * primitives.
- */
-static void
-mach64_fallback_tri( mach64ContextPtr mmesa,
- mach64Vertex *v0,
- mach64Vertex *v1,
- mach64Vertex *v2 )
-{
- struct gl_context *ctx = mmesa->glCtx;
- SWvertex v[3];
- mach64_translate_vertex( ctx, v0, &v[0] );
- mach64_translate_vertex( ctx, v1, &v[1] );
- mach64_translate_vertex( ctx, v2, &v[2] );
- _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
-}
-
-
-static void
-mach64_fallback_line( mach64ContextPtr mmesa,
- mach64Vertex *v0,
- mach64Vertex *v1 )
-{
- struct gl_context *ctx = mmesa->glCtx;
- SWvertex v[2];
- mach64_translate_vertex( ctx, v0, &v[0] );
- mach64_translate_vertex( ctx, v1, &v[1] );
- _swrast_Line( ctx, &v[0], &v[1] );
-}
-
-
-static void
-mach64_fallback_point( mach64ContextPtr mmesa,
- mach64Vertex *v0 )
-{
- struct gl_context *ctx = mmesa->glCtx;
- SWvertex v[1];
- mach64_translate_vertex( ctx, v0, &v[0] );
- _swrast_Point( ctx, &v[0] );
-}
-
-
-
-/**********************************************************************/
-/* Render unclipped begin/end objects */
-/**********************************************************************/
-
-#define VERT(x) (mach64Vertex *)(mach64verts + ((x) * vertsize * sizeof(int)))
-#define RENDER_POINTS( start, count ) \
- for ( ; start < count ; start++) \
- mach64_draw_point( mmesa, VERT(start) )
-#define RENDER_LINE( v0, v1 ) \
- mach64_draw_line( mmesa, VERT(v0), VERT(v1) )
-#define RENDER_TRI( v0, v1, v2 ) \
- mach64_draw_triangle( mmesa, VERT(v0), VERT(v1), VERT(v2) )
-#define RENDER_QUAD( v0, v1, v2, v3 ) \
- mach64_draw_quad( mmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
-#define INIT(x) do { \
- if (0) fprintf(stderr, "%s\n", __FUNCTION__); \
- mach64RenderPrimitive( ctx, x ); \
-} while (0)
-#undef LOCAL_VARS
-#define LOCAL_VARS \
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx); \
- const GLuint vertsize = mmesa->vertex_size; \
- const char *mach64verts = (char *)mmesa->verts; \
- const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
- (void) elt;
-#define RESET_STIPPLE
-#define RESET_OCCLUSION
-#define PRESERVE_VB_DEFS
-#define ELT(x) (x)
-#define TAG(x) mach64_##x##_verts
-#include "tnl/t_vb_rendertmp.h"
-#undef ELT
-#undef TAG
-#define TAG(x) mach64_##x##_elts
-#define ELT(x) elt[x]
-#include "tnl/t_vb_rendertmp.h"
-
-
-/**********************************************************************/
-/* Render clipped primitives */
-/**********************************************************************/
-
-static void mach64RenderClippedPoly( struct gl_context *ctx, const GLuint *elts,
- GLuint n )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLuint prim = mmesa->render_primitive;
-
- /* Render the new vertices as an unclipped polygon.
- */
- {
- GLuint *tmp = VB->Elts;
- VB->Elts = (GLuint *)elts;
- tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n, PRIM_BEGIN|PRIM_END );
- VB->Elts = tmp;
- }
-
- /* Restore the render primitive
- */
- if (prim != GL_POLYGON)
- tnl->Driver.Render.PrimitiveNotify( ctx, prim );
-
-}
-
-static void mach64RenderClippedLine( struct gl_context *ctx, GLuint ii, GLuint jj )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->Driver.Render.Line( ctx, ii, jj );
-}
-
-#if MACH64_NATIVE_VTXFMT
-static void mach64FastRenderClippedPoly( struct gl_context *ctx, const GLuint *elts,
- GLuint n )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
- const GLuint vertsize = mmesa->vertex_size;
- GLint a;
- union {
- GLfloat f;
- CARD32 u;
- } ooa;
- GLuint xy;
- const GLuint xyoffset = 9;
- GLint xx[3], yy[3]; /* 2 fractional bits for hardware */
- unsigned vbsiz = (vertsize + (vertsize > 7 ? 2 : 1)) * n + (n-2);
- CARD32 *vb, *vbchk;
- GLubyte *mach64verts = (GLubyte *)mmesa->verts;
- mach64VertexPtr v0, v1, v2;
- int i;
-
- v0 = (mach64VertexPtr)VERT(elts[1]);
- v1 = (mach64VertexPtr)VERT(elts[2]);
- v2 = (mach64VertexPtr)VERT(elts[0]);
-
- xy = LE32_IN( &v0->ui[xyoffset] );
- xx[0] = (GLshort)( xy >> 16 );
- yy[0] = (GLshort)( xy & 0xffff );
-
- xy = LE32_IN( &v1->ui[xyoffset] );
- xx[1] = (GLshort)( xy >> 16 );
- yy[1] = (GLshort)( xy & 0xffff );
-
- xy = LE32_IN( &v2->ui[xyoffset] );
- xx[2] = (GLshort)( xy >> 16 );
- yy[2] = (GLshort)( xy & 0xffff );
-
- a = (xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]);
-
- if ( (mmesa->backface_sign &&
- ((a < 0 && !signbit( mmesa->backface_sign )) ||
- (a > 0 && signbit( mmesa->backface_sign )))) ) {
- /* cull polygon */
- if ( MACH64_DEBUG & DEBUG_VERBOSE_PRIMS )
- fprintf(stderr,"Polygon culled\n");
- return;
- }
-
- ooa.f = 16.0 / a;
-
- vb = (CARD32 *)mach64AllocDmaLow( mmesa, vbsiz * sizeof(CARD32) );
- vbchk = vb + vbsiz;
-
- COPY_VERTEX( vb, vertsize, v0, 1 );
- COPY_VERTEX( vb, vertsize, v1, 2 );
- COPY_VERTEX_OOA( vb, vertsize, v2, 3 );
- LE32_OUT( vb++, ooa.u );
-
- i = 3;
- while (1) {
- if (i >= n)
- break;
- v0 = (mach64VertexPtr)VERT(elts[i]);
- i++;
-
- xy = LE32_IN( &v0->ui[xyoffset] );
- xx[0] = (GLshort)( xy >> 16 );
- yy[0] = (GLshort)( xy & 0xffff );
-
- a = (xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]);
- ooa.f = 16.0 / a;
-
- COPY_VERTEX_OOA( vb, vertsize, v0, 1 );
- LE32_OUT( vb++, ooa.u );
-
- if (i >= n)
- break;
- v1 = (mach64VertexPtr)VERT(elts[i]);
- i++;
-
- xy = LE32_IN( &v1->ui[xyoffset] );
- xx[1] = (GLshort)( xy >> 16 );
- yy[1] = (GLshort)( xy & 0xffff );
-
- a = (xx[0] - xx[2]) * (yy[1] - yy[2]) -
- (yy[0] - yy[2]) * (xx[1] - xx[2]);
- ooa.f = 16.0 / a;
-
- COPY_VERTEX_OOA( vb, vertsize, v1, 2 );
- LE32_OUT( vb++, ooa.u );
- }
-
- assert( vb == vbchk );
-}
-#else
-static void mach64FastRenderClippedPoly( struct gl_context *ctx, const GLuint *elts,
- GLuint n )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
- const GLuint vertsize = mmesa->vertex_size;
- GLubyte *mach64verts = (GLubyte *)mmesa->verts;
- const GLuint *start = (const GLuint *)VERT(elts[0]);
- int i;
-
- for (i = 2 ; i < n ; i++) {
- mach64_draw_triangle( mmesa,
- VERT(elts[i-1]),
- VERT(elts[i]),
- (mach64VertexPtr) start
- );
- }
-}
-#endif /* MACH64_NATIVE_VTXFMT */
-
-/**********************************************************************/
-/* Choose render functions */
-/**********************************************************************/
-
-#define _MACH64_NEW_RENDER_STATE (_DD_NEW_POINT_SMOOTH | \
- _DD_NEW_LINE_SMOOTH | \
- _DD_NEW_LINE_STIPPLE | \
- _DD_NEW_TRI_SMOOTH | \
- _DD_NEW_TRI_STIPPLE | \
- _NEW_POLYGONSTIPPLE | \
- _DD_NEW_TRI_UNFILLED | \
- _DD_NEW_TRI_LIGHT_TWOSIDE | \
- _DD_NEW_TRI_OFFSET) \
-
-#define POINT_FALLBACK (DD_POINT_SMOOTH)
-#define LINE_FALLBACK (DD_LINE_SMOOTH|DD_LINE_STIPPLE)
-#define TRI_FALLBACK (DD_TRI_SMOOTH|DD_TRI_STIPPLE)
-#define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)
-#define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
-
-
-static void mach64ChooseRenderState(struct gl_context *ctx)
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint flags = ctx->_TriangleCaps;
- GLuint index = 0;
-
- if (flags & (ANY_RASTER_FLAGS|ANY_FALLBACK_FLAGS)) {
- mmesa->draw_point = mach64_draw_point;
- mmesa->draw_line = mach64_draw_line;
- mmesa->draw_tri = mach64_draw_triangle;
-
- if (flags & ANY_RASTER_FLAGS) {
- if (flags & DD_TRI_LIGHT_TWOSIDE) index |= MACH64_TWOSIDE_BIT;
- if (flags & DD_TRI_OFFSET) index |= MACH64_OFFSET_BIT;
- if (flags & DD_TRI_UNFILLED) index |= MACH64_UNFILLED_BIT;
- }
-
- /* Hook in fallbacks for specific primitives.
- */
- if (flags & (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)) {
- if (flags & POINT_FALLBACK) mmesa->draw_point = mach64_fallback_point;
- if (flags & LINE_FALLBACK) mmesa->draw_line = mach64_fallback_line;
- if (flags & TRI_FALLBACK) mmesa->draw_tri = mach64_fallback_tri;
- index |= MACH64_FALLBACK_BIT;
- }
- }
-
- if (index != mmesa->RenderIndex) {
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->Driver.Render.Points = rast_tab[index].points;
- tnl->Driver.Render.Line = rast_tab[index].line;
- tnl->Driver.Render.Triangle = rast_tab[index].triangle;
- tnl->Driver.Render.Quad = rast_tab[index].quad;
-
- if (index == 0) {
- tnl->Driver.Render.PrimTabVerts = mach64_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = mach64_render_tab_elts;
- tnl->Driver.Render.ClippedLine = rast_tab[index].line;
- tnl->Driver.Render.ClippedPolygon = mach64FastRenderClippedPoly;
- } else {
- tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
- tnl->Driver.Render.ClippedLine = mach64RenderClippedLine;
- tnl->Driver.Render.ClippedPolygon = mach64RenderClippedPoly;
- }
-
- mmesa->RenderIndex = index;
- }
-}
-
-/**********************************************************************/
-/* Validate state at pipeline start */
-/**********************************************************************/
-
-static void mach64RunPipeline( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- if (mmesa->new_state)
- mach64DDUpdateHWState( ctx );
-
- if (!mmesa->Fallback && mmesa->NewGLState) {
- if (mmesa->NewGLState & _MACH64_NEW_VERTEX_STATE)
- mach64ChooseVertexState( ctx );
-
- if (mmesa->NewGLState & _MACH64_NEW_RENDER_STATE)
- mach64ChooseRenderState( ctx );
-
- mmesa->NewGLState = 0;
- }
-
- _tnl_run_pipeline( ctx );
-}
-
-/**********************************************************************/
-/* High level hooks for t_vb_render.c */
-/**********************************************************************/
-
-/* This is called when Mesa switches between rendering triangle
- * primitives (such as GL_POLYGON, GL_QUADS, GL_TRIANGLE_STRIP, etc),
- * and lines, points and bitmaps.
- */
-
-static void mach64RasterPrimitive( struct gl_context *ctx, GLuint hwprim )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
- mmesa->new_state |= MACH64_NEW_CONTEXT;
- mmesa->dirty |= MACH64_UPLOAD_CONTEXT;
-
- if (mmesa->hw_primitive != hwprim) {
- FLUSH_BATCH( mmesa );
- mmesa->hw_primitive = hwprim;
- }
-}
-
-static void mach64RenderPrimitive( struct gl_context *ctx, GLenum prim )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint hw = hw_prim[prim];
-
- mmesa->render_primitive = prim;
-
- if (prim >= GL_TRIANGLES && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
- return;
-
- mach64RasterPrimitive( ctx, hw );
-}
-
-
-static void mach64RenderStart( struct gl_context *ctx )
-{
- /* Check for projective texturing. Make sure all texcoord
- * pointers point to something. (fix in mesa?)
- */
- mach64CheckTexSizes( ctx );
-}
-
-static void mach64RenderFinish( struct gl_context *ctx )
-{
- if (MACH64_CONTEXT(ctx)->RenderIndex & MACH64_FALLBACK_BIT)
- _swrast_flush( ctx );
-}
-
-
-/**********************************************************************/
-/* Transition to/from hardware rasterization. */
-/**********************************************************************/
-
-static const char * const fallbackStrings[] = {
- "Texture mode",
- "glDrawBuffer(GL_FRONT_AND_BACK)",
- "glReadBuffer",
- "glEnable(GL_STENCIL) without hw stencil buffer",
- "glRenderMode(selection or feedback)",
- "glLogicOp (mode != GL_COPY)",
- "GL_SEPARATE_SPECULAR_COLOR",
- "glBlendEquation (mode != ADD)",
- "glBlendFunc",
- "Rasterization disable",
-};
-
-
-static const char *getFallbackString(GLuint bit)
-{
- int i = 0;
- while (bit > 1) {
- i++;
- bit >>= 1;
- }
- return fallbackStrings[i];
-}
-
-void mach64Fallback( struct gl_context *ctx, GLuint bit, GLboolean mode )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint oldfallback = mmesa->Fallback;
-
- if (mode) {
- mmesa->Fallback |= bit;
- if (oldfallback == 0) {
- FLUSH_BATCH( mmesa );
- _swsetup_Wakeup( ctx );
- mmesa->RenderIndex = ~0;
- if (MACH64_DEBUG & DEBUG_VERBOSE_FALLBACK) {
- fprintf(stderr, "Mach64 begin rasterization fallback: 0x%x %s\n",
- bit, getFallbackString(bit));
- }
- }
- }
- else {
- mmesa->Fallback &= ~bit;
- if (oldfallback == bit) {
- _swrast_flush( ctx );
- tnl->Driver.Render.Start = mach64RenderStart;
- tnl->Driver.Render.PrimitiveNotify = mach64RenderPrimitive;
- tnl->Driver.Render.Finish = mach64RenderFinish;
- tnl->Driver.Render.BuildVertices = mach64BuildVertices;
- mmesa->NewGLState |= (_MACH64_NEW_RENDER_STATE|
- _MACH64_NEW_VERTEX_STATE);
- if (MACH64_DEBUG & DEBUG_VERBOSE_FALLBACK) {
- fprintf(stderr, "Mach64 end rasterization fallback: 0x%x %s\n",
- bit, getFallbackString(bit));
- }
- }
- }
-}
-
-/**********************************************************************/
-/* Initialization. */
-/**********************************************************************/
-
-void mach64InitTriFuncs( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- static int firsttime = 1;
-
- if (firsttime) {
- init_rast_tab();
- firsttime = 0;
- }
-
- tnl->Driver.RunPipeline = mach64RunPipeline;
- tnl->Driver.Render.Start = mach64RenderStart;
- tnl->Driver.Render.Finish = mach64RenderFinish;
- tnl->Driver.Render.PrimitiveNotify = mach64RenderPrimitive;
- tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
- tnl->Driver.Render.BuildVertices = mach64BuildVertices;
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_tris.h b/src/mesa/drivers/dri/mach64/mach64_tris.h
deleted file mode 100644
index 84f613c4abd..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_tris.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * José Fonseca
- */
-
-#ifndef __MACH64_TRIS_H__
-#define __MACH64_TRIS_H__
-
-#include "main/mtypes.h"
-
-extern void mach64InitTriFuncs( struct gl_context *ctx );
-
-
-extern void mach64Fallback( struct gl_context *ctx, GLuint bit, GLboolean mode );
-#define FALLBACK( mmesa, bit, mode ) mach64Fallback( mmesa->glCtx, bit, mode )
-
-
-#endif /* __MACH64_TRIS_H__ */
diff --git a/src/mesa/drivers/dri/mach64/mach64_vb.c b/src/mesa/drivers/dri/mach64/mach64_vb.c
deleted file mode 100644
index d0c04d3d034..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_vb.c
+++ /dev/null
@@ -1,641 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/imports.h"
-#include "main/macros.h"
-#include "main/colormac.h"
-
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_context.h"
-
-#include "mach64_context.h"
-#include "mach64_vb.h"
-#include "mach64_ioctl.h"
-#include "mach64_tris.h"
-
-
-#define MACH64_TEX1_BIT 0x1
-#define MACH64_TEX0_BIT 0x2
-#define MACH64_RGBA_BIT 0x4
-#define MACH64_SPEC_BIT 0x8
-#define MACH64_FOG_BIT 0x10
-#define MACH64_XYZW_BIT 0x20
-#define MACH64_PTEX_BIT 0x40
-#define MACH64_MAX_SETUP 0x80
-
-static struct {
- void (*emit)( struct gl_context *, GLuint, GLuint, void *, GLuint );
- tnl_interp_func interp;
- tnl_copy_pv_func copy_pv;
- GLboolean (*check_tex_sizes)( struct gl_context *ctx );
- GLuint vertex_size;
- GLuint vertex_format;
-} setup_tab[MACH64_MAX_SETUP];
-
-#define TINY_VERTEX_FORMAT 1
-#define NOTEX_VERTEX_FORMAT 2
-#define TEX0_VERTEX_FORMAT 3
-#define TEX1_VERTEX_FORMAT 4
-#define PROJ_TEX1_VERTEX_FORMAT 0
-#define TEX2_VERTEX_FORMAT 0
-#define TEX3_VERTEX_FORMAT 0
-#define PROJ_TEX3_VERTEX_FORMAT 0
-
-#define DO_XYZW (IND & MACH64_XYZW_BIT)
-#define DO_RGBA (IND & MACH64_RGBA_BIT)
-#define DO_SPEC (IND & MACH64_SPEC_BIT)
-#define DO_FOG (IND & MACH64_FOG_BIT)
-#define DO_TEX0 (IND & MACH64_TEX0_BIT)
-#define DO_TEX1 (IND & MACH64_TEX1_BIT)
-#define DO_TEX2 0
-#define DO_TEX3 0
-#define DO_PTEX (IND & MACH64_PTEX_BIT)
-
-#define VERTEX mach64Vertex
-#define LOCALVARS mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-#define GET_VIEWPORT_MAT() mmesa->hw_viewport
-#define GET_TEXSOURCE(n) mmesa->tmu_source[n]
-#define GET_VERTEX_FORMAT() mmesa->vertex_format
-#define GET_VERTEX_STORE() mmesa->verts
-#define GET_VERTEX_SIZE() mmesa->vertex_size * sizeof(GLuint)
-
-#define HAVE_HW_VIEWPORT 0
-#define HAVE_HW_DIVIDE 0
-#define HAVE_RGBA_COLOR 0
-#define HAVE_TINY_VERTICES 1
-#define HAVE_NOTEX_VERTICES 1
-#define HAVE_TEX0_VERTICES 1
-#define HAVE_TEX1_VERTICES 1
-#define HAVE_TEX2_VERTICES 0
-#define HAVE_TEX3_VERTICES 0
-#define HAVE_PTEX_VERTICES 0
-
-#define UNVIEWPORT_VARS \
- const GLfloat dx = - (GLfloat)mmesa->drawX - SUBPIXEL_X; \
- const GLfloat dy = (mmesa->driDrawable->h + \
- (GLfloat)mmesa->drawY + SUBPIXEL_Y); \
- const GLfloat sz = 1.0 / mmesa->depth_scale
-
-#if MACH64_NATIVE_VTXFMT
-
-#define UNVIEWPORT_X(x) ((GLfloat)(x) / 4.0) + dx
-#define UNVIEWPORT_Y(y) - ((GLfloat)(y) / 4.0) + dy
-#define UNVIEWPORT_Z(z) (GLfloat)((z) >> 15) * sz
-
-#else
-
-#define UNVIEWPORT_X(x) x + dx;
-#define UNVIEWPORT_Y(y) - y + dy;
-#define UNVIEWPORT_Z(z) z * sz;
-
-#endif
-
-#define PTEX_FALLBACK() FALLBACK(MACH64_CONTEXT(ctx), MACH64_FALLBACK_TEXTURE, 1)
-
-#define IMPORT_FLOAT_COLORS mach64_import_float_colors
-#define IMPORT_FLOAT_SPEC_COLORS mach64_import_float_spec_colors
-
-#define INTERP_VERTEX setup_tab[mmesa->SetupIndex].interp
-#define COPY_PV_VERTEX setup_tab[mmesa->SetupIndex].copy_pv
-
-/***********************************************************************
- * Generate pv-copying and translation functions *
- ***********************************************************************/
-
-#if MACH64_NATIVE_VTXFMT
-
-#define TAG(x) mach64_##x
-#include "mach64_native_vb.c"
-
-#else
-
-#define TAG(x) mach64_##x
-#include "tnl_dd/t_dd_vb.c"
-
-#endif
-
-/***********************************************************************
- * Generate vertex emit and interp functions *
- ***********************************************************************/
-
-
-#if MACH64_NATIVE_VTXFMT
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT)
-#define TAG(x) x##_wg
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT)
-#define TAG(x) x##_wgs
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_wgt0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_wgt0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_PTEX_BIT)
-#define TAG(x) x##_wgpt0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_wgst0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
- MACH64_TEX1_BIT)
-#define TAG(x) x##_wgst0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
- MACH64_PTEX_BIT)
-#define TAG(x) x##_wgspt0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT)
-#define TAG(x) x##_wgf
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
-#define TAG(x) x##_wgfs
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_wgft0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
- MACH64_TEX1_BIT)
-#define TAG(x) x##_wgft0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
- MACH64_PTEX_BIT)
-#define TAG(x) x##_wgfpt0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
- MACH64_TEX0_BIT)
-#define TAG(x) x##_wgfst0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
- MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_wgfst0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
- MACH64_TEX0_BIT|MACH64_PTEX_BIT)
-#define TAG(x) x##_wgfspt0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_TEX0_BIT)
-#define TAG(x) x##_t0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_t0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_FOG_BIT)
-#define TAG(x) x##_f
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_ft0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_ft0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT)
-#define TAG(x) x##_g
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT)
-#define TAG(x) x##_gs
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_gt0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_gt0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_gst0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_gst0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT)
-#define TAG(x) x##_gf
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
-#define TAG(x) x##_gfs
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_gft0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_gft0t1
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_gfst0
-#include "mach64_native_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
- MACH64_TEX1_BIT)
-#define TAG(x) x##_gfst0t1
-#include "mach64_native_vbtmp.h"
-
-#else
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT)
-#define TAG(x) x##_wg
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT)
-#define TAG(x) x##_wgs
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_wgt0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_wgt0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_PTEX_BIT)
-#define TAG(x) x##_wgpt0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_wgst0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
- MACH64_TEX1_BIT)
-#define TAG(x) x##_wgst0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
- MACH64_PTEX_BIT)
-#define TAG(x) x##_wgspt0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT)
-#define TAG(x) x##_wgf
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
-#define TAG(x) x##_wgfs
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_wgft0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
- MACH64_TEX1_BIT)
-#define TAG(x) x##_wgft0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
- MACH64_PTEX_BIT)
-#define TAG(x) x##_wgfpt0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
- MACH64_TEX0_BIT)
-#define TAG(x) x##_wgfst0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
- MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_wgfst0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
- MACH64_TEX0_BIT|MACH64_PTEX_BIT)
-#define TAG(x) x##_wgfspt0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_TEX0_BIT)
-#define TAG(x) x##_t0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_t0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_FOG_BIT)
-#define TAG(x) x##_f
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_ft0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_ft0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT)
-#define TAG(x) x##_g
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT)
-#define TAG(x) x##_gs
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_gt0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_gt0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_gst0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_gst0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT)
-#define TAG(x) x##_gf
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
-#define TAG(x) x##_gfs
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_gft0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
-#define TAG(x) x##_gft0t1
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
-#define TAG(x) x##_gfst0
-#include "mach64_vbtmp.h"
-
-#define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
- MACH64_TEX1_BIT)
-#define TAG(x) x##_gfst0t1
-#include "mach64_vbtmp.h"
-
-#endif
-
-static void init_setup_tab( void )
-{
- init_wg();
- init_wgs();
- init_wgt0();
- init_wgt0t1();
- init_wgpt0();
- init_wgst0();
- init_wgst0t1();
- init_wgspt0();
- init_wgf();
- init_wgfs();
- init_wgft0();
- init_wgft0t1();
- init_wgfpt0();
- init_wgfst0();
- init_wgfst0t1();
- init_wgfspt0();
- init_t0();
- init_t0t1();
- init_f();
- init_ft0();
- init_ft0t1();
- init_g();
- init_gs();
- init_gt0();
- init_gt0t1();
- init_gst0();
- init_gst0t1();
- init_gf();
- init_gfs();
- init_gft0();
- init_gft0t1();
- init_gfst0();
- init_gfst0t1();
-}
-
-
-
-void mach64PrintSetupFlags( char *msg, GLuint flags )
-{
- fprintf( stderr, "%s: %d %s%s%s%s%s%s%s\n",
- msg,
- (int)flags,
- (flags & MACH64_XYZW_BIT) ? " xyzw," : "",
- (flags & MACH64_RGBA_BIT) ? " rgba," : "",
- (flags & MACH64_SPEC_BIT) ? " spec," : "",
- (flags & MACH64_FOG_BIT) ? " fog," : "",
- (flags & MACH64_TEX0_BIT) ? " tex-0," : "",
- (flags & MACH64_TEX1_BIT) ? " tex-1," : "",
- (flags & MACH64_PTEX_BIT) ? " ptex," : "");
-}
-
-
-
-
-void mach64CheckTexSizes( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
-
- if (!setup_tab[mmesa->SetupIndex].check_tex_sizes(ctx)) {
- TNLcontext *tnl = TNL_CONTEXT(ctx);
-
- /* Invalidate stored verts
- */
- mmesa->SetupNewInputs = ~0;
- mmesa->SetupIndex |= MACH64_PTEX_BIT;
-
- if (!mmesa->Fallback &&
- !(ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
- tnl->Driver.Render.Interp = setup_tab[mmesa->SetupIndex].interp;
- tnl->Driver.Render.CopyPV = setup_tab[mmesa->SetupIndex].copy_pv;
- }
- }
-}
-
-void mach64BuildVertices( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- GLuint newinputs )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
- GLuint stride = mmesa->vertex_size * sizeof(int);
- GLubyte *v = ((GLubyte *)mmesa->verts + (start * stride));
-
- newinputs |= mmesa->SetupNewInputs;
- mmesa->SetupNewInputs = 0;
-
- if (!newinputs)
- return;
-
- if (newinputs & VERT_BIT_POS) {
- setup_tab[mmesa->SetupIndex].emit( ctx, start, count, v, stride );
- } else {
- GLuint ind = 0;
-
- if (newinputs & VERT_BIT_COLOR0)
- ind |= MACH64_RGBA_BIT;
-
- if (newinputs & VERT_BIT_COLOR1)
- ind |= MACH64_SPEC_BIT;
-
- if (newinputs & VERT_BIT_TEX0)
- ind |= MACH64_TEX0_BIT;
-
- if (newinputs & VERT_BIT_TEX1)
- ind |= MACH64_TEX1_BIT;
-
- if (newinputs & VERT_BIT_FOG)
- ind |= MACH64_FOG_BIT;
-
- if (mmesa->SetupIndex & MACH64_PTEX_BIT)
- ind = ~0;
-
- ind &= mmesa->SetupIndex;
-
- if (ind) {
- setup_tab[ind].emit( ctx, start, count, v, stride );
- }
- }
-}
-
-void mach64ChooseVertexState( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
- GLuint ind = MACH64_XYZW_BIT|MACH64_RGBA_BIT;
-
- if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)
- ind |= MACH64_SPEC_BIT;
-
- if (ctx->Fog.Enabled)
- ind |= MACH64_FOG_BIT;
-
- if (ctx->Texture._EnabledUnits) {
- ind |= MACH64_TEX0_BIT;
- if (ctx->Texture.Unit[0]._ReallyEnabled &&
- ctx->Texture.Unit[1]._ReallyEnabled) {
- ind |= MACH64_TEX1_BIT;
- }
- }
-
- mmesa->SetupIndex = ind;
-
- if (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED)) {
- tnl->Driver.Render.Interp = mach64_interp_extras;
- tnl->Driver.Render.CopyPV = mach64_copy_pv_extras;
- } else {
- tnl->Driver.Render.Interp = setup_tab[ind].interp;
- tnl->Driver.Render.CopyPV = setup_tab[ind].copy_pv;
- }
-
-#if 0
- if (MACH64_DEBUG & DEBUG_VERBOSE_MSG) {
- mach64PrintSetupFlags( __FUNCTION__, ind );
- }
-#endif
-
- if (setup_tab[ind].vertex_format != mmesa->vertex_format) {
- FLUSH_BATCH(mmesa);
- mmesa->vertex_format = setup_tab[ind].vertex_format;
- mmesa->vertex_size = setup_tab[ind].vertex_size;
- }
-}
-
-
-#if 0
-void mach64_emit_contiguous_verts( struct gl_context *ctx,
- GLuint start,
- GLuint count )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint vertex_size = mmesa->vertex_size * 4;
- GLuint *dest = mach64AllocDmaLow( mmesa, (count-start) * vertex_size);
- setup_tab[mmesa->SetupIndex].emit( ctx, start, count, dest, vertex_size );
-}
-#endif
-
-
-void mach64InitVB( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- GLuint size = TNL_CONTEXT(ctx)->vb.Size;
-
- mmesa->verts = (GLubyte *)_mesa_align_malloc(size * 4 * 16, 32);
-
- {
- static int firsttime = 1;
- if (firsttime) {
- init_setup_tab();
- firsttime = 0;
- }
- }
-}
-
-
-void mach64FreeVB( struct gl_context *ctx )
-{
- mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- if (mmesa->verts) {
- _mesa_align_free(mmesa->verts);
- mmesa->verts = 0;
- }
-}
diff --git a/src/mesa/drivers/dri/mach64/mach64_vb.h b/src/mesa/drivers/dri/mach64/mach64_vb.h
deleted file mode 100644
index 8d9cd5b492c..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_vb.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- * José Fonseca
- */
-
-#ifndef __MACH64_VB_H__
-#define __MACH64_VB_H__
-
-#include "main/mtypes.h"
-#include "swrast/swrast.h"
-#include "mach64_context.h"
-
-/* premultiply texture coordinates by homogenous coordinate */
-#define MACH64_PREMULT_TEXCOORDS
-
-#define _MACH64_NEW_VERTEX_STATE (_DD_NEW_SEPARATE_SPECULAR | \
- _DD_NEW_TRI_LIGHT_TWOSIDE | \
- _DD_NEW_TRI_UNFILLED | \
- _NEW_TEXTURE | \
- _NEW_FOG)
-
-
-extern void mach64CheckTexSizes( struct gl_context *ctx );
-extern void mach64ChooseVertexState( struct gl_context *ctx );
-
-extern void mach64BuildVertices( struct gl_context *ctx, GLuint start, GLuint count,
- GLuint newinputs );
-
-extern void mach64PrintSetupFlags(char *msg, GLuint flags );
-
-extern void mach64InitVB( struct gl_context *ctx );
-extern void mach64FreeVB( struct gl_context *ctx );
-
-#if 0
-extern void mach64_emit_contiguous_verts( struct gl_context *ctx,
- GLuint start,
- GLuint count );
-
-extern void mach64_emit_indexed_verts( struct gl_context *ctx,
- GLuint start,
- GLuint count );
-#endif
-
-extern void mach64_translate_vertex( struct gl_context *ctx,
- const mach64Vertex *src,
- SWvertex *dst );
-
-extern void mach64_print_vertex( struct gl_context *ctx, const mach64Vertex *v );
-
-
-#endif /* __MACH64_VB_H__ */
diff --git a/src/mesa/drivers/dri/mach64/mach64_vbtmp.h b/src/mesa/drivers/dri/mach64/mach64_vbtmp.h
deleted file mode 100644
index a126dcae40f..00000000000
--- a/src/mesa/drivers/dri/mach64/mach64_vbtmp.h
+++ /dev/null
@@ -1,770 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Mesa 3-D graphics library
- * Version: 3.5
- *
- * Copyright (C) 1999-2001 Brian Paul 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, 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 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
- * BRIAN PAUL 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:
- * Keith Whitwell
- *
- * Modified for mach64 by:
- * Leif Delgass
- * José Fonseca
- */
-
-
-/* Unlike the other templates here, this assumes quite a bit about the
- * underlying hardware. Specifically it assumes a d3d-like vertex
- * format, with a layout more or less constrained to look like the
- * following:
- *
- * union {
- * struct {
- * float x, y, z, w;
- * struct { char r, g, b, a; } color;
- * struct { char r, g, b, fog; } spec;
- * float u0, v0;
- * float u1, v1;
- * float u2, v2;
- * float u3, v3;
- * } v;
- * struct {
- * float x, y, z, w;
- * struct { char r, g, b, a; } color;
- * struct { char r, g, b, fog; } spec;
- * float u0, v0, q0;
- * float u1, v1, q1;
- * float u2, v2, q2;
- * float u3, v3, q3;
- * } pv;
- * struct {
- * float x, y, z;
- * struct { char r, g, b, a; } color;
- * } tv;
- * float f[16];
- * unsigned int ui[16];
- * unsigned char ub4[4][16];
- * }
- *
-
- * DO_XYZW: Emit xyz and maybe w coordinates.
- * DO_RGBA: Emit color.
- * DO_SPEC: Emit specular color.
- * DO_FOG: Emit fog coordinate in specular alpha.
- * DO_TEX0: Emit tex0 u,v coordinates.
- * DO_TEX1: Emit tex1 u,v coordinates.
- * DO_TEX2: Emit tex2 u,v coordinates.
- * DO_TEX3: Emit tex3 u,v coordinates.
- * DO_PTEX: Emit tex0,1,2,3 q coordinates where possible.
- *
- * HAVE_RGBA_COLOR: Hardware takes color in rgba order (else bgra).
- *
- * HAVE_HW_VIEWPORT: Hardware performs viewport transform.
- * HAVE_HW_DIVIDE: Hardware performs perspective divide.
- *
- * HAVE_TINY_VERTICES: Hardware understands v.tv format.
- * HAVE_PTEX_VERTICES: Hardware understands v.pv format.
- * HAVE_NOTEX_VERTICES: Hardware understands v.v format with texcount 0.
- *
- * Additionally, this template assumes it is emitting *transformed*
- * vertices; the modifications to emit untransformed vertices (ie. to
- * t&l hardware) are probably too great to cooexist with the code
- * already in this file.
- *
- * NOTE: The PTEX vertex format always includes TEX0 and TEX1, even if
- * only TEX0 is enabled, in order to maintain a vertex size which is
- * an exact number of quadwords.
- */
-
-#if (HAVE_HW_VIEWPORT)
-#define VIEWPORT_X(dst,x) dst = x
-#define VIEWPORT_Y(dst,y) dst = y
-#define VIEWPORT_Z(dst,z) dst = z
-#else
-#define VIEWPORT_X(dst,x) dst = s[0] * x + s[12]
-#define VIEWPORT_Y(dst,y) dst = s[5] * y + s[13]
-#define VIEWPORT_Z(dst,z) dst = s[10] * z + s[14]
-#endif
-
-#if (HAVE_HW_DIVIDE && !HAVE_PTEX_VERTICES)
-#error "can't cope with this combination"
-#endif
-
-#ifndef LOCALVARS
-#define LOCALVARS
-#endif
-
-#ifndef CHECK_HW_DIVIDE
-#define CHECK_HW_DIVIDE 1
-#endif
-
-#if (HAVE_HW_DIVIDE || DO_SPEC || DO_TEX0 || DO_FOG || !HAVE_TINY_VERTICES)
-
-static void TAG(emit)( struct gl_context *ctx,
- GLuint start, GLuint end,
- void *dest,
- GLuint stride )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLfloat (*tc0)[4], (*tc1)[4], (*fog)[4];
- GLfloat (*tc2)[4], (*tc3)[4];
- GLfloat (*spec)[4];
- GLfloat (*col)[4];
- GLuint col_stride;
- GLuint tc0_stride, tc1_stride, spec_stride, fog_stride;
- GLuint tc2_stride, tc3_stride;
- GLuint tc0_size, tc1_size;
- GLuint tc2_size, tc3_size;
- GLfloat (*coord)[4];
- GLuint coord_stride;
- VERTEX *v = (VERTEX *)dest;
- const GLfloat *s = GET_VIEWPORT_MAT();
- const GLubyte *mask = VB->ClipMask;
- int i;
-
-/* fprintf(stderr, "%s(big) importable %d %d..%d\n", */
-/* __FUNCTION__, VB->importable_data, start, end); */
-
- if (HAVE_HW_VIEWPORT && HAVE_HW_DIVIDE && CHECK_HW_DIVIDE) {
- (void) s;
- coord = VB->ClipPtr->data;
- coord_stride = VB->ClipPtr->stride;
- }
- else {
- coord = VB->NdcPtr->data;
- coord_stride = VB->NdcPtr->stride;
- }
-
- if (DO_TEX3) {
- const GLuint t3 = GET_TEXSOURCE(3);
- tc3 = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t3]->data;
- tc3_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t3]->stride;
- if (DO_PTEX)
- tc3_size = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t3]->size;
- }
-
- if (DO_TEX2) {
- const GLuint t2 = GET_TEXSOURCE(2);
- tc2 = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->data;
- tc2_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->stride;
- if (DO_PTEX)
- tc2_size = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->size;
- }
-
- if (DO_TEX1) {
- const GLuint t1 = GET_TEXSOURCE(1);
- tc1 = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->data;
- tc1_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->stride;
- if (DO_PTEX)
- tc1_size = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->size;
- }
-
- if (DO_TEX0) {
- const GLuint t0 = GET_TEXSOURCE(0);
- tc0_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->stride;
- tc0 = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->data;
- if (DO_PTEX)
- tc0_size = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->size;
- }
-
- if (DO_RGBA) {
- col = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data;
- col_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride;
- }
-
- if (DO_SPEC) {
- spec = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->data;
- spec_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->stride;
- } else {
- spec = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR1];
- spec_stride = 0;
- }
-
- if (DO_FOG) {
- if (VB->AttribPtr[_TNL_ATTRIB_FOG]) {
- fog = VB->AttribPtr[_TNL_ATTRIB_FOG]->data;
- fog_stride = VB->AttribPtr[_TNL_ATTRIB_FOG]->stride;
- } else {
- static GLfloat tmp[4] = {0, 0, 0, 0};
- fog = &tmp;
- fog_stride = 0;
- }
- }
-
- /* May have nonstandard strides:
- */
- if (start) {
- coord = (GLfloat (*)[4])((GLubyte *)coord + start * coord_stride);
- if (DO_TEX0)
- tc0 = (GLfloat (*)[4])((GLubyte *)tc0 + start * tc0_stride);
- if (DO_TEX1)
- tc1 = (GLfloat (*)[4])((GLubyte *)tc1 + start * tc1_stride);
- if (DO_TEX2)
- tc2 = (GLfloat (*)[4])((GLubyte *)tc2 + start * tc2_stride);
- if (DO_TEX3)
- tc3 = (GLfloat (*)[4])((GLubyte *)tc3 + start * tc3_stride);
- if (DO_RGBA)
- STRIDE_4F(col, start * col_stride);
- if (DO_SPEC)
- STRIDE_4F(spec, start * spec_stride);
- if (DO_FOG)
- STRIDE_4F(fog, start * fog_stride);
- // fog = (GLfloat (*)[4])((GLubyte *)fog + start * fog_stride);
- /* STRIDE_F(fog, start * fog_stride); */
- }
-
- for (i=start; i < end; i++, v = (VERTEX *)((GLubyte *)v + stride)) {
- if (DO_XYZW) {
- if (HAVE_HW_VIEWPORT || mask[i] == 0) {
- /* unclipped */
- VIEWPORT_X(v->v.x, coord[0][0]);
- VIEWPORT_Y(v->v.y, coord[0][1]);
- VIEWPORT_Z(v->v.z, coord[0][2]);
- v->v.w = coord[0][3];
- } else {
- /* clipped */
- v->v.w = 1.0;
- }
- if (MACH64_DEBUG & DEBUG_VERBOSE_PRIMS) {
- fprintf(stderr, "%s: vert (importable) %d: %.2f %.2f %.2f %f\n",
- __FUNCTION__, i, v->v.x, v->v.y, v->v.z, v->v.w);
- }
- coord = (GLfloat (*)[4])((GLubyte *)coord + coord_stride);
- }
- if (DO_RGBA) {
- if (HAVE_RGBA_COLOR) {
- *(GLuint *)&v->v.color = *(GLuint *)&col[0];
- STRIDE_4F(col, col_stride);
- } else {
- v->v.color.blue = col[0][2];
- v->v.color.green = col[0][1];
- v->v.color.red = col[0][0];
- v->v.color.alpha = col[0][3];
- STRIDE_4F(col, col_stride);
- }
- }
- if (DO_SPEC) {
- v->v.specular.red = spec[0][0];
- v->v.specular.green = spec[0][1];
- v->v.specular.blue = spec[0][2];
- STRIDE_4F(spec, spec_stride);
- }
- if (DO_FOG) {
- v->v.specular.alpha = fog[0][0] * 255.0;
- /* STRIDE_F(fog, fog_stride); */
- fog = (GLfloat (*)[4])((GLubyte *)fog + fog_stride);
- }
- if (DO_TEX0) {
- v->v.u0 = tc0[0][0];
- v->v.v0 = tc0[0][1];
- if (MACH64_DEBUG & DEBUG_VERBOSE_PRIMS) {
- fprintf(stderr, "%s: vert (importable) %d: u0: %.2f, v0: %.2f, w: %f\n",
- __FUNCTION__, i, v->v.u0, v->v.v0, v->v.w);
- }
-#ifdef MACH64_PREMULT_TEXCOORDS
- v->v.u0 *= v->v.w;
- v->v.v0 *= v->v.w;
-#endif
- if (DO_PTEX) {
- if (HAVE_PTEX_VERTICES) {
- if (tc0_size == 4)
- v->pv.q0 = tc0[0][3];
- else
- v->pv.q0 = 1.0;
- }
- else if (tc0_size == 4) {
-#ifdef MACH64_PREMULT_TEXCOORDS
- v->v.w *= tc0[0][3];
-#else
- float rhw = 1.0 / tc0[0][3];
- v->v.w *= tc0[0][3];
- v->v.u0 *= rhw;
- v->v.v0 *= rhw;
-#endif
- }
- }
- tc0 = (GLfloat (*)[4])((GLubyte *)tc0 + tc0_stride);
- }
- if (DO_TEX1) {
- if (DO_PTEX) {
- v->pv.u1 = tc1[0][0];
- v->pv.v1 = tc1[0][1];
- if (tc1_size == 4)
- v->pv.q1 = tc1[0][3];
- else
- v->pv.q1 = 1.0;
- }
- else {
- v->v.u1 = tc1[0][0];
- v->v.v1 = tc1[0][1];
- }
-#ifdef MACH64_PREMULT_TEXCOORDS
- v->v.u1 *= v->v.w;
- v->v.v1 *= v->v.w;
-#endif
- tc1 = (GLfloat (*)[4])((GLubyte *)tc1 + tc1_stride);
- }
- else if (DO_PTEX) {
- *(GLuint *)&v->pv.q1 = 0; /* avoid culling on radeon */
- }
- if (DO_TEX2) {
- if (DO_PTEX) {
- v->pv.u2 = tc2[0][0];
- v->pv.v2 = tc2[0][1];
- if (tc2_size == 4)
- v->pv.q2 = tc2[0][3];
- else
- v->pv.q2 = 1.0;
- }
- else {
- v->v.u2 = tc2[0][0];
- v->v.v2 = tc2[0][1];
- }
- tc2 = (GLfloat (*)[4])((GLubyte *)tc2 + tc2_stride);
- }
- if (DO_TEX3) {
- if (DO_PTEX) {
- v->pv.u3 = tc3[0][0];
- v->pv.v3 = tc3[0][1];
- if (tc3_size == 4)
- v->pv.q3 = tc3[0][3];
- else
- v->pv.q3 = 1.0;
- }
- else {
- v->v.u3 = tc3[0][0];
- v->v.v3 = tc3[0][1];
- }
- tc3 = (GLfloat (*)[4])((GLubyte *)tc3 + tc3_stride);
- }
- }
-}
-
-#else
-#if DO_XYZW
-
-#if HAVE_HW_DIVIDE
-#error "cannot use tiny vertices with hw perspective divide"
-#endif
-
-static void TAG(emit)( struct gl_context *ctx, GLuint start, GLuint end,
- void *dest, GLuint stride )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLfloat (*col)[4];
- GLuint col_stride;
- GLfloat (*coord)[4] = VB->NdcPtr->data;
- GLuint coord_stride = VB->NdcPtr->stride;
- GLfloat *v = (GLfloat *)dest;
- const GLubyte *mask = VB->ClipMask;
- const GLfloat *s = GET_VIEWPORT_MAT();
- int i;
-
- (void) s;
-
- ASSERT(stride == 4);
-
- col = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data;
- col_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride;
-
- /* Pack what's left into a 4-dword vertex. Color is in a different
- * place, and there is no 'w' coordinate.
- */
- if (start) {
- coord = (GLfloat (*)[4])((GLubyte *)coord + start * coord_stride);
- STRIDE_4F(col, start * col_stride);
- }
-
- for (i=start; i < end; i++, v+=4) {
- if (HAVE_HW_VIEWPORT || mask[i] == 0) {
- VIEWPORT_X(v[0], coord[0][0]);
- VIEWPORT_Y(v[1], coord[0][1]);
- VIEWPORT_Z(v[2], coord[0][2]);
- }
- coord = (GLfloat (*)[4])((GLubyte *)coord + coord_stride);
- if (DO_RGBA) {
- if (HAVE_RGBA_COLOR) {
- *(GLuint *)&v[3] = *(GLuint *)col;
- }
- else {
- GLubyte *b = (GLubyte *)&v[3];
- UNCLAMPED_FLOAT_TO_UBYTE(b[0], col[0][2]);
- UNCLAMPED_FLOAT_TO_UBYTE(b[1], col[0][1]);
- UNCLAMPED_FLOAT_TO_UBYTE(b[2], col[0][0]);
- UNCLAMPED_FLOAT_TO_UBYTE(b[3], col[0][3]);
- }
- STRIDE_4F( col, col_stride );
- }
- if (MACH64_DEBUG & DEBUG_VERBOSE_PRIMS) {
- fprintf(stderr, "vert (importable) %d: %.2f %.2f %.2f %x\n",
- i, v[0], v[1], v[2], *(int *)&v[3]);
- }
- }
-}
-#else
-static void TAG(emit)( struct gl_context *ctx, GLuint start, GLuint end,
- void *dest, GLuint stride )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLfloat (*col)[4];
- GLuint col_stride;
- GLfloat *v = (GLfloat *)dest;
- int i;
-
- col = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data;
- col_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride;
-
- if (start)
- STRIDE_4F(col, col_stride * start);
-
- /* Need to figure out where color is:
- */
- if (GET_VERTEX_FORMAT() == TINY_VERTEX_FORMAT)
- v += 3;
- else
- v += 4;
-
- for (i=start; i < end; i++, STRIDE_F(v, stride)) {
- if (HAVE_RGBA_COLOR) {
- *(GLuint *)v = *(GLuint *)col[0];
- }
- else {
- GLubyte *b = (GLubyte *)v;
- UNCLAMPED_FLOAT_TO_UBYTE(b[0], col[0][2]);
- UNCLAMPED_FLOAT_TO_UBYTE(b[1], col[0][1]);
- UNCLAMPED_FLOAT_TO_UBYTE(b[2], col[0][0]);
- UNCLAMPED_FLOAT_TO_UBYTE(b[3], col[0][3]);
- }
- STRIDE_4F( col, col_stride );
- }
-}
-#endif /* emit */
-#endif /* emit */
-
-#if (DO_XYZW) && (DO_RGBA)
-
-
-#if (HAVE_PTEX_VERTICES)
-static GLboolean TAG(check_tex_sizes)( struct gl_context *ctx )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
- /* Force 'missing' texcoords to something valid.
- */
- if (DO_TEX3 && VB->AttribPtr[_TNL_ATTRIB_TEX2] == 0)
- VB->AttribPtr[_TNL_ATTRIB_TEX2] = VB->AttribPtr[_TNL_ATTRIB_TEX3];
-
- if (DO_TEX2 && VB->AttribPtr[_TNL_ATTRIB_TEX1] == 0)
- VB->AttribPtr[_TNL_ATTRIB_TEX1] = VB->AttribPtr[_TNL_ATTRIB_TEX2];
-
- if (DO_TEX1 && VB->AttribPtr[_TNL_ATTRIB_TEX0] == 0)
- VB->AttribPtr[_TNL_ATTRIB_TEX0] = VB->AttribPtr[_TNL_ATTRIB_TEX1];
-
- if (DO_PTEX)
- return GL_TRUE;
-
- if ((DO_TEX3 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(3)]->size == 4) ||
- (DO_TEX2 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(2)]->size == 4) ||
- (DO_TEX1 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(1)]->size == 4) ||
- (DO_TEX0 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(0)]->size == 4))
- return GL_FALSE;
-
- return GL_TRUE;
-}
-#else
-static GLboolean TAG(check_tex_sizes)( struct gl_context *ctx )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
- /* Force 'missing' texcoords to something valid.
- */
- if (DO_TEX3 && VB->AttribPtr[_TNL_ATTRIB_TEX2] == 0)
- VB->AttribPtr[_TNL_ATTRIB_TEX2] = VB->AttribPtr[_TNL_ATTRIB_TEX3];
-
- if (DO_TEX2 && VB->AttribPtr[_TNL_ATTRIB_TEX1] == 0)
- VB->AttribPtr[_TNL_ATTRIB_TEX1] = VB->AttribPtr[_TNL_ATTRIB_TEX2];
-
- if (DO_TEX1 && VB->AttribPtr[_TNL_ATTRIB_TEX0] == 0)
- VB->AttribPtr[_TNL_ATTRIB_TEX0] = VB->AttribPtr[_TNL_ATTRIB_TEX1];
-
- if (DO_PTEX)
- return GL_TRUE;
-
- /* No hardware support for projective texture. Can fake it for
- * TEX0 only.
- */
- if ((DO_TEX3 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(3)]->size == 4) ||
- (DO_TEX2 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(2)]->size == 4) ||
- (DO_TEX1 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(1)]->size == 4)) {
- PTEX_FALLBACK();
- return GL_FALSE;
- }
-
- if (DO_TEX0 && VB->AttribPtr[_TNL_ATTRIB_TEX0 + GET_TEXSOURCE(0)]->size == 4) {
- if (DO_TEX1 || DO_TEX2 || DO_TEX3) {
- PTEX_FALLBACK();
- }
- return GL_FALSE;
- }
-
- return GL_TRUE;
-}
-#endif /* ptex */
-
-
-static void TAG(interp)( struct gl_context *ctx,
- GLfloat t,
- GLuint edst, GLuint eout, GLuint ein,
- GLboolean force_boundary )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLubyte *ddverts = GET_VERTEX_STORE();
- GLuint size = GET_VERTEX_SIZE();
- const GLfloat *dstclip = VB->ClipPtr->data[edst];
- GLfloat w;
- const GLfloat *s = GET_VIEWPORT_MAT();
-
- VERTEX *dst = (VERTEX *)(ddverts + (edst * size));
- VERTEX *in = (VERTEX *)(ddverts + (ein * size));
- VERTEX *out = (VERTEX *)(ddverts + (eout * size));
-
- (void)s;
-
- if (HAVE_HW_DIVIDE && CHECK_HW_DIVIDE) {
- VIEWPORT_X( dst->v.x, dstclip[0] );
- VIEWPORT_Y( dst->v.y, dstclip[1] );
- VIEWPORT_Z( dst->v.z, dstclip[2] );
- w = dstclip[3];
- }
- else {
- w = (dstclip[3] == 0.0F) ? 1.0 : (1.0 / dstclip[3]);
- VIEWPORT_X( dst->v.x, dstclip[0] * w );
- VIEWPORT_Y( dst->v.y, dstclip[1] * w );
- VIEWPORT_Z( dst->v.z, dstclip[2] * w );
- }
-
- if (MACH64_DEBUG & DEBUG_VERBOSE_PRIMS) {
- fprintf( stderr, "%s: dst vert: %.2f %.2f %.2f %f\n",
- __FUNCTION__,
- dst->v.x,
- dst->v.y,
- dst->v.z,
- w );
- }
-
- if ((HAVE_HW_DIVIDE && CHECK_HW_DIVIDE) ||
- DO_FOG || DO_SPEC || DO_TEX0 || DO_TEX1 ||
- DO_TEX2 || DO_TEX3 || !HAVE_TINY_VERTICES) {
-
- dst->v.w = w;
-
- INTERP_UB( t, dst->ub4[4][0], out->ub4[4][0], in->ub4[4][0] );
- INTERP_UB( t, dst->ub4[4][1], out->ub4[4][1], in->ub4[4][1] );
- INTERP_UB( t, dst->ub4[4][2], out->ub4[4][2], in->ub4[4][2] );
- INTERP_UB( t, dst->ub4[4][3], out->ub4[4][3], in->ub4[4][3] );
-
- if (DO_SPEC) {
- INTERP_UB( t, dst->ub4[5][0], out->ub4[5][0], in->ub4[5][0] );
- INTERP_UB( t, dst->ub4[5][1], out->ub4[5][1], in->ub4[5][1] );
- INTERP_UB( t, dst->ub4[5][2], out->ub4[5][2], in->ub4[5][2] );
- }
- if (DO_FOG) {
- INTERP_UB( t, dst->ub4[5][3], out->ub4[5][3], in->ub4[5][3] );
- }
- if (DO_TEX0) {
- if (DO_PTEX) {
- if (HAVE_PTEX_VERTICES) {
- INTERP_F( t, dst->pv.u0, out->pv.u0, in->pv.u0 );
- INTERP_F( t, dst->pv.v0, out->pv.v0, in->pv.v0 );
- INTERP_F( t, dst->pv.q0, out->pv.q0, in->pv.q0 );
- } else {
- GLfloat wout = VB->NdcPtr->data[eout][3];
- GLfloat win = VB->NdcPtr->data[ein][3];
- GLfloat qout = out->pv.w / wout;
- GLfloat qin = in->pv.w / win;
- GLfloat qdst, rqdst;
-
- ASSERT( !HAVE_HW_DIVIDE );
-
- INTERP_F( t, dst->v.u0, out->v.u0 * qout, in->v.u0 * qin );
- INTERP_F( t, dst->v.v0, out->v.v0 * qout, in->v.v0 * qin );
- INTERP_F( t, qdst, qout, qin );
-
- rqdst = 1.0 / qdst;
- dst->v.u0 *= rqdst;
- dst->v.v0 *= rqdst;
- dst->v.w *= rqdst;
- }
- }
- else {
-#ifdef MACH64_PREMULT_TEXCOORDS
- GLfloat qout = 1 / out->v.w;
- GLfloat qin = 1 / in->v.w;
-
- INTERP_F( t, dst->v.u0, out->v.u0 * qout, in->v.u0 * qin);
- INTERP_F( t, dst->v.v0, out->v.v0 * qout, in->v.v0 * qin);
-
- dst->v.u0 *= w;
- dst->v.v0 *= w;
-#else
- INTERP_F( t, dst->v.u0, out->v.u0, in->v.u0 );
- INTERP_F( t, dst->v.v0, out->v.v0, in->v.v0 );
-#endif
- }
- }
- if (DO_TEX1) {
- if (DO_PTEX) {
- INTERP_F( t, dst->pv.u1, out->pv.u1, in->pv.u1 );
- INTERP_F( t, dst->pv.v1, out->pv.v1, in->pv.v1 );
- INTERP_F( t, dst->pv.q1, out->pv.q1, in->pv.q1 );
- } else {
-#ifdef MACH64_PREMULT_TEXCOORDS
- GLfloat qout = 1 / out->v.w;
- GLfloat qin = 1 / in->v.w;
-
- INTERP_F( t, dst->v.u1, out->v.u1 * qout, in->v.u1 * qin );
- INTERP_F( t, dst->v.v1, out->v.v1 * qout, in->v.v1 * qin );
-
- dst->v.u1 *= w;
- dst->v.v1 *= w;
-#else
- INTERP_F( t, dst->v.u1, out->v.u1, in->v.u1 );
- INTERP_F( t, dst->v.v1, out->v.v1, in->v.v1 );
-#endif
- }
- }
- else if (DO_PTEX) {
- dst->pv.q0 = 0.0; /* must be a valid float on radeon */
- }
- if (DO_TEX2) {
- if (DO_PTEX) {
- INTERP_F( t, dst->pv.u2, out->pv.u2, in->pv.u2 );
- INTERP_F( t, dst->pv.v2, out->pv.v2, in->pv.v2 );
- INTERP_F( t, dst->pv.q2, out->pv.q2, in->pv.q2 );
- } else {
- INTERP_F( t, dst->v.u2, out->v.u2, in->v.u2 );
- INTERP_F( t, dst->v.v2, out->v.v2, in->v.v2 );
- }
- }
- if (DO_TEX3) {
- if (DO_PTEX) {
- INTERP_F( t, dst->pv.u3, out->pv.u3, in->pv.u3 );
- INTERP_F( t, dst->pv.v3, out->pv.v3, in->pv.v3 );
- INTERP_F( t, dst->pv.q3, out->pv.q3, in->pv.q3 );
- } else {
- INTERP_F( t, dst->v.u3, out->v.u3, in->v.u3 );
- INTERP_F( t, dst->v.v3, out->v.v3, in->v.v3 );
- }
- }
- } else {
- /* 4-dword vertex. Color is in v[3] and there is no oow coordinate.
- */
- INTERP_UB( t, dst->ub4[3][0], out->ub4[3][0], in->ub4[3][0] );
- INTERP_UB( t, dst->ub4[3][1], out->ub4[3][1], in->ub4[3][1] );
- INTERP_UB( t, dst->ub4[3][2], out->ub4[3][2], in->ub4[3][2] );
- INTERP_UB( t, dst->ub4[3][3], out->ub4[3][3], in->ub4[3][3] );
- }
-}
-
-#endif /* rgba && xyzw */
-
-
-static void TAG(init)( void )
-{
- setup_tab[IND].emit = TAG(emit);
-
-#if (DO_XYZW && DO_RGBA)
- setup_tab[IND].check_tex_sizes = TAG(check_tex_sizes);
- setup_tab[IND].interp = TAG(interp);
-#endif
-
- if (DO_SPEC)
- setup_tab[IND].copy_pv = copy_pv_rgba4_spec5;
- else if (HAVE_HW_DIVIDE || DO_SPEC || DO_FOG || DO_TEX0 || DO_TEX1 ||
- DO_TEX2 || DO_TEX3 || !HAVE_TINY_VERTICES)
- setup_tab[IND].copy_pv = copy_pv_rgba4;
- else
- setup_tab[IND].copy_pv = copy_pv_rgba3;
-
- if (DO_TEX3) {
- if (DO_PTEX) {
- ASSERT(HAVE_PTEX_VERTICES);
- setup_tab[IND].vertex_format = PROJ_TEX3_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 18;
- }
- else {
- setup_tab[IND].vertex_format = TEX3_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 14;
- }
- }
- else if (DO_TEX2) {
- if (DO_PTEX) {
- ASSERT(HAVE_PTEX_VERTICES);
- setup_tab[IND].vertex_format = PROJ_TEX3_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 18;
- }
- else {
- setup_tab[IND].vertex_format = TEX2_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 12;
- }
- }
- else if (DO_TEX1) {
- if (DO_PTEX) {
- ASSERT(HAVE_PTEX_VERTICES);
- setup_tab[IND].vertex_format = PROJ_TEX1_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 12;
- }
- else {
- setup_tab[IND].vertex_format = TEX1_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 10;
- }
- }
- else if (DO_TEX0) {
- if (DO_PTEX && HAVE_PTEX_VERTICES) {
- setup_tab[IND].vertex_format = PROJ_TEX1_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 12;
- } else {
- setup_tab[IND].vertex_format = TEX0_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 8;
- }
- }
- else if (!HAVE_HW_DIVIDE && !DO_SPEC && !DO_FOG && HAVE_TINY_VERTICES) {
- setup_tab[IND].vertex_format = TINY_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 4;
- } else if (HAVE_NOTEX_VERTICES) {
- setup_tab[IND].vertex_format = NOTEX_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 6;
- } else {
- setup_tab[IND].vertex_format = TEX0_VERTEX_FORMAT;
- setup_tab[IND].vertex_size = 8;
- }
-
-}
-
-
-#undef IND
-#undef TAG
diff --git a/src/mesa/drivers/dri/mach64/server/mach64_dri.h b/src/mesa/drivers/dri/mach64/server/mach64_dri.h
deleted file mode 100644
index 1477443f790..00000000000
--- a/src/mesa/drivers/dri/mach64/server/mach64_dri.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * 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, 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
- * GARETH HUGHES 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:
- * Gareth Hughes
- * Leif Delgass
- */
-
-#ifndef __MACH64_DRI_H__
-#define __MACH64_DRI_H__ 1
-
-#include "xf86drm.h"
-
-typedef struct {
- drm_handle_t fbHandle;
-
- drm_handle_t regsHandle;
- drmSize regsSize;
-
- int IsPCI;
-
- drm_handle_t agpHandle; /* Handle from drmAgpAlloc */
- unsigned long agpOffset;
- drmSize agpSize;
- int agpMode;
-
- /* DMA descriptor ring */
- unsigned long ringStart; /* Offset into AGP space */
- drm_handle_t ringHandle; /* Handle from drmAddMap */
- drmSize ringMapSize; /* Size of map */
- int ringSize; /* Size of ring (in kB) */
- drmAddress ringMap; /* Map */
-
- /* vertex buffer data */
- unsigned long bufferStart; /* Offset into AGP space */
- drm_handle_t bufferHandle; /* Handle from drmAddMap */
- drmSize bufferMapSize; /* Size of map */
- int bufferSize; /* Size of buffers (in MB) */
- drmAddress bufferMap; /* Map */
-
- drmBufMapPtr drmBuffers; /* Buffer map */
- int numBuffers; /* Number of buffers */
-
- /* AGP Texture data */
- unsigned long agpTexStart; /* Offset into AGP space */
- drm_handle_t agpTexHandle; /* Handle from drmAddMap */
- drmSize agpTexMapSize; /* Size of map */
- int agpTexSize; /* Size of AGP tex space (in MB) */
- drmAddress agpTexMap; /* Map */
- int log2AGPTexGran;
-
- int fbX;
- int fbY;
- int backX;
- int backY;
- int depthX;
- int depthY;
-
- int frontOffset;
- int frontPitch;
- int backOffset;
- int backPitch;
- int depthOffset;
- int depthPitch;
-
- int textureOffset;
- int textureSize;
- int logTextureGranularity;
-} ATIDRIServerInfoRec, *ATIDRIServerInfoPtr;
-
-typedef struct {
- int chipset;
- int width;
- int height;
- int mem;
- int cpp;
-
- int IsPCI;
- int AGPMode;
-
- unsigned int frontOffset;
- unsigned int frontPitch;
-
- unsigned int backOffset;
- unsigned int backPitch;
-
- unsigned int depthOffset;
- unsigned int depthPitch;
-
- unsigned int textureOffset;
- unsigned int textureSize;
- int logTextureGranularity;
-
- drm_handle_t regs;
- drmSize regsSize;
-
- drm_handle_t agp;
- drmSize agpSize;
- unsigned int agpTextureOffset;
- unsigned int agpTextureSize;
- int logAgpTextureGranularity;
-} ATIDRIRec, *ATIDRIPtr;
-
-#endif /* __MACH64_DRI_H__ */
diff --git a/src/mesa/drivers/dri/mga/Doxyfile b/src/mesa/drivers/dri/mga/Doxyfile
deleted file mode 100644
index 0d0c134a728..00000000000
--- a/src/mesa/drivers/dri/mga/Doxyfile
+++ /dev/null
@@ -1,234 +0,0 @@
-# Doxyfile 1.3.3-Gideon
-
-#---------------------------------------------------------------------------
-# General configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = mga
-PROJECT_NUMBER = $VERSION$
-OUTPUT_DIRECTORY =
-OUTPUT_LANGUAGE = English
-USE_WINDOWS_ENCODING = NO
-EXTRACT_ALL = NO
-EXTRACT_PRIVATE = NO
-EXTRACT_STATIC = NO
-EXTRACT_LOCAL_CLASSES = YES
-HIDE_UNDOC_MEMBERS = NO
-HIDE_UNDOC_CLASSES = NO
-HIDE_FRIEND_COMPOUNDS = NO
-HIDE_IN_BODY_DOCS = NO
-BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
-ALWAYS_DETAILED_SEC = NO
-INLINE_INHERITED_MEMB = NO
-FULL_PATH_NAMES = NO
-STRIP_FROM_PATH =
-INTERNAL_DOCS = NO
-CASE_SENSE_NAMES = YES
-SHORT_NAMES = NO
-HIDE_SCOPE_NAMES = NO
-SHOW_INCLUDE_FILES = YES
-JAVADOC_AUTOBRIEF = NO
-MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = NO
-INHERIT_DOCS = YES
-INLINE_INFO = YES
-SORT_MEMBER_DOCS = YES
-DISTRIBUTE_GROUP_DOC = NO
-TAB_SIZE = 8
-GENERATE_TODOLIST = YES
-GENERATE_TESTLIST = YES
-GENERATE_BUGLIST = YES
-GENERATE_DEPRECATEDLIST= YES
-ALIASES =
-ENABLED_SECTIONS =
-MAX_INITIALIZER_LINES = 30
-OPTIMIZE_OUTPUT_FOR_C = NO
-OPTIMIZE_OUTPUT_JAVA = NO
-SHOW_USED_FILES = YES
-SUBGROUPING = YES
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET = NO
-WARNINGS = YES
-WARN_IF_UNDOCUMENTED = YES
-WARN_IF_DOC_ERROR = YES
-WARN_FORMAT = "$file:$line: $text"
-WARN_LOGFILE =
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = /home/newtree/temp/src/mesa/drivers/dri/mga
-FILE_PATTERNS = *.c \
- *.cc \
- *.cxx \
- *.cpp \
- *.c++ \
- *.java \
- *.ii \
- *.ixx \
- *.ipp \
- *.i++ \
- *.inl \
- *.h \
- *.hh \
- *.hxx \
- *.hpp \
- *.h++ \
- *.idl \
- *.odl \
- *.cs \
- *.C \
- *.H \
- *.tlh \
- *.diff \
- *.patch \
- *.moc \
- *.xpm \
- *.dox
-RECURSIVE = yes
-EXCLUDE =
-EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS =
-EXAMPLE_PATH =
-EXAMPLE_PATTERNS = *
-EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
-FILTER_SOURCE_FILES = NO
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER = NO
-INLINE_SOURCES = NO
-STRIP_CODE_COMMENTS = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION = YES
-VERBATIM_HEADERS = YES
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX = NO
-COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML = YES
-HTML_OUTPUT = html
-HTML_FILE_EXTENSION = .html
-HTML_HEADER =
-HTML_FOOTER =
-HTML_STYLESHEET =
-HTML_ALIGN_MEMBERS = YES
-GENERATE_HTMLHELP = NO
-CHM_FILE =
-HHC_LOCATION =
-GENERATE_CHI = NO
-BINARY_TOC = NO
-TOC_EXPAND = NO
-DISABLE_INDEX = NO
-ENUM_VALUES_PER_LINE = 4
-GENERATE_TREEVIEW = NO
-TREEVIEW_WIDTH = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX = YES
-LATEX_OUTPUT = latex
-LATEX_CMD_NAME = latex
-MAKEINDEX_CMD_NAME = makeindex
-COMPACT_LATEX = NO
-PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
-PDF_HYPERLINKS = NO
-USE_PDFLATEX = NO
-LATEX_BATCHMODE = NO
-LATEX_HIDE_INDICES = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF = NO
-RTF_OUTPUT = rtf
-COMPACT_RTF = NO
-RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN = NO
-MAN_OUTPUT = man
-MAN_EXTENSION = .3
-MAN_LINKS = NO
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML = yes
-XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF = NO
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD = NO
-PERLMOD_LATEX = NO
-PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX =
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING = YES
-MACRO_EXPANSION = NO
-EXPAND_ONLY_PREDEF = NO
-SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
-SKIP_FUNCTION_MACROS = YES
-#---------------------------------------------------------------------------
-# Configuration::addtions related to external references
-#---------------------------------------------------------------------------
-TAGFILES =
-GENERATE_TAGFILE =
-ALLEXTERNALS = NO
-EXTERNAL_GROUPS = YES
-PERL_PATH = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS = YES
-HIDE_UNDOC_RELATIONS = YES
-HAVE_DOT = NO
-CLASS_GRAPH = YES
-COLLABORATION_GRAPH = YES
-UML_LOOK = NO
-TEMPLATE_RELATIONS = NO
-INCLUDE_GRAPH = YES
-INCLUDED_BY_GRAPH = YES
-CALL_GRAPH = NO
-GRAPHICAL_HIERARCHY = YES
-DOT_IMAGE_FORMAT = png
-DOT_PATH =
-DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1024
-MAX_DOT_GRAPH_HEIGHT = 1024
-MAX_DOT_GRAPH_DEPTH = 1000
-GENERATE_LEGEND = YES
-DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine
-#---------------------------------------------------------------------------
-SEARCHENGINE = NO
-CGI_NAME = search.cgi
-CGI_URL =
-DOC_URL =
-DOC_ABSPATH =
-BIN_ABSPATH = /usr/local/bin/
-EXT_DOC_PATHS =
diff --git a/src/mesa/drivers/dri/mga/Makefile b/src/mesa/drivers/dri/mga/Makefile
deleted file mode 100644
index 9948ee767ac..00000000000
--- a/src/mesa/drivers/dri/mga/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-# src/mesa/drivers/dri/mga/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = mga_dri.so
-
-include ../Makefile.defines
-
-DRIVER_SOURCES = \
- mgadd.c \
- mgaioctl.c \
- mgarender.c \
- mgastate.c \
- mgatris.c \
- mgapixel.c \
- mgaspan.c \
- mgatex.c \
- mgatexmem.c \
- mga_texstate.c \
- mga_texcombine.c \
- mgavb.c \
- mga_xmesa.c
-
-C_SOURCES = \
- $(COMMON_SOURCES) \
- $(DRIVER_SOURCES)
-
-
-ASM_SOURCES =
-
-include ../Makefile.targets
-
diff --git a/src/mesa/drivers/dri/mga/README b/src/mesa/drivers/dri/mga/README
deleted file mode 100644
index a7133fa66f4..00000000000
--- a/src/mesa/drivers/dri/mga/README
+++ /dev/null
@@ -1,26 +0,0 @@
-MGA DRI driver ported from XF86DRI to FBDRI
-by Denis Oliver Kropp
-
-
-INFO
-
-This driver has been ported from the head branch of XFree86 to
-the embedded-1-branch of Mesa.
-
-
-STATUS
-
-Already working very well as far as I've tested it (16/32 bit).
-glxgears runs at 935 fps (G550 32MB AGP 4x, Athlon 1.33) vs 744 fps with XFree.
-Other demos (terrain, fire, etc.) have been successfully tested as well.
-
-
-TODO
-
-- mgaEngineShutdown
-- mgaEngineRestore
-- SGRAM detection
-- remove some unused bits from server/*
-- subset driver support
-- mgaWaitForVBlank
-- deinitialization (from MGADRICloseScreen) a la radeonDestroyScreen
diff --git a/src/mesa/drivers/dri/mga/mga_texcombine.c b/src/mesa/drivers/dri/mga/mga_texcombine.c
deleted file mode 100644
index 1488a89bb65..00000000000
--- a/src/mesa/drivers/dri/mga/mga_texcombine.c
+++ /dev/null
@@ -1,672 +0,0 @@
-/*
- * Copyright (c) 2003 Ville Syrjala
- *
- * 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 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:
- * Ville Syrjala
- */
-
-#include "main/glheader.h"
-
-#include "mgacontext.h"
-#include "mgatex.h"
-#include "mgaregs.h"
-
-/*
- * GL_ARB_texture_env_combine
- * GL_EXT_texture_env_combine
- * GL_ARB_texture_env_crossbar
- * GL_ATI_texture_env_combine3
- */
-
-#define ARG_DISABLE 0xffffffff
-#define MGA_ARG1 0
-#define MGA_ARG2 1
-#define MGA_ALPHA 2
-
-GLboolean mgaUpdateTextureEnvCombine( struct gl_context *ctx, int unit )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- const int source = mmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- GLuint *reg = ((GLuint *)&mmesa->setup.tdualstage0 + unit);
- GLuint numColorArgs = 0, numAlphaArgs = 0;
- GLuint arg1[3], arg2[3], alpha[3];
- int args[3];
- int i;
-
- switch (texUnit->Combine.ModeRGB) {
- case GL_REPLACE:
- numColorArgs = 1;
- break;
- case GL_MODULATE:
- case GL_ADD:
- case GL_ADD_SIGNED:
- case GL_SUBTRACT:
- numColorArgs = 2;
- break;
- case GL_INTERPOLATE:
- case GL_MODULATE_ADD_ATI:
- case GL_MODULATE_SIGNED_ADD_ATI:
- case GL_MODULATE_SUBTRACT_ATI:
- numColorArgs = 3;
- break;
- default:
- return GL_FALSE;
- }
-
- switch (texUnit->Combine.ModeA) {
- case GL_REPLACE:
- numAlphaArgs = 1;
- break;
- case GL_MODULATE:
- case GL_ADD:
- case GL_ADD_SIGNED:
- case GL_SUBTRACT:
- numAlphaArgs = 2;
- break;
- default:
- return GL_FALSE;
- }
-
- /* Start fresh :) */
- *reg = 0;
-
- /* COLOR */
- for (i = 0; i < 3; i++) {
- arg1[i] = 0;
- arg2[i] = 0;
- alpha[i] = 0;
- }
-
- for (i = 0;i < numColorArgs; i++) {
- switch (texUnit->Combine.SourceRGB[i]) {
- case GL_TEXTURE:
- arg1[i] |= 0;
- arg2[i] |= ARG_DISABLE;
- alpha[i] |= TD0_color_alpha_currtex;
- break;
- case GL_TEXTURE0:
- if (source == 0) {
- arg1[i] |= 0;
- arg2[i] |= ARG_DISABLE;
- alpha[i] |= TD0_color_alpha_currtex;
- } else {
- if (ctx->Texture._EnabledUnits != 0x03) {
- /* disable texturing */
- mmesa->setup.dwgctl &= DC_opcod_MASK;
- mmesa->setup.dwgctl |= DC_opcod_trap;
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
- /* return GL_TRUE since we don't need a fallback */
- return GL_TRUE;
- }
- arg1[i] |= ARG_DISABLE;
- arg2[i] |= ARG_DISABLE;
- alpha[i] |= TD0_color_alpha_prevtex;
- }
- break;
- case GL_TEXTURE1:
- if (source == 0) {
- if (ctx->Texture._EnabledUnits != 0x03) {
- /* disable texturing */
- mmesa->setup.dwgctl &= DC_opcod_MASK;
- mmesa->setup.dwgctl |= DC_opcod_trap;
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
- /* return GL_TRUE since we don't need a fallback */
- return GL_TRUE;
- }
- arg1[i] |= ARG_DISABLE;
- /* G400 specs (TDUALSTAGE0) */
- arg2[i] |= TD0_color_arg2_prevstage;
- alpha[i] |= TD0_color_alpha_prevstage;
- } else {
- arg1[i] |= 0;
- arg2[i] |= ARG_DISABLE;
- alpha[i] |= TD0_color_alpha_currtex;
- }
- break;
- case GL_CONSTANT:
- if (mmesa->fcol_used &&
- mmesa->envcolor[source] != mmesa->envcolor[!source])
- return GL_FALSE;
-
- arg1[i] |= ARG_DISABLE;
- arg2[i] |= TD0_color_arg2_fcol;
- alpha[i] |= TD0_color_alpha_fcol;
-
- mmesa->setup.fcol = mmesa->envcolor[source];
- mmesa->fcol_used = GL_TRUE;
- break;
- case GL_PRIMARY_COLOR:
- arg1[i] |= ARG_DISABLE;
- /* G400 specs (TDUALSTAGE1) */
- if (unit == 0 || (mmesa->setup.tdualstage0 &
- ((TD0_color_sel_mul & TD0_color_sel_add) |
- (TD0_alpha_sel_mul & TD0_alpha_sel_add)))) {
- arg2[i] |= TD0_color_arg2_diffuse;
- alpha[i] |= TD0_color_alpha_diffuse;
- } else {
- arg2[i] |= ARG_DISABLE;
- alpha[i] |= ARG_DISABLE;
- }
- break;
- case GL_PREVIOUS:
- arg1[i] |= ARG_DISABLE;
- if (unit == 0) {
- arg2[i] |= TD0_color_arg2_diffuse;
- alpha[i] |= TD0_color_alpha_diffuse;
- } else {
- arg2[i] |= TD0_color_arg2_prevstage;
- alpha[i] |= TD0_color_alpha_prevstage;
- }
- break;
- default:
- return GL_FALSE;
- }
-
- switch (texUnit->Combine.OperandRGB[i]) {
- case GL_SRC_COLOR:
- arg1[i] |= 0;
- arg2[i] |= 0;
- if (texUnit->Combine.SourceRGB[i] == GL_CONSTANT &&
- RGBA_EQUAL( mmesa->envcolor[source] )) {
- alpha[i] |= 0;
- } else {
- alpha[i] |= ARG_DISABLE;
- }
- break;
- case GL_ONE_MINUS_SRC_COLOR:
- arg1[i] |= TD0_color_arg1_inv_enable;
- arg2[i] |= TD0_color_arg2_inv_enable;
- if (texUnit->Combine.SourceRGB[i] == GL_CONSTANT &&
- RGBA_EQUAL( mmesa->envcolor[source] )) {
- alpha[i] |= (TD0_color_alpha1inv_enable |
- TD0_color_alpha2inv_enable);
- } else {
- alpha[i] |= ARG_DISABLE;
- }
- break;
- case GL_SRC_ALPHA:
- arg1[i] |= TD0_color_arg1_replicatealpha_enable;
- arg2[i] |= TD0_color_arg2_replicatealpha_enable;
- alpha[i] |= 0;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- arg1[i] |= (TD0_color_arg1_replicatealpha_enable |
- TD0_color_arg1_inv_enable);
- arg2[i] |= (TD0_color_arg2_replicatealpha_enable |
- TD0_color_arg2_inv_enable);
- alpha[i] |= (TD0_color_alpha1inv_enable |
- TD0_color_alpha2inv_enable);
- break;
- }
- }
-
- switch (texUnit->Combine.ModeRGB) {
- case GL_MODULATE_ADD_ATI:
- case GL_MODULATE_SIGNED_ADD_ATI:
- /* Special handling for ATI_texture_env_combine3.
- * If Arg1 == Arg0 or Arg1 == Arg2 we can use arg1 or arg2 as input for
- * both multiplier and adder.
- */
- /* Arg1 == arg1 */
- if (arg1[1] == arg1[0]) {
- if ((arg1[1] | arg2[2]) != ARG_DISABLE) {
- *reg |= arg1[1] | arg2[2];
- args[0] = MGA_ARG1; args[1] = MGA_ARG1; args[2] = MGA_ARG2;
- break;
- } else
- if ((arg1[1] | alpha[2]) != ARG_DISABLE) {
- *reg |= arg1[1] | alpha[2];
- args[0] = MGA_ARG1; args[1] = MGA_ARG1; args[2] = MGA_ALPHA;
- break;
- }
- }
- if (arg1[1] == arg1[2]) {
- if ((arg1[1] | arg2[0]) != ARG_DISABLE) {
- *reg |= arg1[1] | arg2[0];
- args[0] = MGA_ARG2; args[1] = MGA_ARG1; args[2] = MGA_ARG1;
- break;
- } else
- if ((arg1[1] | alpha[0]) != ARG_DISABLE) {
- *reg |= arg1[1] | alpha[0];
- args[0] = MGA_ALPHA; args[1] = MGA_ARG1; args[2] = MGA_ARG1;
- break;
- }
- }
- /* fallthrough */
- case GL_MODULATE_SUBTRACT_ATI:
- /* Arg1 == arg2 */
- if (arg2[1] == arg2[0]) {
- if ((arg2[1] | arg1[2]) != ARG_DISABLE) {
- *reg |= arg2[1] | arg1[2];
- args[0] = MGA_ARG2; args[1] = MGA_ARG2; args[2] = MGA_ARG1;
- break;
- } else
- if ((arg2[1] | alpha[2]) != ARG_DISABLE) {
- *reg |= arg2[1] | alpha[2];
- args[0] = MGA_ARG2; args[1] = MGA_ARG2; args[2] = MGA_ALPHA;
- break;
- }
- }
- if (arg2[1] == arg2[2]) {
- if ((arg2[1] | arg1[0]) != ARG_DISABLE) {
- *reg |= arg2[1] | arg1[0];
- args[0] = MGA_ARG1; args[1] = MGA_ARG2; args[2] = MGA_ARG2;
- break;
- } else
- if ((arg2[1] | alpha[0]) != ARG_DISABLE) {
- *reg |= arg2[1] | alpha[0];
- args[0] = MGA_ALPHA; args[1] = MGA_ARG2; args[2] = MGA_ARG2;
- break;
- }
- }
- /* fallthrough */
- default:
- /* Find working combo of arg1, arg2 and alpha.
- *
- * Keep the Arg0 != alpha cases first since there's
- * no way to get alpha out by itself (GL_REPLACE).
- *
- * Keep the Arg2 == alpha cases first because only alpha has the
- * capabilities to function as Arg2 (GL_INTERPOLATE). Also good for
- * GL_ADD, GL_ADD_SIGNED, GL_SUBTRACT since we can't get alpha to the
- * adder.
- *
- * Keep the Arg1 == alpha cases last for GL_MODULATE_ADD_ATI,
- * GL_MODULATE_SIGNED_ADD_ATI. Again because we can't get alpha to the
- * adder.
- *
- * GL_MODULATE_SUBTRACT_ATI needs special treatment since it requires
- * that Arg1 == arg2. This requirement clashes with those of other modes.
- */
- if ((arg1[0] | arg2[1] | alpha[2]) != ARG_DISABLE) {
- *reg |= arg1[0] | arg2[1] | alpha[2];
- args[0] = MGA_ARG1; args[1] = MGA_ARG2; args[2] = MGA_ALPHA;
- } else
- if ((arg1[1] | arg2[0] | alpha[2]) != ARG_DISABLE &&
- texUnit->Combine.ModeRGB != GL_MODULATE_SUBTRACT_ATI) {
- *reg |= arg1[1] | arg2[0] | alpha[2];
- args[0] = MGA_ARG2; args[1] = MGA_ARG1; args[2] = MGA_ALPHA;
- } else
- if ((arg1[1] | arg2[2] | alpha[0]) != ARG_DISABLE &&
- texUnit->Combine.ModeRGB != GL_MODULATE_SUBTRACT_ATI) {
- *reg |= arg1[1] | arg2[2] | alpha[0];
- args[0] = MGA_ALPHA; args[1] = MGA_ARG1; args[2] = MGA_ARG2;
- } else
- if ((arg1[2] | arg2[1] | alpha[0]) != ARG_DISABLE) {
- *reg |= arg1[2] | arg2[1] | alpha[0];
- args[0] = MGA_ALPHA; args[1] = MGA_ARG2; args[2] = MGA_ARG1;
- } else
- if ((arg1[0] | arg2[2] | alpha[1]) != ARG_DISABLE) {
- *reg |= arg1[0] | arg2[2] | alpha[1];
- args[0] = MGA_ARG1; args[1] = MGA_ALPHA; args[2] = MGA_ARG2;
- } else
- if ((arg1[2] | arg2[0] | alpha[1]) != ARG_DISABLE) {
- *reg |= arg1[2] | arg2[0] | alpha[1];
- args[0] = MGA_ARG2; args[1] = MGA_ALPHA; args[2] = MGA_ARG1;
- } else {
- /* nothing suitable */
- return GL_FALSE;
- }
- }
-
- switch (texUnit->Combine.ModeRGB) {
- case GL_REPLACE:
- if (texUnit->Combine.ScaleShiftRGB) {
- return GL_FALSE;
- }
-
- if (args[0] == MGA_ARG1) {
- *reg |= TD0_color_sel_arg1;
- } else if (args[0] == MGA_ARG2) {
- *reg |= TD0_color_sel_arg2;
- } else if (args[0] == MGA_ALPHA) {
- /* Can't get alpha out by itself */
- return GL_FALSE;
- }
- break;
- case GL_MODULATE:
- if (texUnit->Combine.ScaleShiftRGB == 1) {
- *reg |= TD0_color_modbright_2x;
- } else if (texUnit->Combine.ScaleShiftRGB == 2) {
- *reg |= TD0_color_modbright_4x;
- }
-
- *reg |= TD0_color_sel_mul;
-
- if (args[0] == MGA_ALPHA || args[1] == MGA_ALPHA) {
- if (args[0] == MGA_ARG1 || args[1] == MGA_ARG1) {
- *reg |= TD0_color_arg2mul_alpha2;
- } else if (args[0] == MGA_ARG2 || args[1] == MGA_ARG2) {
- *reg |= TD0_color_arg1mul_alpha1;
- }
- }
- break;
- case GL_ADD_SIGNED:
- *reg |= TD0_color_addbias_enable;
- /* fallthrough */
- case GL_ADD:
- if (args[0] == MGA_ALPHA || args[1] == MGA_ALPHA) {
- /* Can't get alpha to the adder */
- return GL_FALSE;
- }
- if (texUnit->Combine.ScaleShiftRGB == 1) {
- *reg |= TD0_color_add2x_enable;
- } else if (texUnit->Combine.ScaleShiftRGB == 2) {
- return GL_FALSE;
- }
-
- *reg |= (TD0_color_add_add |
- TD0_color_sel_add);
- break;
- case GL_INTERPOLATE:
- if (args[2] != MGA_ALPHA) {
- /* Only alpha can function as Arg2 */
- return GL_FALSE;
- }
- if (texUnit->Combine.ScaleShiftRGB == 1) {
- *reg |= TD0_color_add2x_enable;
- } else if (texUnit->Combine.ScaleShiftRGB == 2) {
- return GL_FALSE;
- }
-
- *reg |= (TD0_color_arg1mul_alpha1 |
- TD0_color_blend_enable |
- TD0_color_arg1add_mulout |
- TD0_color_arg2add_mulout |
- TD0_color_add_add |
- TD0_color_sel_add);
-
- /* Have to do this with xor since GL_ONE_MINUS_SRC_ALPHA may have
- * already touched this bit.
- */
- *reg ^= TD0_color_alpha1inv_enable;
-
- if (args[0] == MGA_ARG2) {
- /* Swap arguments */
- *reg ^= (TD0_color_arg1mul_alpha1 |
- TD0_color_arg2mul_alpha2 |
- TD0_color_alpha1inv_enable |
- TD0_color_alpha2inv_enable);
- }
-
- if (ctx->Texture._EnabledUnits != 0x03) {
- /* Linear blending mode needs dualtex enabled */
- *(reg+1) = (TD0_color_arg2_prevstage |
- TD0_color_sel_arg2 |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2);
- mmesa->force_dualtex = GL_TRUE;
- }
- break;
- case GL_SUBTRACT:
- if (args[0] == MGA_ALPHA || args[1] == MGA_ALPHA) {
- /* Can't get alpha to the adder */
- return GL_FALSE;
- }
- if (texUnit->Combine.ScaleShiftRGB == 1) {
- *reg |= TD0_color_add2x_enable;
- } else if (texUnit->Combine.ScaleShiftRGB == 2) {
- return GL_FALSE;
- }
-
- *reg |= (TD0_color_add_sub |
- TD0_color_sel_add);
-
- if (args[0] == MGA_ARG2) {
- /* Swap arguments */
- *reg ^= (TD0_color_arg1_inv_enable |
- TD0_color_arg2_inv_enable);
- }
- break;
- case GL_MODULATE_SIGNED_ADD_ATI:
- *reg |= TD0_color_addbias_enable;
- /* fallthrough */
- case GL_MODULATE_ADD_ATI:
- if (args[1] == MGA_ALPHA) {
- /* Can't get alpha to the adder */
- return GL_FALSE;
- }
- if (texUnit->Combine.ScaleShiftRGB == 1) {
- *reg |= TD0_color_add2x_enable;
- } else if (texUnit->Combine.ScaleShiftRGB == 2) {
- return GL_FALSE;
- }
-
- *reg |= (TD0_color_add_add |
- TD0_color_sel_add);
-
- if (args[1] == args[0] || args[1] == args[2]) {
- *reg |= TD0_color_arg1add_mulout;
- if (args[0] == MGA_ALPHA || args[2] == MGA_ALPHA)
- *reg |= TD0_color_arg1mul_alpha1;
-
- if (args[1] == MGA_ARG1) {
- /* Swap adder arguments */
- *reg ^= (TD0_color_arg1add_mulout |
- TD0_color_arg2add_mulout);
- if (args[0] == MGA_ALPHA || args[2] == MGA_ALPHA) {
- /* Swap multiplier arguments */
- *reg ^= (TD0_color_arg1mul_alpha1 |
- TD0_color_arg2mul_alpha2);
- }
- }
- } else {
- *reg |= (TD0_color_arg2mul_alpha2 |
- TD0_color_arg1add_mulout);
-
- if (args[1] == MGA_ARG1) {
- /* Swap arguments */
- *reg ^= (TD0_color_arg1mul_alpha1 |
- TD0_color_arg2mul_alpha2 |
- TD0_color_arg1add_mulout |
- TD0_color_arg2add_mulout);
- }
- }
- break;
- case GL_MODULATE_SUBTRACT_ATI:
- if (args[1] != MGA_ARG2) {
- /* Can't swap arguments */
- return GL_FALSE;
- }
- if (texUnit->Combine.ScaleShiftRGB == 1) {
- *reg |= TD0_color_add2x_enable;
- } else if (texUnit->Combine.ScaleShiftRGB == 2) {
- return GL_FALSE;
- }
-
- *reg |= (TD0_color_add_sub |
- TD0_color_sel_add);
-
- if (args[1] == args[0] || args[1] == args[2]) {
- *reg |= TD0_color_arg1add_mulout;
- if (args[0] == MGA_ALPHA || args[2] == MGA_ALPHA)
- *reg |= TD0_color_arg1mul_alpha1;
- } else {
- *reg |= (TD0_color_arg2mul_alpha2 |
- TD0_color_arg1add_mulout);
- }
- break;
- }
-
-
- /* ALPHA */
- for (i = 0; i < 2; i++) {
- arg1[i] = 0;
- arg2[i] = 0;
- }
-
- for (i = 0; i < numAlphaArgs; i++) {
- switch (texUnit->Combine.SourceA[i]) {
- case GL_TEXTURE:
- arg1[i] |= 0;
- arg2[i] |= ARG_DISABLE;
- break;
- case GL_TEXTURE0:
- if (source == 0) {
- arg1[i] |= 0;
- arg2[i] |= ARG_DISABLE;
- } else {
- if (ctx->Texture._EnabledUnits != 0x03) {
- /* disable texturing */
- mmesa->setup.dwgctl &= DC_opcod_MASK;
- mmesa->setup.dwgctl |= DC_opcod_trap;
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
- /* return GL_TRUE since we don't need a fallback */
- return GL_TRUE;
- }
- arg1[i] |= ARG_DISABLE;
- arg2[i] |= TD0_alpha_arg2_prevtex;
- }
- break;
- case GL_TEXTURE1:
- if (source == 0) {
- if (ctx->Texture._EnabledUnits != 0x03) {
- /* disable texturing */
- mmesa->setup.dwgctl &= DC_opcod_MASK;
- mmesa->setup.dwgctl |= DC_opcod_trap;
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
- /* return GL_TRUE since we don't need a fallback */
- return GL_TRUE;
- }
- arg1[i] |= ARG_DISABLE;
- /* G400 specs (TDUALSTAGE0) */
- arg2[i] |= TD0_alpha_arg2_prevstage;
- } else {
- arg1[i] |= 0;
- arg2[i] |= ARG_DISABLE;
- }
- break;
- case GL_CONSTANT:
- if (mmesa->fcol_used &&
- mmesa->envcolor[source] != mmesa->envcolor[!source])
- return GL_FALSE;
-
- arg1[i] |= ARG_DISABLE;
- arg2[i] |= TD0_alpha_arg2_fcol;
-
- mmesa->setup.fcol = mmesa->envcolor[source];
- mmesa->fcol_used = GL_TRUE;
- break;
- case GL_PRIMARY_COLOR:
- arg1[i] |= ARG_DISABLE;
- /* G400 specs (TDUALSTAGE1) */
- if (unit == 0 || (mmesa->setup.tdualstage0 &
- ((TD0_color_sel_mul & TD0_color_sel_add) |
- (TD0_alpha_sel_mul & TD0_alpha_sel_add)))) {
- arg2[i] |= TD0_alpha_arg2_diffuse;
- } else {
- arg2[i] |= ARG_DISABLE;
- }
- break;
- case GL_PREVIOUS:
- arg1[i] |= ARG_DISABLE;
- if (unit == 0) {
- arg2[i] |= TD0_alpha_arg2_diffuse;
- } else {
- arg2[i] |= TD0_alpha_arg2_prevstage;
- }
- break;
- default:
- return GL_FALSE;
- }
-
- switch (texUnit->Combine.OperandA[i]) {
- case GL_SRC_ALPHA:
- arg1[i] |= 0;
- arg2[i] |= 0;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- arg1[i] |= TD0_alpha_arg1_inv_enable;
- arg2[i] |= TD0_alpha_arg2_inv_enable;
- break;
- }
- }
-
- /* Find a working combo of arg1 and arg2 */
- if ((arg1[0] | arg2[1]) != ARG_DISABLE) {
- *reg |= arg1[0] | arg2[1];
- args[0] = MGA_ARG1; args[1] = MGA_ARG2;
- } else
- if ((arg1[1] | arg2[0]) != ARG_DISABLE) {
- *reg |= arg1[1] | arg2[0];
- args[0] = MGA_ARG2; args[1] = MGA_ARG1;
- } else {
- /* nothing suitable */
- return GL_FALSE;
- }
-
- switch (texUnit->Combine.ModeA) {
- case GL_REPLACE:
- if (texUnit->Combine.ScaleShiftA) {
- return GL_FALSE;
- }
-
- if (args[0] == MGA_ARG1) {
- *reg |= TD0_alpha_sel_arg1;
- } else if (args[0] == MGA_ARG2) {
- *reg |= TD0_alpha_sel_arg2;
- }
- break;
- case GL_MODULATE:
- if (texUnit->Combine.ScaleShiftA == 1) {
- *reg |= TD0_alpha_modbright_2x;
- } else if (texUnit->Combine.ScaleShiftA == 2) {
- *reg |= TD0_alpha_modbright_4x;
- }
-
- *reg |= TD0_alpha_sel_mul;
- break;
- case GL_ADD_SIGNED:
- *reg |= TD0_alpha_addbias_enable;
- /* fallthrough */
- case GL_ADD:
- if (texUnit->Combine.ScaleShiftA == 1) {
- *reg |= TD0_alpha_add2x_enable;
- } else if (texUnit->Combine.ScaleShiftA == 2) {
- return GL_FALSE;
- }
-
- *reg |= (TD0_alpha_add_enable |
- TD0_alpha_sel_add);
- break;
- case GL_SUBTRACT:
- if (texUnit->Combine.ScaleShiftA == 1) {
- *reg |= TD0_alpha_add2x_enable;
- } else if (texUnit->Combine.ScaleShiftA == 2) {
- return GL_FALSE;
- }
-
- *reg |= (TD0_alpha_add_disable |
- TD0_alpha_sel_add);
-
- if (args[0] == MGA_ARG2) {
- /* Swap arguments */
- *reg ^= (TD0_alpha_arg1_inv_enable |
- TD0_alpha_arg2_inv_enable);
- }
- break;
- }
-
- return GL_TRUE;
-}
-
-
diff --git a/src/mesa/drivers/dri/mga/mga_texstate.c b/src/mesa/drivers/dri/mga/mga_texstate.c
deleted file mode 100644
index 33ad8b42560..00000000000
--- a/src/mesa/drivers/dri/mga/mga_texstate.c
+++ /dev/null
@@ -1,898 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * (c) Copyright IBM Corporation 2002
- * 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
- * on 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
- * VA LINUX SYSTEMS, IBM AND/OR THEIR 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.
- *
- * Authors:
- * Ian Romanick
- * Keith Whitwell
- */
-
-#include "main/context.h"
-#include "main/enums.h"
-#include "main/macros.h"
-#include "main/mm.h"
-#include "main/imports.h"
-#include "main/simple_list.h"
-
-#include "mgacontext.h"
-#include "mgatex.h"
-#include "mgaregs.h"
-#include "mgatris.h"
-#include "mgaioctl.h"
-
-#define MGA_USE_TABLE_FOR_FORMAT
-#ifdef MGA_USE_TABLE_FOR_FORMAT
-#define TMC_nr_tformat (MESA_FORMAT_YCBCR_REV + 1)
-static const unsigned TMC_tformat[ TMC_nr_tformat ] =
-{
- [MESA_FORMAT_ARGB8888] = TMC_tformat_tw32,
- [MESA_FORMAT_RGB565] = TMC_tformat_tw16,
- [MESA_FORMAT_ARGB4444] = TMC_tformat_tw12,
- [MESA_FORMAT_ARGB1555] = TMC_tformat_tw15,
- [MESA_FORMAT_AL88] = TMC_tformat_tw8al,
- [MESA_FORMAT_I8] = TMC_tformat_tw8a,
- [MESA_FORMAT_CI8] = TMC_tformat_tw8 ,
- [MESA_FORMAT_YCBCR] = TMC_tformat_tw422uyvy,
- [MESA_FORMAT_YCBCR_REV] = TMC_tformat_tw422,
-};
-#endif
-
-static void
-mgaSetTexImages( mgaContextPtr mmesa,
- const struct gl_texture_object * tObj )
-{
- mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;
- struct gl_texture_image *baseImage = tObj->Image[0][ tObj->BaseLevel ];
- GLint totalSize;
- GLint width, height;
- GLint i;
- GLint numLevels;
- GLint log2Width, log2Height;
- GLuint txformat = 0;
- GLint ofs;
-
- /* Set the hardware texture format
- */
-#ifndef MGA_USE_TABLE_FOR_FORMAT
- switch (baseImage->TexFormat->MesaFormat) {
-
- case MESA_FORMAT_ARGB8888: txformat = TMC_tformat_tw32; break;
- case MESA_FORMAT_RGB565: txformat = TMC_tformat_tw16; break;
- case MESA_FORMAT_ARGB4444: txformat = TMC_tformat_tw12; break;
- case MESA_FORMAT_ARGB1555: txformat = TMC_tformat_tw15; break;
- case MESA_FORMAT_AL88: txformat = TMC_tformat_tw8al; break;
- case MESA_FORMAT_I8: txformat = TMC_tformat_tw8a; break;
- case MESA_FORMAT_CI8: txformat = TMC_tformat_tw8; break;
- case MESA_FORMAT_YCBCR: txformat = TMC_tformat_tw422uyvy; break;
- case MESA_FORMAT_YCBCR_REV: txformat = TMC_tformat_tw422; break;
-
- default:
- _mesa_problem(NULL, "unexpected texture format in %s", __FUNCTION__);
- return;
- }
-#else
- if ( (baseImage->TexFormat >= TMC_nr_tformat)
- || (TMC_tformat[ baseImage->TexFormat ] == 0) )
- {
- _mesa_problem(NULL, "unexpected texture format in %s", __FUNCTION__);
- return;
- }
-
- txformat = TMC_tformat[ baseImage->TexFormat ];
-
-#endif /* MGA_USE_TABLE_FOR_FORMAT */
-
- driCalculateTextureFirstLastLevel( (driTextureObject *) t );
- if (tObj->Target == GL_TEXTURE_RECTANGLE_NV) {
- log2Width = 0;
- log2Height = 0;
- } else {
- log2Width = tObj->Image[0][t->base.firstLevel]->WidthLog2;
- log2Height = tObj->Image[0][t->base.firstLevel]->HeightLog2;
- }
-
- width = tObj->Image[0][t->base.firstLevel]->Width;
- height = tObj->Image[0][t->base.firstLevel]->Height;
-
- numLevels = MIN2( t->base.lastLevel - t->base.firstLevel + 1,
- MGA_IS_G200(mmesa) ? G200_TEX_MAXLEVELS : G400_TEX_MAXLEVELS);
-
-
- totalSize = 0;
- for ( i = 0 ; i < numLevels ; i++ ) {
- const struct gl_texture_image * const texImage =
- tObj->Image[0][ i + t->base.firstLevel ];
- int size;
-
- if (texImage == NULL)
- break;
-
- size = texImage->Width * texImage->Height *
- _mesa_get_format_bytes(baseImage->TexFormat);
-
- t->offsets[i] = totalSize;
- t->base.dirty_images[0] |= (1<base.lastLevel = t->base.firstLevel + numLevels - 1;
- t->base.totalSize = totalSize;
-
- /* setup hardware register values */
- t->setup.texctl &= (TMC_tformat_MASK & TMC_tpitch_MASK
- & TMC_tpitchext_MASK);
- t->setup.texctl |= txformat;
-
-
- /* Set the texture width. In order to support non-power of 2 textures and
- * textures larger than 1024 texels wide, "linear" pitch must be used. For
- * the linear pitch, if the width is 2048, a value of zero is used.
- */
-
- t->setup.texctl |= TMC_tpitchlin_enable;
- t->setup.texctl |= MGA_FIELD( TMC_tpitchext, width & (2048 - 1) );
-
-
- /* G400 specifies the number of mip levels in a strange way. Since there
- * are up to 11 levels, it requires 4 bits. Three of the bits are at the
- * high end of TEXFILTER. The other bit is in the middle. Weird.
- */
- numLevels--;
- t->setup.texfilter &= TF_mapnb_MASK & TF_mapnbhigh_MASK & TF_reserved_MASK;
- t->setup.texfilter |= MGA_FIELD( TF_mapnb, numLevels & 0x7 );
- t->setup.texfilter |= MGA_FIELD( TF_mapnbhigh, (numLevels >> 3) & 0x1 );
-
- /* warp texture registers */
- ofs = MGA_IS_G200(mmesa) ? 28 : 11;
-
- t->setup.texwidth = (MGA_FIELD(TW_twmask, width - 1) |
- MGA_FIELD(TW_rfw, (10 - log2Width - 8) & 63 ) |
- MGA_FIELD(TW_tw, (log2Width + ofs ) | 0x40 ));
-
- t->setup.texheight = (MGA_FIELD(TH_thmask, height - 1) |
- MGA_FIELD(TH_rfh, (10 - log2Height - 8) & 63 ) |
- MGA_FIELD(TH_th, (log2Height + ofs ) | 0x40 ));
-
- mgaUploadTexImages( mmesa, t );
-}
-
-
-/* ================================================================
- * Texture unit state management
- */
-
-static void mgaUpdateTextureEnvG200( struct gl_context *ctx, GLuint unit )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- struct gl_texture_object *tObj = ctx->Texture.Unit[0]._Current;
- mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;
- GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
-
- if (tObj != ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX] &&
- tObj != ctx->Texture.Unit[0].CurrentTex[TEXTURE_RECT_INDEX])
- return;
-
-
- t->setup.texctl &= ~TMC_tmodulate_enable;
- t->setup.texctl2 &= ~(TMC_decalblend_enable |
- TMC_idecal_enable |
- TMC_decaldis_enable);
-
- switch (ctx->Texture.Unit[0].EnvMode) {
- case GL_REPLACE:
- if (format == GL_ALPHA)
- t->setup.texctl2 |= TMC_idecal_enable;
-
- if (format == GL_RGB || format == GL_LUMINANCE)
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
- else
- mmesa->hw.alpha_sel = AC_alphasel_fromtex;
- break;
-
- case GL_MODULATE:
- t->setup.texctl |= TMC_tmodulate_enable;
-
- if (format == GL_ALPHA)
- t->setup.texctl2 |= (TMC_idecal_enable |
- TMC_decaldis_enable);
-
- if (format == GL_RGB || format == GL_LUMINANCE)
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
- else
- mmesa->hw.alpha_sel = AC_alphasel_modulated;
- break;
-
- case GL_DECAL:
- if (format == GL_RGB || format == GL_RGBA)
- t->setup.texctl2 |= TMC_decalblend_enable;
- else
- t->setup.texctl2 |= TMC_idecal_enable;
-
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
- break;
-
- case GL_BLEND:
- if (format == GL_ALPHA) {
- t->setup.texctl2 |= TMC_idecal_enable;
- mmesa->hw.alpha_sel = AC_alphasel_modulated;
- } else {
- t->texenv_fallback = GL_TRUE;
- }
- break;
-
- default:
- break;
- }
-}
-
-
-#define MGA_REPLACE 0
-#define MGA_MODULATE 1
-#define MGA_DECAL 2
-#define MGA_ADD 3
-#define MGA_MAX_COMBFUNC 4
-
-static const GLuint g400_color_combine[][MGA_MAX_COMBFUNC] =
-{
- /* Unit 0:
- */
- {
- /* GL_REPLACE
- * Cv = Cs
- * Av = Af
- */
- (TD0_color_sel_arg1 |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_arg2),
-
- /* GL_MODULATE
- * Cv = Cf Cs
- * Av = Af
- */
- (TD0_color_arg2_diffuse |
- TD0_color_sel_mul |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_arg2),
-
- /* GL_DECAL
- * Cv = Cs
- * Av = Af
- */
- (TD0_color_sel_arg1 |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_arg2),
-
- /* GL_ADD
- * Cv = Cf + Cs
- * Av = Af
- */
- (TD0_color_arg2_diffuse |
- TD0_color_add_add |
- TD0_color_sel_add |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_arg2),
- },
-
- /* Unit 1:
- */
- {
- /* GL_REPLACE
- * Cv = Cs
- * Av = Ap
- */
- (TD0_color_sel_arg1 |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2),
-
- /* GL_MODULATE
- * Cv = Cp Cs
- * Av = Ap
- */
- (TD0_color_arg2_prevstage |
- TD0_color_sel_mul |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2),
-
- /* GL_DECAL
- * Cv = Cs
- * Av = Ap
- */
- (TD0_color_sel_arg1 |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2),
-
- /* GL_ADD
- * Cv = Cp + Cs
- * Av = Ap
- */
- (TD0_color_arg2_prevstage |
- TD0_color_add_add |
- TD0_color_sel_add |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2),
- },
-};
-
-static const GLuint g400_color_alpha_combine[][MGA_MAX_COMBFUNC] =
-{
- /* Unit 0:
- */
- {
- /* GL_REPLACE
- * Cv = Cs
- * Av = As
- */
- (TD0_color_sel_arg1 |
- TD0_alpha_sel_arg1),
-
- /* GL_MODULATE
- * Cv = Cf Cs
- * Av = Af As
- */
- (TD0_color_arg2_diffuse |
- TD0_color_sel_mul |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_mul),
-
- /* GL_DECAL
- * tmp = Cf ( 1 - As )
- * Cv = tmp + Cs As
- * Av = Af
- */
- (TD0_color_arg2_diffuse |
- TD0_color_alpha_currtex |
- TD0_color_alpha1inv_enable |
- TD0_color_arg1mul_alpha1 |
- TD0_color_blend_enable |
- TD0_color_arg1add_mulout |
- TD0_color_arg2add_mulout |
- TD0_color_add_add |
- TD0_color_sel_add |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_arg2),
-
- /* GL_ADD
- * Cv = Cf + Cs
- * Av = Af As
- */
- (TD0_color_arg2_diffuse |
- TD0_color_add_add |
- TD0_color_sel_add |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_mul),
- },
-
- /* Unit 1:
- */
- {
- /* GL_REPLACE
- * Cv = Cs
- * Av = As
- */
- (TD0_color_sel_arg1 |
- TD0_alpha_sel_arg1),
-
- /* GL_MODULATE
- * Cv = Cp Cs
- * Av = Ap As
- */
- (TD0_color_arg2_prevstage |
- TD0_color_sel_mul |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_mul),
-
- /* GL_DECAL
- * tmp = Cp ( 1 - As )
- * Cv = tmp + Cs As
- * Av = Ap
- */
- (TD0_color_arg2_prevstage |
- TD0_color_alpha_currtex |
- TD0_color_alpha1inv_enable |
- TD0_color_arg1mul_alpha1 |
- TD0_color_blend_enable |
- TD0_color_arg1add_mulout |
- TD0_color_arg2add_mulout |
- TD0_color_add_add |
- TD0_color_sel_add |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2),
-
- /* GL_ADD
- * Cv = Cp + Cs
- * Av = Ap As
- */
- (TD0_color_arg2_prevstage |
- TD0_color_add_add |
- TD0_color_sel_add |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_mul),
- },
-};
-
-static const GLuint g400_alpha_combine[][MGA_MAX_COMBFUNC] =
-{
- /* Unit 0:
- */
- {
- /* GL_REPLACE
- * Cv = Cf
- * Av = As
- */
- (TD0_color_arg2_diffuse |
- TD0_color_sel_arg2 |
- TD0_alpha_sel_arg1),
-
- /* GL_MODULATE
- * Cv = Cf
- * Av = Af As
- */
- (TD0_color_arg2_diffuse |
- TD0_color_sel_arg2 |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_mul),
-
- /* GL_DECAL (undefined)
- * Cv = Cf
- * Av = Af
- */
- (TD0_color_arg2_diffuse |
- TD0_color_sel_arg2 |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_arg2),
-
- /* GL_ADD
- * Cv = Cf
- * Av = Af As
- */
- (TD0_color_arg2_diffuse |
- TD0_color_sel_arg2 |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_mul),
- },
-
- /* Unit 1:
- */
- {
- /* GL_REPLACE
- * Cv = Cp
- * Av = As
- */
- (TD0_color_arg2_prevstage |
- TD0_color_sel_arg2 |
- TD0_alpha_sel_arg1),
-
- /* GL_MODULATE
- * Cv = Cp
- * Av = Ap As
- */
- (TD0_color_arg2_prevstage |
- TD0_color_sel_arg2 |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_mul),
-
- /* GL_DECAL (undefined)
- * Cv = Cp
- * Av = Ap
- */
- (TD0_color_arg2_prevstage |
- TD0_color_sel_arg2 |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2),
-
- /* GL_ADD
- * Cv = Cp
- * Av = Ap As
- */
- (TD0_color_arg2_prevstage |
- TD0_color_sel_arg2 |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_mul),
- },
-};
-
-static GLboolean mgaUpdateTextureEnvBlend( struct gl_context *ctx, int unit )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- const int source = mmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- const struct gl_texture_object *tObj = texUnit->_Current;
- GLuint *reg = ((GLuint *)&mmesa->setup.tdualstage0 + unit);
- GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
-
- *reg = 0;
-
- if (format == GL_ALPHA) {
- /* Cv = Cf */
- *reg |= (TD0_color_arg2_diffuse |
- TD0_color_sel_arg2);
- /* Av = Af As */
- *reg |= (TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_mul);
- return GL_TRUE;
- }
-
- /* C1 = Cf ( 1 - Cs ) */
- *reg |= (TD0_color_arg1_inv_enable |
- TD0_color_arg2_diffuse |
- TD0_color_sel_mul);
-
- if (format == GL_RGB || format == GL_LUMINANCE) {
- /* A1 = Af */
- *reg |= (TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_arg2);
- } else
- if (format == GL_RGBA || format == GL_LUMINANCE_ALPHA) {
- /* A1 = Af As */
- *reg |= (TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_mul);
- } else
- if (format == GL_INTENSITY) {
- /* A1 = Af ( 1 - As ) */
- *reg |= (TD0_alpha_arg1_inv_enable |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_sel_mul);
- }
-
- if (RGB_ZERO(mmesa->envcolor[source]) &&
- (format != GL_INTENSITY || ALPHA_ZERO(mmesa->envcolor[source])))
- return GL_TRUE; /* all done */
-
- if (ctx->Texture._EnabledUnits == 0x03)
- return GL_FALSE; /* need both units */
-
- mmesa->force_dualtex = GL_TRUE;
- reg = &mmesa->setup.tdualstage1;
- *reg = 0;
-
- if (RGB_ZERO(mmesa->envcolor[source])) {
- /* Cv = C1 */
- *reg |= (TD0_color_arg2_prevstage |
- TD0_color_sel_arg2);
- } else
- if (RGB_ONE(mmesa->envcolor[source])) {
- /* Cv = C1 + Cs */
- *reg |= (TD0_color_arg2_prevstage |
- TD0_color_add_add |
- TD0_color_sel_add);
- } else
- if (RGBA_EQUAL(mmesa->envcolor[source])) {
- /* Cv = C1 + Cc Cs */
- *reg |= (TD0_color_arg2_prevstage |
- TD0_color_alpha_fcol |
- TD0_color_arg2mul_alpha2 |
- TD0_color_arg1add_mulout |
- TD0_color_add_add |
- TD0_color_sel_add);
-
- mmesa->setup.fcol = mmesa->envcolor[source];
- } else {
- return GL_FALSE;
- }
-
- if (format != GL_INTENSITY || ALPHA_ZERO(mmesa->envcolor[source])) {
- /* Av = A1 */
- *reg |= (TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2);
- } else
- if (ALPHA_ONE(mmesa->envcolor[source])) {
- /* Av = A1 + As */
- *reg |= (TD0_alpha_arg2_prevstage |
- TD0_alpha_add_enable |
- TD0_alpha_sel_add);
- } else {
- return GL_FALSE;
- }
-
- return GL_TRUE;
-}
-
-static void mgaUpdateTextureEnvG400( struct gl_context *ctx, GLuint unit )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- const int source = mmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- const struct gl_texture_object *tObj = texUnit->_Current;
- GLuint *reg = ((GLuint *)&mmesa->setup.tdualstage0 + unit);
- mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;
- GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
-
- if (tObj != ctx->Texture.Unit[source].CurrentTex[TEXTURE_2D_INDEX] &&
- tObj != ctx->Texture.Unit[source].CurrentTex[TEXTURE_RECT_INDEX])
- return;
-
- switch (ctx->Texture.Unit[source].EnvMode) {
- case GL_REPLACE:
- if (format == GL_ALPHA) {
- *reg = g400_alpha_combine[unit][MGA_REPLACE];
- } else if (format == GL_RGB || format == GL_LUMINANCE) {
- *reg = g400_color_combine[unit][MGA_REPLACE];
- } else {
- *reg = g400_color_alpha_combine[unit][MGA_REPLACE];
- }
- break;
-
- case GL_MODULATE:
- if (format == GL_ALPHA) {
- *reg = g400_alpha_combine[unit][MGA_MODULATE];
- } else if (format == GL_RGB || format == GL_LUMINANCE) {
- *reg = g400_color_combine[unit][MGA_MODULATE];
- } else {
- *reg = g400_color_alpha_combine[unit][MGA_MODULATE];
- }
- break;
-
- case GL_DECAL:
- if (format == GL_RGB) {
- *reg = g400_color_combine[unit][MGA_DECAL];
- } else if (format == GL_RGBA) {
- *reg = g400_color_alpha_combine[unit][MGA_DECAL];
- if (ctx->Texture._EnabledUnits != 0x03) {
- /* Linear blending mode needs dual texturing enabled */
- *(reg+1) = (TD0_color_arg2_prevstage |
- TD0_color_sel_arg2 |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_sel_arg2);
- mmesa->force_dualtex = GL_TRUE;
- }
- } else {
- /* Undefined */
- *reg = g400_alpha_combine[unit][MGA_DECAL];
- }
- break;
-
- case GL_ADD:
- if (format == GL_ALPHA) {
- *reg = g400_alpha_combine[unit][MGA_ADD];
- } else if (format == GL_RGB || format == GL_LUMINANCE) {
- *reg = g400_color_combine[unit][MGA_ADD];
- } else if (format == GL_RGBA || format == GL_LUMINANCE_ALPHA) {
- *reg = g400_color_alpha_combine[unit][MGA_ADD];
- } else if (format == GL_INTENSITY) {
- /* Cv = Cf + Cs
- * Av = Af + As
- */
- if (unit == 0) {
- *reg = (TD0_color_arg2_diffuse |
- TD0_color_add_add |
- TD0_color_sel_add |
- TD0_alpha_arg2_diffuse |
- TD0_alpha_add_enable |
- TD0_alpha_sel_add);
- } else {
- *reg = (TD0_color_arg2_prevstage |
- TD0_color_add_add |
- TD0_color_sel_add |
- TD0_alpha_arg2_prevstage |
- TD0_alpha_add_enable |
- TD0_alpha_sel_add);
- }
- }
- break;
-
- case GL_BLEND:
- if (!mgaUpdateTextureEnvBlend(ctx, unit))
- t->texenv_fallback = GL_TRUE;
- break;
-
- case GL_COMBINE:
- if (!mgaUpdateTextureEnvCombine(ctx, unit))
- t->texenv_fallback = GL_TRUE;
- break;
- default:
- break;
- }
-}
-
-static void disable_tex( struct gl_context *ctx, int unit )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
-
- /* Texture unit disabled */
-
- if ( mmesa->CurrentTexObj[unit] != NULL ) {
- /* The old texture is no longer bound to this texture unit.
- * Mark it as such.
- */
-
- mmesa->CurrentTexObj[unit]->base.bound &= ~(1UL << unit);
- mmesa->CurrentTexObj[unit] = NULL;
- }
-
- if ( unit != 0 && !mmesa->force_dualtex ) {
- mmesa->setup.tdualstage1 = mmesa->setup.tdualstage0;
- }
-
- if ( ctx->Texture._EnabledUnits == 0 ) {
- mmesa->setup.dwgctl &= DC_opcod_MASK;
- mmesa->setup.dwgctl |= DC_opcod_trap;
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
- }
-
- mmesa->dirty |= MGA_UPLOAD_CONTEXT | (MGA_UPLOAD_TEX0 << unit);
-}
-
-static GLboolean enable_tex( struct gl_context *ctx, int unit )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- const int source = mmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- const struct gl_texture_object *tObj = texUnit->_Current;
- mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;
-
- /* Upload teximages (not pipelined)
- */
- if (t->base.dirty_images[0]) {
- FLUSH_BATCH( mmesa );
- mgaSetTexImages( mmesa, tObj );
- if ( t->base.memBlock == NULL ) {
- return GL_FALSE;
- }
- }
-
- return GL_TRUE;
-}
-
-static GLboolean update_tex_common( struct gl_context *ctx, int unit )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- const int source = mmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- struct gl_texture_object *tObj = texUnit->_Current;
- mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;
-
- /* Fallback if there's a texture border */
- if ( tObj->Image[0][tObj->BaseLevel]->Border > 0 ) {
- return GL_FALSE;
- }
-
-
- /* Update state if this is a different texture object to last
- * time.
- */
- if ( mmesa->CurrentTexObj[unit] != t ) {
- if ( mmesa->CurrentTexObj[unit] != NULL ) {
- /* The old texture is no longer bound to this texture unit.
- * Mark it as such.
- */
-
- mmesa->CurrentTexObj[unit]->base.bound &= ~(1UL << unit);
- }
-
- mmesa->CurrentTexObj[unit] = t;
- t->base.bound |= (1UL << unit);
-
- driUpdateTextureLRU( (driTextureObject *) t ); /* done too often */
- }
-
- /* register setup */
- if ( unit == 1 ) {
- mmesa->setup.tdualstage1 = mmesa->setup.tdualstage0;
- }
-
- t->texenv_fallback = GL_FALSE;
-
- /* Set this before mgaUpdateTextureEnvG400() since
- * GL_ARB_texture_env_crossbar may have to disable texturing.
- */
- mmesa->setup.dwgctl &= DC_opcod_MASK;
- mmesa->setup.dwgctl |= DC_opcod_texture_trap;
-
- /* FIXME: The Radeon has some cached state so that it can avoid calling
- * FIXME: UpdateTextureEnv in some cases. Is that possible here?
- */
- if (MGA_IS_G400(mmesa)) {
- /* G400: Regardless of texture env mode, we use the alpha from the
- * texture unit (AC_alphasel_fromtex) since it will have already
- * been modulated by the incoming fragment color, if needed.
- * We don't want (AC_alphasel_modulate) since that'll effectively
- * do the modulation twice.
- */
- mmesa->hw.alpha_sel = AC_alphasel_fromtex;
-
- mgaUpdateTextureEnvG400( ctx, unit );
- } else {
- mgaUpdateTextureEnvG200( ctx, unit );
- }
-
- t->setup.texctl2 &= TMC_dualtex_MASK;
- if (ctx->Texture._EnabledUnits == 0x03 || mmesa->force_dualtex) {
- t->setup.texctl2 |= TMC_dualtex_enable;
- }
-
- mmesa->dirty |= MGA_UPLOAD_CONTEXT | (MGA_UPLOAD_TEX0 << unit);
-
- FALLBACK( ctx, MGA_FALLBACK_BORDER_MODE, t->border_fallback );
- return !t->border_fallback && !t->texenv_fallback;
-}
-
-
-static GLboolean updateTextureUnit( struct gl_context *ctx, int unit )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- const int source = mmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
-
-
- if ( texUnit->_ReallyEnabled == TEXTURE_2D_BIT ||
- texUnit->_ReallyEnabled == TEXTURE_RECT_BIT ) {
- return(enable_tex( ctx, unit ) &&
- update_tex_common( ctx, unit ));
- }
- else if ( texUnit->_ReallyEnabled ) {
- return GL_FALSE;
- }
- else {
- disable_tex( ctx, unit );
- return GL_TRUE;
- }
-}
-
-/* The G400 is now programmed quite differently wrt texture environment.
- */
-void mgaUpdateTextureState( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- GLboolean ok;
- unsigned i;
-
- mmesa->force_dualtex = GL_FALSE;
- mmesa->fcol_used = GL_FALSE;
-
- /* This works around a quirk with the MGA hardware. If only OpenGL
- * TEXTURE1 is enabled, then the hardware TEXTURE0 must be used. The
- * hardware TEXTURE1 can ONLY be used when hardware TEXTURE0 is also used.
- */
-
- mmesa->tmu_source[0] = 0;
- mmesa->tmu_source[1] = 1;
-
- if ((ctx->Texture._EnabledUnits & 0x03) == 0x02) {
- /* only texture 1 enabled */
- mmesa->tmu_source[0] = 1;
- mmesa->tmu_source[1] = 0;
- }
-
- for ( i = 0, ok = GL_TRUE
- ; (i < ctx->Const.MaxTextureUnits) && ok
- ; i++ ) {
- ok = updateTextureUnit( ctx, i );
- }
-
- FALLBACK( ctx, MGA_FALLBACK_TEXTURE, !ok );
-}
diff --git a/src/mesa/drivers/dri/mga/mga_xmesa.c b/src/mesa/drivers/dri/mga/mga_xmesa.c
deleted file mode 100644
index 6ec99dbc3ba..00000000000
--- a/src/mesa/drivers/dri/mga/mga_xmesa.c
+++ /dev/null
@@ -1,1005 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- */
-
-/**
- * \file mga_xmesa.c
- * MGA screen and context initialization / creation code.
- *
- * \author Keith Whitwell
- */
-
-#include
-#include
-#include "drm.h"
-#include "mga_drm.h"
-#include "mga_xmesa.h"
-#include "main/context.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "vbo/vbo.h"
-
-#include "tnl/t_pipeline.h"
-
-#include "drivers/common/driverfuncs.h"
-
-#include "mgadd.h"
-#include "mgastate.h"
-#include "mgatex.h"
-#include "mgaspan.h"
-#include "mgaioctl.h"
-#include "mgatris.h"
-#include "mgavb.h"
-#include "mgapixel.h"
-#include "mga_dri.h"
-
-#include "utils.h"
-#include "vblank.h"
-
-#include "drirenderbuffer.h"
-
-#include "GL/internal/dri_interface.h"
-
-#define need_GL_ARB_vertex_array_object
-#define need_GL_ARB_vertex_program
-#define need_GL_EXT_fog_coord
-#define need_GL_EXT_gpu_program_parameters
-#define need_GL_EXT_secondary_color
-#if 0
-#define need_GL_EXT_paletted_texture
-#endif
-#define need_GL_APPLE_vertex_array_object
-#define need_GL_NV_vertex_program
-#include "main/remap_helper.h"
-
-/* MGA configuration
- */
-#include "xmlpool.h"
-
-PUBLIC const char __driConfigOptions[] =
-DRI_CONF_BEGIN
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_QUALITY
- DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
- DRI_CONF_COLOR_REDUCTION(DRI_CONF_COLOR_REDUCTION_DITHER)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_SOFTWARE
- DRI_CONF_ARB_VERTEX_PROGRAM(true)
- DRI_CONF_NV_VERTEX_PROGRAM(true)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_DEBUG
- DRI_CONF_NO_RAST(false)
- DRI_CONF_SECTION_END
-DRI_CONF_END;
-static const GLuint __driNConfigOptions = 6;
-
-#ifndef MGA_DEBUG
-int MGA_DEBUG = 0;
-#endif
-
-static const __DRIconfig **
-mgaFillInModes( __DRIscreen *psp,
- unsigned pixel_bits, unsigned depth_bits,
- unsigned stencil_bits, GLboolean have_back_buffer )
-{
- __DRIconfig **configs;
- struct gl_config * m;
- unsigned depth_buffer_factor;
- unsigned back_buffer_factor;
- GLenum fb_format;
- GLenum fb_type;
- int i;
-
- /* GLX_SWAP_COPY_OML is only supported because the MGA driver doesn't
- * support pageflipping at all.
- */
- static const GLenum back_buffer_modes[] = {
- GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
- };
-
- uint8_t depth_bits_array[3];
- uint8_t stencil_bits_array[3];
- uint8_t msaa_samples_array[1];
-
-
- depth_bits_array[0] = 0;
- depth_bits_array[1] = depth_bits;
- depth_bits_array[2] = depth_bits;
-
- /* Just like with the accumulation buffer, always provide some modes
- * with a stencil buffer. It will be a sw fallback, but some apps won't
- * care about that.
- */
- stencil_bits_array[0] = 0;
- stencil_bits_array[1] = 0;
- stencil_bits_array[2] = (stencil_bits == 0) ? 8 : stencil_bits;
-
- msaa_samples_array[0] = 0;
-
- depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 3 : 1;
- back_buffer_factor = (have_back_buffer) ? 2 : 1;
-
- if ( pixel_bits == 16 ) {
- fb_format = GL_RGB;
- fb_type = GL_UNSIGNED_SHORT_5_6_5;
- }
- else {
- fb_format = GL_BGR;
- fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- configs = driCreateConfigs(fb_format, fb_type,
- depth_bits_array, stencil_bits_array,
- depth_buffer_factor,
- back_buffer_modes, back_buffer_factor,
- msaa_samples_array, 1, GL_TRUE);
- if (configs == NULL) {
- fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
- __func__, __LINE__ );
- return NULL;
- }
-
- /* Mark the visual as slow if there are "fake" stencil bits.
- */
- for (i = 0; configs[i]; i++) {
- m = &configs[i]->modes;
- if ((m->stencilBits != 0) && (m->stencilBits != stencil_bits)) {
- m->visualRating = GLX_SLOW_CONFIG;
- }
- }
-
- return (const __DRIconfig **) configs;
-}
-
-const __DRIextension *mgaScreenExtensions[] = {
- &driReadDrawableExtension,
- &driSwapControlExtension.base,
- &driMediaStreamCounterExtension.base,
- NULL
-};
-
-static GLboolean
-mgaInitDriver(__DRIscreen *sPriv)
-{
- mgaScreenPrivate *mgaScreen;
- MGADRIPtr serverInfo = (MGADRIPtr)sPriv->pDevPriv;
-
- if (sPriv->devPrivSize != sizeof(MGADRIRec)) {
- fprintf(stderr,"\nERROR! sizeof(MGADRIRec) does not match passed size from device driver\n");
- return GL_FALSE;
- }
-
- /* Allocate the private area */
- mgaScreen = (mgaScreenPrivate *)MALLOC(sizeof(mgaScreenPrivate));
- if (!mgaScreen) {
- __driUtilMessage("Couldn't malloc screen struct");
- return GL_FALSE;
- }
-
- mgaScreen->sPriv = sPriv;
- sPriv->private = (void *)mgaScreen;
-
- if (sPriv->drm_version.minor >= 1) {
- int ret;
- drm_mga_getparam_t gp;
-
- gp.param = MGA_PARAM_IRQ_NR;
- gp.value = &mgaScreen->irq;
- mgaScreen->irq = 0;
-
- ret = drmCommandWriteRead( sPriv->fd, DRM_MGA_GETPARAM,
- &gp, sizeof(gp));
- if (ret) {
- fprintf(stderr, "drmMgaGetParam (MGA_PARAM_IRQ_NR): %d\n", ret);
- FREE(mgaScreen);
- sPriv->private = NULL;
- return GL_FALSE;
- }
- }
-
- sPriv->extensions = mgaScreenExtensions;
-
- if (serverInfo->chipset != MGA_CARD_TYPE_G200 &&
- serverInfo->chipset != MGA_CARD_TYPE_G400) {
- FREE(mgaScreen);
- sPriv->private = NULL;
- __driUtilMessage("Unrecognized chipset");
- return GL_FALSE;
- }
-
-
- mgaScreen->chipset = serverInfo->chipset;
- mgaScreen->cpp = serverInfo->cpp;
-
- mgaScreen->agpMode = serverInfo->agpMode;
-
- mgaScreen->frontPitch = serverInfo->frontPitch;
- mgaScreen->frontOffset = serverInfo->frontOffset;
- mgaScreen->backOffset = serverInfo->backOffset;
- mgaScreen->backPitch = serverInfo->backPitch;
- mgaScreen->depthOffset = serverInfo->depthOffset;
- mgaScreen->depthPitch = serverInfo->depthPitch;
-
-
- /* The only reason that the MMIO region needs to be accessable and the
- * primary DMA region base address needs to be known is so that the driver
- * can busy wait for certain DMA operations to complete (see
- * mgaWaitForFrameCompletion in mgaioctl.c).
- *
- * Starting with MGA DRM version 3.2, these are completely unneeded as
- * there is a new, in-kernel mechanism for handling the wait.
- */
-
- if (mgaScreen->sPriv->drm_version.minor < 2) {
- mgaScreen->mmio.handle = serverInfo->registers.handle;
- mgaScreen->mmio.size = serverInfo->registers.size;
- if ( drmMap( sPriv->fd,
- mgaScreen->mmio.handle, mgaScreen->mmio.size,
- &mgaScreen->mmio.map ) < 0 ) {
- FREE( mgaScreen );
- sPriv->private = NULL;
- __driUtilMessage( "Couldn't map MMIO registers" );
- return GL_FALSE;
- }
-
- mgaScreen->primary.handle = serverInfo->primary.handle;
- mgaScreen->primary.size = serverInfo->primary.size;
- }
- else {
- (void) memset( & mgaScreen->primary, 0, sizeof( mgaScreen->primary ) );
- (void) memset( & mgaScreen->mmio, 0, sizeof( mgaScreen->mmio ) );
- }
-
- mgaScreen->textureOffset[MGA_CARD_HEAP] = serverInfo->textureOffset;
- mgaScreen->textureOffset[MGA_AGP_HEAP] = (serverInfo->agpTextureOffset |
- PDEA_pagpxfer_enable | 1);
-
- mgaScreen->textureSize[MGA_CARD_HEAP] = serverInfo->textureSize;
- mgaScreen->textureSize[MGA_AGP_HEAP] = serverInfo->agpTextureSize;
-
-
- /* The texVirtual array stores the base addresses in the CPU's address
- * space of the texture memory pools. The base address of the on-card
- * memory pool is calculated as an offset of the base of video memory. The
- * AGP texture pool has to be mapped into the processes address space by
- * the DRM.
- */
-
- mgaScreen->texVirtual[MGA_CARD_HEAP] = (char *)(mgaScreen->sPriv->pFB +
- serverInfo->textureOffset);
-
- if ( serverInfo->agpTextureSize > 0 ) {
- if (drmMap(sPriv->fd, serverInfo->agpTextureOffset,
- serverInfo->agpTextureSize,
- (drmAddress *)&mgaScreen->texVirtual[MGA_AGP_HEAP]) != 0) {
- FREE(mgaScreen);
- sPriv->private = NULL;
- __driUtilMessage("Couldn't map agptexture region");
- return GL_FALSE;
- }
- }
-
-
- /* For calculating setupdma addresses.
- */
-
- mgaScreen->bufs = drmMapBufs(sPriv->fd);
- if (!mgaScreen->bufs) {
- FREE(mgaScreen);
- sPriv->private = NULL;
- __driUtilMessage("Couldn't map dma buffers");
- return GL_FALSE;
- }
- mgaScreen->sarea_priv_offset = serverInfo->sarea_priv_offset;
-
- /* parse information in __driConfigOptions */
- driParseOptionInfo (&mgaScreen->optionCache,
- __driConfigOptions, __driNConfigOptions);
-
- return GL_TRUE;
-}
-
-
-static void
-mgaDestroyScreen(__DRIscreen *sPriv)
-{
- mgaScreenPrivate *mgaScreen = (mgaScreenPrivate *) sPriv->private;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_DRI)
- fprintf(stderr, "mgaDestroyScreen\n");
-
- drmUnmapBufs(mgaScreen->bufs);
-
-
- /* free all option information */
- driDestroyOptionInfo (&mgaScreen->optionCache);
-
- FREE(mgaScreen);
- sPriv->private = NULL;
-}
-
-
-extern const struct tnl_pipeline_stage _mga_render_stage;
-
-static const struct tnl_pipeline_stage *mga_pipeline[] = {
- &_tnl_vertex_transform_stage,
- &_tnl_normal_transform_stage,
- &_tnl_lighting_stage,
- &_tnl_fog_coordinate_stage,
- &_tnl_texgen_stage,
- &_tnl_texture_transform_stage,
- &_tnl_vertex_program_stage,
-
- /* REMOVE: point attenuation stage */
-#if 0
- &_mga_render_stage, /* ADD: unclipped rastersetup-to-dma */
- /* Need new ioctl for wacceptseq */
-#endif
- &_tnl_render_stage,
- 0,
-};
-
-
-static const struct dri_extension g400_extensions[] =
-{
- { "GL_ARB_multitexture", NULL },
- { "GL_ARB_texture_env_add", NULL },
- { "GL_ARB_texture_env_combine", NULL },
- { "GL_ARB_texture_env_crossbar", NULL },
- { "GL_EXT_texture_env_combine", NULL },
- { "GL_EXT_texture_edge_clamp", NULL },
- { "GL_ATI_texture_env_combine3", NULL },
- { NULL, NULL }
-};
-
-static const struct dri_extension card_extensions[] =
-{
- { "GL_ARB_texture_rectangle", NULL },
- { "GL_ARB_vertex_array_object", GL_ARB_vertex_array_object_functions },
- { "GL_EXT_blend_logic_op", NULL },
- { "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
- /* paletted_textures currently doesn't work, but we could fix them later */
-#if defined( need_GL_EXT_paletted_texture )
- { "GL_EXT_shared_texture_palette", NULL },
- { "GL_EXT_paletted_texture", GL_EXT_paletted_texture_functions },
-#endif
- { "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
- { "GL_EXT_stencil_wrap", NULL },
- { "GL_APPLE_vertex_array_object", GL_APPLE_vertex_array_object_functions },
- { "GL_MESA_ycbcr_texture", NULL },
- { NULL, NULL }
-};
-
-static const struct dri_extension ARB_vp_extensions[] = {
- { "GL_ARB_vertex_program", GL_ARB_vertex_program_functions },
- { "GL_EXT_gpu_program_parameters", GL_EXT_gpu_program_parameters_functions },
- { NULL, NULL }
-};
-
-static const struct dri_extension NV_vp_extensions[] = {
- { "GL_NV_vertex_program", GL_NV_vertex_program_functions },
- { "GL_NV_vertex_program1_1", NULL },
- { NULL, NULL }
-};
-
-static const struct dri_debug_control debug_control[] =
-{
- { "fall", DEBUG_VERBOSE_FALLBACK },
- { "tex", DEBUG_VERBOSE_TEXTURE },
- { "ioctl", DEBUG_VERBOSE_IOCTL },
- { "verb", DEBUG_VERBOSE_MSG },
- { "dri", DEBUG_VERBOSE_DRI },
- { NULL, 0 }
-};
-
-
-static GLboolean
-mgaCreateContext( gl_api api,
- const struct gl_config *mesaVis,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate )
-{
- int i;
- unsigned maxlevels;
- struct gl_context *ctx, *shareCtx;
- mgaContextPtr mmesa;
- __DRIscreen *sPriv = driContextPriv->driScreenPriv;
- mgaScreenPrivate *mgaScreen = (mgaScreenPrivate *)sPriv->private;
- drm_mga_sarea_t *saPriv = (drm_mga_sarea_t *)(((char*)sPriv->pSAREA)+
- mgaScreen->sarea_priv_offset);
- struct dd_function_table functions;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_DRI)
- fprintf(stderr, "mgaCreateContext\n");
-
- /* allocate mga context */
- mmesa = (mgaContextPtr) CALLOC(sizeof(mgaContext));
- if (!mmesa) {
- return GL_FALSE;
- }
-
- /* Init default driver functions then plug in our Radeon-specific functions
- * (the texture functions are especially important)
- */
- _mesa_init_driver_functions( &functions );
- mgaInitDriverFuncs( &functions );
- mgaInitTextureFuncs( &functions );
- mgaInitIoctlFuncs( &functions );
-
- /* Allocate the Mesa context */
- if (sharedContextPrivate)
- shareCtx = ((mgaContextPtr) sharedContextPrivate)->glCtx;
- else
- shareCtx = NULL;
- mmesa->glCtx = _mesa_create_context(API_OPENGL, mesaVis, shareCtx,
- &functions, (void *) mmesa);
- if (!mmesa->glCtx) {
- FREE(mmesa);
- return GL_FALSE;
- }
- driContextPriv->driverPrivate = mmesa;
-
- /* Init mga state */
- mmesa->hHWContext = driContextPriv->hHWContext;
- mmesa->driFd = sPriv->fd;
- mmesa->driHwLock = &sPriv->pSAREA->lock;
-
- mmesa->mgaScreen = mgaScreen;
- mmesa->driScreen = sPriv;
- mmesa->sarea = (void *)saPriv;
-
- /* Parse configuration files */
- driParseConfigFiles (&mmesa->optionCache, &mgaScreen->optionCache,
- sPriv->myNum, "mga");
-
- (void) memset( mmesa->texture_heaps, 0, sizeof( mmesa->texture_heaps ) );
- make_empty_list( & mmesa->swapped );
-
- mmesa->nr_heaps = mgaScreen->texVirtual[MGA_AGP_HEAP] ? 2 : 1;
- for ( i = 0 ; i < mmesa->nr_heaps ; i++ ) {
- mmesa->texture_heaps[i] = driCreateTextureHeap( i, mmesa,
- mgaScreen->textureSize[i],
- 6,
- MGA_NR_TEX_REGIONS,
- (drmTextureRegionPtr)mmesa->sarea->texList[i],
- &mmesa->sarea->texAge[i],
- &mmesa->swapped,
- sizeof( mgaTextureObject_t ),
- (destroy_texture_object_t *) mgaDestroyTexObj );
- }
-
- /* Set the maximum texture size small enough that we can guarentee
- * that both texture units can bind a maximal texture and have them
- * on the card at once.
- */
- ctx = mmesa->glCtx;
- if ( mgaScreen->chipset == MGA_CARD_TYPE_G200 ) {
- ctx->Const.MaxTextureUnits = 1;
- ctx->Const.MaxTextureImageUnits = 1;
- ctx->Const.MaxTextureCoordUnits = 1;
- maxlevels = G200_TEX_MAXLEVELS;
-
- }
- else {
- ctx->Const.MaxTextureUnits = 2;
- ctx->Const.MaxTextureImageUnits = 2;
- ctx->Const.MaxTextureCoordUnits = 2;
- maxlevels = G400_TEX_MAXLEVELS;
- }
-
- driCalculateMaxTextureLevels( mmesa->texture_heaps,
- mmesa->nr_heaps,
- & ctx->Const,
- 4,
- 11, /* max 2D texture size is 2048x2048 */
- 0, /* 3D textures unsupported. */
- 0, /* cube textures unsupported. */
- 11, /* max texture rect size is 2048x2048 */
- maxlevels,
- GL_FALSE,
- 0 );
-
- ctx->Const.MinLineWidth = 1.0;
- ctx->Const.MinLineWidthAA = 1.0;
- ctx->Const.MaxLineWidth = 10.0;
- ctx->Const.MaxLineWidthAA = 10.0;
- ctx->Const.LineWidthGranularity = 1.0;
-
- ctx->Const.MaxDrawBuffers = 1;
-
- mmesa->texture_depth = driQueryOptioni (&mmesa->optionCache,
- "texture_depth");
- if (mmesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_FB)
- mmesa->texture_depth = ( mesaVis->rgbBits >= 24 ) ?
- DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
- mmesa->hw_stencil = mesaVis->stencilBits && mesaVis->depthBits == 24;
-
- switch (mesaVis->depthBits) {
- case 16:
- mmesa->depth_scale = 1.0/(GLdouble)0xffff;
- mmesa->depth_clear_mask = ~0;
- mmesa->ClearDepth = 0xffff;
- break;
- case 24:
- mmesa->depth_scale = 1.0/(GLdouble)0xffffff;
- if (mmesa->hw_stencil) {
- mmesa->depth_clear_mask = 0xffffff00;
- mmesa->stencil_clear_mask = 0x000000ff;
- } else
- mmesa->depth_clear_mask = ~0;
- mmesa->ClearDepth = 0xffffff00;
- break;
- case 32:
- mmesa->depth_scale = 1.0/(GLdouble)0xffffffff;
- mmesa->depth_clear_mask = ~0;
- mmesa->ClearDepth = 0xffffffff;
- break;
- };
-
- mmesa->haveHwStipple = GL_FALSE;
- mmesa->RenderIndex = -1; /* impossible value */
- mmesa->dirty = ~0;
- mmesa->vertex_format = 0;
- mmesa->CurrentTexObj[0] = 0;
- mmesa->CurrentTexObj[1] = 0;
- mmesa->tmu_source[0] = 0;
- mmesa->tmu_source[1] = 1;
-
- mmesa->texAge[0] = 0;
- mmesa->texAge[1] = 0;
-
- /* Initialize the software rasterizer and helper modules.
- */
- _swrast_CreateContext( ctx );
- _vbo_CreateContext( ctx );
- _tnl_CreateContext( ctx );
-
- _swsetup_CreateContext( ctx );
-
- /* Install the customized pipeline:
- */
- _tnl_destroy_pipeline( ctx );
- _tnl_install_pipeline( ctx, mga_pipeline );
-
- /* Configure swrast and T&L to match hardware characteristics:
- */
- _swrast_allow_pixel_fog( ctx, GL_FALSE );
- _swrast_allow_vertex_fog( ctx, GL_TRUE );
- _tnl_allow_pixel_fog( ctx, GL_FALSE );
- _tnl_allow_vertex_fog( ctx, GL_TRUE );
-
- mmesa->primary_offset = mmesa->mgaScreen->primary.handle;
-
- ctx->DriverCtx = (void *) mmesa;
- mmesa->glCtx = ctx;
-
- driInitExtensions( ctx, card_extensions, GL_FALSE );
-
- if (MGA_IS_G400(MGA_CONTEXT(ctx))) {
- driInitExtensions( ctx, g400_extensions, GL_FALSE );
- }
-
- if ( driQueryOptionb( &mmesa->optionCache, "arb_vertex_program" ) ) {
- driInitExtensions(ctx, ARB_vp_extensions, GL_FALSE);
- }
-
- if ( driQueryOptionb( &mmesa->optionCache, "nv_vertex_program" ) ) {
- driInitExtensions( ctx, NV_vp_extensions, GL_FALSE );
- }
-
-
- /* XXX these should really go right after _mesa_init_driver_functions() */
- mgaDDInitStateFuncs( ctx );
- mgaDDInitSpanFuncs( ctx );
- mgaDDInitPixelFuncs( ctx );
- mgaDDInitTriFuncs( ctx );
-
- mgaInitVB( ctx );
- mgaInitState( mmesa );
-
- driContextPriv->driverPrivate = (void *) mmesa;
-
-#if DO_DEBUG
- MGA_DEBUG = driParseDebugString( getenv( "MGA_DEBUG" ),
- debug_control );
-#endif
-
- (*sPriv->systemTime->getUST)( & mmesa->swap_ust );
-
- if (driQueryOptionb(&mmesa->optionCache, "no_rast")) {
- fprintf(stderr, "disabling 3D acceleration\n");
- FALLBACK(mmesa->glCtx, MGA_FALLBACK_DISABLE, 1);
- }
-
- return GL_TRUE;
-}
-
-static void
-mgaDestroyContext(__DRIcontext *driContextPriv)
-{
- mgaContextPtr mmesa = (mgaContextPtr) driContextPriv->driverPrivate;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_DRI)
- fprintf( stderr, "[%s:%d] mgaDestroyContext start\n",
- __FILE__, __LINE__ );
-
- assert(mmesa); /* should never be null */
- if (mmesa) {
- GLboolean release_texture_heaps;
-
-
- release_texture_heaps = (mmesa->glCtx->Shared->RefCount == 1);
- _swsetup_DestroyContext( mmesa->glCtx );
- _tnl_DestroyContext( mmesa->glCtx );
- _vbo_DestroyContext( mmesa->glCtx );
- _swrast_DestroyContext( mmesa->glCtx );
-
- mgaFreeVB( mmesa->glCtx );
-
- /* free the Mesa context */
- mmesa->glCtx->DriverCtx = NULL;
- _mesa_destroy_context(mmesa->glCtx);
-
- if ( release_texture_heaps ) {
- /* This share group is about to go away, free our private
- * texture object data.
- */
- int i;
-
- for ( i = 0 ; i < mmesa->nr_heaps ; i++ ) {
- driDestroyTextureHeap( mmesa->texture_heaps[ i ] );
- mmesa->texture_heaps[ i ] = NULL;
- }
-
- assert( is_empty_list( & mmesa->swapped ) );
- }
-
- /* free the option cache */
- driDestroyOptionCache (&mmesa->optionCache);
-
- FREE(mmesa);
- }
-
- if (MGA_DEBUG&DEBUG_VERBOSE_DRI)
- fprintf( stderr, "[%s:%d] mgaDestroyContext done\n",
- __FILE__, __LINE__ );
-}
-
-
-static GLboolean
-mgaCreateBuffer( __DRIscreen *driScrnPriv,
- __DRIdrawable *driDrawPriv,
- const struct gl_config *mesaVis,
- GLboolean isPixmap )
-{
- mgaScreenPrivate *screen = (mgaScreenPrivate *) driScrnPriv->private;
-
- if (isPixmap) {
- return GL_FALSE; /* not implemented */
- }
- else {
- GLboolean swStencil = (mesaVis->stencilBits > 0 &&
- mesaVis->depthBits != 24);
-
-#if 0
- driDrawPriv->driverPrivate = (void *)
- _mesa_create_framebuffer(mesaVis,
- GL_FALSE, /* software depth buffer? */
- swStencil,
- mesaVis->accumRedBits > 0,
- mesaVis->alphaBits > 0 );
-#else
- struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
-
- {
- driRenderbuffer *frontRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- NULL,
- screen->cpp,
- screen->frontOffset, screen->frontPitch,
- driDrawPriv);
- mgaSetSpanFunctions(frontRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
- }
-
- if (mesaVis->doubleBufferMode) {
- driRenderbuffer *backRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- NULL,
- screen->cpp,
- screen->backOffset, screen->backPitch,
- driDrawPriv);
- mgaSetSpanFunctions(backRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
- }
-
- if (mesaVis->depthBits == 16) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z16,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- mgaSetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
- else if (mesaVis->depthBits == 24) {
- /* XXX is this right? */
- if (mesaVis->stencilBits) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z24_S8,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- mgaSetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
- else {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z32,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- mgaSetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
- }
- else if (mesaVis->depthBits == 32) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z32,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- mgaSetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
-
- if (mesaVis->stencilBits > 0 && !swStencil) {
- driRenderbuffer *stencilRb
- = driNewRenderbuffer(MESA_FORMAT_S8,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- mgaSetSpanFunctions(stencilRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base);
- }
-
- _mesa_add_soft_renderbuffers(fb,
- GL_FALSE, /* color */
- GL_FALSE, /* depth */
- swStencil,
- mesaVis->accumRedBits > 0,
- GL_FALSE, /* alpha */
- GL_FALSE /* aux */);
- driDrawPriv->driverPrivate = (void *) fb;
-#endif
-
- return (driDrawPriv->driverPrivate != NULL);
- }
-}
-
-
-static void
-mgaDestroyBuffer(__DRIdrawable *driDrawPriv)
-{
- _mesa_reference_framebuffer((struct gl_framebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-static void
-mgaSwapBuffers(__DRIdrawable *dPriv)
-{
- if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
- mgaContextPtr mmesa;
- struct gl_context *ctx;
- mmesa = (mgaContextPtr) dPriv->driContextPriv->driverPrivate;
- ctx = mmesa->glCtx;
-
- if (ctx->Visual.doubleBufferMode) {
- _mesa_notifySwapBuffers( ctx );
- mgaCopyBuffer( dPriv );
- }
- } else {
- /* XXX this shouldn't be an error but we can't handle it for now */
- _mesa_problem(NULL, "%s: drawable has no context!\n", __FUNCTION__);
- }
-}
-
-static GLboolean
-mgaUnbindContext(__DRIcontext *driContextPriv)
-{
- mgaContextPtr mmesa = (mgaContextPtr) driContextPriv->driverPrivate;
- if (mmesa)
- mmesa->dirty = ~0;
-
- return GL_TRUE;
-}
-
-/* This looks buggy to me - the 'b' variable isn't used anywhere...
- * Hmm - It seems that the drawable is already hooked in to
- * driDrawablePriv.
- *
- * But why are we doing context initialization here???
- */
-static GLboolean
-mgaMakeCurrent(__DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv)
-{
- if (driContextPriv) {
- mgaContextPtr mmesa = (mgaContextPtr) driContextPriv->driverPrivate;
-
- if (mmesa->driDrawable != driDrawPriv) {
- if (driDrawPriv->swap_interval == (unsigned)-1) {
- driDrawPriv->vblFlags = (mmesa->mgaScreen->irq == 0)
- ? VBLANK_FLAG_NO_IRQ
- : driGetDefaultVBlankFlags(&mmesa->optionCache);
-
- driDrawableInitVBlank( driDrawPriv );
- }
-
- mmesa->driDrawable = driDrawPriv;
- mmesa->dirty = ~0;
- mmesa->dirty_cliprects = (MGA_FRONT|MGA_BACK);
- }
-
- mmesa->driReadable = driReadPriv;
-
- _mesa_make_current(mmesa->glCtx,
- (struct gl_framebuffer *) driDrawPriv->driverPrivate,
- (struct gl_framebuffer *) driReadPriv->driverPrivate);
- }
- else {
- _mesa_make_current(NULL, NULL, NULL);
- }
-
- return GL_TRUE;
-}
-
-
-void mgaGetLock( mgaContextPtr mmesa, GLuint flags )
-{
- __DRIdrawable *dPriv = mmesa->driDrawable;
- drm_mga_sarea_t *sarea = mmesa->sarea;
- int me = mmesa->hHWContext;
- int i;
-
- drmGetLock(mmesa->driFd, mmesa->hHWContext, flags);
-
- DRI_VALIDATE_DRAWABLE_INFO( mmesa->driScreen, dPriv );
- if (*(dPriv->pStamp) != mmesa->lastStamp) {
- mmesa->lastStamp = *(dPriv->pStamp);
- mmesa->SetupNewInputs |= VERT_BIT_POS;
- mmesa->dirty_cliprects = (MGA_FRONT|MGA_BACK);
- mgaUpdateRects( mmesa, (MGA_FRONT|MGA_BACK) );
- driUpdateFramebufferSize(mmesa->glCtx, dPriv);
- }
-
- mmesa->dirty |= MGA_UPLOAD_CONTEXT | MGA_UPLOAD_CLIPRECTS;
-
- mmesa->sarea->dirty |= MGA_UPLOAD_CONTEXT;
-
- if (sarea->ctxOwner != me) {
- mmesa->dirty |= (MGA_UPLOAD_CONTEXT | MGA_UPLOAD_TEX0 |
- MGA_UPLOAD_TEX1 | MGA_UPLOAD_PIPE);
- sarea->ctxOwner=me;
- }
-
- for ( i = 0 ; i < mmesa->nr_heaps ; i++ ) {
- DRI_AGE_TEXTURES( mmesa->texture_heaps[ i ] );
- }
-}
-
-
-/**
- * This is the driver specific part of the createNewScreen entry point.
- *
- * \todo maybe fold this into intelInitDriver
- *
- * \return the struct gl_config supported by this driver
- */
-static const __DRIconfig **mgaInitScreen(__DRIscreen *psp)
-{
- static const __DRIversion ddx_expected = { 1, 2, 0 };
- static const __DRIversion dri_expected = { 4, 0, 0 };
- static const __DRIversion drm_expected = { 3, 0, 0 };
- MGADRIPtr dri_priv = (MGADRIPtr) psp->pDevPriv;
-
- if ( ! driCheckDriDdxDrmVersions2( "MGA",
- &psp->dri_version, & dri_expected,
- &psp->ddx_version, & ddx_expected,
- &psp->drm_version, & drm_expected ) )
- return NULL;
-
-
- if (!mgaInitDriver(psp))
- return NULL;
-
- return mgaFillInModes( psp,
- dri_priv->cpp * 8,
- (dri_priv->cpp == 2) ? 16 : 24,
- (dri_priv->cpp == 2) ? 0 : 8,
- (dri_priv->backOffset != dri_priv->depthOffset) );
-}
-
-
-/**
- * Get information about previous buffer swaps.
- */
-static int
-getSwapInfo( __DRIdrawable *dPriv, __DRIswapInfo * sInfo )
-{
- mgaContextPtr mmesa;
-
- if ( (dPriv == NULL) || (dPriv->driContextPriv == NULL)
- || (dPriv->driContextPriv->driverPrivate == NULL)
- || (sInfo == NULL) ) {
- return -1;
- }
-
- mmesa = (mgaContextPtr) dPriv->driContextPriv->driverPrivate;
- sInfo->swap_count = mmesa->swap_count;
- sInfo->swap_ust = mmesa->swap_ust;
- sInfo->swap_missed_count = mmesa->swap_missed_count;
-
- sInfo->swap_missed_usage = (sInfo->swap_missed_count != 0)
- ? driCalculateSwapUsage( dPriv, 0, mmesa->swap_missed_ust )
- : 0.0;
-
- return 0;
-}
-
-const struct __DriverAPIRec driDriverAPI = {
- .InitScreen = mgaInitScreen,
- .DestroyScreen = mgaDestroyScreen,
- .CreateContext = mgaCreateContext,
- .DestroyContext = mgaDestroyContext,
- .CreateBuffer = mgaCreateBuffer,
- .DestroyBuffer = mgaDestroyBuffer,
- .SwapBuffers = mgaSwapBuffers,
- .MakeCurrent = mgaMakeCurrent,
- .UnbindContext = mgaUnbindContext,
- .GetSwapInfo = getSwapInfo,
- .GetDrawableMSC = driDrawableGetMSC32,
- .WaitForMSC = driWaitForMSC32,
- .WaitForSBC = NULL,
- .SwapBuffersMSC = NULL
-};
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
- &driCoreExtension.base,
- &driLegacyExtension.base,
- NULL
-};
diff --git a/src/mesa/drivers/dri/mga/mga_xmesa.h b/src/mesa/drivers/dri/mga/mga_xmesa.h
deleted file mode 100644
index aee146090c0..00000000000
--- a/src/mesa/drivers/dri/mga/mga_xmesa.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef _MGA_INIT_H_
-#define _MGA_INIT_H_
-
-#include
-#include "dri_util.h"
-#include "mga_drm.h"
-#include "main/mtypes.h"
-#include "mgaregs.h"
-#include "xmlconfig.h"
-
-typedef struct mga_screen_private_s {
- /**
- * Chipset "family" of this card. Currently only \c MGA_CARD_TYPE_G200 and
- * \c MGA_CARD_TYPE_G400 are possible.
- */
- int chipset;
-
-
- /**
- * Characters (bytes) per-pixel for both the front and back buffers.
- *
- * \note
- * This is also implicitly the bytes per-pixel for the depth-buffer.
- */
- int cpp;
-
- GLint agpMode;
- unsigned int irq; /**< IRQ number (0 means none) */
-
- unsigned int frontOffset;
- unsigned int frontPitch;
- unsigned int backOffset;
- unsigned int backPitch;
-
- unsigned int depthOffset;
- unsigned int depthPitch;
-
- unsigned int textureOffset[MGA_NR_TEX_HEAPS];
- unsigned int textureSize[MGA_NR_TEX_HEAPS];
- char *texVirtual[MGA_NR_TEX_HEAPS];
-
-
- __DRIscreen *sPriv;
- drmBufMapPtr bufs;
-
- drmRegion mmio;
- drmRegion primary;
- unsigned int sarea_priv_offset;
-
- /** Configuration cache with default values for all contexts */
- driOptionCache optionCache;
-} mgaScreenPrivate;
-
-
-/**
- * mgaRenderbuffer, derived from Mesa's gl_renderbuffer
- */
-typedef struct {
- struct gl_renderbuffer Base;
- /* XXX per-window info should go here */
- int foo, bar;
-} mgaRenderbuffer;
-
-
-
-#include "mgacontext.h"
-
-extern void mgaGetLock( mgaContextPtr mmesa, GLuint flags );
-extern void mgaEmitHwStateLocked( mgaContextPtr mmesa );
-extern void mgaEmitScissorValues( mgaContextPtr mmesa, int box_nr, int emit );
-
-#define GET_DISPATCH_AGE( mmesa ) mmesa->sarea->last_dispatch
-
-
-
-/* Lock the hardware and validate our state.
- */
-#define LOCK_HARDWARE( mmesa ) \
- do { \
- char __ret=0; \
- DRM_CAS(mmesa->driHwLock, mmesa->hHWContext, \
- (DRM_LOCK_HELD|mmesa->hHWContext), __ret); \
- if (__ret) \
- mgaGetLock( mmesa, 0 ); \
- } while (0)
-
-
-/*
- */
-#define LOCK_HARDWARE_QUIESCENT( mmesa ) do { \
- LOCK_HARDWARE( mmesa ); \
- UPDATE_LOCK( mmesa, DRM_LOCK_QUIESCENT | DRM_LOCK_FLUSH ); \
-} while (0)
-
-
-/* Unlock the hardware using the global current context
- */
-#define UNLOCK_HARDWARE(mmesa) \
- DRM_UNLOCK(mmesa->driFd, mmesa->driHwLock, mmesa->hHWContext);
-
-
-/* Freshen our snapshot of the drawables
- */
-#define REFRESH_DRAWABLE_INFO( mmesa ) \
-do { \
- LOCK_HARDWARE( mmesa ); \
- mmesa->lastX = mmesa->drawX; \
- mmesa->lastY = mmesa->drawY; \
- UNLOCK_HARDWARE( mmesa ); \
-} while (0)
-
-
-#define GET_DRAWABLE_LOCK( mmesa ) while(0)
-#define RELEASE_DRAWABLE_LOCK( mmesa ) while(0)
-
-
-/* The 2D driver macros are busted -- we can't use them here as they
- * rely on the 2D driver data structures rather than taking an explicit
- * base address.
- */
-#define MGA_BASE( reg ) ((unsigned long)(mmesa->mgaScreen->mmio.map))
-#define MGA_ADDR( reg ) (MGA_BASE(reg) + reg)
-
-#define MGA_DEREF( reg ) *(volatile uint32_t *)MGA_ADDR( reg )
-#define MGA_READ( reg ) MGA_DEREF( reg )
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgacontext.h b/src/mesa/drivers/dri/mga/mgacontext.h
deleted file mode 100644
index b1fbb3c45d6..00000000000
--- a/src/mesa/drivers/dri/mga/mgacontext.h
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef MGALIB_INC
-#define MGALIB_INC
-
-#include
-#include "drm.h"
-#include "mga_drm.h"
-#include "dri_util.h"
-#include "xf86drm.h"
-#include "main/mtypes.h"
-#include "main/mm.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-#include "texmem.h"
-#include "xmlconfig.h"
-
-#define MGA_SET_FIELD(reg,mask,val) reg = ((reg) & (mask)) | ((val) & ~(mask))
-#define MGA_FIELD(field,val) (((val) << (field ## _SHIFT)) & ~(field ## _MASK))
-#define MGA_GET_FIELD(field, val) ((val & ~(field ## _MASK)) >> (field ## _SHIFT))
-
-#define MGA_IS_G200(mmesa) (mmesa->mgaScreen->chipset == MGA_CARD_TYPE_G200)
-#define MGA_IS_G400(mmesa) (mmesa->mgaScreen->chipset == MGA_CARD_TYPE_G400)
-
-
-/* SoftwareFallback
- * - texture env GL_BLEND -- can be fixed
- * - 1D and 3D textures
- * - incomplete textures
- * - GL_DEPTH_FUNC == GL_NEVER not in h/w
- */
-#define MGA_FALLBACK_TEXTURE 0x1
-#define MGA_FALLBACK_DRAW_BUFFER 0x2
-#define MGA_FALLBACK_READ_BUFFER 0x4
-#define MGA_FALLBACK_BLEND 0x8
-#define MGA_FALLBACK_RENDERMODE 0x10
-#define MGA_FALLBACK_STENCIL 0x20
-#define MGA_FALLBACK_DEPTH 0x40
-#define MGA_FALLBACK_BORDER_MODE 0x80
-#define MGA_FALLBACK_DISABLE 0x100
-
-
-/* Use the templated vertex formats:
- */
-#define TAG(x) mga##x
-#include "tnl_dd/t_dd_vertex.h"
-#undef TAG
-
-typedef struct mga_context_t mgaContext;
-typedef struct mga_context_t *mgaContextPtr;
-
-typedef void (*mga_tri_func)( mgaContextPtr, mgaVertex *, mgaVertex *,
- mgaVertex * );
-typedef void (*mga_line_func)( mgaContextPtr, mgaVertex *, mgaVertex * );
-typedef void (*mga_point_func)( mgaContextPtr, mgaVertex * );
-
-
-
-/* Texture environment color
- */
-#define RGB_ZERO(c) (((c) & 0xffffff) == 0x000000)
-#define RGB_ONE(c) (((c) & 0xffffff) == 0xffffff)
-#define ALPHA_ZERO(c) (((c) >> 24) == 0x00)
-#define ALPHA_ONE(c) (((c) >> 24) == 0xff)
-#define RGBA_EQUAL(c) ((c) == PACK_COLOR_8888( (c) & 0xff, (c) & 0xff, \
- (c) & 0xff, (c) & 0xff ))
-
-struct mga_texture_object_s;
-struct mga_screen_private_s;
-
-#define G200_TEX_MAXLEVELS 5
-#define G400_TEX_MAXLEVELS 11
-
-typedef struct mga_texture_object_s
-{
- driTextureObject base;
-
- /* The G200 only has the ability to use 5 mipmap levels (including the
- * base level). The G400 does not have this restriction, but it still
- * only has 5 offset pointers in the hardware. The trick on the G400 is
- * upto the first 4 offset pointers point to mipmap levels. The last
- * offset pointer tells how large the preceeding mipmap is. This value is
- * then used to determine where the remaining mipmaps are.
- *
- * For example, if the first offsets[0] through offsets[2] are used as
- * pointers, then offset[3] will be the size of the mipmap pointed to by
- * offsets[2]. So mipmap level 3 will be at (offsets[2]+offsets[3]). For
- * each successive mipmap level, offsets[3] is divided by 4 and added to
- * the previous address. So mipmap level 4 will be at
- * (offsets[2]+offsets[3]+(offsets[3] / 4)).
- *
- * The last pointer is selected by setting TO_texorgoffsetsel in its
- * pointer. In the previous example, offset[2] would have
- * TO_texorgoffsetsel or'ed in before writing it to the hardware.
- *
- * In the current driver all of the mipmaps are packed together linearly
- * with mipmap level 0. Therefore offsets[0] points to the base of the
- * texture (and has TO_texorgoffsetsel or'ed in), and offsets[1] is the
- * size of the base texture.
- *
- * There is a possible optimization available here. At times the driver
- * may not be able to allocate a single block of memory for the complete
- * texture without ejecting some other textures from memory. It may be
- * possible to put some of the lower mipmap levels (i.e., the larger
- * mipmaps) in memory separate from the higher levels.
- *
- * The implementation should be fairly obvious, but getting "right" would
- * likely be non-trivial. A first allocation for the entire texture would
- * be attempted with a flag that says "don't eject other textures." If
- * that failed, an additional allocation would be attmpted for just the
- * base map. The process would repeat with the block of lower maps. The
- * tricky parts would be in detecting when some of the levels had been
- * ejected from texture memory by other textures and preventing the
- * 4th allocation (for all the smallest mipmap levels) from kicking out
- * any of the first three.
- *
- * This array holds G400_TEX_MAXLEVELS pointers to remove an if-statement
- * in a loop in mgaSetTexImages. Values past G200_TEX_MAXLEVELS are not
- * used.
- */
- GLuint offsets[G400_TEX_MAXLEVELS];
-
- int texelBytes;
- GLuint age;
-
- drm_mga_texture_regs_t setup;
-
- /* If one texture dimension wraps with GL_CLAMP and the other with
- * GL_CLAMP_TO_EDGE, we have to fallback to software. We would also have
- * to fallback for GL_CLAMP_TO_BORDER.
- */
- GLboolean border_fallback;
- /* Depending on multitxturing and environment color
- * GL_BLEND may have to be a software fallback.
- */
- GLboolean texenv_fallback;
-} mgaTextureObject_t;
-
-struct mga_hw_state {
- GLuint specen;
- GLuint cull;
- GLuint cull_dualtex;
- GLuint stencil;
- GLuint stencilctl;
- GLuint stencil_enable;
- GLuint zmode;
- GLuint rop;
- GLuint alpha_func;
- GLuint alpha_func_enable;
- GLuint blend_func;
- GLuint blend_func_enable;
- GLuint alpha_sel;
-};
-
-struct mga_context_t {
-
- struct gl_context *glCtx;
- unsigned int lastStamp; /* fullscreen breaks dpriv->laststamp,
- * need to shadow it here. */
-
- /* Hardware state management
- */
- struct mga_hw_state hw;
-
- /* Bookkeeping for texturing
- */
- unsigned nr_heaps;
- driTexHeap * texture_heaps[ MGA_NR_TEX_HEAPS ];
- driTextureObject swapped;
-
- struct mga_texture_object_s *CurrentTexObj[2];
-
-
- /* Map GL texture units onto hardware.
- */
- GLuint tmu_source[2];
-
- int texture_depth;
-
- /* Manage fallbacks
- */
- GLuint Fallback;
-
- /* Texture environment color.
- */
- unsigned int envcolor[2];
- GLboolean fcol_used;
- GLboolean force_dualtex;
-
- /* Rasterization state
- */
- GLuint SetupNewInputs;
- GLuint SetupIndex;
- GLuint RenderIndex;
-
- GLuint hw_primitive;
- GLenum raster_primitive;
- GLenum render_primitive;
-
- GLubyte *verts;
- GLint vertex_stride_shift;
- GLuint vertex_format;
- GLuint vertex_size;
-
- /* Fallback rasterization functions
- */
- mga_point_func draw_point;
- mga_line_func draw_line;
- mga_tri_func draw_tri;
-
-
- /* Manage driver and hardware state
- */
- GLuint NewGLState;
- GLuint dirty;
-
- drm_mga_context_regs_t setup;
-
- GLuint ClearColor;
- GLuint ClearDepth;
- GLuint poly_stipple;
- GLfloat depth_scale;
-
- GLuint depth_clear_mask;
- GLuint stencil_clear_mask;
- GLuint hw_stencil;
- GLuint haveHwStipple;
- GLfloat hw_viewport[16];
-
- /* Dma buffers
- */
- drmBufPtr vertex_dma_buffer;
- drmBufPtr iload_buffer;
-
- int64_t swap_ust;
- int64_t swap_missed_ust;
-
- GLuint swap_count;
- GLuint swap_missed_count;
-
- uint32_t last_frame_fence;
-
- /* Drawable, cliprect and scissor information
- */
- int dirty_cliprects; /* which sets of cliprects are uptodate? */
- int draw_buffer; /* which buffer are we rendering to */
- unsigned int drawOffset; /* draw buffer address in space */
- int readOffset;
- int drawX, drawY; /* origin of drawable in draw buffer */
- int lastX, lastY; /* detect DSTORG bug */
- GLuint numClipRects; /* cliprects for the draw buffer */
- drm_clip_rect_t *pClipRects;
- drm_clip_rect_t draw_rect;
- drm_clip_rect_t scissor_rect;
- int scissor;
-
- drm_clip_rect_t tmp_boxes[2][MGA_NR_SAREA_CLIPRECTS];
-
-
- /* Texture aging and DMA based aging.
- */
- unsigned int texAge[MGA_NR_TEX_HEAPS];/* texture LRU age */
- unsigned int dirtyAge; /* buffer age for synchronization */
-
- GLuint primary_offset;
-
- /* Mirrors of some DRI state.
- */
- drm_context_t hHWContext;
- drm_hw_lock_t *driHwLock;
- int driFd;
- __DRIdrawable *driDrawable;
- __DRIdrawable *driReadable;
-
- __DRIscreen *driScreen;
- struct mga_screen_private_s *mgaScreen;
- drm_mga_sarea_t *sarea;
-
- /* Configuration cache
- */
- driOptionCache optionCache;
-};
-
-#define MGA_CONTEXT(ctx) ((mgaContextPtr)(ctx->DriverCtx))
-
-
-
-
-/* ================================================================
- * Debugging:
- */
-#define DO_DEBUG 1
-
-#if DO_DEBUG
-extern int MGA_DEBUG;
-#else
-#define MGA_DEBUG 0
-#endif
-
-#define DEBUG_VERBOSE_MSG 0x01
-#define DEBUG_VERBOSE_DRI 0x02
-#define DEBUG_VERBOSE_IOCTL 0x04
-#define DEBUG_VERBOSE_TEXTURE 0x08
-#define DEBUG_VERBOSE_FALLBACK 0x10
-
-static INLINE GLuint mgaPackColor(GLuint cpp,
- GLubyte r, GLubyte g,
- GLubyte b, GLubyte a)
-{
- switch (cpp) {
- case 2:
- return PACK_COLOR_565( r, g, b );
- case 4:
- return PACK_COLOR_8888( a, r, g, b );
- default:
- return 0;
- }
-}
-
-
-/*
- * Subpixel offsets for window coordinates:
- */
-#define SUBPIXEL_X (-0.5F)
-#define SUBPIXEL_Y (-0.5F + 0.125)
-
-
-#define MGA_WA_TRIANGLES 0x18000000
-#define MGA_WA_TRISTRIP_T0 0x02010200
-#define MGA_WA_TRIFAN_T0 0x01000408
-#define MGA_WA_TRISTRIP_T0T1 0x02010400
-#define MGA_WA_TRIFAN_T0T1 0x01000810
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgadd.c b/src/mesa/drivers/dri/mga/mgadd.c
deleted file mode 100644
index 2e3e9f2c43c..00000000000
--- a/src/mesa/drivers/dri/mga/mgadd.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-
-#include "main/mtypes.h"
-#include "main/framebuffer.h"
-#include "main/mm.h"
-
-#include "mgacontext.h"
-#include "mgadd.h"
-#include "mga_xmesa.h"
-#include "utils.h"
-
-/***************************************
- * Mesa's Driver Functions
- ***************************************/
-
-
-static const GLubyte *mgaGetString( struct gl_context *ctx, GLenum name )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- static char buffer[128];
- unsigned offset;
-
- switch ( name ) {
- case GL_VENDOR:
- return (GLubyte *) "VA Linux Systems Inc.";
-
- case GL_RENDERER:
- offset = driGetRendererString( buffer,
- MGA_IS_G400(mmesa) ? "G400" :
- MGA_IS_G200(mmesa) ? "G200" : "MGA",
- mmesa->mgaScreen->agpMode );
-
- return (GLubyte *)buffer;
-
- default:
- return NULL;
- }
-}
-
-
-void mgaInitDriverFuncs( struct dd_function_table *functions )
-{
- functions->GetString = mgaGetString;
-}
diff --git a/src/mesa/drivers/dri/mga/mgadd.h b/src/mesa/drivers/dri/mga/mgadd.h
deleted file mode 100644
index f92591df459..00000000000
--- a/src/mesa/drivers/dri/mga/mgadd.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef MGADD_INC
-#define MGADD_INC
-
-#include "main/context.h"
-
-extern void mgaInitDriverFuncs( struct dd_function_table *functions );
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgaioctl.c b/src/mesa/drivers/dri/mga/mgaioctl.c
deleted file mode 100644
index a54d86a178d..00000000000
--- a/src/mesa/drivers/dri/mga/mgaioctl.c
+++ /dev/null
@@ -1,747 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- */
-
-/**
- * \file mgaioctl.c
- * MGA IOCTL related wrapper functions.
- *
- * \author Keith Whitwell
- * \author Gareth Hughes
- */
-
-#include
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "main/dd.h"
-#include "swrast/swrast.h"
-
-#include "main/mm.h"
-#include "drm.h"
-#include "mga_drm.h"
-#include "mgacontext.h"
-#include "mgadd.h"
-#include "mgastate.h"
-#include "mgaioctl.h"
-
-#include "vblank.h"
-
-
-static int
-mgaSetFence( mgaContextPtr mmesa, uint32_t * fence )
-{
- int ret = ENOSYS;
-
- if ( mmesa->driScreen->drm_version.minor >= 2 ) {
- ret = drmCommandWriteRead( mmesa->driScreen->fd, DRM_MGA_SET_FENCE,
- fence, sizeof( uint32_t ));
- if (ret) {
- fprintf(stderr, "drmMgaSetFence: %d\n", ret);
- exit(1);
- }
- }
-
- return ret;
-}
-
-
-static int
-mgaWaitFence( mgaContextPtr mmesa, uint32_t fence, uint32_t * curr_fence )
-{
- int ret = ENOSYS;
-
- if ( mmesa->driScreen->drm_version.minor >= 2 ) {
- uint32_t temp = fence;
-
- ret = drmCommandWriteRead( mmesa->driScreen->fd,
- DRM_MGA_WAIT_FENCE,
- & temp, sizeof( uint32_t ));
- if (ret) {
- fprintf(stderr, "drmMgaSetFence: %d\n", ret);
- exit(1);
- }
-
- if ( curr_fence ) {
- *curr_fence = temp;
- }
- }
-
- return ret;
-}
-
-
-static void mga_iload_dma_ioctl(mgaContextPtr mmesa,
- unsigned long dest,
- int length)
-{
- drmBufPtr buf = mmesa->iload_buffer;
- drm_mga_iload_t iload;
- int ret, i;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "DRM_IOCTL_MGA_ILOAD idx %d dst %x length %d\n",
- buf->idx, (int) dest, length);
-
- if ( (length & MGA_ILOAD_MASK) != 0 ) {
- UNLOCK_HARDWARE( mmesa );
- fprintf( stderr, "%s: Invalid ILOAD datasize (%d), must be "
- "multiple of %u.\n", __FUNCTION__, length, MGA_ILOAD_ALIGN );
- exit( 1 );
- }
-
- iload.idx = buf->idx;
- iload.dstorg = dest;
- iload.length = length;
-
- i = 0;
- do {
- ret = drmCommandWrite( mmesa->driFd, DRM_MGA_ILOAD,
- &iload, sizeof(iload) );
- } while ( ret == -EBUSY && i++ < DRM_MGA_IDLE_RETRY );
-
- if ( ret < 0 ) {
- printf("send iload retcode = %d\n", ret);
- exit(1);
- }
-
- mmesa->iload_buffer = 0;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "finished iload dma put\n");
-
-}
-
-drmBufPtr mga_get_buffer_ioctl( mgaContextPtr mmesa )
-{
- int idx = 0;
- int size = 0;
- drmDMAReq dma;
- int retcode;
- drmBufPtr buf;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "Getting dma buffer\n");
-
- dma.context = mmesa->hHWContext;
- dma.send_count = 0;
- dma.send_list = NULL;
- dma.send_sizes = NULL;
- dma.flags = 0;
- dma.request_count = 1;
- dma.request_size = MGA_BUFFER_SIZE;
- dma.request_list = &idx;
- dma.request_sizes = &size;
- dma.granted_count = 0;
-
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "drmDMA (get) ctx %d count %d size 0x%x\n",
- dma.context, dma.request_count,
- dma.request_size);
-
- while (1) {
- retcode = drmDMA(mmesa->driFd, &dma);
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "retcode %d sz %d idx %d count %d\n",
- retcode,
- dma.request_sizes[0],
- dma.request_list[0],
- dma.granted_count);
-
- if (retcode == 0 &&
- dma.request_sizes[0] &&
- dma.granted_count)
- break;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "\n\nflush");
-
- UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT );
- }
-
- buf = &(mmesa->mgaScreen->bufs->list[idx]);
- buf->used = 0;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr,
- "drmDMA (get) returns size[0] 0x%x idx[0] %d\n"
- "dma_buffer now: buf idx: %d size: %d used: %d addr %p\n",
- dma.request_sizes[0], dma.request_list[0],
- buf->idx, buf->total,
- buf->used, buf->address);
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "finished getbuffer\n");
-
- return buf;
-}
-
-
-
-
-static void
-mgaClear( struct gl_context *ctx, GLbitfield mask )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- __DRIdrawable *dPriv = mmesa->driDrawable;
- GLuint flags = 0;
- GLuint clear_color = mmesa->ClearColor;
- GLuint clear_depth = 0;
- GLuint color_mask = 0;
- GLuint depth_mask = 0;
- int ret;
- int i;
- static int nrclears;
- drm_mga_clear_t clear;
- GLint cx, cy, cw, ch;
-
- FLUSH_BATCH( mmesa );
-
- if ( mask & BUFFER_BIT_FRONT_LEFT ) {
- flags |= MGA_FRONT;
- color_mask = mmesa->setup.plnwt;
- mask &= ~BUFFER_BIT_FRONT_LEFT;
- }
-
- if ( mask & BUFFER_BIT_BACK_LEFT ) {
- flags |= MGA_BACK;
- color_mask = mmesa->setup.plnwt;
- mask &= ~BUFFER_BIT_BACK_LEFT;
- }
-
- if ( (mask & BUFFER_BIT_DEPTH) && ctx->Depth.Mask ) {
- flags |= MGA_DEPTH;
- clear_depth = (mmesa->ClearDepth & mmesa->depth_clear_mask);
- depth_mask |= mmesa->depth_clear_mask;
- mask &= ~BUFFER_BIT_DEPTH;
- }
-
- if ( (mask & BUFFER_BIT_STENCIL) && mmesa->hw_stencil ) {
- flags |= MGA_DEPTH;
- clear_depth |= (ctx->Stencil.Clear & mmesa->stencil_clear_mask);
- depth_mask |= mmesa->stencil_clear_mask;
- mask &= ~BUFFER_BIT_STENCIL;
- }
-
- if ( flags ) {
- LOCK_HARDWARE( mmesa );
-
- /* compute region after locking: */
- cx = ctx->DrawBuffer->_Xmin;
- cy = ctx->DrawBuffer->_Ymin;
- cw = ctx->DrawBuffer->_Xmax - cx;
- ch = ctx->DrawBuffer->_Ymax - cy;
-
- if ( mmesa->dirty_cliprects )
- mgaUpdateRects( mmesa, (MGA_FRONT | MGA_BACK) );
-
- /* flip top to bottom */
- cy = dPriv->h-cy-ch;
- cx += mmesa->drawX;
- cy += mmesa->drawY;
-
- if ( MGA_DEBUG & DEBUG_VERBOSE_IOCTL )
- fprintf( stderr, "Clear, bufs %x nbox %d\n",
- (int)flags, (int)mmesa->numClipRects );
-
- for (i = 0 ; i < mmesa->numClipRects ; )
- {
- int nr = MIN2(i + MGA_NR_SAREA_CLIPRECTS, mmesa->numClipRects);
- drm_clip_rect_t *box = mmesa->pClipRects;
- drm_clip_rect_t *b = mmesa->sarea->boxes;
- int n = 0;
-
- if (cw != dPriv->w || ch != dPriv->h) {
- /* clear subregion */
- for ( ; i < nr ; i++) {
- GLint x = box[i].x1;
- GLint y = box[i].y1;
- GLint w = box[i].x2 - x;
- GLint h = box[i].y2 - y;
-
- if (x < cx) w -= cx - x, x = cx;
- if (y < cy) h -= cy - y, y = cy;
- if (x + w > cx + cw) w = cx + cw - x;
- if (y + h > cy + ch) h = cy + ch - y;
- if (w <= 0) continue;
- if (h <= 0) continue;
-
- b->x1 = x;
- b->y1 = y;
- b->x2 = x + w;
- b->y2 = y + h;
- b++;
- n++;
- }
- } else {
- /* clear whole window */
- for ( ; i < nr ; i++) {
- *b++ = box[i];
- n++;
- }
- }
-
-
- if ( MGA_DEBUG & DEBUG_VERBOSE_IOCTL )
- fprintf( stderr,
- "DRM_IOCTL_MGA_CLEAR flag 0x%x color %x depth %x nbox %d\n",
- flags, clear_color, clear_depth, mmesa->sarea->nbox );
-
- mmesa->sarea->nbox = n;
-
- clear.flags = flags;
- clear.clear_color = clear_color;
- clear.clear_depth = clear_depth;
- clear.color_mask = color_mask;
- clear.depth_mask = depth_mask;
- ret = drmCommandWrite( mmesa->driFd, DRM_MGA_CLEAR,
- &clear, sizeof(clear));
- if ( ret ) {
- fprintf( stderr, "send clear retcode = %d\n", ret );
- exit( 1 );
- }
- if ( MGA_DEBUG & DEBUG_VERBOSE_IOCTL )
- fprintf( stderr, "finished clear %d\n", ++nrclears );
- }
-
- UNLOCK_HARDWARE( mmesa );
- mmesa->dirty |= MGA_UPLOAD_CLIPRECTS|MGA_UPLOAD_CONTEXT;
- }
-
- if (mask)
- _swrast_Clear( ctx, mask );
-}
-
-
-/**
- * Wait for the previous frame of rendering has completed.
- *
- * \param mmesa Hardware context pointer.
- *
- * \bug
- * The loop in this function should have some sort of a timeout mechanism.
- *
- * \warning
- * This routine used to assume that the hardware lock was held on entry. It
- * now assumes that the lock is \b not held on entry.
- */
-
-static void mgaWaitForFrameCompletion( mgaContextPtr mmesa )
-{
- if ( mgaWaitFence( mmesa, mmesa->last_frame_fence, NULL ) == ENOSYS ) {
- unsigned wait = 0;
- GLuint last_frame;
- GLuint last_wrap;
-
-
- LOCK_HARDWARE( mmesa );
- last_frame = mmesa->sarea->last_frame.head;
- last_wrap = mmesa->sarea->last_frame.wrap;
-
- /* The DMA routines in the kernel track a couple values in the SAREA
- * that we use here. The number of times that the primary DMA buffer
- * has "wrapped" around is tracked in last_wrap. In addition, the
- * wrap count and the buffer position at the end of the last frame are
- * stored in last_frame.wrap and last_frame.head.
- *
- * By comparing the wrap counts and the current DMA pointer value
- * (read directly from the hardware) to last_frame.head, we can
- * determine when the graphics processor has processed all of the
- * commands for the last frame.
- *
- * In this case "last frame" means the frame of the *previous* swap-
- * buffers call. This is done to prevent queuing a second buffer swap
- * before the previous swap is executed.
- */
- while ( 1 ) {
- if ( last_wrap < mmesa->sarea->last_wrap ||
- ( last_wrap == mmesa->sarea->last_wrap &&
- last_frame <= (MGA_READ( MGAREG_PRIMADDRESS ) -
- mmesa->primary_offset) ) ) {
- break;
- }
- if ( 0 ) {
- wait++;
- fprintf( stderr, " last: head=0x%06x wrap=%d\n",
- last_frame, last_wrap );
- fprintf( stderr, " head: head=0x%06lx wrap=%d\n",
- (long)(MGA_READ( MGAREG_PRIMADDRESS ) - mmesa->primary_offset),
- mmesa->sarea->last_wrap );
- }
- UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH );
-
- UNLOCK_HARDWARE( mmesa );
- DO_USLEEP( 1 );
- LOCK_HARDWARE( mmesa );
- }
- if ( wait )
- fprintf( stderr, "\n" );
-
- UNLOCK_HARDWARE( mmesa );
- }
-}
-
-
-/*
- * Copy the back buffer to the front buffer.
- */
-void mgaCopyBuffer( __DRIdrawable *dPriv )
-{
- mgaContextPtr mmesa;
- drm_clip_rect_t *pbox;
- GLint nbox;
- GLint ret;
- GLint i;
- GLboolean missed_target;
- __DRIscreen *psp = dPriv->driScreenPriv;
-
- assert(dPriv);
- assert(dPriv->driContextPriv);
- assert(dPriv->driContextPriv->driverPrivate);
-
- mmesa = (mgaContextPtr) dPriv->driContextPriv->driverPrivate;
-
- FLUSH_BATCH( mmesa );
-
- mgaWaitForFrameCompletion( mmesa );
- driWaitForVBlank( dPriv, & missed_target );
- if ( missed_target ) {
- mmesa->swap_missed_count++;
- (void) (*psp->systemTime->getUST)( & mmesa->swap_missed_ust );
- }
- LOCK_HARDWARE( mmesa );
-
- /* Use the frontbuffer cliprects
- */
- if (mmesa->dirty_cliprects & MGA_FRONT)
- mgaUpdateRects( mmesa, MGA_FRONT );
-
-
- pbox = dPriv->pClipRects;
- nbox = dPriv->numClipRects;
-
- for (i = 0 ; i < nbox ; )
- {
- int nr = MIN2(i + MGA_NR_SAREA_CLIPRECTS, dPriv->numClipRects);
- drm_clip_rect_t *b = mmesa->sarea->boxes;
-
- mmesa->sarea->nbox = nr - i;
-
- for ( ; i < nr ; i++)
- *b++ = pbox[i];
-
- if (0)
- fprintf(stderr, "DRM_IOCTL_MGA_SWAP\n");
-
- ret = drmCommandNone( mmesa->driFd, DRM_MGA_SWAP );
- if ( ret ) {
- printf("send swap retcode = %d\n", ret);
- exit(1);
- }
- }
-
- (void) mgaSetFence( mmesa, & mmesa->last_frame_fence );
- UNLOCK_HARDWARE( mmesa );
-
- mmesa->dirty |= MGA_UPLOAD_CLIPRECTS;
- mmesa->swap_count++;
- (void) (*psp->systemTime->getUST)( & mmesa->swap_ust );
-}
-
-
-/**
- * Implement the hardware-specific portion of \c glFinish.
- *
- * Flushes all pending commands to the hardware and wait for them to finish.
- *
- * \param ctx Context where the \c glFinish command was issued.
- *
- * \sa glFinish, mgaFlush, mgaFlushDMA
- */
-static void mgaFinish( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- uint32_t fence;
-
-
- LOCK_HARDWARE( mmesa );
- if ( mmesa->vertex_dma_buffer != NULL ) {
- mgaFlushVerticesLocked( mmesa );
- }
-
- if ( mgaSetFence( mmesa, & fence ) == 0 ) {
- UNLOCK_HARDWARE( mmesa );
- (void) mgaWaitFence( mmesa, fence, NULL );
- }
- else {
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL) {
- fprintf(stderr, "mgaRegetLockQuiescent\n");
- }
-
- UPDATE_LOCK( mmesa, DRM_LOCK_QUIESCENT | DRM_LOCK_FLUSH );
- UNLOCK_HARDWARE( mmesa );
- }
-}
-
-
-/**
- * Flush all commands upto at least a certain point to the hardware.
- *
- * \note
- * The term "wait" in the name of this function is misleading. It doesn't
- * actually wait for anything. It just makes sure that the commands have
- * been flushed to the hardware.
- *
- * \warning
- * As the name implies, this function assumes that the hardware lock is
- * held on entry.
- */
-void mgaWaitAgeLocked( mgaContextPtr mmesa, int age )
-{
- if (GET_DISPATCH_AGE(mmesa) < age) {
- UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH );
- }
-}
-
-
-static GLboolean intersect_rect( drm_clip_rect_t *out,
- const drm_clip_rect_t *a,
- const drm_clip_rect_t *b )
-{
- *out = *a;
- if (b->x1 > out->x1) out->x1 = b->x1;
- if (b->y1 > out->y1) out->y1 = b->y1;
- if (b->x2 < out->x2) out->x2 = b->x2;
- if (b->y2 < out->y2) out->y2 = b->y2;
-
- return ((out->x1 < out->x2) && (out->y1 < out->y2));
-}
-
-
-
-
-static void age_mmesa( mgaContextPtr mmesa, int age )
-{
- if (mmesa->CurrentTexObj[0]) mmesa->CurrentTexObj[0]->age = age;
- if (mmesa->CurrentTexObj[1]) mmesa->CurrentTexObj[1]->age = age;
-}
-
-
-void mgaFlushVerticesLocked( mgaContextPtr mmesa )
-{
- drm_clip_rect_t *pbox = mmesa->pClipRects;
- int nbox = mmesa->numClipRects;
- drmBufPtr buffer = mmesa->vertex_dma_buffer;
- drm_mga_vertex_t vertex;
- int i;
-
- mmesa->vertex_dma_buffer = 0;
-
- if (!buffer)
- return;
-
- if (mmesa->dirty_cliprects & mmesa->draw_buffer)
- mgaUpdateRects( mmesa, mmesa->draw_buffer );
-
- if (mmesa->dirty & ~MGA_UPLOAD_CLIPRECTS)
- mgaEmitHwStateLocked( mmesa );
-
- /* FIXME: Workaround bug in kernel module.
- */
- mmesa->sarea->dirty |= MGA_UPLOAD_CONTEXT;
-
- if (!nbox)
- buffer->used = 0;
-
- if (nbox >= MGA_NR_SAREA_CLIPRECTS)
- mmesa->dirty |= MGA_UPLOAD_CLIPRECTS;
-
-#if 0
- if (!buffer->used || !(mmesa->dirty & MGA_UPLOAD_CLIPRECTS))
- {
- if (nbox == 1)
- mmesa->sarea->nbox = 0;
- else
- mmesa->sarea->nbox = nbox;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "Firing vertex -- case a nbox %d\n", nbox);
-
- vertex.idx = buffer->idx;
- vertex.used = buffer->used;
- vertex.discard = 1;
- drmCommandWrite( mmesa->driFd, DRM_MGA_VERTEX,
- &vertex, sizeof(drmMGAVertex) );
-
- age_mmesa(mmesa, mmesa->sarea->last_enqueue);
- }
- else
-#endif
- {
- for (i = 0 ; i < nbox ; )
- {
- int nr = MIN2(i + MGA_NR_SAREA_CLIPRECTS, nbox);
- drm_clip_rect_t *b = mmesa->sarea->boxes;
- int discard = 0;
-
- if (mmesa->scissor) {
- mmesa->sarea->nbox = 0;
-
- for ( ; i < nr ; i++) {
- *b = pbox[i];
- if (intersect_rect(b, b, &mmesa->scissor_rect)) {
- mmesa->sarea->nbox++;
- b++;
- }
- }
-
- /* Culled?
- */
- if (!mmesa->sarea->nbox) {
- if (nr < nbox) continue;
- buffer->used = 0;
- }
- } else {
- mmesa->sarea->nbox = nr - i;
- for ( ; i < nr ; i++)
- *b++ = pbox[i];
- }
-
- /* Finished with the buffer?
- */
- if (nr == nbox)
- discard = 1;
-
- mmesa->sarea->dirty |= MGA_UPLOAD_CLIPRECTS;
-
- vertex.idx = buffer->idx;
- vertex.used = buffer->used;
- vertex.discard = discard;
- drmCommandWrite( mmesa->driFd, DRM_MGA_VERTEX,
- &vertex, sizeof(vertex) );
-
- age_mmesa(mmesa, mmesa->sarea->last_enqueue);
- }
- }
-
- mmesa->dirty &= ~MGA_UPLOAD_CLIPRECTS;
-}
-
-void mgaFlushVertices( mgaContextPtr mmesa )
-{
- LOCK_HARDWARE( mmesa );
- mgaFlushVerticesLocked( mmesa );
- UNLOCK_HARDWARE( mmesa );
-}
-
-
-void mgaFireILoadLocked( mgaContextPtr mmesa,
- GLuint offset, GLuint length )
-{
- if (!mmesa->iload_buffer) {
- fprintf(stderr, "mgaFireILoad: no buffer\n");
- return;
- }
-
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "mgaFireILoad idx %d ofs 0x%x length %d\n",
- mmesa->iload_buffer->idx, (int)offset, (int)length );
-
- mga_iload_dma_ioctl( mmesa, offset, length );
-}
-
-void mgaGetILoadBufferLocked( mgaContextPtr mmesa )
-{
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL)
- fprintf(stderr, "mgaGetIloadBuffer (buffer now %p)\n",
- (void *) mmesa->iload_buffer);
-
- mmesa->iload_buffer = mga_get_buffer_ioctl( mmesa );
-}
-
-
-/**
- * Implement the hardware-specific portion of \c glFlush.
- *
- * \param ctx Context to be flushed.
- *
- * \sa glFlush, mgaFinish, mgaFlushDMA
- */
-static void mgaFlush( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
-
-
- LOCK_HARDWARE( mmesa );
- if ( mmesa->vertex_dma_buffer != NULL ) {
- mgaFlushVerticesLocked( mmesa );
- }
-
- UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH );
- UNLOCK_HARDWARE( mmesa );
-}
-
-
-int mgaFlushDMA( int fd, drmLockFlags flags )
-{
- drm_lock_t lock;
- int ret, i = 0;
-
- memset( &lock, 0, sizeof(lock) );
-
- lock.flags = flags & (DRM_LOCK_QUIESCENT | DRM_LOCK_FLUSH
- | DRM_LOCK_FLUSH_ALL);
-
- do {
- ret = drmCommandWrite( fd, DRM_MGA_FLUSH, &lock, sizeof(lock) );
- } while ( ret && errno == EBUSY && i++ < DRM_MGA_IDLE_RETRY );
-
- if ( ret == 0 )
- return 0;
- if ( errno != EBUSY )
- return -errno;
-
- if ( lock.flags & DRM_LOCK_QUIESCENT ) {
- /* Only keep trying if we need quiescence.
- */
- lock.flags &= ~(DRM_LOCK_FLUSH | DRM_LOCK_FLUSH_ALL);
-
- do {
- ret = drmCommandWrite( fd, DRM_MGA_FLUSH, &lock, sizeof(lock) );
- } while ( ret && errno == EBUSY && i++ < DRM_MGA_IDLE_RETRY );
- }
-
- if ( ret == 0 ) {
- return 0;
- } else {
- return -errno;
- }
-}
-
-void mgaInitIoctlFuncs( struct dd_function_table *functions )
-{
- functions->Clear = mgaClear;
- functions->Flush = mgaFlush;
- functions->Finish = mgaFinish;
-}
diff --git a/src/mesa/drivers/dri/mga/mgaioctl.h b/src/mesa/drivers/dri/mga/mgaioctl.h
deleted file mode 100644
index 7a8660d2035..00000000000
--- a/src/mesa/drivers/dri/mga/mgaioctl.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- * Gareth Hughes
- */
-
-#ifndef MGA_IOCTL_H
-#define MGA_IOCTL_H
-
-#include "mgacontext.h"
-#include "mga_xmesa.h"
-
-void mgaCopyBuffer( __DRIdrawable *dPriv );
-void mgaWaitForVBlank( mgaContextPtr mmesa );
-
-void mgaGetILoadBufferLocked( mgaContextPtr mmesa );
-void mgaFireILoadLocked( mgaContextPtr mmesa,
- GLuint offset, GLuint length );
-
-void mgaWaitAgeLocked( mgaContextPtr mmesa, int age );
-
-void mgaFlushVertices( mgaContextPtr mmesa );
-void mgaFlushVerticesLocked( mgaContextPtr mmesa );
-int mgaFlushDMA( int fd, drmLockFlags flags );
-
-void mgaInitIoctlFuncs( struct dd_function_table *functions );
-
-#define FLUSH_BATCH(mmesa) do { \
- if (MGA_DEBUG&DEBUG_VERBOSE_IOCTL) \
- fprintf(stderr, "FLUSH_BATCH in %s\n", __FUNCTION__); \
- if (mmesa->vertex_dma_buffer) mgaFlushVertices(mmesa); \
-} while (0)
-
-#define MGA_STATECHANGE(mmesa, flag) do { \
- FLUSH_BATCH(mmesa); \
- mmesa->dirty |= flag; \
-} while (0)
-
-
-extern drmBufPtr mga_get_buffer_ioctl( mgaContextPtr mmesa );
-
-static INLINE
-GLuint *mgaAllocDmaLow( mgaContextPtr mmesa, int bytes )
-{
- GLuint *head;
-
- /* If there is no DMA buffer currently allocated or the currently
- * allocated DMA buffer doesn't have enough room left for this request,
- * a new buffer will need to be allocated.
- */
- if ( (mmesa->vertex_dma_buffer == NULL)
- || ((mmesa->vertex_dma_buffer->used + bytes)
- > mmesa->vertex_dma_buffer->total) ) {
- LOCK_HARDWARE( mmesa );
-
- /* In the case where the existing buffer does not have enough room,
- * we need to flush it out to the hardware.
- */
- if ( mmesa->vertex_dma_buffer != NULL ) {
- mgaFlushVerticesLocked( mmesa );
- }
-
- mmesa->vertex_dma_buffer = mga_get_buffer_ioctl( mmesa );
- UNLOCK_HARDWARE( mmesa );
- }
-
- head = (GLuint *)((char *)mmesa->vertex_dma_buffer->address +
- mmesa->vertex_dma_buffer->used);
-
- mmesa->vertex_dma_buffer->used += bytes;
- return head;
-}
-
-
-#define UPDATE_LOCK( mmesa, flags ) \
-do { \
- GLint ret = mgaFlushDMA( mmesa->driFd, flags ); \
- if ( ret < 0 ) { \
- drmCommandNone( mmesa->driFd, DRM_MGA_RESET ); \
- UNLOCK_HARDWARE( mmesa ); \
- fprintf( stderr, "%s: flush return = %s (%d), flags = 0x%08x\n", \
- __FUNCTION__, strerror( -ret ), -ret, \
- (unsigned)(flags) ); \
- exit( 1 ); \
- } \
-} while (0)
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgapixel.c b/src/mesa/drivers/dri/mga/mgapixel.c
deleted file mode 100644
index b8e365c714c..00000000000
--- a/src/mesa/drivers/dri/mga/mgapixel.c
+++ /dev/null
@@ -1,649 +0,0 @@
-/*
- * Copyright 2000 Compaq Computer Inc. and VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- */
-
-/**
- * \file mgapixel.c
- * Implement framebuffer pixel operations for MGA.
- *
- * \todo
- * Someday the accelerated \c glReadPixels and \c glDrawPixels paths need to
- * be resurrected. They are currently ifdef'ed out because they don't seem
- * to work and they only get activated some very rare circumstances.
- *
- * \author Keith Whitwell
- * \author Gareth Hughes
- */
-
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "mgadd.h"
-#include "mgacontext.h"
-#include "mgaioctl.h"
-#include "mgapixel.h"
-#include "mgastate.h"
-
-#include "swrast/swrast.h"
-#include "main/imports.h"
-
-#if 0
-#define IS_AGP_MEM( mmesa, p ) \
- ((unsigned long)mmesa->mgaScreen->buffers.map <= ((unsigned long)p) && \
- (unsigned long)mmesa->mgaScreen->buffers.map + \
- (unsigned long)mmesa->mgaScreen->buffers.size > ((unsigned long)p))
-#define AGP_OFFSET( mmesa, p ) \
- (((unsigned long)p) - (unsigned long)mmesa->mgaScreen->buffers.map)
-
-
-static GLboolean
-check_depth_stencil_24_8( const struct gl_context *ctx, GLenum type,
- const struct gl_pixelstore_attrib *packing,
- const void *pixels, GLint sz,
- GLint pitch )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- return ( type == GL_UNSIGNED_INT_24_8 &&
- ctx->Visual->DepthBits == 24 &&
- ctx->Visual->StencilBits == 8 &&
- mmesa->mgaScreen->cpp == 4 &&
- mmesa->hw_stencil &&
- !ctx->Pixel.IndexShift &&
- !ctx->Pixel.IndexOffset &&
- !ctx->Pixel.MapStencilFlag &&
- ctx->Pixel.DepthBias == 0.0 &&
- ctx->Pixel.DepthScale == 1.0 &&
- !packing->SwapBytes &&
- pitch % 32 == 0 &&
- pitch < 4096 );
-}
-
-
-static GLboolean
-check_depth( const struct gl_context *ctx, GLenum type,
- const struct gl_pixelstore_attrib *packing,
- const void *pixels, GLint sz, GLint pitch )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- if ( IS_AGP_MEM( mmesa, pixels ) &&
- !( ( type == GL_UNSIGNED_INT && mmesa->mgaScreen->cpp == 4 ) ||
- ( type == GL_UNSIGNED_SHORT && mmesa->mgaScreen->cpp == 2 ) ) )
- return GL_FALSE;
-
- return ( ctx->Pixel.DepthBias == 0.0 &&
- ctx->Pixel.DepthScale == 1.0 &&
- !packing->SwapBytes &&
- pitch % 32 == 0 &&
- pitch < 4096 );
-}
-
-
-static GLboolean
-check_color( const struct gl_context *ctx, GLenum type, GLenum format,
- const struct gl_pixelstore_attrib *packing,
- const void *pixels, GLint sz, GLint pitch )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint cpp = mmesa->mgaScreen->cpp;
-
- /* Can't do conversions on agp reads/draws.
- */
- if ( IS_AGP_MEM( mmesa, pixels ) &&
- !( pitch % 32 == 0 && pitch < 4096 &&
- ( ( type == GL_UNSIGNED_BYTE &&
- cpp == 4 && format == GL_BGRA ) ||
- ( type == GL_UNSIGNED_INT_8_8_8_8 &&
- cpp == 4 && format == GL_BGRA ) ||
- ( type == GL_UNSIGNED_SHORT_5_6_5_REV &&
- cpp == 2 && format == GL_RGB ) ) ) )
- return GL_FALSE;
-
- return (!ctx->_ImageTransferState &&
- !packing->SwapBytes &&
- !packing->LsbFirst);
-}
-
-static GLboolean
-check_color_per_fragment_ops( const struct gl_context *ctx )
-{
- return (!( ctx->Color.AlphaEnabled ||
- ctx->Depth.Test ||
- ctx->Fog.Enabled ||
- ctx->Scissor.Enabled ||
- ctx->Stencil._Enabled ||
- !ctx->Color.ColorMask[0][0] ||
- !ctx->Color.ColorMask[0][1] ||
- !ctx->Color.ColorMask[0][2] ||
- !ctx->Color.ColorMask[0][3] ||
- ctx->Color.ColorLogicOpEnabled ||
- ctx->Texture._EnabledUnits
- ) &&
- ctx->Current.RasterPosValid &&
- ctx->Pixel.ZoomX == 1.0F &&
- (ctx->Pixel.ZoomY == 1.0F || ctx->Pixel.ZoomY == -1.0F));
-}
-
-static GLboolean
-check_depth_per_fragment_ops( const struct gl_context *ctx )
-{
- return ( ctx->Current.RasterPosValid &&
- ctx->Color.ColorMask[0][RCOMP] == 0 &&
- ctx->Color.ColorMask[0][BCOMP] == 0 &&
- ctx->Color.ColorMask[0][GCOMP] == 0 &&
- ctx->Color.ColorMask[0][ACOMP] == 0 &&
- ctx->Pixel.ZoomX == 1.0F &&
- ( ctx->Pixel.ZoomY == 1.0F || ctx->Pixel.ZoomY == -1.0F ) );
-}
-
-/* In addition to the requirements for depth:
- */
-#if defined(MESA_packed_depth_stencil)
-static GLboolean
-check_stencil_per_fragment_ops( const struct gl_context *ctx )
-{
- return ( !ctx->Pixel.IndexShift &&
- !ctx->Pixel.IndexOffset );
-}
-#endif
-
-
-static GLboolean
-clip_pixelrect( const struct gl_context *ctx,
- const struct gl_framebuffer *buffer,
- GLint *x, GLint *y,
- GLsizei *width, GLsizei *height,
- GLint *skipPixels, GLint *skipRows,
- GLint *size )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- *width = MIN2(*width, MAX_WIDTH); /* redundant? */
-
- /* left clipping */
- if (*x < buffer->_Xmin) {
- *skipPixels += (buffer->_Xmin - *x);
- *width -= (buffer->_Xmin - *x);
- *x = buffer->_Xmin;
- }
-
- /* right clipping */
- if (*x + *width > buffer->_Xmax)
- *width -= (*x + *width - buffer->_Xmax - 1);
-
- if (*width <= 0)
- return GL_FALSE;
-
- /* bottom clipping */
- if (*y < buffer->_Ymin) {
- *skipRows += (buffer->_Ymin - *y);
- *height -= (buffer->_Ymin - *y);
- *y = buffer->_Ymin;
- }
-
- /* top clipping */
- if (*y + *height > buffer->_Ymax)
- *height -= (*y + *height - buffer->_Ymax - 1);
-
- if (*height <= 0)
- return GL_FALSE;
-
- *size = ((*y + *height - 1) * mmesa->mgaScreen->frontPitch +
- (*x + *width - 1) * mmesa->mgaScreen->cpp);
-
- return GL_TRUE;
-}
-
-static GLboolean
-mgaTryReadPixels( struct gl_context *ctx,
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const struct gl_pixelstore_attrib *pack,
- GLvoid *pixels )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLint size, skipPixels, skipRows;
- GLint pitch = pack->RowLength ? pack->RowLength : width;
- GLboolean ok;
-
- GLuint planemask;
- GLuint source;
-#if 0
- drmMGABlit blit;
- GLuint dest;
- GLint source_pitch, dest_pitch;
- GLint delta_sx, delta_sy;
- GLint delta_dx, delta_dy;
- GLint blit_height, ydir;
-#endif
-
- if (!clip_pixelrect(ctx, ctx->ReadBuffer,
- &x, &y, &width, &height,
- &skipPixels, &skipRows, &size)) {
- return GL_TRUE;
- }
-
- /* Only accelerate reading to agp buffers.
- */
- if ( !IS_AGP_MEM(mmesa, (char *)pixels) ||
- !IS_AGP_MEM(mmesa, (char *)pixels + size) )
- return GL_FALSE;
-
- switch (format) {
- case GL_DEPTH_STENCIL:
- ok = check_depth_stencil_24_8(ctx, type, pack, pixels, size, pitch);
- planemask = ~0;
- source = mmesa->mgaScreen->depthOffset;
- break;
-
- case GL_DEPTH_COMPONENT:
- ok = check_depth(ctx, type, pack, pixels, size, pitch);
-
- /* Can't accelerate at this depth -- planemask does the wrong
- * thing; it doesn't clear the low order bits in the
- * destination, instead it leaves them untouched.
- *
- * Could get the acclerator to solid fill the destination with
- * zeros first... Or get the cpu to do it...
- */
- if (ctx->Visual.depthBits == 24)
- return GL_FALSE;
-
- planemask = ~0;
- source = mmesa->mgaScreen->depthOffset;
- break;
-
- case GL_RGB:
- case GL_BGRA:
- ok = check_color(ctx, type, format, pack, pixels, size, pitch);
- planemask = ~0;
- source = (mmesa->draw_buffer == MGA_FRONT ?
- mmesa->mgaScreen->frontOffset :
- mmesa->mgaScreen->backOffset);
- break;
-
- default:
- return GL_FALSE;
- }
-
- if (!ok) {
- return GL_FALSE;
- }
-
-
- LOCK_HARDWARE( mmesa );
-
-#if 0
- {
- __DRIdrawable *dPriv = mmesa->driDrawable;
- int nbox, retcode, i;
-
- UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT );
-
- if (mmesa->dirty_cliprects & MGA_FRONT)
- mgaUpdateRects( mmesa, MGA_FRONT );
-
- nbox = dPriv->numClipRects;
-
- y = dPriv->h - y - height;
- x += mmesa->drawX;
- y += mmesa->drawY;
-
- dest = ((mmesa->mgaScreen->agp.handle + AGP_OFFSET(mmesa, pixels)) |
- DO_dstmap_sys | DO_dstacc_agp);
- source_pitch = mmesa->mgaScreen->frontPitch / mmesa->mgaScreen->cpp;
- dest_pitch = pitch;
- delta_sx = 0;
- delta_sy = 0;
- delta_dx = -x;
- delta_dy = -y;
- blit_height = 2*y + height;
- ydir = -1;
-
- if (0) fprintf(stderr, "XX doing readpixel blit src_pitch %d dst_pitch %d\n",
- source_pitch, dest_pitch);
-
-
-
- for (i = 0 ; i < nbox ; )
- {
- int nr = MIN2(i + MGA_NR_SAREA_CLIPRECTS, dPriv->numClipRects);
- drm_clip_rect_t *box = dPriv->pClipRects;
- drm_clip_rect_t *b = mmesa->sarea->boxes;
- int n = 0;
-
- for ( ; i < nr ; i++) {
- GLint bx = box[i].x1;
- GLint by = box[i].y1;
- GLint bw = box[i].x2 - bx;
- GLint bh = box[i].y2 - by;
-
- if (bx < x) bw -= x - bx, bx = x;
- if (by < y) bh -= y - by, by = y;
- if (bx + bw > x + width) bw = x + width - bx;
- if (by + bh > y + height) bh = y + height - by;
- if (bw <= 0) continue;
- if (bh <= 0) continue;
-
- b->x1 = bx;
- b->y1 = by;
- b->x2 = bx + bw;
- b->y2 = by + bh;
- b++;
- n++;
- }
-
- mmesa->sarea->nbox = n;
-
- if (n && (retcode = drmCommandWrite( mmesa->driFd, DRM_MGA_BLIT,
- &blit, sizeof(drmMGABlit)))) {
- fprintf(stderr, "blit ioctl failed, retcode = %d\n", retcode);
- UNLOCK_HARDWARE( mmesa );
- exit(1);
- }
- }
-
- UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT );
- }
-#endif
-
- UNLOCK_HARDWARE( mmesa );
-
- return GL_TRUE;
-}
-
-static void
-mgaDDReadPixels( struct gl_context *ctx,
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const struct gl_pixelstore_attrib *pack,
- GLvoid *pixels )
-{
- if (!mgaTryReadPixels( ctx, x, y, width, height, format, type, pack, pixels))
- _swrast_ReadPixels( ctx, x, y, width, height, format, type, pack, pixels);
-}
-
-
-
-
-static void do_draw_pix( struct gl_context *ctx,
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLint pitch,
- const void *pixels,
- GLuint dest, GLuint planemask)
-{
-#if 0
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- drmMGABlit blit;
- __DRIdrawable *dPriv = mmesa->driDrawable;
- drm_clip_rect_t pbox = dPriv->pClipRects;
- int nbox = dPriv->numClipRects;
- int retcode, i;
-
- y = dPriv->h - y - height;
- x += mmesa->drawX;
- y += mmesa->drawY;
-
- blit.dest = dest;
- blit.planemask = planemask;
- blit.source = ((mmesa->mgaScreen->agp.handle + AGP_OFFSET(mmesa, pixels))
- | SO_srcmap_sys | SO_srcacc_agp);
- blit.dest_pitch = mmesa->mgaScreen->frontPitch / mmesa->mgaScreen->cpp;
- blit.source_pitch = pitch;
- blit.delta_sx = -x;
- blit.delta_sy = -y;
- blit.delta_dx = 0;
- blit.delta_dy = 0;
- if (ctx->Pixel.ZoomY == -1) {
- blit.height = height;
- blit.ydir = 1;
- } else {
- blit.height = height;
- blit.ydir = -1;
- }
-
- if (0) fprintf(stderr,
- "doing drawpixel blit src_pitch %d dst_pitch %d\n",
- blit.source_pitch, blit.dest_pitch);
-
- for (i = 0 ; i < nbox ; )
- {
- int nr = MIN2(i + MGA_NR_SAREA_CLIPRECTS, dPriv->numClipRects);
- drm_clip_rect_t *box = mmesa->pClipRects;
- drm_clip_rect_t *b = mmesa->sarea->boxes;
- int n = 0;
-
- for ( ; i < nr ; i++) {
- GLint bx = box[i].x1;
- GLint by = box[i].y1;
- GLint bw = box[i].x2 - bx;
- GLint bh = box[i].y2 - by;
-
- if (bx < x) bw -= x - bx, bx = x;
- if (by < y) bh -= y - by, by = y;
- if (bx + bw > x + width) bw = x + width - bx;
- if (by + bh > y + height) bh = y + height - by;
- if (bw <= 0) continue;
- if (bh <= 0) continue;
-
- b->x1 = bx;
- b->y1 = by;
- b->x2 = bx + bw;
- b->y2 = by + bh;
- b++;
- n++;
- }
-
- mmesa->sarea->nbox = n;
-
- if (n && (retcode = drmCommandWrite( mmesa->driFd, DRM_MGA_BLIT,
- &blit, sizeof(drmMGABlit)))) {
- fprintf(stderr, "blit ioctl failed, retcode = %d\n", retcode);
- UNLOCK_HARDWARE( mmesa );
- exit(1);
- }
- }
-#endif
-}
-
-
-
-
-static GLboolean
-mgaTryDrawPixels( struct gl_context *ctx,
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const struct gl_pixelstore_attrib *unpack,
- const GLvoid *pixels )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLint size, skipPixels, skipRows;
- GLint pitch = unpack->RowLength ? unpack->RowLength : width;
- GLuint dest, planemask;
- GLuint cpp = mmesa->mgaScreen->cpp;
-
- if (!clip_pixelrect(ctx, ctx->DrawBuffer,
- &x, &y, &width, &height,
- &skipPixels, &skipRows, &size)) {
- return GL_TRUE;
- }
-
-
- switch (format) {
- case GL_DEPTH_STENCIL:
- dest = mmesa->mgaScreen->depthOffset;
- planemask = ~0;
- if (!check_depth_stencil_24_8(ctx, type, unpack, pixels, size, pitch) ||
- !check_depth_per_fragment_ops(ctx) ||
- !check_stencil_per_fragment_ops(ctx))
- return GL_FALSE;
- break;
-
- case GL_DEPTH_COMPONENT:
- dest = mmesa->mgaScreen->depthOffset;
-
- if (ctx->Visual.depthBits == 24)
- planemask = ~0xff;
- else
- planemask = ~0;
-
- if (!check_depth(ctx, type, unpack, pixels, size, pitch) ||
- !check_depth_per_fragment_ops(ctx))
- return GL_FALSE;
- break;
-
- case GL_RGB:
- case GL_BGRA:
- dest = (mmesa->draw_buffer == MGA_FRONT ?
- mmesa->mgaScreen->frontOffset :
- mmesa->mgaScreen->backOffset);
-
- planemask = mgaPackColor(cpp,
- ctx->Color.ColorMask[0][RCOMP],
- ctx->Color.ColorMask[0][GCOMP],
- ctx->Color.ColorMask[0][BCOMP],
- ctx->Color.ColorMask[0][ACOMP]);
-
- if (cpp == 2)
- planemask |= planemask << 16;
-
- if (!check_color(ctx, type, format, unpack, pixels, size, pitch)) {
- return GL_FALSE;
- }
- if (!check_color_per_fragment_ops(ctx)) {
- return GL_FALSE;
- }
- break;
-
- default:
- return GL_FALSE;
- }
-
- LOCK_HARDWARE_QUIESCENT( mmesa );
-
- if (mmesa->dirty_cliprects & MGA_FRONT)
- mgaUpdateRects( mmesa, MGA_FRONT );
-
- if ( IS_AGP_MEM(mmesa, (char *)pixels) &&
- IS_AGP_MEM(mmesa, (char *)pixels + size) )
- {
- do_draw_pix( ctx, x, y, width, height, pitch, pixels,
- dest, planemask );
- UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT );
- }
- else
- {
- /* Pixels is in regular memory -- get dma buffers and perform
- * upload through them.
- */
-/* drmBufPtr buf = mgaGetBufferLocked(mmesa); */
- GLuint bufferpitch = (width*cpp+31)&~31;
-
- char *address = 0; /* mmesa->mgaScreen->agp.map; */
-
- do {
-/* GLuint rows = MIN2( height, MGA_DMA_BUF_SZ / bufferpitch ); */
- GLuint rows = height;
-
-
- if (0) fprintf(stderr, "trying to upload %d rows (pitch %d)\n",
- rows, bufferpitch);
-
- /* The texture conversion code is so slow that there is only
- * negligble speedup when the buffers/images don't exactly
- * match:
- */
-#if 0
- if (cpp == 2) {
- if (!_mesa_convert_texsubimage2d( MESA_FORMAT_RGB565,
- 0, 0, width, rows,
- bufferpitch, format, type,
- unpack, pixels, address )) {
-/* mgaReleaseBufLocked( mmesa, buf ); */
- UNLOCK_HARDWARE(mmesa);
- return GL_FALSE;
- }
- } else {
- if (!_mesa_convert_texsubimage2d( MESA_FORMAT_ARGB8888,
- 0, 0, width, rows,
- bufferpitch, format, type,
- unpack, pixels, address )) {
-/* mgaReleaseBufLocked( mmesa, buf ); */
- UNLOCK_HARDWARE(mmesa);
- return GL_FALSE;
- }
- }
-#else
- memcpy( address, pixels, rows*bufferpitch );
-#endif
-
- do_draw_pix( ctx, x, y, width, rows,
- bufferpitch/cpp, address, dest, planemask );
-
- /* Fix me -- use multiple buffers to avoid flush.
- */
- UPDATE_LOCK( mmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT );
-
- pixels = (void *)((char *) pixels + rows * pitch);
- height -= rows;
- y += rows;
- } while (height);
-
-/* mgaReleaseBufLocked( mmesa, buf ); */
- }
-
- UNLOCK_HARDWARE( mmesa );
- mmesa->dirty |= MGA_UPLOAD_CLIPRECTS;
-
- return GL_TRUE;
-}
-
-static void
-mgaDDDrawPixels( struct gl_context *ctx,
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const struct gl_pixelstore_attrib *unpack,
- const GLvoid *pixels )
-{
- if (!mgaTryDrawPixels( ctx, x, y, width, height, format, type,
- unpack, pixels ))
- _swrast_DrawPixels( ctx, x, y, width, height, format, type,
- unpack, pixels );
-}
-#endif
-
-
-/* Stub functions - not a real allocator, always returns pointer to
- * the same block of agp space which isn't used for anything else at
- * present.
- */
-void mgaDDInitPixelFuncs( struct gl_context *ctx )
-{
-#if 0
- /* evidently, these functions don't always work */
- if (getenv("MGA_BLIT_PIXELS")) {
- ctx->Driver.ReadPixels = mgaDDReadPixels; /* requires agp dest */
- ctx->Driver.DrawPixels = mgaDDDrawPixels; /* works with agp/normal mem */
- }
-#endif
-}
diff --git a/src/mesa/drivers/dri/mga/mgapixel.h b/src/mesa/drivers/dri/mga/mgapixel.h
deleted file mode 100644
index 6241b4b5ef4..00000000000
--- a/src/mesa/drivers/dri/mga/mgapixel.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2000-2001 Compaq Computer Inc. VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef MGA_PIXELS_H
-#define MGA_PIXELS_H
-
-#include "main/mtypes.h"
-
-extern void mgaDDInitPixelFuncs( struct gl_context *ctx );
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgaregs.h b/src/mesa/drivers/dri/mga/mgaregs.h
deleted file mode 100644
index 1ef1e6d24c6..00000000000
--- a/src/mesa/drivers/dri/mga/mgaregs.h
+++ /dev/null
@@ -1,1394 +0,0 @@
-/* author: stephen crowley, crow@debian.org */
-
-/*
- * 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 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
- * STEPHEN CROWLEY, OR ANY OTHER CONTRIBUTORS 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.
- */
-
-#ifndef _MGAREGS_H_
-#define _MGAREGS_H_
-
-/*************** (START) AUTOMATICLY GENERATED REGISTER FILE *****************/
-/*
- * Generated on Wed Jan 26 13:44:46 MST 2000
- */
-
-
-
-/*
- * Power Graphic Mode Memory Space Registers
- */
-
-#define MGAREG_MGA_EXEC 0x0100
-#define MGAREG_AGP_PLL 0x1e4c
-
-# define AGP_PLL_agp2xpllen_MASK 0xfffffffe /* bit 0 */
-# define AGP_PLL_agp2xpllen_disable 0x0
-# define AGP_PLL_agp2xpllen_enable 0x1
-
-#define MGAREG_CFG_OR 0x1e4c
-
-# define CFG_OR_comp_or_MASK 0xfffffff7 /* bit 3 */
-# define CFG_OR_comp_or_disable 0x0
-# define CFG_OR_comp_or_enable 0x8
-# define CFG_OR_compfreq_MASK 0xffffff0f /* bits 4-7 */
-# define CFG_OR_compfreq_SHIFT 4
-# define CFG_OR_comporup_MASK 0xfffff0ff /* bits 8-11 */
-# define CFG_OR_comporup_SHIFT 8
-# define CFG_OR_compordn_MASK 0xffff0fff /* bits 12-15 */
-# define CFG_OR_compordn_SHIFT 12
-# define CFG_OR_e2pq_MASK 0xfffeffff /* bit 16 */
-# define CFG_OR_e2pq_disable 0x0
-# define CFG_OR_e2pq_enable 0x10000
-# define CFG_OR_e2pqbypcsn_MASK 0xfffdffff /* bit 17 */
-# define CFG_OR_e2pqbypcsn_disable 0x0
-# define CFG_OR_e2pqbypcsn_enable 0x20000
-# define CFG_OR_e2pqbypd_MASK 0xfffbffff /* bit 18 */
-# define CFG_OR_e2pqbypd_disable 0x0
-# define CFG_OR_e2pqbypd_enable 0x40000
-# define CFG_OR_e2pbypclk_MASK 0xfff7ffff /* bit 19 */
-# define CFG_OR_e2pbypclk_disable 0x0
-# define CFG_OR_e2pbypclk_enable 0x80000
-# define CFG_OR_e2pbyp_MASK 0xffefffff /* bit 20 */
-# define CFG_OR_e2pbyp_disable 0x0
-# define CFG_OR_e2pbyp_enable 0x100000
-# define CFG_OR_rate_cap_or_MASK 0xff1fffff /* bits 21-23 */
-# define CFG_OR_rate_cap_or_SHIFT 21
-# define CFG_OR_rq_or_MASK 0xe0ffffff /* bits 24-28 */
-# define CFG_OR_rq_or_SHIFT 24
-
-#define MGAREG_ALPHACTRL 0x2c7c
-
-# define AC_src_MASK 0xfffffff0 /* bits 0-3 */
-# define AC_src_zero 0x0 /* val 0, shift 0 */
-# define AC_src_one 0x1 /* val 1, shift 0 */
-# define AC_src_dst_color 0x2 /* val 2, shift 0 */
-# define AC_src_om_dst_color 0x3 /* val 3, shift 0 */
-# define AC_src_src_alpha 0x4 /* val 4, shift 0 */
-# define AC_src_om_src_alpha 0x5 /* val 5, shift 0 */
-# define AC_src_dst_alpha 0x6 /* val 6, shift 0 */
-# define AC_src_om_dst_alpha 0x7 /* val 7, shift 0 */
-# define AC_src_src_alpha_sat 0x8 /* val 8, shift 0 */
-# define AC_dst_MASK 0xffffff0f /* bits 4-7 */
-# define AC_dst_zero 0x0 /* val 0, shift 4 */
-# define AC_dst_one 0x10 /* val 1, shift 4 */
-# define AC_dst_src_color 0x20 /* val 2, shift 4 */
-# define AC_dst_om_src_color 0x30 /* val 3, shift 4 */
-# define AC_dst_src_alpha 0x40 /* val 4, shift 4 */
-# define AC_dst_om_src_alpha 0x50 /* val 5, shift 4 */
-# define AC_dst_dst_alpha 0x60 /* val 6, shift 4 */
-# define AC_dst_om_dst_alpha 0x70 /* val 7, shift 4 */
-# define AC_amode_MASK 0xfffffcff /* bits 8-9 */
-# define AC_amode_FCOL 0x0 /* val 0, shift 8 */
-# define AC_amode_alpha_channel 0x100 /* val 1, shift 8 */
-# define AC_amode_video_alpha 0x200 /* val 2, shift 8 */
-# define AC_amode_RSVD 0x300 /* val 3, shift 8 */
-# define AC_astipple_MASK 0xfffff7ff /* bit 11 */
-# define AC_astipple_disable 0x0
-# define AC_astipple_enable 0x800
-# define AC_aten_MASK 0xffffefff /* bit 12 */
-# define AC_aten_disable 0x0
-# define AC_aten_enable 0x1000
-# define AC_atmode_MASK 0xffff1fff /* bits 13-15 */
-# define AC_atmode_noacmp 0x0 /* val 0, shift 13 */
-# define AC_atmode_ae 0x4000 /* val 2, shift 13 */
-# define AC_atmode_ane 0x6000 /* val 3, shift 13 */
-# define AC_atmode_alt 0x8000 /* val 4, shift 13 */
-# define AC_atmode_alte 0xa000 /* val 5, shift 13 */
-# define AC_atmode_agt 0xc000 /* val 6, shift 13 */
-# define AC_atmode_agte 0xe000 /* val 7, shift 13 */
-# define AC_atref_MASK 0xff00ffff /* bits 16-23 */
-# define AC_atref_SHIFT 16
-# define AC_alphasel_MASK 0xfcffffff /* bits 24-25 */
-# define AC_alphasel_fromtex 0x0 /* val 0, shift 24 */
-# define AC_alphasel_diffused 0x1000000 /* val 1, shift 24 */
-# define AC_alphasel_modulated 0x2000000 /* val 2, shift 24 */
-# define AC_alphasel_trans 0x3000000 /* val 3, shift 24 */
-
-#define MGAREG_ALPHASTART 0x2c70
-#define MGAREG_ALPHAXINC 0x2c74
-#define MGAREG_ALPHAYINC 0x2c78
-#define MGAREG_AR0 0x1c60
-
-# define AR0_ar0_MASK 0xfffc0000 /* bits 0-17 */
-# define AR0_ar0_SHIFT 0
-
-#define MGAREG_AR1 0x1c64
-
-# define AR1_ar1_MASK 0xff000000 /* bits 0-23 */
-# define AR1_ar1_SHIFT 0
-
-#define MGAREG_AR2 0x1c68
-
-# define AR2_ar2_MASK 0xfffc0000 /* bits 0-17 */
-# define AR2_ar2_SHIFT 0
-
-#define MGAREG_AR3 0x1c6c
-
-# define AR3_ar3_MASK 0xff000000 /* bits 0-23 */
-# define AR3_ar3_SHIFT 0
-# define AR3_spage_MASK 0xf8ffffff /* bits 24-26 */
-# define AR3_spage_SHIFT 24
-
-#define MGAREG_AR4 0x1c70
-
-# define AR4_ar4_MASK 0xfffc0000 /* bits 0-17 */
-# define AR4_ar4_SHIFT 0
-
-#define MGAREG_AR5 0x1c74
-
-# define AR5_ar5_MASK 0xfffc0000 /* bits 0-17 */
-# define AR5_ar5_SHIFT 0
-
-#define MGAREG_AR6 0x1c78
-
-# define AR6_ar6_MASK 0xfffc0000 /* bits 0-17 */
-# define AR6_ar6_SHIFT 0
-
-#define MGAREG_BCOL 0x1c20
-#define MGAREG_BESA1CORG 0x3d10
-#define MGAREG_BESA1ORG 0x3d00
-#define MGAREG_BESA2CORG 0x3d14
-#define MGAREG_BESA2ORG 0x3d04
-#define MGAREG_BESB1CORG 0x3d18
-#define MGAREG_BESB1ORG 0x3d08
-#define MGAREG_BESB2CORG 0x3d1c
-#define MGAREG_BESB2ORG 0x3d0c
-#define MGAREG_BESCTL 0x3d20
-
-# define BC_besen_MASK 0xfffffffe /* bit 0 */
-# define BC_besen_disable 0x0
-# define BC_besen_enable 0x1
-# define BC_besv1srcstp_MASK 0xffffffbf /* bit 6 */
-# define BC_besv1srcstp_even 0x0
-# define BC_besv1srcstp_odd 0x40
-# define BC_besv2srcstp_MASK 0xfffffeff /* bit 8 */
-# define BC_besv2srcstp_disable 0x0
-# define BC_besv2srcstp_enable 0x100
-# define BC_beshfen_MASK 0xfffffbff /* bit 10 */
-# define BC_beshfen_disable 0x0
-# define BC_beshfen_enable 0x400
-# define BC_besvfen_MASK 0xfffff7ff /* bit 11 */
-# define BC_besvfen_disable 0x0
-# define BC_besvfen_enable 0x800
-# define BC_beshfixc_MASK 0xffffefff /* bit 12 */
-# define BC_beshfixc_weight 0x0
-# define BC_beshfixc_coeff 0x1000
-# define BC_bescups_MASK 0xfffeffff /* bit 16 */
-# define BC_bescups_disable 0x0
-# define BC_bescups_enable 0x10000
-# define BC_bes420pl_MASK 0xfffdffff /* bit 17 */
-# define BC_bes420pl_422 0x0
-# define BC_bes420pl_420 0x20000
-# define BC_besdith_MASK 0xfffbffff /* bit 18 */
-# define BC_besdith_disable 0x0
-# define BC_besdith_enable 0x40000
-# define BC_beshmir_MASK 0xfff7ffff /* bit 19 */
-# define BC_beshmir_disable 0x0
-# define BC_beshmir_enable 0x80000
-# define BC_besbwen_MASK 0xffefffff /* bit 20 */
-# define BC_besbwen_color 0x0
-# define BC_besbwen_bw 0x100000
-# define BC_besblank_MASK 0xffdfffff /* bit 21 */
-# define BC_besblank_disable 0x0
-# define BC_besblank_enable 0x200000
-# define BC_besfselm_MASK 0xfeffffff /* bit 24 */
-# define BC_besfselm_soft 0x0
-# define BC_besfselm_hard 0x1000000
-# define BC_besfsel_MASK 0xf9ffffff /* bits 25-26 */
-# define BC_besfsel_a1 0x0 /* val 0, shift 25 */
-# define BC_besfsel_a2 0x2000000 /* val 1, shift 25 */
-# define BC_besfsel_b1 0x4000000 /* val 2, shift 25 */
-# define BC_besfsel_b2 0x6000000 /* val 3, shift 25 */
-
-#define MGAREG_BESGLOBCTL 0x3dc0
-
-# define BGC_beshzoom_MASK 0xfffffffe /* bit 0 */
-# define BGC_beshzoom_disable 0x0
-# define BGC_beshzoom_enable 0x1
-# define BGC_beshzoomf_MASK 0xfffffffd /* bit 1 */
-# define BGC_beshzoomf_disable 0x0
-# define BGC_beshzoomf_enable 0x2
-# define BGC_bescorder_MASK 0xfffffff7 /* bit 3 */
-# define BGC_bescorder_even 0x0
-# define BGC_bescorder_odd 0x8
-# define BGC_besreghup_MASK 0xffffffef /* bit 4 */
-# define BGC_besreghup_disable 0x0
-# define BGC_besreghup_enable 0x10
-# define BGC_besvcnt_MASK 0xf000ffff /* bits 16-27 */
-# define BGC_besvcnt_SHIFT 16
-
-#define MGAREG_BESHCOORD 0x3d28
-
-# define BHC_besright_MASK 0xfffff800 /* bits 0-10 */
-# define BHC_besright_SHIFT 0
-# define BHC_besleft_MASK 0xf800ffff /* bits 16-26 */
-# define BHC_besleft_SHIFT 16
-
-#define MGAREG_BESHISCAL 0x3d30
-
-# define BHISF_beshiscal_MASK 0xffe00003 /* bits 2-20 */
-# define BHISF_beshiscal_SHIFT 2
-
-#define MGAREG_BESHSRCEND 0x3d3c
-
-# define BHSE_beshsrcend_MASK 0xfc000003 /* bits 2-25 */
-# define BHSE_beshsrcend_SHIFT 2
-
-#define MGAREG_BESHSRCLST 0x3d50
-
-# define BHSL_beshsrclst_MASK 0xfc00ffff /* bits 16-25 */
-# define BHSL_beshsrclst_SHIFT 16
-
-#define MGAREG_BESHSRCST 0x3d38
-
-# define BHSS_beshsrcst_MASK 0xfc000003 /* bits 2-25 */
-# define BHSS_beshsrcst_SHIFT 2
-
-#define MGAREG_BESPITCH 0x3d24
-
-# define BP_bespitch_MASK 0xfffff000 /* bits 0-11 */
-# define BP_bespitch_SHIFT 0
-
-#define MGAREG_BESSTATUS 0x3dc4
-
-# define BS_besstat_MASK 0xfffffffc /* bits 0-1 */
-# define BS_besstat_a1 0x0 /* val 0, shift 0 */
-# define BS_besstat_a2 0x1 /* val 1, shift 0 */
-# define BS_besstat_b1 0x2 /* val 2, shift 0 */
-# define BS_besstat_b2 0x3 /* val 3, shift 0 */
-
-#define MGAREG_BESV1SRCLST 0x3d54
-
-# define BSF_besv1srclast_MASK 0xfffffc00 /* bits 0-9 */
-# define BSF_besv1srclast_SHIFT 0
-
-#define MGAREG_BESV2SRCLST 0x3d58
-
-# define BSF_besv2srclst_MASK 0xfffffc00 /* bits 0-9 */
-# define BSF_besv2srclst_SHIFT 0
-
-#define MGAREG_BESV1WGHT 0x3d48
-
-# define BSF_besv1wght_MASK 0xffff0003 /* bits 2-15 */
-# define BSF_besv1wght_SHIFT 2
-# define BSF_besv1wghts_MASK 0xfffeffff /* bit 16 */
-# define BSF_besv1wghts_disable 0x0
-# define BSF_besv1wghts_enable 0x10000
-
-#define MGAREG_BESV2WGHT 0x3d4c
-
-# define BSF_besv2wght_MASK 0xffff0003 /* bits 2-15 */
-# define BSF_besv2wght_SHIFT 2
-# define BSF_besv2wghts_MASK 0xfffeffff /* bit 16 */
-# define BSF_besv2wghts_disable 0x0
-# define BSF_besv2wghts_enable 0x10000
-
-#define MGAREG_BESVCOORD 0x3d2c
-
-# define BVC_besbot_MASK 0xfffff800 /* bits 0-10 */
-# define BVC_besbot_SHIFT 0
-# define BVC_bestop_MASK 0xf800ffff /* bits 16-26 */
-# define BVC_bestop_SHIFT 16
-
-#define MGAREG_BESVISCAL 0x3d34
-
-# define BVISF_besviscal_MASK 0xffe00003 /* bits 2-20 */
-# define BVISF_besviscal_SHIFT 2
-
-#define MGAREG_CODECADDR 0x3e44
-#define MGAREG_CODECCTL 0x3e40
-#define MGAREG_CODECHARDPTR 0x3e4c
-#define MGAREG_CODECHOSTPTR 0x3e48
-#define MGAREG_CODECLCODE 0x3e50
-#define MGAREG_CXBNDRY 0x1c80
-
-# define CXB_cxleft_MASK 0xfffff000 /* bits 0-11 */
-# define CXB_cxleft_SHIFT 0
-# define CXB_cxright_MASK 0xf000ffff /* bits 16-27 */
-# define CXB_cxright_SHIFT 16
-
-#define MGAREG_CXLEFT 0x1ca0
-#define MGAREG_CXRIGHT 0x1ca4
-#define MGAREG_DMAMAP30 0x1e30
-#define MGAREG_DMAMAP74 0x1e34
-#define MGAREG_DMAMAPB8 0x1e38
-#define MGAREG_DMAMAPFC 0x1e3c
-#define MGAREG_DMAPAD 0x1c54
-#define MGAREG_DR0_Z32LSB 0x2c50
-#define MGAREG_DR0_Z32MSB 0x2c54
-#define MGAREG_DR2_Z32LSB 0x2c60
-#define MGAREG_DR2_Z32MSB 0x2c64
-#define MGAREG_DR3_Z32LSB 0x2c68
-#define MGAREG_DR3_Z32MSB 0x2c6c
-#define MGAREG_DR0 0x1cc0
-#define MGAREG_DR2 0x1cc8
-#define MGAREG_DR3 0x1ccc
-#define MGAREG_DR4 0x1cd0
-#define MGAREG_DR6 0x1cd8
-#define MGAREG_DR7 0x1cdc
-#define MGAREG_DR8 0x1ce0
-#define MGAREG_DR10 0x1ce8
-#define MGAREG_DR11 0x1cec
-#define MGAREG_DR12 0x1cf0
-#define MGAREG_DR14 0x1cf8
-#define MGAREG_DR15 0x1cfc
-#define MGAREG_DSTORG 0x2cb8
-
-# define DO_dstmap_MASK 0xfffffffe /* bit 0 */
-# define DO_dstmap_fb 0x0
-# define DO_dstmap_sys 0x1
-# define DO_dstacc_MASK 0xfffffffd /* bit 1 */
-# define DO_dstacc_pci 0x0
-# define DO_dstacc_agp 0x2
-# define DO_dstorg_MASK 0x7 /* bits 3-31 */
-# define DO_dstorg_SHIFT 3
-
-#define MGAREG_DWG_INDIR_WT 0x1e80
-#define MGAREG_DWGCTL 0x1c00
-
-# define DC_opcod_MASK 0xfffffff0 /* bits 0-3 */
-# define DC_opcod_line_open 0x0 /* val 0, shift 0 */
-# define DC_opcod_autoline_open 0x1 /* val 1, shift 0 */
-# define DC_opcod_line_close 0x2 /* val 2, shift 0 */
-# define DC_opcod_autoline_close 0x3 /* val 3, shift 0 */
-# define DC_opcod_trap 0x4 /* val 4, shift 0 */
-# define DC_opcod_texture_trap 0x6 /* val 6, shift 0 */
-# define DC_opcod_bitblt 0x8 /* val 8, shift 0 */
-# define DC_opcod_iload 0x9 /* val 9, shift 0 */
-# define DC_atype_MASK 0xffffff8f /* bits 4-6 */
-# define DC_atype_rpl 0x0 /* val 0, shift 4 */
-# define DC_atype_rstr 0x10 /* val 1, shift 4 */
-# define DC_atype_zi 0x30 /* val 3, shift 4 */
-# define DC_atype_blk 0x40 /* val 4, shift 4 */
-# define DC_atype_i 0x70 /* val 7, shift 4 */
-# define DC_linear_MASK 0xffffff7f /* bit 7 */
-# define DC_linear_xy 0x0
-# define DC_linear_linear 0x80
-# define DC_zmode_MASK 0xfffff8ff /* bits 8-10 */
-# define DC_zmode_nozcmp 0x0 /* val 0, shift 8 */
-# define DC_zmode_ze 0x200 /* val 2, shift 8 */
-# define DC_zmode_zne 0x300 /* val 3, shift 8 */
-# define DC_zmode_zlt 0x400 /* val 4, shift 8 */
-# define DC_zmode_zlte 0x500 /* val 5, shift 8 */
-# define DC_zmode_zgt 0x600 /* val 6, shift 8 */
-# define DC_zmode_zgte 0x700 /* val 7, shift 8 */
-# define DC_solid_MASK 0xfffff7ff /* bit 11 */
-# define DC_solid_disable 0x0
-# define DC_solid_enable 0x800
-# define DC_arzero_MASK 0xffffefff /* bit 12 */
-# define DC_arzero_disable 0x0
-# define DC_arzero_enable 0x1000
-# define DC_sgnzero_MASK 0xffffdfff /* bit 13 */
-# define DC_sgnzero_disable 0x0
-# define DC_sgnzero_enable 0x2000
-# define DC_shftzero_MASK 0xffffbfff /* bit 14 */
-# define DC_shftzero_disable 0x0
-# define DC_shftzero_enable 0x4000
-# define DC_bop_MASK 0xfff0ffff /* bits 16-19 */
-# define DC_bop_SHIFT 16
-# define DC_trans_MASK 0xff0fffff /* bits 20-23 */
-# define DC_trans_SHIFT 20
-# define DC_bltmod_MASK 0xe1ffffff /* bits 25-28 */
-# define DC_bltmod_bmonolef 0x0 /* val 0, shift 25 */
-# define DC_bltmod_bmonowf 0x8000000 /* val 4, shift 25 */
-# define DC_bltmod_bplan 0x2000000 /* val 1, shift 25 */
-# define DC_bltmod_bfcol 0x4000000 /* val 2, shift 25 */
-# define DC_bltmod_bu32bgr 0x6000000 /* val 3, shift 25 */
-# define DC_bltmod_bu32rgb 0xe000000 /* val 7, shift 25 */
-# define DC_bltmod_bu24bgr 0x16000000 /* val 11, shift 25 */
-# define DC_bltmod_bu24rgb 0x1e000000 /* val 15, shift 25 */
-# define DC_pattern_MASK 0xdfffffff /* bit 29 */
-# define DC_pattern_disable 0x0
-# define DC_pattern_enable 0x20000000
-# define DC_transc_MASK 0xbfffffff /* bit 30 */
-# define DC_transc_disable 0x0
-# define DC_transc_enable 0x40000000
-# define DC_clipdis_MASK 0x7fffffff /* bit 31 */
-# define DC_clipdis_disable 0x0
-# define DC_clipdis_enable 0x80000000
-
-#define MGAREG_DWGSYNC 0x2c4c
-
-# define DS_dwgsyncaddr_MASK 0x3 /* bits 2-31 */
-# define DS_dwgsyncaddr_SHIFT 2
-
-#define MGAREG_FCOL 0x1c24
-#define MGAREG_FIFOSTATUS 0x1e10
-
-# define FS_fifocount_MASK 0xffffff80 /* bits 0-6 */
-# define FS_fifocount_SHIFT 0
-# define FS_bfull_MASK 0xfffffeff /* bit 8 */
-# define FS_bfull_disable 0x0
-# define FS_bfull_enable 0x100
-# define FS_bempty_MASK 0xfffffdff /* bit 9 */
-# define FS_bempty_disable 0x0
-# define FS_bempty_enable 0x200
-
-#define MGAREG_FOGCOL 0x1cf4
-#define MGAREG_FOGSTART 0x1cc4
-#define MGAREG_FOGXINC 0x1cd4
-#define MGAREG_FOGYINC 0x1ce4
-#define MGAREG_FXBNDRY 0x1c84
-
-# define XA_fxleft_MASK 0xffff0000 /* bits 0-15 */
-# define XA_fxleft_SHIFT 0
-# define XA_fxright_MASK 0xffff /* bits 16-31 */
-# define XA_fxright_SHIFT 16
-
-#define MGAREG_FXLEFT 0x1ca8
-#define MGAREG_FXRIGHT 0x1cac
-#define MGAREG_ICLEAR 0x1e18
-
-# define IC_softrapiclr_MASK 0xfffffffe /* bit 0 */
-# define IC_softrapiclr_disable 0x0
-# define IC_softrapiclr_enable 0x1
-# define IC_pickiclr_MASK 0xfffffffb /* bit 2 */
-# define IC_pickiclr_disable 0x0
-# define IC_pickiclr_enable 0x4
-# define IC_vlineiclr_MASK 0xffffffdf /* bit 5 */
-# define IC_vlineiclr_disable 0x0
-# define IC_vlineiclr_enable 0x20
-# define IC_wiclr_MASK 0xffffff7f /* bit 7 */
-# define IC_wiclr_disable 0x0
-# define IC_wiclr_enable 0x80
-# define IC_wciclr_MASK 0xfffffeff /* bit 8 */
-# define IC_wciclr_disable 0x0
-# define IC_wciclr_enable 0x100
-
-#define MGAREG_IEN 0x1e1c
-
-# define IE_softrapien_MASK 0xfffffffe /* bit 0 */
-# define IE_softrapien_disable 0x0
-# define IE_softrapien_enable 0x1
-# define IE_pickien_MASK 0xfffffffb /* bit 2 */
-# define IE_pickien_disable 0x0
-# define IE_pickien_enable 0x4
-# define IE_vlineien_MASK 0xffffffdf /* bit 5 */
-# define IE_vlineien_disable 0x0
-# define IE_vlineien_enable 0x20
-# define IE_extien_MASK 0xffffffbf /* bit 6 */
-# define IE_extien_disable 0x0
-# define IE_extien_enable 0x40
-# define IE_wien_MASK 0xffffff7f /* bit 7 */
-# define IE_wien_disable 0x0
-# define IE_wien_enable 0x80
-# define IE_wcien_MASK 0xfffffeff /* bit 8 */
-# define IE_wcien_disable 0x0
-# define IE_wcien_enable 0x100
-
-#define MGAREG_LEN 0x1c5c
-#define MGAREG_MACCESS 0x1c04
-
-# define MA_pwidth_MASK 0xfffffffc /* bits 0-1 */
-# define MA_pwidth_8 0x0 /* val 0, shift 0 */
-# define MA_pwidth_16 0x1 /* val 1, shift 0 */
-# define MA_pwidth_32 0x2 /* val 2, shift 0 */
-# define MA_pwidth_24 0x3 /* val 3, shift 0 */
-# define MA_zwidth_MASK 0xffffffe7 /* bits 3-4 */
-# define MA_zwidth_16 0x0 /* val 0, shift 3 */
-# define MA_zwidth_32 0x8 /* val 1, shift 3 */
-# define MA_zwidth_15 0x10 /* val 2, shift 3 */
-# define MA_zwidth_24 0x18 /* val 3, shift 3 */
-# define MA_memreset_MASK 0xffff7fff /* bit 15 */
-# define MA_memreset_disable 0x0
-# define MA_memreset_enable 0x8000
-# define MA_fogen_MASK 0xfbffffff /* bit 26 */
-# define MA_fogen_disable 0x0
-# define MA_fogen_enable 0x4000000
-# define MA_tlutload_MASK 0xdfffffff /* bit 29 */
-# define MA_tlutload_disable 0x0
-# define MA_tlutload_enable 0x20000000
-# define MA_nodither_MASK 0xbfffffff /* bit 30 */
-# define MA_nodither_disable 0x0
-# define MA_nodither_enable 0x40000000
-# define MA_dit555_MASK 0x7fffffff /* bit 31 */
-# define MA_dit555_disable 0x0
-# define MA_dit555_enable 0x80000000
-
-#define MGAREG_MCTLWTST 0x1c08
-
-# define MCWS_casltncy_MASK 0xfffffff8 /* bits 0-2 */
-# define MCWS_casltncy_SHIFT 0
-# define MCWS_rrddelay_MASK 0xffffffcf /* bits 4-5 */
-# define MCWS_rcddelay_MASK 0xfffffe7f /* bits 7-8 */
-# define MCWS_rasmin_MASK 0xffffe3ff /* bits 10-12 */
-# define MCWS_rasmin_SHIFT 10
-# define MCWS_rpdelay_MASK 0xffff3fff /* bits 14-15 */
-# define MCWS_wrdelay_MASK 0xfff3ffff /* bits 18-19 */
-# define MCWS_rddelay_MASK 0xffdfffff /* bit 21 */
-# define MCWS_rddelay_disable 0x0
-# define MCWS_rddelay_enable 0x200000
-# define MCWS_smrdelay_MASK 0xfe7fffff /* bits 23-24 */
-# define MCWS_bwcdelay_MASK 0xf3ffffff /* bits 26-27 */
-# define MCWS_bpldelay_MASK 0x1fffffff /* bits 29-31 */
-# define MCWS_bpldelay_SHIFT 29
-
-#define MGAREG_MEMRDBK 0x1e44
-
-# define MRB_mclkbrd0_MASK 0xfffffff0 /* bits 0-3 */
-# define MRB_mclkbrd0_SHIFT 0
-# define MRB_mclkbrd1_MASK 0xfffffe1f /* bits 5-8 */
-# define MRB_mclkbrd1_SHIFT 5
-# define MRB_strmfctl_MASK 0xff3fffff /* bits 22-23 */
-# define MRB_mrsopcod_MASK 0xe1ffffff /* bits 25-28 */
-# define MRB_mrsopcod_SHIFT 25
-
-#define MGAREG_OPMODE 0x1e54
-
-# define OM_dmamod_MASK 0xfffffff3 /* bits 2-3 */
-# define OM_dmamod_general 0x0 /* val 0, shift 2 */
-# define OM_dmamod_blit 0x4 /* val 1, shift 2 */
-# define OM_dmamod_vector 0x8 /* val 2, shift 2 */
-# define OM_dmamod_vertex 0xc /* val 3, shift 2 */
-# define OM_dmadatasiz_MASK 0xfffffcff /* bits 8-9 */
-# define OM_dmadatasiz_8 0x0 /* val 0, shift 8 */
-# define OM_dmadatasiz_16 0x100 /* val 1, shift 8 */
-# define OM_dmadatasiz_32 0x200 /* val 2, shift 8 */
-# define OM_dirdatasiz_MASK 0xfffcffff /* bits 16-17 */
-# define OM_dirdatasiz_8 0x0 /* val 0, shift 16 */
-# define OM_dirdatasiz_16 0x10000 /* val 1, shift 16 */
-# define OM_dirdatasiz_32 0x20000 /* val 2, shift 16 */
-
-#define MGAREG_PAT0 0x1c10
-#define MGAREG_PAT1 0x1c14
-#define MGAREG_PITCH 0x1c8c
-
-# define P_iy_MASK 0xffffe000 /* bits 0-12 */
-# define P_iy_SHIFT 0
-# define P_ylin_MASK 0xffff7fff /* bit 15 */
-# define P_ylin_disable 0x0
-# define P_ylin_enable 0x8000
-
-#define MGAREG_PLNWT 0x1c1c
-#define MGAREG_PRIMADDRESS 0x1e58
-
-# define PDCA_primod_MASK 0xfffffffc /* bits 0-1 */
-# define PDCA_primod_general 0x0 /* val 0, shift 0 */
-# define PDCA_primod_blit 0x1 /* val 1, shift 0 */
-# define PDCA_primod_vector 0x2 /* val 2, shift 0 */
-# define PDCA_primod_vertex 0x3 /* val 3, shift 0 */
-# define PDCA_primaddress_MASK 0x3 /* bits 2-31 */
-# define PDCA_primaddress_SHIFT 2
-
-#define MGAREG_PRIMEND 0x1e5c
-
-# define PDEA_primnostart_MASK 0xfffffffe /* bit 0 */
-# define PDEA_primnostart_disable 0x0
-# define PDEA_primnostart_enable 0x1
-# define PDEA_pagpxfer_MASK 0xfffffffd /* bit 1 */
-# define PDEA_pagpxfer_disable 0x0
-# define PDEA_pagpxfer_enable 0x2
-# define PDEA_primend_MASK 0x3 /* bits 2-31 */
-# define PDEA_primend_SHIFT 2
-
-#define MGAREG_PRIMPTR 0x1e50
-
-# define PLS_primptren0_MASK 0xfffffffe /* bit 0 */
-# define PLS_primptren0_disable 0x0
-# define PLS_primptren0_enable 0x1
-# define PLS_primptren1_MASK 0xfffffffd /* bit 1 */
-# define PLS_primptren1_disable 0x0
-# define PLS_primptren1_enable 0x2
-# define PLS_primptr_MASK 0x7 /* bits 3-31 */
-# define PLS_primptr_SHIFT 3
-
-#define MGAREG_RST 0x1e40
-
-# define R_softreset_MASK 0xfffffffe /* bit 0 */
-# define R_softreset_disable 0x0
-# define R_softreset_enable 0x1
-# define R_softextrst_MASK 0xfffffffd /* bit 1 */
-# define R_softextrst_disable 0x0
-# define R_softextrst_enable 0x2
-
-#define MGAREG_SECADDRESS 0x2c40
-
-# define SDCA_secmod_MASK 0xfffffffc /* bits 0-1 */
-# define SDCA_secmod_general 0x0 /* val 0, shift 0 */
-# define SDCA_secmod_blit 0x1 /* val 1, shift 0 */
-# define SDCA_secmod_vector 0x2 /* val 2, shift 0 */
-# define SDCA_secmod_vertex 0x3 /* val 3, shift 0 */
-# define SDCA_secaddress_MASK 0x3 /* bits 2-31 */
-# define SDCA_secaddress_SHIFT 2
-
-#define MGAREG_SECEND 0x2c44
-
-# define SDEA_sagpxfer_MASK 0xfffffffd /* bit 1 */
-# define SDEA_sagpxfer_disable 0x0
-# define SDEA_sagpxfer_enable 0x2
-# define SDEA_secend_MASK 0x3 /* bits 2-31 */
-# define SDEA_secend_SHIFT 2
-
-#define MGAREG_SETUPADDRESS 0x2cd0
-
-# define SETADD_mode_MASK 0xfffffffc /* bits 0-1 */
-# define SETADD_mode_vertlist 0x0 /* val 0, shift 0 */
-# define SETADD_address_MASK 0x3 /* bits 2-31 */
-# define SETADD_address_SHIFT 2
-
-#define MGAREG_SETUPEND 0x2cd4
-
-# define SETEND_agpxfer_MASK 0xfffffffd /* bit 1 */
-# define SETEND_agpxfer_disable 0x0
-# define SETEND_agpxfer_enable 0x2
-# define SETEND_address_MASK 0x3 /* bits 2-31 */
-# define SETEND_address_SHIFT 2
-
-#define MGAREG_SGN 0x1c58
-
-# define S_sdydxl_MASK 0xfffffffe /* bit 0 */
-# define S_sdydxl_y 0x0
-# define S_sdydxl_x 0x1
-# define S_scanleft_MASK 0xfffffffe /* bit 0 */
-# define S_scanleft_disable 0x0
-# define S_scanleft_enable 0x1
-# define S_sdxl_MASK 0xfffffffd /* bit 1 */
-# define S_sdxl_pos 0x0
-# define S_sdxl_neg 0x2
-# define S_sdy_MASK 0xfffffffb /* bit 2 */
-# define S_sdy_pos 0x0
-# define S_sdy_neg 0x4
-# define S_sdxr_MASK 0xffffffdf /* bit 5 */
-# define S_sdxr_pos 0x0
-# define S_sdxr_neg 0x20
-# define S_brkleft_MASK 0xfffffeff /* bit 8 */
-# define S_brkleft_disable 0x0
-# define S_brkleft_enable 0x100
-# define S_errorinit_MASK 0x7fffffff /* bit 31 */
-# define S_errorinit_disable 0x0
-# define S_errorinit_enable 0x80000000
-
-#define MGAREG_SHIFT 0x1c50
-
-# define FSC_x_off_MASK 0xfffffff0 /* bits 0-3 */
-# define FSC_x_off_SHIFT 0
-# define FSC_funcnt_MASK 0xffffff80 /* bits 0-6 */
-# define FSC_funcnt_SHIFT 0
-# define FSC_y_off_MASK 0xffffff8f /* bits 4-6 */
-# define FSC_y_off_SHIFT 4
-# define FSC_funoff_MASK 0xffc0ffff /* bits 16-21 */
-# define FSC_funoff_SHIFT 16
-# define FSC_stylelen_MASK 0xffc0ffff /* bits 16-21 */
-# define FSC_stylelen_SHIFT 16
-
-#define MGAREG_SOFTRAP 0x2c48
-
-# define STH_softraphand_MASK 0x3 /* bits 2-31 */
-# define STH_softraphand_SHIFT 2
-
-#define MGAREG_SPECBSTART 0x2c98
-#define MGAREG_SPECBXINC 0x2c9c
-#define MGAREG_SPECBYINC 0x2ca0
-#define MGAREG_SPECGSTART 0x2c8c
-#define MGAREG_SPECGXINC 0x2c90
-#define MGAREG_SPECGYINC 0x2c94
-#define MGAREG_SPECRSTART 0x2c80
-#define MGAREG_SPECRXINC 0x2c84
-#define MGAREG_SPECRYINC 0x2c88
-#define MGAREG_SRC0 0x1c30
-#define MGAREG_SRC1 0x1c34
-#define MGAREG_SRC2 0x1c38
-#define MGAREG_SRC3 0x1c3c
-#define MGAREG_SRCORG 0x2cb4
-
-# define SO_srcmap_MASK 0xfffffffe /* bit 0 */
-# define SO_srcmap_fb 0x0
-# define SO_srcmap_sys 0x1
-# define SO_srcacc_MASK 0xfffffffd /* bit 1 */
-# define SO_srcacc_pci 0x0
-# define SO_srcacc_agp 0x2
-# define SO_srcorg_MASK 0x7 /* bits 3-31 */
-# define SO_srcorg_SHIFT 3
-
-#define MGAREG_STATUS 0x1e14
-
-# define STAT_softrapen_MASK 0xfffffffe /* bit 0 */
-# define STAT_softrapen_disable 0x0
-# define STAT_softrapen_enable 0x1
-# define STAT_pickpen_MASK 0xfffffffb /* bit 2 */
-# define STAT_pickpen_disable 0x0
-# define STAT_pickpen_enable 0x4
-# define STAT_vsyncsts_MASK 0xfffffff7 /* bit 3 */
-# define STAT_vsyncsts_disable 0x0
-# define STAT_vsyncsts_enable 0x8
-# define STAT_vsyncpen_MASK 0xffffffef /* bit 4 */
-# define STAT_vsyncpen_disable 0x0
-# define STAT_vsyncpen_enable 0x10
-# define STAT_vlinepen_MASK 0xffffffdf /* bit 5 */
-# define STAT_vlinepen_disable 0x0
-# define STAT_vlinepen_enable 0x20
-# define STAT_extpen_MASK 0xffffffbf /* bit 6 */
-# define STAT_extpen_disable 0x0
-# define STAT_extpen_enable 0x40
-# define STAT_wpen_MASK 0xffffff7f /* bit 7 */
-# define STAT_wpen_disable 0x0
-# define STAT_wpen_enable 0x80
-# define STAT_wcpen_MASK 0xfffffeff /* bit 8 */
-# define STAT_wcpen_disable 0x0
-# define STAT_wcpen_enable 0x100
-# define STAT_dwgengsts_MASK 0xfffeffff /* bit 16 */
-# define STAT_dwgengsts_disable 0x0
-# define STAT_dwgengsts_enable 0x10000
-# define STAT_endprdmasts_MASK 0xfffdffff /* bit 17 */
-# define STAT_endprdmasts_disable 0x0
-# define STAT_endprdmasts_enable 0x20000
-# define STAT_wbusy_MASK 0xfffbffff /* bit 18 */
-# define STAT_wbusy_disable 0x0
-# define STAT_wbusy_enable 0x40000
-# define STAT_swflag_MASK 0xfffffff /* bits 28-31 */
-# define STAT_swflag_SHIFT 28
-
-#define MGAREG_STENCIL 0x2cc8
-
-# define S_sref_MASK 0xffffff00 /* bits 0-7 */
-# define S_sref_SHIFT 0
-# define S_smsk_MASK 0xffff00ff /* bits 8-15 */
-# define S_smsk_SHIFT 8
-# define S_swtmsk_MASK 0xff00ffff /* bits 16-23 */
-# define S_swtmsk_SHIFT 16
-
-#define MGAREG_STENCILCTL 0x2ccc
-
-# define SC_smode_MASK 0xfffffff8 /* bits 0-2 */
-# define SC_smode_salways 0x0 /* val 0, shift 0 */
-# define SC_smode_snever 0x1 /* val 1, shift 0 */
-# define SC_smode_se 0x2 /* val 2, shift 0 */
-# define SC_smode_sne 0x3 /* val 3, shift 0 */
-# define SC_smode_slt 0x4 /* val 4, shift 0 */
-# define SC_smode_slte 0x5 /* val 5, shift 0 */
-# define SC_smode_sgt 0x6 /* val 6, shift 0 */
-# define SC_smode_sgte 0x7 /* val 7, shift 0 */
-# define SC_sfailop_MASK 0xffffffc7 /* bits 3-5 */
-# define SC_sfailop_keep 0x0 /* val 0, shift 3 */
-# define SC_sfailop_zero 0x8 /* val 1, shift 3 */
-# define SC_sfailop_replace 0x10 /* val 2, shift 3 */
-# define SC_sfailop_incrsat 0x18 /* val 3, shift 3 */
-# define SC_sfailop_decrsat 0x20 /* val 4, shift 3 */
-# define SC_sfailop_invert 0x28 /* val 5, shift 3 */
-# define SC_sfailop_incr 0x30 /* val 6, shift 3 */
-# define SC_sfailop_decr 0x38 /* val 7, shift 3 */
-# define SC_szfailop_MASK 0xfffffe3f /* bits 6-8 */
-# define SC_szfailop_keep 0x0 /* val 0, shift 6 */
-# define SC_szfailop_zero 0x40 /* val 1, shift 6 */
-# define SC_szfailop_replace 0x80 /* val 2, shift 6 */
-# define SC_szfailop_incrsat 0xc0 /* val 3, shift 6 */
-# define SC_szfailop_decrsat 0x100 /* val 4, shift 6 */
-# define SC_szfailop_invert 0x140 /* val 5, shift 6 */
-# define SC_szfailop_incr 0x180 /* val 6, shift 6 */
-# define SC_szfailop_decr 0x1c0 /* val 7, shift 6 */
-# define SC_szpassop_MASK 0xfffff1ff /* bits 9-11 */
-# define SC_szpassop_keep 0x0 /* val 0, shift 9 */
-# define SC_szpassop_zero 0x200 /* val 1, shift 9 */
-# define SC_szpassop_replace 0x400 /* val 2, shift 9 */
-# define SC_szpassop_incrsat 0x600 /* val 3, shift 9 */
-# define SC_szpassop_decrsat 0x800 /* val 4, shift 9 */
-# define SC_szpassop_invert 0xa00 /* val 5, shift 9 */
-# define SC_szpassop_incr 0xc00 /* val 6, shift 9 */
-# define SC_szpassop_decr 0xe00 /* val 7, shift 9 */
-
-#define MGAREG_TDUALSTAGE0 0x2cf8
-
-# define TD0_color_arg2_MASK 0xfffffffc /* bits 0-1 */
-# define TD0_color_arg2_diffuse 0x0 /* val 0, shift 0 */
-# define TD0_color_arg2_specular 0x1 /* val 1, shift 0 */
-# define TD0_color_arg2_fcol 0x2 /* val 2, shift 0 */
-# define TD0_color_arg2_prevstage 0x3 /* val 3, shift 0 */
-# define TD0_color_alpha_MASK 0xffffffe3 /* bits 2-4 */
-# define TD0_color_alpha_diffuse 0x0 /* val 0, shift 2 */
-# define TD0_color_alpha_fcol 0x4 /* val 1, shift 2 */
-# define TD0_color_alpha_currtex 0x8 /* val 2, shift 2 */
-# define TD0_color_alpha_prevtex 0xc /* val 3, shift 2 */
-# define TD0_color_alpha_prevstage 0x10 /* val 4, shift 2 */
-# define TD0_color_arg1_replicatealpha_MASK 0xffffffdf /* bit 5 */
-# define TD0_color_arg1_replicatealpha_disable 0x0
-# define TD0_color_arg1_replicatealpha_enable 0x20
-# define TD0_color_arg1_inv_MASK 0xffffffbf /* bit 6 */
-# define TD0_color_arg1_inv_disable 0x0
-# define TD0_color_arg1_inv_enable 0x40
-# define TD0_color_arg2_replicatealpha_MASK 0xffffff7f /* bit 7 */
-# define TD0_color_arg2_replicatealpha_disable 0x0
-# define TD0_color_arg2_replicatealpha_enable 0x80
-# define TD0_color_arg2_inv_MASK 0xfffffeff /* bit 8 */
-# define TD0_color_arg2_inv_disable 0x0
-# define TD0_color_arg2_inv_enable 0x100
-# define TD0_color_alpha1inv_MASK 0xfffffdff /* bit 9 */
-# define TD0_color_alpha1inv_disable 0x0
-# define TD0_color_alpha1inv_enable 0x200
-# define TD0_color_alpha2inv_MASK 0xfffffbff /* bit 10 */
-# define TD0_color_alpha2inv_disable 0x0
-# define TD0_color_alpha2inv_enable 0x400
-# define TD0_color_arg1mul_MASK 0xfffff7ff /* bit 11 */
-# define TD0_color_arg1mul_disable 0x0 /* val 0, shift 11 */
-# define TD0_color_arg1mul_alpha1 0x800 /* val 1, shift 11 */
-# define TD0_color_arg2mul_MASK 0xffffefff /* bit 12 */
-# define TD0_color_arg2mul_disable 0x0 /* val 0, shift 12 */
-# define TD0_color_arg2mul_alpha2 0x1000 /* val 1, shift 12 */
-# define TD0_color_arg1add_MASK 0xffffdfff /* bit 13 */
-# define TD0_color_arg1add_disable 0x0 /* val 0, shift 13 */
-# define TD0_color_arg1add_mulout 0x2000 /* val 1, shift 13 */
-# define TD0_color_arg2add_MASK 0xffffbfff /* bit 14 */
-# define TD0_color_arg2add_disable 0x0 /* val 0, shift 14 */
-# define TD0_color_arg2add_mulout 0x4000 /* val 1, shift 14 */
-# define TD0_color_modbright_MASK 0xfffe7fff /* bits 15-16 */
-# define TD0_color_modbright_disable 0x0 /* val 0, shift 15 */
-# define TD0_color_modbright_2x 0x8000 /* val 1, shift 15 */
-# define TD0_color_modbright_4x 0x10000 /* val 2, shift 15 */
-# define TD0_color_add_MASK 0xfffdffff /* bit 17 */
-# define TD0_color_add_sub 0x0 /* val 0, shift 17 */
-# define TD0_color_add_add 0x20000 /* val 1, shift 17 */
-# define TD0_color_add2x_MASK 0xfffbffff /* bit 18 */
-# define TD0_color_add2x_disable 0x0
-# define TD0_color_add2x_enable 0x40000
-# define TD0_color_addbias_MASK 0xfff7ffff /* bit 19 */
-# define TD0_color_addbias_disable 0x0
-# define TD0_color_addbias_enable 0x80000
-# define TD0_color_blend_MASK 0xffefffff /* bit 20 */
-# define TD0_color_blend_disable 0x0
-# define TD0_color_blend_enable 0x100000
-# define TD0_color_sel_MASK 0xff9fffff /* bits 21-22 */
-# define TD0_color_sel_arg1 0x0 /* val 0, shift 21 */
-# define TD0_color_sel_arg2 0x200000 /* val 1, shift 21 */
-# define TD0_color_sel_add 0x400000 /* val 2, shift 21 */
-# define TD0_color_sel_mul 0x600000 /* val 3, shift 21 */
-# define TD0_alpha_arg1_inv_MASK 0xff7fffff /* bit 23 */
-# define TD0_alpha_arg1_inv_disable 0x0
-# define TD0_alpha_arg1_inv_enable 0x800000
-# define TD0_alpha_arg2_MASK 0xfcffffff /* bits 24-25 */
-# define TD0_alpha_arg2_diffuse 0x0 /* val 0, shift 24 */
-# define TD0_alpha_arg2_fcol 0x1000000 /* val 1, shift 24 */
-# define TD0_alpha_arg2_prevtex 0x2000000 /* val 2, shift 24 */
-# define TD0_alpha_arg2_prevstage 0x3000000 /* val 3, shift 24 */
-# define TD0_alpha_arg2_inv_MASK 0xfbffffff /* bit 26 */
-# define TD0_alpha_arg2_inv_disable 0x0
-# define TD0_alpha_arg2_inv_enable 0x4000000
-# define TD0_alpha_add_MASK 0xf7ffffff /* bit 27 */
-# define TD0_alpha_add_disable 0x0
-# define TD0_alpha_add_enable 0x8000000
-# define TD0_alpha_addbias_MASK 0xefffffff /* bit 28 */
-# define TD0_alpha_addbias_disable 0x0
-# define TD0_alpha_addbias_enable 0x10000000
-# define TD0_alpha_add2x_MASK 0xdfffffff /* bit 29 */
-# define TD0_alpha_add2x_disable 0x0
-# define TD0_alpha_add2x_enable 0x20000000
-# define TD0_alpha_modbright_MASK 0xcfffffff /* bits 28-29 */
-# define TD0_alpha_modbright_disable 0x0 /* val 0, shift 28 */
-# define TD0_alpha_modbright_2x 0x10000000 /* val 1, shift 28 */
-# define TD0_alpha_modbright_4x 0x20000000 /* val 2, shift 28 */
-# define TD0_alpha_sel_MASK 0x3fffffff /* bits 30-31 */
-# define TD0_alpha_sel_arg1 0x0 /* val 0, shift 30 */
-# define TD0_alpha_sel_arg2 0x40000000 /* val 1, shift 30 */
-# define TD0_alpha_sel_add 0x80000000 /* val 2, shift 30 */
-# define TD0_alpha_sel_mul 0xc0000000 /* val 3, shift 30 */
-
-#define MGAREG_TDUALSTAGE1 0x2cfc
-
-# define TD1_color_arg2_MASK 0xfffffffc /* bits 0-1 */
-# define TD1_color_arg2_diffuse 0x0 /* val 0, shift 0 */
-# define TD1_color_arg2_specular 0x1 /* val 1, shift 0 */
-# define TD1_color_arg2_fcol 0x2 /* val 2, shift 0 */
-# define TD1_color_arg2_prevstage 0x3 /* val 3, shift 0 */
-# define TD1_color_alpha_MASK 0xffffffe3 /* bits 2-4 */
-# define TD1_color_alpha_diffuse 0x0 /* val 0, shift 2 */
-# define TD1_color_alpha_fcol 0x4 /* val 1, shift 2 */
-# define TD1_color_alpha_tex0 0x8 /* val 2, shift 2 */
-# define TD1_color_alpha_prevtex 0xc /* val 3, shift 2 */
-# define TD1_color_alpha_prevstage 0x10 /* val 4, shift 2 */
-# define TD1_color_arg1_replicatealpha_MASK 0xffffffdf /* bit 5 */
-# define TD1_color_arg1_replicatealpha_disable 0x0
-# define TD1_color_arg1_replicatealpha_enable 0x20
-# define TD1_color_arg1_inv_MASK 0xffffffbf /* bit 6 */
-# define TD1_color_arg1_inv_disable 0x0
-# define TD1_color_arg1_inv_enable 0x40
-# define TD1_color_arg2_replicatealpha_MASK 0xffffff7f /* bit 7 */
-# define TD1_color_arg2_replicatealpha_disable 0x0
-# define TD1_color_arg2_replicatealpha_enable 0x80
-# define TD1_color_arg2_inv_MASK 0xfffffeff /* bit 8 */
-# define TD1_color_arg2_inv_disable 0x0
-# define TD1_color_arg2_inv_enable 0x100
-# define TD1_color_alpha1inv_MASK 0xfffffdff /* bit 9 */
-# define TD1_color_alpha1inv_disable 0x0
-# define TD1_color_alpha1inv_enable 0x200
-# define TD1_color_alpha2inv_MASK 0xfffffbff /* bit 10 */
-# define TD1_color_alpha2inv_disable 0x0
-# define TD1_color_alpha2inv_enable 0x400
-# define TD1_color_arg1mul_MASK 0xfffff7ff /* bit 11 */
-# define TD1_color_arg1mul_disable 0x0 /* val 0, shift 11 */
-# define TD1_color_arg1mul_alpha1 0x800 /* val 1, shift 11 */
-# define TD1_color_arg2mul_MASK 0xffffefff /* bit 12 */
-# define TD1_color_arg2mul_disable 0x0 /* val 0, shift 12 */
-# define TD1_color_arg2mul_alpha2 0x1000 /* val 1, shift 12 */
-# define TD1_color_arg1add_MASK 0xffffdfff /* bit 13 */
-# define TD1_color_arg1add_disable 0x0 /* val 0, shift 13 */
-# define TD1_color_arg1add_mulout 0x2000 /* val 1, shift 13 */
-# define TD1_color_arg2add_MASK 0xffffbfff /* bit 14 */
-# define TD1_color_arg2add_disable 0x0 /* val 0, shift 14 */
-# define TD1_color_arg2add_mulout 0x4000 /* val 1, shift 14 */
-# define TD1_color_modbright_MASK 0xfffe7fff /* bits 15-16 */
-# define TD1_color_modbright_disable 0x0 /* val 0, shift 15 */
-# define TD1_color_modbright_2x 0x8000 /* val 1, shift 15 */
-# define TD1_color_modbright_4x 0x10000 /* val 2, shift 15 */
-# define TD1_color_add_MASK 0xfffdffff /* bit 17 */
-# define TD1_color_add_sub 0x0 /* val 0, shift 17 */
-# define TD1_color_add_add 0x20000 /* val 1, shift 17 */
-# define TD1_color_add2x_MASK 0xfffbffff /* bit 18 */
-# define TD1_color_add2x_disable 0x0
-# define TD1_color_add2x_enable 0x40000
-# define TD1_color_addbias_MASK 0xfff7ffff /* bit 19 */
-# define TD1_color_addbias_disable 0x0
-# define TD1_color_addbias_enable 0x80000
-# define TD1_color_blend_MASK 0xffefffff /* bit 20 */
-# define TD1_color_blend_disable 0x0
-# define TD1_color_blend_enable 0x100000
-# define TD1_color_sel_MASK 0xff9fffff /* bits 21-22 */
-# define TD1_color_sel_arg1 0x0 /* val 0, shift 21 */
-# define TD1_color_sel_arg2 0x200000 /* val 1, shift 21 */
-# define TD1_color_sel_add 0x400000 /* val 2, shift 21 */
-# define TD1_color_sel_mul 0x600000 /* val 3, shift 21 */
-# define TD1_alpha_arg1_inv_MASK 0xff7fffff /* bit 23 */
-# define TD1_alpha_arg1_inv_disable 0x0
-# define TD1_alpha_arg1_inv_enable 0x800000
-# define TD1_alpha_arg2_MASK 0xfcffffff /* bits 24-25 */
-# define TD1_alpha_arg2_diffuse 0x0 /* val 0, shift 24 */
-# define TD1_alpha_arg2_fcol 0x1000000 /* val 1, shift 24 */
-# define TD1_alpha_arg2_prevtex 0x2000000 /* val 2, shift 24 */
-# define TD1_alpha_arg2_prevstage 0x3000000 /* val 3, shift 24 */
-# define TD1_alpha_arg2_inv_MASK 0xfbffffff /* bit 26 */
-# define TD1_alpha_arg2_inv_disable 0x0
-# define TD1_alpha_arg2_inv_enable 0x4000000
-# define TD1_alpha_add_MASK 0xf7ffffff /* bit 27 */
-# define TD1_alpha_add_disable 0x0
-# define TD1_alpha_add_enable 0x8000000
-# define TD1_alpha_addbias_MASK 0xefffffff /* bit 28 */
-# define TD1_alpha_addbias_disable 0x0
-# define TD1_alpha_addbias_enable 0x10000000
-# define TD1_alpha_add2x_MASK 0xdfffffff /* bit 29 */
-# define TD1_alpha_add2x_disable 0x0
-# define TD1_alpha_add2x_enable 0x20000000
-# define TD1_alpha_modbright_MASK 0xcfffffff /* bits 28-29 */
-# define TD1_alpha_modbright_disable 0x0 /* val 0, shift 28 */
-# define TD1_alpha_modbright_2x 0x10000000 /* val 1, shift 28 */
-# define TD1_alpha_modbright_4x 0x20000000 /* val 2, shift 28 */
-# define TD1_alpha_sel_MASK 0x3fffffff /* bits 30-31 */
-# define TD1_alpha_sel_arg1 0x0 /* val 0, shift 30 */
-# define TD1_alpha_sel_arg2 0x40000000 /* val 1, shift 30 */
-# define TD1_alpha_sel_add 0x80000000 /* val 2, shift 30 */
-# define TD1_alpha_sel_mul 0xc0000000 /* val 3, shift 30 */
-
-#define MGAREG_TEST0 0x1e48
-
-# define TST_ramtsten_MASK 0xfffffffe /* bit 0 */
-# define TST_ramtsten_disable 0x0
-# define TST_ramtsten_enable 0x1
-# define TST_ramtstdone_MASK 0xfffffffd /* bit 1 */
-# define TST_ramtstdone_disable 0x0
-# define TST_ramtstdone_enable 0x2
-# define TST_wramtstpass_MASK 0xfffffffb /* bit 2 */
-# define TST_wramtstpass_disable 0x0
-# define TST_wramtstpass_enable 0x4
-# define TST_tcachetstpass_MASK 0xfffffff7 /* bit 3 */
-# define TST_tcachetstpass_disable 0x0
-# define TST_tcachetstpass_enable 0x8
-# define TST_tluttstpass_MASK 0xffffffef /* bit 4 */
-# define TST_tluttstpass_disable 0x0
-# define TST_tluttstpass_enable 0x10
-# define TST_luttstpass_MASK 0xffffffdf /* bit 5 */
-# define TST_luttstpass_disable 0x0
-# define TST_luttstpass_enable 0x20
-# define TST_besramtstpass_MASK 0xffffffbf /* bit 6 */
-# define TST_besramtstpass_disable 0x0
-# define TST_besramtstpass_enable 0x40
-# define TST_ringen_MASK 0xfffffeff /* bit 8 */
-# define TST_ringen_disable 0x0
-# define TST_ringen_enable 0x100
-# define TST_apllbyp_MASK 0xfffffdff /* bit 9 */
-# define TST_apllbyp_disable 0x0
-# define TST_apllbyp_enable 0x200
-# define TST_hiten_MASK 0xfffffbff /* bit 10 */
-# define TST_hiten_disable 0x0
-# define TST_hiten_enable 0x400
-# define TST_tmode_MASK 0xffffc7ff /* bits 11-13 */
-# define TST_tmode_SHIFT 11
-# define TST_tclksel_MASK 0xfffe3fff /* bits 14-16 */
-# define TST_tclksel_SHIFT 14
-# define TST_ringcnten_MASK 0xfffdffff /* bit 17 */
-# define TST_ringcnten_disable 0x0
-# define TST_ringcnten_enable 0x20000
-# define TST_ringcnt_MASK 0xc003ffff /* bits 18-29 */
-# define TST_ringcnt_SHIFT 18
-# define TST_ringcntclksl_MASK 0xbfffffff /* bit 30 */
-# define TST_ringcntclksl_disable 0x0
-# define TST_ringcntclksl_enable 0x40000000
-# define TST_biosboot_MASK 0x7fffffff /* bit 31 */
-# define TST_biosboot_disable 0x0
-# define TST_biosboot_enable 0x80000000
-
-#define MGAREG_TEXBORDERCOL 0x2c5c
-#define MGAREG_TEXCTL 0x2c30
-
-# define TMC_tformat_MASK 0xfffffff0 /* bits 0-3 */
-# define TMC_tformat_tw4 0x0 /* val 0, shift 0 */
-# define TMC_tformat_tw8 0x1 /* val 1, shift 0 */
-# define TMC_tformat_tw15 0x2 /* val 2, shift 0 */
-# define TMC_tformat_tw16 0x3 /* val 3, shift 0 */
-# define TMC_tformat_tw12 0x4 /* val 4, shift 0 */
-# define TMC_tformat_tw32 0x6 /* val 6, shift 0 */
-# define TMC_tformat_tw8a 0x7 /* val 7, shift 0 */
-# define TMC_tformat_tw8al 0x8 /* val 8, shift 0 */
-# define TMC_tformat_tw422 0xa /* val 10, shift 0 */
-# define TMC_tformat_tw422uyvy 0xb /* val 11, shift 0 */
-# define TMC_tpitchlin_MASK 0xfffffeff /* bit 8 */
-# define TMC_tpitchlin_disable 0x0
-# define TMC_tpitchlin_enable 0x100
-# define TMC_tpitchext_MASK 0xfff001ff /* bits 9-19 */
-# define TMC_tpitchext_SHIFT 9
-# define TMC_tpitch_MASK 0xfff8ffff /* bits 16-18 */
-# define TMC_tpitch_SHIFT 16
-# define TMC_owalpha_MASK 0xffbfffff /* bit 22 */
-# define TMC_owalpha_disable 0x0
-# define TMC_owalpha_enable 0x400000
-# define TMC_azeroextend_MASK 0xff7fffff /* bit 23 */
-# define TMC_azeroextend_disable 0x0
-# define TMC_azeroextend_enable 0x800000
-# define TMC_decalckey_MASK 0xfeffffff /* bit 24 */
-# define TMC_decalckey_disable 0x0
-# define TMC_decalckey_enable 0x1000000
-# define TMC_takey_MASK 0xfdffffff /* bit 25 */
-# define TMC_takey_0 0x0
-# define TMC_takey_1 0x2000000
-# define TMC_tamask_MASK 0xfbffffff /* bit 26 */
-# define TMC_tamask_0 0x0
-# define TMC_tamask_1 0x4000000
-# define TMC_clampv_MASK 0xf7ffffff /* bit 27 */
-# define TMC_clampv_disable 0x0
-# define TMC_clampv_enable 0x8000000
-# define TMC_clampu_MASK 0xefffffff /* bit 28 */
-# define TMC_clampu_disable 0x0
-# define TMC_clampu_enable 0x10000000
-# define TMC_tmodulate_MASK 0xdfffffff /* bit 29 */
-# define TMC_tmodulate_disable 0x0
-# define TMC_tmodulate_enable 0x20000000
-# define TMC_strans_MASK 0xbfffffff /* bit 30 */
-# define TMC_strans_disable 0x0
-# define TMC_strans_enable 0x40000000
-# define TMC_itrans_MASK 0x7fffffff /* bit 31 */
-# define TMC_itrans_disable 0x0
-# define TMC_itrans_enable 0x80000000
-
-#define MGAREG_TEXCTL2 0x2c3c
-
-# define TMC_decalblend_MASK 0xfffffffe /* bit 0 */
-# define TMC_decalblend_disable 0x0
-# define TMC_decalblend_enable 0x1
-# define TMC_idecal_MASK 0xfffffffd /* bit 1 */
-# define TMC_idecal_disable 0x0
-# define TMC_idecal_enable 0x2
-# define TMC_decaldis_MASK 0xfffffffb /* bit 2 */
-# define TMC_decaldis_disable 0x0
-# define TMC_decaldis_enable 0x4
-# define TMC_ckstransdis_MASK 0xffffffef /* bit 4 */
-# define TMC_ckstransdis_disable 0x0
-# define TMC_ckstransdis_enable 0x10
-# define TMC_borderen_MASK 0xffffffdf /* bit 5 */
-# define TMC_borderen_disable 0x0
-# define TMC_borderen_enable 0x20
-# define TMC_specen_MASK 0xffffffbf /* bit 6 */
-# define TMC_specen_disable 0x0
-# define TMC_specen_enable 0x40
-# define TMC_dualtex_MASK 0xffffff7f /* bit 7 */
-# define TMC_dualtex_disable 0x0
-# define TMC_dualtex_enable 0x80
-# define TMC_tablefog_MASK 0xfffffeff /* bit 8 */
-# define TMC_tablefog_disable 0x0
-# define TMC_tablefog_enable 0x100
-# define TMC_bumpmap_MASK 0xfffffdff /* bit 9 */
-# define TMC_bumpmap_disable 0x0
-# define TMC_bumpmap_enable 0x200
-# define TMC_map1_MASK 0x7fffffff /* bit 31 */
-# define TMC_map1_disable 0x0
-# define TMC_map1_enable 0x80000000
-
-#define MGAREG_TEXFILTER 0x2c58
-
-# define TF_minfilter_MASK 0xfffffff0 /* bits 0-3 */
-# define TF_minfilter_nrst 0x0 /* val 0, shift 0 */
-# define TF_minfilter_bilin 0x2 /* val 2, shift 0 */
-# define TF_minfilter_cnst 0x3 /* val 3, shift 0 */
-# define TF_minfilter_mm1s 0x8 /* val 8, shift 0 */
-# define TF_minfilter_mm2s 0x9 /* val 9, shift 0 */
-# define TF_minfilter_mm4s 0xa /* val 10, shift 0 */
-# define TF_minfilter_mm8s 0xc /* val 12, shift 0 */
-# define TF_magfilter_MASK 0xffffff0f /* bits 4-7 */
-# define TF_magfilter_nrst 0x0 /* val 0, shift 4 */
-# define TF_magfilter_bilin 0x20 /* val 2, shift 4 */
-# define TF_magfilter_cnst 0x30 /* val 3, shift 4 */
-# define TF_uvoffset_SHIFT 17
-# define TF_uvoffset_OGL (0U << TF_uvoffset_SHIFT)
-# define TF_uvoffset_D3D (1U << TF_uvoffset_SHIFT)
-# define TF_uvoffset_MASK (~(1U << TF_uvoffset_SHIFT))
-# define TF_reserved_MASK (~0x1ff00) /* bits 8-16 */
-# define TF_mapnbhigh_SHIFT 18
-# define TF_mapnbhigh_MASK (~(1U << TF_mapnbhigh_SHIFT))
-# define TF_avgstride_MASK 0xfff7ffff /* bit 19 */
-# define TF_avgstride_disable 0x0
-# define TF_avgstride_enable 0x80000
-# define TF_filteralpha_MASK 0xffefffff /* bit 20 */
-# define TF_filteralpha_disable 0x0
-# define TF_filteralpha_enable 0x100000
-# define TF_fthres_MASK 0xe01fffff /* bits 21-28 */
-# define TF_fthres_SHIFT 21
-# define TF_mapnb_MASK 0x1fffffff /* bits 29-31 */
-# define TF_mapnb_SHIFT 29
-
-#define MGAREG_TEXHEIGHT 0x2c2c
-
-# define TH_th_MASK 0xffffffc0 /* bits 0-5 */
-# define TH_th_SHIFT 0
-# define TH_rfh_MASK 0xffff81ff /* bits 9-14 */
-# define TH_rfh_SHIFT 9
-# define TH_thmask_MASK 0xe003ffff /* bits 18-28 */
-# define TH_thmask_SHIFT 18
-
-#define MGAREG_TEXORG 0x2c24
-
-# define TO_texorgmap_MASK 0xfffffffe /* bit 0 */
-# define TO_texorgmap_fb 0x0
-# define TO_texorgmap_sys 0x1
-# define TO_texorgacc_MASK 0xfffffffd /* bit 1 */
-# define TO_texorgacc_pci 0x0
-# define TO_texorgacc_agp 0x2
-# define TO_texorgoffsetsel 0x4
-# define TO_texorg_MASK 0x1f /* bits 5-31 */
-# define TO_texorg_SHIFT 5
-
-#define MGAREG_TEXORG1 0x2ca4
-#define MGAREG_TEXORG2 0x2ca8
-#define MGAREG_TEXORG3 0x2cac
-#define MGAREG_TEXORG4 0x2cb0
-#define MGAREG_TEXTRANS 0x2c34
-
-# define TT_tckey_MASK 0xffff0000 /* bits 0-15 */
-# define TT_tckey_SHIFT 0
-# define TT_tkmask_MASK 0xffff /* bits 16-31 */
-# define TT_tkmask_SHIFT 16
-
-#define MGAREG_TEXTRANSHIGH 0x2c38
-
-# define TT_tckeyh_MASK 0xffff0000 /* bits 0-15 */
-# define TT_tckeyh_SHIFT 0
-# define TT_tkmaskh_MASK 0xffff /* bits 16-31 */
-# define TT_tkmaskh_SHIFT 16
-
-#define MGAREG_TEXWIDTH 0x2c28
-
-# define TW_tw_MASK 0xffffffc0 /* bits 0-5 */
-# define TW_tw_SHIFT 0
-# define TW_rfw_MASK 0xffff81ff /* bits 9-14 */
-# define TW_rfw_SHIFT 9
-# define TW_twmask_MASK 0xe003ffff /* bits 18-28 */
-# define TW_twmask_SHIFT 18
-
-#define MGAREG_TMR0 0x2c00
-#define MGAREG_TMR1 0x2c04
-#define MGAREG_TMR2 0x2c08
-#define MGAREG_TMR3 0x2c0c
-#define MGAREG_TMR4 0x2c10
-#define MGAREG_TMR5 0x2c14
-#define MGAREG_TMR6 0x2c18
-#define MGAREG_TMR7 0x2c1c
-#define MGAREG_TMR8 0x2c20
-#define MGAREG_VBIADDR0 0x3e08
-#define MGAREG_VBIADDR1 0x3e0c
-#define MGAREG_VCOUNT 0x1e20
-#define MGAREG_WACCEPTSEQ 0x1dd4
-
-# define WAS_seqdst0_MASK 0xffffffc0 /* bits 0-5 */
-# define WAS_seqdst0_SHIFT 0
-# define WAS_seqdst1_MASK 0xfffff03f /* bits 6-11 */
-# define WAS_seqdst1_SHIFT 6
-# define WAS_seqdst2_MASK 0xfffc0fff /* bits 12-17 */
-# define WAS_seqdst2_SHIFT 12
-# define WAS_seqdst3_MASK 0xff03ffff /* bits 18-23 */
-# define WAS_seqdst3_SHIFT 18
-# define WAS_seqlen_MASK 0xfcffffff /* bits 24-25 */
-# define WAS_wfirsttag_MASK 0xfbffffff /* bit 26 */
-# define WAS_wfirsttag_disable 0x0
-# define WAS_wfirsttag_enable 0x4000000
-# define WAS_wsametag_MASK 0xf7ffffff /* bit 27 */
-# define WAS_wsametag_disable 0x0
-# define WAS_wsametag_enable 0x8000000
-# define WAS_seqoff_MASK 0xefffffff /* bit 28 */
-# define WAS_seqoff_disable 0x0
-# define WAS_seqoff_enable 0x10000000
-
-#define MGAREG_WCODEADDR 0x1e6c
-
-# define WMA_wcodeaddr_MASK 0xff /* bits 8-31 */
-# define WMA_wcodeaddr_SHIFT 8
-
-#define MGAREG_WFLAG 0x1dc4
-
-# define WF_walustsflag_MASK 0xffffff00 /* bits 0-7 */
-# define WF_walustsflag_SHIFT 0
-# define WF_walucfgflag_MASK 0xffff00ff /* bits 8-15 */
-# define WF_walucfgflag_SHIFT 8
-# define WF_wprgflag_MASK 0xffff /* bits 16-31 */
-# define WF_wprgflag_SHIFT 16
-
-#define MGAREG_WFLAG1 0x1de0
-
-# define WF1_walustsflag1_MASK 0xffffff00 /* bits 0-7 */
-# define WF1_walustsflag1_SHIFT 0
-# define WF1_walucfgflag1_MASK 0xffff00ff /* bits 8-15 */
-# define WF1_walucfgflag1_SHIFT 8
-# define WF1_wprgflag1_MASK 0xffff /* bits 16-31 */
-# define WF1_wprgflag1_SHIFT 16
-
-#define MGAREG_WFLAGNB 0x1e64
-#define MGAREG_WFLAGNB1 0x1e08
-#define MGAREG_WGETMSB 0x1dc8
-
-# define WGV_wgetmsbmin_MASK 0xffffffe0 /* bits 0-4 */
-# define WGV_wgetmsbmin_SHIFT 0
-# define WGV_wgetmsbmax_MASK 0xffffe0ff /* bits 8-12 */
-# define WGV_wgetmsbmax_SHIFT 8
-# define WGV_wbrklefttop_MASK 0xfffeffff /* bit 16 */
-# define WGV_wbrklefttop_disable 0x0
-# define WGV_wbrklefttop_enable 0x10000
-# define WGV_wfastcrop_MASK 0xfffdffff /* bit 17 */
-# define WGV_wfastcrop_disable 0x0
-# define WGV_wfastcrop_enable 0x20000
-# define WGV_wcentersnap_MASK 0xfffbffff /* bit 18 */
-# define WGV_wcentersnap_disable 0x0
-# define WGV_wcentersnap_enable 0x40000
-# define WGV_wbrkrighttop_MASK 0xfff7ffff /* bit 19 */
-# define WGV_wbrkrighttop_disable 0x0
-# define WGV_wbrkrighttop_enable 0x80000
-
-#define MGAREG_WIADDR 0x1dc0
-
-# define WIA_wmode_MASK 0xfffffffc /* bits 0-1 */
-# define WIA_wmode_suspend 0x0 /* val 0, shift 0 */
-# define WIA_wmode_resume 0x1 /* val 1, shift 0 */
-# define WIA_wmode_jump 0x2 /* val 2, shift 0 */
-# define WIA_wmode_start 0x3 /* val 3, shift 0 */
-# define WIA_wagp_MASK 0xfffffffb /* bit 2 */
-# define WIA_wagp_pci 0x0
-# define WIA_wagp_agp 0x4
-# define WIA_wiaddr_MASK 0x7 /* bits 3-31 */
-# define WIA_wiaddr_SHIFT 3
-
-#define MGAREG_WIADDR2 0x1dd8
-
-# define WIA2_wmode_MASK 0xfffffffc /* bits 0-1 */
-# define WIA2_wmode_suspend 0x0 /* val 0, shift 0 */
-# define WIA2_wmode_resume 0x1 /* val 1, shift 0 */
-# define WIA2_wmode_jump 0x2 /* val 2, shift 0 */
-# define WIA2_wmode_start 0x3 /* val 3, shift 0 */
-# define WIA2_wagp_MASK 0xfffffffb /* bit 2 */
-# define WIA2_wagp_pci 0x0
-# define WIA2_wagp_agp 0x4
-# define WIA2_wiaddr_MASK 0x7 /* bits 3-31 */
-# define WIA2_wiaddr_SHIFT 3
-
-#define MGAREG_WIADDRNB 0x1e60
-#define MGAREG_WIADDRNB1 0x1e04
-#define MGAREG_WIADDRNB2 0x1e00
-#define MGAREG_WIMEMADDR 0x1e68
-
-# define WIMA_wimemaddr_MASK 0xffffff00 /* bits 0-7 */
-# define WIMA_wimemaddr_SHIFT 0
-
-#define MGAREG_WIMEMDATA 0x2000
-#define MGAREG_WIMEMDATA1 0x2100
-#define MGAREG_WMISC 0x1e70
-
-# define WM_wucodecache_MASK 0xfffffffe /* bit 0 */
-# define WM_wucodecache_disable 0x0
-# define WM_wucodecache_enable 0x1
-# define WM_wmaster_MASK 0xfffffffd /* bit 1 */
-# define WM_wmaster_disable 0x0
-# define WM_wmaster_enable 0x2
-# define WM_wcacheflush_MASK 0xfffffff7 /* bit 3 */
-# define WM_wcacheflush_disable 0x0
-# define WM_wcacheflush_enable 0x8
-
-#define MGAREG_WR 0x2d00
-#define MGAREG_WVRTXSZ 0x1dcc
-
-# define WVS_wvrtxsz_MASK 0xffffffc0 /* bits 0-5 */
-# define WVS_wvrtxsz_SHIFT 0
-# define WVS_primsz_MASK 0xffffc0ff /* bits 8-13 */
-# define WVS_primsz_SHIFT 8
-
-#define MGAREG_XDST 0x1cb0
-#define MGAREG_XYEND 0x1c44
-
-# define XYEA_x_end_MASK 0xffff0000 /* bits 0-15 */
-# define XYEA_x_end_SHIFT 0
-# define XYEA_y_end_MASK 0xffff /* bits 16-31 */
-# define XYEA_y_end_SHIFT 16
-
-#define MGAREG_XYSTRT 0x1c40
-
-# define XYSA_x_start_MASK 0xffff0000 /* bits 0-15 */
-# define XYSA_x_start_SHIFT 0
-# define XYSA_y_start_MASK 0xffff /* bits 16-31 */
-# define XYSA_y_start_SHIFT 16
-
-#define MGAREG_YBOT 0x1c9c
-#define MGAREG_YDST 0x1c90
-
-# define YA_ydst_MASK 0xff800000 /* bits 0-22 */
-# define YA_ydst_SHIFT 0
-# define YA_sellin_MASK 0x1fffffff /* bits 29-31 */
-# define YA_sellin_SHIFT 29
-
-#define MGAREG_YDSTLEN 0x1c88
-
-# define YDL_length_MASK 0xffff0000 /* bits 0-15 */
-# define YDL_length_SHIFT 0
-# define YDL_yval_MASK 0xffff /* bits 16-31 */
-# define YDL_yval_SHIFT 16
-
-#define MGAREG_YDSTORG 0x1c94
-#define MGAREG_YTOP 0x1c98
-#define MGAREG_ZORG 0x1c0c
-
-# define ZO_zorgmap_MASK 0xfffffffe /* bit 0 */
-# define ZO_zorgmap_fb 0x0
-# define ZO_zorgmap_sys 0x1
-# define ZO_zorgacc_MASK 0xfffffffd /* bit 1 */
-# define ZO_zorgacc_pci 0x0
-# define ZO_zorgacc_agp 0x2
-# define ZO_zorg_MASK 0x3 /* bits 2-31 */
-# define ZO_zorg_SHIFT 2
-
-
-
-
-/**************** (END) AUTOMATICLY GENERATED REGISTER FILE ******************/
-
-/* Copied from mga_drv.h kernel file.
- */
-
-#define MGA_ILOAD_ALIGN 64
-#define MGA_ILOAD_MASK (MGA_ILOAD_ALIGN - 1)
-
-#endif /* _MGAREGS_H_ */
-
diff --git a/src/mesa/drivers/dri/mga/mgarender.c b/src/mesa/drivers/dri/mga/mgarender.c
deleted file mode 100644
index f10a91adcec..00000000000
--- a/src/mesa/drivers/dri/mga/mgarender.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/**************************************************************************
-
-Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
- VA Linux Systems Inc., Fremont, California.
-
-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
-on 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
-ATI, VA LINUX SYSTEMS AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell
- *
- */
-
-
-/*
- * Render unclipped vertex buffers by emitting vertices directly to
- * dma buffers. Use strip/fan hardware primitives where possible.
- * Simulate missing primitives with indexed vertices.
- */
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/imports.h"
-#include "main/mtypes.h"
-
-#include "math/m_xform.h"
-
-#include "tnl/t_context.h"
-
-#include "mgacontext.h"
-#include "mgatris.h"
-#include "mgaioctl.h"
-#include "mgavb.h"
-
-#define HAVE_POINTS 0
-#define HAVE_LINES 0
-#define HAVE_LINE_STRIPS 0
-#define HAVE_TRIANGLES 1
-#define HAVE_TRI_STRIPS 1
-#define HAVE_TRI_STRIP_1 0
-#define HAVE_TRI_FANS 1
-#define HAVE_POLYGONS 0
-#define HAVE_QUADS 0
-#define HAVE_QUAD_STRIPS 0
-
-#define HAVE_ELTS 0 /* for now */
-
-static void mgaDmaPrimitive( struct gl_context *ctx, GLenum prim )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint hwprim;
-
- switch (prim) {
- case GL_TRIANGLES:
- hwprim = MGA_WA_TRIANGLES;
- break;
- case GL_TRIANGLE_STRIP:
- if (mmesa->vertex_size == 8)
- hwprim = MGA_WA_TRISTRIP_T0;
- else
- hwprim = MGA_WA_TRISTRIP_T0T1;
- break;
- case GL_TRIANGLE_FAN:
- if (mmesa->vertex_size == 8)
- hwprim = MGA_WA_TRIFAN_T0;
- else
- hwprim = MGA_WA_TRIFAN_T0T1;
- break;
- default:
- return;
- }
-
- mgaRasterPrimitive( ctx, GL_TRIANGLES, hwprim );
-}
-
-
-#define LOCAL_VARS mgaContextPtr mmesa = MGA_CONTEXT(ctx)
-#define INIT( prim ) do { \
- if (0) fprintf(stderr, "%s\n", __FUNCTION__); \
- FLUSH_BATCH(mmesa); \
- mgaDmaPrimitive( ctx, prim ); \
-} while (0)
-#define FLUSH() FLUSH_BATCH( mmesa )
-#define GET_CURRENT_VB_MAX_VERTS() \
- 0 /* fix me */
-#define GET_SUBSEQUENT_VB_MAX_VERTS() \
- MGA_BUFFER_SIZE / (mmesa->vertex_size * 4)
-
-
-#define ALLOC_VERTS( nr ) \
- mgaAllocDmaLow( mmesa, (nr) * mmesa->vertex_size * 4)
-#define EMIT_VERTS( ctx, j, nr, buf ) \
- mga_emit_contiguous_verts(ctx, j, (j)+(nr), buf)
-
-
-#define TAG(x) mga_##x
-#include "tnl_dd/t_dd_dmatmp.h"
-
-
-
-/**********************************************************************/
-/* Render pipeline stage */
-/**********************************************************************/
-
-
-static GLboolean mga_run_render( struct gl_context *ctx,
- struct tnl_pipeline_stage *stage )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- GLuint i;
-
- /* Don't handle clipping or indexed vertices or vertex manipulations.
- */
- if (mmesa->RenderIndex != 0 ||
- !mga_validate_render( ctx, VB )) {
- return GL_TRUE;
- }
-
- tnl->Driver.Render.Start( ctx );
- mmesa->SetupNewInputs = ~0;
-
- for (i = 0 ; i < VB->PrimitiveCount ; i++)
- {
- GLuint prim = _tnl_translate_prim(&VB->Primitive[i]);
- GLuint start = VB->Primitive[i].start;
- GLuint length = VB->Primitive[i].count;
-
- if (!length)
- continue;
-
- mga_render_tab_verts[prim & PRIM_MODE_MASK]( ctx, start, start + length,
- prim);
- }
-
- tnl->Driver.Render.Finish( ctx );
-
- return GL_FALSE; /* finished the pipe */
-}
-
-
-const struct tnl_pipeline_stage _mga_render_stage =
-{
- "mga render",
- NULL,
- NULL,
- NULL,
- NULL,
- mga_run_render /* run */
-};
diff --git a/src/mesa/drivers/dri/mga/mgaspan.c b/src/mesa/drivers/dri/mga/mgaspan.c
deleted file mode 100644
index dd9a8d74edd..00000000000
--- a/src/mesa/drivers/dri/mga/mgaspan.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#include "main/mtypes.h"
-#include "mgadd.h"
-#include "mgacontext.h"
-#include "mgaspan.h"
-#include "mgaioctl.h"
-#include "swrast/swrast.h"
-
-#define DBG 0
-
-#define LOCAL_VARS \
- mgaContextPtr mmesa = MGA_CONTEXT(ctx); \
- __DRIscreen *sPriv = mmesa->driScreen; \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- const __DRIdrawable *dPriv = drb->dPriv; \
- GLuint pitch = drb->pitch; \
- GLuint height = dPriv->h; \
- char *buf = (char *)(sPriv->pFB + \
- drb->offset + \
- dPriv->x * drb->cpp + \
- dPriv->y * pitch); \
- GLuint p; \
- (void) buf; (void) p
-
-
-
-#define LOCAL_DEPTH_VARS \
- mgaContextPtr mmesa = MGA_CONTEXT(ctx); \
- __DRIscreen *sPriv = mmesa->driScreen; \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- const __DRIdrawable *dPriv = drb->dPriv; \
- GLuint pitch = drb->pitch; \
- GLuint height = dPriv->h; \
- char *buf = (char *)(sPriv->pFB + \
- drb->offset + \
- dPriv->x * drb->cpp + \
- dPriv->y * pitch)
-
-#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
-
-#define HW_LOCK()
-
-/* FIXME could/should we use dPriv->numClipRects like the other drivers? */
-#define HW_CLIPLOOP() \
- do { \
- int _nc = mmesa->numClipRects; \
- while (_nc--) { \
- int minx = mmesa->pClipRects[_nc].x1 - mmesa->drawX; \
- int miny = mmesa->pClipRects[_nc].y1 - mmesa->drawY; \
- int maxx = mmesa->pClipRects[_nc].x2 - mmesa->drawX; \
- int maxy = mmesa->pClipRects[_nc].y2 - mmesa->drawY;
-
-#define HW_ENDCLIPLOOP() \
- } \
- } while (0)
-
-#define HW_UNLOCK()
-
-
-
-#define Y_FLIP(_y) (height - _y - 1)
-
-/* 16 bit, RGB565 color spanline and pixel functions
- */
-#define SPANTMP_PIXEL_FMT GL_RGB
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
-
-#define TAG(x) mga##x##_565
-#define TAG2(x,y) mga##x##_565##y
-#include "spantmp2.h"
-
-/* 32 bit, ARGB8888 color spanline and pixel functions
- */
-#define SPANTMP_PIXEL_FMT GL_BGRA
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-
-#define TAG(x) mga##x##_8888
-#define TAG2(x,y) mga##x##_8888##y
-#include "spantmp2.h"
-
-
-/* 16 bit depthbuffer functions.
- */
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH( _x, _y, d ) \
- *(GLushort *)(buf + (_x)*2 + (_y)*pitch) = d;
-
-#define READ_DEPTH( d, _x, _y ) \
- d = *(GLushort *)(buf + (_x)*2 + (_y)*pitch);
-
-#define TAG(x) mga##x##_z16
-#include "depthtmp.h"
-
-
-
-
-/* 32 bit depthbuffer functions.
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d ) \
- *(GLuint *)(buf + (_x)*4 + (_y)*pitch) = d;
-
-#define READ_DEPTH( d, _x, _y ) \
- d = *(GLuint *)(buf + (_x)*4 + (_y)*pitch);
-
-#define TAG(x) mga##x##_z32
-#include "depthtmp.h"
-
-
-
-/* 24/8 bit interleaved depth/stencil functions
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d ) { \
- GLuint tmp = *(GLuint *)(buf + (_x)*4 + (_y)*pitch); \
- tmp &= 0xff; \
- tmp |= (d) << 8; \
- *(GLuint *)(buf + (_x)*4 + (_y)*pitch) = tmp; \
-}
-
-#define READ_DEPTH( d, _x, _y ) { \
- d = (*(GLuint *)(buf + (_x)*4 + (_y)*pitch) & ~0xff) >> 8; \
-}
-
-#define TAG(x) mga##x##_z24_s8
-#include "depthtmp.h"
-
-#define WRITE_STENCIL( _x, _y, d ) { \
- GLuint tmp = *(GLuint *)(buf + _x*4 + _y*pitch); \
- tmp &= 0xffffff00; \
- tmp |= d & 0xff; \
- *(GLuint *)(buf + _x*4 + _y*pitch) = tmp; \
-}
-
-#define READ_STENCIL( d, _x, _y ) \
- d = *(GLuint *)(buf + _x*4 + _y*pitch) & 0xff;
-
-#define TAG(x) mga##x##_z24_s8
-#include "stenciltmp.h"
-
-
-static void
-mgaSpanRenderStart( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- FLUSH_BATCH( mmesa );
- LOCK_HARDWARE_QUIESCENT( mmesa );
-}
-
-static void
-mgaSpanRenderFinish( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- _swrast_flush( ctx );
- UNLOCK_HARDWARE( mmesa );
-}
-
-/**
- * Initialize the driver callbacks for the read / write span functions.
- *
- * \bug
- * To really support RGB888 and RGBA8888 visuals, we need separate read and
- * write routines for 888 and 8888. We also need to determine whether or not
- * the visual has destination alpha.
- */
-void mgaDDInitSpanFuncs( struct gl_context *ctx )
-{
- struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
- swdd->SpanRenderStart = mgaSpanRenderStart;
- swdd->SpanRenderFinish = mgaSpanRenderFinish;
-}
-
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-mgaSetSpanFunctions(driRenderbuffer *drb, const struct gl_config *vis)
-{
- if (drb->Base.Format == MESA_FORMAT_RGB565) {
- mgaInitPointers_565(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
- mgaInitPointers_8888(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_Z16) {
- mgaInitDepthPointers_z16(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_Z24_S8) {
- mgaInitDepthPointers_z24_s8(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_Z32) {
- mgaInitDepthPointers_z32(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_S8) {
- mgaInitStencilPointers_z24_s8(&drb->Base);
- }
-}
diff --git a/src/mesa/drivers/dri/mga/mgaspan.h b/src/mesa/drivers/dri/mga/mgaspan.h
deleted file mode 100644
index 48186b46e9a..00000000000
--- a/src/mesa/drivers/dri/mga/mgaspan.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef _MGA_SPAN_H
-#define _MGA_SPAN_H
-
-#include "drirenderbuffer.h"
-
-extern void mgaDDInitSpanFuncs( struct gl_context *ctx );
-
-extern void
-mgaSetSpanFunctions(driRenderbuffer *rb, const struct gl_config *vis);
-
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgastate.c b/src/mesa/drivers/dri/mga/mgastate.c
deleted file mode 100644
index bfc55f4fc6d..00000000000
--- a/src/mesa/drivers/dri/mga/mgastate.c
+++ /dev/null
@@ -1,1198 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-
-#include "main/mtypes.h"
-#include "main/colormac.h"
-#include "main/dd.h"
-#include "main/mm.h"
-#include "main/state.h"
-
-#include "mgacontext.h"
-#include "mgadd.h"
-#include "mgastate.h"
-#include "mgatex.h"
-#include "mgavb.h"
-#include "mgatris.h"
-#include "mgaioctl.h"
-#include "mgaregs.h"
-
-#include "swrast/swrast.h"
-#include "vbo/vbo.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-#include "swrast_setup/swrast_setup.h"
-
-#include "xmlpool.h"
-#include "drirenderbuffer.h"
-
-
-static void updateSpecularLighting( struct gl_context *ctx );
-
-static const GLuint mgarop_NoBLK[16] = {
- DC_atype_rpl | 0x00000000, DC_atype_rstr | 0x00080000,
- DC_atype_rstr | 0x00040000, DC_atype_rpl | 0x000c0000,
- DC_atype_rstr | 0x00020000, DC_atype_rstr | 0x000a0000,
- DC_atype_rstr | 0x00060000, DC_atype_rstr | 0x000e0000,
- DC_atype_rstr | 0x00010000, DC_atype_rstr | 0x00090000,
- DC_atype_rstr | 0x00050000, DC_atype_rstr | 0x000d0000,
- DC_atype_rpl | 0x00030000, DC_atype_rstr | 0x000b0000,
- DC_atype_rstr | 0x00070000, DC_atype_rpl | 0x000f0000
-};
-
-/* =============================================================
- * Alpha blending
- */
-
-static void mgaDDAlphaFunc(struct gl_context *ctx, GLenum func, GLfloat ref)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLubyte refByte;
- GLuint a;
-
- CLAMPED_FLOAT_TO_UBYTE(refByte, ref);
-
- switch ( func ) {
- case GL_NEVER:
- a = AC_atmode_alt;
- refByte = 0;
- break;
- case GL_LESS:
- a = AC_atmode_alt;
- break;
- case GL_GEQUAL:
- a = AC_atmode_agte;
- break;
- case GL_LEQUAL:
- a = AC_atmode_alte;
- break;
- case GL_GREATER:
- a = AC_atmode_agt;
- break;
- case GL_NOTEQUAL:
- a = AC_atmode_ane;
- break;
- case GL_EQUAL:
- a = AC_atmode_ae;
- break;
- case GL_ALWAYS:
- a = AC_atmode_noacmp;
- break;
- default:
- a = 0;
- break;
- }
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.alpha_func = a | MGA_FIELD( AC_atref, refByte );
-}
-
-static void updateBlendLogicOp(struct gl_context *ctx)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLboolean logicOp = _mesa_rgba_logicop_enabled(ctx);
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
-
- mmesa->hw.blend_func_enable =
- (ctx->Color.BlendEnabled && !logicOp) ? ~0 : 0;
-
- FALLBACK( ctx, MGA_FALLBACK_BLEND,
- ctx->Color.BlendEnabled && !logicOp &&
- mmesa->hw.blend_func == (AC_src_src_alpha_sat | AC_dst_zero) );
-}
-
-static void mgaDDBlendEquationSeparate(struct gl_context *ctx,
- GLenum modeRGB, GLenum modeA)
-{
- assert( modeRGB == modeA );
- updateBlendLogicOp( ctx );
-}
-
-static void mgaDDBlendFuncSeparate( struct gl_context *ctx, GLenum sfactorRGB,
- GLenum dfactorRGB, GLenum sfactorA,
- GLenum dfactorA )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint src;
- GLuint dst;
-
- switch (ctx->Color.Blend[0].SrcRGB) {
- case GL_ZERO:
- src = AC_src_zero; break;
- case GL_SRC_ALPHA:
- src = AC_src_src_alpha; break;
- case GL_ONE:
- default: /* never happens */
- src = AC_src_one; break;
- case GL_DST_COLOR:
- src = AC_src_dst_color; break;
- case GL_ONE_MINUS_DST_COLOR:
- src = AC_src_om_dst_color; break;
- case GL_ONE_MINUS_SRC_ALPHA:
- src = AC_src_om_src_alpha; break;
- case GL_DST_ALPHA:
- src = (ctx->Visual.alphaBits > 0)
- ? AC_src_dst_alpha : AC_src_one;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- src = (ctx->Visual.alphaBits > 0)
- ? AC_src_om_dst_alpha : AC_src_zero;
- break;
- case GL_SRC_ALPHA_SATURATE:
- src = (ctx->Visual.alphaBits > 0)
- ? AC_src_src_alpha_sat : AC_src_zero;
- break;
- }
-
- switch (ctx->Color.Blend[0].DstRGB) {
- case GL_SRC_ALPHA:
- dst = AC_dst_src_alpha; break;
- case GL_ONE_MINUS_SRC_ALPHA:
- dst = AC_dst_om_src_alpha; break;
- default: /* never happens */
- case GL_ZERO:
- dst = AC_dst_zero; break;
- case GL_ONE:
- dst = AC_dst_one; break;
- case GL_SRC_COLOR:
- dst = AC_dst_src_color; break;
- case GL_ONE_MINUS_SRC_COLOR:
- dst = AC_dst_om_src_color; break;
- case GL_DST_ALPHA:
- dst = (ctx->Visual.alphaBits > 0)
- ? AC_dst_dst_alpha : AC_dst_one;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- dst = (ctx->Visual.alphaBits > 0)
- ? AC_dst_om_dst_alpha : AC_dst_zero;
- break;
- }
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.blend_func = (src | dst);
-
- FALLBACK( ctx, MGA_FALLBACK_BLEND,
- ctx->Color.BlendEnabled && !_mesa_rgba_logicop_enabled(ctx) &&
- mmesa->hw.blend_func == (AC_src_src_alpha_sat | AC_dst_zero) );
-}
-
-/* =============================================================
- * Depth testing
- */
-
-static void mgaDDDepthFunc(struct gl_context *ctx, GLenum func)
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- int zmode;
-
- switch (func) {
- case GL_NEVER:
- /* can't do this in h/w, we'll use a s/w fallback */
- FALLBACK (ctx, MGA_FALLBACK_DEPTH, ctx->Depth.Test);
-
- /* FALLTHROUGH */
- case GL_ALWAYS:
- zmode = DC_zmode_nozcmp; break;
- case GL_LESS:
- zmode = DC_zmode_zlt; break;
- case GL_LEQUAL:
- zmode = DC_zmode_zlte; break;
- case GL_EQUAL:
- zmode = DC_zmode_ze; break;
- case GL_GREATER:
- zmode = DC_zmode_zgt; break;
- case GL_GEQUAL:
- zmode = DC_zmode_zgte; break;
- case GL_NOTEQUAL:
- zmode = DC_zmode_zne; break;
- default:
- zmode = 0; break;
- }
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.zmode &= DC_zmode_MASK;
- mmesa->hw.zmode |= zmode;
-}
-
-static void mgaDDDepthMask(struct gl_context *ctx, GLboolean flag)
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
-
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.zmode &= DC_atype_MASK;
- mmesa->hw.zmode |= (flag) ? DC_atype_zi : DC_atype_i;
-}
-
-
-static void mgaDDClearDepth(struct gl_context *ctx, GLclampd d)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- /* Select the Z depth. The ~ is used because the _MASK values in the
- * MGA driver are used to mask OFF the selected bits. In this case,
- * we want to mask off everything except the MA_zwidth bits.
- */
- switch (mmesa->setup.maccess & ~MA_zwidth_MASK) {
- case MA_zwidth_16: mmesa->ClearDepth = d * 0x0000ffff; break;
- case MA_zwidth_24: mmesa->ClearDepth = d * 0xffffff00; break;
- case MA_zwidth_32: mmesa->ClearDepth = d * 0xffffffff; break;
- default: return;
- }
-}
-
-
-/* =============================================================
- * Fog
- */
-
-
-static void mgaDDFogfv(struct gl_context *ctx, GLenum pname, const GLfloat *param)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- if (pname == GL_FOG_COLOR) {
- GLuint color = PACK_COLOR_888((GLubyte)(ctx->Fog.Color[0]*255.0F),
- (GLubyte)(ctx->Fog.Color[1]*255.0F),
- (GLubyte)(ctx->Fog.Color[2]*255.0F));
-
- MGA_STATECHANGE(mmesa, MGA_UPLOAD_CONTEXT);
- mmesa->setup.fogcolor = color;
- }
-}
-
-
-/* =============================================================
- * Scissoring
- */
-
-
-void mgaUpdateClipping(const struct gl_context *ctx)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- if (mmesa->driDrawable)
- {
- int x1 = mmesa->driDrawable->x + ctx->Scissor.X;
- int y1 = mmesa->driDrawable->y + mmesa->driDrawable->h
- - (ctx->Scissor.Y + ctx->Scissor.Height);
- int x2 = x1 + ctx->Scissor.Width;
- int y2 = y1 + ctx->Scissor.Height;
-
- if (x1 < 0) x1 = 0;
- if (y1 < 0) y1 = 0;
- if (x2 < 0) x2 = 0;
- if (y2 < 0) y2 = 0;
-
- mmesa->scissor_rect.x1 = x1;
- mmesa->scissor_rect.y1 = y1;
- mmesa->scissor_rect.x2 = x2;
- mmesa->scissor_rect.y2 = y2;
-
- mmesa->dirty |= MGA_UPLOAD_CLIPRECTS;
- }
-}
-
-
-static void mgaDDScissor( struct gl_context *ctx, GLint x, GLint y,
- GLsizei w, GLsizei h )
-{
- if ( ctx->Scissor.Enabled ) {
- FLUSH_BATCH( MGA_CONTEXT(ctx) ); /* don't pipeline cliprect changes */
- mgaUpdateClipping( ctx );
- }
-}
-
-
-/* =============================================================
- * Culling
- */
-
-
-#define _CULL_DISABLE 0
-#define _CULL_NEGATIVE ((1<<11)|(1<<5)|(1<<16))
-#define _CULL_POSITIVE (1<<11)
-
-static void mgaDDCullFaceFrontFace(struct gl_context *ctx, GLenum unused)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- if (ctx->Polygon.CullFlag &&
- ctx->Polygon.CullFaceMode != GL_FRONT_AND_BACK)
- {
- mmesa->hw.cull = _CULL_NEGATIVE;
-
- if (ctx->Polygon.CullFaceMode == GL_FRONT)
- mmesa->hw.cull ^= (_CULL_POSITIVE ^ _CULL_NEGATIVE);
-
- if (ctx->Polygon.FrontFace != GL_CCW)
- mmesa->hw.cull ^= (_CULL_POSITIVE ^ _CULL_NEGATIVE);
-
- mmesa->hw.cull_dualtex = mmesa->hw.cull ^
- (_CULL_POSITIVE ^ _CULL_NEGATIVE); /* warp bug? */
- }
- else {
- mmesa->hw.cull = _CULL_DISABLE;
- mmesa->hw.cull_dualtex = _CULL_DISABLE;
- }
-}
-
-
-/* =============================================================
- * Masks
- */
-
-static void mgaDDColorMask(struct gl_context *ctx,
- GLboolean r, GLboolean g,
- GLboolean b, GLboolean a )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- mgaScreenPrivate *mgaScreen = mmesa->mgaScreen;
- GLuint mask = mgaPackColor(mgaScreen->cpp,
- ctx->Color.ColorMask[0][RCOMP],
- ctx->Color.ColorMask[0][GCOMP],
- ctx->Color.ColorMask[0][BCOMP],
- ctx->Color.ColorMask[0][ACOMP]);
-
- if (mgaScreen->cpp == 2)
- mask = mask | (mask << 16);
-
- if (mmesa->setup.plnwt != mask) {
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->setup.plnwt = mask;
- }
-}
-
-
-/* =============================================================
- * Polygon state
- */
-
-static int mgaStipples[16] = {
- 0xffff,
- 0xa5a5,
- 0x5a5a,
- 0xa0a0,
- 0x5050,
- 0x0a0a,
- 0x0505,
- 0x8020,
- 0x0401,
- 0x1040,
- 0x0208,
- 0x0802,
- 0x4010,
- 0x0104,
- 0x2080,
- 0x0000
-};
-
-/**
- * The MGA supports a subset of possible 4x4 stipples natively, GL
- * wants 32x32. Fortunately stipple is usually a repeating pattern.
- *
- * \param ctx GL rendering context to be affected
- * \param mask Pointer to the 32x32 stipple mask
- */
-
-static void mgaDDPolygonStipple( struct gl_context *ctx, const GLubyte *mask )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- const GLubyte *m = mask;
- GLubyte p[4];
- int i,j,k;
- int active = (ctx->Polygon.StippleFlag &&
- mmesa->raster_primitive == GL_TRIANGLES);
- GLuint stipple;
-
- FLUSH_BATCH(mmesa);
- mmesa->haveHwStipple = 0;
-
- if (active) {
- mmesa->dirty |= MGA_UPLOAD_CONTEXT;
- mmesa->setup.dwgctl &= ~(0xf<<20);
- }
-
- p[0] = mask[0] & 0xf; p[0] |= p[0] << 4;
- p[1] = mask[4] & 0xf; p[1] |= p[1] << 4;
- p[2] = mask[8] & 0xf; p[2] |= p[2] << 4;
- p[3] = mask[12] & 0xf; p[3] |= p[3] << 4;
-
- for (k = 0 ; k < 8 ; k++)
- for (j = 0 ; j < 4; j++)
- for (i = 0 ; i < 4 ; i++)
- if (*m++ != p[j]) {
- return;
- }
-
- stipple = ( ((p[0] & 0xf) << 0) |
- ((p[1] & 0xf) << 4) |
- ((p[2] & 0xf) << 8) |
- ((p[3] & 0xf) << 12) );
-
- for (i = 0 ; i < 16 ; i++)
- if (mgaStipples[i] == stipple) {
- mmesa->poly_stipple = i<<20;
- mmesa->haveHwStipple = 1;
- break;
- }
-
- if (active) {
- mmesa->setup.dwgctl &= ~(0xf<<20);
- mmesa->setup.dwgctl |= mmesa->poly_stipple;
- }
-}
-
-
-/* =============================================================
- * Rendering attributes
- *
- * We really don't want to recalculate all this every time we bind a
- * texture. These things shouldn't change all that often, so it makes
- * sense to break them out of the core texture state update routines.
- */
-
-static void updateSpecularLighting( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- unsigned int specen;
-
- specen = _mesa_need_secondary_color(ctx) ? TMC_specen_enable : 0;
-
- if ( specen != mmesa->hw.specen ) {
- mmesa->hw.specen = specen;
- mmesa->dirty |= MGA_UPLOAD_TEX0 | MGA_UPLOAD_TEX1;
- }
-}
-
-
-/* =============================================================
- * Materials
- */
-
-
-static void mgaDDLightModelfv(struct gl_context *ctx, GLenum pname,
- const GLfloat *param)
-{
- if (pname == GL_LIGHT_MODEL_COLOR_CONTROL) {
- FLUSH_BATCH( MGA_CONTEXT(ctx) );
- updateSpecularLighting( ctx );
- }
-}
-
-
-/* =============================================================
- * Stencil
- */
-
-
-static void
-mgaDDStencilFuncSeparate(struct gl_context *ctx, GLenum face, GLenum func, GLint ref,
- GLuint mask)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint stencil;
- GLuint stencilctl;
-
- stencil = MGA_FIELD( S_sref, ref ) | MGA_FIELD( S_smsk, mask );
- switch (func)
- {
- case GL_NEVER:
- stencilctl = SC_smode_snever;
- break;
- case GL_LESS:
- stencilctl = SC_smode_slt;
- break;
- case GL_LEQUAL:
- stencilctl = SC_smode_slte;
- break;
- case GL_GREATER:
- stencilctl = SC_smode_sgt;
- break;
- case GL_GEQUAL:
- stencilctl = SC_smode_sgte;
- break;
- case GL_NOTEQUAL:
- stencilctl = SC_smode_sne;
- break;
- case GL_EQUAL:
- stencilctl = SC_smode_se;
- break;
- case GL_ALWAYS:
- default:
- stencilctl = SC_smode_salways;
- break;
- }
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.stencil &= (S_sref_MASK & S_smsk_MASK);
- mmesa->hw.stencil |= stencil;
- mmesa->hw.stencilctl &= SC_smode_MASK;
- mmesa->hw.stencilctl |= stencilctl;
-}
-
-static void
-mgaDDStencilMaskSeparate(struct gl_context *ctx, GLenum face, GLuint mask)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.stencil &= S_swtmsk_MASK;
- mmesa->hw.stencil |= MGA_FIELD( S_swtmsk, mask );
-}
-
-static void
-mgaDDStencilOpSeparate(struct gl_context *ctx, GLenum face, GLenum fail, GLenum zfail,
- GLenum zpass)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint stencilctl;
-
- stencilctl = 0;
- switch (ctx->Stencil.FailFunc[0])
- {
- case GL_KEEP:
- stencilctl |= SC_sfailop_keep;
- break;
- case GL_ZERO:
- stencilctl |= SC_sfailop_zero;
- break;
- case GL_REPLACE:
- stencilctl |= SC_sfailop_replace;
- break;
- case GL_INCR:
- stencilctl |= SC_sfailop_incrsat;
- break;
- case GL_DECR:
- stencilctl |= SC_sfailop_decrsat;
- break;
- case GL_INCR_WRAP:
- stencilctl |= SC_sfailop_incr;
- break;
- case GL_DECR_WRAP:
- stencilctl |= SC_sfailop_decr;
- break;
- case GL_INVERT:
- stencilctl |= SC_sfailop_invert;
- break;
- default:
- break;
- }
-
- switch (ctx->Stencil.ZFailFunc[0])
- {
- case GL_KEEP:
- stencilctl |= SC_szfailop_keep;
- break;
- case GL_ZERO:
- stencilctl |= SC_szfailop_zero;
- break;
- case GL_REPLACE:
- stencilctl |= SC_szfailop_replace;
- break;
- case GL_INCR:
- stencilctl |= SC_szfailop_incrsat;
- break;
- case GL_DECR:
- stencilctl |= SC_szfailop_decrsat;
- break;
- case GL_INCR_WRAP:
- stencilctl |= SC_szfailop_incr;
- break;
- case GL_DECR_WRAP:
- stencilctl |= SC_szfailop_decr;
- break;
- case GL_INVERT:
- stencilctl |= SC_szfailop_invert;
- break;
- default:
- break;
- }
-
- switch (ctx->Stencil.ZPassFunc[0])
- {
- case GL_KEEP:
- stencilctl |= SC_szpassop_keep;
- break;
- case GL_ZERO:
- stencilctl |= SC_szpassop_zero;
- break;
- case GL_REPLACE:
- stencilctl |= SC_szpassop_replace;
- break;
- case GL_INCR:
- stencilctl |= SC_szpassop_incrsat;
- break;
- case GL_DECR:
- stencilctl |= SC_szpassop_decrsat;
- break;
- case GL_INCR_WRAP:
- stencilctl |= SC_szpassop_incr;
- break;
- case GL_DECR_WRAP:
- stencilctl |= SC_szpassop_decr;
- break;
- case GL_INVERT:
- stencilctl |= SC_szpassop_invert;
- break;
- default:
- break;
- }
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.stencilctl &= (SC_sfailop_MASK & SC_szfailop_MASK
- & SC_szpassop_MASK);
- mmesa->hw.stencilctl |= stencilctl;
-}
-
-
-/* =============================================================
- * Window position and viewport transformation
- */
-
-void mgaCalcViewport( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- const GLfloat *v = ctx->Viewport._WindowMap.m;
- GLfloat *m = mmesa->hw_viewport;
-
- /* See also mga_translate_vertex.
- */
- m[MAT_SX] = v[MAT_SX];
- m[MAT_TX] = v[MAT_TX] + mmesa->drawX + SUBPIXEL_X;
- m[MAT_SY] = - v[MAT_SY];
- m[MAT_TY] = - v[MAT_TY] + mmesa->driDrawable->h + mmesa->drawY + SUBPIXEL_Y;
- m[MAT_SZ] = v[MAT_SZ] * mmesa->depth_scale;
- m[MAT_TZ] = v[MAT_TZ] * mmesa->depth_scale;
-
- mmesa->SetupNewInputs = ~0;
-}
-
-static void mgaViewport( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height )
-{
- mgaCalcViewport( ctx );
-}
-
-static void mgaDepthRange( struct gl_context *ctx,
- GLclampd nearval, GLclampd farval )
-{
- mgaCalcViewport( ctx );
-}
-
-
-/* =============================================================
- * Miscellaneous
- */
-
-static void mgaDDClearColor(struct gl_context *ctx,
- const GLfloat color[4] )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLubyte c[4];
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-
- mmesa->ClearColor = mgaPackColor( mmesa->mgaScreen->cpp,
- c[0], c[1], c[2], c[3]);
-}
-
-
-/* Fallback to swrast for select and feedback.
- */
-static void mgaRenderMode( struct gl_context *ctx, GLenum mode )
-{
- FALLBACK( ctx, MGA_FALLBACK_RENDERMODE, (mode != GL_RENDER) );
-}
-
-
-static void mgaDDLogicOp( struct gl_context *ctx, GLenum opcode )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
-
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.rop = mgarop_NoBLK[ opcode & 0x0f ];
-}
-
-
-static void mga_set_cliprects(mgaContextPtr mmesa)
-{
- __DRIdrawable *driDrawable = mmesa->driDrawable;
-
- if ((mmesa->draw_buffer != MGA_FRONT)
- || (driDrawable->numBackClipRects == 0)) {
- if (driDrawable->numClipRects == 0) {
- static drm_clip_rect_t zeroareacliprect = {0,0,0,0};
- mmesa->numClipRects = 1;
- mmesa->pClipRects = &zeroareacliprect;
- } else {
- mmesa->numClipRects = driDrawable->numClipRects;
- mmesa->pClipRects = driDrawable->pClipRects;
- }
- mmesa->drawX = driDrawable->x;
- mmesa->drawY = driDrawable->y;
- } else {
- mmesa->numClipRects = driDrawable->numBackClipRects;
- mmesa->pClipRects = driDrawable->pBackClipRects;
- mmesa->drawX = driDrawable->backX;
- mmesa->drawY = driDrawable->backY;
- }
-
- mmesa->setup.dstorg = mmesa->drawOffset;
- mmesa->dirty |= MGA_UPLOAD_CONTEXT | MGA_UPLOAD_CLIPRECTS;
-}
-
-
-void mgaUpdateRects( mgaContextPtr mmesa, GLuint buffers )
-{
- __DRIdrawable *const driDrawable = mmesa->driDrawable;
- __DRIdrawable *const driReadable = mmesa->driReadable;
-
- mmesa->dirty_cliprects = 0;
-
- driUpdateFramebufferSize(mmesa->glCtx, driDrawable);
- if (driDrawable != driReadable) {
- driUpdateFramebufferSize(mmesa->glCtx, driReadable);
- }
-
- mga_set_cliprects(mmesa);
-
- mgaUpdateClipping( mmesa->glCtx );
- mgaCalcViewport( mmesa->glCtx );
-}
-
-
-static void mgaDDDrawBuffer(struct gl_context *ctx, GLenum mode )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- FLUSH_BATCH( mmesa );
-
- if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
- /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */
- FALLBACK( ctx, MGA_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0] ) {
- case BUFFER_FRONT_LEFT:
- mmesa->setup.dstorg = mmesa->mgaScreen->frontOffset;
- mmesa->draw_buffer = MGA_FRONT;
- break;
- case BUFFER_BACK_LEFT:
- mmesa->setup.dstorg = mmesa->mgaScreen->backOffset;
- mmesa->draw_buffer = MGA_BACK;
- break;
- default:
- FALLBACK( ctx, MGA_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- mmesa->dirty |= MGA_UPLOAD_CONTEXT;
- mga_set_cliprects(mmesa);
- FALLBACK(ctx, MGA_FALLBACK_DRAW_BUFFER, GL_FALSE);
-}
-
-
-static void mgaDDReadBuffer(struct gl_context *ctx, GLenum mode )
-{
- /* nothing, until we implement h/w glRead/CopyPixels or CopyTexImage */
-}
-
-
-/* =============================================================
- * State enable/disable
- */
-
-
-static void mgaDDEnable(struct gl_context *ctx, GLenum cap, GLboolean state)
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
-
- switch(cap) {
- case GL_DITHER:
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- if (!ctx->Color.DitherFlag)
- mmesa->setup.maccess |= MA_nodither_enable;
- else
- mmesa->setup.maccess &= ~MA_nodither_enable;
- break;
- case GL_LIGHTING:
- case GL_COLOR_SUM_EXT:
- FLUSH_BATCH( mmesa );
- updateSpecularLighting( ctx );
- break;
- case GL_ALPHA_TEST:
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->hw.alpha_func_enable = (state) ? ~0 : 0;
- break;
- case GL_DEPTH_TEST:
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- FALLBACK (ctx, MGA_FALLBACK_DEPTH,
- ctx->Depth.Func == GL_NEVER && ctx->Depth.Test);
- break;
-
- case GL_SCISSOR_TEST:
- FLUSH_BATCH( mmesa );
- mmesa->scissor = state;
- mgaUpdateClipping( ctx );
- break;
-
- case GL_FOG:
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- if (ctx->Fog.Enabled)
- mmesa->setup.maccess |= MA_fogen_enable;
- else
- mmesa->setup.maccess &= ~MA_fogen_enable;
- break;
- case GL_CULL_FACE:
- mgaDDCullFaceFrontFace( ctx, 0 );
- break;
- case GL_TEXTURE_1D:
- case GL_TEXTURE_2D:
- case GL_TEXTURE_3D:
- break;
- case GL_POLYGON_STIPPLE:
- if (mmesa->haveHwStipple && mmesa->raster_primitive == GL_TRIANGLES) {
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- mmesa->setup.dwgctl &= ~(0xf<<20);
- if (state)
- mmesa->setup.dwgctl |= mmesa->poly_stipple;
- }
- break;
-
- case GL_BLEND:
- case GL_COLOR_LOGIC_OP:
- updateBlendLogicOp( ctx );
- break;
-
- case GL_STENCIL_TEST:
- MGA_STATECHANGE( mmesa, MGA_UPLOAD_CONTEXT );
- if (mmesa->hw_stencil) {
- mmesa->hw.stencil_enable = ( state ) ? ~0 : 0;
- }
- else {
- FALLBACK( ctx, MGA_FALLBACK_STENCIL, state );
- }
- default:
- break;
- }
-}
-
-
-/* =============================================================
- */
-
-static void mgaDDPrintDirty( const char *msg, GLuint state )
-{
- fprintf(stderr, "%s (0x%03x): %s%s%s%s%s%s%s\n",
- msg,
- (unsigned int) state,
- (state & MGA_WAIT_AGE) ? "wait-age " : "",
- (state & MGA_UPLOAD_TEX0IMAGE) ? "upload-tex0-img " : "",
- (state & MGA_UPLOAD_TEX1IMAGE) ? "upload-tex1-img " : "",
- (state & MGA_UPLOAD_CONTEXT) ? "upload-ctx " : "",
- (state & MGA_UPLOAD_TEX0) ? "upload-tex0 " : "",
- (state & MGA_UPLOAD_TEX1) ? "upload-tex1 " : "",
- (state & MGA_UPLOAD_PIPE) ? "upload-pipe " : ""
- );
-}
-
-/* Push the state into the sarea and/or texture memory.
- */
-void mgaEmitHwStateLocked( mgaContextPtr mmesa )
-{
- drm_mga_sarea_t *sarea = mmesa->sarea;
- struct gl_context * ctx = mmesa->glCtx;
-
- if (MGA_DEBUG & DEBUG_VERBOSE_MSG)
- mgaDDPrintDirty( __FUNCTION__, mmesa->dirty );
-
- if (mmesa->dirty & MGA_UPLOAD_CONTEXT) {
- mmesa->setup.wflag = _CULL_DISABLE;
- if (mmesa->raster_primitive == GL_TRIANGLES) {
- if ((ctx->Texture.Unit[0]._ReallyEnabled == TEXTURE_2D_BIT &&
- ctx->Texture.Unit[1]._ReallyEnabled == TEXTURE_2D_BIT)) {
- mmesa->setup.wflag = mmesa->hw.cull_dualtex;
- }
- else {
- mmesa->setup.wflag = mmesa->hw.cull;
- }
- }
-
- mmesa->setup.stencil = mmesa->hw.stencil
- & mmesa->hw.stencil_enable;
- mmesa->setup.stencilctl = mmesa->hw.stencilctl
- & mmesa->hw.stencil_enable;
-
- /* If depth testing is not enabled, then use the no Z-compare / no
- * Z-write mode. Otherwise, use whatever is set in hw.zmode.
- */
- mmesa->setup.dwgctl &= (DC_zmode_MASK & DC_atype_MASK);
- mmesa->setup.dwgctl |= (ctx->Depth.Test)
- ? mmesa->hw.zmode : (DC_zmode_nozcmp | DC_atype_i);
-
- mmesa->setup.dwgctl &= DC_bop_MASK;
- mmesa->setup.dwgctl |= _mesa_rgba_logicop_enabled(ctx)
- ? mmesa->hw.rop : mgarop_NoBLK[ GL_COPY & 0x0f ];
-
- mmesa->setup.alphactrl &= AC_src_MASK & AC_dst_MASK & AC_atmode_MASK
- & AC_atref_MASK & AC_alphasel_MASK;
- mmesa->setup.alphactrl |=
- (mmesa->hw.alpha_func & mmesa->hw.alpha_func_enable) |
- (mmesa->hw.blend_func & mmesa->hw.blend_func_enable) |
- ((AC_src_one | AC_dst_zero) & ~mmesa->hw.blend_func_enable) |
- mmesa->hw.alpha_sel;
-
- memcpy( &sarea->context_state, &mmesa->setup, sizeof(mmesa->setup));
- }
-
- if ((mmesa->dirty & MGA_UPLOAD_TEX0) && mmesa->CurrentTexObj[0]) {
- memcpy(&sarea->tex_state[0],
- &mmesa->CurrentTexObj[0]->setup,
- sizeof(sarea->tex_state[0]));
- }
-
- if ((mmesa->dirty & MGA_UPLOAD_TEX1) && mmesa->CurrentTexObj[1]) {
- memcpy(&sarea->tex_state[1],
- &mmesa->CurrentTexObj[1]->setup,
- sizeof(sarea->tex_state[1]));
- }
-
- if (mmesa->dirty & (MGA_UPLOAD_TEX0 | MGA_UPLOAD_TEX1)) {
- sarea->tex_state[0].texctl2 &= ~TMC_specen_enable;
- sarea->tex_state[1].texctl2 &= ~TMC_specen_enable;
- sarea->tex_state[0].texctl2 |= mmesa->hw.specen;
- sarea->tex_state[1].texctl2 |= mmesa->hw.specen;
- }
-
- if (mmesa->dirty & MGA_UPLOAD_PIPE) {
-/* mmesa->sarea->wacceptseq = mmesa->hw_primitive; */
- mmesa->sarea->warp_pipe = mmesa->vertex_format;
- mmesa->sarea->vertsize = mmesa->vertex_size;
- }
-
- mmesa->sarea->dirty |= mmesa->dirty;
- mmesa->dirty &= MGA_UPLOAD_CLIPRECTS;
-}
-
-/* =============================================================
- */
-
-
-static void mgaDDValidateState( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
-
- FLUSH_BATCH( mmesa );
-
- if (mmesa->NewGLState & _NEW_TEXTURE) {
- mgaUpdateTextureState(ctx);
- }
-
- if (!mmesa->Fallback) {
- if (mmesa->NewGLState & _MGA_NEW_RASTERSETUP) {
- mgaChooseVertexState( ctx );
- }
-
- if (mmesa->NewGLState & _MGA_NEW_RENDERSTATE) {
- mgaChooseRenderState( ctx );
- }
- }
-
- mmesa->NewGLState = 0;
-}
-
-
-static void mgaDDInvalidateState( struct gl_context *ctx, GLuint new_state )
-{
- _swrast_InvalidateState( ctx, new_state );
- _swsetup_InvalidateState( ctx, new_state );
- _vbo_InvalidateState( ctx, new_state );
- _tnl_InvalidateState( ctx, new_state );
- MGA_CONTEXT(ctx)->NewGLState |= new_state;
-}
-
-
-static void mgaRunPipeline( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- if (mmesa->NewGLState) {
- mgaDDValidateState( ctx );
- }
-
- if (mmesa->dirty) {
- mgaEmitHwStateLocked( mmesa );
- }
-
- _tnl_run_pipeline( ctx );
-}
-
-
-void mgaInitState( mgaContextPtr mmesa )
-{
- mgaScreenPrivate *mgaScreen = mmesa->mgaScreen;
- struct gl_context *ctx = mmesa->glCtx;
-
- if (ctx->Visual.doubleBufferMode) {
- /* use back buffer by default */
- mmesa->draw_buffer = MGA_BACK;
- mmesa->drawOffset = mmesa->mgaScreen->backOffset;
- mmesa->readOffset = mmesa->mgaScreen->backOffset;
- mmesa->setup.dstorg = mgaScreen->backOffset;
- } else {
- /* use front buffer by default */
- mmesa->draw_buffer = MGA_FRONT;
- mmesa->drawOffset = mmesa->mgaScreen->frontOffset;
- mmesa->readOffset = mmesa->mgaScreen->frontOffset;
- mmesa->setup.dstorg = mgaScreen->frontOffset;
- }
-
- mmesa->setup.maccess = (MA_memreset_disable |
- MA_fogen_disable |
- MA_tlutload_disable |
- MA_nodither_disable |
- MA_dit555_disable);
- if (driQueryOptioni (&mmesa->optionCache, "color_reduction") !=
- DRI_CONF_COLOR_REDUCTION_DITHER)
- mmesa->setup.maccess |= MA_nodither_enable;
-
- switch (mmesa->mgaScreen->cpp) {
- case 2:
- mmesa->setup.maccess |= MA_pwidth_16;
- break;
- case 4:
- mmesa->setup.maccess |= MA_pwidth_32;
- break;
- default:
- fprintf( stderr, "Error: unknown cpp %d, exiting...\n",
- mmesa->mgaScreen->cpp );
- exit( 1 );
- }
-
- switch (mmesa->glCtx->Visual.depthBits) {
- case 16:
- mmesa->setup.maccess |= MA_zwidth_16;
- break;
- case 24:
- mmesa->setup.maccess |= MA_zwidth_24;
- break;
- case 32:
- mmesa->setup.maccess |= MA_zwidth_32;
- break;
- }
-
- mmesa->hw.blend_func = AC_src_one | AC_dst_zero;
- mmesa->hw.blend_func_enable = 0;
- mmesa->hw.alpha_func = AC_atmode_noacmp | MGA_FIELD( AC_atref, 0x00 );
- mmesa->hw.alpha_func_enable = 0;
- mmesa->hw.rop = mgarop_NoBLK[ GL_COPY & 0x0f ];
- mmesa->hw.zmode = DC_zmode_zlt | DC_atype_zi;
- mmesa->hw.stencil = MGA_FIELD( S_sref, 0x00) | MGA_FIELD( S_smsk, 0xff ) |
- MGA_FIELD( S_swtmsk, 0xff );
- mmesa->hw.stencilctl = SC_smode_salways | SC_sfailop_keep
- | SC_szfailop_keep | SC_szpassop_keep;
- mmesa->hw.stencil_enable = 0;
- mmesa->hw.cull = _CULL_DISABLE;
- mmesa->hw.cull_dualtex = _CULL_DISABLE;
- mmesa->hw.specen = 0;
- mmesa->hw.alpha_sel = AC_alphasel_diffused;
-
- mmesa->setup.dwgctl = (DC_opcod_trap |
- DC_linear_xy |
- DC_solid_disable |
- DC_arzero_disable |
- DC_sgnzero_disable |
- DC_shftzero_enable |
- MGA_FIELD( DC_bop, 0xC ) |
- MGA_FIELD( DC_trans, 0x0 ) |
- DC_bltmod_bmonolef |
- DC_pattern_disable |
- DC_transc_disable |
- DC_clipdis_disable);
-
- mmesa->setup.plnwt = ~0;
- mmesa->setup.alphactrl = (AC_amode_alpha_channel |
- AC_astipple_disable |
- AC_aten_disable);
-
- mmesa->setup.fogcolor = PACK_COLOR_888((GLubyte)(ctx->Fog.Color[0]*255.0F),
- (GLubyte)(ctx->Fog.Color[1]*255.0F),
- (GLubyte)(ctx->Fog.Color[2]*255.0F));
-
- mmesa->setup.wflag = 0;
- mmesa->setup.tdualstage0 = 0;
- mmesa->setup.tdualstage1 = 0;
- mmesa->setup.fcol = 0;
- mmesa->dirty |= MGA_UPLOAD_CONTEXT;
-
- mmesa->envcolor[0] = 0;
- mmesa->envcolor[1] = 0;
-}
-
-
-void mgaDDInitStateFuncs( struct gl_context *ctx )
-{
- ctx->Driver.UpdateState = mgaDDInvalidateState;
- ctx->Driver.Enable = mgaDDEnable;
- ctx->Driver.LightModelfv = mgaDDLightModelfv;
- ctx->Driver.AlphaFunc = mgaDDAlphaFunc;
- ctx->Driver.BlendEquationSeparate = mgaDDBlendEquationSeparate;
- ctx->Driver.BlendFuncSeparate = mgaDDBlendFuncSeparate;
- ctx->Driver.DepthFunc = mgaDDDepthFunc;
- ctx->Driver.DepthMask = mgaDDDepthMask;
- ctx->Driver.Fogfv = mgaDDFogfv;
- ctx->Driver.Scissor = mgaDDScissor;
- ctx->Driver.CullFace = mgaDDCullFaceFrontFace;
- ctx->Driver.FrontFace = mgaDDCullFaceFrontFace;
- ctx->Driver.ColorMask = mgaDDColorMask;
-
- ctx->Driver.DrawBuffer = mgaDDDrawBuffer;
- ctx->Driver.ReadBuffer = mgaDDReadBuffer;
- ctx->Driver.ClearColor = mgaDDClearColor;
- ctx->Driver.ClearDepth = mgaDDClearDepth;
- ctx->Driver.LogicOpcode = mgaDDLogicOp;
-
- ctx->Driver.PolygonStipple = mgaDDPolygonStipple;
-
- ctx->Driver.StencilFuncSeparate = mgaDDStencilFuncSeparate;
- ctx->Driver.StencilMaskSeparate = mgaDDStencilMaskSeparate;
- ctx->Driver.StencilOpSeparate = mgaDDStencilOpSeparate;
-
- ctx->Driver.DepthRange = mgaDepthRange;
- ctx->Driver.Viewport = mgaViewport;
- ctx->Driver.RenderMode = mgaRenderMode;
-
- TNL_CONTEXT(ctx)->Driver.RunPipeline = mgaRunPipeline;
-}
diff --git a/src/mesa/drivers/dri/mga/mgastate.h b/src/mesa/drivers/dri/mga/mgastate.h
deleted file mode 100644
index 6e8a869cf79..00000000000
--- a/src/mesa/drivers/dri/mga/mgastate.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef _MGA_STATE_H
-#define _MGA_STATE_H
-
-extern void mgaInitState( mgaContextPtr mmesa );
-extern void mgaDDInitStateFuncs(struct gl_context *ctx);
-extern void mgaUpdateClipping(const struct gl_context *ctx);
-extern void mgaUpdateCull( struct gl_context *ctx );
-extern void mgaCalcViewport( struct gl_context *ctx );
-extern void mgaUpdateRects( mgaContextPtr mmesa, GLuint buffers );
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgatex.c b/src/mesa/drivers/dri/mga/mgatex.c
deleted file mode 100644
index ebbfec36556..00000000000
--- a/src/mesa/drivers/dri/mga/mgatex.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#include "main/glheader.h"
-#include "main/mm.h"
-#include "main/colormac.h"
-#include "main/context.h"
-#include "main/enums.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-#include "main/macros.h"
-#include "main/texstore.h"
-#include "main/teximage.h"
-#include "main/texobj.h"
-
-#include "mgacontext.h"
-#include "mgatex.h"
-#include "mgaregs.h"
-#include "mgaioctl.h"
-
-#include "xmlpool.h"
-
-/**
- * Set the texture wrap modes.
- * Currently \c GL_REPEAT, \c GL_CLAMP and \c GL_CLAMP_TO_EDGE are supported.
- *
- * \param t Texture object whose wrap modes are to be set
- * \param swrap Wrap mode for the \a s texture coordinate
- * \param twrap Wrap mode for the \a t texture coordinate
- */
-
-static void
-mgaSetTexWrapping( mgaTextureObjectPtr t, GLenum swrap, GLenum twrap )
-{
- GLboolean is_clamp = GL_FALSE;
- GLboolean is_clamp_to_edge = GL_FALSE;
-
- t->setup.texctl &= (TMC_clampu_MASK & TMC_clampv_MASK);
- t->setup.texctl2 &= (TMC_borderen_MASK);
-
- switch( swrap ) {
- case GL_REPEAT:
- break;
- case GL_CLAMP:
- t->setup.texctl |= TMC_clampu_enable;
- is_clamp = GL_TRUE;
- break;
- case GL_CLAMP_TO_EDGE:
- t->setup.texctl |= TMC_clampu_enable;
- is_clamp_to_edge = GL_TRUE;
- break;
- default:
- _mesa_problem(NULL, "bad S wrap mode in %s", __FUNCTION__);
- }
-
- switch( twrap ) {
- case GL_REPEAT:
- break;
- case GL_CLAMP:
- t->setup.texctl |= TMC_clampv_enable;
- is_clamp = GL_TRUE;
- break;
- case GL_CLAMP_TO_EDGE:
- t->setup.texctl |= TMC_clampv_enable;
- is_clamp_to_edge = GL_TRUE;
- break;
- default:
- _mesa_problem(NULL, "bad T wrap mode in %s", __FUNCTION__);
- }
-
- if ( is_clamp ) {
- t->setup.texctl2 |= TMC_borderen_enable;
- }
-
- t->border_fallback = (is_clamp && is_clamp_to_edge);
-}
-
-
-/**
- * Set the texture magnification and minification modes.
- *
- * \param t Texture whose filter modes are to be set
- * \param minf Texture minification mode
- * \param magf Texture magnification mode
- */
-
-static void
-mgaSetTexFilter( mgaTextureObjectPtr t, GLenum minf, GLenum magf )
-{
- GLuint val = 0;
-
- switch (minf) {
- case GL_NEAREST: val = TF_minfilter_nrst; break;
- case GL_LINEAR: val = TF_minfilter_bilin; break;
- case GL_NEAREST_MIPMAP_NEAREST: val = TF_minfilter_mm1s; break;
- case GL_LINEAR_MIPMAP_NEAREST: val = TF_minfilter_mm4s; break;
- case GL_NEAREST_MIPMAP_LINEAR: val = TF_minfilter_mm2s; break;
- case GL_LINEAR_MIPMAP_LINEAR: val = TF_minfilter_mm8s; break;
- default: val = TF_minfilter_nrst; break;
- }
-
- switch (magf) {
- case GL_NEAREST: val |= TF_magfilter_nrst; break;
- case GL_LINEAR: val |= TF_magfilter_bilin; break;
- default: val |= TF_magfilter_nrst; break;
- }
-
- /* See OpenGL 1.2 specification */
- if (magf == GL_LINEAR && (minf == GL_NEAREST_MIPMAP_NEAREST ||
- minf == GL_NEAREST_MIPMAP_LINEAR)) {
- val |= MGA_FIELD( TF_fthres, 0x20 ); /* c = 0.5 */
- } else {
- val |= MGA_FIELD( TF_fthres, 0x10 ); /* c = 0 */
- }
-
-
- /* Mask off the bits for the fields we are setting. Remember, the MGA mask
- * defines have 0s for the bits in the named fields. This is the opposite
- * of most of the other drivers.
- */
-
- t->setup.texfilter &= (TF_minfilter_MASK &
- TF_magfilter_MASK &
- TF_fthres_MASK);
- t->setup.texfilter |= val;
-}
-
-static void mgaSetTexBorderColor(mgaTextureObjectPtr t, const GLfloat color[4])
-{
- GLubyte c[4];
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
- t->setup.texbordercol = PACK_COLOR_8888(c[3], c[0], c[1], c[2] );
-}
-
-
-static gl_format
-mgaChooseTextureFormat( struct gl_context *ctx, GLint internalFormat,
- GLenum format, GLenum type )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- const GLboolean do32bpt =
- ( mmesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_32 );
- const GLboolean force16bpt =
- ( mmesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_FORCE_16 );
- (void) format;
-
- switch ( internalFormat ) {
- case 4:
- case GL_RGBA:
- case GL_COMPRESSED_RGBA:
- switch ( type ) {
- case GL_UNSIGNED_INT_10_10_10_2:
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_4_4_4_4_REV:
- return MESA_FORMAT_ARGB4444;
- case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_UNSIGNED_SHORT_1_5_5_5_REV:
- return MESA_FORMAT_ARGB1555;
- default:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
- }
-
- case 3:
- case GL_RGB:
- case GL_COMPRESSED_RGB:
- switch ( type ) {
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_4_4_4_4_REV:
- return MESA_FORMAT_ARGB4444;
- case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_UNSIGNED_SHORT_1_5_5_5_REV:
- return MESA_FORMAT_ARGB1555;
- case GL_UNSIGNED_SHORT_5_6_5:
- case GL_UNSIGNED_SHORT_5_6_5_REV:
- return MESA_FORMAT_RGB565;
- default:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
- }
-
- case GL_RGBA8:
- case GL_RGB10_A2:
- case GL_RGBA12:
- case GL_RGBA16:
- return !force16bpt ?
- MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
-
- case GL_RGBA4:
- case GL_RGBA2:
- return MESA_FORMAT_ARGB4444;
-
- case GL_RGB5_A1:
- return MESA_FORMAT_ARGB1555;
-
- case GL_RGB8:
- case GL_RGB10:
- case GL_RGB12:
- case GL_RGB16:
- return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
-
- case GL_RGB5:
- case GL_RGB4:
- case GL_R3_G3_B2:
- return MESA_FORMAT_RGB565;
-
- case GL_ALPHA:
- case GL_ALPHA4:
- case GL_ALPHA8:
- case GL_ALPHA12:
- case GL_ALPHA16:
- case GL_COMPRESSED_ALPHA:
- /* FIXME: This will report incorrect component sizes... */
- return MGA_IS_G400(mmesa) ? MESA_FORMAT_AL88 : MESA_FORMAT_ARGB4444;
-
- case 1:
- case GL_LUMINANCE:
- case GL_LUMINANCE4:
- case GL_LUMINANCE8:
- case GL_LUMINANCE12:
- case GL_LUMINANCE16:
- case GL_COMPRESSED_LUMINANCE:
- /* FIXME: This will report incorrect component sizes... */
- return MGA_IS_G400(mmesa) ? MESA_FORMAT_AL88 : MESA_FORMAT_RGB565;
-
- case 2:
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE4_ALPHA4:
- case GL_LUMINANCE6_ALPHA2:
- case GL_LUMINANCE8_ALPHA8:
- case GL_LUMINANCE12_ALPHA4:
- case GL_LUMINANCE12_ALPHA12:
- case GL_LUMINANCE16_ALPHA16:
- case GL_COMPRESSED_LUMINANCE_ALPHA:
- /* FIXME: This will report incorrect component sizes... */
- return MGA_IS_G400(mmesa) ? MESA_FORMAT_AL88 : MESA_FORMAT_ARGB4444;
-
- case GL_INTENSITY:
- case GL_INTENSITY4:
- case GL_INTENSITY8:
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- case GL_COMPRESSED_INTENSITY:
- /* FIXME: This will report incorrect component sizes... */
- return MGA_IS_G400(mmesa) ? MESA_FORMAT_I8 : MESA_FORMAT_ARGB4444;
-
- case GL_YCBCR_MESA:
- if (MGA_IS_G400(mmesa) &&
- (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
- type == GL_UNSIGNED_BYTE))
- return MESA_FORMAT_YCBCR;
- else
- return MESA_FORMAT_YCBCR_REV;
-
- case GL_COLOR_INDEX:
- case GL_COLOR_INDEX1_EXT:
- case GL_COLOR_INDEX2_EXT:
- case GL_COLOR_INDEX4_EXT:
- case GL_COLOR_INDEX8_EXT:
- case GL_COLOR_INDEX12_EXT:
- case GL_COLOR_INDEX16_EXT:
- return MESA_FORMAT_CI8;
-
- default:
- _mesa_problem( ctx, "unexpected texture format in %s", __FUNCTION__ );
- return MESA_FORMAT_NONE;
- }
-
- return MESA_FORMAT_NONE; /* never get here */
-}
-
-
-
-
-/**
- * Allocate space for and load the mesa images into the texture memory block.
- * This will happen before drawing with a new texture, or drawing with a
- * texture after it was swapped out or teximaged again.
- */
-
-static mgaTextureObjectPtr
-mgaAllocTexObj( struct gl_texture_object *tObj )
-{
- mgaTextureObjectPtr t;
-
-
- t = CALLOC( sizeof( *t ) );
- tObj->DriverData = t;
- if ( t != NULL ) {
- /* Initialize non-image-dependent parts of the state:
- */
- t->base.tObj = tObj;
-
- t->setup.texctl = TMC_takey_1 | TMC_tamask_0;
- t->setup.texctl2 = TMC_ckstransdis_enable;
- t->setup.texfilter = TF_filteralpha_enable | TF_uvoffset_OGL;
-
- t->border_fallback = GL_FALSE;
- t->texenv_fallback = GL_FALSE;
-
- make_empty_list( & t->base );
-
- mgaSetTexWrapping( t, tObj->Sampler.WrapS, tObj->Sampler.WrapT );
- mgaSetTexFilter( t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter );
- mgaSetTexBorderColor( t, tObj->Sampler.BorderColor.f );
- }
-
- return( t );
-}
-
-
-static void mgaTexEnv( struct gl_context *ctx, GLenum target,
- GLenum pname, const GLfloat *param )
-{
- GLuint unit = ctx->Texture.CurrentUnit;
- struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-
- switch( pname ) {
- case GL_TEXTURE_ENV_COLOR: {
- GLubyte c[4];
-
- UNCLAMPED_FLOAT_TO_RGBA_CHAN( c, texUnit->EnvColor );
- mmesa->envcolor[unit] = PACK_COLOR_8888( c[3], c[0], c[1], c[2] );
- break;
- }
- }
-}
-
-
-static void mgaTexImage2D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint height, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- if ( t != NULL ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) mgaAllocTexObj( texObj );
- if ( t == NULL ) {
- _mesa_error( ctx, GL_OUT_OF_MEMORY, "glTexImage2D" );
- return;
- }
- }
-
- _mesa_store_teximage2d( ctx, target, level, internalFormat,
- width, height, border, format, type,
- pixels, packing, texObj, texImage );
- level -= t->firstLevel;
- if (level >= 0)
- t->dirty_images[0] |= (1UL << level);
-}
-
-static void mgaTexSubImage2D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- assert( t ); /* this _should_ be true */
- if ( t != NULL ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) mgaAllocTexObj( texObj );
- if ( t == NULL ) {
- _mesa_error( ctx, GL_OUT_OF_MEMORY, "glTexImage2D" );
- return;
- }
- }
-
- _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width,
- height, format, type, pixels, packing, texObj,
- texImage);
- level -= t->firstLevel;
- if (level >= 0)
- t->dirty_images[0] |= (1UL << level);
-}
-
-
-/**
- * Changes variables and flags for a state update, which will happen at the
- * next UpdateTextureState
- */
-
-static void
-mgaTexParameter( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj,
- GLenum pname, const GLfloat *params )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;
-
- /* If we don't have a hardware texture, it will be automatically
- * created with current state before it is used, so we don't have
- * to do anything now
- */
- if ( (t == NULL) ||
- (target != GL_TEXTURE_2D &&
- target != GL_TEXTURE_RECTANGLE_NV) ) {
- return;
- }
-
- switch (pname) {
- case GL_TEXTURE_MIN_FILTER:
- driSwapOutTextureObject( (driTextureObject *) t );
- /* FALLTHROUGH */
- case GL_TEXTURE_MAG_FILTER:
- FLUSH_BATCH(mmesa);
- mgaSetTexFilter( t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter );
- break;
-
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- FLUSH_BATCH(mmesa);
- mgaSetTexWrapping(t,tObj->Sampler.WrapS,tObj->Sampler.WrapT);
- break;
-
- case GL_TEXTURE_BORDER_COLOR:
- FLUSH_BATCH(mmesa);
- mgaSetTexBorderColor(t, tObj->Sampler.BorderColor.f);
- break;
-
- case GL_TEXTURE_BASE_LEVEL:
- case GL_TEXTURE_MAX_LEVEL:
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- /* This isn't the most efficient solution but there doesn't appear to
- * be a nice alternative. Since there's no LOD clamping,
- * we just have to rely on loading the right subset of mipmap levels
- * to simulate a clamped LOD.
- */
- driSwapOutTextureObject( (driTextureObject *) t );
- break;
-
- default:
- return;
- }
-}
-
-
-static void
-mgaBindTexture( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj )
-{
- assert( (target != GL_TEXTURE_2D && target != GL_TEXTURE_RECTANGLE_NV) ||
- (tObj->DriverData != NULL) );
-}
-
-
-static void
-mgaDeleteTexture( struct gl_context *ctx, struct gl_texture_object *tObj )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- driTextureObject * t = (driTextureObject *) tObj->DriverData;
-
- if ( t ) {
- if ( mmesa ) {
- FLUSH_BATCH( mmesa );
- }
-
- driDestroyTextureObject( t );
- }
-
- /* Free mipmap images and the texture object itself */
- _mesa_delete_texture_object(ctx, tObj);
-}
-
-
-/**
- * Allocate a new texture object.
- * Called via ctx->Driver.NewTextureObject.
- * Note: this function will be called during context creation to
- * allocate the default texture objects.
- * Note: we could use containment here to 'derive' the driver-specific
- * texture object from the core mesa gl_texture_object. Not done at this time.
- */
-static struct gl_texture_object *
-mgaNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
-{
- struct gl_texture_object *obj;
- obj = _mesa_new_texture_object(ctx, name, target);
- mgaAllocTexObj( obj );
- return obj;
-}
-
-
-void
-mgaInitTextureFuncs( struct dd_function_table *functions )
-{
- functions->ChooseTextureFormat = mgaChooseTextureFormat;
- functions->TexImage2D = mgaTexImage2D;
- functions->TexSubImage2D = mgaTexSubImage2D;
- functions->BindTexture = mgaBindTexture;
- functions->NewTextureObject = mgaNewTextureObject;
- functions->DeleteTexture = mgaDeleteTexture;
- functions->IsTextureResident = driIsTextureResident;
- functions->TexEnv = mgaTexEnv;
- functions->TexParameter = mgaTexParameter;
-}
diff --git a/src/mesa/drivers/dri/mga/mgatex.h b/src/mesa/drivers/dri/mga/mgatex.h
deleted file mode 100644
index 3827fb06686..00000000000
--- a/src/mesa/drivers/dri/mga/mgatex.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef MGATEX_INC
-#define MGATEX_INC
-
-#include "mgacontext.h"
-
-typedef struct mga_texture_object_s *mgaTextureObjectPtr;
-
-
-/* Called before a primitive is rendered to make sure the texture
- * state is properly setup. Texture residence is checked later
- * when we grab the lock.
- */
-void mgaUpdateTextureState( struct gl_context *ctx );
-
-int mgaUploadTexImages( mgaContextPtr mmesa, mgaTextureObjectPtr t );
-
-void mgaDestroyTexObj( mgaContextPtr mmesa, mgaTextureObjectPtr t );
-
-void mgaInitTextureFuncs( struct dd_function_table *functions );
-
-GLboolean mgaUpdateTextureEnvCombine( struct gl_context *ctx, int unit );
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgatexmem.c b/src/mesa/drivers/dri/mga/mgatexmem.c
deleted file mode 100644
index 58afbbb279e..00000000000
--- a/src/mesa/drivers/dri/mga/mgatexmem.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#include "main/glheader.h"
-
-#include "main/mm.h"
-#include "mgacontext.h"
-#include "mgatex.h"
-#include "mgaregs.h"
-#include "mgaioctl.h"
-#include "mga_xmesa.h"
-
-#include "main/imports.h"
-#include "main/simple_list.h"
-
-/**
- * Destroy any device-dependent state associated with the texture. This may
- * include NULLing out hardware state that points to the texture.
- */
-void
-mgaDestroyTexObj( mgaContextPtr mmesa, mgaTextureObjectPtr t )
-{
- unsigned i;
-
-
- /* See if it was the driver's current object.
- */
-
- if ( mmesa != NULL )
- {
- if ( t->age > mmesa->dirtyAge )
- mmesa->dirtyAge = t->age;
-
- for ( i = 0 ; i < mmesa->glCtx->Const.MaxTextureUnits ; i++ )
- {
- if ( t == mmesa->CurrentTexObj[ i ] ) {
- mmesa->CurrentTexObj[ i ] = NULL;
- }
- }
- }
-}
-
-
-/**
- * Upload a texture image from system memory to either on-card or AGP
- * memory. Uploads to on-card memory are performed using an ILOAD operation.
- * This is used for both initial loading of the entire image, and texSubImage
- * updates.
- *
- * Performed with the hardware lock held.
- *
- * Even though this function is named "upload subimage," the entire image
- * is uploaded.
- *
- * \param mmesa Driver context.
- * \param t Texture to be uploaded.
- * \param hwlevel Mipmap level of the texture to be uploaded.
- *
- * \bug As mentioned above, this fuction actually copies the entier mipmap
- * level. There should be a version of this function that performs
- * sub-rectangle uploads. This will perform quite a bit better if only
- * a small portion of a larger texture has been updated. Care would
- * need to be take with such an implementation once glCopyTexImage has
- * been hardware accelerated.
- */
-static void mgaUploadSubImage( mgaContextPtr mmesa,
- mgaTextureObjectPtr t, GLint hwlevel )
-{
- struct gl_texture_image * texImage;
- unsigned offset;
- unsigned texelBytes;
- unsigned length;
- const int level = hwlevel + t->base.firstLevel;
-
-
- if ( (hwlevel < 0)
- || (hwlevel >= (MGA_IS_G200(mmesa)
- ? G200_TEX_MAXLEVELS : G400_TEX_MAXLEVELS)) ) {
- fprintf( stderr, "[%s:%d] level = %d\n", __FILE__, __LINE__, level );
- return;
- }
-
- texImage = t->base.tObj->Image[0][level];
- if ( texImage == NULL ) {
- fprintf( stderr, "[%s:%d] Image[%d] = NULL\n", __FILE__, __LINE__,
- level );
- return;
- }
-
-
- if (texImage->Data == NULL) {
- fprintf(stderr, "null texture image data tObj %p level %d\n",
- (void *) t->base.tObj, level);
- return;
- }
-
-
- /* find the proper destination offset for this level */
- if ( MGA_IS_G200(mmesa) ) {
- offset = (t->base.memBlock->ofs + t->offsets[hwlevel]);
- }
- else {
- unsigned i;
-
- offset = t->base.memBlock->ofs;
- for ( i = 0 ; i < hwlevel ; i++ ) {
- offset += (t->offsets[1] >> (i * 2));
- }
- }
-
-
- /* Copy the texture from system memory to a memory space that can be
- * directly used by the hardware for texturing.
- */
-
- texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
- length = texImage->Width * texImage->Height * texelBytes;
- if ( t->base.heap->heapId == MGA_CARD_HEAP ) {
- unsigned tex_offset = 0;
- unsigned to_copy;
-
-
- /* We may not be able to upload the entire texture in one batch due to
- * register limits or dma buffer limits. Split the copy up into maximum
- * sized chunks.
- */
-
- offset += mmesa->mgaScreen->textureOffset[ t->base.heap->heapId ];
- while ( length != 0 ) {
- mgaGetILoadBufferLocked( mmesa );
-
- /* The kernel ILOAD ioctl requires that the lenght be an even multiple
- * of MGA_ILOAD_ALIGN.
- */
- length = ((length) + MGA_ILOAD_MASK) & ~MGA_ILOAD_MASK;
-
- to_copy = MIN2( length, MGA_BUFFER_SIZE );
- (void) memcpy( mmesa->iload_buffer->address,
- (GLubyte *) texImage->Data + tex_offset, to_copy );
-
- if ( MGA_DEBUG & DEBUG_VERBOSE_TEXTURE )
- fprintf(stderr, "[%s:%d] address/size = 0x%08lx/%d\n",
- __FILE__, __LINE__,
- (long) (offset + tex_offset),
- to_copy );
-
- mgaFireILoadLocked( mmesa, offset + tex_offset, to_copy );
- tex_offset += to_copy;
- length -= to_copy;
- }
- } else {
- /* FIXME: the sync for direct copy reduces speed.. */
- /* This works, is slower for uploads to card space and needs
- * additional synchronization with the dma stream.
- */
-
- UPDATE_LOCK(mmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT);
-
- memcpy( mmesa->mgaScreen->texVirtual[t->base.heap->heapId] + offset,
- texImage->Data, length );
-
- if ( MGA_DEBUG & DEBUG_VERBOSE_TEXTURE )
- fprintf(stderr, "[%s:%d] address/size = 0x%08lx/%d\n",
- __FILE__, __LINE__,
- (long) (mmesa->mgaScreen->texVirtual[t->base.heap->heapId]
- + offset),
- length);
- }
-}
-
-
-/**
- * Upload the texture images associated with texture \a t. This might
- * require the allocation of texture memory.
- *
- * \param mmesa Context pointer
- * \param t Texture to be uploaded
- */
-
-int mgaUploadTexImages( mgaContextPtr mmesa, mgaTextureObjectPtr t )
-{
- int i;
- int ofs;
-
-
- if ( (t == NULL) || (t->base.totalSize == 0) )
- return 0;
-
- LOCK_HARDWARE( mmesa );
-
- if (t->base.memBlock == NULL ) {
- int heap;
-
- heap = driAllocateTexture( mmesa->texture_heaps, mmesa->nr_heaps,
- (driTextureObject *) t );
- if ( heap == -1 ) {
- UNLOCK_HARDWARE( mmesa );
- return -1;
- }
-
- assert(t->base.memBlock);
- ofs = mmesa->mgaScreen->textureOffset[ heap ]
- + t->base.memBlock->ofs;
-
- if ( MGA_IS_G200(mmesa) ) {
- t->setup.texorg = ofs;
- t->setup.texorg1 = ofs + t->offsets[1];
- t->setup.texorg2 = ofs + t->offsets[2];
- t->setup.texorg3 = ofs + t->offsets[3];
- t->setup.texorg4 = ofs + t->offsets[4];
- }
- else {
- t->setup.texorg = ofs | TO_texorgoffsetsel;
- t->setup.texorg1 = t->offsets[1];
- t->setup.texorg2 = 0;
- t->setup.texorg3 = 0;
- t->setup.texorg4 = 0;
- }
-
- mmesa->dirty |= MGA_UPLOAD_CONTEXT;
- }
-
- /* Let the world know we've used this memory recently.
- */
- driUpdateTextureLRU( (driTextureObject *) t );
-
- if (MGA_DEBUG&DEBUG_VERBOSE_TEXTURE)
- fprintf(stderr, "[%s:%d] dispatch age: %d age freed memory: %d\n",
- __FILE__, __LINE__,
- GET_DISPATCH_AGE(mmesa), mmesa->dirtyAge);
-
- if (mmesa->dirtyAge >= GET_DISPATCH_AGE(mmesa))
- mgaWaitAgeLocked( mmesa, mmesa->dirtyAge );
-
- if (t->base.dirty_images[0]) {
- const int numLevels = t->base.lastLevel - t->base.firstLevel + 1;
-
- if (MGA_DEBUG&DEBUG_VERBOSE_TEXTURE)
- fprintf(stderr, "[%s:%d] dirty_images[0] = 0x%04x\n",
- __FILE__, __LINE__, t->base.dirty_images[0] );
-
- for (i = 0 ; i < numLevels ; i++) {
- if ( (t->base.dirty_images[0] & (1U << i)) != 0 ) {
- mgaUploadSubImage( mmesa, t, i );
- }
- }
- t->base.dirty_images[0] = 0;
- }
-
-
- UNLOCK_HARDWARE( mmesa );
-
- return 0;
-}
diff --git a/src/mesa/drivers/dri/mga/mgatris.c b/src/mesa/drivers/dri/mga/mgatris.c
deleted file mode 100644
index 7b06774adb4..00000000000
--- a/src/mesa/drivers/dri/mga/mgatris.c
+++ /dev/null
@@ -1,914 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "main/colormac.h"
-#include "main/mm.h"
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-#include "mgacontext.h"
-#include "mgaioctl.h"
-#include "mgatris.h"
-#include "mgavb.h"
-
-
-static void mgaRenderPrimitive( struct gl_context *ctx, GLenum prim );
-
-/***********************************************************************
- * Functions to draw basic primitives *
- ***********************************************************************/
-
-
-#if defined (USE_X86_ASM)
-#define EMIT_VERT( j, vb, vertex_size, v ) \
-do { int __tmp; \
- __asm__ __volatile__( "rep ; movsl" \
- : "=%c" (j), "=D" (vb), "=S" (__tmp) \
- : "0" (vertex_size), \
- "D" ((long)vb), \
- "S" ((long)v)); \
-} while (0)
-#else
-#define EMIT_VERT( j, vb, vertex_size, v ) \
-do { \
- for ( j = 0 ; j < vertex_size ; j++ ) \
- vb[j] = (v)->ui[j]; \
- vb += vertex_size; \
-} while (0)
-#endif
-
-static void INLINE mga_draw_triangle( mgaContextPtr mmesa,
- mgaVertexPtr v0,
- mgaVertexPtr v1,
- mgaVertexPtr v2 )
-{
- GLuint vertex_size = mmesa->vertex_size;
- GLuint *vb = mgaAllocDmaLow( mmesa, 3 * 4 * vertex_size );
- int j;
-
- EMIT_VERT( j, vb, vertex_size, v0 );
- EMIT_VERT( j, vb, vertex_size, v1 );
- EMIT_VERT( j, vb, vertex_size, v2 );
-}
-
-
-static void INLINE mga_draw_quad( mgaContextPtr mmesa,
- mgaVertexPtr v0,
- mgaVertexPtr v1,
- mgaVertexPtr v2,
- mgaVertexPtr v3 )
-{
- GLuint vertex_size = mmesa->vertex_size;
- GLuint *vb = mgaAllocDmaLow( mmesa, 6 * 4 * vertex_size );
- int j;
-
- EMIT_VERT( j, vb, vertex_size, v0 );
- EMIT_VERT( j, vb, vertex_size, v1 );
- EMIT_VERT( j, vb, vertex_size, v3 );
- EMIT_VERT( j, vb, vertex_size, v1 );
- EMIT_VERT( j, vb, vertex_size, v2 );
- EMIT_VERT( j, vb, vertex_size, v3 );
-}
-
-
-static INLINE void mga_draw_point( mgaContextPtr mmesa,
- mgaVertexPtr tmp )
-{
- const GLfloat sz = 0.5 * CLAMP(mmesa->glCtx->Point.Size,
- mmesa->glCtx->Const.MinPointSize,
- mmesa->glCtx->Const.MaxPointSize);
- const int vertex_size = mmesa->vertex_size;
- GLuint *vb = mgaAllocDmaLow( mmesa, 6 * 4 * vertex_size );
- int j;
-
-#if 0
- v0->v.x += PNT_X_OFFSET - TRI_X_OFFSET;
- v0->v.y += PNT_Y_OFFSET - TRI_Y_OFFSET;
-#endif
-
- /* Draw a point as two triangles.
- */
- *(float *)&vb[0] = tmp->v.x - sz;
- *(float *)&vb[1] = tmp->v.y - sz;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = tmp->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = tmp->v.x + sz;
- *(float *)&vb[1] = tmp->v.y - sz;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = tmp->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = tmp->v.x + sz;
- *(float *)&vb[1] = tmp->v.y + sz;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = tmp->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = tmp->v.x + sz;
- *(float *)&vb[1] = tmp->v.y + sz;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = tmp->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = tmp->v.x - sz;
- *(float *)&vb[1] = tmp->v.y + sz;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = tmp->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = tmp->v.x - sz;
- *(float *)&vb[1] = tmp->v.y - sz;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = tmp->ui[j];
-
-#if 0
- v0->v.x -= PNT_X_OFFSET - TRI_X_OFFSET;
- v0->v.y -= PNT_Y_OFFSET - TRI_Y_OFFSET;
-#endif
-}
-
-
-static INLINE void mga_draw_line( mgaContextPtr mmesa,
- mgaVertexPtr v0,
- mgaVertexPtr v1 )
-{
- GLuint vertex_size = mmesa->vertex_size;
- GLuint *vb = mgaAllocDmaLow( mmesa, 6 * 4 * vertex_size );
- GLfloat dx, dy, ix, iy;
- const GLfloat width = CLAMP(mmesa->glCtx->Line.Width,
- mmesa->glCtx->Const.MinLineWidth,
- mmesa->glCtx->Const.MaxLineWidth);
- GLint j;
-
-#if 0
- v0->v.x += LINE_X_OFFSET - TRI_X_OFFSET;
- v0->v.y += LINE_Y_OFFSET - TRI_Y_OFFSET;
- v1->v.x += LINE_X_OFFSET - TRI_X_OFFSET;
- v1->v.y += LINE_Y_OFFSET - TRI_Y_OFFSET;
-#endif
-
- dx = v0->v.x - v1->v.x;
- dy = v0->v.y - v1->v.y;
-
- ix = width * .5; iy = 0;
- if (dx * dx > dy * dy) {
- iy = ix; ix = 0;
- }
-
- *(float *)&vb[0] = v0->v.x - ix;
- *(float *)&vb[1] = v0->v.y - iy;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = v0->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = v1->v.x + ix;
- *(float *)&vb[1] = v1->v.y + iy;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = v1->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = v0->v.x + ix;
- *(float *)&vb[1] = v0->v.y + iy;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = v0->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = v0->v.x - ix;
- *(float *)&vb[1] = v0->v.y - iy;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = v0->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = v1->v.x - ix;
- *(float *)&vb[1] = v1->v.y - iy;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = v1->ui[j];
- vb += vertex_size;
-
- *(float *)&vb[0] = v1->v.x + ix;
- *(float *)&vb[1] = v1->v.y + iy;
- for (j = 2 ; j < vertex_size ; j++)
- vb[j] = v1->ui[j];
- vb += vertex_size;
-
-#if 0
- v0->v.x -= LINE_X_OFFSET - TRI_X_OFFSET;
- v0->v.y -= LINE_Y_OFFSET - TRI_Y_OFFSET;
- v1->v.x -= LINE_X_OFFSET - TRI_X_OFFSET;
- v1->v.y -= LINE_Y_OFFSET - TRI_Y_OFFSET;
-#endif
-}
-
-/***********************************************************************
- * Macros for t_dd_tritmp.h to draw basic primitives *
- ***********************************************************************/
-
-#define TRI( a, b, c ) \
-do { \
- if (DO_FALLBACK) \
- mmesa->draw_tri( mmesa, a, b, c ); \
- else \
- mga_draw_triangle( mmesa, a, b, c ); \
-} while (0)
-
-#define QUAD( a, b, c, d ) \
-do { \
- if (DO_FALLBACK) { \
- mmesa->draw_tri( mmesa, a, b, d ); \
- mmesa->draw_tri( mmesa, b, c, d ); \
- } else { \
- mga_draw_quad( mmesa, a, b, c, d ); \
- } \
-} while (0)
-
-#define LINE( v0, v1 ) \
-do { \
- if (DO_FALLBACK) \
- mmesa->draw_line( mmesa, v0, v1 ); \
- else { \
- mga_draw_line( mmesa, v0, v1 ); \
- } \
-} while (0)
-
-#define POINT( v0 ) \
-do { \
- if (DO_FALLBACK) \
- mmesa->draw_point( mmesa, v0 ); \
- else { \
- mga_draw_point( mmesa, v0 ); \
- } \
-} while (0)
-
-
-/***********************************************************************
- * Fallback to swrast for basic primitives *
- ***********************************************************************/
-
-/* This code is hit only when a mix of accelerated and unaccelerated
- * primitives are being drawn, and only for the unaccelerated
- * primitives.
- */
-
-static void
-mga_fallback_tri( mgaContextPtr mmesa,
- mgaVertex *v0,
- mgaVertex *v1,
- mgaVertex *v2 )
-{
- struct gl_context *ctx = mmesa->glCtx;
- SWvertex v[3];
- mga_translate_vertex( ctx, v0, &v[0] );
- mga_translate_vertex( ctx, v1, &v[1] );
- mga_translate_vertex( ctx, v2, &v[2] );
- _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
-}
-
-
-static void
-mga_fallback_line( mgaContextPtr mmesa,
- mgaVertex *v0,
- mgaVertex *v1 )
-{
- struct gl_context *ctx = mmesa->glCtx;
- SWvertex v[2];
- mga_translate_vertex( ctx, v0, &v[0] );
- mga_translate_vertex( ctx, v1, &v[1] );
- _swrast_Line( ctx, &v[0], &v[1] );
-}
-
-
-static void
-mga_fallback_point( mgaContextPtr mmesa,
- mgaVertex *v0 )
-{
- struct gl_context *ctx = mmesa->glCtx;
- SWvertex v[1];
- mga_translate_vertex( ctx, v0, &v[0] );
- _swrast_Point( ctx, &v[0] );
-}
-
-/***********************************************************************
- * Build render functions from dd templates *
- ***********************************************************************/
-
-
-#define MGA_UNFILLED_BIT 0x1
-#define MGA_OFFSET_BIT 0x2
-#define MGA_TWOSIDE_BIT 0x4
-#define MGA_FLAT_BIT 0x8 /* mga can't flatshade? */
-#define MGA_FALLBACK_BIT 0x10
-#define MGA_MAX_TRIFUNC 0x20
-
-static struct {
- tnl_points_func points;
- tnl_line_func line;
- tnl_triangle_func triangle;
- tnl_quad_func quad;
-} rast_tab[MGA_MAX_TRIFUNC];
-
-#define DO_FALLBACK (IND & MGA_FALLBACK_BIT)
-#define DO_OFFSET (IND & MGA_OFFSET_BIT)
-#define DO_UNFILLED (IND & MGA_UNFILLED_BIT)
-#define DO_TWOSIDE (IND & MGA_TWOSIDE_BIT)
-#define DO_FLAT (IND & MGA_FLAT_BIT)
-#define DO_TRI 1
-#define DO_QUAD 1
-#define DO_LINE 1
-#define DO_POINTS 1
-#define DO_FULL_QUAD 1
-
-#define HAVE_BACK_COLORS 0
-#define HAVE_SPEC 1
-#define HAVE_HW_FLATSHADE 0
-#define VERTEX mgaVertex
-#define TAB rast_tab
-
-
-#define DEPTH_SCALE mmesa->depth_scale
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) _v->v.x
-#define VERT_Y(_v) _v->v.y
-#define VERT_Z(_v) _v->v.z
-#define AREA_IS_CCW( a ) (a > 0)
-#define GET_VERTEX(e) (mmesa->verts + (e * mmesa->vertex_size * sizeof(int)))
-
-#define VERT_SET_RGBA( v, c ) \
-do { \
- mga_color_t *color = (mga_color_t *)&((v)->ui[4]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->blue, (c)[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->alpha, (c)[3]); \
-} while (0)
-
-#define VERT_COPY_RGBA( v0, v1 ) v0->ui[4] = v1->ui[4]
-
-#define VERT_SET_SPEC( v0, c ) \
-do { \
- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.blue, (c)[2]); \
-} while (0)
-
-#define VERT_COPY_SPEC( v0, v1 ) \
-do { \
- v0->v.specular.red = v1->v.specular.red; \
- v0->v.specular.green = v1->v.specular.green; \
- v0->v.specular.blue = v1->v.specular.blue; \
-} while (0)
-
-#define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[4]
-#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[4] = color[idx]
-#define VERT_SAVE_SPEC( idx ) spec[idx] = v[idx]->ui[5]
-#define VERT_RESTORE_SPEC( idx ) v[idx]->ui[5] = spec[idx]
-
-#define LOCAL_VARS(n) \
- mgaContextPtr mmesa = MGA_CONTEXT(ctx); \
- GLuint color[n] = { 0 }; \
- GLuint spec[n] = { 0 }; \
- (void) color; (void) spec;
-
-
-
-/***********************************************************************
- * Functions to draw basic unfilled primitives *
- ***********************************************************************/
-
-#define RASTERIZE(x) if (mmesa->raster_primitive != x) \
- mgaRasterPrimitive( ctx, x, MGA_WA_TRIANGLES )
-#define RENDER_PRIMITIVE mmesa->render_primitive
-#define IND MGA_FALLBACK_BIT
-#define TAG(x) x
-#include "tnl_dd/t_dd_unfilled.h"
-#undef IND
-
-/***********************************************************************
- * Functions to draw GL primitives *
- ***********************************************************************/
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_OFFSET_BIT|MGA_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_OFFSET_BIT|MGA_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_FALLBACK_BIT)
-#define TAG(x) x##_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_OFFSET_BIT|MGA_FALLBACK_BIT)
-#define TAG(x) x##_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_FALLBACK_BIT)
-#define TAG(x) x##_twoside_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_OFFSET_BIT|MGA_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_UNFILLED_BIT|MGA_FALLBACK_BIT)
-#define TAG(x) x##_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_OFFSET_BIT|MGA_UNFILLED_BIT|MGA_FALLBACK_BIT)
-#define TAG(x) x##_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_UNFILLED_BIT|MGA_FALLBACK_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_OFFSET_BIT|MGA_UNFILLED_BIT| \
- MGA_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-/* Mga doesn't support provoking-vertex flat-shading?
- */
-#define IND (MGA_FLAT_BIT)
-#define TAG(x) x##_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_OFFSET_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_offset_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_twoside_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_OFFSET_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_twoside_offset_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_UNFILLED_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_unfilled_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_OFFSET_BIT|MGA_UNFILLED_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_offset_unfilled_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_UNFILLED_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_twoside_unfilled_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_OFFSET_BIT|MGA_UNFILLED_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_FALLBACK_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_OFFSET_BIT|MGA_FALLBACK_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_offset_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_FALLBACK_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_twoside_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_OFFSET_BIT|MGA_FALLBACK_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_twoside_offset_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_UNFILLED_BIT|MGA_FALLBACK_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_unfilled_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_OFFSET_BIT|MGA_UNFILLED_BIT|MGA_FALLBACK_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_offset_unfilled_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_UNFILLED_BIT|MGA_FALLBACK_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (MGA_TWOSIDE_BIT|MGA_OFFSET_BIT|MGA_UNFILLED_BIT| \
- MGA_FALLBACK_BIT|MGA_FLAT_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback_flat
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-static void init_rast_tab( void )
-{
- init();
- init_offset();
- init_twoside();
- init_twoside_offset();
- init_unfilled();
- init_offset_unfilled();
- init_twoside_unfilled();
- init_twoside_offset_unfilled();
- init_fallback();
- init_offset_fallback();
- init_twoside_fallback();
- init_twoside_offset_fallback();
- init_unfilled_fallback();
- init_offset_unfilled_fallback();
- init_twoside_unfilled_fallback();
- init_twoside_offset_unfilled_fallback();
-
- init_flat();
- init_offset_flat();
- init_twoside_flat();
- init_twoside_offset_flat();
- init_unfilled_flat();
- init_offset_unfilled_flat();
- init_twoside_unfilled_flat();
- init_twoside_offset_unfilled_flat();
- init_fallback_flat();
- init_offset_fallback_flat();
- init_twoside_fallback_flat();
- init_twoside_offset_fallback_flat();
- init_unfilled_fallback_flat();
- init_offset_unfilled_fallback_flat();
- init_twoside_unfilled_fallback_flat();
- init_twoside_offset_unfilled_fallback_flat();
-}
-
-/**********************************************************************/
-/* Render whole begin/end objects */
-/**********************************************************************/
-
-
-#define VERT(x) (mgaVertex *)(vertptr + ((x)*vertex_size*sizeof(int)))
-#define RENDER_POINTS( start, count ) \
- for ( ; start < count ; start++) \
- mga_draw_point( mmesa, VERT(ELT(start)) );
-#define RENDER_LINE( v0, v1 ) \
- mga_draw_line( mmesa, VERT(v0), VERT(v1) )
-#define RENDER_TRI( v0, v1, v2 ) \
- mga_draw_triangle( mmesa, VERT(v0), VERT(v1), VERT(v2) )
-#define RENDER_QUAD( v0, v1, v2, v3 ) \
- mga_draw_quad( mmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
-#define INIT(x) mgaRenderPrimitive( ctx, x )
-#undef LOCAL_VARS
-#define LOCAL_VARS \
- mgaContextPtr mmesa = MGA_CONTEXT(ctx); \
- GLubyte *vertptr = (GLubyte *)mmesa->verts; \
- const GLuint vertex_size = mmesa->vertex_size; \
- const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
- (void) elt;
-#define RESET_STIPPLE
-#define RESET_OCCLUSION
-#define PRESERVE_VB_DEFS
-#define ELT(x) x
-#define TAG(x) mga_##x##_verts
-#include "tnl/t_vb_rendertmp.h"
-#undef ELT
-#undef TAG
-#define TAG(x) mga_##x##_elts
-#define ELT(x) elt[x]
-#include "tnl/t_vb_rendertmp.h"
-
-
-/**********************************************************************/
-/* Render clipped primitives */
-/**********************************************************************/
-
-
-
-static void mgaRenderClippedPoly( struct gl_context *ctx, const GLuint *elts, GLuint n )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- GLuint prim = mmesa->render_primitive;
-
- /* Render the new vertices as an unclipped polygon.
- */
- {
- GLuint *tmp = VB->Elts;
- VB->Elts = (GLuint *)elts;
- tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n, PRIM_BEGIN|PRIM_END );
- VB->Elts = tmp;
- }
-
- /* Restore the render primitive
- */
- if (prim != GL_POLYGON)
- tnl->Driver.Render.PrimitiveNotify( ctx, prim );
-}
-
-static void mgaRenderClippedLine( struct gl_context *ctx, GLuint ii, GLuint jj )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->Driver.Render.Line( ctx, ii, jj );
-}
-
-static void mgaFastRenderClippedPoly( struct gl_context *ctx, const GLuint *elts,
- GLuint n )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- GLuint vertex_size = mmesa->vertex_size;
- GLuint *vb = mgaAllocDmaLow( mmesa, (n-2) * 3 * 4 * vertex_size );
- GLubyte *vertptr = (GLubyte *)mmesa->verts;
- const GLuint *start = (const GLuint *)VERT(elts[0]);
- int i,j;
-
- for (i = 2 ; i < n ; i++) {
- EMIT_VERT( j, vb, vertex_size, (mgaVertexPtr) VERT(elts[i-1]) );
- EMIT_VERT( j, vb, vertex_size, (mgaVertexPtr) VERT(elts[i]) );
- EMIT_VERT( j, vb, vertex_size, (mgaVertexPtr) start );
- }
-}
-
-/**********************************************************************/
-/* Choose render functions */
-/**********************************************************************/
-
-
-#define POINT_FALLBACK (DD_POINT_SMOOTH)
-#define LINE_FALLBACK (DD_LINE_SMOOTH | DD_LINE_STIPPLE)
-#define TRI_FALLBACK (DD_TRI_SMOOTH | DD_TRI_UNFILLED)
-#define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)
-#define ANY_RASTER_FLAGS (DD_FLATSHADE|DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET| \
- DD_TRI_UNFILLED)
-
-void mgaChooseRenderState(struct gl_context *ctx)
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint flags = ctx->_TriangleCaps;
- GLuint index = 0;
-
- if (flags & (ANY_FALLBACK_FLAGS|ANY_RASTER_FLAGS|DD_TRI_STIPPLE)) {
- if (flags & ANY_RASTER_FLAGS) {
- if (flags & DD_TRI_LIGHT_TWOSIDE) index |= MGA_TWOSIDE_BIT;
- if (flags & DD_TRI_OFFSET) index |= MGA_OFFSET_BIT;
- if (flags & DD_TRI_UNFILLED) index |= MGA_UNFILLED_BIT;
- if (flags & DD_FLATSHADE) index |= MGA_FLAT_BIT;
- }
-
- mmesa->draw_point = mga_draw_point;
- mmesa->draw_line = mga_draw_line;
- mmesa->draw_tri = mga_draw_triangle;
-
- /* Hook in fallbacks for specific primitives.
- */
- if (flags & ANY_FALLBACK_FLAGS)
- {
- if (flags & POINT_FALLBACK)
- mmesa->draw_point = mga_fallback_point;
-
- if (flags & LINE_FALLBACK)
- mmesa->draw_line = mga_fallback_line;
-
- if (flags & TRI_FALLBACK)
- mmesa->draw_tri = mga_fallback_tri;
-
- index |= MGA_FALLBACK_BIT;
- }
-
- if ((flags & DD_TRI_STIPPLE) && !mmesa->haveHwStipple) {
- mmesa->draw_tri = mga_fallback_tri;
- index |= MGA_FALLBACK_BIT;
- }
- }
-
- if (mmesa->RenderIndex != index) {
- mmesa->RenderIndex = index;
-
- tnl->Driver.Render.Points = rast_tab[index].points;
- tnl->Driver.Render.Line = rast_tab[index].line;
- tnl->Driver.Render.Triangle = rast_tab[index].triangle;
- tnl->Driver.Render.Quad = rast_tab[index].quad;
-
- if (index == 0) {
- tnl->Driver.Render.PrimTabVerts = mga_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = mga_render_tab_elts;
- tnl->Driver.Render.ClippedLine = line; /* from tritmp.h */
- tnl->Driver.Render.ClippedPolygon = mgaFastRenderClippedPoly;
- } else {
- tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
- tnl->Driver.Render.ClippedLine = mgaRenderClippedLine;
- tnl->Driver.Render.ClippedPolygon = mgaRenderClippedPoly;
- }
- }
-}
-
-/**********************************************************************/
-/* Runtime render state and callbacks */
-/**********************************************************************/
-
-
-static GLenum reduced_prim[GL_POLYGON+1] = {
- GL_POINTS,
- GL_LINES,
- GL_LINES,
- GL_LINES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES
-};
-
-
-
-/* Always called between RenderStart and RenderFinish --> We already
- * hold the lock.
- */
-void mgaRasterPrimitive( struct gl_context *ctx, GLenum prim, GLuint hwprim )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
-
- FLUSH_BATCH( mmesa );
-
- /* Update culling */
- if (mmesa->raster_primitive != prim)
- mmesa->dirty |= MGA_UPLOAD_CONTEXT;
-
- mmesa->raster_primitive = prim;
-/* mmesa->hw_primitive = hwprim; */
- mmesa->hw_primitive = MGA_WA_TRIANGLES; /* disable mgarender.c for now */
-
- if (ctx->Polygon.StippleFlag && mmesa->haveHwStipple)
- {
- mmesa->dirty |= MGA_UPLOAD_CONTEXT;
- mmesa->setup.dwgctl &= ~(0xf<<20);
- if (mmesa->raster_primitive == GL_TRIANGLES)
- mmesa->setup.dwgctl |= mmesa->poly_stipple;
- }
-}
-
-
-
-/* Determine the rasterized primitive when not drawing unfilled
- * polygons.
- *
- * Used only for the default render stage which always decomposes
- * primitives to trianges/lines/points. For the accelerated stage,
- * which renders strips as strips, the equivalent calculations are
- * performed in mgarender.c.
- */
-static void mgaRenderPrimitive( struct gl_context *ctx, GLenum prim )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint rprim = reduced_prim[prim];
-
- mmesa->render_primitive = prim;
-
- if (rprim == GL_TRIANGLES && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
- return;
-
- if (mmesa->raster_primitive != rprim) {
- mgaRasterPrimitive( ctx, rprim, MGA_WA_TRIANGLES );
- }
-}
-
-static void mgaRenderFinish( struct gl_context *ctx )
-{
- if (MGA_CONTEXT(ctx)->RenderIndex & MGA_FALLBACK_BIT)
- _swrast_flush( ctx );
-}
-
-
-
-/**********************************************************************/
-/* Manage total rasterization fallbacks */
-/**********************************************************************/
-
-static const char * const fallbackStrings[] = {
- "Texture mode",
- "glDrawBuffer(GL_FRONT_AND_BACK)",
- "read buffer",
- "glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ZERO)",
- "glRenderMode(selection or feedback)",
- "No hardware stencil",
- "glDepthFunc( GL_NEVER )",
- "Mixing GL_CLAMP_TO_EDGE and GL_CLAMP",
- "rasterization fallback option"
-};
-
-static const char *getFallbackString(GLuint bit)
-{
- int i = 0;
- while (bit > 1) {
- i++;
- bit >>= 1;
- }
- return fallbackStrings[i];
-}
-
-
-void mgaFallback( struct gl_context *ctx, GLuint bit, GLboolean mode )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint oldfallback = mmesa->Fallback;
-
- if (mode) {
- mmesa->Fallback |= bit;
- if (oldfallback == 0) {
- FLUSH_BATCH(mmesa);
- _swsetup_Wakeup( ctx );
- mmesa->RenderIndex = ~0;
- if (MGA_DEBUG & DEBUG_VERBOSE_FALLBACK) {
- fprintf(stderr, "MGA begin rasterization fallback: 0x%x %s\n",
- bit, getFallbackString(bit));
- }
- }
- }
- else {
- mmesa->Fallback &= ~bit;
- if (oldfallback == bit) {
- _swrast_flush( ctx );
- tnl->Driver.Render.Start = mgaCheckTexSizes;
- tnl->Driver.Render.PrimitiveNotify = mgaRenderPrimitive;
- tnl->Driver.Render.Finish = mgaRenderFinish;
- tnl->Driver.Render.BuildVertices = mgaBuildVertices;
- mmesa->NewGLState |= (_MGA_NEW_RENDERSTATE |
- _MGA_NEW_RASTERSETUP);
- if (MGA_DEBUG & DEBUG_VERBOSE_FALLBACK) {
- fprintf(stderr, "MGA end rasterization fallback: 0x%x %s\n",
- bit, getFallbackString(bit));
- }
- }
- }
-}
-
-
-void mgaDDInitTriFuncs( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- static int firsttime = 1;
- if (firsttime) {
- init_rast_tab();
- firsttime = 0;
- }
-
- mmesa->RenderIndex = ~0;
-
- tnl->Driver.Render.Start = mgaCheckTexSizes;
- tnl->Driver.Render.Finish = mgaRenderFinish;
- tnl->Driver.Render.PrimitiveNotify = mgaRenderPrimitive;
- tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
- tnl->Driver.Render.BuildVertices = mgaBuildVertices;
- tnl->Driver.Render.Multipass = NULL;
-}
diff --git a/src/mesa/drivers/dri/mga/mgatris.h b/src/mesa/drivers/dri/mga/mgatris.h
deleted file mode 100644
index 2f574feb936..00000000000
--- a/src/mesa/drivers/dri/mga/mgatris.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef MGATRIS_INC
-#define MGATRIS_INC
-
-#include "main/mtypes.h"
-
-extern void mgaDDInitTriFuncs( struct gl_context *ctx );
-extern void mgaChooseRenderState( struct gl_context *ctx );
-extern void mgaRasterPrimitive( struct gl_context *ctx, GLenum prim, GLuint hwprim );
-
-extern void mgaFallback( struct gl_context *ctx, GLuint bit, GLboolean mode );
-#define FALLBACK( ctx, bit, mode ) mgaFallback( ctx, bit, mode )
-
-#define _MGA_NEW_RENDERSTATE (_DD_NEW_POINT_SMOOTH | \
- _DD_NEW_LINE_SMOOTH | \
- _DD_NEW_LINE_STIPPLE | \
- _DD_NEW_TRI_SMOOTH | \
- _DD_NEW_FLATSHADE | \
- _DD_NEW_TRI_LIGHT_TWOSIDE | \
- _DD_NEW_TRI_OFFSET | \
- _DD_NEW_TRI_UNFILLED | \
- _DD_NEW_TRI_STIPPLE | \
- _NEW_POLYGONSTIPPLE)
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/mgavb.c b/src/mesa/drivers/dri/mga/mgavb.c
deleted file mode 100644
index f098aa5cbc0..00000000000
--- a/src/mesa/drivers/dri/mga/mgavb.c
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#include
-#include "mgacontext.h"
-#include "mgavb.h"
-#include "mgatris.h"
-#include "mgaioctl.h"
-#include "mga_xmesa.h"
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/imports.h"
-#include "main/macros.h"
-#include "main/colormac.h"
-
-#include "tnl/t_context.h"
-#include "swrast/swrast.h"
-
-
-#define MGA_TEX1_BIT 0x1
-#define MGA_TEX0_BIT 0x2
-#define MGA_RGBA_BIT 0x4
-#define MGA_SPEC_BIT 0x8
-#define MGA_FOG_BIT 0x10
-#define MGA_XYZW_BIT 0x20
-#define MGA_PTEX_BIT 0x40
-#define MGA_MAX_SETUP 0x80
-
-static struct {
- void (*emit)( struct gl_context *, GLuint, GLuint, void *, GLuint );
- tnl_interp_func interp;
- tnl_copy_pv_func copy_pv;
- GLboolean (*check_tex_sizes)( struct gl_context *ctx );
- GLuint vertex_size;
- GLuint vertex_format;
-} setup_tab[MGA_MAX_SETUP];
-
-
-#define TINY_VERTEX_FORMAT 0
-#define NOTEX_VERTEX_FORMAT 0
-#define TEX0_VERTEX_FORMAT (MGA_A|MGA_S|MGA_F)
-#define TEX1_VERTEX_FORMAT (MGA_A|MGA_S|MGA_F|MGA_T2)
-#define PROJ_TEX1_VERTEX_FORMAT 0
-#define TEX2_VERTEX_FORMAT 0
-#define TEX3_VERTEX_FORMAT 0
-#define PROJ_TEX3_VERTEX_FORMAT 0
-
-#define DO_XYZW (IND & MGA_XYZW_BIT)
-#define DO_RGBA (IND & MGA_RGBA_BIT)
-#define DO_SPEC (IND & MGA_SPEC_BIT)
-#define DO_FOG (IND & MGA_FOG_BIT)
-#define DO_TEX0 (IND & MGA_TEX0_BIT)
-#define DO_TEX1 (IND & MGA_TEX1_BIT)
-#define DO_TEX2 0
-#define DO_TEX3 0
-#define DO_PTEX (IND & MGA_PTEX_BIT)
-
-
-#define VERTEX mgaVertex
-#define VERTEX_COLOR mga_color_t
-#define LOCALVARS mgaContextPtr mmesa = MGA_CONTEXT(ctx);
-#define GET_VIEWPORT_MAT() mmesa->hw_viewport
-#define GET_TEXSOURCE(n) mmesa->tmu_source[n]
-#define GET_VERTEX_FORMAT() mmesa->vertex_format
-#define GET_VERTEX_STORE() mmesa->verts
-#define GET_VERTEX_SIZE() mmesa->vertex_size * sizeof(GLuint)
-
-#define HAVE_HW_VIEWPORT 0
-#define HAVE_HW_DIVIDE 0
-#define HAVE_RGBA_COLOR 0
-#define HAVE_TINY_VERTICES 0
-#define HAVE_NOTEX_VERTICES 0
-#define HAVE_TEX0_VERTICES 1
-#define HAVE_TEX1_VERTICES 1
-#define HAVE_TEX2_VERTICES 0
-#define HAVE_TEX3_VERTICES 0
-#define HAVE_PTEX_VERTICES 0
-
-#define UNVIEWPORT_VARS \
- const GLfloat dx = - mmesa->drawX - SUBPIXEL_X; \
- const GLfloat dy = (mmesa->driDrawable->h + \
- mmesa->drawY + SUBPIXEL_Y); \
- const GLfloat sz = 1.0 / mmesa->depth_scale
-
-#define UNVIEWPORT_X(x) x + dx;
-#define UNVIEWPORT_Y(y) - y + dy;
-#define UNVIEWPORT_Z(z) z * sz;
-
-#define PTEX_FALLBACK() FALLBACK(ctx, MGA_FALLBACK_TEXTURE, 1)
-
-#define INTERP_VERTEX setup_tab[mmesa->SetupIndex].interp
-#define COPY_PV_VERTEX setup_tab[mmesa->SetupIndex].copy_pv
-
-
-/***********************************************************************
- * Generate pv-copying and translation functions *
- ***********************************************************************/
-
-#define TAG(x) mga_##x
-#include "tnl_dd/t_dd_vb.c"
-
-/***********************************************************************
- * Generate vertex emit and interp functions *
- ***********************************************************************/
-
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT)
-#define TAG(x) x##_wg
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_SPEC_BIT)
-#define TAG(x) x##_wgs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_wgt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_wgt0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_TEX0_BIT|MGA_PTEX_BIT)
-#define TAG(x) x##_wgpt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_wgst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_wgst0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT|MGA_PTEX_BIT)
-#define TAG(x) x##_wgspt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_FOG_BIT)
-#define TAG(x) x##_wgf
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_FOG_BIT|MGA_SPEC_BIT)
-#define TAG(x) x##_wgfs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_FOG_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_wgft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_FOG_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_wgft0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_FOG_BIT|MGA_TEX0_BIT|MGA_PTEX_BIT)
-#define TAG(x) x##_wgfpt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_FOG_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_wgfst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_FOG_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_wgfst0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_XYZW_BIT|MGA_RGBA_BIT|MGA_FOG_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT|MGA_PTEX_BIT)
-#define TAG(x) x##_wgfspt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_TEX0_BIT)
-#define TAG(x) x##_t0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_t0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_FOG_BIT)
-#define TAG(x) x##_f
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_FOG_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_ft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_FOG_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_ft0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT)
-#define TAG(x) x##_g
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_SPEC_BIT)
-#define TAG(x) x##_gs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_gt0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_gt0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_gst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_gst0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_FOG_BIT)
-#define TAG(x) x##_gf
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_FOG_BIT|MGA_SPEC_BIT)
-#define TAG(x) x##_gfs
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_FOG_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_gft0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_FOG_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_gft0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_FOG_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT)
-#define TAG(x) x##_gfst0
-#include "tnl_dd/t_dd_vbtmp.h"
-
-#define IND (MGA_RGBA_BIT|MGA_FOG_BIT|MGA_SPEC_BIT|MGA_TEX0_BIT|MGA_TEX1_BIT)
-#define TAG(x) x##_gfst0t1
-#include "tnl_dd/t_dd_vbtmp.h"
-
-
-static void init_setup_tab( void )
-{
- init_wg();
- init_wgs();
- init_wgt0();
- init_wgt0t1();
- init_wgpt0();
- init_wgst0();
- init_wgst0t1();
- init_wgspt0();
- init_wgf();
- init_wgfs();
- init_wgft0();
- init_wgft0t1();
- init_wgfpt0();
- init_wgfst0();
- init_wgfst0t1();
- init_wgfspt0();
- init_t0();
- init_t0t1();
- init_f();
- init_ft0();
- init_ft0t1();
- init_g();
- init_gs();
- init_gt0();
- init_gt0t1();
- init_gst0();
- init_gst0t1();
- init_gf();
- init_gfs();
- init_gft0();
- init_gft0t1();
- init_gfst0();
- init_gfst0t1();
-}
-
-
-
-
-void mgaPrintSetupFlags(char *msg, GLuint flags )
-{
- fprintf(stderr, "%s: %d %s%s%s%s%s%s\n",
- msg,
- (int)flags,
- (flags & MGA_XYZW_BIT) ? " xyzw," : "",
- (flags & MGA_RGBA_BIT) ? " rgba," : "",
- (flags & MGA_SPEC_BIT) ? " spec," : "",
- (flags & MGA_FOG_BIT) ? " fog," : "",
- (flags & MGA_TEX0_BIT) ? " tex-0," : "",
- (flags & MGA_TEX1_BIT) ? " tex-1," : "");
-}
-
-
-void mgaCheckTexSizes( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- TNLcontext *tnl = TNL_CONTEXT(ctx);
-
- /*fprintf(stderr, "%s\n", __FUNCTION__);*/
-
- if (!setup_tab[mmesa->SetupIndex].check_tex_sizes(ctx)) {
- mmesa->SetupIndex |= MGA_PTEX_BIT;
- mmesa->SetupNewInputs = ~0;
-
- if (!mmesa->Fallback &&
- !(ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
- tnl->Driver.Render.Interp = setup_tab[mmesa->SetupIndex].interp;
- tnl->Driver.Render.CopyPV = setup_tab[mmesa->SetupIndex].copy_pv;
- }
- if (mmesa->Fallback) {
- tnl->Driver.Render.Start(ctx);
- }
- }
-}
-
-
-void mgaBuildVertices( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- GLuint newinputs )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- GLuint stride = mmesa->vertex_size * sizeof(int);
- GLubyte *v = ((GLubyte *)mmesa->verts + (start * stride));
-
- newinputs |= mmesa->SetupNewInputs;
- mmesa->SetupNewInputs = 0;
-
- if (!newinputs)
- return;
-
- if (newinputs & VERT_BIT_POS) {
- setup_tab[mmesa->SetupIndex].emit( ctx, start, count, v, stride );
- } else {
- GLuint ind = 0;
-
- if (newinputs & VERT_BIT_COLOR0)
- ind |= MGA_RGBA_BIT;
-
- if (newinputs & VERT_BIT_COLOR1)
- ind |= MGA_SPEC_BIT;
-
- if (newinputs & VERT_BIT_TEX0)
- ind |= MGA_TEX0_BIT;
-
- if (newinputs & VERT_BIT_TEX1)
- ind |= MGA_TEX0_BIT|MGA_TEX1_BIT;
-
- if (newinputs & VERT_BIT_FOG)
- ind |= MGA_FOG_BIT;
-
- if (mmesa->SetupIndex & MGA_PTEX_BIT)
- ind = ~0;
-
- ind &= mmesa->SetupIndex;
-
- if (ind) {
- setup_tab[ind].emit( ctx, start, count, v, stride );
- }
- }
-}
-
-
-void mgaChooseVertexState( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT( ctx );
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- GLuint ind = MGA_XYZW_BIT|MGA_RGBA_BIT;
-
- if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)
- ind |= MGA_SPEC_BIT;
-
- if (ctx->Fog.Enabled)
- ind |= MGA_FOG_BIT;
-
- if (ctx->Texture._EnabledUnits & 0x2) {
- /* unit 1 enabled */
- if (ctx->Texture._EnabledUnits & 0x1) {
- /* unit 0 enabled */
- ind |= MGA_TEX1_BIT|MGA_TEX0_BIT;
- }
- else {
- ind |= MGA_TEX0_BIT;
- }
- }
- else if (ctx->Texture._EnabledUnits & 0x1) {
- /* unit 0 enabled */
- ind |= MGA_TEX0_BIT;
- }
-
- mmesa->SetupIndex = ind;
-
- if (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED)) {
- tnl->Driver.Render.Interp = mga_interp_extras;
- tnl->Driver.Render.CopyPV = mga_copy_pv_extras;
- } else {
- tnl->Driver.Render.Interp = setup_tab[ind].interp;
- tnl->Driver.Render.CopyPV = setup_tab[ind].copy_pv;
- }
-
- if (setup_tab[ind].vertex_format != mmesa->vertex_format) {
- FLUSH_BATCH(mmesa);
- mmesa->dirty |= MGA_UPLOAD_PIPE;
- mmesa->vertex_format = setup_tab[ind].vertex_format;
- mmesa->vertex_size = setup_tab[ind].vertex_size;
- }
-}
-
-
-
-void *mga_emit_contiguous_verts( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- void *dest)
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint stride = mmesa->vertex_size * 4;
- setup_tab[mmesa->SetupIndex].emit( ctx, start, count, dest, stride );
- return (void *)((char *)dest + stride * (count - start));
-}
-
-
-
-void mgaInitVB( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- GLuint size = TNL_CONTEXT(ctx)->vb.Size;
-
- mmesa->verts = (GLubyte *)_mesa_align_malloc(size * sizeof(mgaVertex), 32);
-
- {
- static int firsttime = 1;
- if (firsttime) {
- init_setup_tab();
- firsttime = 0;
- }
- }
-
- mmesa->dirty |= MGA_UPLOAD_PIPE;
- mmesa->vertex_format = setup_tab[0].vertex_format;
- mmesa->vertex_size = setup_tab[0].vertex_size;
-}
-
-
-void mgaFreeVB( struct gl_context *ctx )
-{
- mgaContextPtr mmesa = MGA_CONTEXT(ctx);
- if (mmesa->verts) {
- _mesa_align_free(mmesa->verts);
- mmesa->verts = 0;
- }
-}
-
diff --git a/src/mesa/drivers/dri/mga/mgavb.h b/src/mesa/drivers/dri/mga/mgavb.h
deleted file mode 100644
index 20e5d8ba700..00000000000
--- a/src/mesa/drivers/dri/mga/mgavb.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * 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
- * on 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- */
-
-#ifndef MGAVB_INC
-#define MGAVB_INC
-
-#include "main/mtypes.h"
-#include "mgacontext.h"
-#include "swrast/swrast.h"
-
-#define _MGA_NEW_RASTERSETUP (_NEW_TEXTURE | \
- _DD_NEW_SEPARATE_SPECULAR | \
- _DD_NEW_TRI_UNFILLED | \
- _DD_NEW_TRI_LIGHT_TWOSIDE | \
- _NEW_FOG)
-
-
-extern void mgaChooseVertexState( struct gl_context *ctx );
-extern void mgaCheckTexSizes( struct gl_context *ctx );
-extern void mgaBuildVertices( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- GLuint newinputs );
-
-extern void mgaPrintSetupFlags(char *msg, GLuint flags );
-
-extern void mgaInitVB( struct gl_context *ctx );
-extern void mgaFreeVB( struct gl_context *ctx );
-
-extern void *mga_emit_contiguous_verts( struct gl_context *ctx,
- GLuint start,
- GLuint count,
- void *dest );
-
-extern void mga_translate_vertex(struct gl_context *ctx,
- const mgaVertex *src,
- SWvertex *dst);
-
-extern void mga_print_vertex( struct gl_context *ctx, const mgaVertex *v );
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/server/mga.h b/src/mesa/drivers/dri/mga/server/mga.h
deleted file mode 100644
index d7790e47794..00000000000
--- a/src/mesa/drivers/dri/mga/server/mga.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * MGA Millennium (MGA2064W) functions
- *
- * Copyright 1996 The XFree86 Project, Inc.
- *
- * Authors
- * Dirk Hohndel
- * hohndel@XFree86.Org
- * David Dawes
- * dawes@XFree86.Org
- */
-
-#ifndef MGA_H
-#define MGA_H
-
-
-#include "xf86drm.h"
-#include "linux/types.h"
-
-
-#define PCI_CHIP_MGA2085 0x0518
-#define PCI_CHIP_MGA2064 0x0519
-#define PCI_CHIP_MGA1064 0x051A
-#define PCI_CHIP_MGA2164 0x051B
-#define PCI_CHIP_MGA2164_AGP 0x051F
-#define PCI_CHIP_MGAG200_PCI 0x0520
-#define PCI_CHIP_MGAG200 0x0521
-#define PCI_CHIP_MGAG400 0x0525
-#define PCI_CHIP_MGAG550 0x2527
-#define PCI_CHIP_MGAG100_PCI 0x1000
-#define PCI_CHIP_MGAG100 0x1001
-
-
-# define MMIO_IN8(base, offset) \
- *(volatile unsigned char *)(((unsigned char*)(base)) + (offset))
-# define MMIO_IN16(base, offset) \
- *(volatile unsigned short *)(void *)(((unsigned char*)(base)) + (offset))
-# define MMIO_IN32(base, offset) \
- *(volatile unsigned int *)(void *)(((unsigned char*)(base)) + (offset))
-# define MMIO_OUT8(base, offset, val) \
- *(volatile unsigned char *)(((unsigned char*)(base)) + (offset)) = (val)
-# define MMIO_OUT16(base, offset, val) \
- *(volatile unsigned short *)(void *)(((unsigned char*)(base)) + (offset)) = (val)
-# define MMIO_OUT32(base, offset, val) \
- *(volatile unsigned int *)(void *)(((unsigned char*)(base)) + (offset)) = (val)
-
-#define INREG8(addr) MMIO_IN8(pMga->IOBase, addr)
-#define INREG16(addr) MMIO_IN16(pMga->IOBase, addr)
-#define INREG(addr) MMIO_IN32(pMga->IOBase, addr)
-#define OUTREG8(addr, val) MMIO_OUT8(pMga->IOBase, addr, val)
-#define OUTREG16(addr, val) MMIO_OUT16(pMga->IOBase, addr, val)
-#define OUTREG(addr, val) MMIO_OUT32(pMga->IOBase, addr, val)
-
-#define MGAIOMAPSIZE 0x00004000
-
-
-typedef struct {
- int Chipset; /**< \brief Chipset number */
-
- int irq; /**< \brief IRQ number */
-
-
- int frontOffset; /**< \brief Front color buffer offset */
- int frontPitch; /**< \brief Front color buffer pitch */
- int backOffset; /**< \brief Back color buffer offset */
- int backPitch; /**< \brief Back color buffer pitch */
- int depthOffset; /**< \brief Depth buffer offset */
- int depthPitch; /**< \brief Depth buffer pitch */
- int textureOffset; /**< \brief Texture area offset */
- int textureSize; /**< \brief Texture area size */
- int logTextureGranularity;
-
- /**
- * \name AGP
- */
- /*@{*/
- drmSize agpSize; /**< \brief AGP map size */
- int agpMode; /**< \brief AGP mode */
- /*@}*/
-
- drmRegion agp;
-
- /* PCI mappings */
- drmRegion registers;
- drmRegion status;
-
- /* AGP mappings */
- drmRegion warp;
- drmRegion primary;
- drmRegion buffers;
- drmRegion agpTextures;
-
- drmBufMapPtr drmBuffers;
-
- unsigned long IOAddress;
- unsigned char *IOBase;
- int HasSDRAM;
-
- __u32 reg_ien;
-} MGARec, *MGAPtr;
-
-
-
-#define MGA_FRONT 0x1
-#define MGA_BACK 0x2
-#define MGA_DEPTH 0x4
-
-#define MGA_AGP_1X_MODE 0x01
-#define MGA_AGP_2X_MODE 0x02
-#define MGA_AGP_4X_MODE 0x04
-#define MGA_AGP_MODE_MASK 0x07
-
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/server/mga_bios.h b/src/mesa/drivers/dri/mga/server/mga_bios.h
deleted file mode 100644
index 5dcfc1614d4..00000000000
--- a/src/mesa/drivers/dri/mga/server/mga_bios.h
+++ /dev/null
@@ -1,141 +0,0 @@
-#ifndef MGA_BIOS_H
-#define MGA_BIOS_H
-
-
-/*
- * MGABiosInfo - This struct describes the video BIOS info block.
- *
- * DESCRIPTION
- * Do not mess with this, unless you know what you are doing.
- * The data lengths and types are critical.
- *
- * HISTORY
- * October 7, 1996 - [aem] Andrew E. Mileski
- * This struct was shamelessly stolen from the MGA DDK.
- * It has been reformatted, and the data types changed.
- */
-typedef struct {
- /* Length of this structure in bytes */
- __u16 StructLen;
-
- /*
- * Unique number identifying the product type
- * 0 : MGA-S1P20 (2MB base with 175MHz Ramdac)
- * 1 : MGA-S1P21 (2MB base with 220MHz Ramdac)
- * 2 : Reserved
- * 3 : Reserved
- * 4 : MGA-S1P40 (4MB base with 175MHz Ramdac)
- * 5 : MGA-S1P41 (4MB base with 220MHz Ramdac)
- */
- __u16 ProductID;
-
- /* Serial number of the board */
- __u8 SerNo[ 10 ];
-
- /*
- * Manufacturing date of the board (at product test)
- * Format: yyyy yyym mmmd dddd
- */
- __u16 ManufDate;
-
- /* Identification of manufacturing site */
- __u16 ManufId;
-
- /*
- * Number and revision level of the PCB
- * Format: nnnn nnnn nnnr rrrr
- * n = PCB number ex:576 (from 0->2047)
- * r = PCB revision (from 0->31)
- */
- __u16 PCBInfo;
-
- /* Identification of any PMBs */
- __u16 PMBInfo;
-
- /*
- * Bit 0-7 : Ramdac speed (0=175MHz, 1=220MHz)
- * Bit 8-15 : Ramdac type (0=TVP3026, 1=TVP3027)
- */
- __u16 RamdacType;
-
- /* Maximum PCLK of the ramdac */
- __u16 PclkMax;
-
- /* Maximum LDCLK supported by the WRAM memory */
- __u16 LclkMax;
-
- /* Maximum MCLK of base board */
- __u16 ClkBase;
-
- /* Maximum MCLK of 4Mb board */
- __u16 Clk4MB;
-
- /* Maximum MCLK of 8Mb board */
- __u16 Clk8MB;
-
- /* Maximum MCLK of board with multimedia module */
- __u16 ClkMod;
-
- /* Diagnostic test pass frequency */
- __u16 TestClk;
-
- /* Default VGA mode1 pixel frequency */
- __u16 VGAFreq1;
-
- /* Default VGA mode2 pixel frequency */
- __u16 VGAFreq2;
-
- /* Date of last BIOS programming/update */
- __u16 ProgramDate;
-
- /* Number of times BIOS has been programmed */
- __u16 ProgramCnt;
-
- /* Support for up to 32 hardware/software options */
- __u32 Options;
-
- /* Support for up to 32 hardware/software features */
- __u32 FeatFlag;
-
- /* Definition of VGA mode MCLK */
- __u16 VGAClk;
-
- /* Indicate the revision level of this header struct */
- __u16 StructRev;
-
- __u16 Reserved[ 3 ];
-} MGABiosInfo;
-
-/* from the PINS structure, refer pins info from MGA */
-typedef struct tagParamMGA {
- __u16 PinID; /* 0 */
- __u8 StructLen; /* 2 */
- __u8 Rsvd1; /* 3 */
- __u16 StructRev; /* 4 */
- __u16 ProgramDate; /* 6 */
- __u16 ProgramCnt; /* 8 */
- __u16 ProductID; /* 10 */
- __u8 SerNo[16]; /* 12 */
- __u8 PLInfo[6]; /* 28 */
- __u16 PCBInfo; /* 34 */
- __u32 FeatFlag; /* 36 */
- __u8 RamdacType; /* 40 */
- __u8 RamdacSpeed; /* 41 */
- __u8 PclkMax; /* 42 */
- __u8 ClkGE; /* 43 */
- __u8 ClkMem; /* 44 */
- __u8 Clk4MB; /* 45 */
- __u8 Clk8MB; /* 46 */
- __u8 ClkMod; /* 47 */
- __u8 TestClk; /* 48 */
- __u8 VGAFreq1; /* 49 */
- __u8 VGAFreq2; /* 50 */
- __u8 MCTLWTST; /* 51 */
- __u8 VidCtrl; /* 52 */
- __u8 Clk12MB; /* 53 */
- __u8 Clk16MB; /* 54 */
- __u8 Reserved[8]; /* 55-62 */
- __u8 PinCheck; /* 63 */
-} MGABios2Info;
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/server/mga_dri.h b/src/mesa/drivers/dri/mga/server/mga_dri.h
deleted file mode 100644
index 1ce07028f17..00000000000
--- a/src/mesa/drivers/dri/mga/server/mga_dri.h
+++ /dev/null
@@ -1,112 +0,0 @@
-
-/*
- * Copyright 2000 VA Linux Systems Inc., Fremont, California.
- * 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, 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
- * VA LINUX SYSTEMS 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.
- *
- * Authors:
- * Keith Whitwell
- * Gareth Hughes
- */
-
-#ifndef __MGA_DRI_H__
-#define __MGA_DRI_H__
-
-#include "xf86drm.h"
-#include "drm.h"
-#include "mga_drm.h"
-
-#define MGA_DEFAULT_AGP_SIZE 64
-#define MGA_DEFAULT_AGP_MODE 4
-#define MGA_MAX_AGP_MODE 4
-
-/* Buffer are aligned on 4096 byte boundaries.
- */
-#define MGA_BUFFER_ALIGN 0x00000fff
-
-#ifdef __GNUC__
-# define DEPRECATED __attribute__ ((deprecated))
-#else
-# define DEPRECATED
-#endif
-
-#if 1
-typedef struct _mgaDrmRegion {
- drm_handle_t handle;
- unsigned int offset;
- drmSize size;
-} mgaDrmRegion, *mgaDrmRegionPtr;
-#else
-#define mgaDrmRegion drmRegion
-#endif
-
-typedef struct {
- int chipset;
- int width DEPRECATED;
- int height DEPRECATED;
- int mem DEPRECATED;
- int cpp;
-
- int agpMode;
-
- unsigned int frontOffset;
- unsigned int frontPitch;
-
- unsigned int backOffset;
- unsigned int backPitch;
-
- unsigned int depthOffset;
- unsigned int depthPitch;
-
- unsigned int textureOffset;
- unsigned int textureSize;
- int logTextureGranularity DEPRECATED;
-
- /* Allow calculation of setup dma addresses.
- */
- unsigned int agpBufferOffset DEPRECATED;
-
- unsigned int agpTextureOffset;
- unsigned int agpTextureSize;
- int logAgpTextureGranularity DEPRECATED;
-
- unsigned int mAccess DEPRECATED;
-
- /**
- * \name DRM memory regions.
- *
- * \todo
- * Several of these fields are no longer used (and will never be used
- * again) on the client-side. None of them, except \c registers, are used
- * on the server-side. At some point when it is safe to do so (probably
- * for the X.org 6.9 / 7.0 release), these fields should be removed.
- */
- /*@{*/
- mgaDrmRegion registers; /**< MMIO registers. */
- mgaDrmRegion status DEPRECATED; /**< No longer used on the client-side. */
- mgaDrmRegion primary; /**< Primary DMA region. */
- mgaDrmRegion buffers DEPRECATED; /**< No longer used on the client-side. */
- /*@}*/
-
- unsigned int sarea_priv_offset;
-} MGADRIRec, *MGADRIPtr;
-
-#endif
diff --git a/src/mesa/drivers/dri/mga/server/mga_macros.h b/src/mesa/drivers/dri/mga/server/mga_macros.h
deleted file mode 100644
index 189e1415d05..00000000000
--- a/src/mesa/drivers/dri/mga/server/mga_macros.h
+++ /dev/null
@@ -1,117 +0,0 @@
-
-#ifndef _MGA_MACROS_H_
-#define _MGA_MACROS_H_
-
-#ifndef PSZ
-#define PSZ 8
-#endif
-
-#if PSZ == 8
-#define REPLICATE(r) r &= 0xFF; r |= r << 8; r |= r << 16
-#elif PSZ == 16
-#define REPLICATE(r) r &= 0xFFFF; r |= r << 16
-#elif PSZ == 24
-#define REPLICATE(r) r &= 0xFFFFFF; r |= r << 24
-#else
-#define REPLICATE(r) /* */
-#endif
-
-#define RGBEQUAL(c) (!((((c) >> 8) ^ (c)) & 0xffff))
-
-#ifdef XF86DRI
-#define MGA_SYNC_XTAG 0x275f4200
-
-#define MGABUSYWAIT() do { \
-OUTREG(MGAREG_DWGSYNC, MGA_SYNC_XTAG); \
-while(INREG(MGAREG_DWGSYNC) != MGA_SYNC_XTAG) ; \
-}while(0);
-
-#endif
-
-#define MGAISBUSY() (INREG8(MGAREG_Status + 2) & 0x01)
-
-#define WAITFIFO(cnt) \
- if(!pMga->UsePCIRetry) {\
- register int n = cnt; \
- if(n > pMga->FifoSize) n = pMga->FifoSize; \
- while(pMga->fifoCount < (n))\
- pMga->fifoCount = INREG8(MGAREG_FIFOSTATUS);\
- pMga->fifoCount -= n;\
- }
-
-#define XYADDRESS(x,y) \
- ((y) * pMga->CurrentLayout.displayWidth + (x) + pMga->YDstOrg)
-
-#define MAKEDMAINDEX(index) ((((index) >> 2) & 0x7f) | (((index) >> 6) & 0x80))
-
-#define DMAINDICES(one,two,three,four) \
- ( MAKEDMAINDEX(one) | \
- (MAKEDMAINDEX(two) << 8) | \
- (MAKEDMAINDEX(three) << 16) | \
- (MAKEDMAINDEX(four) << 24) )
-
-#if PSZ == 24
-#define SET_PLANEMASK(p) /**/
-#else
-#define SET_PLANEMASK(p) \
- if(!(pMga->AccelFlags & MGA_NO_PLANEMASK) && ((p) != pMga->PlaneMask)) { \
- pMga->PlaneMask = (p); \
- REPLICATE((p)); \
- OUTREG(MGAREG_PLNWT,(p)); \
- }
-#endif
-
-#define SET_FOREGROUND(c) \
- if((c) != pMga->FgColor) { \
- pMga->FgColor = (c); \
- REPLICATE((c)); \
- OUTREG(MGAREG_FCOL,(c)); \
- }
-
-#define SET_BACKGROUND(c) \
- if((c) != pMga->BgColor) { \
- pMga->BgColor = (c); \
- REPLICATE((c)); \
- OUTREG(MGAREG_BCOL,(c)); \
- }
-
-#define DISABLE_CLIP() { \
- pMga->AccelFlags &= ~CLIPPER_ON; \
- WAITFIFO(1); \
- OUTREG(MGAREG_CXBNDRY, 0xFFFF0000); }
-
-#ifdef XF86DRI
-#define CHECK_DMA_QUIESCENT(pMGA, pScrn) { \
- if (!pMGA->haveQuiescense) { \
- pMGA->GetQuiescence( pScrn ); \
- } \
-}
-#else
-#define CHECK_DMA_QUIESCENT(pMGA, pScrn)
-#endif
-
-#ifdef USEMGAHAL
-#define HAL_CHIPSETS ((pMga->Chipset == PCI_CHIP_MGAG200_PCI) || \
- (pMga->Chipset == PCI_CHIP_MGAG200) || \
- (pMga->Chipset == PCI_CHIP_MGAG400) || \
- (pMga->Chipset == PCI_CHIP_MGAG550))
-
-#define MGA_HAL(x) { \
- MGAPtr pMga = MGAPTR(pScrn); \
- if (pMga->HALLoaded && HAL_CHIPSETS) { x; } \
-}
-#define MGA_NOT_HAL(x) { \
- MGAPtr pMga = MGAPTR(pScrn); \
- if (!pMga->HALLoaded || !HAL_CHIPSETS) { x; } \
-}
-#else
-#define MGA_NOT_HAL(x) { x; }
-#endif
-
-#define MGAISGx50(x) ( (((x)->Chipset == PCI_CHIP_MGAG400) && ((x)->ChipRev >= 0x80)) || \
- ((x)->Chipset == PCI_CHIP_MGAG550) )
-
-#define MGA_DH_NEEDS_HAL(x) (((x)->Chipset == PCI_CHIP_MGAG400) && \
- ((x)->ChipRev < 0x80))
-
-#endif /* _MGA_MACROS_H_ */
diff --git a/src/mesa/drivers/dri/mga/server/mga_reg.h b/src/mesa/drivers/dri/mga/server/mga_reg.h
deleted file mode 100644
index d51366d44e2..00000000000
--- a/src/mesa/drivers/dri/mga/server/mga_reg.h
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
-
-/*
- * MGA Millennium (MGA2064W) functions
- * MGA Mystique (MGA1064SG) functions
- *
- * Copyright 1996 The XFree86 Project, Inc.
- *
- * Authors
- * Dirk Hohndel
- * hohndel@XFree86.Org
- * David Dawes
- * dawes@XFree86.Org
- * Contributors:
- * Guy DESBIEF, Aix-en-provence, France
- * g.desbief@aix.pacwan.net
- * MGA1064SG Mystique register file
- */
-
-
-#ifndef _MGA_REG_H_
-#define _MGA_REG_H_
-
-#define MGAREG_DWGCTL 0x1c00
-#define MGAREG_MACCESS 0x1c04
-#define MGA_MACCESS_PW16 0x00000001
-#define MGA_MACCESS_PW32 0x00000002
-/* the following is a mystique only register */
-#define MGAREG_MCTLWTST 0x1c08
-#define MGAREG_ZORG 0x1c0c
-
-#define MGAREG_PAT0 0x1c10
-#define MGAREG_PAT1 0x1c14
-#define MGAREG_PLNWT 0x1c1c
-
-#define MGAREG_BCOL 0x1c20
-#define MGAREG_FCOL 0x1c24
-
-#define MGAREG_SRC0 0x1c30
-#define MGAREG_SRC1 0x1c34
-#define MGAREG_SRC2 0x1c38
-#define MGAREG_SRC3 0x1c3c
-
-#define MGAREG_XYSTRT 0x1c40
-#define MGAREG_XYEND 0x1c44
-
-#define MGAREG_SHIFT 0x1c50
-/* the following is a mystique only register */
-#define MGAREG_DMAPAD 0x1c54
-#define MGAREG_SGN 0x1c58
-#define MGAREG_LEN 0x1c5c
-
-#define MGAREG_AR0 0x1c60
-#define MGAREG_AR1 0x1c64
-#define MGAREG_AR2 0x1c68
-#define MGAREG_AR3 0x1c6c
-#define MGAREG_AR4 0x1c70
-#define MGAREG_AR5 0x1c74
-#define MGAREG_AR6 0x1c78
-
-#define MGAREG_CXBNDRY 0x1c80
-#define MGAREG_FXBNDRY 0x1c84
-#define MGAREG_YDSTLEN 0x1c88
-#define MGAREG_PITCH 0x1c8c
-
-#define MGAREG_YDST 0x1c90
-#define MGAREG_YDSTORG 0x1c94
-#define MGAREG_YTOP 0x1c98
-#define MGAREG_YBOT 0x1c9c
-
-#define MGAREG_CXLEFT 0x1ca0
-#define MGAREG_CXRIGHT 0x1ca4
-#define MGAREG_FXLEFT 0x1ca8
-#define MGAREG_FXRIGHT 0x1cac
-
-#define MGAREG_XDST 0x1cb0
-
-#define MGAREG_DR0 0x1cc0
-#define MGAREG_DR1 0x1cc4
-#define MGAREG_DR2 0x1cc8
-#define MGAREG_DR3 0x1ccc
-
-#define MGAREG_DR4 0x1cd0
-#define MGAREG_DR5 0x1cd4
-#define MGAREG_DR6 0x1cd8
-#define MGAREG_DR7 0x1cdc
-
-#define MGAREG_DR8 0x1ce0
-#define MGAREG_DR9 0x1ce4
-#define MGAREG_DR10 0x1ce8
-#define MGAREG_DR11 0x1cec
-
-#define MGAREG_DR12 0x1cf0
-#define MGAREG_DR13 0x1cf4
-#define MGAREG_DR14 0x1cf8
-#define MGAREG_DR15 0x1cfc
-
-#define MGAREG_SRCORG 0x2cb4
-#define MGAREG_DSTORG 0x2cb8
-
-/* add or or this to one of the previous "power registers" to start
- the drawing engine */
-
-#define MGAREG_EXEC 0x0100
-
-#define MGAREG_FIFOSTATUS 0x1e10
-#define MGAREG_Status 0x1e14
-#define MGAREG_ICLEAR 0x1e18
-#define MGAREG_IEN 0x1e1c
-
-#define MGAREG_VCOUNT 0x1e20
-
-#define MGAREG_Reset 0x1e40
-
-#define MGAREG_OPMODE 0x1e54
-
-/* Warp Registers */
-#define MGAREG_WIADDR 0x1dc0
-#define MGAREG_WIADDR2 0x1dd8
-#define MGAREG_WGETMSB 0x1dc8
-#define MGAREG_WVRTXSZ 0x1dcc
-#define MGAREG_WACCEPTSEQ 0x1dd4
-#define MGAREG_WMISC 0x1e70
-
-/* OPMODE register additives */
-
-#define MGAOPM_DMA_GENERAL (0x00 << 2)
-#define MGAOPM_DMA_BLIT (0x01 << 2)
-#define MGAOPM_DMA_VECTOR (0x10 << 2)
-
-/* DWGCTL register additives */
-
-/* Lines */
-
-#define MGADWG_LINE_OPEN 0x00
-#define MGADWG_AUTOLINE_OPEN 0x01
-#define MGADWG_LINE_CLOSE 0x02
-#define MGADWG_AUTOLINE_CLOSE 0x03
-
-/* Trapezoids */
-#define MGADWG_TRAP 0x04
-#define MGADWG_TEXTURE_TRAP 0x05
-
-/* BitBlts */
-
-#define MGADWG_BITBLT 0x08
-#define MGADWG_FBITBLT 0x0c
-#define MGADWG_ILOAD 0x09
-#define MGADWG_ILOAD_SCALE 0x0d
-#define MGADWG_ILOAD_FILTER 0x0f
-#define MGADWG_ILOAD_HIQH 0x07
-#define MGADWG_ILOAD_HIQHV 0x0e
-#define MGADWG_IDUMP 0x0a
-
-/* atype access to WRAM */
-
-#define MGADWG_RPL ( 0x00 << 4 )
-#define MGADWG_RSTR ( 0x01 << 4 )
-#define MGADWG_ZI ( 0x03 << 4 )
-#define MGADWG_BLK ( 0x04 << 4 )
-#define MGADWG_I ( 0x07 << 4 )
-
-/* specifies whether bit blits are linear or xy */
-#define MGADWG_LINEAR ( 0x01 << 7 )
-
-/* z drawing mode. use MGADWG_NOZCMP for always */
-
-#define MGADWG_NOZCMP ( 0x00 << 8 )
-#define MGADWG_ZE ( 0x02 << 8 )
-#define MGADWG_ZNE ( 0x03 << 8 )
-#define MGADWG_ZLT ( 0x04 << 8 )
-#define MGADWG_ZLTE ( 0x05 << 8 )
-#define MGADWG_GT ( 0x06 << 8 )
-#define MGADWG_GTE ( 0x07 << 8 )
-
-/* use this to force colour expansion circuitry to do its stuff */
-
-#define MGADWG_SOLID ( 0x01 << 11 )
-
-/* ar register at zero */
-
-#define MGADWG_ARZERO ( 0x01 << 12 )
-
-#define MGADWG_SGNZERO ( 0x01 << 13 )
-
-#define MGADWG_SHIFTZERO ( 0x01 << 14 )
-
-/* See table on 4-43 for bop ALU operations */
-
-/* See table on 4-44 for translucidity masks */
-
-#define MGADWG_BMONOLEF ( 0x00 << 25 )
-#define MGADWG_BMONOWF ( 0x04 << 25 )
-#define MGADWG_BPLAN ( 0x01 << 25 )
-
-/* note that if bfcol is specified and you're doing a bitblt, it causes
- a fbitblt to be performed, so check that you obey the fbitblt rules */
-
-#define MGADWG_BFCOL ( 0x02 << 25 )
-#define MGADWG_BUYUV ( 0x0e << 25 )
-#define MGADWG_BU32BGR ( 0x03 << 25 )
-#define MGADWG_BU32RGB ( 0x07 << 25 )
-#define MGADWG_BU24BGR ( 0x0b << 25 )
-#define MGADWG_BU24RGB ( 0x0f << 25 )
-
-#define MGADWG_PATTERN ( 0x01 << 29 )
-#define MGADWG_TRANSC ( 0x01 << 30 )
-#define MGAREG_MISC_WRITE 0x3c2
-#define MGAREG_MISC_READ 0x3cc
-#define MGAREG_MISC_IOADSEL (0x1 << 0)
-#define MGAREG_MISC_RAMMAPEN (0x1 << 1)
-#define MGAREG_MISC_CLK_SEL_VGA25 (0x0 << 2)
-#define MGAREG_MISC_CLK_SEL_VGA28 (0x1 << 2)
-#define MGAREG_MISC_CLK_SEL_MGA_PIX (0x2 << 2)
-#define MGAREG_MISC_CLK_SEL_MGA_MSK (0x3 << 2)
-#define MGAREG_MISC_VIDEO_DIS (0x1 << 4)
-#define MGAREG_MISC_HIGH_PG_SEL (0x1 << 5)
-
-/* MMIO VGA registers */
-#define MGAREG_SEQ_INDEX 0x1fc4
-#define MGAREG_SEQ_DATA 0x1fc5
-#define MGAREG_CRTC_INDEX 0x1fd4
-#define MGAREG_CRTC_DATA 0x1fd5
-#define MGAREG_CRTCEXT_INDEX 0x1fde
-#define MGAREG_CRTCEXT_DATA 0x1fdf
-
-
-
-/* MGA bits for registers PCI_OPTION_REG */
-#define MGA1064_OPT_SYS_CLK_PCI ( 0x00 << 0 )
-#define MGA1064_OPT_SYS_CLK_PLL ( 0x01 << 0 )
-#define MGA1064_OPT_SYS_CLK_EXT ( 0x02 << 0 )
-#define MGA1064_OPT_SYS_CLK_MSK ( 0x03 << 0 )
-
-#define MGA1064_OPT_SYS_CLK_DIS ( 0x01 << 2 )
-#define MGA1064_OPT_G_CLK_DIV_1 ( 0x01 << 3 )
-#define MGA1064_OPT_M_CLK_DIV_1 ( 0x01 << 4 )
-
-#define MGA1064_OPT_SYS_PLL_PDN ( 0x01 << 5 )
-#define MGA1064_OPT_VGA_ION ( 0x01 << 8 )
-
-/* MGA registers in PCI config space */
-#define PCI_MGA_INDEX 0x44
-#define PCI_MGA_DATA 0x48
-#define PCI_MGA_OPTION2 0x50
-#define PCI_MGA_OPTION3 0x54
-
-#define RAMDAC_OFFSET 0x3c00
-
-/* TVP3026 direct registers */
-
-#define TVP3026_INDEX 0x00
-#define TVP3026_WADR_PAL 0x00
-#define TVP3026_COL_PAL 0x01
-#define TVP3026_PIX_RD_MSK 0x02
-#define TVP3026_RADR_PAL 0x03
-#define TVP3026_CUR_COL_ADDR 0x04
-#define TVP3026_CUR_COL_DATA 0x05
-#define TVP3026_DATA 0x0a
-#define TVP3026_CUR_RAM 0x0b
-#define TVP3026_CUR_XLOW 0x0c
-#define TVP3026_CUR_XHI 0x0d
-#define TVP3026_CUR_YLOW 0x0e
-#define TVP3026_CUR_YHI 0x0f
-
-/* TVP3026 indirect registers */
-
-#define TVP3026_SILICON_REV 0x01
-#define TVP3026_CURSOR_CTL 0x06
-#define TVP3026_LATCH_CTL 0x0f
-#define TVP3026_TRUE_COLOR_CTL 0x18
-#define TVP3026_MUX_CTL 0x19
-#define TVP3026_CLK_SEL 0x1a
-#define TVP3026_PAL_PAGE 0x1c
-#define TVP3026_GEN_CTL 0x1d
-#define TVP3026_MISC_CTL 0x1e
-#define TVP3026_GEN_IO_CTL 0x2a
-#define TVP3026_GEN_IO_DATA 0x2b
-#define TVP3026_PLL_ADDR 0x2c
-#define TVP3026_PIX_CLK_DATA 0x2d
-#define TVP3026_MEM_CLK_DATA 0x2e
-#define TVP3026_LOAD_CLK_DATA 0x2f
-#define TVP3026_KEY_RED_LOW 0x32
-#define TVP3026_KEY_RED_HI 0x33
-#define TVP3026_KEY_GREEN_LOW 0x34
-#define TVP3026_KEY_GREEN_HI 0x35
-#define TVP3026_KEY_BLUE_LOW 0x36
-#define TVP3026_KEY_BLUE_HI 0x37
-#define TVP3026_KEY_CTL 0x38
-#define TVP3026_MCLK_CTL 0x39
-#define TVP3026_SENSE_TEST 0x3a
-#define TVP3026_TEST_DATA 0x3b
-#define TVP3026_CRC_LSB 0x3c
-#define TVP3026_CRC_MSB 0x3d
-#define TVP3026_CRC_CTL 0x3e
-#define TVP3026_ID 0x3f
-#define TVP3026_RESET 0xff
-
-
-/* MGA1064 DAC Register file */
-/* MGA1064 direct registers */
-
-#define MGA1064_INDEX 0x00
-#define MGA1064_WADR_PAL 0x00
-#define MGA1064_COL_PAL 0x01
-#define MGA1064_PIX_RD_MSK 0x02
-#define MGA1064_RADR_PAL 0x03
-#define MGA1064_DATA 0x0a
-
-#define MGA1064_CUR_XLOW 0x0c
-#define MGA1064_CUR_XHI 0x0d
-#define MGA1064_CUR_YLOW 0x0e
-#define MGA1064_CUR_YHI 0x0f
-
-/* MGA1064 indirect registers */
-#define MGA1064_DVI_PIPE_CTL 0x03
-#define MGA1064_CURSOR_BASE_ADR_LOW 0x04
-#define MGA1064_CURSOR_BASE_ADR_HI 0x05
-#define MGA1064_CURSOR_CTL 0x06
-#define MGA1064_CURSOR_COL0_RED 0x08
-#define MGA1064_CURSOR_COL0_GREEN 0x09
-#define MGA1064_CURSOR_COL0_BLUE 0x0a
-
-#define MGA1064_CURSOR_COL1_RED 0x0c
-#define MGA1064_CURSOR_COL1_GREEN 0x0d
-#define MGA1064_CURSOR_COL1_BLUE 0x0e
-
-#define MGA1064_CURSOR_COL2_RED 0x010
-#define MGA1064_CURSOR_COL2_GREEN 0x011
-#define MGA1064_CURSOR_COL2_BLUE 0x012
-
-#define MGA1064_VREF_CTL 0x018
-
-#define MGA1064_MUL_CTL 0x19
-#define MGA1064_MUL_CTL_8bits 0x0
-#define MGA1064_MUL_CTL_15bits 0x01
-#define MGA1064_MUL_CTL_16bits 0x02
-#define MGA1064_MUL_CTL_24bits 0x03
-#define MGA1064_MUL_CTL_32bits 0x04
-#define MGA1064_MUL_CTL_2G8V16bits 0x05
-#define MGA1064_MUL_CTL_G16V16bits 0x06
-#define MGA1064_MUL_CTL_32_24bits 0x07
-
-#define MGAGDAC_XVREFCTRL 0x18
-#define MGA1064_PIX_CLK_CTL 0x1a
-#define MGA1064_PIX_CLK_CTL_CLK_DIS ( 0x01 << 2 )
-#define MGA1064_PIX_CLK_CTL_CLK_POW_DOWN ( 0x01 << 3 )
-#define MGA1064_PIX_CLK_CTL_SEL_PCI ( 0x00 << 0 )
-#define MGA1064_PIX_CLK_CTL_SEL_PLL ( 0x01 << 0 )
-#define MGA1064_PIX_CLK_CTL_SEL_EXT ( 0x02 << 0 )
-#define MGA1064_PIX_CLK_CTL_SEL_MSK ( 0x03 << 0 )
-
-#define MGA1064_GEN_CTL 0x1d
-#define MGA1064_MISC_CTL 0x1e
-#define MGA1064_MISC_CTL_DAC_POW_DN ( 0x01 << 0 )
-#define MGA1064_MISC_CTL_VGA ( 0x01 << 1 )
-#define MGA1064_MISC_CTL_DIS_CON ( 0x03 << 1 )
-#define MGA1064_MISC_CTL_MAFC ( 0x02 << 1 )
-#define MGA1064_MISC_CTL_VGA8 ( 0x01 << 3 )
-#define MGA1064_MISC_CTL_DAC_RAM_CS ( 0x01 << 4 )
-
-#define MGA1064_GEN_IO_CTL 0x2a
-#define MGA1064_GEN_IO_DATA 0x2b
-#define MGA1064_SYS_PLL_M 0x2c
-#define MGA1064_SYS_PLL_N 0x2d
-#define MGA1064_SYS_PLL_P 0x2e
-#define MGA1064_SYS_PLL_STAT 0x2f
-#define MGA1064_ZOOM_CTL 0x38
-#define MGA1064_SENSE_TST 0x3a
-
-#define MGA1064_CRC_LSB 0x3c
-#define MGA1064_CRC_MSB 0x3d
-#define MGA1064_CRC_CTL 0x3e
-#define MGA1064_COL_KEY_MSK_LSB 0x40
-#define MGA1064_COL_KEY_MSK_MSB 0x41
-#define MGA1064_COL_KEY_LSB 0x42
-#define MGA1064_COL_KEY_MSB 0x43
-#define MGA1064_PIX_PLLA_M 0x44
-#define MGA1064_PIX_PLLA_N 0x45
-#define MGA1064_PIX_PLLA_P 0x46
-#define MGA1064_PIX_PLLB_M 0x48
-#define MGA1064_PIX_PLLB_N 0x49
-#define MGA1064_PIX_PLLB_P 0x4a
-#define MGA1064_PIX_PLLC_M 0x4c
-#define MGA1064_PIX_PLLC_N 0x4d
-#define MGA1064_PIX_PLLC_P 0x4e
-
-#define MGA1064_PIX_PLL_STAT 0x4f
-
-/*Added for G450 dual head*/
-/* Supported PLL*/
-#define __PIXEL_PLL 1
-#define __SYSTEM_PLL 2
-#define __VIDEO_PLL 3
-
-#define MGA1064_VID_PLL_P 0x8D
-#define MGA1064_VID_PLL_M 0x8E
-#define MGA1064_VID_PLL_N 0x8F
-
-#define MGA1064_DISP_CTL 0x8a
-#define MGA1064_SYNC_CTL 0x8b
-#define MGA1064_PWR_CTL 0xa0
-#define MGA1064_PAN_CTL 0xa2
-
-/* Using crtc2 */
-#define MGAREG2_C2CTL 0x10
-#define MGAREG2_C2HPARAM 0x14
-#define MGAREG2_C2HSYNC 0x18
-#define MGAREG2_C2VPARAM 0x1c
-#define MGAREG2_C2VSYNC 0x20
-#define MGAREG2_C2STARTADD0 0x28
-
-#define MGAREG2_C2OFFSET 0x40
-#define MGAREG2_C2DATACTL 0x4c
-
-#define MGAREG_C2CTL 0x3c10
-#define MGAREG_C2HPARAM 0x3c14
-#define MGAREG_C2HSYNC 0x3c18
-#define MGAREG_C2VPARAM 0x3c1c
-#define MGAREG_C2VSYNC 0x3c20
-#define MGAREG_C2STARTADD0 0x3c28
-
-#define MGAREG_C2OFFSET 0x3c40
-#define MGAREG_C2DATACTL 0x3c4c
-
-#define MGA1064_DISP_CTL 0x8a
-#define MGA1064_SYNC_CTL 0x8b
-#define MGA1064_PWR_CTL 0xa0
-
-/* video register */
-
-#define MGAREG_BESA1C3ORG 0x3d60
-#define MGAREG_BESA1CORG 0x3d10
-#define MGAREG_BESA1ORG 0x3d00
-#define MGAREG_BESCTL 0x3d20
-#define MGAREG_BESGLOBCTL 0x3dc0
-#define MGAREG_BESHCOORD 0x3d28
-#define MGAREG_BESHISCAL 0x3d30
-#define MGAREG_BESHSRCEND 0x3d3c
-#define MGAREG_BESHSRCLST 0x3d50
-#define MGAREG_BESHSRCST 0x3d38
-#define MGAREG_BESLUMACTL 0x3d40
-#define MGAREG_BESPITCH 0x3d24
-#define MGAREG_BESV1SRCLST 0x3d54
-#define MGAREG_BESV1WGHT 0x3d48
-#define MGAREG_BESVCOORD 0x3d2c
-#define MGAREG_BESVISCAL 0x3d34
-
-/* texture engine registers */
-
-#define MGAREG_TMR0 0x2c00
-#define MGAREG_TMR1 0x2c04
-#define MGAREG_TMR2 0x2c08
-#define MGAREG_TMR3 0x2c0c
-#define MGAREG_TMR4 0x2c10
-#define MGAREG_TMR5 0x2c14
-#define MGAREG_TMR6 0x2c18
-#define MGAREG_TMR7 0x2c1c
-#define MGAREG_TMR8 0x2c20
-#define MGAREG_TEXORG 0x2c24
-#define MGAREG_TEXWIDTH 0x2c28
-#define MGAREG_TEXHEIGHT 0x2c2c
-#define MGAREG_TEXCTL 0x2c30
-#define MGAREG_TEXCTL2 0x2c3c
-#define MGAREG_TEXTRANS 0x2c34
-#define MGAREG_TEXTRANSHIGH 0x2c38
-#define MGAREG_TEXFILTER 0x2c58
-#define MGAREG_ALPHASTART 0x2c70
-#define MGAREG_ALPHAXINC 0x2c74
-#define MGAREG_ALPHAYINC 0x2c78
-#define MGAREG_ALPHACTRL 0x2c7c
-#define MGAREG_DWGSYNC 0x2c4c
-
-#define MGAREG_AGP_PLL 0x1e4c
-#define MGA_AGP2XPLL_ENABLE 0x1
-#define MGA_AGP2XPLL_DISABLE 0x0
-
-#endif
diff --git a/src/mesa/drivers/dri/r128/Makefile b/src/mesa/drivers/dri/r128/Makefile
deleted file mode 100644
index 8b23ccc8cbe..00000000000
--- a/src/mesa/drivers/dri/r128/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-# src/mesa/drivers/dri/r128/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = r128_dri.so
-
-include ../Makefile.defines
-
-DRIVER_SOURCES = \
- r128_context.c \
- r128_lock.c \
- r128_state.c \
- r128_texstate.c \
- r128_dd.c \
- r128_screen.c \
- r128_tex.c \
- r128_tris.c \
- r128_ioctl.c \
- r128_span.c \
- r128_texmem.c
-
-C_SOURCES = \
- $(COMMON_SOURCES) \
- $(DRIVER_SOURCES)
-
-ASM_SOURCES =
-
-
-include ../Makefile.targets
-
diff --git a/src/mesa/drivers/dri/r128/r128_context.c b/src/mesa/drivers/dri/r128/r128_context.c
deleted file mode 100644
index 247d86ca008..00000000000
--- a/src/mesa/drivers/dri/r128/r128_context.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Kevin E. Martin
- * Gareth Hughes
- *
- */
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-#include "main/extensions.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "vbo/vbo.h"
-
-#include "tnl/tnl.h"
-#include "tnl/t_pipeline.h"
-
-#include "drivers/common/driverfuncs.h"
-
-#include "r128_context.h"
-#include "r128_ioctl.h"
-#include "r128_dd.h"
-#include "r128_state.h"
-#include "r128_span.h"
-#include "r128_tex.h"
-#include "r128_tris.h"
-
-#include "vblank.h"
-#include "utils.h"
-#include "texmem.h"
-#include "xmlpool.h" /* for symbolic values of enum-type options */
-
-#ifndef R128_DEBUG
-int R128_DEBUG = 0;
-#endif
-
-#define need_GL_EXT_blend_minmax
-#define need_GL_EXT_fog_coord
-#define need_GL_EXT_secondary_color
-#include "main/remap_helper.h"
-
-static const struct dri_extension card_extensions[] =
-{
- { "GL_ARB_multitexture", NULL },
- { "GL_ARB_texture_env_add", NULL },
- { "GL_ARB_texture_mirrored_repeat", NULL },
- { "GL_EXT_blend_subtract", GL_EXT_blend_minmax_functions },
- { "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
- { "GL_EXT_texture_edge_clamp", NULL },
- { "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
- { "GL_EXT_stencil_wrap", NULL },
- { "GL_MESA_ycbcr_texture", NULL },
- { "GL_NV_blend_square", NULL },
- { NULL, NULL }
-};
-
-static const struct dri_debug_control debug_control[] =
-{
- { "ioctl", DEBUG_VERBOSE_IOCTL },
- { "verb", DEBUG_VERBOSE_MSG },
- { "dri", DEBUG_VERBOSE_DRI },
- { "2d", DEBUG_VERBOSE_2D },
- { "sync", DEBUG_ALWAYS_SYNC },
- { "api", DEBUG_VERBOSE_API },
- { "fall", DEBUG_VERBOSE_FALL },
- { NULL, 0 }
-};
-
-/* Create the device specific context.
- */
-GLboolean r128CreateContext( gl_api api,
- const struct gl_config *glVisual,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate )
-{
- struct gl_context *ctx, *shareCtx;
- __DRIscreen *sPriv = driContextPriv->driScreenPriv;
- struct dd_function_table functions;
- r128ContextPtr rmesa;
- r128ScreenPtr r128scrn;
- int i;
-
- /* Allocate the r128 context */
- rmesa = (r128ContextPtr) CALLOC( sizeof(*rmesa) );
- if ( !rmesa )
- return GL_FALSE;
-
- /* Init default driver functions then plug in our Radeon-specific functions
- * (the texture functions are especially important)
- */
- _mesa_init_driver_functions( &functions );
- r128InitDriverFuncs( &functions );
- r128InitIoctlFuncs( &functions );
- r128InitTextureFuncs( &functions );
-
- /* Allocate the Mesa context */
- if (sharedContextPrivate)
- shareCtx = ((r128ContextPtr) sharedContextPrivate)->glCtx;
- else
- shareCtx = NULL;
- rmesa->glCtx = _mesa_create_context(API_OPENGL, glVisual, shareCtx,
- &functions, (void *) rmesa);
- if (!rmesa->glCtx) {
- FREE(rmesa);
- return GL_FALSE;
- }
- driContextPriv->driverPrivate = rmesa;
- ctx = rmesa->glCtx;
-
- rmesa->driContext = driContextPriv;
- rmesa->driScreen = sPriv;
- rmesa->driDrawable = NULL;
- rmesa->hHWContext = driContextPriv->hHWContext;
- rmesa->driHwLock = &sPriv->pSAREA->lock;
- rmesa->driFd = sPriv->fd;
-
- r128scrn = rmesa->r128Screen = (r128ScreenPtr)(sPriv->private);
-
- /* Parse configuration files */
- driParseConfigFiles (&rmesa->optionCache, &r128scrn->optionCache,
- r128scrn->driScreen->myNum, "r128");
-
- rmesa->sarea = (drm_r128_sarea_t *)((char *)sPriv->pSAREA +
- r128scrn->sarea_priv_offset);
-
- rmesa->CurrentTexObj[0] = NULL;
- rmesa->CurrentTexObj[1] = NULL;
-
- (void) memset( rmesa->texture_heaps, 0, sizeof( rmesa->texture_heaps ) );
- make_empty_list( & rmesa->swapped );
-
- rmesa->nr_heaps = r128scrn->numTexHeaps;
- for ( i = 0 ; i < rmesa->nr_heaps ; i++ ) {
- rmesa->texture_heaps[i] = driCreateTextureHeap( i, rmesa,
- r128scrn->texSize[i],
- 12,
- R128_NR_TEX_REGIONS,
- (drmTextureRegionPtr)rmesa->sarea->tex_list[i],
- &rmesa->sarea->tex_age[i],
- &rmesa->swapped,
- sizeof( r128TexObj ),
- (destroy_texture_object_t *) r128DestroyTexObj );
-
- driSetTextureSwapCounterLocation( rmesa->texture_heaps[i],
- & rmesa->c_textureSwaps );
- }
- rmesa->texture_depth = driQueryOptioni (&rmesa->optionCache,
- "texture_depth");
- if (rmesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_FB)
- rmesa->texture_depth = ( r128scrn->cpp == 4 ) ?
- DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
-
-
- rmesa->RenderIndex = -1; /* Impossible value */
- rmesa->vert_buf = NULL;
- rmesa->num_verts = 0;
- RENDERINPUTS_ONES( rmesa->tnl_state_bitset );
-
- /* Set the maximum texture size small enough that we can guarentee that
- * all texture units can bind a maximal texture and have them both in
- * texturable memory at once.
- */
-
- ctx->Const.MaxTextureUnits = 2;
- ctx->Const.MaxTextureImageUnits = 2;
- ctx->Const.MaxTextureCoordUnits = 2;
-
- driCalculateMaxTextureLevels( rmesa->texture_heaps,
- rmesa->nr_heaps,
- & ctx->Const,
- 4,
- 10, /* max 2D texture size is 1024x1024 */
- 0, /* 3D textures unsupported. */
- 0, /* cube textures unsupported. */
- 0, /* texture rectangles unsupported. */
- 11,
- GL_FALSE,
- 0 );
-
- /* No wide points.
- */
- ctx->Const.MinPointSize = 1.0;
- ctx->Const.MinPointSizeAA = 1.0;
- ctx->Const.MaxPointSize = 1.0;
- ctx->Const.MaxPointSizeAA = 1.0;
-
- /* No wide lines.
- */
- ctx->Const.MinLineWidth = 1.0;
- ctx->Const.MinLineWidthAA = 1.0;
- ctx->Const.MaxLineWidth = 1.0;
- ctx->Const.MaxLineWidthAA = 1.0;
- ctx->Const.LineWidthGranularity = 1.0;
-
- ctx->Const.MaxDrawBuffers = 1;
-
-#if ENABLE_PERF_BOXES
- rmesa->boxes = driQueryOptionb(&rmesa->optionCache, "performance_boxes");
-#endif
-
- /* Initialize the software rasterizer and helper modules.
- */
- _swrast_CreateContext( ctx );
- _vbo_CreateContext( ctx );
- _tnl_CreateContext( ctx );
- _swsetup_CreateContext( ctx );
-
- /* Install the customized pipeline:
- */
-/* _tnl_destroy_pipeline( ctx ); */
-/* _tnl_install_pipeline( ctx, r128_pipeline ); */
-
- /* Configure swrast and T&L to match hardware characteristics:
- */
- _swrast_allow_pixel_fog( ctx, GL_FALSE );
- _swrast_allow_vertex_fog( ctx, GL_TRUE );
- _tnl_allow_pixel_fog( ctx, GL_FALSE );
- _tnl_allow_vertex_fog( ctx, GL_TRUE );
-
- driInitExtensions( ctx, card_extensions, GL_TRUE );
- if (sPriv->drm_version.minor >= 4)
- _mesa_enable_extension( ctx, "GL_MESA_ycbcr_texture" );
-
- r128InitTriFuncs( ctx );
- r128DDInitStateFuncs( ctx );
- r128DDInitSpanFuncs( ctx );
- r128DDInitState( rmesa );
-
- driContextPriv->driverPrivate = (void *)rmesa;
-
-#if DO_DEBUG
- R128_DEBUG = driParseDebugString( getenv( "R128_DEBUG" ),
- debug_control );
-#endif
-
- if (driQueryOptionb(&rmesa->optionCache, "no_rast")) {
- fprintf(stderr, "disabling 3D acceleration\n");
- FALLBACK(rmesa, R128_FALLBACK_DISABLE, 1);
- }
-
- return GL_TRUE;
-}
-
-/* Destroy the device specific context.
- */
-void r128DestroyContext( __DRIcontext *driContextPriv )
-{
- r128ContextPtr rmesa = (r128ContextPtr) driContextPriv->driverPrivate;
-
- assert(rmesa); /* should never be null */
- if ( rmesa ) {
- GLboolean release_texture_heaps;
-
-
- release_texture_heaps = (rmesa->glCtx->Shared->RefCount == 1);
-
- _swsetup_DestroyContext( rmesa->glCtx );
- _tnl_DestroyContext( rmesa->glCtx );
- _vbo_DestroyContext( rmesa->glCtx );
- _swrast_DestroyContext( rmesa->glCtx );
-
- if ( release_texture_heaps ) {
- /* This share group is about to go away, free our private
- * texture object data.
- */
- int i;
-
- for ( i = 0 ; i < rmesa->nr_heaps ; i++ ) {
- driDestroyTextureHeap( rmesa->texture_heaps[ i ] );
- rmesa->texture_heaps[ i ] = NULL;
- }
-
- assert( is_empty_list( & rmesa->swapped ) );
- }
-
- /* free the Mesa context */
- rmesa->glCtx->DriverCtx = NULL;
- _mesa_destroy_context(rmesa->glCtx);
-
- /* free the option cache */
- driDestroyOptionCache (&rmesa->optionCache);
-
- FREE( rmesa );
- }
-
-#if 0
- /* Use this to force shared object profiling. */
- glx_fini_prof();
-#endif
-}
-
-
-/* Force the context `c' to be the current context and associate with it
- * buffer `b'.
- */
-GLboolean
-r128MakeCurrent( __DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv )
-{
- if ( driContextPriv ) {
- GET_CURRENT_CONTEXT(ctx);
- r128ContextPtr oldR128Ctx = ctx ? R128_CONTEXT(ctx) : NULL;
- r128ContextPtr newR128Ctx = (r128ContextPtr) driContextPriv->driverPrivate;
-
- if ( newR128Ctx != oldR128Ctx ) {
- newR128Ctx->new_state |= R128_NEW_CONTEXT;
- newR128Ctx->dirty = R128_UPLOAD_ALL;
- }
-
- if (driDrawPriv->swap_interval == (unsigned)-1) {
- driDrawPriv->vblFlags = (newR128Ctx->r128Screen->irq != 0)
- ? driGetDefaultVBlankFlags(&newR128Ctx->optionCache)
- : VBLANK_FLAG_NO_IRQ;
-
- driDrawableInitVBlank( driDrawPriv );
- }
- newR128Ctx->driDrawable = driDrawPriv;
-
- _mesa_make_current( newR128Ctx->glCtx,
- (struct gl_framebuffer *) driDrawPriv->driverPrivate,
- (struct gl_framebuffer *) driReadPriv->driverPrivate );
-
- newR128Ctx->new_state |= R128_NEW_WINDOW | R128_NEW_CLIP;
- } else {
- _mesa_make_current( NULL, NULL, NULL );
- }
-
- return GL_TRUE;
-}
-
-
-/* Force the context `c' to be unbound from its buffer.
- */
-GLboolean
-r128UnbindContext( __DRIcontext *driContextPriv )
-{
- return GL_TRUE;
-}
diff --git a/src/mesa/drivers/dri/r128/r128_context.h b/src/mesa/drivers/dri/r128/r128_context.h
deleted file mode 100644
index 0a06c43878d..00000000000
--- a/src/mesa/drivers/dri/r128/r128_context.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Kevin E. Martin
- * Gareth Hughes
- *
- */
-
-#ifndef __R128_CONTEXT_H__
-#define __R128_CONTEXT_H__
-
-#include "dri_util.h"
-#include "drm.h"
-#include "r128_drm.h"
-
-#include "main/mtypes.h"
-#include "tnl/t_vertex.h"
-
-#include "r128_reg.h"
-
-#include "texmem.h"
-
-struct r128_context;
-typedef struct r128_context r128ContextRec;
-typedef struct r128_context *r128ContextPtr;
-
-#include "r128_lock.h"
-#include "r128_texobj.h"
-#include "r128_screen.h"
-
-/* Flags for what context state needs to be updated:
- */
-#define R128_NEW_ALPHA 0x0001
-#define R128_NEW_DEPTH 0x0002
-#define R128_NEW_FOG 0x0004
-#define R128_NEW_CLIP 0x0008
-#define R128_NEW_CULL 0x0010
-#define R128_NEW_MASKS 0x0020
-#define R128_NEW_RENDER_NOT 0x0040
-#define R128_NEW_WINDOW 0x0080
-#define R128_NEW_CONTEXT 0x0100
-#define R128_NEW_ALL 0x01ff
-
-/* Flags for software fallback cases:
- */
-#define R128_FALLBACK_TEXTURE 0x0001
-#define R128_FALLBACK_DRAW_BUFFER 0x0002
-#define R128_FALLBACK_READ_BUFFER 0x0004
-#define R128_FALLBACK_STENCIL 0x0008
-#define R128_FALLBACK_RENDER_MODE 0x0010
-#define R128_FALLBACK_LOGICOP 0x0020
-#define R128_FALLBACK_SEP_SPECULAR 0x0040
-#define R128_FALLBACK_BLEND_EQ 0x0080
-#define R128_FALLBACK_BLEND_FUNC 0x0100
-#define R128_FALLBACK_PROJTEX 0x0200
-#define R128_FALLBACK_DISABLE 0x0400
-
-
-/* Use the templated vertex format:
- */
-#define TAG(x) r128##x
-#include "tnl_dd/t_dd_vertex.h"
-#undef TAG
-
-/* Reasons why the GL_BLEND fallback mightn't work:
- */
-#define R128_BLEND_ENV_COLOR 0x1
-#define R128_BLEND_MULTITEX 0x2
-
-/* Subpixel offsets for window coordinates (triangles):
- */
-#define SUBPIXEL_X (0.0F)
-#define SUBPIXEL_Y (0.125F)
-
-
-typedef void (*r128_tri_func)( r128ContextPtr,
- r128Vertex *,
- r128Vertex *,
- r128Vertex * );
-
-typedef void (*r128_line_func)( r128ContextPtr,
- r128Vertex *,
- r128Vertex * );
-
-typedef void (*r128_point_func)( r128ContextPtr,
- r128Vertex * );
-
-
-struct r128_context {
- struct gl_context *glCtx; /* Mesa context */
-
- /* Driver and hardware state management
- */
- GLuint new_state;
- GLuint dirty; /* Hardware state to be updated */
- drm_r128_context_regs_t setup;
-
- /* Vertex state */
- GLuint vertex_size;
- GLuint vertex_format;
- struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
- GLuint vertex_attr_count;
- char *verts; /* points to tnl->clipspace.vertex_buf */
- GLuint num_verts;
- int coloroffset, specoffset;
- DECLARE_RENDERINPUTS(tnl_state_bitset); /* tnl->render_inputs for this _tnl_install_attrs */
-
- GLuint NewGLState;
- GLuint Fallback;
- GLuint RenderIndex;
- GLfloat hw_viewport[16];
- GLfloat depth_scale;
-
- uint32_t ClearColor; /* Color used to clear color buffer */
- uint32_t ClearDepth; /* Value used to clear depth buffer */
- uint32_t ClearStencil; /* Value used to clear stencil */
-
- /* Map GL texture units onto hardware
- */
- GLint multitex;
- GLint tmu_source[2];
- GLuint tex_combine[2];
- GLuint blend_flags;
- GLuint env_color;
-
- /* Texture object bookkeeping
- */
- unsigned nr_heaps;
- driTexHeap * texture_heaps[ R128_NR_TEX_HEAPS ];
- driTextureObject swapped;
-
- r128TexObjPtr CurrentTexObj[2];
-
- int texture_depth;
-
- /* Fallback rasterization functions
- */
- r128_point_func draw_point;
- r128_line_func draw_line;
- r128_tri_func draw_tri;
-
- /* Vertex buffers
- */
- drmBufPtr vert_buf;
-
- GLuint hw_primitive;
- GLenum render_primitive;
-
- /* Page flipping
- */
- GLuint doPageFlip;
-
- /* Cliprect and scissor information
- */
- GLuint numClipRects; /* Cliprects for the draw buffer */
- drm_clip_rect_t *pClipRects;
-
- GLuint scissor;
- drm_clip_rect_t ScissorRect; /* Current software scissor */
-
- /* Mirrors of some DRI state
- */
- __DRIcontext *driContext; /* DRI context */
- __DRIscreen *driScreen; /* DRI screen */
- __DRIdrawable *driDrawable; /* DRI drawable bound to this ctx */
-
- unsigned int lastStamp; /* mirror driDrawable->lastStamp */
-
- drm_context_t hHWContext;
- drm_hw_lock_t *driHwLock;
- int driFd;
-
- r128ScreenPtr r128Screen; /* Screen private DRI data */
- drm_r128_sarea_t *sarea; /* Private SAREA data */
-
- /* Performance counters
- */
- GLuint boxes; /* Draw performance boxes */
- GLuint hardwareWentIdle;
- GLuint c_clears;
- GLuint c_drawWaits;
- GLuint c_textureSwaps;
- GLuint c_textureBytes;
- GLuint c_vertexBuffers;
-
- /* Configuration cache
- */
- driOptionCache optionCache;
-};
-
-#define R128_CONTEXT(ctx) ((r128ContextPtr)(ctx->DriverCtx))
-
-#define R128_IS_PLAIN( rmesa ) \
- (rmesa->r128Screen->chipset == R128_CARD_TYPE_R128)
-#define R128_IS_PRO( rmesa ) \
- (rmesa->r128Screen->chipset == R128_CARD_TYPE_R128_PRO)
-#define R128_IS_MOBILITY( rmesa ) \
- (rmesa->r128Screen->chipset == R128_CARD_TYPE_R128_MOBILITY)
-
-
-extern GLboolean r128CreateContext( gl_api api,
- const struct gl_config *glVisual,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate );
-
-extern void r128DestroyContext( __DRIcontext * );
-
-extern GLboolean r128MakeCurrent( __DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv );
-
-extern GLboolean r128UnbindContext( __DRIcontext *driContextPriv );
-
-/* ================================================================
- * Debugging:
- */
-#define DO_DEBUG 1
-#define ENABLE_PERF_BOXES 0
-
-#if DO_DEBUG
-extern int R128_DEBUG;
-#else
-#define R128_DEBUG 0
-#endif
-
-#define DEBUG_ALWAYS_SYNC 0x01
-#define DEBUG_VERBOSE_API 0x02
-#define DEBUG_VERBOSE_MSG 0x04
-#define DEBUG_VERBOSE_LRU 0x08
-#define DEBUG_VERBOSE_DRI 0x10
-#define DEBUG_VERBOSE_IOCTL 0x20
-#define DEBUG_VERBOSE_2D 0x40
-#define DEBUG_VERBOSE_FALL 0x80
-
-#endif /* __R128_CONTEXT_H__ */
diff --git a/src/mesa/drivers/dri/r128/r128_dd.c b/src/mesa/drivers/dri/r128/r128_dd.c
deleted file mode 100644
index cfe2387948d..00000000000
--- a/src/mesa/drivers/dri/r128/r128_dd.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- *
- */
-
-#include "r128_context.h"
-#include "r128_ioctl.h"
-#include "r128_dd.h"
-
-#include "main/context.h"
-
-#include "utils.h"
-
-/* Return the width and height of the current color buffer.
- */
-static void r128GetBufferSize( struct gl_framebuffer *buffer,
- GLuint *width, GLuint *height )
-{
- GET_CURRENT_CONTEXT(ctx);
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- LOCK_HARDWARE( rmesa );
- *width = rmesa->driDrawable->w;
- *height = rmesa->driDrawable->h;
- UNLOCK_HARDWARE( rmesa );
-}
-
-/* Return various strings for glGetString().
- */
-static const GLubyte *r128GetString( struct gl_context *ctx, GLenum name )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- static char buffer[128];
- unsigned offset;
- const char * card_name = "Rage 128";
- GLuint agp_mode = rmesa->r128Screen->IsPCI ? 0 :
- rmesa->r128Screen->AGPMode;
-
- switch ( name ) {
- case GL_VENDOR:
- return (GLubyte *)"VA Linux Systems, Inc.";
-
- case GL_RENDERER:
- /* Select the spefic chipset.
- */
- if ( R128_IS_PRO( rmesa ) ) {
- card_name = "Rage 128 Pro";
- }
- else if ( R128_IS_MOBILITY( rmesa ) ) {
- card_name = "Rage 128 Mobility";
- }
-
- offset = driGetRendererString( buffer, card_name, agp_mode );
-
- return (GLubyte *)buffer;
-
- default:
- return NULL;
- }
-}
-
-/* Send all commands to the hardware. If vertex buffers or indirect
- * buffers are in use, then we need to make sure they are sent to the
- * hardware. All commands that are normally sent to the ring are
- * already considered `flushed'.
- */
-static void r128Flush( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
-
-#if ENABLE_PERF_BOXES
- if ( rmesa->boxes ) {
- LOCK_HARDWARE( rmesa );
- r128PerformanceBoxesLocked( rmesa );
- UNLOCK_HARDWARE( rmesa );
- }
-
- /* Log the performance counters if necessary */
- r128PerformanceCounters( rmesa );
-#endif
-}
-
-/* Make sure all commands have been sent to the hardware and have
- * completed processing.
- */
-static void r128Finish( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
-#if ENABLE_PERF_BOXES
- /* Bump the performance counter */
- rmesa->c_drawWaits++;
-#endif
-
- r128Flush( ctx );
- r128WaitForIdle( rmesa );
-}
-
-
-/* Initialize the driver's misc functions.
- */
-void r128InitDriverFuncs( struct dd_function_table *functions )
-{
- functions->GetBufferSize = r128GetBufferSize;
- functions->GetString = r128GetString;
- functions->Finish = r128Finish;
- functions->Flush = r128Flush;
-}
diff --git a/src/mesa/drivers/dri/r128/r128_dd.h b/src/mesa/drivers/dri/r128/r128_dd.h
deleted file mode 100644
index ce038853c48..00000000000
--- a/src/mesa/drivers/dri/r128/r128_dd.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- *
- */
-
-#ifndef __R128_DD_H__
-#define __R128_DD_H__
-
-extern void r128InitDriverFuncs( struct dd_function_table *functions );
-
-#endif
diff --git a/src/mesa/drivers/dri/r128/r128_ioctl.c b/src/mesa/drivers/dri/r128/r128_ioctl.c
deleted file mode 100644
index 950e1d4fbd5..00000000000
--- a/src/mesa/drivers/dri/r128/r128_ioctl.c
+++ /dev/null
@@ -1,820 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- *
- */
-#include
-
-#define STANDALONE_MMIO
-#include "r128_context.h"
-#include "r128_state.h"
-#include "r128_ioctl.h"
-#include "main/imports.h"
-#include "main/macros.h"
-
-#include "swrast/swrast.h"
-
-#include "vblank.h"
-#include "mmio.h"
-#include "drirenderbuffer.h"
-
-#define R128_TIMEOUT 2048
-#define R128_IDLE_RETRY 32
-
-
-/* =============================================================
- * Hardware vertex buffer handling
- */
-
-/* Get a new VB from the pool of vertex buffers in AGP space.
- */
-drmBufPtr r128GetBufferLocked( r128ContextPtr rmesa )
-{
- int fd = rmesa->r128Screen->driScreen->fd;
- int index = 0;
- int size = 0;
- drmDMAReq dma;
- drmBufPtr buf = NULL;
- int to = 0;
- int ret;
-
- dma.context = rmesa->hHWContext;
- dma.send_count = 0;
- dma.send_list = NULL;
- dma.send_sizes = NULL;
- dma.flags = 0;
- dma.request_count = 1;
- dma.request_size = R128_BUFFER_SIZE;
- dma.request_list = &index;
- dma.request_sizes = &size;
- dma.granted_count = 0;
-
- while ( !buf && ( to++ < R128_TIMEOUT ) ) {
- ret = drmDMA( fd, &dma );
-
- if ( ret == 0 ) {
- buf = &rmesa->r128Screen->buffers->list[index];
- buf->used = 0;
-#if ENABLE_PERF_BOXES
- /* Bump the performance counter */
- rmesa->c_vertexBuffers++;
-#endif
- return buf;
- }
- }
-
- if ( !buf ) {
- drmCommandNone( fd, DRM_R128_CCE_RESET);
- UNLOCK_HARDWARE( rmesa );
- fprintf( stderr, "Error: Could not get new VB... exiting\n" );
- exit( -1 );
- }
-
- return buf;
-}
-
-void r128FlushVerticesLocked( r128ContextPtr rmesa )
-{
- drm_clip_rect_t *pbox = rmesa->pClipRects;
- int nbox = rmesa->numClipRects;
- drmBufPtr buffer = rmesa->vert_buf;
- int count = rmesa->num_verts;
- int prim = rmesa->hw_primitive;
- int fd = rmesa->driScreen->fd;
- drm_r128_vertex_t vertex;
- int i;
-
- rmesa->num_verts = 0;
- rmesa->vert_buf = NULL;
-
- if ( !buffer )
- return;
-
- if ( rmesa->dirty & ~R128_UPLOAD_CLIPRECTS )
- r128EmitHwStateLocked( rmesa );
-
- if ( !nbox )
- count = 0;
-
- if ( nbox >= R128_NR_SAREA_CLIPRECTS )
- rmesa->dirty |= R128_UPLOAD_CLIPRECTS;
-
- if ( !count || !(rmesa->dirty & R128_UPLOAD_CLIPRECTS) )
- {
- if ( nbox < 3 ) {
- rmesa->sarea->nbox = 0;
- } else {
- rmesa->sarea->nbox = nbox;
- }
-
- vertex.prim = prim;
- vertex.idx = buffer->idx;
- vertex.count = count;
- vertex.discard = 1;
- drmCommandWrite( fd, DRM_R128_VERTEX, &vertex, sizeof(vertex) );
- }
- else
- {
- for ( i = 0 ; i < nbox ; ) {
- int nr = MIN2( i + R128_NR_SAREA_CLIPRECTS, nbox );
- drm_clip_rect_t *b = rmesa->sarea->boxes;
- int discard = 0;
-
- rmesa->sarea->nbox = nr - i;
- for ( ; i < nr ; i++ ) {
- *b++ = pbox[i];
- }
-
- /* Finished with the buffer?
- */
- if ( nr == nbox ) {
- discard = 1;
- }
-
- rmesa->sarea->dirty |= R128_UPLOAD_CLIPRECTS;
-
- vertex.prim = prim;
- vertex.idx = buffer->idx;
- vertex.count = count;
- vertex.discard = discard;
- drmCommandWrite( fd, DRM_R128_VERTEX, &vertex, sizeof(vertex) );
- }
- }
-
- rmesa->dirty &= ~R128_UPLOAD_CLIPRECTS;
-}
-
-
-
-
-
-/* ================================================================
- * Texture uploads
- */
-
-void r128FireBlitLocked( r128ContextPtr rmesa, drmBufPtr buffer,
- GLint offset, GLint pitch, GLint format,
- GLint x, GLint y, GLint width, GLint height )
-{
- drm_r128_blit_t blit;
- GLint ret;
-
- blit.idx = buffer->idx;
- blit.offset = offset;
- blit.pitch = pitch;
- blit.format = format;
- blit.x = x;
- blit.y = y;
- blit.width = width;
- blit.height = height;
-
- ret = drmCommandWrite( rmesa->driFd, DRM_R128_BLIT,
- &blit, sizeof(blit) );
-
- if ( ret ) {
- UNLOCK_HARDWARE( rmesa );
- fprintf( stderr, "DRM_R128_BLIT: return = %d\n", ret );
- exit( 1 );
- }
-}
-
-
-/* ================================================================
- * SwapBuffers with client-side throttling
- */
-
-static void delay( void ) {
-/* Prevent an optimizing compiler from removing a spin loop */
-}
-
-#define R128_MAX_OUTSTANDING 2
-
-
-/* Throttle the frame rate -- only allow one pending swap buffers
- * request at a time.
- * GH: We probably don't want a timeout here, as we can wait as
- * long as we want for a frame to complete. If it never does, then
- * the card has locked.
- */
-static int r128WaitForFrameCompletion( r128ContextPtr rmesa )
-{
- unsigned char *R128MMIO = rmesa->r128Screen->mmio.map;
- int i;
- int wait = 0;
-
- while ( 1 ) {
- uint32_t frame = read_MMIO_LE32( R128MMIO, R128_LAST_FRAME_REG );
-
- if ( rmesa->sarea->last_frame - frame <= R128_MAX_OUTSTANDING ) {
- break;
- }
-
- /* Spin in place a bit so we aren't hammering the register */
- wait++;
- for ( i = 0 ; i < 1024 ; i++ ) {
- delay();
- }
- }
-
- return wait;
-}
-
-/* Copy the back color buffer to the front color buffer.
- */
-void r128CopyBuffer( __DRIdrawable *dPriv )
-{
- r128ContextPtr rmesa;
- GLint nbox, i, ret;
- GLboolean missed_target;
-
- assert(dPriv);
- assert(dPriv->driContextPriv);
- assert(dPriv->driContextPriv->driverPrivate);
-
- rmesa = (r128ContextPtr) dPriv->driContextPriv->driverPrivate;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "\n********************************\n" );
- fprintf( stderr, "\n%s( %p )\n\n",
- __FUNCTION__, (void *)rmesa->glCtx );
- fflush( stderr );
- }
-
- FLUSH_BATCH( rmesa );
-
- LOCK_HARDWARE( rmesa );
-
- /* Throttle the frame rate -- only allow one pending swap buffers
- * request at a time.
- */
- if ( !r128WaitForFrameCompletion( rmesa ) ) {
- rmesa->hardwareWentIdle = 1;
- } else {
- rmesa->hardwareWentIdle = 0;
- }
-
- UNLOCK_HARDWARE( rmesa );
- driWaitForVBlank( dPriv, &missed_target );
- LOCK_HARDWARE( rmesa );
-
- nbox = dPriv->numClipRects; /* must be in locked region */
-
- for ( i = 0 ; i < nbox ; ) {
- GLint nr = MIN2( i + R128_NR_SAREA_CLIPRECTS , nbox );
- drm_clip_rect_t *box = dPriv->pClipRects;
- drm_clip_rect_t *b = rmesa->sarea->boxes;
- GLint n = 0;
-
- for ( ; i < nr ; i++ ) {
- *b++ = box[i];
- n++;
- }
- rmesa->sarea->nbox = n;
-
- ret = drmCommandNone( rmesa->driFd, DRM_R128_SWAP );
-
- if ( ret ) {
- UNLOCK_HARDWARE( rmesa );
- fprintf( stderr, "DRM_R128_SWAP: return = %d\n", ret );
- exit( 1 );
- }
- }
-
- if ( R128_DEBUG & DEBUG_ALWAYS_SYNC ) {
- i = 0;
- do {
- ret = drmCommandNone(rmesa->driFd, DRM_R128_CCE_IDLE);
- } while ( ret && errno == EBUSY && i++ < R128_IDLE_RETRY );
- }
-
- UNLOCK_HARDWARE( rmesa );
-
- rmesa->new_state |= R128_NEW_CONTEXT;
- rmesa->dirty |= (R128_UPLOAD_CONTEXT |
- R128_UPLOAD_MASKS |
- R128_UPLOAD_CLIPRECTS);
-
-#if ENABLE_PERF_BOXES
- /* Log the performance counters if necessary */
- r128PerformanceCounters( rmesa );
-#endif
-}
-
-void r128PageFlip( __DRIdrawable *dPriv )
-{
- r128ContextPtr rmesa;
- GLint ret;
- GLboolean missed_target;
-
- assert(dPriv);
- assert(dPriv->driContextPriv);
- assert(dPriv->driContextPriv->driverPrivate);
-
- rmesa = (r128ContextPtr) dPriv->driContextPriv->driverPrivate;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "\n%s( %p ): page=%d\n\n",
- __FUNCTION__, (void *)rmesa->glCtx, rmesa->sarea->pfCurrentPage );
- }
-
- FLUSH_BATCH( rmesa );
-
- LOCK_HARDWARE( rmesa );
-
- /* Throttle the frame rate -- only allow one pending swap buffers
- * request at a time.
- */
- if ( !r128WaitForFrameCompletion( rmesa ) ) {
- rmesa->hardwareWentIdle = 1;
- } else {
- rmesa->hardwareWentIdle = 0;
- }
-
- UNLOCK_HARDWARE( rmesa );
- driWaitForVBlank( dPriv, &missed_target );
- LOCK_HARDWARE( rmesa );
-
- /* The kernel will have been initialized to perform page flipping
- * on a swapbuffers ioctl.
- */
- ret = drmCommandNone( rmesa->driFd, DRM_R128_FLIP );
-
- UNLOCK_HARDWARE( rmesa );
-
- if ( ret ) {
- fprintf( stderr, "DRM_R128_FLIP: return = %d\n", ret );
- exit( 1 );
- }
-
- /* Get ready for drawing next frame. Update the renderbuffers'
- * flippedOffset/Pitch fields so we draw into the right place.
- */
- driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer,
- rmesa->sarea->pfCurrentPage);
-
- rmesa->new_state |= R128_NEW_WINDOW;
-
- /* FIXME: Do we need this anymore? */
- rmesa->new_state |= R128_NEW_CONTEXT;
- rmesa->dirty |= (R128_UPLOAD_CONTEXT |
- R128_UPLOAD_MASKS |
- R128_UPLOAD_CLIPRECTS);
-
-#if ENABLE_PERF_BOXES
- /* Log the performance counters if necessary */
- r128PerformanceCounters( rmesa );
-#endif
-}
-
-
-/* ================================================================
- * Buffer clear
- */
-
-static void r128Clear( struct gl_context *ctx, GLbitfield mask )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- __DRIdrawable *dPriv = rmesa->driDrawable;
- drm_r128_clear_t clear;
- GLuint flags = 0;
- GLint i;
- GLint ret;
- GLuint depthmask = 0;
- GLint cx, cy, cw, ch;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s:\n", __FUNCTION__ );
- }
-
- FLUSH_BATCH( rmesa );
-
- /* The only state change we care about here is the RGBA colormask
- * We'll just update that state, if needed. If we do more then
- * there's some strange side-effects that the conformance tests find.
- */
- if ( rmesa->new_state & R128_NEW_MASKS) {
- const GLuint save_state = rmesa->new_state;
- rmesa->new_state = R128_NEW_MASKS;
- r128DDUpdateHWState( ctx );
- rmesa->new_state = save_state & ~R128_NEW_MASKS;
- }
-
- if ( mask & BUFFER_BIT_FRONT_LEFT ) {
- flags |= R128_FRONT;
- mask &= ~BUFFER_BIT_FRONT_LEFT;
- }
-
- if ( mask & BUFFER_BIT_BACK_LEFT ) {
- flags |= R128_BACK;
- mask &= ~BUFFER_BIT_BACK_LEFT;
- }
-
- if ( ( mask & BUFFER_BIT_DEPTH ) && ctx->Depth.Mask ) {
- flags |= R128_DEPTH;
- /* if we're at 16 bits, extra plane mask won't hurt */
- depthmask |= 0x00ffffff;
- mask &= ~BUFFER_BIT_DEPTH;
- }
-
- if ( mask & BUFFER_BIT_STENCIL &&
- (ctx->Visual.stencilBits > 0 && ctx->Visual.depthBits == 24) ) {
- flags |= R128_DEPTH;
- depthmask |= ctx->Stencil.WriteMask[0] << 24;
- mask &= ~BUFFER_BIT_STENCIL;
- }
-
- if ( flags ) {
-
- LOCK_HARDWARE( rmesa );
-
- /* compute region after locking: */
- cx = ctx->DrawBuffer->_Xmin;
- cy = ctx->DrawBuffer->_Ymin;
- cw = ctx->DrawBuffer->_Xmax - cx;
- ch = ctx->DrawBuffer->_Ymax - cy;
-
- /* Flip top to bottom */
- cx += dPriv->x;
- cy = dPriv->y + dPriv->h - cy - ch;
-
- /* FIXME: Do we actually need this?
- */
- if ( rmesa->dirty & ~R128_UPLOAD_CLIPRECTS ) {
- r128EmitHwStateLocked( rmesa );
- }
-
- for ( i = 0 ; i < rmesa->numClipRects ; ) {
- GLint nr = MIN2( i + R128_NR_SAREA_CLIPRECTS , rmesa->numClipRects );
- drm_clip_rect_t *box = rmesa->pClipRects;
- drm_clip_rect_t *b = rmesa->sarea->boxes;
- GLint n = 0;
-
- if (cw != dPriv->w || ch != dPriv->h) {
- /* clear subregion */
- for ( ; i < nr ; i++ ) {
- GLint x = box[i].x1;
- GLint y = box[i].y1;
- GLint w = box[i].x2 - x;
- GLint h = box[i].y2 - y;
-
- if ( x < cx ) w -= cx - x, x = cx;
- if ( y < cy ) h -= cy - y, y = cy;
- if ( x + w > cx + cw ) w = cx + cw - x;
- if ( y + h > cy + ch ) h = cy + ch - y;
- if ( w <= 0 ) continue;
- if ( h <= 0 ) continue;
-
- b->x1 = x;
- b->y1 = y;
- b->x2 = x + w;
- b->y2 = y + h;
- b++;
- n++;
- }
- } else {
- /* clear whole window */
- for ( ; i < nr ; i++ ) {
- *b++ = box[i];
- n++;
- }
- }
-
- rmesa->sarea->nbox = n;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_IOCTL ) {
- fprintf( stderr,
- "DRM_R128_CLEAR: flag 0x%x color %x depth %x nbox %d\n",
- flags,
- (GLuint)rmesa->ClearColor,
- (GLuint)rmesa->ClearDepth,
- rmesa->sarea->nbox );
- }
-
- clear.flags = flags;
- clear.clear_color = rmesa->ClearColor;
- clear.clear_depth = rmesa->ClearDepth;
- clear.color_mask = rmesa->setup.plane_3d_mask_c;
- clear.depth_mask = depthmask;
-
- ret = drmCommandWrite( rmesa->driFd, DRM_R128_CLEAR,
- &clear, sizeof(clear) );
-
- if ( ret ) {
- UNLOCK_HARDWARE( rmesa );
- fprintf( stderr, "DRM_R128_CLEAR: return = %d\n", ret );
- exit( 1 );
- }
- }
-
- UNLOCK_HARDWARE( rmesa );
-
- rmesa->dirty |= R128_UPLOAD_CLIPRECTS;
- }
-
- if ( mask )
- _swrast_Clear( ctx, mask );
-}
-
-
-/* ================================================================
- * Depth spans, pixels
- */
-
-void r128WriteDepthSpanLocked( r128ContextPtr rmesa,
- GLuint n, GLint x, GLint y,
- const GLuint depth[],
- const GLubyte mask[] )
-{
- drm_clip_rect_t *pbox = rmesa->pClipRects;
- drm_r128_depth_t d;
- int nbox = rmesa->numClipRects;
- int fd = rmesa->driScreen->fd;
- int i;
-
- if ( !nbox || !n ) {
- return;
- }
- if ( nbox >= R128_NR_SAREA_CLIPRECTS ) {
- rmesa->dirty |= R128_UPLOAD_CLIPRECTS;
- }
-
- if ( !(rmesa->dirty & R128_UPLOAD_CLIPRECTS) )
- {
- if ( nbox < 3 ) {
- rmesa->sarea->nbox = 0;
- } else {
- rmesa->sarea->nbox = nbox;
- }
-
- d.func = R128_WRITE_SPAN;
- d.n = n;
- d.x = (int*)&x;
- d.y = (int*)&y;
- d.buffer = (unsigned int *)depth;
- d.mask = (unsigned char *)mask;
-
- drmCommandWrite( fd, DRM_R128_DEPTH, &d, sizeof(d));
-
- }
- else
- {
- for (i = 0 ; i < nbox ; ) {
- int nr = MIN2( i + R128_NR_SAREA_CLIPRECTS, nbox );
- drm_clip_rect_t *b = rmesa->sarea->boxes;
-
- rmesa->sarea->nbox = nr - i;
- for ( ; i < nr ; i++) {
- *b++ = pbox[i];
- }
-
- rmesa->sarea->dirty |= R128_UPLOAD_CLIPRECTS;
-
- d.func = R128_WRITE_SPAN;
- d.n = n;
- d.x = (int*)&x;
- d.y = (int*)&y;
- d.buffer = (unsigned int *)depth;
- d.mask = (unsigned char *)mask;
-
- drmCommandWrite( fd, DRM_R128_DEPTH, &d, sizeof(d));
- }
- }
-
- rmesa->dirty &= ~R128_UPLOAD_CLIPRECTS;
-}
-
-void r128WriteDepthPixelsLocked( r128ContextPtr rmesa, GLuint n,
- const GLint x[], const GLint y[],
- const GLuint depth[],
- const GLubyte mask[] )
-{
- drm_clip_rect_t *pbox = rmesa->pClipRects;
- drm_r128_depth_t d;
- int nbox = rmesa->numClipRects;
- int fd = rmesa->driScreen->fd;
- int i;
-
- if ( !nbox || !n ) {
- return;
- }
- if ( nbox >= R128_NR_SAREA_CLIPRECTS ) {
- rmesa->dirty |= R128_UPLOAD_CLIPRECTS;
- }
-
- if ( !(rmesa->dirty & R128_UPLOAD_CLIPRECTS) )
- {
- if ( nbox < 3 ) {
- rmesa->sarea->nbox = 0;
- } else {
- rmesa->sarea->nbox = nbox;
- }
-
- d.func = R128_WRITE_PIXELS;
- d.n = n;
- d.x = (int*)&x;
- d.y = (int*)&y;
- d.buffer = (unsigned int *)depth;
- d.mask = (unsigned char *)mask;
-
- drmCommandWrite( fd, DRM_R128_DEPTH, &d, sizeof(d));
- }
- else
- {
- for (i = 0 ; i < nbox ; ) {
- int nr = MIN2( i + R128_NR_SAREA_CLIPRECTS, nbox );
- drm_clip_rect_t *b = rmesa->sarea->boxes;
-
- rmesa->sarea->nbox = nr - i;
- for ( ; i < nr ; i++) {
- *b++ = pbox[i];
- }
-
- rmesa->sarea->dirty |= R128_UPLOAD_CLIPRECTS;
-
- d.func = R128_WRITE_PIXELS;
- d.n = n;
- d.x = (int*)&x;
- d.y = (int*)&y;
- d.buffer = (unsigned int *)depth;
- d.mask = (unsigned char *)mask;
-
- drmCommandWrite( fd, DRM_R128_DEPTH, &d, sizeof(d));
- }
- }
-
- rmesa->dirty &= ~R128_UPLOAD_CLIPRECTS;
-}
-
-void r128ReadDepthSpanLocked( r128ContextPtr rmesa,
- GLuint n, GLint x, GLint y )
-{
- drm_clip_rect_t *pbox = rmesa->pClipRects;
- drm_r128_depth_t d;
- int nbox = rmesa->numClipRects;
- int fd = rmesa->driScreen->fd;
- int i;
-
- if ( !nbox || !n ) {
- return;
- }
- if ( nbox >= R128_NR_SAREA_CLIPRECTS ) {
- rmesa->dirty |= R128_UPLOAD_CLIPRECTS;
- }
-
- if ( !(rmesa->dirty & R128_UPLOAD_CLIPRECTS) )
- {
- if ( nbox < 3 ) {
- rmesa->sarea->nbox = 0;
- } else {
- rmesa->sarea->nbox = nbox;
- }
-
- d.func = R128_READ_SPAN;
- d.n = n;
- d.x = (int*)&x;
- d.y = (int*)&y;
- d.buffer = NULL;
- d.mask = NULL;
-
- drmCommandWrite( fd, DRM_R128_DEPTH, &d, sizeof(d));
- }
- else
- {
- for (i = 0 ; i < nbox ; ) {
- int nr = MIN2( i + R128_NR_SAREA_CLIPRECTS, nbox );
- drm_clip_rect_t *b = rmesa->sarea->boxes;
-
- rmesa->sarea->nbox = nr - i;
- for ( ; i < nr ; i++) {
- *b++ = pbox[i];
- }
-
- rmesa->sarea->dirty |= R128_UPLOAD_CLIPRECTS;
-
- d.func = R128_READ_SPAN;
- d.n = n;
- d.x = (int*)&x;
- d.y = (int*)&y;
- d.buffer = NULL;
- d.mask = NULL;
-
- drmCommandWrite( fd, DRM_R128_DEPTH, &d, sizeof(d));
- }
- }
-
- rmesa->dirty &= ~R128_UPLOAD_CLIPRECTS;
-}
-
-void r128ReadDepthPixelsLocked( r128ContextPtr rmesa, GLuint n,
- const GLint x[], const GLint y[] )
-{
- drm_clip_rect_t *pbox = rmesa->pClipRects;
- drm_r128_depth_t d;
- int nbox = rmesa->numClipRects;
- int fd = rmesa->driScreen->fd;
- int i;
-
- if ( !nbox || !n ) {
- return;
- }
- if ( nbox >= R128_NR_SAREA_CLIPRECTS ) {
- rmesa->dirty |= R128_UPLOAD_CLIPRECTS;
- }
-
- if ( !(rmesa->dirty & R128_UPLOAD_CLIPRECTS) )
- {
- if ( nbox < 3 ) {
- rmesa->sarea->nbox = 0;
- } else {
- rmesa->sarea->nbox = nbox;
- }
-
- d.func = R128_READ_PIXELS;
- d.n = n;
- d.x = (int*)&x;
- d.y = (int*)&y;
- d.buffer = NULL;
- d.mask = NULL;
-
- drmCommandWrite( fd, DRM_R128_DEPTH, &d, sizeof(d));
- }
- else
- {
- for (i = 0 ; i < nbox ; ) {
- int nr = MIN2( i + R128_NR_SAREA_CLIPRECTS, nbox );
- drm_clip_rect_t *b = rmesa->sarea->boxes;
-
- rmesa->sarea->nbox = nr - i;
- for ( ; i < nr ; i++) {
- *b++ = pbox[i];
- }
-
- rmesa->sarea->dirty |= R128_UPLOAD_CLIPRECTS;
-
- d.func = R128_READ_PIXELS;
- d.n = n;
- d.x = (int*)&x;
- d.y = (int*)&y;
- d.buffer = NULL;
- d.mask = NULL;
-
- drmCommandWrite( fd, DRM_R128_DEPTH, &d, sizeof(d));
- }
- }
-
- rmesa->dirty &= ~R128_UPLOAD_CLIPRECTS;
-}
-
-
-void r128WaitForIdleLocked( r128ContextPtr rmesa )
-{
- int fd = rmesa->r128Screen->driScreen->fd;
- int to = 0;
- int ret, i;
-
- do {
- i = 0;
- do {
- ret = drmCommandNone( fd, DRM_R128_CCE_IDLE);
- } while ( ret && errno == EBUSY && i++ < R128_IDLE_RETRY );
- } while ( ( ret == -EBUSY ) && ( to++ < R128_TIMEOUT ) );
-
- if ( ret < 0 ) {
- drmCommandNone( fd, DRM_R128_CCE_RESET);
- UNLOCK_HARDWARE( rmesa );
- fprintf( stderr, "Error: Rage 128 timed out... exiting\n" );
- exit( -1 );
- }
-}
-
-void r128InitIoctlFuncs( struct dd_function_table *functions )
-{
- functions->Clear = r128Clear;
-}
diff --git a/src/mesa/drivers/dri/r128/r128_ioctl.h b/src/mesa/drivers/dri/r128/r128_ioctl.h
deleted file mode 100644
index 84ace900eec..00000000000
--- a/src/mesa/drivers/dri/r128/r128_ioctl.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- *
- */
-
-#ifndef __R128_IOCTL_H__
-#define __R128_IOCTL_H__
-
-#include "r128_dri.h"
-#include "r128_reg.h"
-#include "r128_lock.h"
-
-#define R128_BUFFER_MAX_DWORDS (R128_BUFFER_SIZE / sizeof(uint32_t))
-
-
-extern drmBufPtr r128GetBufferLocked( r128ContextPtr rmesa );
-extern void r128FlushVerticesLocked( r128ContextPtr rmesa );
-
-static INLINE void *r128AllocDmaLow( r128ContextPtr rmesa, int count,
- int vert_size )
-{
- uint32_t *head;
- int bytes = count * vert_size;
-
- if ( !rmesa->vert_buf ) {
- LOCK_HARDWARE( rmesa );
- rmesa->vert_buf = r128GetBufferLocked( rmesa );
- UNLOCK_HARDWARE( rmesa );
- } else if ( rmesa->vert_buf->used + bytes > rmesa->vert_buf->total ) {
- LOCK_HARDWARE( rmesa );
- r128FlushVerticesLocked( rmesa );
- rmesa->vert_buf = r128GetBufferLocked( rmesa );
- UNLOCK_HARDWARE( rmesa );
- }
-
- head = (uint32_t *)((char *)rmesa->vert_buf->address + rmesa->vert_buf->used);
- rmesa->vert_buf->used += bytes;
- rmesa->num_verts += count;
-
- return head;
-}
-
-extern void r128FireBlitLocked( r128ContextPtr rmesa, drmBufPtr buffer,
- GLint offset, GLint pitch, GLint format,
- GLint x, GLint y, GLint width, GLint height );
-
-extern void r128WriteDepthSpanLocked( r128ContextPtr rmesa,
- GLuint n, GLint x, GLint y,
- const GLuint depth[],
- const GLubyte mask[] );
-extern void r128WriteDepthPixelsLocked( r128ContextPtr rmesa, GLuint n,
- const GLint x[], const GLint y[],
- const GLuint depth[],
- const GLubyte mask[] );
-extern void r128ReadDepthSpanLocked( r128ContextPtr rmesa,
- GLuint n, GLint x, GLint y );
-extern void r128ReadDepthPixelsLocked( r128ContextPtr rmesa, GLuint n,
- const GLint x[], const GLint y[] );
-
-extern void r128CopyBuffer( __DRIdrawable *dPriv );
-extern void r128PageFlip( __DRIdrawable *dPriv );
-void r128WaitForVBlank( r128ContextPtr rmesa );
-
-extern void r128WaitForIdleLocked( r128ContextPtr rmesa );
-
-
-extern void r128InitIoctlFuncs( struct dd_function_table *functions );
-
-
-/* ================================================================
- * Helper macros:
- */
-
-#define FLUSH_BATCH( rmesa ) \
-do { \
- if ( R128_DEBUG & DEBUG_VERBOSE_IOCTL ) \
- fprintf( stderr, "FLUSH_BATCH in %s\n", __FUNCTION__ ); \
- if ( rmesa->vert_buf ) { \
- r128FlushVertices( rmesa ); \
- } \
-} while (0)
-
-/* 64-bit align the next element address, and then make room for the
- * next indexed prim packet header.
- */
-#define ALIGN_NEXT_ELT( rmesa ) \
-do { \
- rmesa->next_elt = (GLushort *) \
- (((GLuint)rmesa->next_elt + 7) & ~0x7); \
- rmesa->next_elt = (GLushort *) \
- ((GLubyte *)rmesa->next_elt + R128_INDEX_PRIM_OFFSET); \
-} while (0)
-
-#define r128FlushVertices( rmesa ) \
-do { \
- LOCK_HARDWARE( rmesa ); \
- r128FlushVerticesLocked( rmesa ); \
- UNLOCK_HARDWARE( rmesa ); \
-} while (0)
-
-#define r128FlushElts( rmesa ) \
-do { \
- LOCK_HARDWARE( rmesa ); \
- r128FlushEltsLocked( rmesa ); \
- UNLOCK_HARDWARE( rmesa ); \
-} while (0)
-
-#define r128WaitForIdle( rmesa ) \
- do { \
- LOCK_HARDWARE( rmesa ); \
- r128WaitForIdleLocked( rmesa ); \
- UNLOCK_HARDWARE( rmesa ); \
- } while (0)
-
-#endif /* __R128_IOCTL_H__ */
diff --git a/src/mesa/drivers/dri/r128/r128_lock.c b/src/mesa/drivers/dri/r128/r128_lock.c
deleted file mode 100644
index c1fa068d1fd..00000000000
--- a/src/mesa/drivers/dri/r128/r128_lock.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- *
- */
-
-#include "r128_context.h"
-#include "r128_lock.h"
-
-#include "drirenderbuffer.h"
-
-
-#if DEBUG_LOCKING
-char *prevLockFile = NULL;
-int prevLockLine = 0;
-#endif
-
-
-/* Turn on/off page flipping according to the flags in the sarea:
- */
-static void
-r128UpdatePageFlipping( r128ContextPtr rmesa )
-{
- rmesa->doPageFlip = rmesa->sarea->pfAllowPageFlip;
- if (rmesa->glCtx->WinSysDrawBuffer) {
- driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer,
- rmesa->sarea->pfCurrentPage);
- }
- rmesa->new_state |= R128_NEW_WINDOW;
-}
-
-/* Update the hardware state. This is called if another main/context.has
- * grabbed the hardware lock, which includes the X server. This
- * function also updates the driver's window state after the X server
- * moves, resizes or restacks a window -- the change will be reflected
- * in the drawable position and clip rects. Since the X server grabs
- * the hardware lock when it changes the window state, this routine will
- * automatically be called after such a change.
- */
-void r128GetLock( r128ContextPtr rmesa, GLuint flags )
-{
- __DRIdrawable *dPriv = rmesa->driDrawable;
- __DRIscreen *sPriv = rmesa->driScreen;
- drm_r128_sarea_t *sarea = rmesa->sarea;
- int i;
-
- drmGetLock( rmesa->driFd, rmesa->hHWContext, flags );
-
- /* The window might have moved, so we might need to get new clip
- * rects.
- *
- * NOTE: This releases and regrabs the hw lock to allow the X server
- * to respond to the DRI protocol request for new drawable info.
- * Since the hardware state depends on having the latest drawable
- * clip rects, all state checking must be done _after_ this call.
- */
- DRI_VALIDATE_DRAWABLE_INFO( sPriv, dPriv );
-
- if ( rmesa->lastStamp != dPriv->lastStamp ) {
- r128UpdatePageFlipping( rmesa );
- driUpdateFramebufferSize(rmesa->glCtx, dPriv);
- rmesa->lastStamp = dPriv->lastStamp;
- rmesa->new_state |= R128_NEW_CLIP;
- RENDERINPUTS_ONES( rmesa->tnl_state_bitset );
- }
-
- rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_CLIPRECTS;
-
- rmesa->numClipRects = dPriv->numClipRects;
- rmesa->pClipRects = dPriv->pClipRects;
-
- if ( sarea->ctx_owner != rmesa->hHWContext ) {
- sarea->ctx_owner = rmesa->hHWContext;
- rmesa->dirty = R128_UPLOAD_ALL;
- }
-
- for ( i = 0 ; i < rmesa->nr_heaps ; i++ ) {
- DRI_AGE_TEXTURES( rmesa->texture_heaps[i] );
- }
-}
diff --git a/src/mesa/drivers/dri/r128/r128_lock.h b/src/mesa/drivers/dri/r128/r128_lock.h
deleted file mode 100644
index 1fc8cbe29f0..00000000000
--- a/src/mesa/drivers/dri/r128/r128_lock.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Kevin E. Martin
- * Gareth Hughes
- *
- */
-
-#ifndef __R128_LOCK_H__
-#define __R128_LOCK_H__
-
-extern void r128GetLock( r128ContextPtr rmesa, GLuint flags );
-
-/* Turn DEBUG_LOCKING on to find locking conflicts.
- */
-#define DEBUG_LOCKING 0
-
-#if DEBUG_LOCKING
-extern char *prevLockFile;
-extern int prevLockLine;
-
-#define DEBUG_LOCK() \
- do { \
- prevLockFile = (__FILE__); \
- prevLockLine = (__LINE__); \
- } while (0)
-
-#define DEBUG_RESET() \
- do { \
- prevLockFile = 0; \
- prevLockLine = 0; \
- } while (0)
-
-#define DEBUG_CHECK_LOCK() \
- do { \
- if ( prevLockFile ) { \
- fprintf( stderr, \
- "LOCK SET!\n\tPrevious %s:%d\n\tCurrent: %s:%d\n", \
- prevLockFile, prevLockLine, __FILE__, __LINE__ ); \
- exit( 1 ); \
- } \
- } while (0)
-
-#else
-
-#define DEBUG_LOCK()
-#define DEBUG_RESET()
-#define DEBUG_CHECK_LOCK()
-
-#endif
-
-/*
- * !!! We may want to separate locks from locks with validation. This
- * could be used to improve performance for those things commands that
- * do not do any drawing !!!
- */
-
-/* Lock the hardware and validate our state.
- */
-#define LOCK_HARDWARE( rmesa ) \
- do { \
- char __ret = 0; \
- DEBUG_CHECK_LOCK(); \
- DRM_CAS( rmesa->driHwLock, rmesa->hHWContext, \
- (DRM_LOCK_HELD | rmesa->hHWContext), __ret ); \
- if ( __ret ) \
- r128GetLock( rmesa, 0 ); \
- DEBUG_LOCK(); \
- } while (0)
-
-/* Unlock the hardware.
- */
-#define UNLOCK_HARDWARE( rmesa ) \
- do { \
- DRM_UNLOCK( rmesa->driFd, \
- rmesa->driHwLock, \
- rmesa->hHWContext ); \
- DEBUG_RESET(); \
- } while (0)
-
-#endif /* __R128_LOCK_H__ */
diff --git a/src/mesa/drivers/dri/r128/r128_screen.c b/src/mesa/drivers/dri/r128/r128_screen.c
deleted file mode 100644
index bbcb6ee1808..00000000000
--- a/src/mesa/drivers/dri/r128/r128_screen.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- *
- */
-
-#include "r128_dri.h"
-
-#include "r128_context.h"
-#include "r128_ioctl.h"
-#include "r128_span.h"
-
-#include "main/context.h"
-#include "main/imports.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-
-#include "utils.h"
-#include "vblank.h"
-
-#include "GL/internal/dri_interface.h"
-
-/* R128 configuration
- */
-#include "xmlpool.h"
-
-PUBLIC const char __driConfigOptions[] =
-DRI_CONF_BEGIN
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_QUALITY
- DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_DEBUG
- DRI_CONF_NO_RAST(false)
-#if ENABLE_PERF_BOXES
- DRI_CONF_PERFORMANCE_BOXES(false)
-#endif
- DRI_CONF_SECTION_END
-DRI_CONF_END;
-#if ENABLE_PERF_BOXES
-static const GLuint __driNConfigOptions = 4;
-#else
-static const GLuint __driNConfigOptions = 3;
-#endif
-
-#if 1
-/* Including xf86PciInfo.h introduces a bunch of errors...
- */
-#define PCI_CHIP_RAGE128LE 0x4C45
-#define PCI_CHIP_RAGE128LF 0x4C46
-#define PCI_CHIP_RAGE128PF 0x5046
-#define PCI_CHIP_RAGE128PR 0x5052
-#define PCI_CHIP_RAGE128RE 0x5245
-#define PCI_CHIP_RAGE128RF 0x5246
-#define PCI_CHIP_RAGE128RK 0x524B
-#define PCI_CHIP_RAGE128RL 0x524C
-#endif
-
-
-/* Create the device specific screen private data struct.
- */
-static r128ScreenPtr
-r128CreateScreen( __DRIscreen *sPriv )
-{
- r128ScreenPtr r128Screen;
- R128DRIPtr r128DRIPriv = (R128DRIPtr)sPriv->pDevPriv;
- int i;
-
- if (sPriv->devPrivSize != sizeof(R128DRIRec)) {
- fprintf(stderr,"\nERROR! sizeof(R128DRIRec) does not match passed size from device driver\n");
- return GL_FALSE;
- }
-
- /* Allocate the private area */
- r128Screen = (r128ScreenPtr) CALLOC( sizeof(*r128Screen) );
- if ( !r128Screen ) return NULL;
-
- /* parse information in __driConfigOptions */
- driParseOptionInfo (&r128Screen->optionCache,
- __driConfigOptions, __driNConfigOptions);
-
- /* This is first since which regions we map depends on whether or
- * not we are using a PCI card.
- */
- r128Screen->IsPCI = r128DRIPriv->IsPCI;
- r128Screen->sarea_priv_offset = r128DRIPriv->sarea_priv_offset;
-
- if (sPriv->drm_version.minor >= 3) {
- drm_r128_getparam_t gp;
- int ret;
-
- gp.param = R128_PARAM_IRQ_NR;
- gp.value = &r128Screen->irq;
-
- ret = drmCommandWriteRead( sPriv->fd, DRM_R128_GETPARAM,
- &gp, sizeof(gp));
- if (ret) {
- fprintf(stderr, "drmR128GetParam (R128_PARAM_IRQ_NR): %d\n", ret);
- FREE( r128Screen );
- return NULL;
- }
- }
-
- r128Screen->mmio.handle = r128DRIPriv->registerHandle;
- r128Screen->mmio.size = r128DRIPriv->registerSize;
- if ( drmMap( sPriv->fd,
- r128Screen->mmio.handle,
- r128Screen->mmio.size,
- (drmAddressPtr)&r128Screen->mmio.map ) ) {
- FREE( r128Screen );
- return NULL;
- }
-
- r128Screen->buffers = drmMapBufs( sPriv->fd );
- if ( !r128Screen->buffers ) {
- drmUnmap( (drmAddress)r128Screen->mmio.map, r128Screen->mmio.size );
- FREE( r128Screen );
- return NULL;
- }
-
- if ( !r128Screen->IsPCI ) {
- r128Screen->agpTextures.handle = r128DRIPriv->agpTexHandle;
- r128Screen->agpTextures.size = r128DRIPriv->agpTexMapSize;
- if ( drmMap( sPriv->fd,
- r128Screen->agpTextures.handle,
- r128Screen->agpTextures.size,
- (drmAddressPtr)&r128Screen->agpTextures.map ) ) {
- drmUnmapBufs( r128Screen->buffers );
- drmUnmap( (drmAddress)r128Screen->mmio.map, r128Screen->mmio.size );
- FREE( r128Screen );
- return NULL;
- }
- }
-
- switch ( r128DRIPriv->deviceID ) {
- case PCI_CHIP_RAGE128RE:
- case PCI_CHIP_RAGE128RF:
- case PCI_CHIP_RAGE128RK:
- case PCI_CHIP_RAGE128RL:
- r128Screen->chipset = R128_CARD_TYPE_R128;
- break;
- case PCI_CHIP_RAGE128PF:
- r128Screen->chipset = R128_CARD_TYPE_R128_PRO;
- break;
- case PCI_CHIP_RAGE128LE:
- case PCI_CHIP_RAGE128LF:
- r128Screen->chipset = R128_CARD_TYPE_R128_MOBILITY;
- break;
- default:
- r128Screen->chipset = R128_CARD_TYPE_R128;
- break;
- }
-
- r128Screen->cpp = r128DRIPriv->bpp / 8;
- r128Screen->AGPMode = r128DRIPriv->AGPMode;
-
- r128Screen->frontOffset = r128DRIPriv->frontOffset;
- r128Screen->frontPitch = r128DRIPriv->frontPitch;
- r128Screen->backOffset = r128DRIPriv->backOffset;
- r128Screen->backPitch = r128DRIPriv->backPitch;
- r128Screen->depthOffset = r128DRIPriv->depthOffset;
- r128Screen->depthPitch = r128DRIPriv->depthPitch;
- r128Screen->spanOffset = r128DRIPriv->spanOffset;
-
- if ( r128DRIPriv->textureSize == 0 ) {
- r128Screen->texOffset[R128_LOCAL_TEX_HEAP] =
- r128DRIPriv->agpTexOffset + R128_AGP_TEX_OFFSET;
- r128Screen->texSize[R128_LOCAL_TEX_HEAP] = r128DRIPriv->agpTexMapSize;
- r128Screen->logTexGranularity[R128_LOCAL_TEX_HEAP] =
- r128DRIPriv->log2AGPTexGran;
- } else {
- r128Screen->texOffset[R128_LOCAL_TEX_HEAP] = r128DRIPriv->textureOffset;
- r128Screen->texSize[R128_LOCAL_TEX_HEAP] = r128DRIPriv->textureSize;
- r128Screen->logTexGranularity[R128_LOCAL_TEX_HEAP] = r128DRIPriv->log2TexGran;
- }
-
- if ( !r128Screen->agpTextures.map || r128DRIPriv->textureSize == 0 ) {
- r128Screen->numTexHeaps = R128_NR_TEX_HEAPS - 1;
- r128Screen->texOffset[R128_AGP_TEX_HEAP] = 0;
- r128Screen->texSize[R128_AGP_TEX_HEAP] = 0;
- r128Screen->logTexGranularity[R128_AGP_TEX_HEAP] = 0;
- } else {
- r128Screen->numTexHeaps = R128_NR_TEX_HEAPS;
- r128Screen->texOffset[R128_AGP_TEX_HEAP] =
- r128DRIPriv->agpTexOffset + R128_AGP_TEX_OFFSET;
- r128Screen->texSize[R128_AGP_TEX_HEAP] = r128DRIPriv->agpTexMapSize;
- r128Screen->logTexGranularity[R128_AGP_TEX_HEAP] =
- r128DRIPriv->log2AGPTexGran;
- }
-
- r128Screen->driScreen = sPriv;
-
- i = 0;
- if ( r128Screen->irq != 0 ) {
- r128Screen->extensions[i++] = &driSwapControlExtension.base;
- r128Screen->extensions[i++] = &driMediaStreamCounterExtension.base;
- }
- r128Screen->extensions[i++] = NULL;
- sPriv->extensions = r128Screen->extensions;
-
- return r128Screen;
-}
-
-/* Destroy the device specific screen private data struct.
- */
-static void
-r128DestroyScreen( __DRIscreen *sPriv )
-{
- r128ScreenPtr r128Screen = (r128ScreenPtr)sPriv->private;
-
- if ( !r128Screen )
- return;
-
- if ( !r128Screen->IsPCI ) {
- drmUnmap( (drmAddress)r128Screen->agpTextures.map,
- r128Screen->agpTextures.size );
- }
- drmUnmapBufs( r128Screen->buffers );
- drmUnmap( (drmAddress)r128Screen->mmio.map, r128Screen->mmio.size );
-
- /* free all option information */
- driDestroyOptionInfo (&r128Screen->optionCache);
-
- FREE( r128Screen );
- sPriv->private = NULL;
-}
-
-
-/* Create and initialize the Mesa and driver specific pixmap buffer
- * data.
- */
-static GLboolean
-r128CreateBuffer( __DRIscreen *driScrnPriv,
- __DRIdrawable *driDrawPriv,
- const struct gl_config *mesaVis,
- GLboolean isPixmap )
-{
- r128ScreenPtr screen = (r128ScreenPtr) driScrnPriv->private;
-
- if (isPixmap) {
- return GL_FALSE; /* not implemented */
- }
- else {
- const GLboolean swDepth = GL_FALSE;
- const GLboolean swAlpha = GL_FALSE;
- const GLboolean swAccum = mesaVis->accumRedBits > 0;
- const GLboolean swStencil = mesaVis->stencilBits > 0 &&
- mesaVis->depthBits != 24;
- struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
-
- {
- driRenderbuffer *frontRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- NULL,
- screen->cpp,
- screen->frontOffset, screen->frontPitch,
- driDrawPriv);
- r128SetSpanFunctions(frontRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
- }
-
- if (mesaVis->doubleBufferMode) {
- driRenderbuffer *backRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- NULL,
- screen->cpp,
- screen->backOffset, screen->backPitch,
- driDrawPriv);
- r128SetSpanFunctions(backRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
- }
-
- if (mesaVis->depthBits == 16) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z16,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- r128SetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
- else if (mesaVis->depthBits == 24) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_S8_Z24,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- r128SetSpanFunctions(depthRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
-
- if (mesaVis->stencilBits > 0 && !swStencil) {
- driRenderbuffer *stencilRb
- = driNewRenderbuffer(MESA_FORMAT_S8,
- NULL,
- screen->cpp,
- screen->depthOffset, screen->depthPitch,
- driDrawPriv);
- r128SetSpanFunctions(stencilRb, mesaVis);
- _mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base);
- }
-
- _mesa_add_soft_renderbuffers(fb,
- GL_FALSE, /* color */
- swDepth,
- swStencil,
- swAccum,
- swAlpha,
- GL_FALSE /* aux */);
- driDrawPriv->driverPrivate = (void *) fb;
-
- return (driDrawPriv->driverPrivate != NULL);
- }
-}
-
-
-static void
-r128DestroyBuffer(__DRIdrawable *driDrawPriv)
-{
- _mesa_reference_framebuffer((struct gl_framebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-
-/* Copy the back color buffer to the front color buffer */
-static void
-r128SwapBuffers(__DRIdrawable *dPriv)
-{
- if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
- r128ContextPtr rmesa;
- struct gl_context *ctx;
- rmesa = (r128ContextPtr) dPriv->driContextPriv->driverPrivate;
- ctx = rmesa->glCtx;
- if (ctx->Visual.doubleBufferMode) {
- _mesa_notifySwapBuffers( ctx ); /* flush pending rendering comands */
- if ( rmesa->doPageFlip ) {
- r128PageFlip( dPriv );
- }
- else {
- r128CopyBuffer( dPriv );
- }
- }
- }
- else {
- /* XXX this shouldn't be an error but we can't handle it for now */
- _mesa_problem(NULL, "%s: drawable has no context!", __FUNCTION__);
- }
-}
-
-
-/* Initialize the driver specific screen private data.
- */
-static GLboolean
-r128InitDriver( __DRIscreen *sPriv )
-{
- sPriv->private = (void *) r128CreateScreen( sPriv );
-
- if ( !sPriv->private ) {
- r128DestroyScreen( sPriv );
- return GL_FALSE;
- }
-
- return GL_TRUE;
-}
-
-static const __DRIconfig **
-r128FillInModes( __DRIscreen *psp,
- unsigned pixel_bits, unsigned depth_bits,
- unsigned stencil_bits, GLboolean have_back_buffer )
-{
- __DRIconfig **configs;
- struct gl_config * m;
- unsigned depth_buffer_factor;
- unsigned back_buffer_factor;
- GLenum fb_format;
- GLenum fb_type;
- int i;
-
- /* Right now GLX_SWAP_COPY_OML isn't supported, but it would be easy
- * enough to add support. Basically, if a context is created with an
- * fbconfig where the swap method is GLX_SWAP_COPY_OML, pageflipping
- * will never be used.
- */
- static const GLenum back_buffer_modes[] = {
- GLX_NONE, GLX_SWAP_UNDEFINED_OML /*, GLX_SWAP_COPY_OML */
- };
-
- uint8_t depth_bits_array[2];
- uint8_t stencil_bits_array[2];
- uint8_t msaa_samples_array[1];
-
- depth_bits_array[0] = depth_bits;
- depth_bits_array[1] = depth_bits;
-
- /* Just like with the accumulation buffer, always provide some modes
- * with a stencil buffer. It will be a sw fallback, but some apps won't
- * care about that.
- */
- stencil_bits_array[0] = 0;
- stencil_bits_array[1] = (stencil_bits == 0) ? 8 : stencil_bits;
-
- msaa_samples_array[0] = 0;
-
- depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 2 : 1;
- back_buffer_factor = (have_back_buffer) ? 2 : 1;
-
- if ( pixel_bits == 16 ) {
- fb_format = GL_RGB;
- fb_type = GL_UNSIGNED_SHORT_5_6_5;
- }
- else {
- fb_format = GL_BGR;
- fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- configs = driCreateConfigs(fb_format, fb_type,
- depth_bits_array, stencil_bits_array,
- depth_buffer_factor, back_buffer_modes,
- back_buffer_factor,
- msaa_samples_array, 1, GL_TRUE);
- if (configs == NULL) {
- fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__,
- __LINE__);
- return NULL;
- }
-
- /* Mark the visual as slow if there are "fake" stencil bits.
- */
- for (i = 0; configs[i]; i++) {
- m = &configs[i]->modes;
- if ((m->stencilBits != 0) && (m->stencilBits != stencil_bits)) {
- m->visualRating = GLX_SLOW_CONFIG;
- }
- }
-
- return (const __DRIconfig **) configs;
-}
-
-
-/**
- * This is the driver specific part of the createNewScreen entry point.
- *
- * \todo maybe fold this into intelInitDriver
- *
- * \return the struct gl_config supported by this driver
- */
-static const __DRIconfig **
-r128InitScreen(__DRIscreen *psp)
-{
- static const __DRIversion ddx_expected = { 4, 0, 0 };
- static const __DRIversion dri_expected = { 4, 0, 0 };
- static const __DRIversion drm_expected = { 2, 2, 0 };
- R128DRIPtr dri_priv = (R128DRIPtr) psp->pDevPriv;
-
- if ( ! driCheckDriDdxDrmVersions2( "Rage128",
- &psp->dri_version, & dri_expected,
- &psp->ddx_version, & ddx_expected,
- &psp->drm_version, & drm_expected ) )
- return NULL;
-
- if (!r128InitDriver(psp))
- return NULL;
-
- return r128FillInModes( psp,
- dri_priv->bpp,
- (dri_priv->bpp == 16) ? 16 : 24,
- (dri_priv->bpp == 16) ? 0 : 8,
- (dri_priv->backOffset != dri_priv->depthOffset) );
-}
-
-const struct __DriverAPIRec driDriverAPI = {
- .InitScreen = r128InitScreen,
- .DestroyScreen = r128DestroyScreen,
- .CreateContext = r128CreateContext,
- .DestroyContext = r128DestroyContext,
- .CreateBuffer = r128CreateBuffer,
- .DestroyBuffer = r128DestroyBuffer,
- .SwapBuffers = r128SwapBuffers,
- .MakeCurrent = r128MakeCurrent,
- .UnbindContext = r128UnbindContext,
- .GetSwapInfo = NULL,
- .GetDrawableMSC = driDrawableGetMSC32,
- .WaitForMSC = driWaitForMSC32,
- .WaitForSBC = NULL,
- .SwapBuffersMSC = NULL
-};
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
- &driCoreExtension.base,
- &driLegacyExtension.base,
- NULL
-};
diff --git a/src/mesa/drivers/dri/r128/r128_screen.h b/src/mesa/drivers/dri/r128/r128_screen.h
deleted file mode 100644
index 8d450adff34..00000000000
--- a/src/mesa/drivers/dri/r128/r128_screen.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- *
- */
-
-#ifndef __R128_SCREEN_H__
-#define __R128_SCREEN_H__
-
-#include "xmlconfig.h"
-
-typedef struct {
- drm_handle_t handle; /* Handle to the DRM region */
- drmSize size; /* Size of the DRM region */
- unsigned char *map; /* Mapping of the DRM region */
-} r128RegionRec, *r128RegionPtr;
-
-typedef struct {
-
- GLint chipset;
- GLint cpp;
- GLint IsPCI; /* Current card is a PCI card */
- GLint AGPMode;
- unsigned int irq; /* IRQ number (0 means none) */
-
- GLuint frontOffset;
- GLuint frontPitch;
- GLuint backOffset;
- GLuint backPitch;
-
- GLuint depthOffset;
- GLuint depthPitch;
- GLuint spanOffset;
-
- /* Shared texture data */
- GLint numTexHeaps;
- GLint texOffset[R128_NR_TEX_HEAPS];
- GLint texSize[R128_NR_TEX_HEAPS];
- GLint logTexGranularity[R128_NR_TEX_HEAPS];
-
- r128RegionRec mmio;
- r128RegionRec agpTextures;
-
- drmBufMapPtr buffers;
-
- __DRIscreen *driScreen;
- unsigned int sarea_priv_offset;
-
- /* Configuration cache with default values for all contexts */
- driOptionCache optionCache;
-
- const __DRIextension *extensions[4];
-
-} r128ScreenRec, *r128ScreenPtr;
-
-
-#endif /* __R128_SCREEN_H__ */
diff --git a/src/mesa/drivers/dri/r128/r128_span.c b/src/mesa/drivers/dri/r128/r128_span.c
deleted file mode 100644
index 04bdbe612e5..00000000000
--- a/src/mesa/drivers/dri/r128/r128_span.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Keith Whitwell
- * Kevin E. Martin
- *
- */
-
-#include "r128_context.h"
-#include "r128_ioctl.h"
-#include "r128_span.h"
-
-#include "swrast/swrast.h"
-
-#define DBG 0
-
-#define HAVE_HW_DEPTH_SPANS 1
-#define HAVE_HW_DEPTH_PIXELS 1
-#define HAVE_HW_STENCIL_SPANS 1
-#define HAVE_HW_STENCIL_PIXELS 1
-
-#define LOCAL_VARS \
- r128ContextPtr rmesa = R128_CONTEXT(ctx); \
- __DRIscreen *sPriv = rmesa->driScreen; \
- __DRIdrawable *dPriv = rmesa->driDrawable; \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- GLuint height = dPriv->h; \
- GLuint p; \
- (void) p;
-
-#define LOCAL_DEPTH_VARS \
- r128ContextPtr rmesa = R128_CONTEXT(ctx); \
- r128ScreenPtr r128scrn = rmesa->r128Screen; \
- __DRIscreen *sPriv = rmesa->driScreen; \
- __DRIdrawable *dPriv = rmesa->driDrawable; \
- GLuint height = dPriv->h; \
- (void) r128scrn; (void) sPriv; (void) height
-
-#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
-
-#define Y_FLIP( _y ) (height - _y - 1)
-
-#define HW_LOCK()
-
-#define HW_UNLOCK()
-
-
-
-/* ================================================================
- * Color buffer
- */
-
-/* 16 bit, RGB565 color spanline and pixel functions
- */
-#define SPANTMP_PIXEL_FMT GL_RGB
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
-
-#define TAG(x) r128##x##_RGB565
-#define TAG2(x,y) r128##x##_RGB565##y
-#define GET_PTR(X,Y) (sPriv->pFB + drb->flippedOffset \
- + ((dPriv->y + (Y)) * drb->flippedPitch + (dPriv->x + (X))) * drb->cpp)
-#include "spantmp2.h"
-
-
-/* 32 bit, ARGB8888 color spanline and pixel functions
- */
-#define SPANTMP_PIXEL_FMT GL_BGRA
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-
-#define TAG(x) r128##x##_ARGB8888
-#define TAG2(x,y) r128##x##_ARGB8888##y
-#define GET_PTR(X,Y) (sPriv->pFB + drb->flippedOffset \
- + ((dPriv->y + (Y)) * drb->flippedPitch + (dPriv->x + (X))) * drb->cpp)
-#include "spantmp2.h"
-
-/* Idling in the depth/stencil span functions:
- * For writes, the kernel reads from the given user-space buffer at dispatch
- * time, and then writes to the depth buffer asynchronously.
- * For reads, the kernel reads from the depth buffer and writes to the span
- * temporary asynchronously.
- * So, if we're going to read from the span temporary, we need to idle before
- * doing so. But we don't need to idle after write, because the CPU won't
- * be accessing the destination, only the accelerator (through 3d rendering or
- * depth span reads)
- * However, due to interactions from pixel cache between 2d (what we do with
- * depth) and 3d (all other parts of the system), we idle at the begin and end
- * of a set of span operations, which should cover the pix cache issue.
- * Except, we still have major issues, as shown by no_rast=true glxgears, or
- * stencilwrap.
- */
-
-/* ================================================================
- * Depth buffer
- */
-
-/* These functions require locking */
-#undef HW_LOCK
-#undef HW_UNLOCK
-#define HW_LOCK() LOCK_HARDWARE(R128_CONTEXT(ctx));
-#define HW_UNLOCK() UNLOCK_HARDWARE(R128_CONTEXT(ctx));
-
-/* 16-bit depth buffer functions
- */
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH_SPAN() \
-do { \
- r128WriteDepthSpanLocked( rmesa, n, \
- x + dPriv->x, \
- y + dPriv->y, \
- (const GLuint *) depth, mask ); \
-} while (0)
-
-#define WRITE_DEPTH_PIXELS() \
-do { \
- GLint ox[MAX_WIDTH]; \
- GLint oy[MAX_WIDTH]; \
- for ( i = 0 ; i < n ; i++ ) { \
- ox[i] = x[i] + dPriv->x; \
- oy[i] = Y_FLIP( y[i] ) + dPriv->y; \
- } \
- r128WriteDepthPixelsLocked( rmesa, n, ox, oy, (const GLuint *) depth, mask ); \
-} while (0)
-
-#define READ_DEPTH_SPAN() \
-do { \
- GLushort *buf = (GLushort *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- GLint i; \
- \
- r128ReadDepthSpanLocked( rmesa, n, \
- x + dPriv->x, \
- y + dPriv->y ); \
- r128WaitForIdleLocked( rmesa ); \
- \
- for ( i = 0 ; i < n ; i++ ) { \
- depth[i] = buf[i]; \
- } \
-} while (0)
-
-#define READ_DEPTH_PIXELS() \
-do { \
- GLushort *buf = (GLushort *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- GLint i, remaining = n; \
- \
- while ( remaining > 0 ) { \
- GLint ox[128]; \
- GLint oy[128]; \
- GLint count; \
- \
- if ( remaining <= 128 ) { \
- count = remaining; \
- } else { \
- count = 128; \
- } \
- for ( i = 0 ; i < count ; i++ ) { \
- ox[i] = x[i] + dPriv->x; \
- oy[i] = Y_FLIP( y[i] ) + dPriv->y; \
- } \
- \
- r128ReadDepthPixelsLocked( rmesa, count, ox, oy ); \
- r128WaitForIdleLocked( rmesa ); \
- \
- for ( i = 0 ; i < count ; i++ ) { \
- depth[i] = buf[i]; \
- } \
- depth += count; \
- x += count; \
- y += count; \
- remaining -= count; \
- } \
-} while (0)
-
-#define TAG(x) r128##x##_z16
-#include "depthtmp.h"
-
-
-/* 24-bit depth, 8-bit stencil buffer functions
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH_SPAN() \
-do { \
- GLuint buf[n]; \
- GLint i; \
- GLuint *readbuf = (GLuint *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- r128ReadDepthSpanLocked( rmesa, n, \
- x + dPriv->x, \
- y + dPriv->y ); \
- r128WaitForIdleLocked( rmesa ); \
- for ( i = 0 ; i < n ; i++ ) { \
- buf[i] = (readbuf[i] & 0xff000000) | (depth[i] & 0x00ffffff); \
- } \
- r128WriteDepthSpanLocked( rmesa, n, \
- x + dPriv->x, \
- y + dPriv->y, \
- buf, mask ); \
-} while (0)
-
-#define WRITE_DEPTH_PIXELS() \
-do { \
- GLuint buf[n]; \
- GLint ox[MAX_WIDTH]; \
- GLint oy[MAX_WIDTH]; \
- GLuint *readbuf = (GLuint *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- for ( i = 0 ; i < n ; i++ ) { \
- ox[i] = x[i] + dPriv->x; \
- oy[i] = Y_FLIP( y[i] ) + dPriv->y; \
- } \
- r128ReadDepthPixelsLocked( rmesa, n, ox, oy ); \
- r128WaitForIdleLocked( rmesa ); \
- for ( i = 0 ; i < n ; i++ ) { \
- buf[i] = (readbuf[i] & 0xff000000) | (depth[i] & 0x00ffffff); \
- } \
- r128WriteDepthPixelsLocked( rmesa, n, ox, oy, buf, mask ); \
-} while (0)
-
-#define READ_DEPTH_SPAN() \
-do { \
- GLuint *buf = (GLuint *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- GLint i; \
- \
- /*if (n >= 128) fprintf(stderr, "Large number of pixels: %d\n", n);*/ \
- r128ReadDepthSpanLocked( rmesa, n, \
- x + dPriv->x, \
- y + dPriv->y ); \
- r128WaitForIdleLocked( rmesa ); \
- \
- for ( i = 0 ; i < n ; i++ ) { \
- depth[i] = buf[i] & 0x00ffffff; \
- } \
-} while (0)
-
-#define READ_DEPTH_PIXELS() \
-do { \
- GLuint *buf = (GLuint *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- GLint i, remaining = n; \
- \
- while ( remaining > 0 ) { \
- GLint ox[128]; \
- GLint oy[128]; \
- GLint count; \
- \
- if ( remaining <= 128 ) { \
- count = remaining; \
- } else { \
- count = 128; \
- } \
- for ( i = 0 ; i < count ; i++ ) { \
- ox[i] = x[i] + dPriv->x; \
- oy[i] = Y_FLIP( y[i] ) + dPriv->y; \
- } \
- \
- r128ReadDepthPixelsLocked( rmesa, count, ox, oy ); \
- r128WaitForIdleLocked( rmesa ); \
- \
- for ( i = 0 ; i < count ; i++ ) { \
- depth[i] = buf[i] & 0x00ffffff; \
- } \
- depth += count; \
- x += count; \
- y += count; \
- remaining -= count; \
- } \
-} while (0)
-
-#define TAG(x) r128##x##_z24_s8
-#include "depthtmp.h"
-
-
-
-/* ================================================================
- * Stencil buffer
- */
-
-/* 24 bit depth, 8 bit stencil depthbuffer functions
- */
-#define WRITE_STENCIL_SPAN() \
-do { \
- GLuint buf[n]; \
- GLint i; \
- GLuint *readbuf = (GLuint *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- r128ReadDepthSpanLocked( rmesa, n, \
- x + dPriv->x, \
- y + dPriv->y ); \
- r128WaitForIdleLocked( rmesa ); \
- for ( i = 0 ; i < n ; i++ ) { \
- buf[i] = (readbuf[i] & 0x00ffffff) | (stencil[i] << 24); \
- } \
- r128WriteDepthSpanLocked( rmesa, n, \
- x + dPriv->x, \
- y + dPriv->y, \
- buf, mask ); \
-} while (0)
-
-#define WRITE_STENCIL_PIXELS() \
-do { \
- GLuint buf[n]; \
- GLint ox[MAX_WIDTH]; \
- GLint oy[MAX_WIDTH]; \
- GLuint *readbuf = (GLuint *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- for ( i = 0 ; i < n ; i++ ) { \
- ox[i] = x[i] + dPriv->x; \
- oy[i] = Y_FLIP( y[i] ) + dPriv->y; \
- } \
- r128ReadDepthPixelsLocked( rmesa, n, ox, oy ); \
- r128WaitForIdleLocked( rmesa ); \
- for ( i = 0 ; i < n ; i++ ) { \
- buf[i] = (readbuf[i] & 0x00ffffff) | (stencil[i] << 24); \
- } \
- r128WriteDepthPixelsLocked( rmesa, n, ox, oy, buf, mask ); \
-} while (0)
-
-#define READ_STENCIL_SPAN() \
-do { \
- GLuint *buf = (GLuint *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- GLint i; \
- \
- /*if (n >= 128) fprintf(stderr, "Large number of pixels: %d\n", n);*/ \
- r128ReadDepthSpanLocked( rmesa, n, \
- x + dPriv->x, \
- y + dPriv->y ); \
- r128WaitForIdleLocked( rmesa ); \
- \
- for ( i = 0 ; i < n ; i++ ) { \
- stencil[i] = (buf[i] & 0xff000000) >> 24; \
- } \
-} while (0)
-
-#define READ_STENCIL_PIXELS() \
-do { \
- GLuint *buf = (GLuint *)((GLubyte *)sPriv->pFB + \
- r128scrn->spanOffset); \
- GLint i, remaining = n; \
- \
- while ( remaining > 0 ) { \
- GLint ox[128]; \
- GLint oy[128]; \
- GLint count; \
- \
- if ( remaining <= 128 ) { \
- count = remaining; \
- } else { \
- count = 128; \
- } \
- for ( i = 0 ; i < count ; i++ ) { \
- ox[i] = x[i] + dPriv->x; \
- oy[i] = Y_FLIP( y[i] ) + dPriv->y; \
- } \
- \
- r128ReadDepthPixelsLocked( rmesa, count, ox, oy ); \
- r128WaitForIdleLocked( rmesa ); \
- \
- for ( i = 0 ; i < count ; i++ ) { \
- stencil[i] = (buf[i] & 0xff000000) >> 24; \
- } \
- stencil += count; \
- x += count; \
- y += count; \
- remaining -= count; \
- } \
-} while (0)
-
-#define TAG(x) radeon##x##_z24_s8
-#include "stenciltmp.h"
-
-static void
-r128SpanRenderStart( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- FLUSH_BATCH(rmesa);
- LOCK_HARDWARE(rmesa);
- r128WaitForIdleLocked( rmesa );
-}
-
-static void
-r128SpanRenderFinish( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- _swrast_flush( ctx );
- r128WaitForIdleLocked( rmesa );
- UNLOCK_HARDWARE( rmesa );
-}
-
-void r128DDInitSpanFuncs( struct gl_context *ctx )
-{
- struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
- swdd->SpanRenderStart = r128SpanRenderStart;
- swdd->SpanRenderFinish = r128SpanRenderFinish;
-}
-
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-r128SetSpanFunctions(driRenderbuffer *drb, const struct gl_config *vis)
-{
- if (drb->Base.Format == MESA_FORMAT_RGB565) {
- r128InitPointers_RGB565(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
- r128InitPointers_ARGB8888(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_Z16) {
- r128InitDepthPointers_z16(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_S8_Z24) {
- r128InitDepthPointers_z24_s8(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_S8) {
- radeonInitStencilPointers_z24_s8(&drb->Base);
- }
-}
diff --git a/src/mesa/drivers/dri/r128/r128_span.h b/src/mesa/drivers/dri/r128/r128_span.h
deleted file mode 100644
index adb571d4d0f..00000000000
--- a/src/mesa/drivers/dri/r128/r128_span.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- *
- */
-
-#ifndef __R128_SPAN_H__
-#define __R128_SPAN_H__
-
-#include "drirenderbuffer.h"
-
-extern void r128DDInitSpanFuncs( struct gl_context *ctx );
-
-extern void
-r128SetSpanFunctions(driRenderbuffer *rb, const struct gl_config *vis);
-
-#endif
diff --git a/src/mesa/drivers/dri/r128/r128_state.c b/src/mesa/drivers/dri/r128/r128_state.c
deleted file mode 100644
index 7ce082ead22..00000000000
--- a/src/mesa/drivers/dri/r128/r128_state.c
+++ /dev/null
@@ -1,1443 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- * Keith Whitwell
- *
- */
-
-#include "r128_context.h"
-#include "r128_state.h"
-#include "r128_ioctl.h"
-#include "r128_tris.h"
-#include "r128_tex.h"
-
-#include "main/context.h"
-#include "main/enums.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-#include "main/state.h"
-#include "swrast/swrast.h"
-#include "vbo/vbo.h"
-#include "tnl/tnl.h"
-#include "swrast_setup/swrast_setup.h"
-
-#include "drirenderbuffer.h"
-
-
-/* =============================================================
- * Alpha blending
- */
-
-
-/**
- * Calculate the hardware blend factor setting. This same function is used
- * for source and destination of both alpha and RGB.
- *
- * \returns
- * The hardware register value for the specified blend factor. This value
- * will need to be shifted into the correct position for either source or
- * destination factor.
- *
- * \todo
- * Since the two cases where source and destination are handled differently
- * are essentially error cases, they should never happen. Determine if these
- * cases can be removed.
- */
-static int blend_factor( r128ContextPtr rmesa, GLenum factor, GLboolean is_src )
-{
- int func;
-
- switch ( factor ) {
- case GL_ZERO:
- func = R128_ALPHA_BLEND_ZERO;
- break;
- case GL_ONE:
- func = R128_ALPHA_BLEND_ONE;
- break;
-
- case GL_SRC_COLOR:
- func = R128_ALPHA_BLEND_SRCCOLOR;
- break;
- case GL_ONE_MINUS_SRC_COLOR:
- func = R128_ALPHA_BLEND_INVSRCCOLOR;
- break;
- case GL_SRC_ALPHA:
- func = R128_ALPHA_BLEND_SRCALPHA;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- func = R128_ALPHA_BLEND_INVSRCALPHA;
- break;
- case GL_SRC_ALPHA_SATURATE:
- func = (is_src) ? R128_ALPHA_BLEND_SAT : R128_ALPHA_BLEND_ZERO;
- break;
-
- case GL_DST_COLOR:
- func = R128_ALPHA_BLEND_DSTCOLOR;
- break;
- case GL_ONE_MINUS_DST_COLOR:
- func = R128_ALPHA_BLEND_INVDSTCOLOR;
- break;
- case GL_DST_ALPHA:
- func = R128_ALPHA_BLEND_DSTALPHA;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- func = R128_ALPHA_BLEND_INVDSTALPHA;
- break;
-
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- default:
- FALLBACK( rmesa, R128_FALLBACK_BLEND_FUNC, GL_TRUE );
- func = (is_src) ? R128_ALPHA_BLEND_ONE : R128_ALPHA_BLEND_ZERO;
- break;
- }
-
- return func;
-}
-
-
-static void r128UpdateAlphaMode( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint a = rmesa->setup.misc_3d_state_cntl_reg;
- GLuint t = rmesa->setup.tex_cntl_c;
-
- if ( ctx->Color.AlphaEnabled ) {
- GLubyte ref;
-
- CLAMPED_FLOAT_TO_UBYTE(ref, ctx->Color.AlphaRef);
-
- a &= ~(R128_ALPHA_TEST_MASK | R128_REF_ALPHA_MASK);
-
- switch ( ctx->Color.AlphaFunc ) {
- case GL_NEVER:
- a |= R128_ALPHA_TEST_NEVER;
- break;
- case GL_LESS:
- a |= R128_ALPHA_TEST_LESS;
- break;
- case GL_LEQUAL:
- a |= R128_ALPHA_TEST_LESSEQUAL;
- break;
- case GL_EQUAL:
- a |= R128_ALPHA_TEST_EQUAL;
- break;
- case GL_GEQUAL:
- a |= R128_ALPHA_TEST_GREATEREQUAL;
- break;
- case GL_GREATER:
- a |= R128_ALPHA_TEST_GREATER;
- break;
- case GL_NOTEQUAL:
- a |= R128_ALPHA_TEST_NEQUAL;
- break;
- case GL_ALWAYS:
- a |= R128_ALPHA_TEST_ALWAYS;
- break;
- }
-
- a |= ref & R128_REF_ALPHA_MASK;
- t |= R128_ALPHA_TEST_ENABLE;
- } else {
- t &= ~R128_ALPHA_TEST_ENABLE;
- }
-
- FALLBACK( rmesa, R128_FALLBACK_BLEND_FUNC, GL_FALSE );
-
- if ( ctx->Color.BlendEnabled ) {
- a &= ~((R128_ALPHA_BLEND_MASK << R128_ALPHA_BLEND_SRC_SHIFT) |
- (R128_ALPHA_BLEND_MASK << R128_ALPHA_BLEND_DST_SHIFT)
- | R128_ALPHA_COMB_FCN_MASK);
-
- a |= blend_factor( rmesa, ctx->Color.Blend[0].SrcRGB, GL_TRUE )
- << R128_ALPHA_BLEND_SRC_SHIFT;
- a |= blend_factor( rmesa, ctx->Color.Blend[0].DstRGB, GL_FALSE )
- << R128_ALPHA_BLEND_DST_SHIFT;
-
- switch (ctx->Color.Blend[0].EquationRGB) {
- case GL_FUNC_ADD:
- a |= R128_ALPHA_COMB_ADD_CLAMP;
- break;
- case GL_FUNC_SUBTRACT:
- a |= R128_ALPHA_COMB_SUB_SRC_DST_CLAMP;
- break;
- default:
- FALLBACK( rmesa, R128_FALLBACK_BLEND_EQ, GL_TRUE );
- }
-
- t |= R128_ALPHA_ENABLE;
- } else {
- t &= ~R128_ALPHA_ENABLE;
- }
-
- if ( rmesa->setup.misc_3d_state_cntl_reg != a ) {
- rmesa->setup.misc_3d_state_cntl_reg = a;
- rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_MASKS;
- }
- if ( rmesa->setup.tex_cntl_c != t ) {
- rmesa->setup.tex_cntl_c = t;
- rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_MASKS;
- }
-}
-
-static void r128DDAlphaFunc( struct gl_context *ctx, GLenum func, GLfloat ref )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_ALPHA;
-}
-
-static void r128DDBlendEquationSeparate( struct gl_context *ctx,
- GLenum modeRGB, GLenum modeA )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- assert( modeRGB == modeA );
- FLUSH_BATCH( rmesa );
-
- /* BlendEquation sets ColorLogicOpEnabled in an unexpected
- * manner.
- */
- FALLBACK( R128_CONTEXT(ctx), R128_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
-
- /* Can only do blend addition, not min, max, subtract, etc. */
- FALLBACK( R128_CONTEXT(ctx), R128_FALLBACK_BLEND_EQ,
- (modeRGB != GL_FUNC_ADD) && (modeRGB != GL_FUNC_SUBTRACT));
-
- rmesa->new_state |= R128_NEW_ALPHA;
-}
-
-static void r128DDBlendFuncSeparate( struct gl_context *ctx,
- GLenum sfactorRGB, GLenum dfactorRGB,
- GLenum sfactorA, GLenum dfactorA )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_ALPHA;
-}
-
-/* =============================================================
- * Stencil
- */
-
-static void
-r128DDStencilFuncSeparate( struct gl_context *ctx, GLenum face, GLenum func,
- GLint ref, GLuint mask )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint refmask = (((ctx->Stencil.Ref[0] & 0xff) << 0) |
- ((ctx->Stencil.ValueMask[0] & 0xff) << 16) |
- ((ctx->Stencil.WriteMask[0] & 0xff) << 24));
- GLuint z = rmesa->setup.z_sten_cntl_c;
-
- z &= ~R128_STENCIL_TEST_MASK;
- switch ( ctx->Stencil.Function[0] ) {
- case GL_NEVER:
- z |= R128_STENCIL_TEST_NEVER;
- break;
- case GL_LESS:
- z |= R128_STENCIL_TEST_LESS;
- break;
- case GL_EQUAL:
- z |= R128_STENCIL_TEST_EQUAL;
- break;
- case GL_LEQUAL:
- z |= R128_STENCIL_TEST_LESSEQUAL;
- break;
- case GL_GREATER:
- z |= R128_STENCIL_TEST_GREATER;
- break;
- case GL_NOTEQUAL:
- z |= R128_STENCIL_TEST_NEQUAL;
- break;
- case GL_GEQUAL:
- z |= R128_STENCIL_TEST_GREATEREQUAL;
- break;
- case GL_ALWAYS:
- z |= R128_STENCIL_TEST_ALWAYS;
- break;
- }
-
- if ( rmesa->setup.sten_ref_mask_c != refmask ) {
- rmesa->setup.sten_ref_mask_c = refmask;
- rmesa->dirty |= R128_UPLOAD_MASKS;
- }
- if ( rmesa->setup.z_sten_cntl_c != z ) {
- rmesa->setup.z_sten_cntl_c = z;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
-}
-
-static void
-r128DDStencilMaskSeparate( struct gl_context *ctx, GLenum face, GLuint mask )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint refmask = (((ctx->Stencil.Ref[0] & 0xff) << 0) |
- ((ctx->Stencil.ValueMask[0] & 0xff) << 16) |
- ((ctx->Stencil.WriteMask[0] & 0xff) << 24));
-
- if ( rmesa->setup.sten_ref_mask_c != refmask ) {
- rmesa->setup.sten_ref_mask_c = refmask;
- rmesa->dirty |= R128_UPLOAD_MASKS;
- }
-}
-
-static void r128DDStencilOpSeparate( struct gl_context *ctx, GLenum face, GLenum fail,
- GLenum zfail, GLenum zpass )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint z = rmesa->setup.z_sten_cntl_c;
-
- if (!( ctx->Visual.stencilBits > 0 && ctx->Visual.depthBits == 24 ))
- return;
-
- z &= ~(R128_STENCIL_S_FAIL_MASK | R128_STENCIL_ZPASS_MASK |
- R128_STENCIL_ZFAIL_MASK);
-
- switch ( ctx->Stencil.FailFunc[0] ) {
- case GL_KEEP:
- z |= R128_STENCIL_S_FAIL_KEEP;
- break;
- case GL_ZERO:
- z |= R128_STENCIL_S_FAIL_ZERO;
- break;
- case GL_REPLACE:
- z |= R128_STENCIL_S_FAIL_REPLACE;
- break;
- case GL_INCR:
- z |= R128_STENCIL_S_FAIL_INC;
- break;
- case GL_DECR:
- z |= R128_STENCIL_S_FAIL_DEC;
- break;
- case GL_INVERT:
- z |= R128_STENCIL_S_FAIL_INV;
- break;
- case GL_INCR_WRAP:
- z |= R128_STENCIL_S_FAIL_INC_WRAP;
- break;
- case GL_DECR_WRAP:
- z |= R128_STENCIL_S_FAIL_DEC_WRAP;
- break;
- }
-
- switch ( ctx->Stencil.ZFailFunc[0] ) {
- case GL_KEEP:
- z |= R128_STENCIL_ZFAIL_KEEP;
- break;
- case GL_ZERO:
- z |= R128_STENCIL_ZFAIL_ZERO;
- break;
- case GL_REPLACE:
- z |= R128_STENCIL_ZFAIL_REPLACE;
- break;
- case GL_INCR:
- z |= R128_STENCIL_ZFAIL_INC;
- break;
- case GL_DECR:
- z |= R128_STENCIL_ZFAIL_DEC;
- break;
- case GL_INVERT:
- z |= R128_STENCIL_ZFAIL_INV;
- break;
- case GL_INCR_WRAP:
- z |= R128_STENCIL_ZFAIL_INC_WRAP;
- break;
- case GL_DECR_WRAP:
- z |= R128_STENCIL_ZFAIL_DEC_WRAP;
- break;
- }
-
- switch ( ctx->Stencil.ZPassFunc[0] ) {
- case GL_KEEP:
- z |= R128_STENCIL_ZPASS_KEEP;
- break;
- case GL_ZERO:
- z |= R128_STENCIL_ZPASS_ZERO;
- break;
- case GL_REPLACE:
- z |= R128_STENCIL_ZPASS_REPLACE;
- break;
- case GL_INCR:
- z |= R128_STENCIL_ZPASS_INC;
- break;
- case GL_DECR:
- z |= R128_STENCIL_ZPASS_DEC;
- break;
- case GL_INVERT:
- z |= R128_STENCIL_ZPASS_INV;
- break;
- case GL_INCR_WRAP:
- z |= R128_STENCIL_ZPASS_INC_WRAP;
- break;
- case GL_DECR_WRAP:
- z |= R128_STENCIL_ZPASS_DEC_WRAP;
- break;
- }
-
- if ( rmesa->setup.z_sten_cntl_c != z ) {
- rmesa->setup.z_sten_cntl_c = z;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
-}
-
-static void r128DDClearStencil( struct gl_context *ctx, GLint s )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- if (ctx->Visual.stencilBits > 0 && ctx->Visual.depthBits == 24) {
- rmesa->ClearDepth &= 0x00ffffff;
- rmesa->ClearDepth |= ctx->Stencil.Clear << 24;
- }
-}
-
-/* =============================================================
- * Depth testing
- */
-
-static void r128UpdateZMode( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint z = rmesa->setup.z_sten_cntl_c;
- GLuint t = rmesa->setup.tex_cntl_c;
-
- if ( ctx->Depth.Test ) {
- z &= ~R128_Z_TEST_MASK;
-
- switch ( ctx->Depth.Func ) {
- case GL_NEVER:
- z |= R128_Z_TEST_NEVER;
- break;
- case GL_ALWAYS:
- z |= R128_Z_TEST_ALWAYS;
- break;
- case GL_LESS:
- z |= R128_Z_TEST_LESS;
- break;
- case GL_LEQUAL:
- z |= R128_Z_TEST_LESSEQUAL;
- break;
- case GL_EQUAL:
- z |= R128_Z_TEST_EQUAL;
- break;
- case GL_GEQUAL:
- z |= R128_Z_TEST_GREATEREQUAL;
- break;
- case GL_GREATER:
- z |= R128_Z_TEST_GREATER;
- break;
- case GL_NOTEQUAL:
- z |= R128_Z_TEST_NEQUAL;
- break;
- }
-
- t |= R128_Z_ENABLE;
- } else {
- t &= ~R128_Z_ENABLE;
- }
-
- if ( ctx->Depth.Mask ) {
- t |= R128_Z_WRITE_ENABLE;
- } else {
- t &= ~R128_Z_WRITE_ENABLE;
- }
-
- if ( rmesa->setup.z_sten_cntl_c != z ) {
- rmesa->setup.z_sten_cntl_c = z;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
- if ( rmesa->setup.tex_cntl_c != t ) {
- rmesa->setup.tex_cntl_c = t;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
-}
-
-static void r128DDDepthFunc( struct gl_context *ctx, GLenum func )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_DEPTH;
-}
-
-static void r128DDDepthMask( struct gl_context *ctx, GLboolean flag )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_DEPTH;
-}
-
-static void r128DDClearDepth( struct gl_context *ctx, GLclampd d )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- switch ( rmesa->setup.z_sten_cntl_c & R128_Z_PIX_WIDTH_MASK ) {
- case R128_Z_PIX_WIDTH_16:
- rmesa->ClearDepth = d * 0x0000ffff;
- break;
- case R128_Z_PIX_WIDTH_24:
- rmesa->ClearDepth = d * 0x00ffffff;
- rmesa->ClearDepth |= ctx->Stencil.Clear << 24;
- break;
- case R128_Z_PIX_WIDTH_32:
- rmesa->ClearDepth = d * 0xffffffff;
- break;
- }
-}
-
-
-/* =============================================================
- * Fog
- */
-
-static void r128UpdateFogAttrib( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint t = rmesa->setup.tex_cntl_c;
- GLubyte c[4];
- GLuint col;
-
- if ( ctx->Fog.Enabled ) {
- t |= R128_FOG_ENABLE;
- } else {
- t &= ~R128_FOG_ENABLE;
- }
-
- c[0] = FLOAT_TO_UBYTE( ctx->Fog.Color[0] );
- c[1] = FLOAT_TO_UBYTE( ctx->Fog.Color[1] );
- c[2] = FLOAT_TO_UBYTE( ctx->Fog.Color[2] );
-
- col = r128PackColor( 4, c[0], c[1], c[2], 0 );
-
- if ( rmesa->setup.fog_color_c != col ) {
- rmesa->setup.fog_color_c = col;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
- if ( rmesa->setup.tex_cntl_c != t ) {
- rmesa->setup.tex_cntl_c = t;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
-}
-
-static void r128DDFogfv( struct gl_context *ctx, GLenum pname, const GLfloat *param )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_FOG;
-}
-
-
-/* =============================================================
- * Clipping
- */
-
-static void r128UpdateClipping( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- if ( rmesa->driDrawable ) {
- __DRIdrawable *drawable = rmesa->driDrawable;
- int x1 = 0;
- int y1 = 0;
- int x2 = drawable->w - 1;
- int y2 = drawable->h - 1;
-
- if ( ctx->Scissor.Enabled ) {
- if ( ctx->Scissor.X > x1 ) {
- x1 = ctx->Scissor.X;
- }
- if ( drawable->h - ctx->Scissor.Y - ctx->Scissor.Height > y1 ) {
- y1 = drawable->h - ctx->Scissor.Y - ctx->Scissor.Height;
- }
- if ( ctx->Scissor.X + ctx->Scissor.Width - 1 < x2 ) {
- x2 = ctx->Scissor.X + ctx->Scissor.Width - 1;
- }
- if ( drawable->h - ctx->Scissor.Y - 1 < y2 ) {
- y2 = drawable->h - ctx->Scissor.Y - 1;
- }
- }
-
- x1 += drawable->x;
- y1 += drawable->y;
- x2 += drawable->x;
- y2 += drawable->y;
-
- /* Clamp values to screen to avoid wrapping problems */
- if ( x1 < 0 )
- x1 = 0;
- else if ( x1 >= rmesa->driScreen->fbWidth )
- x1 = rmesa->driScreen->fbWidth - 1;
- if ( y1 < 0 )
- y1 = 0;
- else if ( y1 >= rmesa->driScreen->fbHeight )
- y1 = rmesa->driScreen->fbHeight - 1;
- if ( x2 < 0 )
- x2 = 0;
- else if ( x2 >= rmesa->driScreen->fbWidth )
- x2 = rmesa->driScreen->fbWidth - 1;
- if ( y2 < 0 )
- y2 = 0;
- else if ( y2 >= rmesa->driScreen->fbHeight )
- y2 = rmesa->driScreen->fbHeight - 1;
-
- rmesa->setup.sc_top_left_c = (((y1 & 0x3FFF) << 16) | (x1 & 0x3FFF));
- rmesa->setup.sc_bottom_right_c = (((y2 & 0x3FFF) << 16) | (x2 & 0x3FFF));
-
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
-}
-
-static void r128DDScissor( struct gl_context *ctx,
- GLint x, GLint y, GLsizei w, GLsizei h )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_CLIP;
-}
-
-
-/* =============================================================
- * Culling
- */
-
-static void r128UpdateCull( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint f = rmesa->setup.pm4_vc_fpu_setup;
-
- f &= ~R128_FRONT_DIR_MASK;
-
- switch ( ctx->Polygon.FrontFace ) {
- case GL_CW:
- f |= R128_FRONT_DIR_CW;
- break;
- case GL_CCW:
- f |= R128_FRONT_DIR_CCW;
- break;
- }
-
- f |= R128_BACKFACE_SOLID | R128_FRONTFACE_SOLID;
-
- if ( ctx->Polygon.CullFlag ) {
- switch ( ctx->Polygon.CullFaceMode ) {
- case GL_FRONT:
- f &= ~R128_FRONTFACE_SOLID;
- break;
- case GL_BACK:
- f &= ~R128_BACKFACE_SOLID;
- break;
- case GL_FRONT_AND_BACK:
- f &= ~(R128_BACKFACE_SOLID |
- R128_FRONTFACE_SOLID);
- break;
- }
- }
-
- if ( 1 || rmesa->setup.pm4_vc_fpu_setup != f ) {
- rmesa->setup.pm4_vc_fpu_setup = f;
- rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_SETUP;
- }
-}
-
-static void r128DDCullFace( struct gl_context *ctx, GLenum mode )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_CULL;
-}
-
-static void r128DDFrontFace( struct gl_context *ctx, GLenum mode )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_CULL;
-}
-
-
-/* =============================================================
- * Masks
- */
-
-static void r128UpdateMasks( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- GLuint mask = r128PackColor( rmesa->r128Screen->cpp,
- ctx->Color.ColorMask[0][RCOMP],
- ctx->Color.ColorMask[0][GCOMP],
- ctx->Color.ColorMask[0][BCOMP],
- ctx->Color.ColorMask[0][ACOMP] );
-
- if ( rmesa->setup.plane_3d_mask_c != mask ) {
- rmesa->setup.plane_3d_mask_c = mask;
- rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_MASKS;
- }
-}
-
-static void r128DDColorMask( struct gl_context *ctx,
- GLboolean r, GLboolean g,
- GLboolean b, GLboolean a )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_MASKS;
-}
-
-
-/* =============================================================
- * Rendering attributes
- *
- * We really don't want to recalculate all this every time we bind a
- * texture. These things shouldn't change all that often, so it makes
- * sense to break them out of the core texture state update routines.
- */
-
-static void updateSpecularLighting( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint t = rmesa->setup.tex_cntl_c;
-
- if ( _mesa_need_secondary_color( ctx ) ) {
- if (ctx->Light.ShadeModel == GL_FLAT) {
- /* R128 can't do flat-shaded separate specular */
- t &= ~R128_SPEC_LIGHT_ENABLE;
- FALLBACK( rmesa, R128_FALLBACK_SEP_SPECULAR, GL_TRUE );
- }
- else {
- t |= R128_SPEC_LIGHT_ENABLE;
- FALLBACK( rmesa, R128_FALLBACK_SEP_SPECULAR, GL_FALSE );
- }
- }
- else {
- t &= ~R128_SPEC_LIGHT_ENABLE;
- FALLBACK( rmesa, R128_FALLBACK_SEP_SPECULAR, GL_FALSE );
- }
-
- if ( rmesa->setup.tex_cntl_c != t ) {
- rmesa->setup.tex_cntl_c = t;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- rmesa->dirty |= R128_UPLOAD_SETUP;
- rmesa->new_state |= R128_NEW_CONTEXT;
- }
-}
-
-
-static void r128DDLightModelfv( struct gl_context *ctx, GLenum pname,
- const GLfloat *param )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- if ( pname == GL_LIGHT_MODEL_COLOR_CONTROL ) {
- FLUSH_BATCH( rmesa );
- updateSpecularLighting(ctx);
- }
-
- if ( pname == GL_LIGHT_MODEL_TWO_SIDE ) {
- FLUSH_BATCH( rmesa );
- r128ChooseRenderState( ctx );
- }
-}
-
-static void r128DDShadeModel( struct gl_context *ctx, GLenum mode )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint s = rmesa->setup.pm4_vc_fpu_setup;
-
- s &= ~R128_FPU_COLOR_MASK;
-
- switch ( mode ) {
- case GL_FLAT:
- s |= R128_FPU_COLOR_FLAT;
- break;
- case GL_SMOOTH:
- s |= R128_FPU_COLOR_GOURAUD;
- break;
- default:
- return;
- }
-
- updateSpecularLighting(ctx);
-
- if ( rmesa->setup.pm4_vc_fpu_setup != s ) {
- FLUSH_BATCH( rmesa );
- rmesa->setup.pm4_vc_fpu_setup = s;
-
- rmesa->new_state |= R128_NEW_CONTEXT;
- rmesa->dirty |= R128_UPLOAD_SETUP;
- }
-}
-
-
-/* =============================================================
- * Window position
- */
-
-static void r128UpdateWindow( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- int x = rmesa->driDrawable->x;
- int y = rmesa->driDrawable->y;
- struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0];
- driRenderbuffer *drb = (driRenderbuffer *) rb;
-
- rmesa->setup.window_xy_offset = (((y & 0xFFF) << R128_WINDOW_Y_SHIFT) |
- ((x & 0xFFF) << R128_WINDOW_X_SHIFT));
-
- rmesa->setup.dst_pitch_offset_c = (((drb->flippedPitch/8) << 21) |
- (drb->flippedOffset >> 5));
-
-
- rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_WINDOW;
-}
-
-
-/* =============================================================
- * Viewport
- */
-
-static void r128CalcViewport( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- const GLfloat *v = ctx->Viewport._WindowMap.m;
- GLfloat *m = rmesa->hw_viewport;
-
- /* See also r128_translate_vertex.
- */
- m[MAT_SX] = v[MAT_SX];
- m[MAT_TX] = v[MAT_TX] + SUBPIXEL_X;
- m[MAT_SY] = - v[MAT_SY];
- m[MAT_TY] = - v[MAT_TY] + rmesa->driDrawable->h + SUBPIXEL_Y;
- m[MAT_SZ] = v[MAT_SZ] * rmesa->depth_scale;
- m[MAT_TZ] = v[MAT_TZ] * rmesa->depth_scale;
-}
-
-static void r128Viewport( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height )
-{
- r128CalcViewport( ctx );
-}
-
-static void r128DepthRange( struct gl_context *ctx,
- GLclampd nearval, GLclampd farval )
-{
- r128CalcViewport( ctx );
-}
-
-
-/* =============================================================
- * Miscellaneous
- */
-
-static void r128DDClearColor( struct gl_context *ctx,
- const GLfloat color[4] )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLubyte c[4];
-
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-
- rmesa->ClearColor = r128PackColor( rmesa->r128Screen->cpp,
- c[0], c[1], c[2], c[3] );
-}
-
-static void r128DDLogicOpCode( struct gl_context *ctx, GLenum opcode )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- if ( ctx->Color.ColorLogicOpEnabled ) {
- FLUSH_BATCH( rmesa );
-
- FALLBACK( rmesa, R128_FALLBACK_LOGICOP, opcode != GL_COPY );
- }
-}
-
-static void r128DDDrawBuffer( struct gl_context *ctx, GLenum mode )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
-
- if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
- /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */
- FALLBACK( rmesa, R128_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
- else {
- switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0] ) {
- case BUFFER_FRONT_LEFT:
- case BUFFER_BACK_LEFT:
- FALLBACK( rmesa, R128_FALLBACK_DRAW_BUFFER, GL_FALSE );
- break;
- default:
- /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */
- FALLBACK( rmesa, R128_FALLBACK_DRAW_BUFFER, GL_TRUE );
- break;
- }
- }
-
- rmesa->new_state |= R128_NEW_WINDOW;
-}
-
-static void r128DDReadBuffer( struct gl_context *ctx, GLenum mode )
-{
- /* nothing, until we implement h/w glRead/CopyPixels or CopyTexImage */
-}
-
-
-/* =============================================================
- * Polygon stipple
- */
-
-static void r128DDPolygonStipple( struct gl_context *ctx, const GLubyte *mask )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint stipple[32], i;
- drm_r128_stipple_t stippleRec;
-
- for (i = 0; i < 32; i++) {
- stipple[31 - i] = ((mask[i*4+0] << 24) |
- (mask[i*4+1] << 16) |
- (mask[i*4+2] << 8) |
- (mask[i*4+3]));
- }
-
- FLUSH_BATCH( rmesa );
- LOCK_HARDWARE( rmesa );
-
- stippleRec.mask = stipple;
- drmCommandWrite( rmesa->driFd, DRM_R128_STIPPLE,
- &stippleRec, sizeof(stippleRec) );
-
- UNLOCK_HARDWARE( rmesa );
-
- rmesa->new_state |= R128_NEW_CONTEXT;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
-}
-
-
-/* =============================================================
- * Render mode
- */
-
-static void r128DDRenderMode( struct gl_context *ctx, GLenum mode )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- FALLBACK( rmesa, R128_FALLBACK_RENDER_MODE, (mode != GL_RENDER) );
-}
-
-
-
-/* =============================================================
- * State enable/disable
- */
-
-static void r128DDEnable( struct gl_context *ctx, GLenum cap, GLboolean state )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %s = %s )\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr( cap ),
- state ? "GL_TRUE" : "GL_FALSE" );
- }
-
- switch ( cap ) {
- case GL_ALPHA_TEST:
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_ALPHA;
- break;
-
- case GL_BLEND:
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_ALPHA;
-
- /* For some reason enable(GL_BLEND) affects ColorLogicOpEnabled.
- */
- FALLBACK( rmesa, R128_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
- break;
-
- case GL_CULL_FACE:
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_CULL;
- break;
-
- case GL_DEPTH_TEST:
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_DEPTH;
- break;
-
- case GL_DITHER:
- do {
- GLuint t = rmesa->setup.tex_cntl_c;
- FLUSH_BATCH( rmesa );
-
- if ( ctx->Color.DitherFlag ) {
- t |= R128_DITHER_ENABLE;
- } else {
- t &= ~R128_DITHER_ENABLE;
- }
-
- if ( rmesa->setup.tex_cntl_c != t ) {
- rmesa->setup.tex_cntl_c = t;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
- } while (0);
- break;
-
- case GL_FOG:
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_FOG;
- break;
-
- case GL_COLOR_LOGIC_OP:
- FLUSH_BATCH( rmesa );
- FALLBACK( rmesa, R128_FALLBACK_LOGICOP,
- state && ctx->Color.LogicOp != GL_COPY );
- break;
-
- case GL_LIGHTING:
- case GL_COLOR_SUM_EXT:
- updateSpecularLighting(ctx);
- break;
-
- case GL_SCISSOR_TEST:
- FLUSH_BATCH( rmesa );
- rmesa->scissor = state;
- rmesa->new_state |= R128_NEW_CLIP;
- break;
-
- case GL_STENCIL_TEST:
- FLUSH_BATCH( rmesa );
- if ( ctx->Visual.stencilBits > 0 && ctx->Visual.depthBits == 24 ) {
- if ( state ) {
- rmesa->setup.tex_cntl_c |= R128_STENCIL_ENABLE;
- /* Reset the fallback (if any) for bad stencil funcs */
- r128DDStencilOpSeparate( ctx, 0, ctx->Stencil.FailFunc[0],
- ctx->Stencil.ZFailFunc[0],
- ctx->Stencil.ZPassFunc[0] );
- } else {
- rmesa->setup.tex_cntl_c &= ~R128_STENCIL_ENABLE;
- FALLBACK( rmesa, R128_FALLBACK_STENCIL, GL_FALSE );
- }
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- } else {
- FALLBACK( rmesa, R128_FALLBACK_STENCIL, state );
- }
- break;
-
- case GL_TEXTURE_1D:
- case GL_TEXTURE_2D:
- case GL_TEXTURE_3D:
- FLUSH_BATCH( rmesa );
- break;
-
- case GL_POLYGON_STIPPLE:
- if ( rmesa->render_primitive == GL_TRIANGLES ) {
- FLUSH_BATCH( rmesa );
- rmesa->setup.dp_gui_master_cntl_c &= ~R128_GMC_BRUSH_NONE;
- if ( state ) {
- rmesa->setup.dp_gui_master_cntl_c |=
- R128_GMC_BRUSH_32x32_MONO_FG_LA;
- } else {
- rmesa->setup.dp_gui_master_cntl_c |=
- R128_GMC_BRUSH_SOLID_COLOR;
- }
- rmesa->new_state |= R128_NEW_CONTEXT;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
- break;
-
- default:
- return;
- }
-}
-
-
-/* =============================================================
- * State initialization, management
- */
-
-static void r128DDPrintDirty( const char *msg, GLuint state )
-{
- fprintf( stderr,
- "%s: (0x%x) %s%s%s%s%s%s%s%s%s\n",
- msg,
- state,
- (state & R128_UPLOAD_CORE) ? "core, " : "",
- (state & R128_UPLOAD_CONTEXT) ? "context, " : "",
- (state & R128_UPLOAD_SETUP) ? "setup, " : "",
- (state & R128_UPLOAD_TEX0) ? "tex0, " : "",
- (state & R128_UPLOAD_TEX1) ? "tex1, " : "",
- (state & R128_UPLOAD_MASKS) ? "masks, " : "",
- (state & R128_UPLOAD_WINDOW) ? "window, " : "",
- (state & R128_UPLOAD_CLIPRECTS) ? "cliprects, " : "",
- (state & R128_REQUIRE_QUIESCENCE) ? "quiescence, " : "" );
-}
-
-/*
- * Load the current context's state into the hardware.
- *
- * NOTE: Be VERY careful about ensuring the context state is marked for
- * upload, the only place it shouldn't be uploaded is when the setup
- * state has changed in ReducedPrimitiveChange as this comes right after
- * a state update.
- *
- * Blits of any type should always upload the context and masks after
- * they are done.
- */
-void r128EmitHwStateLocked( r128ContextPtr rmesa )
-{
- drm_r128_sarea_t *sarea = rmesa->sarea;
- drm_r128_context_regs_t *regs = &(rmesa->setup);
- const r128TexObjPtr t0 = rmesa->CurrentTexObj[0];
- const r128TexObjPtr t1 = rmesa->CurrentTexObj[1];
-
- if ( R128_DEBUG & DEBUG_VERBOSE_MSG ) {
- r128DDPrintDirty( "r128EmitHwStateLocked", rmesa->dirty );
- }
-
- if ( rmesa->dirty & (R128_UPLOAD_CONTEXT |
- R128_UPLOAD_SETUP |
- R128_UPLOAD_MASKS |
- R128_UPLOAD_WINDOW |
- R128_UPLOAD_CORE) ) {
- memcpy( &sarea->context_state, regs, sizeof(sarea->context_state) );
-
- if( rmesa->dirty & R128_UPLOAD_CONTEXT )
- {
- /* One possible side-effect of uploading a new context is the
- * setting of the R128_GMC_AUX_CLIP_DIS bit, which causes all
- * auxilliary cliprects to be disabled. So the next command must
- * upload them again. */
- rmesa->dirty |= R128_UPLOAD_CLIPRECTS;
- }
- }
-
- if ( (rmesa->dirty & R128_UPLOAD_TEX0) && t0 ) {
- drm_r128_texture_regs_t *tex = &sarea->tex_state[0];
-
- tex->tex_cntl = t0->setup.tex_cntl;
- tex->tex_combine_cntl = rmesa->tex_combine[0];
- tex->tex_size_pitch = t0->setup.tex_size_pitch;
- memcpy( &tex->tex_offset[0], &t0->setup.tex_offset[0],
- sizeof(tex->tex_offset ) );
- tex->tex_border_color = t0->setup.tex_border_color;
- }
-
- if ( (rmesa->dirty & R128_UPLOAD_TEX1) && t1 ) {
- drm_r128_texture_regs_t *tex = &sarea->tex_state[1];
-
- tex->tex_cntl = t1->setup.tex_cntl;
- tex->tex_combine_cntl = rmesa->tex_combine[1];
- tex->tex_size_pitch = t1->setup.tex_size_pitch;
- memcpy( &tex->tex_offset[0], &t1->setup.tex_offset[0],
- sizeof(tex->tex_offset ) );
- tex->tex_border_color = t1->setup.tex_border_color;
- }
-
- sarea->vertsize = rmesa->vertex_size;
- sarea->vc_format = rmesa->vertex_format;
-
- /* Turn off the texture cache flushing */
- rmesa->setup.tex_cntl_c &= ~R128_TEX_CACHE_FLUSH;
-
- sarea->dirty |= rmesa->dirty;
- rmesa->dirty &= R128_UPLOAD_CLIPRECTS;
-}
-
-static void r128DDPrintState( const char *msg, GLuint flags )
-{
- fprintf( stderr,
- "%s: (0x%x) %s%s%s%s%s%s%s%s\n",
- msg,
- flags,
- (flags & R128_NEW_CONTEXT) ? "context, " : "",
- (flags & R128_NEW_ALPHA) ? "alpha, " : "",
- (flags & R128_NEW_DEPTH) ? "depth, " : "",
- (flags & R128_NEW_FOG) ? "fog, " : "",
- (flags & R128_NEW_CLIP) ? "clip, " : "",
- (flags & R128_NEW_CULL) ? "cull, " : "",
- (flags & R128_NEW_MASKS) ? "masks, " : "",
- (flags & R128_NEW_WINDOW) ? "window, " : "" );
-}
-
-void r128DDUpdateHWState( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- int new_state = rmesa->new_state;
-
- if ( new_state || rmesa->NewGLState & _NEW_TEXTURE )
- {
- FLUSH_BATCH( rmesa );
-
- rmesa->new_state = 0;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_MSG )
- r128DDPrintState( "r128UpdateHwState", new_state );
-
- /* Update the various parts of the context's state.
- */
- if ( new_state & R128_NEW_ALPHA )
- r128UpdateAlphaMode( ctx );
-
- if ( new_state & R128_NEW_DEPTH )
- r128UpdateZMode( ctx );
-
- if ( new_state & R128_NEW_FOG )
- r128UpdateFogAttrib( ctx );
-
- if ( new_state & R128_NEW_CLIP )
- r128UpdateClipping( ctx );
-
- if ( new_state & R128_NEW_CULL )
- r128UpdateCull( ctx );
-
- if ( new_state & R128_NEW_MASKS )
- r128UpdateMasks( ctx );
-
- if ( new_state & R128_NEW_WINDOW )
- {
- r128UpdateWindow( ctx );
- r128CalcViewport( ctx );
- }
-
- if ( rmesa->NewGLState & _NEW_TEXTURE ) {
- r128UpdateTextureState( ctx );
- }
- }
-}
-
-
-static void r128DDInvalidateState( struct gl_context *ctx, GLuint new_state )
-{
- _swrast_InvalidateState( ctx, new_state );
- _swsetup_InvalidateState( ctx, new_state );
- _vbo_InvalidateState( ctx, new_state );
- _tnl_InvalidateState( ctx, new_state );
- R128_CONTEXT(ctx)->NewGLState |= new_state;
-}
-
-
-
-/* Initialize the context's hardware state.
- */
-void r128DDInitState( r128ContextPtr rmesa )
-{
- int dst_bpp, depth_bpp;
-
- switch ( rmesa->r128Screen->cpp ) {
- case 2:
- dst_bpp = R128_GMC_DST_16BPP;
- break;
- case 4:
- dst_bpp = R128_GMC_DST_32BPP;
- break;
- default:
- fprintf( stderr, "Error: Unsupported pixel depth... exiting\n" );
- exit( -1 );
- }
-
- rmesa->ClearColor = 0x00000000;
-
- switch ( rmesa->glCtx->Visual.depthBits ) {
- case 16:
- rmesa->ClearDepth = 0x0000ffff;
- depth_bpp = R128_Z_PIX_WIDTH_16;
- rmesa->depth_scale = 1.0 / (GLfloat)0xffff;
- break;
- case 24:
- rmesa->ClearDepth = 0x00ffffff;
- depth_bpp = R128_Z_PIX_WIDTH_24;
- rmesa->depth_scale = 1.0 / (GLfloat)0xffffff;
- break;
- default:
- fprintf( stderr, "Error: Unsupported depth %d... exiting\n",
- rmesa->glCtx->Visual.depthBits );
- exit( -1 );
- }
-
- rmesa->Fallback = 0;
-
- /* Hardware state:
- */
- rmesa->setup.dp_gui_master_cntl_c = (R128_GMC_DST_PITCH_OFFSET_CNTL |
- R128_GMC_DST_CLIPPING |
- R128_GMC_BRUSH_SOLID_COLOR |
- dst_bpp |
- R128_GMC_SRC_DATATYPE_COLOR |
- R128_GMC_BYTE_MSB_TO_LSB |
- R128_GMC_CONVERSION_TEMP_6500 |
- R128_ROP3_S |
- R128_DP_SRC_SOURCE_MEMORY |
- R128_GMC_3D_FCN_EN |
- R128_GMC_CLR_CMP_CNTL_DIS |
- R128_GMC_AUX_CLIP_DIS |
- R128_GMC_WR_MSK_DIS);
-
- rmesa->setup.sc_top_left_c = 0x00000000;
- rmesa->setup.sc_bottom_right_c = 0x1fff1fff;
-
- rmesa->setup.z_offset_c = rmesa->r128Screen->depthOffset;
- rmesa->setup.z_pitch_c = ((rmesa->r128Screen->depthPitch >> 3) |
- R128_Z_TILE);
-
- rmesa->setup.z_sten_cntl_c = (depth_bpp |
- R128_Z_TEST_LESS |
- R128_STENCIL_TEST_ALWAYS |
- R128_STENCIL_S_FAIL_KEEP |
- R128_STENCIL_ZPASS_KEEP |
- R128_STENCIL_ZFAIL_KEEP);
-
- rmesa->setup.tex_cntl_c = (R128_Z_WRITE_ENABLE |
- R128_SHADE_ENABLE |
- R128_DITHER_ENABLE |
- R128_ALPHA_IN_TEX_COMPLETE_A |
- R128_LIGHT_DIS |
- R128_ALPHA_LIGHT_DIS |
- R128_TEX_CACHE_FLUSH |
- (0x3f << R128_LOD_BIAS_SHIFT));
-
- rmesa->setup.misc_3d_state_cntl_reg = (R128_MISC_SCALE_3D_TEXMAP_SHADE |
- R128_MISC_SCALE_PIX_REPLICATE |
- R128_ALPHA_COMB_ADD_CLAMP |
- R128_FOG_VERTEX |
- (R128_ALPHA_BLEND_ONE << R128_ALPHA_BLEND_SRC_SHIFT) |
- (R128_ALPHA_BLEND_ZERO << R128_ALPHA_BLEND_DST_SHIFT) |
- R128_ALPHA_TEST_ALWAYS);
-
- rmesa->setup.texture_clr_cmp_clr_c = 0x00000000;
- rmesa->setup.texture_clr_cmp_msk_c = 0xffffffff;
-
- rmesa->setup.fog_color_c = 0x00000000;
-
- rmesa->setup.pm4_vc_fpu_setup = (R128_FRONT_DIR_CCW |
- R128_BACKFACE_SOLID |
- R128_FRONTFACE_SOLID |
- R128_FPU_COLOR_GOURAUD |
- R128_FPU_SUB_PIX_4BITS |
- R128_FPU_MODE_3D |
- R128_TRAP_BITS_DISABLE |
- R128_XFACTOR_2 |
- R128_YFACTOR_2 |
- R128_FLAT_SHADE_VERTEX_OGL |
- R128_FPU_ROUND_TRUNCATE |
- R128_WM_SEL_8DW);
-
- rmesa->setup.setup_cntl = (R128_COLOR_GOURAUD |
- R128_PRIM_TYPE_TRI |
- R128_TEXTURE_ST_MULT_W |
- R128_STARTING_VERTEX_1 |
- R128_ENDING_VERTEX_3 |
- R128_SU_POLY_LINE_NOT_LAST |
- R128_SUB_PIX_4BITS);
-
- rmesa->setup.tex_size_pitch_c = 0x00000000;
- rmesa->setup.constant_color_c = 0x00ffffff;
-
- rmesa->setup.dp_write_mask = 0xffffffff;
- rmesa->setup.sten_ref_mask_c = 0xffff0000;
- rmesa->setup.plane_3d_mask_c = 0xffffffff;
-
- rmesa->setup.window_xy_offset = 0x00000000;
-
- rmesa->setup.scale_3d_cntl = (R128_SCALE_DITHER_TABLE |
- R128_TEX_CACHE_SIZE_FULL |
- R128_DITHER_INIT_RESET |
- R128_SCALE_3D_TEXMAP_SHADE |
- R128_SCALE_PIX_REPLICATE |
- R128_ALPHA_COMB_ADD_CLAMP |
- R128_FOG_VERTEX |
- (R128_ALPHA_BLEND_ONE << R128_ALPHA_BLEND_SRC_SHIFT) |
- (R128_ALPHA_BLEND_ZERO << R128_ALPHA_BLEND_DST_SHIFT) |
- R128_ALPHA_TEST_ALWAYS |
- R128_COMPOSITE_SHADOW_CMP_EQUAL |
- R128_TEX_MAP_ALPHA_IN_TEXTURE |
- R128_TEX_CACHE_LINE_SIZE_4QW);
-
- rmesa->new_state = R128_NEW_ALL;
-}
-
-/* Initialize the driver's state functions.
- */
-void r128DDInitStateFuncs( struct gl_context *ctx )
-{
- ctx->Driver.UpdateState = r128DDInvalidateState;
-
- ctx->Driver.ClearColor = r128DDClearColor;
- ctx->Driver.ClearStencil = r128DDClearStencil;
- ctx->Driver.DrawBuffer = r128DDDrawBuffer;
- ctx->Driver.ReadBuffer = r128DDReadBuffer;
-
- ctx->Driver.ColorMask = r128DDColorMask;
- ctx->Driver.AlphaFunc = r128DDAlphaFunc;
- ctx->Driver.BlendEquationSeparate = r128DDBlendEquationSeparate;
- ctx->Driver.BlendFuncSeparate = r128DDBlendFuncSeparate;
- ctx->Driver.ClearDepth = r128DDClearDepth;
- ctx->Driver.CullFace = r128DDCullFace;
- ctx->Driver.FrontFace = r128DDFrontFace;
- ctx->Driver.DepthFunc = r128DDDepthFunc;
- ctx->Driver.DepthMask = r128DDDepthMask;
- ctx->Driver.Enable = r128DDEnable;
- ctx->Driver.Fogfv = r128DDFogfv;
- ctx->Driver.Hint = NULL;
- ctx->Driver.Lightfv = NULL;
- ctx->Driver.LightModelfv = r128DDLightModelfv;
- ctx->Driver.LogicOpcode = r128DDLogicOpCode;
- ctx->Driver.PolygonMode = NULL;
- ctx->Driver.PolygonStipple = r128DDPolygonStipple;
- ctx->Driver.RenderMode = r128DDRenderMode;
- ctx->Driver.Scissor = r128DDScissor;
- ctx->Driver.ShadeModel = r128DDShadeModel;
- ctx->Driver.StencilFuncSeparate = r128DDStencilFuncSeparate;
- ctx->Driver.StencilMaskSeparate = r128DDStencilMaskSeparate;
- ctx->Driver.StencilOpSeparate = r128DDStencilOpSeparate;
-
- ctx->Driver.DepthRange = r128DepthRange;
- ctx->Driver.Viewport = r128Viewport;
-}
diff --git a/src/mesa/drivers/dri/r128/r128_state.h b/src/mesa/drivers/dri/r128/r128_state.h
deleted file mode 100644
index 55b0cbf4b77..00000000000
--- a/src/mesa/drivers/dri/r128/r128_state.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- *
- */
-
-#ifndef __R128_STATE_H__
-#define __R128_STATE_H__
-
-#include "r128_context.h"
-
-extern void r128DDInitState( r128ContextPtr rmesa );
-extern void r128DDInitStateFuncs( struct gl_context *ctx );
-
-extern void r128DDUpdateState( struct gl_context *ctx );
-extern void r128DDUpdateHWState( struct gl_context *ctx );
-
-extern void r128EmitHwStateLocked( r128ContextPtr rmesa );
-
-#endif
diff --git a/src/mesa/drivers/dri/r128/r128_tex.c b/src/mesa/drivers/dri/r128/r128_tex.c
deleted file mode 100644
index a3f6ce8edeb..00000000000
--- a/src/mesa/drivers/dri/r128/r128_tex.c
+++ /dev/null
@@ -1,615 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- * Brian Paul
- */
-
-#include "r128_context.h"
-#include "r128_ioctl.h"
-#include "r128_tex.h"
-#include "r128_texobj.h"
-
-#include "main/simple_list.h"
-#include "main/enums.h"
-#include "main/texstore.h"
-#include "main/teximage.h"
-#include "main/texobj.h"
-#include "main/imports.h"
-#include "main/macros.h"
-
-#include "xmlpool.h"
-
-#define TEX_0 1
-#define TEX_1 2
-
-
-/**
- * Set the texture wrap modes. Currently \c GL_REPEAT, \c GL_CLAMP,
- * \c GL_CLAMP_TO_EDGE, and \c GL_MIRRORED_REPEAT are supported.
- *
- * \param t Texture object whose wrap modes are to be set
- * \param swrap Wrap mode for the \a s texture coordinate
- * \param twrap Wrap mode for the \a t texture coordinate
- */
-static void r128SetTexWrap( r128TexObjPtr t, GLenum swrap, GLenum twrap )
-{
- t->setup.tex_cntl &= ~(R128_TEX_CLAMP_S_MASK | R128_TEX_CLAMP_T_MASK);
-
- switch ( swrap ) {
- case GL_CLAMP:
- t->setup.tex_cntl |= R128_TEX_CLAMP_S_BORDER_COLOR;
- break;
- case GL_CLAMP_TO_EDGE:
- t->setup.tex_cntl |= R128_TEX_CLAMP_S_CLAMP;
- break;
- case GL_REPEAT:
- t->setup.tex_cntl |= R128_TEX_CLAMP_S_WRAP;
- break;
- case GL_MIRRORED_REPEAT:
- t->setup.tex_cntl |= R128_TEX_CLAMP_S_MIRROR;
- break;
- }
-
- switch ( twrap ) {
- case GL_CLAMP:
- t->setup.tex_cntl |= R128_TEX_CLAMP_T_BORDER_COLOR;
- break;
- case GL_CLAMP_TO_EDGE:
- t->setup.tex_cntl |= R128_TEX_CLAMP_T_CLAMP;
- break;
- case GL_REPEAT:
- t->setup.tex_cntl |= R128_TEX_CLAMP_T_WRAP;
- break;
- case GL_MIRRORED_REPEAT:
- t->setup.tex_cntl |= R128_TEX_CLAMP_T_MIRROR;
- break;
- }
-}
-
-static void r128SetTexFilter( r128TexObjPtr t, GLenum minf, GLenum magf )
-{
- t->setup.tex_cntl &= ~(R128_MIN_BLEND_MASK | R128_MAG_BLEND_MASK);
-
- switch ( minf ) {
- case GL_NEAREST:
- t->setup.tex_cntl |= R128_MIN_BLEND_NEAREST;
- break;
- case GL_LINEAR:
- t->setup.tex_cntl |= R128_MIN_BLEND_LINEAR;
- break;
- case GL_NEAREST_MIPMAP_NEAREST:
- t->setup.tex_cntl |= R128_MIN_BLEND_MIPNEAREST;
- break;
- case GL_LINEAR_MIPMAP_NEAREST:
- t->setup.tex_cntl |= R128_MIN_BLEND_MIPLINEAR;
- break;
- case GL_NEAREST_MIPMAP_LINEAR:
- t->setup.tex_cntl |= R128_MIN_BLEND_LINEARMIPNEAREST;
- break;
- case GL_LINEAR_MIPMAP_LINEAR:
- t->setup.tex_cntl |= R128_MIN_BLEND_LINEARMIPLINEAR;
- break;
- }
-
- switch ( magf ) {
- case GL_NEAREST:
- t->setup.tex_cntl |= R128_MAG_BLEND_NEAREST;
- break;
- case GL_LINEAR:
- t->setup.tex_cntl |= R128_MAG_BLEND_LINEAR;
- break;
- }
-}
-
-static void r128SetTexBorderColor( r128TexObjPtr t, const GLfloat color[4] )
-{
- GLubyte c[4];
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
- t->setup.tex_border_color = r128PackColor( 4, c[0], c[1], c[2], c[3] );
-}
-
-
-static r128TexObjPtr r128AllocTexObj( struct gl_texture_object *texObj )
-{
- r128TexObjPtr t;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *) texObj );
- }
-
- t = (r128TexObjPtr) CALLOC_STRUCT( r128_tex_obj );
- texObj->DriverData = t;
- if ( t != NULL ) {
-
- /* Initialize non-image-dependent parts of the state:
- */
- t->base.tObj = texObj;
-
- /* FIXME Something here to set initial values for other parts of
- * FIXME t->setup?
- */
-
- make_empty_list( (driTextureObject *) t );
-
- r128SetTexWrap( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT );
- r128SetTexFilter( t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter );
- r128SetTexBorderColor( t, texObj->Sampler.BorderColor.f );
- }
-
- return t;
-}
-
-
-/* Called by the _mesa_store_teximage[123]d() functions. */
-static gl_format
-r128ChooseTextureFormat( struct gl_context *ctx, GLint internalFormat,
- GLenum format, GLenum type )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- const GLboolean do32bpt =
- ( rmesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_32 );
- const GLboolean force16bpt =
- ( rmesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_FORCE_16 );
- (void) format;
- (void) type;
-
- switch ( internalFormat ) {
- /* non-sized formats with alpha */
- case GL_INTENSITY:
- case GL_COMPRESSED_INTENSITY:
- case GL_ALPHA:
- case GL_COMPRESSED_ALPHA:
- case 2:
- case GL_LUMINANCE_ALPHA:
- case GL_COMPRESSED_LUMINANCE_ALPHA:
- case 4:
- case GL_RGBA:
- case GL_COMPRESSED_RGBA:
- if (do32bpt)
- return _dri_texformat_argb8888;
- else
- return _dri_texformat_argb4444;
-
- /* 16-bit formats with alpha */
- case GL_INTENSITY4:
- case GL_ALPHA4:
- case GL_LUMINANCE4_ALPHA4:
- case GL_RGBA2:
- case GL_RGBA4:
- return _dri_texformat_argb4444;
-
- /* 32-bit formats with alpha */
- case GL_INTENSITY8:
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- case GL_ALPHA8:
- case GL_ALPHA12:
- case GL_ALPHA16:
- case GL_LUMINANCE6_ALPHA2:
- case GL_LUMINANCE8_ALPHA8:
- case GL_LUMINANCE12_ALPHA4:
- case GL_LUMINANCE12_ALPHA12:
- case GL_LUMINANCE16_ALPHA16:
- case GL_RGB5_A1:
- case GL_RGBA8:
- case GL_RGB10_A2:
- case GL_RGBA12:
- case GL_RGBA16:
- if (!force16bpt)
- return _dri_texformat_argb8888;
- else
- return _dri_texformat_argb4444;
-
- /* non-sized formats without alpha */
- case 1:
- case GL_LUMINANCE:
- case GL_COMPRESSED_LUMINANCE:
- case 3:
- case GL_RGB:
- case GL_COMPRESSED_RGB:
- if (do32bpt)
- return _dri_texformat_argb8888;
- else
- return _dri_texformat_rgb565;
-
- /* 16-bit formats without alpha */
- case GL_LUMINANCE4:
- case GL_R3_G3_B2:
- case GL_RGB4:
- case GL_RGB5:
- return _dri_texformat_rgb565;
-
- /* 32-bit formats without alpha */
- case GL_LUMINANCE8:
- case GL_LUMINANCE12:
- case GL_LUMINANCE16:
- case GL_RGB8:
- case GL_RGB10:
- case GL_RGB12:
- case GL_RGB16:
- if (!force16bpt)
- return _dri_texformat_argb8888;
- else
- return _dri_texformat_rgb565;
-
- /* color-indexed formats */
- case GL_COLOR_INDEX:
- case GL_COLOR_INDEX1_EXT:
- case GL_COLOR_INDEX2_EXT:
- case GL_COLOR_INDEX4_EXT:
- case GL_COLOR_INDEX8_EXT:
- case GL_COLOR_INDEX12_EXT:
- case GL_COLOR_INDEX16_EXT:
- return _dri_texformat_ci8;
-
- case GL_YCBCR_MESA:
- if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
- type == GL_UNSIGNED_BYTE)
- return MESA_FORMAT_YCBCR;
- else
- return MESA_FORMAT_YCBCR_REV;
-
- default:
- _mesa_problem( ctx, "unexpected format in %s", __FUNCTION__ );
- return MESA_FORMAT_NONE;
- }
-}
-
-
-static void r128TexImage1D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- if ( t ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) r128AllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage1D");
- return;
- }
- }
-
- /* Note, this will call r128ChooseTextureFormat */
- _mesa_store_teximage1d( ctx, target, level, internalFormat,
- width, border, format, type,
- pixels, packing, texObj, texImage );
-
- t->dirty_images[0] |= (1 << level);
-}
-
-
-static void r128TexSubImage1D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLsizei width,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- assert( t ); /* this _should_ be true */
- if ( t ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) r128AllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexSubImage1D");
- return;
- }
- }
-
- _mesa_store_texsubimage1d(ctx, target, level, xoffset, width,
- format, type, pixels, packing, texObj,
- texImage);
-
- t->dirty_images[0] |= (1 << level);
-}
-
-
-static void r128TexImage2D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint height, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- if ( t ) {
- driSwapOutTextureObject( (driTextureObject *) t );
- }
- else {
- t = (driTextureObject *) r128AllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
- return;
- }
- }
-
- /* Note, this will call r128ChooseTextureFormat */
- _mesa_store_teximage2d(ctx, target, level, internalFormat,
- width, height, border, format, type, pixels,
- &ctx->Unpack, texObj, texImage);
-
- t->dirty_images[0] |= (1 << level);
-}
-
-
-static void r128TexSubImage2D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- driTextureObject * t = (driTextureObject *) texObj->DriverData;
-
- assert( t ); /* this _should_ be true */
- if ( t ) {
- driSwapOutTextureObject( t );
- }
- else {
- t = (driTextureObject *) r128AllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
- return;
- }
- }
-
- _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width,
- height, format, type, pixels, packing, texObj,
- texImage);
- t->dirty_images[0] |= (1 << level);
-}
-
-
-static void r128TexEnv( struct gl_context *ctx, GLenum target,
- GLenum pname, const GLfloat *param )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- struct gl_texture_unit *texUnit;
- GLubyte c[4];
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %s )\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr( pname ) );
- }
-
- switch ( pname ) {
- case GL_TEXTURE_ENV_MODE:
- FLUSH_BATCH( rmesa );
- rmesa->new_state |= R128_NEW_ALPHA;
- break;
-
- case GL_TEXTURE_ENV_COLOR:
- texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
- CLAMPED_FLOAT_TO_UBYTE( c[0], texUnit->EnvColor[0] );
- CLAMPED_FLOAT_TO_UBYTE( c[1], texUnit->EnvColor[1] );
- CLAMPED_FLOAT_TO_UBYTE( c[2], texUnit->EnvColor[2] );
- CLAMPED_FLOAT_TO_UBYTE( c[3], texUnit->EnvColor[3] );
- rmesa->env_color = r128PackColor( 4, c[0], c[1], c[2], c[3] );
- if ( rmesa->setup.constant_color_c != rmesa->env_color ) {
- FLUSH_BATCH( rmesa );
- rmesa->setup.constant_color_c = rmesa->env_color;
-
- /* More complex multitexture/multipass fallbacks for GL_BLEND
- * can be done later, but this allows a single pass GL_BLEND
- * in some cases (ie. Performer town demo). This is only
- * applicable to the regular Rage 128, as the Pro and M3 can
- * handle true single-pass GL_BLEND texturing.
- */
- rmesa->blend_flags &= ~R128_BLEND_ENV_COLOR;
- if ( R128_IS_PLAIN( rmesa ) &&
- rmesa->env_color != 0x00000000 &&
- rmesa->env_color != 0xff000000 &&
- rmesa->env_color != 0x00ffffff &&
- rmesa->env_color != 0xffffffff ) {
- rmesa->blend_flags |= R128_BLEND_ENV_COLOR;
- }
- }
- break;
-
- case GL_TEXTURE_LOD_BIAS:
- {
- uint32_t t = rmesa->setup.tex_cntl_c;
- GLint bias;
- uint32_t b;
-
- /* GTH: This isn't exactly correct, but gives good results up to a
- * certain point. It is better than completely ignoring the LOD
- * bias. Unfortunately there isn't much range in the bias, the
- * spec mentions strides that vary between 0.5 and 2.0 but these
- * numbers don't seem to relate to the GL LOD bias value at all.
- */
- if ( param[0] >= 1.0 ) {
- bias = -128;
- } else if ( param[0] >= 0.5 ) {
- bias = -64;
- } else if ( param[0] >= 0.25 ) {
- bias = 0;
- } else if ( param[0] >= 0.0 ) {
- bias = 63;
- } else {
- bias = 127;
- }
-
- b = (uint32_t)bias & 0xff;
- t &= ~R128_LOD_BIAS_MASK;
- t |= (b << R128_LOD_BIAS_SHIFT);
-
- if ( rmesa->setup.tex_cntl_c != t ) {
- FLUSH_BATCH( rmesa );
- rmesa->setup.tex_cntl_c = t;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- }
- }
- break;
-
- default:
- return;
- }
-}
-
-
-static void r128TexParameter( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj,
- GLenum pname, const GLfloat *params )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- r128TexObjPtr t = (r128TexObjPtr)tObj->DriverData;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %s )\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr( pname ) );
- }
-
- if ( ( target != GL_TEXTURE_2D ) && ( target != GL_TEXTURE_1D ) )
- return;
-
- switch ( pname ) {
- case GL_TEXTURE_MIN_FILTER:
- case GL_TEXTURE_MAG_FILTER:
- if ( t->base.bound ) FLUSH_BATCH( rmesa );
- r128SetTexFilter( t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter );
- break;
-
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- if ( t->base.bound ) FLUSH_BATCH( rmesa );
- r128SetTexWrap( t, tObj->Sampler.WrapS, tObj->Sampler.WrapT );
- break;
-
- case GL_TEXTURE_BORDER_COLOR:
- if ( t->base.bound ) FLUSH_BATCH( rmesa );
- r128SetTexBorderColor( t, tObj->Sampler.BorderColor.f );
- break;
-
- case GL_TEXTURE_BASE_LEVEL:
- case GL_TEXTURE_MAX_LEVEL:
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- /* This isn't the most efficient solution but there doesn't appear to
- * be a nice alternative for R128. Since there's no LOD clamping,
- * we just have to rely on loading the right subset of mipmap levels
- * to simulate a clamped LOD.
- */
- if ( t->base.bound ) FLUSH_BATCH( rmesa );
- driSwapOutTextureObject( (driTextureObject *) t );
- break;
-
- default:
- return;
- }
-}
-
-static void r128BindTexture( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj )
-{
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p ) unit=%d\n", __FUNCTION__, (void *) tObj,
- ctx->Texture.CurrentUnit );
- }
-
- assert( (target != GL_TEXTURE_2D && target != GL_TEXTURE_1D) ||
- (tObj->DriverData != NULL) );
-}
-
-
-static void r128DeleteTexture( struct gl_context *ctx,
- struct gl_texture_object *tObj )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- driTextureObject * t = (driTextureObject *) tObj->DriverData;
-
- if ( t ) {
- if ( t->bound && rmesa ) {
- FLUSH_BATCH( rmesa );
- }
-
- driDestroyTextureObject( t );
- }
- /* Free mipmap images and the texture object itself */
- _mesa_delete_texture_object(ctx, tObj);
-}
-
-/**
- * Allocate a new texture object.
- * Called via ctx->Driver.NewTextureObject.
- * Note: we could use containment here to 'derive' the driver-specific
- * texture object from the core mesa gl_texture_object. Not done at this time.
- */
-static struct gl_texture_object *
-r128NewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
-{
- struct gl_texture_object *obj;
- obj = _mesa_new_texture_object(ctx, name, target);
- r128AllocTexObj( obj );
- return obj;
-}
-
-void r128InitTextureFuncs( struct dd_function_table *functions )
-{
- functions->TexEnv = r128TexEnv;
- functions->ChooseTextureFormat = r128ChooseTextureFormat;
- functions->TexImage1D = r128TexImage1D;
- functions->TexSubImage1D = r128TexSubImage1D;
- functions->TexImage2D = r128TexImage2D;
- functions->TexSubImage2D = r128TexSubImage2D;
- functions->TexParameter = r128TexParameter;
- functions->BindTexture = r128BindTexture;
- functions->NewTextureObject = r128NewTextureObject;
- functions->DeleteTexture = r128DeleteTexture;
- functions->IsTextureResident = driIsTextureResident;
-
- driInitTextureFormats();
-}
-
diff --git a/src/mesa/drivers/dri/r128/r128_tex.h b/src/mesa/drivers/dri/r128/r128_tex.h
deleted file mode 100644
index 98e9b04ad01..00000000000
--- a/src/mesa/drivers/dri/r128/r128_tex.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- *
- */
-
-#ifndef __R128_TEX_H__
-#define __R128_TEX_H__
-
-extern void r128UpdateTextureState( struct gl_context *ctx );
-
-extern void r128UploadTexImages( r128ContextPtr rmesa, r128TexObjPtr t );
-
-extern void r128DestroyTexObj( r128ContextPtr rmesa, r128TexObjPtr t );
-
-extern void r128InitTextureFuncs( struct dd_function_table *functions );
-
-
-/* ================================================================
- * Color conversion macros:
- */
-
-#define R128PACKCOLOR332( r, g, b ) \
- (((r) & 0xe0) | (((g) & 0xe0) >> 3) | (((b) & 0xc0) >> 6))
-
-#define R128PACKCOLOR1555( r, g, b, a ) \
- ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) | \
- ((a) ? 0x8000 : 0))
-
-#define R128PACKCOLOR565( r, g, b ) \
- ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))
-
-#define R128PACKCOLOR888( r, g, b ) \
- (((r) << 16) | ((g) << 8) | (b))
-
-#define R128PACKCOLOR8888( r, g, b, a ) \
- (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-
-#define R128PACKCOLOR4444( r, g, b, a ) \
- ((((a) & 0xf0) << 8) | (((r) & 0xf0) << 4) | ((g) & 0xf0) | ((b) >> 4))
-
-static INLINE uint32_t r128PackColor( GLuint cpp,
- GLubyte r, GLubyte g,
- GLubyte b, GLubyte a )
-{
- switch ( cpp ) {
- case 2:
- return R128PACKCOLOR565( r, g, b );
- case 4:
- return R128PACKCOLOR8888( r, g, b, a );
- default:
- return 0;
- }
-}
-
-#endif /* __R128_TEX_H__ */
diff --git a/src/mesa/drivers/dri/r128/r128_texmem.c b/src/mesa/drivers/dri/r128/r128_texmem.c
deleted file mode 100644
index 412f6d42551..00000000000
--- a/src/mesa/drivers/dri/r128/r128_texmem.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- * Brian Paul
- */
-
-#include "r128_context.h"
-#include "r128_ioctl.h"
-#include "r128_tex.h"
-
-#include "main/macros.h"
-#include "main/simple_list.h"
-#include "main/imports.h"
-
-#define TEX_0 1
-#define TEX_1 2
-
-
-/* Destroy hardware state associated with texture `t'.
- */
-void r128DestroyTexObj( r128ContextPtr rmesa, r128TexObjPtr t )
-{
- unsigned i;
-
-
- /* See if it was the driver's current object.
- */
-
- if ( rmesa != NULL )
- {
- for ( i = 0 ; i < rmesa->glCtx->Const.MaxTextureUnits ; i++ )
- {
- if ( t == rmesa->CurrentTexObj[ i ] ) {
- assert( t->base.bound & (1 << i) );
- rmesa->CurrentTexObj[ i ] = NULL;
- }
- }
- }
-}
-
-
-/**
- * Upload the texture image associated with texture \a t at the specified
- * level at the address relative to \a start.
- */
-static void uploadSubImage( r128ContextPtr rmesa, r128TexObjPtr t,
- GLint level,
- GLint x, GLint y, GLint width, GLint height )
-{
- struct gl_texture_image *image;
- int texelsPerDword = 0;
- int imageWidth, imageHeight;
- int remaining, rows;
- int format, dwords;
- uint32_t pitch, offset;
- int i;
-
- /* Ensure we have a valid texture to upload */
- if ( ( level < 0 ) || ( level > R128_MAX_TEXTURE_LEVELS ) )
- return;
-
- image = t->base.tObj->Image[0][level];
- if ( !image )
- return;
-
- switch ( _mesa_get_format_bytes(image->TexFormat) ) {
- case 1: texelsPerDword = 4; break;
- case 2: texelsPerDword = 2; break;
- case 4: texelsPerDword = 1; break;
- }
-
-#if 1
- /* FIXME: The subimage index calcs are wrong... */
- x = 0;
- y = 0;
- width = image->Width;
- height = image->Height;
-#endif
-
- imageWidth = image->Width;
- imageHeight = image->Height;
-
- format = t->textureFormat >> 16;
-
- /* The texel upload routines have a minimum width, so force the size
- * if needed.
- */
- if ( imageWidth < texelsPerDword ) {
- int factor;
-
- factor = texelsPerDword / imageWidth;
- imageWidth = texelsPerDword;
- imageHeight /= factor;
- if ( imageHeight == 0 ) {
- /* In this case, the texel converter will actually walk a
- * texel or two off the end of the image, but normal malloc
- * alignment should prevent it from ever causing a fault.
- */
- imageHeight = 1;
- }
- }
-
- /* We can't upload to a pitch less than 8 texels so we will need to
- * linearly upload all modified rows for textures smaller than this.
- * This makes the x/y/width/height different for the blitter and the
- * texture walker.
- */
- if ( imageWidth >= 8 ) {
- /* The texture walker and the blitter look identical */
- pitch = imageWidth >> 3;
- } else {
- int factor;
- int y2;
- int start, end;
-
- start = (y * imageWidth) & ~7;
- end = (y + height) * imageWidth;
-
- if ( end - start < 8 ) {
- /* Handle the case where the total number of texels
- * uploaded is < 8.
- */
- x = 0;
- y = start / 8;
- width = end - start;
- height = 1;
- } else {
- /* Upload some number of full 8 texel blit rows */
- factor = 8 / imageWidth;
-
- y2 = y + height - 1;
- y /= factor;
- y2 /= factor;
-
- x = 0;
- width = 8;
- height = y2 - y + 1;
- }
-
- /* Fixed pitch of 8 */
- pitch = 1;
- }
-
- dwords = width * height / texelsPerDword;
- offset = t->bufAddr + t->image[level - t->base.firstLevel].offset;
-
-#if ENABLE_PERF_BOXES
- /* Bump the performace counter */
- rmesa->c_textureBytes += (dwords << 2);
-#endif
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "r128UploadSubImage: %d,%d of %d,%d at %d,%d\n",
- width, height, image->Width, image->Height, x, y );
- fprintf( stderr, " blit ofs: 0x%07x pitch: 0x%x dwords: %d "
- "level: %d format: %x\n",
- (GLuint)offset, (GLuint)pitch, dwords, level, format );
- }
-
- /* Subdivide the texture if required */
- if ( dwords <= R128_BUFFER_MAX_DWORDS / 2 ) {
- rows = height;
- } else {
- rows = (R128_BUFFER_MAX_DWORDS * texelsPerDword) / (2 * width);
- }
-
- for ( i = 0, remaining = height ;
- remaining > 0 ;
- remaining -= rows, y += rows, i++ )
- {
- uint32_t *dst;
- drmBufPtr buffer;
-
- assert(image->Data);
-
- height = MIN2(remaining, rows);
-
- /* Grab the indirect buffer for the texture blit */
- LOCK_HARDWARE( rmesa );
- buffer = r128GetBufferLocked( rmesa );
-
- dst = (uint32_t *)((char *)buffer->address + R128_HOSTDATA_BLIT_OFFSET);
-
- /* Copy the next chunck of the texture image into the blit buffer */
- {
- const GLuint texelBytes =
- _mesa_get_format_bytes(image->TexFormat);
- const GLubyte *src = (const GLubyte *) image->Data +
- (y * image->Width + x) * texelBytes;
- const GLuint bytes = width * height * texelBytes;
- memcpy(dst, src, bytes);
- }
-
- r128FireBlitLocked( rmesa, buffer,
- offset, pitch, format,
- x, y, width, height );
- UNLOCK_HARDWARE( rmesa );
- }
-
- rmesa->new_state |= R128_NEW_CONTEXT;
- rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_MASKS;
-}
-
-
-/* Upload the texture images associated with texture `t'. This might
- * require removing our own and/or other client's texture objects to
- * make room for these images.
- */
-void r128UploadTexImages( r128ContextPtr rmesa, r128TexObjPtr t )
-{
- const GLint numLevels = t->base.lastLevel - t->base.firstLevel + 1;
- GLint i;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p, %p )\n",
- __FUNCTION__, (void *) rmesa->glCtx, (void *) t );
- }
-
- assert(t);
-
- LOCK_HARDWARE( rmesa );
-
- if ( !t->base.memBlock ) {
- int heap;
-
-
- heap = driAllocateTexture( rmesa->texture_heaps, rmesa->nr_heaps,
- (driTextureObject *) t );
- if ( heap == -1 ) {
- UNLOCK_HARDWARE( rmesa );
- return;
- }
-
- /* Set the base offset of the texture image */
- assert(t->base.memBlock);
- t->bufAddr = rmesa->r128Screen->texOffset[heap]
- + t->base.memBlock->ofs;
-
- /* Set texture offsets for each mipmap level */
- if ( t->setup.tex_cntl & R128_MIP_MAP_DISABLE ) {
- for ( i = 0 ; i < R128_MAX_TEXTURE_LEVELS ; i++ ) {
- t->setup.tex_offset[i] = t->bufAddr;
- }
- } else {
- for ( i = 0; i < numLevels; i++ ) {
- const int j = numLevels - i - 1;
- t->setup.tex_offset[j] = t->bufAddr + t->image[i].offset;
- }
- }
- }
-
- /* Let the world know we've used this memory recently.
- */
- driUpdateTextureLRU( (driTextureObject *) t );
- UNLOCK_HARDWARE( rmesa );
-
- /* Upload any images that are new */
- if ( t->base.dirty_images[0] ) {
- for ( i = 0 ; i < numLevels; i++ ) {
- const GLint j = t->base.firstLevel + i; /* the texObj's level */
- if ( t->base.dirty_images[0] & (1 << j) ) {
- uploadSubImage( rmesa, t, j, 0, 0,
- t->image[i].width, t->image[i].height );
- }
- }
-
- rmesa->setup.tex_cntl_c |= R128_TEX_CACHE_FLUSH;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
- t->base.dirty_images[0] = 0;
- }
-}
diff --git a/src/mesa/drivers/dri/r128/r128_texobj.h b/src/mesa/drivers/dri/r128/r128_texobj.h
deleted file mode 100644
index efbbb2df781..00000000000
--- a/src/mesa/drivers/dri/r128/r128_texobj.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Kevin E. Martin
- * Gareth Hughes
- *
- */
-
-#ifndef _R128_TEXOBJ_H_
-#define _R128_TEXOBJ_H_
-
-#include "main/mm.h"
-
-/* Individual texture image information.
- */
-typedef struct {
- GLuint offset; /* Relative to local texture space */
- GLuint width;
- GLuint height;
-} r128TexImage;
-
-typedef struct r128_tex_obj r128TexObj, *r128TexObjPtr;
-
-/* Texture object in locally shared texture space.
- */
-struct r128_tex_obj {
- driTextureObject base;
-
- uint32_t bufAddr; /* Offset to start of locally
- shared texture block */
-
- GLuint age;
- r128TexImage image[R128_MAX_TEXTURE_LEVELS]; /* Image data for all
- mipmap levels */
-
- uint32_t textureFormat; /* Actual hardware format */
-
- drm_r128_texture_regs_t setup; /* Setup regs for texture */
-};
-
-#endif /* _R128_TEXOBJ_H_ */
diff --git a/src/mesa/drivers/dri/r128/r128_texstate.c b/src/mesa/drivers/dri/r128/r128_texstate.c
deleted file mode 100644
index 11441639411..00000000000
--- a/src/mesa/drivers/dri/r128/r128_texstate.c
+++ /dev/null
@@ -1,645 +0,0 @@
-/**************************************************************************
-
-Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, 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
-on 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
-ATI, PRECISION INSIGHT AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Gareth Hughes
- * Kevin E. Martin
- * Brian Paul
- */
-
-#include "main/glheader.h"
-#include "main/imports.h"
-#include "main/context.h"
-#include "main/macros.h"
-
-#include "r128_context.h"
-#include "r128_ioctl.h"
-#include "r128_tris.h"
-#include "r128_tex.h"
-
-
-static void r128SetTexImages( r128ContextPtr rmesa,
- const struct gl_texture_object *tObj )
-{
- r128TexObjPtr t = (r128TexObjPtr) tObj->DriverData;
- struct gl_texture_image *baseImage = tObj->Image[0][tObj->BaseLevel];
- int log2Pitch, log2Height, log2Size, log2MinSize;
- int totalSize;
- int i;
- GLint firstLevel, lastLevel;
-
- assert(t);
- assert(baseImage);
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API )
- fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *) tObj );
-
- switch (baseImage->TexFormat) {
- case MESA_FORMAT_ARGB8888:
- case MESA_FORMAT_ARGB8888_REV:
- t->textureFormat = R128_DATATYPE_ARGB8888;
- break;
- case MESA_FORMAT_ARGB4444:
- case MESA_FORMAT_ARGB4444_REV:
- t->textureFormat = R128_DATATYPE_ARGB4444;
- break;
- case MESA_FORMAT_RGB565:
- case MESA_FORMAT_RGB565_REV:
- t->textureFormat = R128_DATATYPE_RGB565;
- break;
- case MESA_FORMAT_RGB332:
- t->textureFormat = R128_DATATYPE_RGB8;
- break;
- case MESA_FORMAT_CI8:
- t->textureFormat = R128_DATATYPE_CI8;
- break;
- case MESA_FORMAT_YCBCR:
- t->textureFormat = R128_DATATYPE_YVYU422;
- break;
- case MESA_FORMAT_YCBCR_REV:
- t->textureFormat = R128_DATATYPE_VYUY422;
- break;
- default:
- _mesa_problem(rmesa->glCtx, "Bad texture format in %s", __FUNCTION__);
- };
-
- /* Compute which mipmap levels we really want to send to the hardware.
- */
-
- driCalculateTextureFirstLastLevel( (driTextureObject *) t );
- firstLevel = t->base.firstLevel;
- lastLevel = t->base.lastLevel;
-
- log2Pitch = tObj->Image[0][firstLevel]->WidthLog2;
- log2Height = tObj->Image[0][firstLevel]->HeightLog2;
- log2Size = MAX2(log2Pitch, log2Height);
- log2MinSize = log2Size;
-
- t->base.dirty_images[0] = 0;
- totalSize = 0;
- for ( i = firstLevel; i <= lastLevel; i++ ) {
- const struct gl_texture_image *texImage;
-
- texImage = tObj->Image[0][i];
- if ( !texImage || !texImage->Data ) {
- lastLevel = i - 1;
- break;
- }
-
- log2MinSize = texImage->MaxLog2;
-
- t->image[i - firstLevel].offset = totalSize;
- t->image[i - firstLevel].width = tObj->Image[0][i]->Width;
- t->image[i - firstLevel].height = tObj->Image[0][i]->Height;
-
- t->base.dirty_images[0] |= (1 << i);
-
- totalSize += (tObj->Image[0][i]->Height *
- tObj->Image[0][i]->Width *
- _mesa_get_format_bytes(tObj->Image[0][i]->TexFormat));
-
- /* Offsets must be 32-byte aligned for host data blits and tiling */
- totalSize = (totalSize + 31) & ~31;
- }
-
- t->base.totalSize = totalSize;
- t->base.firstLevel = firstLevel;
- t->base.lastLevel = lastLevel;
-
- /* Set the texture format */
- t->setup.tex_cntl &= ~(0xf << 16);
- t->setup.tex_cntl |= t->textureFormat;
-
- t->setup.tex_combine_cntl = 0x00000000; /* XXX is this right? */
-
- t->setup.tex_size_pitch = ((log2Pitch << R128_TEX_PITCH_SHIFT) |
- (log2Size << R128_TEX_SIZE_SHIFT) |
- (log2Height << R128_TEX_HEIGHT_SHIFT) |
- (log2MinSize << R128_TEX_MIN_SIZE_SHIFT));
-
- for ( i = 0 ; i < R128_MAX_TEXTURE_LEVELS ; i++ ) {
- t->setup.tex_offset[i] = 0x00000000;
- }
-
- if (firstLevel == lastLevel)
- t->setup.tex_cntl |= R128_MIP_MAP_DISABLE;
- else
- t->setup.tex_cntl &= ~R128_MIP_MAP_DISABLE;
-
- /* FYI: r128UploadTexImages( rmesa, t ); used to be called here */
-}
-
-
-/* ================================================================
- * Texture combine functions
- */
-
-#define COLOR_COMB_DISABLE (R128_COMB_DIS | \
- R128_COLOR_FACTOR_TEX)
-#define COLOR_COMB_COPY_INPUT (R128_COMB_COPY_INP | \
- R128_COLOR_FACTOR_TEX)
-#define COLOR_COMB_MODULATE (R128_COMB_MODULATE | \
- R128_COLOR_FACTOR_TEX)
-#define COLOR_COMB_MODULATE_NTEX (R128_COMB_MODULATE | \
- R128_COLOR_FACTOR_NTEX)
-#define COLOR_COMB_ADD (R128_COMB_ADD | \
- R128_COLOR_FACTOR_TEX)
-#define COLOR_COMB_BLEND_TEX (R128_COMB_BLEND_TEXTURE | \
- R128_COLOR_FACTOR_TEX)
-/* Rage 128 Pro/M3 only! */
-#define COLOR_COMB_BLEND_COLOR (R128_COMB_MODULATE2X | \
- R128_COMB_FCN_MSB | \
- R128_COLOR_FACTOR_CONST_COLOR)
-
-#define ALPHA_COMB_DISABLE (R128_COMB_ALPHA_DIS | \
- R128_ALPHA_FACTOR_TEX_ALPHA)
-#define ALPHA_COMB_COPY_INPUT (R128_COMB_ALPHA_COPY_INP | \
- R128_ALPHA_FACTOR_TEX_ALPHA)
-#define ALPHA_COMB_MODULATE (R128_COMB_ALPHA_MODULATE | \
- R128_ALPHA_FACTOR_TEX_ALPHA)
-#define ALPHA_COMB_MODULATE_NTEX (R128_COMB_ALPHA_MODULATE | \
- R128_ALPHA_FACTOR_NTEX_ALPHA)
-#define ALPHA_COMB_ADD (R128_COMB_ALPHA_ADD | \
- R128_ALPHA_FACTOR_TEX_ALPHA)
-
-#define INPUT_INTERP (R128_INPUT_FACTOR_INT_COLOR | \
- R128_INP_FACTOR_A_INT_ALPHA)
-#define INPUT_PREVIOUS (R128_INPUT_FACTOR_PREV_COLOR | \
- R128_INP_FACTOR_A_PREV_ALPHA)
-
-static GLboolean r128UpdateTextureEnv( struct gl_context *ctx, int unit )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLint source = rmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- const struct gl_texture_object *tObj = texUnit->_Current;
- const GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
- GLuint combine;
-
- if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s( %p, %d )\n",
- __FUNCTION__, (void *) ctx, unit );
- }
-
- if ( unit == 0 ) {
- combine = INPUT_INTERP;
- } else {
- combine = INPUT_PREVIOUS;
- }
-
- /* Set the texture environment state */
- switch ( texUnit->EnvMode ) {
- case GL_REPLACE:
- switch ( format ) {
- case GL_RGBA:
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- combine |= (COLOR_COMB_DISABLE | /* C = Ct */
- ALPHA_COMB_DISABLE); /* A = At */
- break;
- case GL_RGB:
- case GL_LUMINANCE:
- combine |= (COLOR_COMB_DISABLE | /* C = Ct */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- break;
- case GL_ALPHA:
- combine |= (COLOR_COMB_COPY_INPUT | /* C = Cf */
- ALPHA_COMB_DISABLE); /* A = At */
- break;
- case GL_COLOR_INDEX:
- default:
- return GL_FALSE;
- }
- break;
-
- case GL_MODULATE:
- switch ( format ) {
- case GL_RGBA:
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- combine |= (COLOR_COMB_MODULATE | /* C = CfCt */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- break;
- case GL_RGB:
- case GL_LUMINANCE:
- combine |= (COLOR_COMB_MODULATE | /* C = CfCt */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- break;
- case GL_ALPHA:
- combine |= (COLOR_COMB_COPY_INPUT | /* C = Cf */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- break;
- case GL_COLOR_INDEX:
- default:
- return GL_FALSE;
- }
- break;
-
- case GL_DECAL:
- switch ( format ) {
- case GL_RGBA:
- combine |= (COLOR_COMB_BLEND_TEX | /* C = Cf(1-At)+CtAt */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- break;
- case GL_RGB:
- combine |= (COLOR_COMB_DISABLE | /* C = Ct */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- break;
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- /* Undefined behaviour - just copy the incoming fragment */
- combine |= (COLOR_COMB_COPY_INPUT | /* C = undefined */
- ALPHA_COMB_COPY_INPUT); /* A = undefined */
- break;
- case GL_COLOR_INDEX:
- default:
- return GL_FALSE;
- }
- break;
-
- case GL_BLEND:
- /* Rage 128 Pro and M3 can handle GL_BLEND texturing.
- */
- if ( !R128_IS_PLAIN( rmesa ) ) {
- /* XXX this hasn't been fully tested, I don't have a Pro card. -BP */
- switch ( format ) {
- case GL_RGBA:
- case GL_LUMINANCE_ALPHA:
- combine |= (COLOR_COMB_BLEND_COLOR | /* C = Cf(1-Ct)+CcCt */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- break;
-
- case GL_RGB:
- case GL_LUMINANCE:
- combine |= (COLOR_COMB_BLEND_COLOR | /* C = Cf(1-Ct)+CcCt */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- break;
-
- case GL_ALPHA:
- combine |= (COLOR_COMB_COPY_INPUT | /* C = Cf */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- break;
-
- case GL_INTENSITY:
- /* GH: We could be smarter about this... */
- switch ( rmesa->env_color & 0xff000000 ) {
- case 0x00000000:
- combine |= (COLOR_COMB_BLEND_COLOR | /* C = Cf(1-It)+CcIt */
- ALPHA_COMB_MODULATE_NTEX); /* A = Af(1-It) */
- default:
- combine |= (COLOR_COMB_MODULATE | /* C = fallback */
- ALPHA_COMB_MODULATE); /* A = fallback */
- return GL_FALSE;
- }
- break;
-
- case GL_COLOR_INDEX:
- default:
- return GL_FALSE;
- }
- break;
- }
-
- /* Rage 128 has to fake some cases of GL_BLEND, otherwise fallback
- * to software rendering.
- */
- if ( rmesa->blend_flags ) {
- return GL_FALSE;
- }
- switch ( format ) {
- case GL_RGBA:
- case GL_LUMINANCE_ALPHA:
- switch ( rmesa->env_color & 0x00ffffff ) {
- case 0x00000000:
- combine |= (COLOR_COMB_MODULATE_NTEX | /* C = Cf(1-Ct) */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- break;
-#if 0
- /* This isn't right - BP */
- case 0x00ffffff:
- if ( unit == 0 ) {
- combine |= (COLOR_COMB_MODULATE_NTEX | /* C = Cf(1-Ct) */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- } else {
- combine |= (COLOR_COMB_ADD | /* C = Cf+Ct */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- }
- break;
-#endif
- default:
- combine |= (COLOR_COMB_MODULATE | /* C = fallback */
- ALPHA_COMB_MODULATE); /* A = fallback */
- return GL_FALSE;
- }
- break;
- case GL_RGB:
- case GL_LUMINANCE:
- switch ( rmesa->env_color & 0x00ffffff ) {
- case 0x00000000:
- combine |= (COLOR_COMB_MODULATE_NTEX | /* C = Cf(1-Ct) */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- break;
-#if 0
- /* This isn't right - BP */
- case 0x00ffffff:
- if ( unit == 0 ) {
- combine |= (COLOR_COMB_MODULATE_NTEX | /* C = Cf(1-Ct) */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- } else {
- combine |= (COLOR_COMB_ADD | /* C = Cf+Ct */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- }
- break;
-#endif
- default:
- combine |= (COLOR_COMB_MODULATE | /* C = fallback */
- ALPHA_COMB_COPY_INPUT); /* A = fallback */
- return GL_FALSE;
- }
- break;
- case GL_ALPHA:
- if ( unit == 0 ) {
- combine |= (COLOR_COMB_COPY_INPUT | /* C = Cf */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- } else {
- combine |= (COLOR_COMB_COPY_INPUT | /* C = Cf */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- }
- break;
- case GL_INTENSITY:
- switch ( rmesa->env_color & 0x00ffffff ) {
- case 0x00000000:
- combine |= COLOR_COMB_MODULATE_NTEX; /* C = Cf(1-It) */
- break;
-#if 0
- /* This isn't right - BP */
- case 0x00ffffff:
- if ( unit == 0 ) {
- combine |= COLOR_COMB_MODULATE_NTEX; /* C = Cf(1-It) */
- } else {
- combine |= COLOR_COMB_ADD; /* C = Cf+It */
- }
- break;
-#endif
- default:
- combine |= (COLOR_COMB_MODULATE | /* C = fallback */
- ALPHA_COMB_MODULATE); /* A = fallback */
- return GL_FALSE;
- }
- switch ( rmesa->env_color & 0xff000000 ) {
- case 0x00000000:
- combine |= ALPHA_COMB_MODULATE_NTEX; /* A = Af(1-It) */
- break;
-#if 0
- /* This isn't right - BP */
- case 0xff000000:
- if ( unit == 0 ) {
- combine |= ALPHA_COMB_MODULATE_NTEX; /* A = Af(1-It) */
- } else {
- combine |= ALPHA_COMB_ADD; /* A = Af+It */
- }
- break;
-#endif
- default:
- combine |= (COLOR_COMB_MODULATE | /* C = fallback */
- ALPHA_COMB_MODULATE); /* A = fallback */
- return GL_FALSE;
- }
- break;
- case GL_COLOR_INDEX:
- default:
- return GL_FALSE;
- }
- break;
-
- case GL_ADD:
- switch ( format ) {
- case GL_RGBA:
- case GL_LUMINANCE_ALPHA:
- combine |= (COLOR_COMB_ADD | /* C = Cf+Ct */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- break;
- case GL_RGB:
- case GL_LUMINANCE:
- combine |= (COLOR_COMB_ADD | /* C = Cf+Ct */
- ALPHA_COMB_COPY_INPUT); /* A = Af */
- break;
- case GL_ALPHA:
- combine |= (COLOR_COMB_COPY_INPUT | /* C = Cf */
- ALPHA_COMB_MODULATE); /* A = AfAt */
- break;
- case GL_INTENSITY:
- combine |= (COLOR_COMB_ADD | /* C = Cf+Ct */
- ALPHA_COMB_ADD); /* A = Af+At */
- break;
- case GL_COLOR_INDEX:
- default:
- return GL_FALSE;
- }
- break;
-
- default:
- return GL_FALSE;
- }
-
- if ( rmesa->tex_combine[unit] != combine ) {
- rmesa->tex_combine[unit] = combine;
- rmesa->dirty |= R128_UPLOAD_TEX0 << unit;
- }
- return GL_TRUE;
-}
-
-static void disable_tex( struct gl_context *ctx, int unit )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- FLUSH_BATCH( rmesa );
-
- if ( rmesa->CurrentTexObj[unit] ) {
- rmesa->CurrentTexObj[unit]->base.bound &= ~(1 << unit);
- rmesa->CurrentTexObj[unit] = NULL;
- }
-
- rmesa->setup.tex_cntl_c &= ~(R128_TEXMAP_ENABLE << unit);
- rmesa->setup.tex_size_pitch_c &= ~(R128_TEX_SIZE_PITCH_MASK <<
- (R128_SEC_TEX_SIZE_PITCH_SHIFT * unit));
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
-
- /* If either texture unit is disabled, then multitexturing is not
- * happening.
- */
-
- rmesa->blend_flags &= ~R128_BLEND_MULTITEX;
-}
-
-static GLboolean enable_tex_2d( struct gl_context *ctx, int unit )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- const int source = rmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- const struct gl_texture_object *tObj = texUnit->_Current;
- r128TexObjPtr t = (r128TexObjPtr) tObj->DriverData;
-
- /* Need to load the 2d images associated with this unit.
- */
- if ( t->base.dirty_images[0] ) {
- /* FIXME: For Radeon, RADEON_FIREVERTICES is called here. Should
- * FIXME: something similar be done for R128?
- */
- /* FLUSH_BATCH( rmesa ); */
-
- r128SetTexImages( rmesa, tObj );
- r128UploadTexImages( rmesa, t );
- if ( !t->base.memBlock )
- return GL_FALSE;
- }
-
- return GL_TRUE;
-}
-
-static GLboolean update_tex_common( struct gl_context *ctx, int unit )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- const int source = rmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
- const struct gl_texture_object *tObj = texUnit->_Current;
- r128TexObjPtr t = (r128TexObjPtr) tObj->DriverData;
-
-
- /* Fallback if there's a texture border */
- if ( tObj->Image[0][tObj->BaseLevel]->Border > 0 ) {
- return GL_FALSE;
- }
-
-
- /* Update state if this is a different texture object to last
- * time.
- */
- if ( rmesa->CurrentTexObj[unit] != t ) {
- if ( rmesa->CurrentTexObj[unit] != NULL ) {
- /* The old texture is no longer bound to this texture unit.
- * Mark it as such.
- */
-
- rmesa->CurrentTexObj[unit]->base.bound &=
- ~(1UL << unit);
- }
-
- rmesa->CurrentTexObj[unit] = t;
- t->base.bound |= (1UL << unit);
- rmesa->dirty |= R128_UPLOAD_TEX0 << unit;
-
- driUpdateTextureLRU( (driTextureObject *) t ); /* XXX: should be locked! */
- }
-
- /* FIXME: We need to update the texture unit if any texture parameters have
- * changed, but this texture was already bound. This could be changed to
- * work like the Radeon driver where the texture object has it's own
- * dirty state flags
- */
- rmesa->dirty |= R128_UPLOAD_TEX0 << unit;
-
- /* register setup */
- rmesa->setup.tex_size_pitch_c &= ~(R128_TEX_SIZE_PITCH_MASK <<
- (R128_SEC_TEX_SIZE_PITCH_SHIFT * unit));
-
- if ( unit == 0 ) {
- rmesa->setup.tex_cntl_c |= R128_TEXMAP_ENABLE;
- rmesa->setup.tex_size_pitch_c |= t->setup.tex_size_pitch << 0;
- rmesa->setup.scale_3d_cntl &= ~R128_TEX_CACHE_SPLIT;
- t->setup.tex_cntl &= ~R128_SEC_SELECT_SEC_ST;
- }
- else {
- rmesa->setup.tex_cntl_c |= R128_SEC_TEXMAP_ENABLE;
- rmesa->setup.tex_size_pitch_c |= t->setup.tex_size_pitch << 16;
- rmesa->setup.scale_3d_cntl |= R128_TEX_CACHE_SPLIT;
- t->setup.tex_cntl |= R128_SEC_SELECT_SEC_ST;
-
- /* If the second TMU is enabled, then multitexturing is happening.
- */
- if ( R128_IS_PLAIN( rmesa ) )
- rmesa->blend_flags |= R128_BLEND_MULTITEX;
- }
-
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
-
-
- /* FIXME: The Radeon has some cached state so that it can avoid calling
- * FIXME: UpdateTextureEnv in some cases. Is that possible here?
- */
- return r128UpdateTextureEnv( ctx, unit );
-}
-
-static GLboolean updateTextureUnit( struct gl_context *ctx, int unit )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- const int source = rmesa->tmu_source[unit];
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
-
-
- if (texUnit->_ReallyEnabled & (TEXTURE_1D_BIT | TEXTURE_2D_BIT)) {
- return (enable_tex_2d( ctx, unit ) &&
- update_tex_common( ctx, unit ));
- }
- else if ( texUnit->_ReallyEnabled ) {
- return GL_FALSE;
- }
- else {
- disable_tex( ctx, unit );
- return GL_TRUE;
- }
-}
-
-
-void r128UpdateTextureState( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLboolean ok;
-
-
- /* This works around a quirk with the R128 hardware. If only OpenGL
- * TEXTURE1 is enabled, then the hardware TEXTURE0 must be used. The
- * hardware TEXTURE1 can ONLY be used when hardware TEXTURE0 is also used.
- */
-
- rmesa->tmu_source[0] = 0;
- rmesa->tmu_source[1] = 1;
-
- if ((ctx->Texture._EnabledUnits & 0x03) == 0x02) {
- /* only texture 1 enabled */
- rmesa->tmu_source[0] = 1;
- rmesa->tmu_source[1] = 0;
- }
-
- ok = (updateTextureUnit( ctx, 0 ) &&
- updateTextureUnit( ctx, 1 ));
-
- FALLBACK( rmesa, R128_FALLBACK_TEXTURE, !ok );
-}
diff --git a/src/mesa/drivers/dri/r128/r128_tris.c b/src/mesa/drivers/dri/r128/r128_tris.c
deleted file mode 100644
index 92c8a4eb6b8..00000000000
--- a/src/mesa/drivers/dri/r128/r128_tris.c
+++ /dev/null
@@ -1,797 +0,0 @@
-/* -*- c-basic-offset: 3 -*- */
-/**************************************************************************
-
-Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
- VA Linux Systems Inc., Fremont, California.
-
-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
-on 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
-ATI, VA LINUX SYSTEMS AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell
- *
- */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-#include "r128_tris.h"
-#include "r128_state.h"
-#include "r128_tex.h"
-#include "r128_ioctl.h"
-
-static const GLuint hw_prim[GL_POLYGON+1] = {
- R128_CCE_VC_CNTL_PRIM_TYPE_POINT,
- R128_CCE_VC_CNTL_PRIM_TYPE_LINE,
- R128_CCE_VC_CNTL_PRIM_TYPE_LINE,
- R128_CCE_VC_CNTL_PRIM_TYPE_LINE,
- R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST,
- R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST,
- R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST,
- R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST,
- R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST,
- R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST,
-};
-
-static void r128RasterPrimitive( struct gl_context *ctx, GLuint hwprim );
-static void r128RenderPrimitive( struct gl_context *ctx, GLenum prim );
-
-
-/***********************************************************************
- * Emit primitives as inline vertices *
- ***********************************************************************/
-
-#define HAVE_QUADS 0
-#define HAVE_LINES 1
-#define HAVE_POINTS 1
-#define HAVE_LE32_VERTS 1
-#define CTX_ARG r128ContextPtr rmesa
-#define GET_VERTEX_DWORDS() rmesa->vertex_size
-#define ALLOC_VERTS( n, size ) r128AllocDmaLow( rmesa, (n), (size) * 4 )
-#undef LOCAL_VARS
-#define LOCAL_VARS \
- r128ContextPtr rmesa = R128_CONTEXT(ctx); \
- const char *vertptr = rmesa->verts;
-#define VERT(x) (r128Vertex *)(vertptr + ((x) * vertsize * 4))
-#define VERTEX r128Vertex
-#undef TAG
-#define TAG(x) r128_##x
-#include "tnl_dd/t_dd_triemit.h"
-#undef TAG
-#undef LOCAL_VARS
-
-
-/***********************************************************************
- * Macros for t_dd_tritmp.h to draw basic primitives *
- ***********************************************************************/
-
-#define TRI( a, b, c ) \
-do { \
- if (DO_FALLBACK) \
- rmesa->draw_tri( rmesa, a, b, c ); \
- else \
- r128_triangle( rmesa, a, b, c ); \
-} while (0)
-
-#define QUAD( a, b, c, d ) \
-do { \
- if (DO_FALLBACK) { \
- rmesa->draw_tri( rmesa, a, b, d ); \
- rmesa->draw_tri( rmesa, b, c, d ); \
- } else \
- r128_quad( rmesa, a, b, c, d ); \
-} while (0)
-
-#define LINE( v0, v1 ) \
-do { \
- if (DO_FALLBACK) \
- rmesa->draw_line( rmesa, v0, v1 ); \
- else \
- r128_line( rmesa, v0, v1 ); \
-} while (0)
-
-#define POINT( v0 ) \
-do { \
- if (DO_FALLBACK) \
- rmesa->draw_point( rmesa, v0 ); \
- else \
- r128_point( rmesa, v0 ); \
-} while (0)
-
-
-/***********************************************************************
- * Build render functions from dd templates *
- ***********************************************************************/
-
-#define R128_OFFSET_BIT 0x01
-#define R128_TWOSIDE_BIT 0x02
-#define R128_UNFILLED_BIT 0x04
-#define R128_FALLBACK_BIT 0x08
-#define R128_MAX_TRIFUNC 0x10
-
-
-static struct {
- tnl_points_func points;
- tnl_line_func line;
- tnl_triangle_func triangle;
- tnl_quad_func quad;
-} rast_tab[R128_MAX_TRIFUNC];
-
-
-#define DO_FALLBACK (IND & R128_FALLBACK_BIT)
-#define DO_OFFSET (IND & R128_OFFSET_BIT)
-#define DO_UNFILLED (IND & R128_UNFILLED_BIT)
-#define DO_TWOSIDE (IND & R128_TWOSIDE_BIT)
-#define DO_FLAT 0
-#define DO_TRI 1
-#define DO_QUAD 1
-#define DO_LINE 1
-#define DO_POINTS 1
-#define DO_FULL_QUAD 1
-
-#define HAVE_SPEC 1
-#define HAVE_BACK_COLORS 0
-#define HAVE_HW_FLATSHADE 1
-#define VERTEX r128Vertex
-#define TAB rast_tab
-
-#define DEPTH_SCALE rmesa->depth_scale
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) _v->v.x
-#define VERT_Y(_v) _v->v.y
-#define VERT_Z(_v) _v->v.z
-#define AREA_IS_CCW( a ) (a > 0)
-#define GET_VERTEX(e) (rmesa->verts + (e * rmesa->vertex_size * sizeof(int)))
-
-#define VERT_SET_RGBA( v, c ) \
-do { \
- r128_color_t *color = (r128_color_t *)&((v)->ui[coloroffset]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->blue, (c)[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->alpha, (c)[3]); \
-} while (0)
-
-#define VERT_COPY_RGBA( v0, v1 ) v0->ui[coloroffset] = v1->ui[coloroffset]
-
-#define VERT_SET_SPEC( v0, c ) \
-do { \
- if (havespec) { \
- r128_color_t *spec = (r128_color_t *)&((v0)->ui[specoffset]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->blue, (c)[2]); \
- } \
-} while (0)
-#define VERT_COPY_SPEC( v0, v1 ) \
-do { \
- if (havespec) { \
- r128_color_t *spec0 = (r128_color_t *)&((v0)->ui[specoffset]); \
- r128_color_t *spec1 = (r128_color_t *)&((v1)->ui[specoffset]); \
- spec0->red = spec1->red; \
- spec0->green = spec1->green; \
- spec0->blue = spec1->blue; \
- } \
-} while (0)
-
-/* These don't need LE32_TO_CPU() as they are used to save and restore
- * colors which are already in the correct format.
- */
-#define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[coloroffset]
-#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[coloroffset] = color[idx]
-#define VERT_SAVE_SPEC( idx ) if (havespec) spec[idx] = v[idx]->ui[specoffset]
-#define VERT_RESTORE_SPEC( idx ) if (havespec) v[idx]->ui[specoffset] = spec[idx]
-
-
-#define LOCAL_VARS(n) \
- r128ContextPtr rmesa = R128_CONTEXT(ctx); \
- GLuint color[n] = { 0 }; \
- GLuint spec[n] = { 0 }; \
- GLuint coloroffset = rmesa->coloroffset; \
- GLuint specoffset = rmesa->specoffset; \
- GLboolean havespec = (rmesa->specoffset != 0); \
- (void) color; (void) spec; (void) specoffset; \
- (void) coloroffset; (void) havespec;
-
-/***********************************************************************
- * Helpers for rendering unfilled primitives *
- ***********************************************************************/
-
-#define RASTERIZE(x) if (rmesa->hw_primitive != hw_prim[x]) \
- r128RasterPrimitive( ctx, hw_prim[x] )
-#define RENDER_PRIMITIVE rmesa->render_primitive
-#define IND R128_FALLBACK_BIT
-#define TAG(x) x
-#include "tnl_dd/t_dd_unfilled.h"
-#undef IND
-
-
-/***********************************************************************
- * Generate GL render functions *
- ***********************************************************************/
-
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_TWOSIDE_BIT|R128_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_OFFSET_BIT|R128_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_TWOSIDE_BIT|R128_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_TWOSIDE_BIT|R128_OFFSET_BIT|R128_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_FALLBACK_BIT)
-#define TAG(x) x##_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_OFFSET_BIT|R128_FALLBACK_BIT)
-#define TAG(x) x##_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_TWOSIDE_BIT|R128_FALLBACK_BIT)
-#define TAG(x) x##_twoside_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_TWOSIDE_BIT|R128_OFFSET_BIT|R128_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_UNFILLED_BIT|R128_FALLBACK_BIT)
-#define TAG(x) x##_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_OFFSET_BIT|R128_UNFILLED_BIT|R128_FALLBACK_BIT)
-#define TAG(x) x##_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_TWOSIDE_BIT|R128_UNFILLED_BIT|R128_FALLBACK_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (R128_TWOSIDE_BIT|R128_OFFSET_BIT|R128_UNFILLED_BIT| \
- R128_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-static void init_rast_tab( void )
-{
- init();
- init_offset();
- init_twoside();
- init_twoside_offset();
- init_unfilled();
- init_offset_unfilled();
- init_twoside_unfilled();
- init_twoside_offset_unfilled();
- init_fallback();
- init_offset_fallback();
- init_twoside_fallback();
- init_twoside_offset_fallback();
- init_unfilled_fallback();
- init_offset_unfilled_fallback();
- init_twoside_unfilled_fallback();
- init_twoside_offset_unfilled_fallback();
-}
-
-
-
-/***********************************************************************
- * Rasterization fallback helpers *
- ***********************************************************************/
-
-
-/* This code is hit only when a mix of accelerated and unaccelerated
- * primitives are being drawn, and only for the unaccelerated
- * primitives.
- */
-static void
-r128_fallback_tri( r128ContextPtr rmesa,
- r128Vertex *v0,
- r128Vertex *v1,
- r128Vertex *v2 )
-{
- struct gl_context *ctx = rmesa->glCtx;
- SWvertex v[3];
- _swsetup_Translate( ctx, v0, &v[0] );
- _swsetup_Translate( ctx, v1, &v[1] );
- _swsetup_Translate( ctx, v2, &v[2] );
- _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
-}
-
-
-static void
-r128_fallback_line( r128ContextPtr rmesa,
- r128Vertex *v0,
- r128Vertex *v1 )
-{
- struct gl_context *ctx = rmesa->glCtx;
- SWvertex v[2];
- _swsetup_Translate( ctx, v0, &v[0] );
- _swsetup_Translate( ctx, v1, &v[1] );
- _swrast_Line( ctx, &v[0], &v[1] );
-}
-
-
-static void
-r128_fallback_point( r128ContextPtr rmesa,
- r128Vertex *v0 )
-{
- struct gl_context *ctx = rmesa->glCtx;
- SWvertex v[1];
- _swsetup_Translate( ctx, v0, &v[0] );
- _swrast_Point( ctx, &v[0] );
-}
-
-
-
-/**********************************************************************/
-/* Render unclipped begin/end objects */
-/**********************************************************************/
-
-#define RENDER_POINTS( start, count ) \
- for ( ; start < count ; start++) \
- r128_point( rmesa, VERT(start) )
-#define RENDER_LINE( v0, v1 ) \
- r128_line( rmesa, VERT(v0), VERT(v1) )
-#define RENDER_TRI( v0, v1, v2 ) \
- r128_triangle( rmesa, VERT(v0), VERT(v1), VERT(v2) )
-#define RENDER_QUAD( v0, v1, v2, v3 ) \
- r128_quad( rmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
-#define INIT(x) do { \
- if (0) fprintf(stderr, "%s\n", __FUNCTION__); \
- r128RenderPrimitive( ctx, x ); \
-} while (0)
-#undef LOCAL_VARS
-#define LOCAL_VARS \
- r128ContextPtr rmesa = R128_CONTEXT(ctx); \
- const GLuint vertsize = rmesa->vertex_size; \
- const char *vertptr = (char *)rmesa->verts; \
- const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
- (void) elt;
-#define RESET_STIPPLE
-#define RESET_OCCLUSION
-#define PRESERVE_VB_DEFS
-#define ELT(x) (x)
-#define TAG(x) r128_##x##_verts
-#include "tnl/t_vb_rendertmp.h"
-#undef ELT
-#undef TAG
-#define TAG(x) r128_##x##_elts
-#define ELT(x) elt[x]
-#include "tnl/t_vb_rendertmp.h"
-
-
-/**********************************************************************/
-/* Choose render functions */
-/**********************************************************************/
-
-#define POINT_FALLBACK (DD_POINT_SMOOTH)
-#define LINE_FALLBACK (DD_LINE_STIPPLE)
-#define TRI_FALLBACK (DD_TRI_SMOOTH)
-#define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)
-#define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
-#define _R128_NEW_RENDER_STATE (ANY_FALLBACK_FLAGS | ANY_RASTER_FLAGS)
-
-void r128ChooseRenderState(struct gl_context *ctx)
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint flags = ctx->_TriangleCaps;
- GLuint index = 0;
-
- if (flags & (ANY_RASTER_FLAGS|ANY_FALLBACK_FLAGS)) {
- rmesa->draw_point = r128_point;
- rmesa->draw_line = r128_line;
- rmesa->draw_tri = r128_triangle;
-
- if (flags & ANY_RASTER_FLAGS) {
- if (flags & DD_TRI_LIGHT_TWOSIDE) index |= R128_TWOSIDE_BIT;
- if (flags & DD_TRI_OFFSET) index |= R128_OFFSET_BIT;
- if (flags & DD_TRI_UNFILLED) index |= R128_UNFILLED_BIT;
- }
-
- /* Hook in fallbacks for specific primitives.
- */
- if (flags & (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)) {
- if (flags & POINT_FALLBACK) rmesa->draw_point = r128_fallback_point;
- if (flags & LINE_FALLBACK) rmesa->draw_line = r128_fallback_line;
- if (flags & TRI_FALLBACK) rmesa->draw_tri = r128_fallback_tri;
- index |= R128_FALLBACK_BIT;
- }
- }
-
- if (index != rmesa->RenderIndex) {
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->Driver.Render.Points = rast_tab[index].points;
- tnl->Driver.Render.Line = rast_tab[index].line;
- tnl->Driver.Render.ClippedLine = rast_tab[index].line;
- tnl->Driver.Render.Triangle = rast_tab[index].triangle;
- tnl->Driver.Render.Quad = rast_tab[index].quad;
-
- if (index == 0) {
- tnl->Driver.Render.PrimTabVerts = r128_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = r128_render_tab_elts;
- tnl->Driver.Render.ClippedPolygon = r128_fast_clipped_poly;
- } else {
- tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
- tnl->Driver.Render.ClippedPolygon = _tnl_RenderClippedPolygon;
- }
-
- rmesa->RenderIndex = index;
- }
-}
-
-/**********************************************************************/
-/* Validate state at pipeline start */
-/**********************************************************************/
-
-static void r128RunPipeline( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- if (rmesa->new_state || rmesa->NewGLState & _NEW_TEXTURE)
- r128DDUpdateHWState( ctx );
-
- if (!rmesa->Fallback && rmesa->NewGLState) {
- if (rmesa->NewGLState & _R128_NEW_RENDER_STATE)
- r128ChooseRenderState( ctx );
-
- rmesa->NewGLState = 0;
- }
-
- _tnl_run_pipeline( ctx );
-}
-
-/**********************************************************************/
-/* High level hooks for t_vb_render.c */
-/**********************************************************************/
-
-/* This is called when Mesa switches between rendering triangle
- * primitives (such as GL_POLYGON, GL_QUADS, GL_TRIANGLE_STRIP, etc),
- * and lines, points and bitmaps.
- *
- * As the r128 uses triangles to render lines and points, it is
- * necessary to turn off hardware culling when rendering these
- * primitives.
- */
-
-static void r128RasterPrimitive( struct gl_context *ctx, GLuint hwprim )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- rmesa->setup.dp_gui_master_cntl_c &= ~R128_GMC_BRUSH_NONE;
-
- if ( ctx->Polygon.StippleFlag && hwprim == GL_TRIANGLES ) {
- rmesa->setup.dp_gui_master_cntl_c |= R128_GMC_BRUSH_32x32_MONO_FG_LA;
- }
- else {
- rmesa->setup.dp_gui_master_cntl_c |= R128_GMC_BRUSH_SOLID_COLOR;
- }
-
- rmesa->new_state |= R128_NEW_CONTEXT;
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
-
- if (rmesa->hw_primitive != hwprim) {
- FLUSH_BATCH( rmesa );
- rmesa->hw_primitive = hwprim;
- }
-}
-
-static void r128SetupAntialias( struct gl_context *ctx, GLenum prim )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
-
- GLuint currAA, wantAA;
-
- currAA = (rmesa->setup.pm4_vc_fpu_setup & R128_EDGE_ANTIALIAS) != 0;
- if( prim >= GL_TRIANGLES )
- wantAA = ctx->Polygon.SmoothFlag;
- else if( prim >= GL_LINES )
- wantAA = ctx->Line.SmoothFlag;
- else
- wantAA = 0;
-
- if( wantAA != currAA )
- {
- FLUSH_BATCH( rmesa );
- rmesa->setup.pm4_vc_fpu_setup ^= R128_EDGE_ANTIALIAS;
- rmesa->dirty |= R128_UPLOAD_SETUP;
- }
-}
-
-static void r128RenderPrimitive( struct gl_context *ctx, GLenum prim )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint hw = hw_prim[prim];
- rmesa->render_primitive = prim;
-
- r128SetupAntialias( ctx, prim );
-
- if (prim >= GL_TRIANGLES && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
- return;
- r128RasterPrimitive( ctx, hw );
-}
-
-#define EMIT_ATTR( ATTR, STYLE, VF, SIZE ) \
-do { \
- rmesa->vertex_attrs[rmesa->vertex_attr_count].attrib = (ATTR); \
- rmesa->vertex_attrs[rmesa->vertex_attr_count].format = (STYLE); \
- rmesa->vertex_attr_count++; \
- vc_frmt |= (VF); \
- offset += (SIZE); \
-} while (0)
-
-#define EMIT_PAD( SIZE ) \
-do { \
- rmesa->vertex_attrs[rmesa->vertex_attr_count].attrib = 0; \
- rmesa->vertex_attrs[rmesa->vertex_attr_count].format = EMIT_PAD; \
- rmesa->vertex_attrs[rmesa->vertex_attr_count].offset = (SIZE); \
- rmesa->vertex_attr_count++; \
- offset += (SIZE); \
-} while (0)
-
-static void r128RenderStart( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- DECLARE_RENDERINPUTS(index_bitset);
- GLuint vc_frmt = 0;
- GLboolean fallback_projtex = GL_FALSE;
- GLuint offset = 0;
-
- RENDERINPUTS_COPY( index_bitset, tnl->render_inputs_bitset );
-
- /* Important: */
- VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr;
- rmesa->vertex_attr_count = 0;
- rmesa->specoffset = 0;
-
- /* EMIT_ATTR's must be in order as they tell t_vertex.c how to
- * build up a hardware vertex.
- */
- if (RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_FIRST_TEX, _TNL_LAST_TEX ))
- EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F_VIEWPORT, R128_CCE_VC_FRMT_RHW, 4 );
- else
- EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_3F_VIEWPORT, 0, 3 );
-
- rmesa->coloroffset = offset;
-#if MESA_LITTLE_ENDIAN
- EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA,
- R128_CCE_VC_FRMT_DIFFUSE_ARGB, 4 );
-#else
- EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_ARGB,
- R128_CCE_VC_FRMT_DIFFUSE_ARGB, 4 );
-#endif
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR1 ) ||
- RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_FOG )) {
-#if MESA_LITTLE_ENDIAN
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR1 )) {
- rmesa->specoffset = offset;
- EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR,
- R128_CCE_VC_FRMT_SPEC_FRGB, 3 );
- } else
- EMIT_PAD( 3 );
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_FOG ))
- EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, R128_CCE_VC_FRMT_SPEC_FRGB,
- 1 );
- else
- EMIT_PAD( 1 );
-#else
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_FOG ))
- EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, R128_CCE_VC_FRMT_SPEC_FRGB,
- 1 );
- else
- EMIT_PAD( 1 );
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR1 )) {
- rmesa->specoffset = offset;
- EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB,
- R128_CCE_VC_FRMT_SPEC_FRGB, 3 );
- } else
- EMIT_PAD( 3 );
-#endif
- }
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX(rmesa->tmu_source[0]) )) {
- if ( VB->AttribPtr[_TNL_ATTRIB_TEX0 + rmesa->tmu_source[0]]->size > 2 )
- fallback_projtex = GL_TRUE;
- EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_2F, R128_CCE_VC_FRMT_S_T, 8 );
- }
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX(rmesa->tmu_source[1]) )) {
- if ( VB->AttribPtr[_TNL_ATTRIB_TEX0 + rmesa->tmu_source[1]]->size > 2 )
- fallback_projtex = GL_TRUE;
- EMIT_ATTR( _TNL_ATTRIB_TEX1, EMIT_2F, R128_CCE_VC_FRMT_S2_T2, 8 );
- }
-
- /* projective textures are not supported by the hardware */
- FALLBACK( rmesa, R128_FALLBACK_PROJTEX, fallback_projtex );
-
- /* Only need to change the vertex emit code if there has been a
- * statechange to a TNL index.
- */
- if (!RENDERINPUTS_EQUAL( index_bitset, rmesa->tnl_state_bitset )) {
- FLUSH_BATCH( rmesa );
- rmesa->dirty |= R128_UPLOAD_CONTEXT;
-
- rmesa->vertex_size =
- _tnl_install_attrs( ctx,
- rmesa->vertex_attrs,
- rmesa->vertex_attr_count,
- rmesa->hw_viewport, 0 );
- rmesa->vertex_size >>= 2;
-
- rmesa->vertex_format = vc_frmt;
- }
-}
-
-static void r128RenderFinish( struct gl_context *ctx )
-{
- if (R128_CONTEXT(ctx)->RenderIndex & R128_FALLBACK_BIT)
- _swrast_flush( ctx );
-}
-
-
-/**********************************************************************/
-/* Transition to/from hardware rasterization. */
-/**********************************************************************/
-
-static const char * const fallbackStrings[] = {
- "Texture mode",
- "glDrawBuffer(GL_FRONT_AND_BACK)",
- "glReadBuffer",
- "glEnable(GL_STENCIL) without hw stencil buffer",
- "glRenderMode(selection or feedback)",
- "glLogicOp (mode != GL_COPY)",
- "GL_SEPARATE_SPECULAR_COLOR",
- "glBlendEquation(mode != ADD)",
- "glBlendFunc",
- "Projective texture",
- "Rasterization disable",
-};
-
-
-static const char *getFallbackString(GLuint bit)
-{
- int i = 0;
- while (bit > 1) {
- i++;
- bit >>= 1;
- }
- return fallbackStrings[i];
-}
-
-void r128Fallback( struct gl_context *ctx, GLuint bit, GLboolean mode )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- GLuint oldfallback = rmesa->Fallback;
-
- if (mode) {
- rmesa->Fallback |= bit;
- if (oldfallback == 0) {
- FLUSH_BATCH( rmesa );
- _swsetup_Wakeup( ctx );
- rmesa->RenderIndex = ~0;
- if ( R128_DEBUG & DEBUG_VERBOSE_FALL ) {
- fprintf(stderr, "R128 begin rasterization fallback: 0x%x %s\n",
- bit, getFallbackString(bit));
- }
- }
- }
- else {
- rmesa->Fallback &= ~bit;
- if (oldfallback == bit) {
- _swrast_flush( ctx );
- tnl->Driver.Render.Start = r128RenderStart;
- tnl->Driver.Render.PrimitiveNotify = r128RenderPrimitive;
- tnl->Driver.Render.Finish = r128RenderFinish;
-
- tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
- tnl->Driver.Render.CopyPV = _tnl_copy_pv;
- tnl->Driver.Render.Interp = _tnl_interp;
-
- _tnl_invalidate_vertex_state( ctx, ~0 );
- _tnl_invalidate_vertices( ctx, ~0 );
- _tnl_install_attrs( ctx,
- rmesa->vertex_attrs,
- rmesa->vertex_attr_count,
- rmesa->hw_viewport, 0 );
-
- rmesa->NewGLState |= _R128_NEW_RENDER_STATE;
- if ( R128_DEBUG & DEBUG_VERBOSE_FALL ) {
- fprintf(stderr, "R128 end rasterization fallback: 0x%x %s\n",
- bit, getFallbackString(bit));
- }
- }
- }
-}
-
-
-/**********************************************************************/
-/* Initialization. */
-/**********************************************************************/
-
-void r128InitTriFuncs( struct gl_context *ctx )
-{
- r128ContextPtr rmesa = R128_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- static int firsttime = 1;
-
- if (firsttime) {
- init_rast_tab();
- firsttime = 0;
- }
-
- tnl->Driver.RunPipeline = r128RunPipeline;
- tnl->Driver.Render.Start = r128RenderStart;
- tnl->Driver.Render.Finish = r128RenderFinish;
- tnl->Driver.Render.PrimitiveNotify = r128RenderPrimitive;
- tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
- tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
- tnl->Driver.Render.CopyPV = _tnl_copy_pv;
- tnl->Driver.Render.Interp = _tnl_interp;
-
- _tnl_init_vertices( ctx, ctx->Const.MaxArrayLockSize + 12,
- (6 + 2 * ctx->Const.MaxTextureUnits) * sizeof(GLfloat) );
- rmesa->verts = (char *)tnl->clipspace.vertex_buf;
- RENDERINPUTS_ONES( rmesa->tnl_state_bitset );
-
- rmesa->NewGLState |= _R128_NEW_RENDER_STATE;
-}
diff --git a/src/mesa/drivers/dri/r128/r128_tris.h b/src/mesa/drivers/dri/r128/r128_tris.h
deleted file mode 100644
index a1394977656..00000000000
--- a/src/mesa/drivers/dri/r128/r128_tris.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**************************************************************************
-
-Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
- VA Linux Systems Inc., Fremont, California.
-
-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
-on 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
-ATI, VA LINUX SYSTEMS AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell
- *
- */
-
-#ifndef __R128_TRIS_H__
-#define __R128_TRIS_H__
-
-#include "main/mtypes.h"
-
-extern void r128InitTriFuncs( struct gl_context *ctx );
-extern void r128ChooseRenderState( struct gl_context *ctx );
-
-extern void r128Fallback( struct gl_context *ctx, GLuint bit, GLboolean mode );
-#define FALLBACK( rmesa, bit, mode ) r128Fallback( rmesa->glCtx, bit, mode )
-
-
-#endif /* __R128_TRIS_H__ */
diff --git a/src/mesa/drivers/dri/r128/server/pci_ids.h b/src/mesa/drivers/dri/r128/server/pci_ids.h
deleted file mode 100644
index fe8b0878748..00000000000
--- a/src/mesa/drivers/dri/r128/server/pci_ids.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Rage128 M3 */
-#define PCI_DEVICE_ID_ATI_RAGE128_LE 0x4c45
-#define PCI_DEVICE_ID_ATI_RAGE128_LF 0x4c46
-/* Rage128 M4 */
-#define PCI_DEVICE_ID_ATI_RAGE128_MF 0x4d46
-#define PCI_DEVICE_ID_ATI_RAGE128_ML 0x4d4c
-/* Rage128 Pro GL */
-#define PCI_DEVICE_ID_ATI_RAGE128_PA 0x5041
-#define PCI_DEVICE_ID_ATI_RAGE128_PB 0x5042
-#define PCI_DEVICE_ID_ATI_RAGE128_PC 0x5043
-#define PCI_DEVICE_ID_ATI_RAGE128_PD 0x5044
-#define PCI_DEVICE_ID_ATI_RAGE128_PE 0x5045
-#define PCI_DEVICE_ID_ATI_RAGE128_PF 0x5046
-/* Rage128 Pro VR */
-#define PCI_DEVICE_ID_ATI_RAGE128_PG 0x5047
-#define PCI_DEVICE_ID_ATI_RAGE128_PH 0x5048
-#define PCI_DEVICE_ID_ATI_RAGE128_PI 0x5049
-#define PCI_DEVICE_ID_ATI_RAGE128_PJ 0x504A
-#define PCI_DEVICE_ID_ATI_RAGE128_PK 0x504B
-#define PCI_DEVICE_ID_ATI_RAGE128_PL 0x504C
-#define PCI_DEVICE_ID_ATI_RAGE128_PM 0x504D
-#define PCI_DEVICE_ID_ATI_RAGE128_PN 0x504E
-#define PCI_DEVICE_ID_ATI_RAGE128_PO 0x504F
-#define PCI_DEVICE_ID_ATI_RAGE128_PP 0x5050
-#define PCI_DEVICE_ID_ATI_RAGE128_PQ 0x5051
-#define PCI_DEVICE_ID_ATI_RAGE128_PR 0x5052
-#define PCI_DEVICE_ID_ATI_RAGE128_TR 0x5452
-#define PCI_DEVICE_ID_ATI_RAGE128_PS 0x5053
-#define PCI_DEVICE_ID_ATI_RAGE128_PT 0x5054
-#define PCI_DEVICE_ID_ATI_RAGE128_PU 0x5055
-#define PCI_DEVICE_ID_ATI_RAGE128_PV 0x5056
-#define PCI_DEVICE_ID_ATI_RAGE128_PW 0x5057
-#define PCI_DEVICE_ID_ATI_RAGE128_PX 0x5058
-/* Rage128 GL */
-#define PCI_DEVICE_ID_ATI_RAGE128_RE 0x5245
-#define PCI_DEVICE_ID_ATI_RAGE128_RF 0x5246
-/* Rage128 VR */
-#define PCI_DEVICE_ID_ATI_RAGE128_RE 0x5245
-#define PCI_DEVICE_ID_ATI_RAGE128_RF 0x5246
-#define PCI_DEVICE_ID_ATI_RAGE128_RG 0x5247
-#define PCI_DEVICE_ID_ATI_RAGE128_RK 0x524b
-#define PCI_DEVICE_ID_ATI_RAGE128_RL 0x524c
-#define PCI_DEVICE_ID_ATI_RAGE128_SE 0x5345
-#define PCI_DEVICE_ID_ATI_RAGE128_SF 0x5346
-#define PCI_DEVICE_ID_ATI_RAGE128_SG 0x5347
-#define PCI_DEVICE_ID_ATI_RAGE128_SH 0x5348
-#define PCI_DEVICE_ID_ATI_RAGE128_SK 0x534b
-#define PCI_DEVICE_ID_ATI_RAGE128_SL 0x534c
-#define PCI_DEVICE_ID_ATI_RAGE128_SM 0x534d
-#define PCI_DEVICE_ID_ATI_RAGE128_SN 0x534e
-/* Rage128 Pro Ultra */
-#define PCI_DEVICE_ID_ATI_RAGE128_TF 0x5446
-#define PCI_DEVICE_ID_ATI_RAGE128_TL 0x544C
-#define PCI_DEVICE_ID_ATI_RAGE128_TR 0x5452
-#define PCI_DEVICE_ID_ATI_RAGE128_TS 0x5453
-#define PCI_DEVICE_ID_ATI_RAGE128_TT 0x5454
-#define PCI_DEVICE_ID_ATI_RAGE128_TU 0x5455
diff --git a/src/mesa/drivers/dri/r128/server/r128.h b/src/mesa/drivers/dri/r128/server/r128.h
deleted file mode 100644
index 413c7c66908..00000000000
--- a/src/mesa/drivers/dri/r128/server/r128.h
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- * Precision Insight, Inc., Cedar Park, Texas, and
- * VA Linux Systems Inc., Fremont, California.
- *
- * 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 on 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
- * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR 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.
- */
-
-/*
- * Authors:
- * Rickard E. Faith
- * Kevin E. Martin
- *
- */
-
-#ifndef _R128_H_
-#define _R128_H_
-
-#include "dri_util.h"
-
-#define R128_DEBUG 0 /* Turn off debugging output */
-#define R128_IDLE_RETRY 32 /* Fall out of idle loops after this count */
-#define R128_TIMEOUT 2000000 /* Fall out of wait loops after this count */
-#define R128_MMIOSIZE 0x4000
-
-#define R128_VBIOS_SIZE 0x00010000
-
-#if R128_DEBUG
-#define R128TRACE(x) \
- do { \
- ErrorF("(**) %s(%d): ", R128_NAME, pScrn->scrnIndex); \
- ErrorF x; \
- } while (0);
-#else
-#define R128TRACE(x)
-#endif
-
-
-/* Other macros */
-#define R128_ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
-#define R128_ALIGN(x,bytes) (((x) + ((bytes) - 1)) & ~((bytes) - 1))
-#define R128PTR(pScrn) ((R128InfoPtr)(pScrn)->driverPrivate)
-
-/**
- * \brief Chip families.
- */
-typedef enum {
- CHIP_FAMILY_UNKNOWN,
- CHIP_FAMILY_R128_PCI,
- CHIP_FAMILY_R128_AGP,
-} R128ChipFamily;
-
-typedef struct { /* All values in XCLKS */
- int ML; /* Memory Read Latency */
- int MB; /* Memory Burst Length */
- int Trcd; /* RAS to CAS delay */
- int Trp; /* RAS percentage */
- int Twr; /* Write Recovery */
- int CL; /* CAS Latency */
- int Tr2w; /* Read to Write Delay */
- int Rloop; /* Loop Latency */
- int Rloop_fudge; /* Add to ML to get Rloop */
- char *name;
-} R128RAMRec, *R128RAMPtr;
-
-typedef struct {
- /* Common registers */
- uint32_t ovr_clr;
- uint32_t ovr_wid_left_right;
- uint32_t ovr_wid_top_bottom;
- uint32_t ov0_scale_cntl;
- uint32_t mpp_tb_config;
- uint32_t mpp_gp_config;
- uint32_t subpic_cntl;
- uint32_t viph_control;
- uint32_t i2c_cntl_1;
- uint32_t gen_int_cntl;
- uint32_t cap0_trig_cntl;
- uint32_t cap1_trig_cntl;
- uint32_t bus_cntl;
- uint32_t config_cntl;
-
- /* Other registers to save for VT switches */
- uint32_t dp_datatype;
- uint32_t gen_reset_cntl;
- uint32_t clock_cntl_index;
- uint32_t amcgpio_en_reg;
- uint32_t amcgpio_mask;
-
- /* CRTC registers */
- uint32_t crtc_gen_cntl;
- uint32_t crtc_ext_cntl;
- uint32_t dac_cntl;
- uint32_t crtc_h_total_disp;
- uint32_t crtc_h_sync_strt_wid;
- uint32_t crtc_v_total_disp;
- uint32_t crtc_v_sync_strt_wid;
- uint32_t crtc_offset;
- uint32_t crtc_offset_cntl;
- uint32_t crtc_pitch;
-
- /* CRTC2 registers */
- uint32_t crtc2_gen_cntl;
-
- /* Flat panel registers */
- uint32_t fp_crtc_h_total_disp;
- uint32_t fp_crtc_v_total_disp;
- uint32_t fp_gen_cntl;
- uint32_t fp_h_sync_strt_wid;
- uint32_t fp_horz_stretch;
- uint32_t fp_panel_cntl;
- uint32_t fp_v_sync_strt_wid;
- uint32_t fp_vert_stretch;
- uint32_t lvds_gen_cntl;
- uint32_t tmds_crc;
- uint32_t tmds_transmitter_cntl;
-
- /* Computed values for PLL */
- uint32_t dot_clock_freq;
- uint32_t pll_output_freq;
- int feedback_div;
- int post_div;
-
- /* PLL registers */
- uint32_t ppll_ref_div;
- uint32_t ppll_div_3;
- uint32_t htotal_cntl;
-
- /* DDA register */
- uint32_t dda_config;
- uint32_t dda_on_off;
-
- /* Pallet */
- GLboolean palette_valid;
- uint32_t palette[256];
-} R128SaveRec, *R128SavePtr;
-
-typedef struct {
- int Chipset;
- GLboolean Primary;
-
- GLboolean FBDev;
-
- unsigned long LinearAddr; /* Frame buffer physical address */
- unsigned long BIOSAddr; /* BIOS physical address */
-
- unsigned char *MMIO; /* Map of MMIO region */
- unsigned char *FB; /* Map of frame buffer */
-
- uint32_t MemCntl;
- uint32_t BusCntl;
- unsigned long FbMapSize; /* Size of frame buffer, in bytes */
- int Flags; /* Saved copy of mode flags */
-
- /* Computed values for FPs */
- int PanelXRes;
- int PanelYRes;
- int HOverPlus;
- int HSyncWidth;
- int HBlank;
- int VOverPlus;
- int VSyncWidth;
- int VBlank;
- int PanelPwrDly;
-
- unsigned long cursor_start;
- unsigned long cursor_end;
-
- /*
- * XAAForceTransBlit is used to change the behavior of the XAA
- * SetupForScreenToScreenCopy function, to make it DGA-friendly.
- */
- GLboolean XAAForceTransBlit;
-
- int fifo_slots; /* Free slots in the FIFO (64 max) */
- int pix24bpp; /* Depth of pixmap for 24bpp framebuffer */
- GLboolean dac6bits; /* Use 6 bit DAC? */
-
- /* Computed values for Rage 128 */
- int pitch;
- int datatype;
- uint32_t dp_gui_master_cntl;
-
- /* Saved values for ScreenToScreenCopy */
- int xdir;
- int ydir;
-
- /* ScanlineScreenToScreenColorExpand support */
- unsigned char *scratch_buffer[1];
- unsigned char *scratch_save;
- int scanline_x;
- int scanline_y;
- int scanline_w;
- int scanline_h;
-
- int scanline_hpass;
- int scanline_x1clip;
- int scanline_x2clip;
- int scanline_rop;
- int scanline_fg;
- int scanline_bg;
-
- int scanline_words;
- int scanline_direct;
- int scanline_bpp; /* Only used for ImageWrite */
-
- drm_context_t drmCtx;
-
- drmSize registerSize;
- drm_handle_t registerHandle;
-
- GLboolean IsPCI; /* Current card is a PCI card */
- drmSize pciSize;
- drm_handle_t pciMemHandle;
- unsigned char *PCI; /* Map */
-
- GLboolean allowPageFlip; /* Enable 3d page flipping */
- GLboolean have3DWindows; /* Are there any 3d clients? */
- int drmMinor;
-
- drmSize agpSize;
- drm_handle_t agpMemHandle; /* Handle from drmAgpAlloc */
- unsigned long agpOffset;
- unsigned char *AGP; /* Map */
- int agpMode;
-
- GLboolean CCEInUse; /* CCE is currently active */
- int CCEMode; /* CCE mode that server/clients use */
- int CCEFifoSize; /* Size of the CCE command FIFO */
- GLboolean CCESecure; /* CCE security enabled */
- int CCEusecTimeout; /* CCE timeout in usecs */
-
- /* CCE ring buffer data */
- unsigned long ringStart; /* Offset into AGP space */
- drm_handle_t ringHandle; /* Handle from drmAddMap */
- drmSize ringMapSize; /* Size of map */
- int ringSize; /* Size of ring (in MB) */
- unsigned char *ring; /* Map */
- int ringSizeLog2QW;
-
- unsigned long ringReadOffset; /* Offset into AGP space */
- drm_handle_t ringReadPtrHandle; /* Handle from drmAddMap */
- drmSize ringReadMapSize; /* Size of map */
- unsigned char *ringReadPtr; /* Map */
-
- /* CCE vertex/indirect buffer data */
- unsigned long bufStart; /* Offset into AGP space */
- drm_handle_t bufHandle; /* Handle from drmAddMap */
- drmSize bufMapSize; /* Size of map */
- int bufSize; /* Size of buffers (in MB) */
- unsigned char *buf; /* Map */
- int bufNumBufs; /* Number of buffers */
- drmBufMapPtr buffers; /* Buffer map */
-
- /* CCE AGP Texture data */
- unsigned long agpTexStart; /* Offset into AGP space */
- drm_handle_t agpTexHandle; /* Handle from drmAddMap */
- drmSize agpTexMapSize; /* Size of map */
- int agpTexSize; /* Size of AGP tex space (in MB) */
- unsigned char *agpTex; /* Map */
- int log2AGPTexGran;
-
- /* CCE 2D accleration */
- drmBufPtr indirectBuffer;
- int indirectStart;
-
- /* DRI screen private data */
- int fbX;
- int fbY;
- int backX;
- int backY;
- int depthX;
- int depthY;
-
- int frontOffset;
- int frontPitch;
- int backOffset;
- int backPitch;
- int depthOffset;
- int depthPitch;
- int spanOffset;
- int textureOffset;
- int textureSize;
- int log2TexGran;
-
- /* Saved scissor values */
- uint32_t sc_left;
- uint32_t sc_right;
- uint32_t sc_top;
- uint32_t sc_bottom;
-
- uint32_t re_top_left;
- uint32_t re_width_height;
-
- uint32_t aux_sc_cntl;
-
- int irq;
- uint32_t gen_int_cntl;
-
- GLboolean DMAForXv;
-
-} R128InfoRec, *R128InfoPtr;
-
-#define R128WaitForFifo(pScrn, entries) \
-do { \
- if (info->fifo_slots < entries) R128WaitForFifoFunction(pScrn, entries); \
- info->fifo_slots -= entries; \
-} while (0)
-
-extern void r128WaitForFifoFunction(const DRIDriverContext *ctx, int entries);
-extern void r128WaitForIdle(const DRIDriverContext *ctx);
-
-extern void r128WaitForVerticalSync(const DRIDriverContext *ctx);
-
-extern GLboolean r128AccelInit(const DRIDriverContext *ctx);
-extern void r128EngineInit(const DRIDriverContext *ctx);
-extern GLboolean r128CursorInit(const DRIDriverContext *ctx);
-extern GLboolean r128DGAInit(const DRIDriverContext *ctx);
-
-extern void r128InitVideo(const DRIDriverContext *ctx);
-
-extern GLboolean r128DRIScreenInit(const DRIDriverContext *ctx);
-extern void r128DRICloseScreen(const DRIDriverContext *ctx);
-extern GLboolean r128DRIFinishScreenInit(const DRIDriverContext *ctx);
-
-#define R128CCE_START(ctx, info) \
-do { \
- int _ret = drmCommandNone(ctx->drmFD, DRM_R128_CCE_START); \
- if (_ret) { \
- fprintf(stderr, \
- "%s: CCE start %d\n", __FUNCTION__, _ret); \
- } \
-} while (0)
-
-#define R128CCE_STOP(ctx, info) \
-do { \
- int _ret = R128CCEStop(ctx); \
- if (_ret) { \
- fprintf(stderr, \
- "%s: CCE stop %d\n", __FUNCTION__, _ret); \
- } \
-} while (0)
-
-#define R128CCE_RESET(ctx, info) \
-do { \
- if (info->directRenderingEnabled \
- && R128CCE_USE_RING_BUFFER(info->CCEMode)) { \
- int _ret = drmCommandNone(info->drmFD, DRM_R128_CCE_RESET); \
- if (_ret) { \
- fprintf(stderr, \
- "%s: CCE reset %d\n", __FUNCTION__, _ret); \
- } \
- } \
-} while (0)
-
-
-#define CCE_PACKET0( reg, n ) \
- (R128_CCE_PACKET0 | ((n) << 16) | ((reg) >> 2))
-#define CCE_PACKET1( reg0, reg1 ) \
- (R128_CCE_PACKET1 | (((reg1) >> 2) << 11) | ((reg0) >> 2))
-#define CCE_PACKET2() \
- (R128_CCE_PACKET2)
-#define CCE_PACKET3( pkt, n ) \
- (R128_CCE_PACKET3 | (pkt) | ((n) << 16))
-
-
-#define R128_VERBOSE 0
-
-#define RING_LOCALS uint32_t *__head; int __count;
-
-#define R128CCE_REFRESH(pScrn, info) \
-do { \
- if ( R128_VERBOSE ) { \
- fprintf(stderr, "REFRESH( %d ) in %s\n", \
- !info->CCEInUse , __FUNCTION__ ); \
- } \
- if ( !info->CCEInUse ) { \
- R128CCEWaitForIdle(pScrn); \
- BEGIN_RING( 6 ); \
- OUT_RING_REG( R128_RE_TOP_LEFT, info->re_top_left ); \
- OUT_RING_REG( R128_RE_WIDTH_HEIGHT, info->re_width_height ); \
- OUT_RING_REG( R128_AUX_SC_CNTL, info->aux_sc_cntl ); \
- ADVANCE_RING(); \
- info->CCEInUse = TRUE; \
- } \
-} while (0)
-
-#define BEGIN_RING( n ) do { \
- if ( R128_VERBOSE ) { \
- fprintf(stderr, \
- "BEGIN_RING( %d ) in %s\n", n, __FUNCTION__ ); \
- } \
- if ( !info->indirectBuffer ) { \
- info->indirectBuffer = R128CCEGetBuffer( pScrn ); \
- info->indirectStart = 0; \
- } else if ( (info->indirectBuffer->used + 4*(n)) > \
- info->indirectBuffer->total ) { \
- R128CCEFlushIndirect( pScrn, 1 ); \
- } \
- __head = (pointer)((char *)info->indirectBuffer->address + \
- info->indirectBuffer->used); \
- __count = 0; \
-} while (0)
-
-#define ADVANCE_RING() do { \
- if ( R128_VERBOSE ) { \
- fprintf(stderr, \
- "ADVANCE_RING() used: %d+%d=%d/%d\n", \
- info->indirectBuffer->used - info->indirectStart, \
- __count * sizeof(uint32_t), \
- info->indirectBuffer->used - info->indirectStart + \
- __count * sizeof(uint32_t), \
- info->indirectBuffer->total - info->indirectStart ); \
- } \
- info->indirectBuffer->used += __count * (int)sizeof(uint32_t); \
-} while (0)
-
-#define OUT_RING( x ) do { \
- if ( R128_VERBOSE ) { \
- fprintf(stderr, \
- " OUT_RING( 0x%08x )\n", (unsigned int)(x) ); \
- } \
- MMIO_OUT32(&__head[__count++], 0, (x)); \
-} while (0)
-
-#define OUT_RING_REG( reg, val ) \
-do { \
- OUT_RING( CCE_PACKET0( reg, 0 ) ); \
- OUT_RING( val ); \
-} while (0)
-
-#define FLUSH_RING() \
-do { \
- if ( R128_VERBOSE ) \
- fprintf(stderr, \
- "FLUSH_RING in %s\n", __FUNCTION__ ); \
- if ( info->indirectBuffer ) { \
- R128CCEFlushIndirect( pScrn, 0 ); \
- } \
-} while (0)
-
-
-#endif
diff --git a/src/mesa/drivers/dri/r128/server/r128_dri.h b/src/mesa/drivers/dri/r128/server/r128_dri.h
deleted file mode 100644
index 430e5f580bd..00000000000
--- a/src/mesa/drivers/dri/r128/server/r128_dri.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- * Precision Insight, Inc., Cedar Park, Texas, and
- * VA Linux Systems Inc., Fremont, California.
- *
- * 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 on 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
- * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR 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.
- */
-
-/*
- * Authors:
- * Kevin E. Martin
- * Rickard E. Faith
- * Gareth Hughes
- *
- */
-
-#ifndef _R128_DRI_
-#define _R128_DRI_
-
-#include "xf86drm.h"
-#include "drm.h"
-
-/* DRI Driver defaults */
-#define R128_DEFAULT_CCE_PIO_MODE R128_PM4_64PIO_64VCBM_64INDBM
-#define R128_DEFAULT_CCE_BM_MODE R128_PM4_64BM_64VCBM_64INDBM
-#define R128_DEFAULT_AGP_MODE 1
-#define R128_DEFAULT_AGP_SIZE 8 /* MB (must be a power of 2 and > 4MB) */
-#define R128_DEFAULT_RING_SIZE 1 /* MB (must be page aligned) */
-#define R128_DEFAULT_BUFFER_SIZE 2 /* MB (must be page aligned) */
-#define R128_DEFAULT_AGP_TEX_SIZE 1 /* MB (must be page aligned) */
-
-#define R128_DEFAULT_CCE_TIMEOUT 10000 /* usecs */
-
-#define R128_AGP_MAX_MODE 4
-#define R128_BUFFER_ALIGN 0x00000fff
-
-#define R128_CARD_TYPE_R128 1
-#define R128_CARD_TYPE_R128_PRO 2
-#define R128_CARD_TYPE_R128_MOBILITY 3
-
-#define R128CCE_USE_RING_BUFFER(m) \
-(((m) == R128_PM4_192BM) || \
- ((m) == R128_PM4_128BM_64INDBM) || \
- ((m) == R128_PM4_64BM_128INDBM) || \
- ((m) == R128_PM4_64BM_64VCBM_64INDBM))
-
-typedef struct {
- /* DRI screen private data */
- int deviceID; /* PCI device ID */
- int width; /* Width in pixels of display */
- int height; /* Height in scanlines of display */
- int depth; /* Depth of display (8, 15, 16, 24) */
- int bpp; /* Bit depth of display (8, 16, 24, 32) */
-
- int IsPCI; /* Current card is a PCI card */
- int AGPMode;
-
- int frontOffset; /* Start of front buffer */
- int frontPitch;
- int backOffset; /* Start of shared back buffer */
- int backPitch;
- int depthOffset; /* Start of shared depth buffer */
- int depthPitch;
- int spanOffset; /* Start of scratch spanline */
- int textureOffset;/* Start of texture data in frame buffer */
- int textureSize;
- int log2TexGran;
-
- /* MMIO register data */
- drm_handle_t registerHandle;
- drmSize registerSize;
-
- /* CCE AGP Texture data */
- drm_handle_t agpTexHandle;
- drmSize agpTexMapSize;
- int log2AGPTexGran;
- int agpTexOffset;
- unsigned int sarea_priv_offset;
-} R128DRIRec, *R128DRIPtr;
-
-#endif
diff --git a/src/mesa/drivers/dri/r128/server/r128_macros.h b/src/mesa/drivers/dri/r128/server/r128_macros.h
deleted file mode 100644
index f7b945da93f..00000000000
--- a/src/mesa/drivers/dri/r128/server/r128_macros.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * \file server/R128_macros.h
- * \brief Macros for R128 MMIO operation.
- *
- * \authors Kevin E. Martin
- * \authors Rickard E. Faith
- * \authors Alan Hourihane
- */
-
-/*
- * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
- * VA Linux Systems Inc., Fremont, California.
- *
- * 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 on 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
- * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR
- * THEIR 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.
- */
-
-
-#ifndef _R128_MACROS_H_
-#define _R128_MACROS_H_
-
-
-
-# define MMIO_IN8(base, offset) \
- *(volatile unsigned char *)(((unsigned char*)(base)) + (offset))
-# define MMIO_IN16(base, offset) \
- *(volatile unsigned short *)(void *)(((unsigned char*)(base)) + (offset))
-# define MMIO_IN32(base, offset) \
- *(volatile unsigned int *)(void *)(((unsigned char*)(base)) + (offset))
-# define MMIO_OUT8(base, offset, val) \
- *(volatile unsigned char *)(((unsigned char*)(base)) + (offset)) = (val)
-# define MMIO_OUT16(base, offset, val) \
- *(volatile unsigned short *)(void *)(((unsigned char*)(base)) + (offset)) = (val)
-# define MMIO_OUT32(base, offset, val) \
- *(volatile unsigned int *)(void *)(((unsigned char*)(base)) + (offset)) = (val)
-
-
- /* Memory mapped register access macros */
-#define INREG8(addr) MMIO_IN8(R128MMIO, addr)
-#define INREG16(addr) MMIO_IN16(R128MMIO, addr)
-#define INREG(addr) MMIO_IN32(R128MMIO, addr)
-#define OUTREG8(addr, val) MMIO_OUT8(R128MMIO, addr, val)
-#define OUTREG16(addr, val) MMIO_OUT16(R128MMIO, addr, val)
-#define OUTREG(addr, val) MMIO_OUT32(R128MMIO, addr, val)
-
-#define ADDRREG(addr) ((volatile GLuint *)(pointer)(R128MMIO + (addr)))
-
-
-#define OUTREGP(addr, val, mask) \
-do { \
- GLuint tmp = INREG(addr); \
- tmp &= (mask); \
- tmp |= (val); \
- OUTREG(addr, tmp); \
-} while (0)
-
-#define INPLL(dpy, addr) r128INPLL(dpy, addr)
-
-#define OUTPLL(addr, val) \
-do { \
- OUTREG8(R128_CLOCK_CNTL_INDEX, (((addr) & 0x3f) | \
- R128_PLL_WR_EN)); \
- OUTREG(R128_CLOCK_CNTL_DATA, val); \
-} while (0)
-
-#define OUTPLLP(dpy, addr, val, mask) \
-do { \
- GLuint tmp = INPLL(dpy, addr); \
- tmp &= (mask); \
- tmp |= (val); \
- OUTPLL(addr, tmp); \
-} while (0)
-
-#define OUTPAL_START(idx) \
-do { \
- OUTREG8(R128_PALETTE_INDEX, (idx)); \
-} while (0)
-
-#define OUTPAL_NEXT(r, g, b) \
-do { \
- OUTREG(R128_PALETTE_DATA, ((r) << 16) | ((g) << 8) | (b)); \
-} while (0)
-
-#define OUTPAL_NEXT_CARD32(v) \
-do { \
- OUTREG(R128_PALETTE_DATA, (v & 0x00ffffff)); \
-} while (0)
-
-#define OUTPAL(idx, r, g, b) \
-do { \
- OUTPAL_START((idx)); \
- OUTPAL_NEXT((r), (g), (b)); \
-} while (0)
-
-#define INPAL_START(idx) \
-do { \
- OUTREG(R128_PALETTE_INDEX, (idx) << 16); \
-} while (0)
-
-#define INPAL_NEXT() INREG(R128_PALETTE_DATA)
-
-#define PAL_SELECT(idx) \
-do { \
- if (!idx) { \
- OUTREG(R128_DAC_CNTL2, INREG(R128_DAC_CNTL2) & \
- (GLuint)~R128_DAC2_PALETTE_ACC_CTL); \
- } else { \
- OUTREG(R128_DAC_CNTL2, INREG(R128_DAC_CNTL2) | \
- R128_DAC2_PALETTE_ACC_CTL); \
- } \
-} while (0)
-
-
-#endif
diff --git a/src/mesa/drivers/dri/r128/server/r128_reg.h b/src/mesa/drivers/dri/r128/server/r128_reg.h
deleted file mode 100644
index 50033540b9d..00000000000
--- a/src/mesa/drivers/dri/r128/server/r128_reg.h
+++ /dev/null
@@ -1,1403 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- * Precision Insight, Inc., Cedar Park, Texas, and
- * VA Linux Systems Inc., Fremont, California.
- *
- * 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 on 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
- * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR 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.
- */
-
-/*
- * Authors:
- * Rickard E. Faith
- * Kevin E. Martin
- * Gareth Hughes
- *
- * References:
- *
- * RAGE 128 VR/ RAGE 128 GL Register Reference Manual (Technical
- * Reference Manual P/N RRG-G04100-C Rev. 0.04), ATI Technologies: April
- * 1999.
- *
- * RAGE 128 Software Development Manual (Technical Reference Manual P/N
- * SDK-G04000 Rev. 0.01), ATI Technologies: June 1999.
- *
- */
-
-#ifndef _R128_REG_H_
-#define _R128_REG_H_
-
-#define R128_ADAPTER_ID 0x0f2c /* PCI */
-#define R128_AGP_APER_OFFSET 0x0178
-#define R128_AGP_BASE 0x0170
-#define R128_AGP_CNTL 0x0174
-# define R128_AGP_APER_SIZE_256MB (0x00 << 0)
-# define R128_AGP_APER_SIZE_128MB (0x20 << 0)
-# define R128_AGP_APER_SIZE_64MB (0x30 << 0)
-# define R128_AGP_APER_SIZE_32MB (0x38 << 0)
-# define R128_AGP_APER_SIZE_16MB (0x3c << 0)
-# define R128_AGP_APER_SIZE_8MB (0x3e << 0)
-# define R128_AGP_APER_SIZE_4MB (0x3f << 0)
-# define R128_AGP_APER_SIZE_MASK (0x3f << 0)
-#define R128_AGP_CNTL_B 0x0b44
-#define R128_AGP_COMMAND 0x0f58 /* PCI */
-#define R128_AGP_PLL_CNTL 0x0010 /* PLL */
-#define R128_AGP_STATUS 0x0f54 /* PCI */
-# define R128_AGP_1X_MODE 0x01
-# define R128_AGP_2X_MODE 0x02
-# define R128_AGP_4X_MODE 0x04
-# define R128_AGP_MODE_MASK 0x07
-#define R128_AMCGPIO_A_REG 0x01a0
-#define R128_AMCGPIO_EN_REG 0x01a8
-#define R128_AMCGPIO_MASK 0x0194
-#define R128_AMCGPIO_Y_REG 0x01a4
-#define R128_ATTRDR 0x03c1 /* VGA */
-#define R128_ATTRDW 0x03c0 /* VGA */
-#define R128_ATTRX 0x03c0 /* VGA */
-#define R128_AUX_SC_CNTL 0x1660
-# define R128_AUX1_SC_EN (1 << 0)
-# define R128_AUX1_SC_MODE_OR (0 << 1)
-# define R128_AUX1_SC_MODE_NAND (1 << 1)
-# define R128_AUX2_SC_EN (1 << 2)
-# define R128_AUX2_SC_MODE_OR (0 << 3)
-# define R128_AUX2_SC_MODE_NAND (1 << 3)
-# define R128_AUX3_SC_EN (1 << 4)
-# define R128_AUX3_SC_MODE_OR (0 << 5)
-# define R128_AUX3_SC_MODE_NAND (1 << 5)
-#define R128_AUX1_SC_BOTTOM 0x1670
-#define R128_AUX1_SC_LEFT 0x1664
-#define R128_AUX1_SC_RIGHT 0x1668
-#define R128_AUX1_SC_TOP 0x166c
-#define R128_AUX2_SC_BOTTOM 0x1680
-#define R128_AUX2_SC_LEFT 0x1674
-#define R128_AUX2_SC_RIGHT 0x1678
-#define R128_AUX2_SC_TOP 0x167c
-#define R128_AUX3_SC_BOTTOM 0x1690
-#define R128_AUX3_SC_LEFT 0x1684
-#define R128_AUX3_SC_RIGHT 0x1688
-#define R128_AUX3_SC_TOP 0x168c
-#define R128_AUX_WINDOW_HORZ_CNTL 0x02d8
-#define R128_AUX_WINDOW_VERT_CNTL 0x02dc
-
-#define R128_BASE_CODE 0x0f0b
-#define R128_BIOS_0_SCRATCH 0x0010
-#define R128_BIOS_1_SCRATCH 0x0014
-#define R128_BIOS_2_SCRATCH 0x0018
-#define R128_BIOS_3_SCRATCH 0x001c
-#define R128_BIOS_4_SCRATCH 0x0020
-#define R128_BIOS_5_SCRATCH 0x0024
-# define R128_BIOS_DISPLAY_FP (1 << 0)
-# define R128_BIOS_DISPLAY_CRT (2 << 0)
-# define R128_BIOS_DISPLAY_FP_CRT (3 << 0)
-#define R128_BIOS_6_SCRATCH 0x0028
-#define R128_BIOS_7_SCRATCH 0x002c
-#define R128_BIOS_ROM 0x0f30 /* PCI */
-#define R128_BIST 0x0f0f /* PCI */
-#define R128_BM_CHUNK_0_VAL 0x0a18
-# define R128_BM_PTR_FORCE_TO_PCI (1 << 21)
-# define R128_BM_PM4_RD_FORCE_TO_PCI (1 << 22)
-# define R128_BM_GLOBAL_FORCE_TO_PCI (1 << 23)
-#define R128_BRUSH_DATA0 0x1480
-#define R128_BRUSH_DATA1 0x1484
-#define R128_BRUSH_DATA10 0x14a8
-#define R128_BRUSH_DATA11 0x14ac
-#define R128_BRUSH_DATA12 0x14b0
-#define R128_BRUSH_DATA13 0x14b4
-#define R128_BRUSH_DATA14 0x14b8
-#define R128_BRUSH_DATA15 0x14bc
-#define R128_BRUSH_DATA16 0x14c0
-#define R128_BRUSH_DATA17 0x14c4
-#define R128_BRUSH_DATA18 0x14c8
-#define R128_BRUSH_DATA19 0x14cc
-#define R128_BRUSH_DATA2 0x1488
-#define R128_BRUSH_DATA20 0x14d0
-#define R128_BRUSH_DATA21 0x14d4
-#define R128_BRUSH_DATA22 0x14d8
-#define R128_BRUSH_DATA23 0x14dc
-#define R128_BRUSH_DATA24 0x14e0
-#define R128_BRUSH_DATA25 0x14e4
-#define R128_BRUSH_DATA26 0x14e8
-#define R128_BRUSH_DATA27 0x14ec
-#define R128_BRUSH_DATA28 0x14f0
-#define R128_BRUSH_DATA29 0x14f4
-#define R128_BRUSH_DATA3 0x148c
-#define R128_BRUSH_DATA30 0x14f8
-#define R128_BRUSH_DATA31 0x14fc
-#define R128_BRUSH_DATA32 0x1500
-#define R128_BRUSH_DATA33 0x1504
-#define R128_BRUSH_DATA34 0x1508
-#define R128_BRUSH_DATA35 0x150c
-#define R128_BRUSH_DATA36 0x1510
-#define R128_BRUSH_DATA37 0x1514
-#define R128_BRUSH_DATA38 0x1518
-#define R128_BRUSH_DATA39 0x151c
-#define R128_BRUSH_DATA4 0x1490
-#define R128_BRUSH_DATA40 0x1520
-#define R128_BRUSH_DATA41 0x1524
-#define R128_BRUSH_DATA42 0x1528
-#define R128_BRUSH_DATA43 0x152c
-#define R128_BRUSH_DATA44 0x1530
-#define R128_BRUSH_DATA45 0x1534
-#define R128_BRUSH_DATA46 0x1538
-#define R128_BRUSH_DATA47 0x153c
-#define R128_BRUSH_DATA48 0x1540
-#define R128_BRUSH_DATA49 0x1544
-#define R128_BRUSH_DATA5 0x1494
-#define R128_BRUSH_DATA50 0x1548
-#define R128_BRUSH_DATA51 0x154c
-#define R128_BRUSH_DATA52 0x1550
-#define R128_BRUSH_DATA53 0x1554
-#define R128_BRUSH_DATA54 0x1558
-#define R128_BRUSH_DATA55 0x155c
-#define R128_BRUSH_DATA56 0x1560
-#define R128_BRUSH_DATA57 0x1564
-#define R128_BRUSH_DATA58 0x1568
-#define R128_BRUSH_DATA59 0x156c
-#define R128_BRUSH_DATA6 0x1498
-#define R128_BRUSH_DATA60 0x1570
-#define R128_BRUSH_DATA61 0x1574
-#define R128_BRUSH_DATA62 0x1578
-#define R128_BRUSH_DATA63 0x157c
-#define R128_BRUSH_DATA7 0x149c
-#define R128_BRUSH_DATA8 0x14a0
-#define R128_BRUSH_DATA9 0x14a4
-#define R128_BRUSH_SCALE 0x1470
-#define R128_BRUSH_Y_X 0x1474
-#define R128_BUS_CNTL 0x0030
-# define R128_BUS_MASTER_DIS (1 << 6)
-# define R128_BUS_RD_DISCARD_EN (1 << 24)
-# define R128_BUS_RD_ABORT_EN (1 << 25)
-# define R128_BUS_MSTR_DISCONNECT_EN (1 << 28)
-# define R128_BUS_WRT_BURST (1 << 29)
-# define R128_BUS_READ_BURST (1 << 30)
-#define R128_BUS_CNTL1 0x0034
-# define R128_BUS_WAIT_ON_LOCK_EN (1 << 4)
-
-#define R128_CACHE_CNTL 0x1724
-#define R128_CACHE_LINE 0x0f0c /* PCI */
-#define R128_CAP0_TRIG_CNTL 0x0950 /* ? */
-#define R128_CAP1_TRIG_CNTL 0x09c0 /* ? */
-#define R128_CAPABILITIES_ID 0x0f50 /* PCI */
-#define R128_CAPABILITIES_PTR 0x0f34 /* PCI */
-#define R128_CLK_PIN_CNTL 0x0001 /* PLL */
-#define R128_CLOCK_CNTL_DATA 0x000c
-#define R128_CLOCK_CNTL_INDEX 0x0008
-# define R128_PLL_WR_EN (1 << 7)
-# define R128_PLL_DIV_SEL (3 << 8)
-#define R128_CLR_CMP_CLR_3D 0x1a24
-#define R128_CLR_CMP_CLR_DST 0x15c8
-#define R128_CLR_CMP_CLR_SRC 0x15c4
-#define R128_CLR_CMP_CNTL 0x15c0
-# define R128_SRC_CMP_EQ_COLOR (4 << 0)
-# define R128_SRC_CMP_NEQ_COLOR (5 << 0)
-# define R128_CLR_CMP_SRC_SOURCE (1 << 24)
-#define R128_CLR_CMP_MASK 0x15cc
-# define R128_CLR_CMP_MSK 0xffffffff
-#define R128_CLR_CMP_MASK_3D 0x1A28
-#define R128_COMMAND 0x0f04 /* PCI */
-#define R128_COMPOSITE_SHADOW_ID 0x1a0c
-#define R128_CONFIG_APER_0_BASE 0x0100
-#define R128_CONFIG_APER_1_BASE 0x0104
-#define R128_CONFIG_APER_SIZE 0x0108
-#define R128_CONFIG_BONDS 0x00e8
-#define R128_CONFIG_CNTL 0x00e0
-# define APER_0_BIG_ENDIAN_16BPP_SWAP (1 << 0)
-# define APER_0_BIG_ENDIAN_32BPP_SWAP (2 << 0)
-#define R128_CONFIG_MEMSIZE 0x00f8
-#define R128_CONFIG_MEMSIZE_EMBEDDED 0x0114
-#define R128_CONFIG_REG_1_BASE 0x010c
-#define R128_CONFIG_REG_APER_SIZE 0x0110
-#define R128_CONFIG_XSTRAP 0x00e4
-#define R128_CONSTANT_COLOR_C 0x1d34
-# define R128_CONSTANT_COLOR_MASK 0x00ffffff
-# define R128_CONSTANT_COLOR_ONE 0x00ffffff
-# define R128_CONSTANT_COLOR_ZERO 0x00000000
-#define R128_CRC_CMDFIFO_ADDR 0x0740
-#define R128_CRC_CMDFIFO_DOUT 0x0744
-#define R128_CRTC_CRNT_FRAME 0x0214
-#define R128_CRTC_DEBUG 0x021c
-#define R128_CRTC_EXT_CNTL 0x0054
-# define R128_CRTC_VGA_XOVERSCAN (1 << 0)
-# define R128_VGA_ATI_LINEAR (1 << 3)
-# define R128_XCRT_CNT_EN (1 << 6)
-# define R128_CRTC_HSYNC_DIS (1 << 8)
-# define R128_CRTC_VSYNC_DIS (1 << 9)
-# define R128_CRTC_DISPLAY_DIS (1 << 10)
-# define R128_CRTC_CRT_ON (1 << 15)
-# define R128_FP_OUT_EN (1 << 22)
-# define R128_FP_ACTIVE (1 << 23)
-#define R128_CRTC_EXT_CNTL_DPMS_BYTE 0x0055
-# define R128_CRTC_HSYNC_DIS_BYTE (1 << 0)
-# define R128_CRTC_VSYNC_DIS_BYTE (1 << 1)
-# define R128_CRTC_DISPLAY_DIS_BYTE (1 << 2)
-#define R128_CRTC_GEN_CNTL 0x0050
-# define R128_CRTC_DBL_SCAN_EN (1 << 0)
-# define R128_CRTC_INTERLACE_EN (1 << 1)
-# define R128_CRTC_CSYNC_EN (1 << 4)
-# define R128_CRTC_CUR_EN (1 << 16)
-# define R128_CRTC_CUR_MODE_MASK (7 << 17)
-# define R128_CRTC_ICON_EN (1 << 20)
-# define R128_CRTC_EXT_DISP_EN (1 << 24)
-# define R128_CRTC_EN (1 << 25)
-# define R128_CRTC_DISP_REQ_EN_B (1 << 26)
-#define R128_CRTC_GUI_TRIG_VLINE 0x0218
-#define R128_CRTC_H_SYNC_STRT_WID 0x0204
-# define R128_CRTC_H_SYNC_STRT_PIX (0x07 << 0)
-# define R128_CRTC_H_SYNC_STRT_CHAR (0x1ff << 3)
-# define R128_CRTC_H_SYNC_STRT_CHAR_SHIFT 3
-# define R128_CRTC_H_SYNC_WID (0x3f << 16)
-# define R128_CRTC_H_SYNC_WID_SHIFT 16
-# define R128_CRTC_H_SYNC_POL (1 << 23)
-#define R128_CRTC_H_TOTAL_DISP 0x0200
-# define R128_CRTC_H_TOTAL (0x01ff << 0)
-# define R128_CRTC_H_TOTAL_SHIFT 0
-# define R128_CRTC_H_DISP (0x00ff << 16)
-# define R128_CRTC_H_DISP_SHIFT 16
-#define R128_CRTC_OFFSET 0x0224
-#define R128_CRTC_OFFSET_CNTL 0x0228
-#define R128_CRTC_PITCH 0x022c
-#define R128_CRTC_STATUS 0x005c
-# define R128_CRTC_VBLANK_SAVE (1 << 1)
-#define R128_CRTC_V_SYNC_STRT_WID 0x020c
-# define R128_CRTC_V_SYNC_STRT (0x7ff << 0)
-# define R128_CRTC_V_SYNC_STRT_SHIFT 0
-# define R128_CRTC_V_SYNC_WID (0x1f << 16)
-# define R128_CRTC_V_SYNC_WID_SHIFT 16
-# define R128_CRTC_V_SYNC_POL (1 << 23)
-#define R128_CRTC_V_TOTAL_DISP 0x0208
-# define R128_CRTC_V_TOTAL (0x07ff << 0)
-# define R128_CRTC_V_TOTAL_SHIFT 0
-# define R128_CRTC_V_DISP (0x07ff << 16)
-# define R128_CRTC_V_DISP_SHIFT 16
-#define R128_CRTC_VLINE_CRNT_VLINE 0x0210
-# define R128_CRTC_CRNT_VLINE_MASK (0x7ff << 16)
-#define R128_CRTC2_CRNT_FRAME 0x0314
-#define R128_CRTC2_DEBUG 0x031c
-#define R128_CRTC2_GEN_CNTL 0x03f8
-#define R128_CRTC2_GUI_TRIG_VLINE 0x0318
-#define R128_CRTC2_H_SYNC_STRT_WID 0x0304
-#define R128_CRTC2_H_TOTAL_DISP 0x0300
-#define R128_CRTC2_OFFSET 0x0324
-#define R128_CRTC2_OFFSET_CNTL 0x0328
-#define R128_CRTC2_PITCH 0x032c
-#define R128_CRTC2_STATUS 0x03fc
-#define R128_CRTC2_V_SYNC_STRT_WID 0x030c
-#define R128_CRTC2_V_TOTAL_DISP 0x0308
-#define R128_CRTC2_VLINE_CRNT_VLINE 0x0310
-#define R128_CRTC8_DATA 0x03d5 /* VGA, 0x3b5 */
-#define R128_CRTC8_IDX 0x03d4 /* VGA, 0x3b4 */
-#define R128_CUR_CLR0 0x026c
-#define R128_CUR_CLR1 0x0270
-#define R128_CUR_HORZ_VERT_OFF 0x0268
-#define R128_CUR_HORZ_VERT_POSN 0x0264
-#define R128_CUR_OFFSET 0x0260
-# define R128_CUR_LOCK (1 << 31)
-
-#define R128_DAC_CNTL 0x0058
-# define R128_DAC_RANGE_CNTL (3 << 0)
-# define R128_DAC_BLANKING (1 << 2)
-# define R128_DAC_CRT_SEL_CRTC2 (1 << 4)
-# define R128_DAC_PALETTE_ACC_CTL (1 << 5)
-# define R128_DAC_8BIT_EN (1 << 8)
-# define R128_DAC_VGA_ADR_EN (1 << 13)
-# define R128_DAC_MASK_ALL (0xff << 24)
-#define R128_DAC_CRC_SIG 0x02cc
-#define R128_DAC_DATA 0x03c9 /* VGA */
-#define R128_DAC_MASK 0x03c6 /* VGA */
-#define R128_DAC_R_INDEX 0x03c7 /* VGA */
-#define R128_DAC_W_INDEX 0x03c8 /* VGA */
-#define R128_DDA_CONFIG 0x02e0
-#define R128_DDA_ON_OFF 0x02e4
-#define R128_DEFAULT_OFFSET 0x16e0
-#define R128_DEFAULT_PITCH 0x16e4
-#define R128_DEFAULT_SC_BOTTOM_RIGHT 0x16e8
-# define R128_DEFAULT_SC_RIGHT_MAX (0x1fff << 0)
-# define R128_DEFAULT_SC_BOTTOM_MAX (0x1fff << 16)
-#define R128_DESTINATION_3D_CLR_CMP_VAL 0x1820
-#define R128_DESTINATION_3D_CLR_CMP_MSK 0x1824
-#define R128_DEVICE_ID 0x0f02 /* PCI */
-#define R128_DP_BRUSH_BKGD_CLR 0x1478
-#define R128_DP_BRUSH_FRGD_CLR 0x147c
-#define R128_DP_CNTL 0x16c0
-# define R128_DST_X_LEFT_TO_RIGHT (1 << 0)
-# define R128_DST_Y_TOP_TO_BOTTOM (1 << 1)
-#define R128_DP_CNTL_XDIR_YDIR_YMAJOR 0x16d0
-# define R128_DST_Y_MAJOR (1 << 2)
-# define R128_DST_Y_DIR_TOP_TO_BOTTOM (1 << 15)
-# define R128_DST_X_DIR_LEFT_TO_RIGHT (1 << 31)
-#define R128_DP_DATATYPE 0x16c4
-# define R128_HOST_BIG_ENDIAN_EN (1 << 29)
-#define R128_DP_GUI_MASTER_CNTL 0x146c
-# define R128_GMC_SRC_PITCH_OFFSET_CNTL (1 << 0)
-# define R128_GMC_DST_PITCH_OFFSET_CNTL (1 << 1)
-# define R128_GMC_SRC_CLIPPING (1 << 2)
-# define R128_GMC_DST_CLIPPING (1 << 3)
-# define R128_GMC_BRUSH_DATATYPE_MASK (0x0f << 4)
-# define R128_GMC_BRUSH_8X8_MONO_FG_BG (0 << 4)
-# define R128_GMC_BRUSH_8X8_MONO_FG_LA (1 << 4)
-# define R128_GMC_BRUSH_1X8_MONO_FG_BG (4 << 4)
-# define R128_GMC_BRUSH_1X8_MONO_FG_LA (5 << 4)
-# define R128_GMC_BRUSH_32x1_MONO_FG_BG (6 << 4)
-# define R128_GMC_BRUSH_32x1_MONO_FG_LA (7 << 4)
-# define R128_GMC_BRUSH_32x32_MONO_FG_BG (8 << 4)
-# define R128_GMC_BRUSH_32x32_MONO_FG_LA (9 << 4)
-# define R128_GMC_BRUSH_8x8_COLOR (10 << 4)
-# define R128_GMC_BRUSH_1X8_COLOR (12 << 4)
-# define R128_GMC_BRUSH_SOLID_COLOR (13 << 4)
-# define R128_GMC_BRUSH_NONE (15 << 4)
-# define R128_GMC_DST_8BPP_CI (2 << 8)
-# define R128_GMC_DST_15BPP (3 << 8)
-# define R128_GMC_DST_16BPP (4 << 8)
-# define R128_GMC_DST_24BPP (5 << 8)
-# define R128_GMC_DST_32BPP (6 << 8)
-# define R128_GMC_DST_8BPP_RGB (7 << 8)
-# define R128_GMC_DST_Y8 (8 << 8)
-# define R128_GMC_DST_RGB8 (9 << 8)
-# define R128_GMC_DST_VYUY (11 << 8)
-# define R128_GMC_DST_YVYU (12 << 8)
-# define R128_GMC_DST_AYUV444 (14 << 8)
-# define R128_GMC_DST_ARGB4444 (15 << 8)
-# define R128_GMC_DST_DATATYPE_MASK (0x0f << 8)
-# define R128_GMC_DST_DATATYPE_SHIFT 8
-# define R128_GMC_SRC_DATATYPE_MASK (3 << 12)
-# define R128_GMC_SRC_DATATYPE_MONO_FG_BG (0 << 12)
-# define R128_GMC_SRC_DATATYPE_MONO_FG_LA (1 << 12)
-# define R128_GMC_SRC_DATATYPE_COLOR (3 << 12)
-# define R128_GMC_BYTE_PIX_ORDER (1 << 14)
-# define R128_GMC_BYTE_MSB_TO_LSB (0 << 14)
-# define R128_GMC_BYTE_LSB_TO_MSB (1 << 14)
-# define R128_GMC_CONVERSION_TEMP (1 << 15)
-# define R128_GMC_CONVERSION_TEMP_6500 (0 << 15)
-# define R128_GMC_CONVERSION_TEMP_9300 (1 << 15)
-# define R128_GMC_ROP3_MASK (0xff << 16)
-# define R128_DP_SRC_SOURCE_MASK (7 << 24)
-# define R128_DP_SRC_SOURCE_MEMORY (2 << 24)
-# define R128_DP_SRC_SOURCE_HOST_DATA (3 << 24)
-# define R128_GMC_3D_FCN_EN (1 << 27)
-# define R128_GMC_CLR_CMP_CNTL_DIS (1 << 28)
-# define R128_GMC_AUX_CLIP_DIS (1 << 29)
-# define R128_GMC_WR_MSK_DIS (1 << 30)
-# define R128_GMC_LD_BRUSH_Y_X (1 << 31)
-# define R128_ROP3_ZERO 0x00000000
-# define R128_ROP3_DSa 0x00880000
-# define R128_ROP3_SDna 0x00440000
-# define R128_ROP3_S 0x00cc0000
-# define R128_ROP3_DSna 0x00220000
-# define R128_ROP3_D 0x00aa0000
-# define R128_ROP3_DSx 0x00660000
-# define R128_ROP3_DSo 0x00ee0000
-# define R128_ROP3_DSon 0x00110000
-# define R128_ROP3_DSxn 0x00990000
-# define R128_ROP3_Dn 0x00550000
-# define R128_ROP3_SDno 0x00dd0000
-# define R128_ROP3_Sn 0x00330000
-# define R128_ROP3_DSno 0x00bb0000
-# define R128_ROP3_DSan 0x00770000
-# define R128_ROP3_ONE 0x00ff0000
-# define R128_ROP3_DPa 0x00a00000
-# define R128_ROP3_PDna 0x00500000
-# define R128_ROP3_P 0x00f00000
-# define R128_ROP3_DPna 0x000a0000
-# define R128_ROP3_D 0x00aa0000
-# define R128_ROP3_DPx 0x005a0000
-# define R128_ROP3_DPo 0x00fa0000
-# define R128_ROP3_DPon 0x00050000
-# define R128_ROP3_PDxn 0x00a50000
-# define R128_ROP3_PDno 0x00f50000
-# define R128_ROP3_Pn 0x000f0000
-# define R128_ROP3_DPno 0x00af0000
-# define R128_ROP3_DPan 0x005f0000
-
-
-#define R128_DP_GUI_MASTER_CNTL_C 0x1c84
-#define R128_DP_MIX 0x16c8
-#define R128_DP_SRC_BKGD_CLR 0x15dc
-#define R128_DP_SRC_FRGD_CLR 0x15d8
-#define R128_DP_WRITE_MASK 0x16cc
-#define R128_DST_BRES_DEC 0x1630
-#define R128_DST_BRES_ERR 0x1628
-#define R128_DST_BRES_INC 0x162c
-#define R128_DST_BRES_LNTH 0x1634
-#define R128_DST_BRES_LNTH_SUB 0x1638
-#define R128_DST_HEIGHT 0x1410
-#define R128_DST_HEIGHT_WIDTH 0x143c
-#define R128_DST_HEIGHT_WIDTH_8 0x158c
-#define R128_DST_HEIGHT_WIDTH_BW 0x15b4
-#define R128_DST_HEIGHT_Y 0x15a0
-#define R128_DST_OFFSET 0x1404
-#define R128_DST_PITCH 0x1408
-#define R128_DST_PITCH_OFFSET 0x142c
-#define R128_DST_PITCH_OFFSET_C 0x1c80
-# define R128_PITCH_SHIFT 21
-# define R128_DST_TILE (1 << 31)
-#define R128_DST_WIDTH 0x140c
-#define R128_DST_WIDTH_HEIGHT 0x1598
-#define R128_DST_WIDTH_X 0x1588
-#define R128_DST_WIDTH_X_INCY 0x159c
-#define R128_DST_X 0x141c
-#define R128_DST_X_SUB 0x15a4
-#define R128_DST_X_Y 0x1594
-#define R128_DST_Y 0x1420
-#define R128_DST_Y_SUB 0x15a8
-#define R128_DST_Y_X 0x1438
-
-#define R128_EXT_MEM_CNTL 0x0144
-
-#define R128_FCP_CNTL 0x0012 /* PLL */
-#define R128_FLUSH_1 0x1704
-#define R128_FLUSH_2 0x1708
-#define R128_FLUSH_3 0x170c
-#define R128_FLUSH_4 0x1710
-#define R128_FLUSH_5 0x1714
-#define R128_FLUSH_6 0x1718
-#define R128_FLUSH_7 0x171c
-#define R128_FOG_3D_TABLE_START 0x1810
-#define R128_FOG_3D_TABLE_END 0x1814
-#define R128_FOG_3D_TABLE_DENSITY 0x181c
-#define R128_FOG_TABLE_INDEX 0x1a14
-#define R128_FOG_TABLE_DATA 0x1a18
-#define R128_FP_CRTC_H_TOTAL_DISP 0x0250
-#define R128_FP_CRTC_V_TOTAL_DISP 0x0254
-#define R128_FP_GEN_CNTL 0x0284
-# define R128_FP_FPON (1 << 0)
-# define R128_FP_BLANK_DIS (1 << 1)
-# define R128_FP_TDMS_EN (1 << 2)
-# define R128_FP_DETECT_SENSE (1 << 8)
-# define R128_FP_SEL_CRTC2 (1 << 13)
-# define R128_FP_CRTC_DONT_SHADOW_VPAR (1 << 16)
-# define R128_FP_CRTC_DONT_SHADOW_HEND (1 << 17)
-# define R128_FP_CRTC_USE_SHADOW_VEND (1 << 18)
-# define R128_FP_CRTC_USE_SHADOW_ROWCUR (1 << 19)
-# define R128_FP_CRTC_HORZ_DIV2_EN (1 << 20)
-# define R128_FP_CRTC_HOR_CRT_DIV2_DIS (1 << 21)
-# define R128_FP_CRT_SYNC_SEL (1 << 23)
-# define R128_FP_USE_SHADOW_EN (1 << 24)
-#define R128_FP_H_SYNC_STRT_WID 0x02c4
-#define R128_FP_HORZ_STRETCH 0x028c
-# define R128_HORZ_STRETCH_RATIO_MASK 0xffff
-# define R128_HORZ_STRETCH_RATIO_SHIFT 0
-# define R128_HORZ_STRETCH_RATIO_MAX 4096
-# define R128_HORZ_PANEL_SIZE (0xff << 16)
-# define R128_HORZ_PANEL_SHIFT 16
-# define R128_AUTO_HORZ_RATIO (0 << 24)
-# define R128_HORZ_STRETCH_PIXREP (0 << 25)
-# define R128_HORZ_STRETCH_BLEND (1 << 25)
-# define R128_HORZ_STRETCH_ENABLE (1 << 26)
-# define R128_HORZ_FP_LOOP_STRETCH (0x7 << 27)
-# define R128_HORZ_STRETCH_RESERVED (1 << 30)
-# define R128_HORZ_AUTO_RATIO_FIX_EN (1 << 31)
-
-#define R128_FP_PANEL_CNTL 0x0288
-# define R128_FP_DIGON (1 << 0)
-# define R128_FP_BLON (1 << 1)
-#define R128_FP_V_SYNC_STRT_WID 0x02c8
-#define R128_FP_VERT_STRETCH 0x0290
-# define R128_VERT_PANEL_SIZE (0x7ff << 0)
-# define R128_VERT_PANEL_SHIFT 0
-# define R128_VERT_STRETCH_RATIO_MASK 0x3ff
-# define R128_VERT_STRETCH_RATIO_SHIFT 11
-# define R128_VERT_STRETCH_RATIO_MAX 1024
-# define R128_VERT_STRETCH_ENABLE (1 << 24)
-# define R128_VERT_STRETCH_LINEREP (0 << 25)
-# define R128_VERT_STRETCH_BLEND (1 << 25)
-# define R128_VERT_AUTO_RATIO_EN (1 << 26)
-# define R128_VERT_STRETCH_RESERVED 0xf8e00000
-
-#define R128_GEN_INT_CNTL 0x0040
-#define R128_GEN_INT_STATUS 0x0044
-# define R128_VSYNC_INT_AK (1 << 2)
-# define R128_VSYNC_INT (1 << 2)
-#define R128_GEN_RESET_CNTL 0x00f0
-# define R128_SOFT_RESET_GUI (1 << 0)
-# define R128_SOFT_RESET_VCLK (1 << 8)
-# define R128_SOFT_RESET_PCLK (1 << 9)
-# define R128_SOFT_RESET_DISPENG_XCLK (1 << 11)
-# define R128_SOFT_RESET_MEMCTLR_XCLK (1 << 12)
-#define R128_GENENB 0x03c3 /* VGA */
-#define R128_GENFC_RD 0x03ca /* VGA */
-#define R128_GENFC_WT 0x03da /* VGA, 0x03ba */
-#define R128_GENMO_RD 0x03cc /* VGA */
-#define R128_GENMO_WT 0x03c2 /* VGA */
-#define R128_GENS0 0x03c2 /* VGA */
-#define R128_GENS1 0x03da /* VGA, 0x03ba */
-#define R128_GPIO_MONID 0x0068
-# define R128_GPIO_MONID_A_0 (1 << 0)
-# define R128_GPIO_MONID_A_1 (1 << 1)
-# define R128_GPIO_MONID_A_2 (1 << 2)
-# define R128_GPIO_MONID_A_3 (1 << 3)
-# define R128_GPIO_MONID_Y_0 (1 << 8)
-# define R128_GPIO_MONID_Y_1 (1 << 9)
-# define R128_GPIO_MONID_Y_2 (1 << 10)
-# define R128_GPIO_MONID_Y_3 (1 << 11)
-# define R128_GPIO_MONID_EN_0 (1 << 16)
-# define R128_GPIO_MONID_EN_1 (1 << 17)
-# define R128_GPIO_MONID_EN_2 (1 << 18)
-# define R128_GPIO_MONID_EN_3 (1 << 19)
-# define R128_GPIO_MONID_MASK_0 (1 << 24)
-# define R128_GPIO_MONID_MASK_1 (1 << 25)
-# define R128_GPIO_MONID_MASK_2 (1 << 26)
-# define R128_GPIO_MONID_MASK_3 (1 << 27)
-#define R128_GPIO_MONIDB 0x006c
-#define R128_GRPH8_DATA 0x03cf /* VGA */
-#define R128_GRPH8_IDX 0x03ce /* VGA */
-#define R128_GUI_DEBUG0 0x16a0
-#define R128_GUI_DEBUG1 0x16a4
-#define R128_GUI_DEBUG2 0x16a8
-#define R128_GUI_DEBUG3 0x16ac
-#define R128_GUI_DEBUG4 0x16b0
-#define R128_GUI_DEBUG5 0x16b4
-#define R128_GUI_DEBUG6 0x16b8
-#define R128_GUI_PROBE 0x16bc
-#define R128_GUI_SCRATCH_REG0 0x15e0
-#define R128_GUI_SCRATCH_REG1 0x15e4
-#define R128_GUI_SCRATCH_REG2 0x15e8
-#define R128_GUI_SCRATCH_REG3 0x15ec
-#define R128_GUI_SCRATCH_REG4 0x15f0
-#define R128_GUI_SCRATCH_REG5 0x15f4
-#define R128_GUI_STAT 0x1740
-# define R128_GUI_FIFOCNT_MASK 0x0fff
-# define R128_GUI_ACTIVE (1 << 31)
-
-#define R128_HEADER 0x0f0e /* PCI */
-#define R128_HOST_DATA0 0x17c0
-#define R128_HOST_DATA1 0x17c4
-#define R128_HOST_DATA2 0x17c8
-#define R128_HOST_DATA3 0x17cc
-#define R128_HOST_DATA4 0x17d0
-#define R128_HOST_DATA5 0x17d4
-#define R128_HOST_DATA6 0x17d8
-#define R128_HOST_DATA7 0x17dc
-#define R128_HOST_DATA_LAST 0x17e0
-#define R128_HOST_PATH_CNTL 0x0130
-#define R128_HTOTAL_CNTL 0x0009 /* PLL */
-#define R128_HW_DEBUG 0x0128
-#define R128_HW_DEBUG2 0x011c
-
-#define R128_I2C_CNTL_1 0x0094 /* ? */
-#define R128_INTERRUPT_LINE 0x0f3c /* PCI */
-#define R128_INTERRUPT_PIN 0x0f3d /* PCI */
-#define R128_IO_BASE 0x0f14 /* PCI */
-
-#define R128_LATENCY 0x0f0d /* PCI */
-#define R128_LEAD_BRES_DEC 0x1608
-#define R128_LEAD_BRES_ERR 0x1600
-#define R128_LEAD_BRES_INC 0x1604
-#define R128_LEAD_BRES_LNTH 0x161c
-#define R128_LEAD_BRES_LNTH_SUB 0x1624
-#define R128_LVDS_GEN_CNTL 0x02d0
-# define R128_LVDS_ON (1 << 0)
-# define R128_LVDS_DISPLAY_DIS (1 << 1)
-# define R128_LVDS_EN (1 << 7)
-# define R128_LVDS_DIGON (1 << 18)
-# define R128_LVDS_BLON (1 << 19)
-# define R128_LVDS_SEL_CRTC2 (1 << 23)
-# define R128_HSYNC_DELAY_SHIFT 28
-# define R128_HSYNC_DELAY_MASK (0xf << 28)
-
-#define R128_MAX_LATENCY 0x0f3f /* PCI */
-#define R128_MCLK_CNTL 0x000f /* PLL */
-# define R128_FORCE_GCP (1 << 16)
-# define R128_FORCE_PIPE3D_CP (1 << 17)
-# define R128_FORCE_RCP (1 << 18)
-#define R128_MDGPIO_A_REG 0x01ac
-#define R128_MDGPIO_EN_REG 0x01b0
-#define R128_MDGPIO_MASK 0x0198
-#define R128_MDGPIO_Y_REG 0x01b4
-#define R128_MEM_ADDR_CONFIG 0x0148
-#define R128_MEM_BASE 0x0f10 /* PCI */
-#define R128_MEM_CNTL 0x0140
-#define R128_MEM_INIT_LAT_TIMER 0x0154
-#define R128_MEM_INTF_CNTL 0x014c
-#define R128_MEM_SDRAM_MODE_REG 0x0158
-#define R128_MEM_STR_CNTL 0x0150
-#define R128_MEM_VGA_RP_SEL 0x003c
-#define R128_MEM_VGA_WP_SEL 0x0038
-#define R128_MIN_GRANT 0x0f3e /* PCI */
-#define R128_MM_DATA 0x0004
-#define R128_MM_INDEX 0x0000
-#define R128_MPLL_CNTL 0x000e /* PLL */
-#define R128_MPP_TB_CONFIG 0x01c0 /* ? */
-#define R128_MPP_GP_CONFIG 0x01c8 /* ? */
-
-#define R128_N_VIF_COUNT 0x0248
-
-#define R128_OVR_CLR 0x0230
-#define R128_OVR_WID_LEFT_RIGHT 0x0234
-#define R128_OVR_WID_TOP_BOTTOM 0x0238
-
-/* first overlay unit (there is only one) */
-
-#define R128_OV0_Y_X_START 0x0400
-#define R128_OV0_Y_X_END 0x0404
-#define R128_OV0_EXCLUSIVE_HORZ 0x0408
-# define R128_EXCL_HORZ_START_MASK 0x000000ff
-# define R128_EXCL_HORZ_END_MASK 0x0000ff00
-# define R128_EXCL_HORZ_BACK_PORCH_MASK 0x00ff0000
-# define R128_EXCL_HORZ_EXCLUSIVE_EN 0x80000000
-#define R128_OV0_EXCLUSIVE_VERT 0x040C
-# define R128_EXCL_VERT_START_MASK 0x000003ff
-# define R128_EXCL_VERT_END_MASK 0x03ff0000
-#define R128_OV0_REG_LOAD_CNTL 0x0410
-# define R128_REG_LD_CTL_LOCK 0x00000001L
-# define R128_REG_LD_CTL_VBLANK_DURING_LOCK 0x00000002L
-# define R128_REG_LD_CTL_STALL_GUI_UNTIL_FLIP 0x00000004L
-# define R128_REG_LD_CTL_LOCK_READBACK 0x00000008L
-#define R128_OV0_SCALE_CNTL 0x0420
-# define R128_SCALER_PIX_EXPAND 0x00000001L
-# define R128_SCALER_Y2R_TEMP 0x00000002L
-# define R128_SCALER_HORZ_PICK_NEAREST 0x00000003L
-# define R128_SCALER_VERT_PICK_NEAREST 0x00000004L
-# define R128_SCALER_SIGNED_UV 0x00000010L
-# define R128_SCALER_GAMMA_SEL_MASK 0x00000060L
-# define R128_SCALER_GAMMA_SEL_BRIGHT 0x00000000L
-# define R128_SCALER_GAMMA_SEL_G22 0x00000020L
-# define R128_SCALER_GAMMA_SEL_G18 0x00000040L
-# define R128_SCALER_GAMMA_SEL_G14 0x00000060L
-# define R128_SCALER_COMCORE_SHIFT_UP_ONE 0x00000080L
-# define R128_SCALER_SURFAC_FORMAT 0x00000f00L
-# define R128_SCALER_SOURCE_15BPP 0x00000300L
-# define R128_SCALER_SOURCE_16BPP 0x00000400L
-# define R128_SCALER_SOURCE_32BPP 0x00000600L
-# define R128_SCALER_SOURCE_YUV9 0x00000900L
-# define R128_SCALER_SOURCE_YUV12 0x00000A00L
-# define R128_SCALER_SOURCE_VYUY422 0x00000B00L
-# define R128_SCALER_SOURCE_YVYU422 0x00000C00L
-# define R128_SCALER_SMART_SWITCH 0x00008000L
-# define R128_SCALER_BURST_PER_PLANE 0x00ff0000L
-# define R128_SCALER_DOUBLE_BUFFER 0x01000000L
-# define R128_SCALER_DIS_LIMIT 0x08000000L
-# define R128_SCALER_PRG_LOAD_START 0x10000000L
-# define R128_SCALER_INT_EMU 0x20000000L
-# define R128_SCALER_ENABLE 0x40000000L
-# define R128_SCALER_SOFT_RESET 0x80000000L
-#define R128_OV0_V_INC 0x0424
-#define R128_OV0_P1_V_ACCUM_INIT 0x0428
-# define R128_OV0_P1_MAX_LN_IN_PER_LN_OUT 0x00000003L
-# define R128_OV0_P1_V_ACCUM_INIT_MASK 0x01ff8000L
-#define R128_OV0_P23_V_ACCUM_INIT 0x042C
-#define R128_OV0_P1_BLANK_LINES_AT_TOP 0x0430
-# define R128_P1_BLNK_LN_AT_TOP_M1_MASK 0x00000fffL
-# define R128_P1_ACTIVE_LINES_M1 0x0fff0000L
-#define R128_OV0_P23_BLANK_LINES_AT_TOP 0x0434
-# define R128_P23_BLNK_LN_AT_TOP_M1_MASK 0x000007ffL
-# define R128_P23_ACTIVE_LINES_M1 0x07ff0000L
-#define R128_OV0_VID_BUF0_BASE_ADRS 0x0440
-# define R128_VIF_BUF0_PITCH_SEL 0x00000001L
-# define R128_VIF_BUF0_TILE_ADRS 0x00000002L
-# define R128_VIF_BUF0_BASE_ADRS_MASK 0x03fffff0L
-# define R128_VIF_BUF0_1ST_LINE_LSBS_MASK 0x48000000L
-#define R128_OV0_VID_BUF1_BASE_ADRS 0x0444
-# define R128_VIF_BUF1_PITCH_SEL 0x00000001L
-# define R128_VIF_BUF1_TILE_ADRS 0x00000002L
-# define R128_VIF_BUF1_BASE_ADRS_MASK 0x03fffff0L
-# define R128_VIF_BUF1_1ST_LINE_LSBS_MASK 0x48000000L
-#define R128_OV0_VID_BUF2_BASE_ADRS 0x0448
-# define R128_VIF_BUF2_PITCH_SEL 0x00000001L
-# define R128_VIF_BUF2_TILE_ADRS 0x00000002L
-# define R128_VIF_BUF2_BASE_ADRS_MASK 0x03fffff0L
-# define R128_VIF_BUF2_1ST_LINE_LSBS_MASK 0x48000000L
-#define R128_OV0_VID_BUF3_BASE_ADRS 0x044C
-#define R128_OV0_VID_BUF4_BASE_ADRS 0x0450
-#define R128_OV0_VID_BUF5_BASE_ADRS 0x0454
-#define R128_OV0_VID_BUF_PITCH0_VALUE 0x0460
-#define R128_OV0_VID_BUF_PITCH1_VALUE 0x0464
-#define R128_OV0_AUTO_FLIP_CNTL 0x0470
-#define R128_OV0_DEINTERLACE_PATTERN 0x0474
-#define R128_OV0_H_INC 0x0480
-#define R128_OV0_STEP_BY 0x0484
-#define R128_OV0_P1_H_ACCUM_INIT 0x0488
-#define R128_OV0_P23_H_ACCUM_INIT 0x048C
-#define R128_OV0_P1_X_START_END 0x0494
-#define R128_OV0_P2_X_START_END 0x0498
-#define R128_OV0_P3_X_START_END 0x049C
-#define R128_OV0_FILTER_CNTL 0x04A0
-#define R128_OV0_FOUR_TAP_COEF_0 0x04B0
-#define R128_OV0_FOUR_TAP_COEF_1 0x04B4
-#define R128_OV0_FOUR_TAP_COEF_2 0x04B8
-#define R128_OV0_FOUR_TAP_COEF_3 0x04BC
-#define R128_OV0_FOUR_TAP_COEF_4 0x04C0
-#define R128_OV0_COLOUR_CNTL 0x04E0
-#define R128_OV0_VIDEO_KEY_CLR 0x04E4
-#define R128_OV0_VIDEO_KEY_MSK 0x04E8
-#define R128_OV0_GRAPHICS_KEY_CLR 0x04EC
-#define R128_OV0_GRAPHICS_KEY_MSK 0x04F0
-#define R128_OV0_KEY_CNTL 0x04F4
-# define R128_VIDEO_KEY_FN_MASK 0x00000007L
-# define R128_VIDEO_KEY_FN_FALSE 0x00000000L
-# define R128_VIDEO_KEY_FN_TRUE 0x00000001L
-# define R128_VIDEO_KEY_FN_EQ 0x00000004L
-# define R128_VIDEO_KEY_FN_NE 0x00000005L
-# define R128_GRAPHIC_KEY_FN_MASK 0x00000070L
-# define R128_GRAPHIC_KEY_FN_FALSE 0x00000000L
-# define R128_GRAPHIC_KEY_FN_TRUE 0x00000010L
-# define R128_GRAPHIC_KEY_FN_EQ 0x00000040L
-# define R128_GRAPHIC_KEY_FN_NE 0x00000050L
-# define R128_CMP_MIX_MASK 0x00000100L
-# define R128_CMP_MIX_OR 0x00000000L
-# define R128_CMP_MIX_AND 0x00000100L
-#define R128_OV0_TEST 0x04F8
-
-
-#define R128_PALETTE_DATA 0x00b4
-#define R128_PALETTE_INDEX 0x00b0
-#define R128_PC_DEBUG_MODE 0x1760
-#define R128_PC_GUI_CTLSTAT 0x1748
-#define R128_PC_GUI_MODE 0x1744
-# define R128_PC_IGNORE_UNIFY (1 << 5)
-#define R128_PC_MISC_CNTL 0x0188
-#define R128_PC_NGUI_CTLSTAT 0x0184
-# define R128_PC_FLUSH_GUI (3 << 0)
-# define R128_PC_RI_GUI (1 << 2)
-# define R128_PC_FLUSH_ALL 0x00ff
-# define R128_PC_BUSY (1 << 31)
-#define R128_PC_NGUI_MODE 0x0180
-#define R128_PCI_GART_PAGE 0x017c
-#define R128_PLANE_3D_MASK_C 0x1d44
-#define R128_PLL_TEST_CNTL 0x0013 /* PLL */
-#define R128_PMI_CAP_ID 0x0f5c /* PCI */
-#define R128_PMI_DATA 0x0f63 /* PCI */
-#define R128_PMI_NXT_CAP_PTR 0x0f5d /* PCI */
-#define R128_PMI_PMC_REG 0x0f5e /* PCI */
-#define R128_PMI_PMCSR_REG 0x0f60 /* PCI */
-#define R128_PMI_REGISTER 0x0f5c /* PCI */
-#define R128_PPLL_CNTL 0x0002 /* PLL */
-# define R128_PPLL_RESET (1 << 0)
-# define R128_PPLL_SLEEP (1 << 1)
-# define R128_PPLL_ATOMIC_UPDATE_EN (1 << 16)
-# define R128_PPLL_VGA_ATOMIC_UPDATE_EN (1 << 17)
-#define R128_PPLL_DIV_0 0x0004 /* PLL */
-#define R128_PPLL_DIV_1 0x0005 /* PLL */
-#define R128_PPLL_DIV_2 0x0006 /* PLL */
-#define R128_PPLL_DIV_3 0x0007 /* PLL */
-# define R128_PPLL_FB3_DIV_MASK 0x07ff
-# define R128_PPLL_POST3_DIV_MASK 0x00070000
-#define R128_PPLL_REF_DIV 0x0003 /* PLL */
-# define R128_PPLL_REF_DIV_MASK 0x03ff
-# define R128_PPLL_ATOMIC_UPDATE_R (1 << 15) /* same as _W */
-# define R128_PPLL_ATOMIC_UPDATE_W (1 << 15) /* same as _R */
-#define R128_PWR_MNGMT_CNTL_STATUS 0x0f60 /* PCI */
-#define R128_REG_BASE 0x0f18 /* PCI */
-#define R128_REGPROG_INF 0x0f09 /* PCI */
-#define R128_REVISION_ID 0x0f08 /* PCI */
-
-#define R128_SC_BOTTOM 0x164c
-#define R128_SC_BOTTOM_RIGHT 0x16f0
-#define R128_SC_BOTTOM_RIGHT_C 0x1c8c
-#define R128_SC_LEFT 0x1640
-#define R128_SC_RIGHT 0x1644
-#define R128_SC_TOP 0x1648
-#define R128_SC_TOP_LEFT 0x16ec
-#define R128_SC_TOP_LEFT_C 0x1c88
-#define R128_SEQ8_DATA 0x03c5 /* VGA */
-#define R128_SEQ8_IDX 0x03c4 /* VGA */
-#define R128_SNAPSHOT_F_COUNT 0x0244
-#define R128_SNAPSHOT_VH_COUNTS 0x0240
-#define R128_SNAPSHOT_VIF_COUNT 0x024c
-#define R128_SRC_OFFSET 0x15ac
-#define R128_SRC_PITCH 0x15b0
-#define R128_SRC_PITCH_OFFSET 0x1428
-#define R128_SRC_SC_BOTTOM 0x165c
-#define R128_SRC_SC_BOTTOM_RIGHT 0x16f4
-#define R128_SRC_SC_RIGHT 0x1654
-#define R128_SRC_X 0x1414
-#define R128_SRC_X_Y 0x1590
-#define R128_SRC_Y 0x1418
-#define R128_SRC_Y_X 0x1434
-#define R128_STATUS 0x0f06 /* PCI */
-#define R128_SUBPIC_CNTL 0x0540 /* ? */
-#define R128_SUB_CLASS 0x0f0a /* PCI */
-#define R128_SURFACE_DELAY 0x0b00
-#define R128_SURFACE0_INFO 0x0b0c
-#define R128_SURFACE0_LOWER_BOUND 0x0b04
-#define R128_SURFACE0_UPPER_BOUND 0x0b08
-#define R128_SURFACE1_INFO 0x0b1c
-#define R128_SURFACE1_LOWER_BOUND 0x0b14
-#define R128_SURFACE1_UPPER_BOUND 0x0b18
-#define R128_SURFACE2_INFO 0x0b2c
-#define R128_SURFACE2_LOWER_BOUND 0x0b24
-#define R128_SURFACE2_UPPER_BOUND 0x0b28
-#define R128_SURFACE3_INFO 0x0b3c
-#define R128_SURFACE3_LOWER_BOUND 0x0b34
-#define R128_SURFACE3_UPPER_BOUND 0x0b38
-#define R128_SW_SEMAPHORE 0x013c
-
-#define R128_TEST_DEBUG_CNTL 0x0120
-#define R128_TEST_DEBUG_MUX 0x0124
-#define R128_TEST_DEBUG_OUT 0x012c
-#define R128_TMDS_CRC 0x02a0
-#define R128_TMDS_TRANSMITTER_CNTL 0x02a4
-# define R128_TMDS_PLLEN (1 << 0)
-# define R128_TMDS_PLLRST (1 << 1)
-#define R128_TRAIL_BRES_DEC 0x1614
-#define R128_TRAIL_BRES_ERR 0x160c
-#define R128_TRAIL_BRES_INC 0x1610
-#define R128_TRAIL_X 0x1618
-#define R128_TRAIL_X_SUB 0x1620
-
-#define R128_VCLK_ECP_CNTL 0x0008 /* PLL */
-#define R128_VENDOR_ID 0x0f00 /* PCI */
-#define R128_VGA_DDA_CONFIG 0x02e8
-#define R128_VGA_DDA_ON_OFF 0x02ec
-#define R128_VID_BUFFER_CONTROL 0x0900
-#define R128_VIDEOMUX_CNTL 0x0190
-#define R128_VIPH_CONTROL 0x01D0 /* ? */
-
-#define R128_WAIT_UNTIL 0x1720
-
-#define R128_X_MPLL_REF_FB_DIV 0x000a /* PLL */
-#define R128_XCLK_CNTL 0x000d /* PLL */
-#define R128_XDLL_CNTL 0x000c /* PLL */
-#define R128_XPLL_CNTL 0x000b /* PLL */
-
- /* Registers for CCE and Microcode Engine */
-#define R128_PM4_MICROCODE_ADDR 0x07d4
-#define R128_PM4_MICROCODE_RADDR 0x07d8
-#define R128_PM4_MICROCODE_DATAH 0x07dc
-#define R128_PM4_MICROCODE_DATAL 0x07e0
-
-#define R128_PM4_BUFFER_OFFSET 0x0700
-#define R128_PM4_BUFFER_CNTL 0x0704
-# define R128_PM4_NONPM4 (0 << 28)
-# define R128_PM4_192PIO (1 << 28)
-# define R128_PM4_192BM (2 << 28)
-# define R128_PM4_128PIO_64INDBM (3 << 28)
-# define R128_PM4_128BM_64INDBM (4 << 28)
-# define R128_PM4_64PIO_128INDBM (5 << 28)
-# define R128_PM4_64BM_128INDBM (6 << 28)
-# define R128_PM4_64PIO_64VCBM_64INDBM (7 << 28)
-# define R128_PM4_64BM_64VCBM_64INDBM (8 << 28)
-# define R128_PM4_64PIO_64VCPIO_64INDPIO (15 << 28)
-#define R128_PM4_BUFFER_WM_CNTL 0x0708
-# define R128_WMA_SHIFT 0
-# define R128_WMB_SHIFT 8
-# define R128_WMC_SHIFT 16
-# define R128_WB_WM_SHIFT 24
-#define R128_PM4_BUFFER_DL_RPTR_ADDR 0x070c
-#define R128_PM4_BUFFER_DL_RPTR 0x0710
-#define R128_PM4_BUFFER_DL_WPTR 0x0714
-# define R128_PM4_BUFFER_DL_DONE (1 << 31)
-#define R128_PM4_BUFFER_DL_WPTR_DELAY 0x0718
-# define R128_PRE_WRITE_TIMER_SHIFT 0
-# define R128_PRE_WRITE_LIMIT_SHIFT 23
-#define R128_PM4_VC_FPU_SETUP 0x071c
-# define R128_FRONT_DIR_CW (0 << 0)
-# define R128_FRONT_DIR_CCW (1 << 0)
-# define R128_FRONT_DIR_MASK (1 << 0)
-# define R128_BACKFACE_CULL (0 << 1)
-# define R128_BACKFACE_POINTS (1 << 1)
-# define R128_BACKFACE_LINES (2 << 1)
-# define R128_BACKFACE_SOLID (3 << 1)
-# define R128_BACKFACE_MASK (3 << 1)
-# define R128_FRONTFACE_CULL (0 << 3)
-# define R128_FRONTFACE_POINTS (1 << 3)
-# define R128_FRONTFACE_LINES (2 << 3)
-# define R128_FRONTFACE_SOLID (3 << 3)
-# define R128_FRONTFACE_MASK (3 << 3)
-# define R128_FPU_COLOR_SOLID (0 << 5)
-# define R128_FPU_COLOR_FLAT (1 << 5)
-# define R128_FPU_COLOR_GOURAUD (2 << 5)
-# define R128_FPU_COLOR_GOURAUD2 (3 << 5)
-# define R128_FPU_COLOR_MASK (3 << 5)
-# define R128_FPU_SUB_PIX_2BITS (0 << 7)
-# define R128_FPU_SUB_PIX_4BITS (1 << 7)
-# define R128_FPU_MODE_2D (0 << 8)
-# define R128_FPU_MODE_3D (1 << 8)
-# define R128_TRAP_BITS_DISABLE (1 << 9)
-# define R128_EDGE_ANTIALIAS (1 << 10)
-# define R128_SUPERSAMPLE (1 << 11)
-# define R128_XFACTOR_2 (0 << 12)
-# define R128_XFACTOR_4 (1 << 12)
-# define R128_YFACTOR_2 (0 << 13)
-# define R128_YFACTOR_4 (1 << 13)
-# define R128_FLAT_SHADE_VERTEX_D3D (0 << 14)
-# define R128_FLAT_SHADE_VERTEX_OGL (1 << 14)
-# define R128_FPU_ROUND_TRUNCATE (0 << 15)
-# define R128_FPU_ROUND_NEAREST (1 << 15)
-# define R128_WM_SEL_8DW (0 << 16)
-# define R128_WM_SEL_16DW (1 << 16)
-# define R128_WM_SEL_32DW (2 << 16)
-#define R128_PM4_VC_DEBUG_CONFIG 0x07a4
-#define R128_PM4_VC_STAT 0x07a8
-#define R128_PM4_VC_TIMESTAMP0 0x07b0
-#define R128_PM4_VC_TIMESTAMP1 0x07b4
-#define R128_PM4_STAT 0x07b8
-# define R128_PM4_FIFOCNT_MASK 0x0fff
-# define R128_PM4_BUSY (1 << 16)
-# define R128_PM4_GUI_ACTIVE (1 << 31)
-#define R128_PM4_BUFFER_ADDR 0x07f0
-#define R128_PM4_MICRO_CNTL 0x07fc
-# define R128_PM4_MICRO_FREERUN (1 << 30)
-#define R128_PM4_FIFO_DATA_EVEN 0x1000
-#define R128_PM4_FIFO_DATA_ODD 0x1004
-
-#define R128_SCALE_3D_CNTL 0x1a00
-# define R128_SCALE_DITHER_ERR_DIFF (0 << 1)
-# define R128_SCALE_DITHER_TABLE (1 << 1)
-# define R128_TEX_CACHE_SIZE_FULL (0 << 2)
-# define R128_TEX_CACHE_SIZE_HALF (1 << 2)
-# define R128_DITHER_INIT_CURR (0 << 3)
-# define R128_DITHER_INIT_RESET (1 << 3)
-# define R128_ROUND_24BIT (1 << 4)
-# define R128_TEX_CACHE_DISABLE (1 << 5)
-# define R128_SCALE_3D_NOOP (0 << 6)
-# define R128_SCALE_3D_SCALE (1 << 6)
-# define R128_SCALE_3D_TEXMAP_SHADE (2 << 6)
-# define R128_SCALE_PIX_BLEND (0 << 8)
-# define R128_SCALE_PIX_REPLICATE (1 << 8)
-# define R128_TEX_CACHE_SPLIT (1 << 9)
-# define R128_APPLE_YUV_MODE (1 << 10)
-# define R128_TEX_CACHE_PALLETE_MODE (1 << 11)
-# define R128_ALPHA_COMB_ADD_CLAMP (0 << 12)
-# define R128_ALPHA_COMB_ADD_NCLAMP (1 << 12)
-# define R128_ALPHA_COMB_SUB_SRC_DST_CLAMP (2 << 12)
-# define R128_ALPHA_COMB_SUB_SRC_DST_NCLAMP (3 << 12)
-# define R128_ALPHA_COMB_FCN_MASK (3 << 12)
-# define R128_FOG_VERTEX (0 << 14)
-# define R128_FOG_TABLE (1 << 14)
-# define R128_SIGNED_DST_CLAMP (1 << 15)
-
-# define R128_ALPHA_BLEND_ZERO (0 )
-# define R128_ALPHA_BLEND_ONE (1 )
-# define R128_ALPHA_BLEND_SRCCOLOR (2 )
-# define R128_ALPHA_BLEND_INVSRCCOLOR (3 )
-# define R128_ALPHA_BLEND_SRCALPHA (4 )
-# define R128_ALPHA_BLEND_INVSRCALPHA (5 )
-# define R128_ALPHA_BLEND_DSTALPHA (6 )
-# define R128_ALPHA_BLEND_INVDSTALPHA (7 )
-# define R128_ALPHA_BLEND_DSTCOLOR (8 )
-# define R128_ALPHA_BLEND_INVDSTCOLOR (9 )
-# define R128_ALPHA_BLEND_SAT (10) /* aka SRCALPHASAT */
-# define R128_ALPHA_BLEND_BLEND (11) /* aka BOTHSRCALPHA */
-# define R128_ALPHA_BLEND_INVBLEND (12) /* aka BOTHINVSRCALPHA */
-# define R128_ALPHA_BLEND_MASK (15)
-
-# define R128_ALPHA_BLEND_SRC_SHIFT (16)
-# define R128_ALPHA_BLEND_DST_SHIFT (20)
-
-# define R128_ALPHA_TEST_NEVER (0 << 24)
-# define R128_ALPHA_TEST_LESS (1 << 24)
-# define R128_ALPHA_TEST_LESSEQUAL (2 << 24)
-# define R128_ALPHA_TEST_EQUAL (3 << 24)
-# define R128_ALPHA_TEST_GREATEREQUAL (4 << 24)
-# define R128_ALPHA_TEST_GREATER (5 << 24)
-# define R128_ALPHA_TEST_NEQUAL (6 << 24)
-# define R128_ALPHA_TEST_ALWAYS (7 << 24)
-# define R128_ALPHA_TEST_MASK (7 << 24)
-# define R128_COMPOSITE_SHADOW_CMP_EQUAL (0 << 28)
-# define R128_COMPOSITE_SHADOW_CMP_NEQUAL (1 << 28)
-# define R128_COMPOSITE_SHADOW (1 << 29)
-# define R128_TEX_MAP_ALPHA_IN_TEXTURE (1 << 30)
-# define R128_TEX_CACHE_LINE_SIZE_8QW (0 << 31)
-# define R128_TEX_CACHE_LINE_SIZE_4QW (1 << 31)
-#define R128_SCALE_3D_DATATYPE 0x1a20
-
-#define R128_SETUP_CNTL 0x1bc4
-# define R128_DONT_START_TRIANGLE (1 << 0)
-# define R128_Z_BIAS (0 << 1)
-# define R128_DONT_START_ANY_ON (1 << 2)
-# define R128_COLOR_SOLID_COLOR (0 << 3)
-# define R128_COLOR_FLAT_VERT_1 (1 << 3)
-# define R128_COLOR_FLAT_VERT_2 (2 << 3)
-# define R128_COLOR_FLAT_VERT_3 (3 << 3)
-# define R128_COLOR_GOURAUD (4 << 3)
-# define R128_PRIM_TYPE_TRI (0 << 7)
-# define R128_PRIM_TYPE_LINE (1 << 7)
-# define R128_PRIM_TYPE_POINT (2 << 7)
-# define R128_PRIM_TYPE_POLY_EDGE (3 << 7)
-# define R128_TEXTURE_ST_MULT_W (0 << 9)
-# define R128_TEXTURE_ST_DIRECT (1 << 9)
-# define R128_STARTING_VERTEX_1 (1 << 14)
-# define R128_STARTING_VERTEX_2 (2 << 14)
-# define R128_STARTING_VERTEX_3 (3 << 14)
-# define R128_ENDING_VERTEX_1 (1 << 16)
-# define R128_ENDING_VERTEX_2 (2 << 16)
-# define R128_ENDING_VERTEX_3 (3 << 16)
-# define R128_SU_POLY_LINE_LAST (0 << 18)
-# define R128_SU_POLY_LINE_NOT_LAST (1 << 18)
-# define R128_SUB_PIX_2BITS (0 << 19)
-# define R128_SUB_PIX_4BITS (1 << 19)
-# define R128_SET_UP_CONTINUE (1 << 31)
-
-#define R128_WINDOW_XY_OFFSET 0x1bcc
-# define R128_WINDOW_Y_SHIFT 4
-# define R128_WINDOW_X_SHIFT 20
-
-#define R128_Z_OFFSET_C 0x1c90
-#define R128_Z_PITCH_C 0x1c94
-# define R128_Z_TILE (1 << 16)
-#define R128_Z_STEN_CNTL_C 0x1c98
-# define R128_Z_PIX_WIDTH_16 (0 << 1)
-# define R128_Z_PIX_WIDTH_24 (1 << 1)
-# define R128_Z_PIX_WIDTH_32 (2 << 1)
-# define R128_Z_PIX_WIDTH_MASK (3 << 1)
-# define R128_Z_TEST_NEVER (0 << 4)
-# define R128_Z_TEST_LESS (1 << 4)
-# define R128_Z_TEST_LESSEQUAL (2 << 4)
-# define R128_Z_TEST_EQUAL (3 << 4)
-# define R128_Z_TEST_GREATEREQUAL (4 << 4)
-# define R128_Z_TEST_GREATER (5 << 4)
-# define R128_Z_TEST_NEQUAL (6 << 4)
-# define R128_Z_TEST_ALWAYS (7 << 4)
-# define R128_Z_TEST_MASK (7 << 4)
-# define R128_STENCIL_TEST_NEVER (0 << 12)
-# define R128_STENCIL_TEST_LESS (1 << 12)
-# define R128_STENCIL_TEST_LESSEQUAL (2 << 12)
-# define R128_STENCIL_TEST_EQUAL (3 << 12)
-# define R128_STENCIL_TEST_GREATEREQUAL (4 << 12)
-# define R128_STENCIL_TEST_GREATER (5 << 12)
-# define R128_STENCIL_TEST_NEQUAL (6 << 12)
-# define R128_STENCIL_TEST_ALWAYS (7 << 12)
-# define R128_STENCIL_TEST_MASK (7 << 12)
-# define R128_STENCIL_S_FAIL_KEEP (0 << 16)
-# define R128_STENCIL_S_FAIL_ZERO (1 << 16)
-# define R128_STENCIL_S_FAIL_REPLACE (2 << 16)
-# define R128_STENCIL_S_FAIL_INC (3 << 16)
-# define R128_STENCIL_S_FAIL_DEC (4 << 16)
-# define R128_STENCIL_S_FAIL_INV (5 << 16)
-# define R128_STENCIL_S_FAIL_INC_WRAP (6 << 16) /* GUESS */
-# define R128_STENCIL_S_FAIL_DEC_WRAP (7 << 16) /* GUESS */
-# define R128_STENCIL_S_FAIL_MASK (7 << 16)
-# define R128_STENCIL_ZPASS_KEEP (0 << 20)
-# define R128_STENCIL_ZPASS_ZERO (1 << 20)
-# define R128_STENCIL_ZPASS_REPLACE (2 << 20)
-# define R128_STENCIL_ZPASS_INC (3 << 20)
-# define R128_STENCIL_ZPASS_DEC (4 << 20)
-# define R128_STENCIL_ZPASS_INV (5 << 20)
-# define R128_STENCIL_ZPASS_INC_WRAP (6 << 20) /* GUESS */
-# define R128_STENCIL_ZPASS_DEC_WRAP (7 << 20) /* GUESS */
-# define R128_STENCIL_ZPASS_MASK (7 << 20)
-# define R128_STENCIL_ZFAIL_KEEP (0 << 24)
-# define R128_STENCIL_ZFAIL_ZERO (1 << 24)
-# define R128_STENCIL_ZFAIL_REPLACE (2 << 24)
-# define R128_STENCIL_ZFAIL_INC (3 << 24)
-# define R128_STENCIL_ZFAIL_DEC (4 << 24)
-# define R128_STENCIL_ZFAIL_INV (5 << 24)
-# define R128_STENCIL_ZFAIL_INC_WRAP (6 << 24) /* GUESS */
-# define R128_STENCIL_ZFAIL_DEC_WRAP (7 << 24) /* GUESS */
-# define R128_STENCIL_ZFAIL_MASK (7 << 24)
-#define R128_TEX_CNTL_C 0x1c9c
-# define R128_Z_ENABLE (1 << 0)
-# define R128_Z_WRITE_ENABLE (1 << 1)
-# define R128_STENCIL_ENABLE (1 << 3)
-# define R128_SHADE_ENABLE (0 << 4)
-# define R128_TEXMAP_ENABLE (1 << 4)
-# define R128_SEC_TEXMAP_ENABLE (1 << 5)
-# define R128_FOG_ENABLE (1 << 7)
-# define R128_DITHER_ENABLE (1 << 8)
-# define R128_ALPHA_ENABLE (1 << 9)
-# define R128_ALPHA_TEST_ENABLE (1 << 10)
-# define R128_SPEC_LIGHT_ENABLE (1 << 11)
-# define R128_TEX_CHROMA_KEY_ENABLE (1 << 12)
-# define R128_ALPHA_IN_TEX_COMPLETE_A (0 << 13)
-# define R128_ALPHA_IN_TEX_LSB_A (1 << 13)
-# define R128_LIGHT_DIS (0 << 14)
-# define R128_LIGHT_COPY (1 << 14)
-# define R128_LIGHT_MODULATE (2 << 14)
-# define R128_LIGHT_ADD (3 << 14)
-# define R128_LIGHT_BLEND_CONSTANT (4 << 14)
-# define R128_LIGHT_BLEND_TEXTURE (5 << 14)
-# define R128_LIGHT_BLEND_VERTEX (6 << 14)
-# define R128_LIGHT_BLEND_CONST_COLOR (7 << 14)
-# define R128_ALPHA_LIGHT_DIS (0 << 18)
-# define R128_ALPHA_LIGHT_COPY (1 << 18)
-# define R128_ALPHA_LIGHT_MODULATE (2 << 18)
-# define R128_ALPHA_LIGHT_ADD (3 << 18)
-# define R128_ANTI_ALIAS (1 << 21)
-# define R128_TEX_CACHE_FLUSH (1 << 23)
-# define R128_LOD_BIAS_SHIFT 24
-# define R128_LOD_BIAS_MASK (0xff << 24)
-#define R128_MISC_3D_STATE_CNTL_REG 0x1ca0
-# define R128_REF_ALPHA_MASK 0xff
-# define R128_MISC_SCALE_3D_NOOP (0 << 8)
-# define R128_MISC_SCALE_3D_SCALE (1 << 8)
-# define R128_MISC_SCALE_3D_TEXMAP_SHADE (2 << 8)
-# define R128_MISC_SCALE_PIX_BLEND (0 << 10)
-# define R128_MISC_SCALE_PIX_REPLICATE (1 << 10)
-/* Bits [14:12] are the same as R128_SCALE_3D_CNTL */
-/* Bit [15] is unknown */
-/* Bits [26:16] are the same as R128_SCALE_3D_CNTL */
-/* Bits [31:27] are unknown */
-
-#define R128_TEXTURE_CLR_CMP_CLR_C 0x1ca4
-#define R128_TEXTURE_CLR_CMP_MSK_C 0x1ca8
-#define R128_FOG_COLOR_C 0x1cac
-# define R128_FOG_BLUE_SHIFT 0
-# define R128_FOG_GREEN_SHIFT 8
-# define R128_FOG_RED_SHIFT 16
-#define R128_PRIM_TEX_CNTL_C 0x1cb0
-# define R128_MIN_BLEND_NEAREST (0 << 1)
-# define R128_MIN_BLEND_LINEAR (1 << 1)
-# define R128_MIN_BLEND_MIPNEAREST (2 << 1)
-# define R128_MIN_BLEND_MIPLINEAR (3 << 1)
-# define R128_MIN_BLEND_LINEARMIPNEAREST (4 << 1)
-# define R128_MIN_BLEND_LINEARMIPLINEAR (5 << 1)
-# define R128_MIN_BLEND_MASK (7 << 1)
-# define R128_MAG_BLEND_NEAREST (0 << 4)
-# define R128_MAG_BLEND_LINEAR (1 << 4)
-# define R128_MAG_BLEND_MASK (7 << 4)
-# define R128_MIP_MAP_DISABLE (1 << 7)
-# define R128_TEX_CLAMP_S_WRAP (0 << 8)
-# define R128_TEX_CLAMP_S_MIRROR (1 << 8)
-# define R128_TEX_CLAMP_S_CLAMP (2 << 8)
-# define R128_TEX_CLAMP_S_BORDER_COLOR (3 << 8)
-# define R128_TEX_CLAMP_S_MASK (3 << 8)
-# define R128_TEX_WRAP_S (1 << 10)
-# define R128_TEX_CLAMP_T_WRAP (0 << 11)
-# define R128_TEX_CLAMP_T_MIRROR (1 << 11)
-# define R128_TEX_CLAMP_T_CLAMP (2 << 11)
-# define R128_TEX_CLAMP_T_BORDER_COLOR (3 << 11)
-# define R128_TEX_CLAMP_T_MASK (3 << 11)
-# define R128_TEX_WRAP_T (1 << 13)
-# define R128_TEX_PERSPECTIVE_DISABLE (1 << 14)
-# define R128_DATATYPE_VQ (0 << 16)
-# define R128_DATATYPE_CI4 (1 << 16)
-# define R128_DATATYPE_CI8 (2 << 16)
-# define R128_DATATYPE_ARGB1555 (3 << 16)
-# define R128_DATATYPE_RGB565 (4 << 16)
-# define R128_DATATYPE_RGB888 (5 << 16)
-# define R128_DATATYPE_ARGB8888 (6 << 16)
-# define R128_DATATYPE_RGB332 (7 << 16)
-# define R128_DATATYPE_Y8 (8 << 16)
-# define R128_DATATYPE_RGB8 (9 << 16)
-# define R128_DATATYPE_CI16 (10 << 16)
-# define R128_DATATYPE_YVYU422 (11 << 16)
-# define R128_DATATYPE_VYUY422 (12 << 16)
-# define R128_DATATYPE_AYUV444 (14 << 16)
-# define R128_DATATYPE_ARGB4444 (15 << 16)
-# define R128_PALLETE_EITHER (0 << 20)
-# define R128_PALLETE_1 (1 << 20)
-# define R128_PALLETE_2 (2 << 20)
-# define R128_PSEUDOCOLOR_DT_RGB565 (0 << 24)
-# define R128_PSEUDOCOLOR_DT_ARGB1555 (1 << 24)
-# define R128_PSEUDOCOLOR_DT_ARGB4444 (2 << 24)
-#define R128_PRIM_TEXTURE_COMBINE_CNTL_C 0x1cb4
-# define R128_COMB_DIS (0 << 0)
-# define R128_COMB_COPY (1 << 0)
-# define R128_COMB_COPY_INP (2 << 0)
-# define R128_COMB_MODULATE (3 << 0)
-# define R128_COMB_MODULATE2X (4 << 0)
-# define R128_COMB_MODULATE4X (5 << 0)
-# define R128_COMB_ADD (6 << 0)
-# define R128_COMB_ADD_SIGNED (7 << 0)
-# define R128_COMB_BLEND_VERTEX (8 << 0)
-# define R128_COMB_BLEND_TEXTURE (9 << 0)
-# define R128_COMB_BLEND_CONST (10 << 0)
-# define R128_COMB_BLEND_PREMULT (11 << 0)
-# define R128_COMB_BLEND_PREV (12 << 0)
-# define R128_COMB_BLEND_PREMULT_INV (13 << 0)
-# define R128_COMB_ADD_SIGNED2X (14 << 0)
-# define R128_COMB_BLEND_CONST_COLOR (15 << 0)
-# define R128_COMB_MASK (15 << 0)
-# define R128_COLOR_FACTOR_CONST_COLOR (0 << 4)
-# define R128_COLOR_FACTOR_NCONST_COLOR (1 << 4)
-# define R128_COLOR_FACTOR_TEX (4 << 4)
-# define R128_COLOR_FACTOR_NTEX (5 << 4)
-# define R128_COLOR_FACTOR_ALPHA (6 << 4)
-# define R128_COLOR_FACTOR_NALPHA (7 << 4)
-# define R128_COLOR_FACTOR_PREV_COLOR (8 << 4)
-# define R128_COLOR_FACTOR_MASK (15 << 4)
-# define R128_COMB_FCN_MSB (1 << 8)
-# define R128_INPUT_FACTOR_CONST_COLOR (2 << 10)
-# define R128_INPUT_FACTOR_CONST_ALPHA (3 << 10)
-# define R128_INPUT_FACTOR_INT_COLOR (4 << 10)
-# define R128_INPUT_FACTOR_INT_ALPHA (5 << 10)
-# define R128_INPUT_FACTOR_MASK (15 << 10)
-# define R128_COMB_ALPHA_DIS (0 << 14)
-# define R128_COMB_ALPHA_COPY (1 << 14)
-# define R128_COMB_ALPHA_COPY_INP (2 << 14)
-# define R128_COMB_ALPHA_MODULATE (3 << 14)
-# define R128_COMB_ALPHA_MODULATE2X (4 << 14)
-# define R128_COMB_ALPHA_MODULATE4X (5 << 14)
-# define R128_COMB_ALPHA_ADD (6 << 14)
-# define R128_COMB_ALPHA_ADD_SIGNED (7 << 14)
-# define R128_COMB_ALPHA_ADD_SIGNED2X (14 << 14)
-# define R128_COMB_ALPHA_MASK (15 << 14)
-# define R128_ALPHA_FACTOR_TEX_ALPHA (6 << 18)
-# define R128_ALPHA_FACTOR_NTEX_ALPHA (7 << 18)
-# define R128_ALPHA_FACTOR_MASK (15 << 18)
-# define R128_INP_FACTOR_A_CONST_ALPHA (1 << 25)
-# define R128_INP_FACTOR_A_INT_ALPHA (2 << 25)
-# define R128_INP_FACTOR_A_MASK (7 << 25)
-#define R128_TEX_SIZE_PITCH_C 0x1cb8
-# define R128_TEX_PITCH_SHIFT 0
-# define R128_TEX_SIZE_SHIFT 4
-# define R128_TEX_HEIGHT_SHIFT 8
-# define R128_TEX_MIN_SIZE_SHIFT 12
-# define R128_SEC_TEX_PITCH_SHIFT 16
-# define R128_SEC_TEX_SIZE_SHIFT 20
-# define R128_SEC_TEX_HEIGHT_SHIFT 24
-# define R128_SEC_TEX_MIN_SIZE_SHIFT 28
-# define R128_TEX_PITCH_MASK (0x0f << 0)
-# define R128_TEX_SIZE_MASK (0x0f << 4)
-# define R128_TEX_HEIGHT_MASK (0x0f << 8)
-# define R128_TEX_MIN_SIZE_MASK (0x0f << 12)
-# define R128_SEC_TEX_PITCH_MASK (0x0f << 16)
-# define R128_SEC_TEX_SIZE_MASK (0x0f << 20)
-# define R128_SEC_TEX_HEIGHT_MASK (0x0f << 24)
-# define R128_SEC_TEX_MIN_SIZE_MASK (0x0f << 28)
-# define R128_TEX_SIZE_PITCH_SHIFT 0
-# define R128_SEC_TEX_SIZE_PITCH_SHIFT 16
-# define R128_TEX_SIZE_PITCH_MASK (0xffff << 0)
-# define R128_SEC_TEX_SIZE_PITCH_MASK (0xffff << 16)
-#define R128_PRIM_TEX_0_OFFSET_C 0x1cbc
-#define R128_PRIM_TEX_1_OFFSET_C 0x1cc0
-#define R128_PRIM_TEX_2_OFFSET_C 0x1cc4
-#define R128_PRIM_TEX_3_OFFSET_C 0x1cc8
-#define R128_PRIM_TEX_4_OFFSET_C 0x1ccc
-#define R128_PRIM_TEX_5_OFFSET_C 0x1cd0
-#define R128_PRIM_TEX_6_OFFSET_C 0x1cd4
-#define R128_PRIM_TEX_7_OFFSET_C 0x1cd8
-#define R128_PRIM_TEX_8_OFFSET_C 0x1cdc
-#define R128_PRIM_TEX_9_OFFSET_C 0x1ce0
-#define R128_PRIM_TEX_10_OFFSET_C 0x1ce4
-# define R128_TEX_NO_TILE (0 << 30)
-# define R128_TEX_TILED_BY_HOST (1 << 30)
-# define R128_TEX_TILED_BY_STORAGE (2 << 30)
-# define R128_TEX_TILED_BY_STORAGE2 (3 << 30)
-
-#define R128_SEC_TEX_CNTL_C 0x1d00
-# define R128_SEC_SELECT_PRIM_ST (0 << 0)
-# define R128_SEC_SELECT_SEC_ST (1 << 0)
-#define R128_SEC_TEX_COMBINE_CNTL_C 0x1d04
-# define R128_INPUT_FACTOR_PREV_COLOR (8 << 10)
-# define R128_INPUT_FACTOR_PREV_ALPHA (9 << 10)
-# define R128_INP_FACTOR_A_PREV_ALPHA (4 << 25)
-#define R128_SEC_TEX_0_OFFSET_C 0x1d08
-#define R128_SEC_TEX_1_OFFSET_C 0x1d0c
-#define R128_SEC_TEX_2_OFFSET_C 0x1d10
-#define R128_SEC_TEX_3_OFFSET_C 0x1d14
-#define R128_SEC_TEX_4_OFFSET_C 0x1d18
-#define R128_SEC_TEX_5_OFFSET_C 0x1d1c
-#define R128_SEC_TEX_6_OFFSET_C 0x1d20
-#define R128_SEC_TEX_7_OFFSET_C 0x1d24
-#define R128_SEC_TEX_8_OFFSET_C 0x1d28
-#define R128_SEC_TEX_9_OFFSET_C 0x1d2c
-#define R128_SEC_TEX_10_OFFSET_C 0x1d30
-#define R128_CONSTANT_COLOR_C 0x1d34
-# define R128_CONSTANT_BLUE_SHIFT 0
-# define R128_CONSTANT_GREEN_SHIFT 8
-# define R128_CONSTANT_RED_SHIFT 16
-# define R128_CONSTANT_ALPHA_SHIFT 24
-#define R128_PRIM_TEXTURE_BORDER_COLOR_C 0x1d38
-# define R128_PRIM_TEX_BORDER_BLUE_SHIFT 0
-# define R128_PRIM_TEX_BORDER_GREEN_SHIFT 8
-# define R128_PRIM_TEX_BORDER_RED_SHIFT 16
-# define R128_PRIM_TEX_BORDER_ALPHA_SHIFT 24
-#define R128_SEC_TEXTURE_BORDER_COLOR_C 0x1d3c
-# define R128_SEC_TEX_BORDER_BLUE_SHIFT 0
-# define R128_SEC_TEX_BORDER_GREEN_SHIFT 8
-# define R128_SEC_TEX_BORDER_RED_SHIFT 16
-# define R128_SEC_TEX_BORDER_ALPHA_SHIFT 24
-#define R128_STEN_REF_MASK_C 0x1d40
-# define R128_STEN_REFERENCE_SHIFT 0
-# define R128_STEN_MASK_SHIFT 16
-# define R128_STEN_WRITE_MASK_SHIFT 24
-#define R128_PLANE_3D_MASK_C 0x1d44
-#define R128_TEX_CACHE_STAT_COUNT 0x1974
-
-
- /* Constants */
-#define R128_AGP_TEX_OFFSET 0x02000000
-
-#define R128_LAST_FRAME_REG R128_GUI_SCRATCH_REG0
-
- /* CCE packet types */
-#define R128_CCE_PACKET0 0x00000000
-#define R128_CCE_PACKET0_ONE_REG_WR 0x00008000
-#define R128_CCE_PACKET1 0x40000000
-#define R128_CCE_PACKET2 0x80000000
-#define R128_CCE_PACKET3 0xC0000000
-#define R128_CCE_PACKET3_NOP 0xC0001000
-#define R128_CCE_PACKET3_PAINT 0xC0001100
-#define R128_CCE_PACKET3_BITBLT 0xC0001200
-#define R128_CCE_PACKET3_SMALLTEXT 0xC0001300
-#define R128_CCE_PACKET3_HOSTDATA_BLT 0xC0001400
-#define R128_CCE_PACKET3_POLYLINE 0xC0001500
-#define R128_CCE_PACKET3_SCALING 0xC0001600
-#define R128_CCE_PACKET3_TRANS_SCALING 0xC0001700
-#define R128_CCE_PACKET3_POLYSCANLINES 0xC0001800
-#define R128_CCE_PACKET3_NEXT_CHAR 0xC0001900
-#define R128_CCE_PACKET3_PAINT_MULTI 0xC0001A00
-#define R128_CCE_PACKET3_BITBLT_MULTI 0xC0001B00
-#define R128_CCE_PACKET3_PLY_NEXTSCAN 0xC0001D00
-#define R128_CCE_PACKET3_SET_SCISSORS 0xC0001E00
-#define R128_CCE_PACKET3_SET_MODE24BPP 0xC0001F00
-#define R128_CCE_PACKET3_CNTL_PAINT 0xC0009100
-#define R128_CCE_PACKET3_CNTL_BITBLT 0xC0009200
-#define R128_CCE_PACKET3_CNTL_SMALLTEXT 0xC0009300
-#define R128_CCE_PACKET3_CNTL_HOSTDATA_BLT 0xC0009400
-#define R128_CCE_PACKET3_CNTL_POLYLINE 0xC0009500
-#define R128_CCE_PACKET3_CNTL_SCALING 0xC0009600
-#define R128_CCE_PACKET3_CNTL_TRANS_SCALING 0xC0009700
-#define R128_CCE_PACKET3_CNTL_POLYSCANLINES 0xC0009800
-#define R128_CCE_PACKET3_CNTL_NEXT_CHAR 0xC0009900
-#define R128_CCE_PACKET3_CNTL_PAINT_MULTI 0xC0009A00
-#define R128_CCE_PACKET3_CNTL_BITBLT_MULTI 0xC0009B00
-#define R128_CCE_PACKET3_CNTL_TRANS_BITBLT 0xC0009C00
-#define R128_CCE_PACKET3_3D_SAVE_CONTEXT 0xC0002000
-#define R128_CCE_PACKET3_3D_PLAY_CONTEXT 0xC0002100
-#define R128_CCE_PACKET3_3D_RNDR_GEN_INDX_PRIM 0xC0002300
-#define R128_CCE_PACKET3_3D_RNDR_GEN_PRIM 0xC0002500
-#define R128_CCE_PACKET3_LOAD_PALETTE 0xC0002C00
-#define R128_CCE_PACKET3_PURGE 0xC0002D00
-#define R128_CCE_PACKET3_NEXT_VERTEX_BUNDLE 0xC0002E00
-# define R128_CCE_PACKET_MASK 0xC0000000
-# define R128_CCE_PACKET_COUNT_MASK 0x3fff0000
-# define R128_CCE_PACKET_MAX_DWORDS (1 << 12)
-# define R128_CCE_PACKET0_REG_MASK 0x000007ff
-# define R128_CCE_PACKET1_REG0_MASK 0x000007ff
-# define R128_CCE_PACKET1_REG1_MASK 0x003ff800
-
-#define R128_CCE_VC_FRMT_RHW 0x00000001
-#define R128_CCE_VC_FRMT_DIFFUSE_BGR 0x00000002
-#define R128_CCE_VC_FRMT_DIFFUSE_A 0x00000004
-#define R128_CCE_VC_FRMT_DIFFUSE_ARGB 0x00000008
-#define R128_CCE_VC_FRMT_SPEC_BGR 0x00000010
-#define R128_CCE_VC_FRMT_SPEC_F 0x00000020
-#define R128_CCE_VC_FRMT_SPEC_FRGB 0x00000040
-#define R128_CCE_VC_FRMT_S_T 0x00000080
-#define R128_CCE_VC_FRMT_S2_T2 0x00000100
-#define R128_CCE_VC_FRMT_RHW2 0x00000200
-
-#define R128_CCE_VC_CNTL_PRIM_TYPE_NONE 0x00000000
-#define R128_CCE_VC_CNTL_PRIM_TYPE_POINT 0x00000001
-#define R128_CCE_VC_CNTL_PRIM_TYPE_LINE 0x00000002
-#define R128_CCE_VC_CNTL_PRIM_TYPE_POLY_LINE 0x00000003
-#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST 0x00000004
-#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_FAN 0x00000005
-#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_STRIP 0x00000006
-#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_TYPE2 0x00000007
-#define R128_CCE_VC_CNTL_PRIM_WALK_IND 0x00000010
-#define R128_CCE_VC_CNTL_PRIM_WALK_LIST 0x00000020
-#define R128_CCE_VC_CNTL_PRIM_WALK_RING 0x00000030
-#define R128_CCE_VC_CNTL_NUM_SHIFT 16
-
-/* hmm copyed blindly (no specs) from radeon.h ... */
-#define R128_RE_TOP_LEFT 0x26c0
-# define R128_RE_LEFT_SHIFT 0
-# define R128_RE_TOP_SHIFT 16
-#define R128_RE_WIDTH_HEIGHT 0x1c44
-# define R128_RE_WIDTH_SHIFT 0
-# define R128_RE_HEIGHT_SHIFT 16
-
-#endif
diff --git a/src/mesa/drivers/dri/r128/server/r128_version.h b/src/mesa/drivers/dri/r128/server/r128_version.h
deleted file mode 100644
index 783711ef971..00000000000
--- a/src/mesa/drivers/dri/r128/server/r128_version.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2000 through 2003 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _R128_VERSION_H_
-#define _R128_VERSION_H_ 1
-
-#undef R128_NAME
-#undef R128_DRIVER_NAME
-#undef R128_VERSION_MAJOR
-#undef R128_VERSION_MINOR
-#undef R128_VERSION_PATCH
-#undef R128_VERSION_CURRENT
-#undef R128_VERSION_EVALUATE
-#undef R128_VERSION_STRINGIFY
-#undef R128_VERSION_NAME
-
-#define R128_NAME "R128"
-#define R128_DRIVER_NAME "r128"
-
-#define R128_VERSION_MAJOR 4
-#define R128_VERSION_MINOR 0
-#define R128_VERSION_PATCH 1
-
-#ifndef R128_VERSION_EXTRA
-#define R128_VERSION_EXTRA ""
-#endif
-
-#define R128_VERSION_CURRENT \
- ((R128_VERSION_MAJOR << 20) | \
- (R128_VERSION_MINOR << 10) | \
- (R128_VERSION_PATCH))
-
-#define R128_VERSION_EVALUATE(__x) #__x
-#define R128_VERSION_STRINGIFY(_x) R128_VERSION_EVALUATE(_x)
-#define R128_VERSION_NAME \
- R128_VERSION_STRINGIFY(R128_VERSION_MAJOR) "." \
- R128_VERSION_STRINGIFY(R128_VERSION_MINOR) "." \
- R128_VERSION_STRINGIFY(R128_VERSION_MINOR) R128_VERSION_EXTRA
-
-#endif /* _R128_VERSION_H_ */
diff --git a/src/mesa/drivers/dri/savage/Makefile b/src/mesa/drivers/dri/savage/Makefile
deleted file mode 100644
index 03be3468da9..00000000000
--- a/src/mesa/drivers/dri/savage/Makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-# src/mesa/drivers/dri/r128/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = savage_dri.so
-
-include ../Makefile.defines
-
-DRIVER_SOURCES = \
- savage_xmesa.c \
- savagedd.c \
- savagestate.c \
- savagetex.c \
- savagetris.c \
- savagerender.c \
- savageioctl.c \
- savagespan.c
-
-C_SOURCES = \
- $(COMMON_SOURCES) \
- $(DRIVER_SOURCES)
-
-ASM_SOURCES =
-
-
-include ../Makefile.targets
-
diff --git a/src/mesa/drivers/dri/savage/savage_3d_reg.h b/src/mesa/drivers/dri/savage/savage_3d_reg.h
deleted file mode 100644
index 45733cdf929..00000000000
--- a/src/mesa/drivers/dri/savage/savage_3d_reg.h
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#ifndef SAVAGE_3D_REG_H
-#define SAVAGE_3D_REG_H
-
-#define VIDEO_MEM_ADR 0x02
-#define SYSTEM_MEM_ADR 0x01
-#define AGP_MEM_ADR 0x03
-
-/***********************************************************
-
- ----------- 3D ENGINE UNIT Registers -------------
-
- *********************************************************/
-
-typedef union
-{
- struct
- {
- unsigned reserved : 4;
- unsigned ofs : 28;
- }ni;
- uint32_t ui;
-} savageRegZPixelOffset;
-
-/* This reg exists only on Savage4. */
-typedef union
-{
- struct
- {
- unsigned cmpFunc : 3;
- unsigned stencilEn : 1;
- unsigned readMask : 8;
- unsigned writeMask : 8;
- unsigned failOp : 3;
- unsigned passZfailOp : 3;
- unsigned passZpassOp : 3;
- unsigned reserved : 3;
- }ni;
- uint32_t ui;
-} savageRegStencilCtrl;
-
-/**************************
- Texture Registers
-**************************/
-/* The layout of this reg differs between Savage4 and Savage3D. */
-typedef union
-{
- struct
- {
- unsigned tex0Width : 4;
- unsigned tex0Height : 4;
- unsigned tex0Fmt : 4;
- unsigned tex1Width : 4;
- unsigned tex1Height : 4;
- unsigned tex1Fmt : 4;
- unsigned texBLoopEn : 1;
- unsigned tex0En : 1;
- unsigned tex1En : 1;
- unsigned orthProjEn : 1;
- unsigned reserved : 1;
- unsigned palSize : 2;
- unsigned newPal : 1;
- }ni;
- uint32_t ui;
-} savageRegTexDescr_s4;
-typedef union
-{
- struct
- {
- unsigned texWidth : 4;
- unsigned reserved1 : 4;
- unsigned texHeight : 4;
- unsigned reserved2 : 4;
- /* Savage3D supports only the first 8 texture formats defined in
- enum TexFmt in savge_bci.h. */
- unsigned texFmt : 3;
- unsigned palSize : 2;
- unsigned reserved3 : 10;
- unsigned newPal : 1;
- }ni;
- uint32_t ui;
-} savageRegTexDescr_s3d;
-
-/* The layout of this reg is the same on Savage4 and Savage3D,
- but the Savage4 has two of them, Savage3D has only one. */
-typedef union
-{
- struct
- {
- unsigned inSysTex : 1;
- unsigned inAGPTex : 1;
- unsigned reserved : 1;
- unsigned addr : 29;
- }ni;
- uint32_t ui;
-} savageRegTexAddr;
-
-/* The layout of this reg is the same on Savage4 and Savage3D. */
-typedef union
-{
- struct
- {
- unsigned reserved : 3;
- unsigned addr : 29;
- }ni;
- uint32_t ui;
-} savageRegTexPalAddr;
-
-/* The layout of this reg on Savage4 and Savage3D are very similar. */
-typedef union
-{
- struct
- {
- unsigned xprClr0 : 16;
- unsigned xprClr1 : 16; /* this is reserved on Savage3D */
- }ni;
- uint32_t ui;
-} savageRegTexXprClr; /* transparency color in RGB565 format*/
-
-/* The layout of this reg differs between Savage4 and Savage3D.
- * Savage4 has two of them, Savage3D has only one. */
-typedef union
-{
- struct
- {
- unsigned filterMode : 2;
- unsigned mipmapEnable : 1;
- unsigned dBias : 9;
- unsigned dMax : 4;
- unsigned uMode : 2;
- unsigned vMode : 2;
- unsigned useDFraction : 1;
- unsigned texXprEn : 1;
- unsigned clrBlendAlphaSel : 2;
- unsigned clrArg1CopyAlpha : 1;
- unsigned clrArg2CopyAlpha : 1;
- unsigned clrArg1Invert : 1;
- unsigned clrArg2Invert : 1;
- unsigned alphaBlendAlphaSel : 2;
- unsigned alphaArg1Invert : 1;
- unsigned alphaArg2Invert : 1;
- }ni;
- uint32_t ui;
-} savageRegTexCtrl_s4;
-typedef union
-{
- struct
- {
- unsigned filterMode : 2;
- unsigned mipmapDisable : 1;
- unsigned dBias : 9;
- unsigned uWrapEn : 1;
- unsigned vWrapEn : 1;
- unsigned wrapMode : 2;
- unsigned texEn : 1;
- unsigned useDFraction : 1;
- unsigned reserved1 : 1;
- /* Color Compare Alpha Blend Control
- 0 - reduce dest alpha to 0 or 1
- 1 - blend with destination
- The Utah-Driver doesn't know how to use it and sets it to 0. */
- unsigned CCA : 1;
- unsigned texXprEn : 1;
- unsigned reserved2 : 11;
- }ni;
- uint32_t ui;
-} savageRegTexCtrl_s3d;
-
-/* This reg exists only on Savage4. */
-typedef union
-{
- struct
- {
- unsigned colorArg1Sel : 2;
- unsigned colorArg2Sel : 3;
- unsigned colorInvAlphaEn : 1;
- unsigned colorInvArg2En : 1;
- unsigned colorPremodSel : 1;
- unsigned colorMod1Sel : 1;
- unsigned colorMod2Sel : 2;
- unsigned colorAddSel : 2;
- unsigned colorDoBlend : 1;
- unsigned colorDo2sCompl : 1;
- unsigned colorAddBiasEn : 1;
- unsigned alphaArg1Sel : 2;
- unsigned alphaArg2Sel : 3;
- unsigned alphaMod1Sel : 1;
- unsigned alphaMod2Sel : 2;
- unsigned alphaAdd0Sel : 1;
- unsigned alphaDoBlend : 1;
- unsigned alphaDo2sCompl : 1;
- unsigned colorStageClamp : 1;
- unsigned alphaStageClamp : 1;
- unsigned colorDoDiffMul : 1;
- unsigned LeftShiftVal : 2;
- }ni;
- uint32_t ui;
-} savageRegTexBlendCtrl;
-
-/* This reg exists only on Savage4. */
-typedef union
-{
- struct
- {
- unsigned blue : 8;
- unsigned green : 8;
- unsigned red : 8;
- unsigned alpha : 8;
- }ni;
- uint32_t ui;
-} savageRegTexBlendColor;
-
-/********************************
- Tiled Surface Registers
-**********************************/
-
-typedef union
-{
- struct
- {
- unsigned frmBufOffset : 13;
- unsigned reserved : 12;
- unsigned widthInTile : 6;
- unsigned bitPerPixel : 1;
- }ni;
- uint32_t ui;
-} savageRegTiledSurface;
-
-/********************************
- Draw/Shading Control Registers
-**********************************/
-
-/* This reg exists only on Savage4. */
-typedef union
-{
- struct
- {
- unsigned scissorXStart : 11;
- unsigned dPerfAccelEn : 1;
- unsigned scissorYStart : 12;
- unsigned alphaRefVal : 8;
- }ni;
- uint32_t ui;
-} savageRegDrawCtrl0;
-
-/* This reg exists only on Savage4. */
-typedef union
-{
- struct
- {
- unsigned scissorXEnd : 11;
- unsigned xyOffsetEn : 1;
- unsigned scissorYEnd : 12;
- unsigned ditherEn : 1;
- unsigned nonNormTexCoord : 1;
- unsigned cullMode : 2;
- unsigned alphaTestCmpFunc : 3;
- unsigned alphaTestEn : 1;
- }ni;
- uint32_t ui;
-} savageRegDrawCtrl1;
-
-/* This reg exists only on Savage4. */
-typedef union
-{
- struct
- {
- unsigned dstAlphaMode : 3;
-
- /**
- * This bit enables \c GL_FUNC_SUBTRACT. Like most DirectX oriented
- * hardware, there's no way to do \c GL_FUNC_REVERSE_SUBTRACT.
- *
- * \todo
- * Add support for \c GL_FUNC_SUBTRACT!
- */
- unsigned dstMinusSrc : 1;
- unsigned srcAlphaMode : 3;
- unsigned binaryFinalAlpha : 1;
- unsigned dstAlphaModeHighBit : 1;
- unsigned srcAlphaModeHighBit : 1;
- unsigned reserved1 : 15;
- unsigned wrZafterAlphaTst : 1;
- unsigned drawUpdateEn : 1;
- unsigned zUpdateEn : 1;
- unsigned flatShadeEn : 1;
- unsigned specShadeEn : 1;
- unsigned flushPdDestWrites : 1;
- unsigned flushPdZbufWrites : 1;
- }ni;
- uint32_t ui;
-} savageRegDrawLocalCtrl;
-
-/* This reg exists only on Savage3D. */
-typedef union
-{
- struct
- {
- unsigned ditherEn : 1;
- unsigned xyOffsetEn : 1;
- unsigned cullMode : 2;
- unsigned vertexCountReset : 1;
- unsigned flatShadeEn : 1;
- unsigned specShadeEn : 1;
- unsigned dstAlphaMode : 3;
- unsigned srcAlphaMode : 3;
- unsigned reserved1 : 1;
- unsigned alphaTestCmpFunc : 3;
- unsigned alphaTestEn : 1;
- unsigned alphaRefVal : 8;
- unsigned texBlendCtrl : 3;
- unsigned flushPdDestWrites : 1;
- unsigned flushPdZbufWrites : 1;
-
- /**
- * Disable perspective correct interpolation for vertex color, vertex
- * fog, and vertex alpha. For OpenGL, this should \b always be zero.
- */
- unsigned interpMode : 1;
- }ni;
- uint32_t ui;
-} savageRegDrawCtrl;
-
-#define SAVAGETBC_DECAL_S3D 0
-#define SAVAGETBC_MODULATE_S3D 1
-#define SAVAGETBC_DECALALPHA_S3D 2
-#define SAVAGETBC_MODULATEALPHA_S3D 3
-#define SAVAGETBC_4_S3D 4
-#define SAVAGETBC_5_S3D 5
-#define SAVAGETBC_COPY_S3D 6
-#define SAVAGETBC_7_S3D 7
-
-/* This reg exists only on Savage3D. */
-typedef union
-{
- struct
- {
- unsigned scissorXStart : 11;
- unsigned reserved1 : 5;
- unsigned scissorYStart : 11;
- unsigned reserved2 : 5;
- } ni;
- uint32_t ui;
-} savageRegScissorsStart;
-
-/* This reg exists only on Savage3D. */
-typedef union
-{
- struct
- {
- unsigned scissorXEnd : 11;
- unsigned reserved1 : 5;
- unsigned scissorYEnd : 11;
- unsigned reserved2 : 5;
- } ni;
- uint32_t ui;
-} savageRegScissorsEnd;
-
-/********************************
- Address Registers
-**********************************/
-
-/* I havn't found a Savage3D equivalent of this reg in the Utah-driver.
- * But Tim Roberts claims that the Savage3D supports DMA vertex and
- * command buffers. */
-typedef union
-{
- struct
- {
- unsigned isSys : 1;
- unsigned isAGP : 1;
- unsigned reserved : 1;
- unsigned addr : 29; /*quad word aligned*/
- }ni;
- uint32_t ui;
-} savageRegVertBufAddr;
-
-/* I havn't found a Savage3D equivalent of this reg in the Utah-driver.
- * But Tim Roberts claims that the Savage3D supports DMA vertex and
- * command buffers. */
-typedef union
-{
- struct
- {
- unsigned isSys : 1;
- unsigned isAGP : 1;
- unsigned reserved : 1;
- unsigned addr : 29; /*4-quad word aligned*/
- }ni;
- uint32_t ui;
-} savageRegDMABufAddr;
-
-/********************************
- H/W Debug Registers
-**********************************/
-/* The layout of this reg is the same on Savage4 and Savage3D. */
-typedef union
-{
- struct
- {
- unsigned y01 : 1;
- unsigned y12 : 1;
- unsigned y20 : 1;
- unsigned u01 : 1;
- unsigned u12 : 1;
- unsigned u20 : 1;
- unsigned v01 : 1;
- unsigned v12 : 1;
- unsigned v20 : 1;
- unsigned cullEn : 1;
- unsigned cullOrient : 1;
- unsigned loadNewTex : 1;
- unsigned loadNewPal : 1;
- unsigned doDSetup : 1;
- unsigned reserved : 17;
- unsigned kickOff : 1;
- }ni;
- uint32_t ui;
-} savageRegFlag;
-
-/********************************
- Z Buffer Registers -- Global
-**********************************/
-
-/* The layout of this reg differs between Savage4 and Savage3D. */
-typedef union
-{
- struct
- {
- unsigned zCmpFunc : 3;
- unsigned reserved1 : 2;
- unsigned zBufEn : 1;
- unsigned reserved2 : 1;
- unsigned zExpOffset : 8;
- unsigned reserved3 : 1;
- unsigned stencilRefVal : 8;
- unsigned autoZEnable : 1;
- unsigned frameID : 1;
- unsigned reserved4 : 4;
- unsigned floatZEn : 1;
- unsigned wToZEn : 1;
- }ni;
- uint32_t ui;
-} savageRegZBufCtrl_s4;
-typedef union
-{
- struct {
- unsigned zCmpFunc : 3;
- unsigned drawUpdateEn : 1;
- unsigned zUpdateEn : 1;
- unsigned zBufEn : 1;
-
- /**
- * We suspect that, in conjunction with
- * \c savageRegZBufOffset::zDepthSelect, these 2 bits are actually
- * \c stencilUpdateEn and \c stencilBufEn. If not, then some of
- * the bits in \c reserved2 may fulfill that purpose.
- */
- unsigned reserved1 : 2;
-
- unsigned zExpOffset : 8;
- unsigned wrZafterAlphaTst : 1;
- unsigned reserved2 : 15;
- }ni;
- uint32_t ui;
-} savageRegZBufCtrl_s3d;
-
-/* The layout of this reg on Savage4 and Savage3D is very similar. */
-typedef union
-{
- struct
- {
- /* In the Utah-Driver the offset is defined as 13-bit, 2k-aligned. */
- unsigned offset : 14;
- unsigned reserved : 11; /* 12-bits in Utah-driver */
- unsigned zBufWidthInTiles : 6;
-
- /**
- * 0 selects 16-bit depth buffer. On Savage4 hardware, 1 selects
- * 24-bit depth buffer (with 8-bits for stencil). Though it has never
- * been tried, we suspect that on Savage3D hardware, 1 selects 15-bit
- * depth buffer (with 1-bit for stencil).
- */
- unsigned zDepthSelect : 1;
- }ni;
- uint32_t ui;
-} savageRegZBufOffset;
-
-/* The layout of this reg is the same on Savage4 and Savage3D. */
-typedef union
-{
- struct
- {
- unsigned rLow : 6;
- unsigned reserved1 : 2;
- unsigned rHigh : 6;
- unsigned reserved2 : 2;
- unsigned wLow : 6;
- unsigned reserved3 : 2;
- unsigned wHigh : 6;
- unsigned reserved4 : 2;
- }ni;
- uint32_t ui;
-} savageRegZWatermarks;
-
-/********************************
- Fog Registers -- Global
-**********************************/
-/* The layout of this reg is the same on Savage4 and Savage3D. */
-typedef union
-{
- struct
- {
- unsigned fogClr : 24;
- unsigned expShift : 3;
- unsigned reserved : 1;
- unsigned fogEn : 1;
- unsigned fogMode : 1;
- unsigned fogEndShift : 2;
- }ni;
- uint32_t ui;
-} savageRegFogCtrl;
-
-/*not in spec, but tempo for pp and driver*/
-typedef union
-{
- struct
- {
- unsigned fogDensity : 16;
- unsigned fogStart : 16;
- }ni;
- uint32_t ui;
-} savageRegFogParam;
-
-/**************************************
- Destination Buffer Registers -- Global
-***************************************/
-
-/* The layout of this reg on Savage4 and Savage3D are very similar. */
-typedef union
-{
- struct
- {
- unsigned dstWidthInTile : 7;
- unsigned reserved : 1;
- /* In the Utah-Driver the offset is defined as 13-bit, 2k-aligned. */
- unsigned offset : 14;
- unsigned reserved1 : 7;
- /* antiAliasMode does not exist in the Utah-driver. But it includes the
- * high bit of this in the destPixFmt. However, only values 0 and 2
- * are used as dstPixFmt, so antiAliasMode is effectively always 0
- * in the Utah-driver. In other words, treat as reserved on Savage3D.*/
- unsigned antiAliasMode : 2;
- unsigned dstPixFmt : 1;
- }ni;
- uint32_t ui;
-} savageRegDestCtrl;
-
-/* The layout of this reg on Savage4 and Savage3D are very similar. */
-typedef union
-{
- struct
- {
- unsigned destReadLow : 6;
- unsigned destReadHigh : 6;
- unsigned destWriteLow : 6;
- unsigned destWriteHigh : 6;
- unsigned texRead : 4;
- unsigned reserved4 : 2;
- /* The Utah-driver calls this pixel FIFO length:
- * 00 - 240, 01 - 180, 10 - 120, 11 - 60
- * However, it is not used in either driver. */
- unsigned destFlush : 2;
- }ni;
- uint32_t ui;
-} savageRegDestTexWatermarks;
-
-/* Savage4/Twister/ProSavage register BCI addresses */
-#define SAVAGE_DRAWLOCALCTRL_S4 0x1e
-#define SAVAGE_TEXPALADDR_S4 0x1f
-#define SAVAGE_TEXCTRL0_S4 0x20
-#define SAVAGE_TEXCTRL1_S4 0x21
-#define SAVAGE_TEXADDR0_S4 0x22
-#define SAVAGE_TEXADDR1_S4 0x23
-#define SAVAGE_TEXBLEND0_S4 0x24
-#define SAVAGE_TEXBLEND1_S4 0x25
-#define SAVAGE_TEXXPRCLR_S4 0x26 /* never used */
-#define SAVAGE_TEXDESCR_S4 0x27
-#define SAVAGE_FOGTABLE_S4 0x28
-#define SAVAGE_FOGCTRL_S4 0x30
-#define SAVAGE_STENCILCTRL_S4 0x31
-#define SAVAGE_ZBUFCTRL_S4 0x32
-#define SAVAGE_ZBUFOFF_S4 0x33
-#define SAVAGE_DESTCTRL_S4 0x34
-#define SAVAGE_DRAWCTRLGLOBAL0_S4 0x35
-#define SAVAGE_DRAWCTRLGLOBAL1_S4 0x36
-#define SAVAGE_ZWATERMARK_S4 0x37
-#define SAVAGE_DESTTEXRWWATERMARK_S4 0x38
-#define SAVAGE_TEXBLENDCOLOR_S4 0x39
-/* Savage3D/MX/IC register BCI addresses */
-#define SAVAGE_TEXPALADDR_S3D 0x18
-#define SAVAGE_TEXXPRCLR_S3D 0x19 /* never used */
-#define SAVAGE_TEXADDR_S3D 0x1A
-#define SAVAGE_TEXDESCR_S3D 0x1B
-#define SAVAGE_TEXCTRL_S3D 0x1C
-#define SAVAGE_FOGTABLE_S3D 0x20
-#define SAVAGE_FOGCTRL_S3D 0x30
-#define SAVAGE_DRAWCTRL_S3D 0x31
-#define SAVAGE_ZBUFCTRL_S3D 0x32
-#define SAVAGE_ZBUFOFF_S3D 0x33
-#define SAVAGE_DESTCTRL_S3D 0x34
-#define SAVAGE_SCSTART_S3D 0x35
-#define SAVAGE_SCEND_S3D 0x36
-#define SAVAGE_ZWATERMARK_S3D 0x37
-#define SAVAGE_DESTTEXRWWATERMARK_S3D 0x38
-
-#define SAVAGE_FIRST_REG 0x18
-#define SAVAGE_NR_REGS 34
-typedef struct savage_registers_s4_t {
- uint32_t unused1[6]; /* 0x18-0x1d */
- savageRegDrawLocalCtrl drawLocalCtrl; /* 0x1e */
- savageRegTexPalAddr texPalAddr; /* 0x1f */
- savageRegTexCtrl_s4 texCtrl[2]; /* 0x20, 0x21 */
- savageRegTexAddr texAddr[2]; /* 0x22, 0x23 */
- savageRegTexBlendCtrl texBlendCtrl[2]; /* 0x24, 0x25 */
- savageRegTexXprClr texXprClr; /* 0x26 */
- savageRegTexDescr_s4 texDescr; /* 0x27 */
- uint8_t fogTable[32]; /* 0x28-0x2f (8dwords) */
- savageRegFogCtrl fogCtrl; /* 0x30 */
- savageRegStencilCtrl stencilCtrl; /* 0x31 */
- savageRegZBufCtrl_s4 zBufCtrl; /* 0x32 */
- savageRegZBufOffset zBufOffset; /* 0x33 */
- savageRegDestCtrl destCtrl; /* 0x34 */
- savageRegDrawCtrl0 drawCtrl0; /* 0x35 */
- savageRegDrawCtrl1 drawCtrl1; /* 0x36 */
- savageRegZWatermarks zWatermarks; /* 0x37 */
- savageRegDestTexWatermarks destTexWatermarks; /* 0x38 */
- savageRegTexBlendColor texBlendColor; /* 0x39 */
-} savageRegistersS4;
-typedef struct savage_registers_s3d_t {
- savageRegTexPalAddr texPalAddr; /* 0x18 */
- savageRegTexXprClr texXprClr; /* 0x19 */
- savageRegTexAddr texAddr; /* 0x1a */
- savageRegTexDescr_s3d texDescr; /* 0x1b */
- savageRegTexCtrl_s3d texCtrl; /* 0x1c */
- uint32_t unused1[3]; /* 0x1d-0x1f */
- uint8_t fogTable[64]; /* 0x20-0x2f (16dwords) */
- savageRegFogCtrl fogCtrl; /* 0x30 */
- savageRegDrawCtrl drawCtrl; /* 0x31 */
- savageRegZBufCtrl_s3d zBufCtrl; /* 0x32 */
- savageRegZBufOffset zBufOffset; /* 0x33 */
- savageRegDestCtrl destCtrl; /* 0x34 */
- savageRegScissorsStart scissorsStart; /* 0x35 */
- savageRegScissorsEnd scissorsEnd; /* 0x36 */
- savageRegZWatermarks zWatermarks; /* 0x37 */
- savageRegDestTexWatermarks destTexWatermarks; /* 0x38 */
- uint32_t unused2; /* 0x39 */
-} savageRegistersS3D;
-typedef union savage_registers_t {
- savageRegistersS4 s4;
- savageRegistersS3D s3d;
- uint32_t ui[SAVAGE_NR_REGS];
-} savageRegisters;
-
-
-#define DV_PF_555 (0x1<<8)
-#define DV_PF_565 (0x2<<8)
-#define DV_PF_8888 (0x4<<8)
-
-#define SAVAGEPACKCOLORA4L4(l,a) \
- ((l >> 4) | (a & 0xf0))
-
-#define SAVAGEPACKCOLOR4444(r,g,b,a) \
- ((((a) & 0xf0) << 8) | (((r) & 0xf0) << 4) | ((g) & 0xf0) | ((b) >> 4))
-
-#define SAVAGEPACKCOLOR1555(r,g,b,a) \
- ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) | \
- ((a) ? 0x8000 : 0))
-
-#define SAVAGEPACKCOLOR8888(r,g,b,a) \
- (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-
-#define SAVAGEPACKCOLOR565(r,g,b) \
- ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))
-
-
-#endif
diff --git a/src/mesa/drivers/dri/savage/savage_bci.h b/src/mesa/drivers/dri/savage/savage_bci.h
deleted file mode 100644
index 33cfac32c71..00000000000
--- a/src/mesa/drivers/dri/savage/savage_bci.h
+++ /dev/null
@@ -1,612 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#ifndef SAVAGE_BCI_H
-#define SAVAGE_BCI_H
-/***********************
- 3D and 2D command
-************************/
-
-typedef enum {
- AMO_BurstCmdData= 0x01010000,
- AMO_3DReg= 0x01048500,
- AMO_MotionCompReg= 0x01048900,
- AMO_VideoEngUnit= 0x01048A00,
- AMO_CmdBufAddr= 0x01048c14,
- AMO_TiledSurfReg0= 0x01048C40,
- AMO_TiledSurfReg1= 0x01048C44,
- AMO_TiledSurfReg2= 0x01048C48,
- AMO_TiledSurfReg3= 0x01048C4C,
- AMO_TiledSurfReg4= 0x01048C50,
- AMO_TiledSurfReg5= 0x01048C54,
- AMO_TiledSurfReg6= 0x01048C58,
- AMO_TiledSurfReg7= 0x01048C5C,
- AMO_LPBModeReg= 0x0100FF00,
- AMO_LPBFifoSat= 0x0100FF04,
- AMO_LPBIntFlag= 0x0100FF08,
- AMO_LPBFmBufA0= 0x0100FF0C,
- AMO_LPBFmBufA1= 0x0100FF10,
- AMO_LPBRdWtAdr= 0x0100FF14,
- AMO_LPBRdWtDat= 0x0100FF18,
- AMO_LPBIOPort = 0x0100FF1C,
- AMO_LPBSerPort= 0x0100FF20,
- AMO_LPBVidInWinSz= 0x0100FF24,
- AMO_LPBVidDatOffs= 0x0100FF28,
- AMO_LPBHorScalCtrl= 0x0100FF2C,
- AMO_LPBVerDeciCtrl= 0x0100FF30,
- AMO_LPBLnStride= 0x0100FF34,
- AMO_LPBFmBufAddr2= 0x0100FF38,
- AMO_LPBVidCapVDCtrl=0x0100FF3C,
-
- AMO_LPBVidCapFdStAd=0x0100FF60,
- AMO_LPBVidCapFdMdAd=0x0100FF64,
- AMO_LPBVidCapFdBtAd=0x0100FF68,
- AMO_LPBVidCapFdSize=0x0100FF6C,
- AMO_LPBBilinDecim1= 0x0100FF70,
- AMO_LPBBilinDecim2= 0x0100FF74,
- AMO_LPBBilinDecim3= 0x0100FF78,
- AMO_LPBDspVEUHorSRR=0x0100FF7C,
- AMO_LPBDspVEUVerSRR=0x0100FF80,
- AMO_LPBDspVeuDnScDR=0x0100FF84,
- AMO_LPB_VEUERPReg= 0x0100FF88,
- AMO_LPB_VBISelReg= 0x0100FF8C,
- AMO_LPB_VBIBasAdReg=0x0100FF90,
- AMO_LPB_DatOffsReg= 0x0100FF94,
- AMO_LPB_VBIVerDcReg=0x0100FF98,
- AMO_LPB_VBICtrlReg= 0x0100FF9C,
- AMO_LPB_VIPXferCtrl=0x0100FFA0,
- AMO_LPB_FIFOWtMark= 0x0100FFA4,
- AMO_LPB_FIFOCount= 0x0100FFA8,
- AMO_LPBFdSkipPat= 0x0100FFAC,
- AMO_LPBCapVEUHorSRR=0x0100FFB0,
- AMO_LPBCapVEUVerSRR=0x0100FFB4,
- AMO_LPBCapVeuDnScDR=0x0100FFB8
-
-}AddressMapOffset;
-/*more to add*/
-
-
-typedef enum {
- CMD_DrawPrim=0x10, /*10000*/
- CMD_DrawIdxPrim=0x11, /*10001*/
- CMD_SetRegister=0x12, /*10010*/
- CMD_UpdateShadowStat=0x13 , /*10011*/
- CMD_PageFlip=0x14, /* 10100*/
- CMD_BusMasterImgXfer=0x15, /* 10101*/
- CMD_ScaledImgXfer=0x16, /* 10110*/
- CMD_Macroblock=0x17, /*10111*/
- CMD_Wait= 0x18, /*11000*/
- CMD_2D_NOP=0x08, /* 01000*/
- CMD_2D_RCT=0x09, /*01001 rectangular fill*/
- CMD_2D_SCNL=0x0a, /* 01010 scan line*/
- CMD_2D_LIN=0x0b, /*01011 line*/
- CMD_2D_SMTXT=0x0c, /*01100*/
- CMD_2D_BPTXT=0x0d, /*01101*/
- CMD_InitFlag=0x1f /*11111, for S/W initialization control*/
-}Command;
-
-
-typedef enum {
- VRR_List,
- VRR_Strip,
- VRR_Fan,
- VRR_QuadList
-}VertexReplaceRule;
-
-/***********************
- Destination
-************************/
-
-typedef enum {
- DFT_RGB565 = 0,
- DFT_XRGB8888
-}DestinationFmt;
-
-
-/*************************
- Z Buffer / Alpha test
-*************************/
-
-typedef enum {
- CF_Never,
- CF_Less,
- CF_Equal,
- CF_LessEqual,
- CF_Greater,
- CF_NotEqual,
- CF_GreaterEqual,
- CF_Always
-}ZCmpFunc; /* same for Alpha test and Stencil test compare function */
-
-typedef ZCmpFunc ACmpFunc;
-
-typedef enum {
- ZDS_16i, /* .16 fixed*/
- ZDS_32f /* 1.8.15 float*/
-}ZDepthSelect;
-
-
-/**********************************
- BCI Register Addressing Index
-***********************************/
-typedef enum {
-
- CRI_VTX0_X = 0x00,
- CRI_VTX0_Y = 0x01,
- CRI_VTX0_W = 0x02,
- CRI_VTX0_DIFFU= 0x03,
- CRI_VTX0_SPECU= 0x04,
- CRI_VTX0_U = 0x05,
- CRI_VTX0_V = 0x06,
- CRI_VTX0_U2 = 0x07,
- CRI_VTX0_V2 = 0x08,
- CRI_VTX1_X = 0x09,
- CRI_VTX1_Y = 0x0a,
- CRI_VTX1_W = 0x0b,
- CRI_VTX1_DIFFU= 0x0c,
- CRI_VTX1_SPECU= 0x0d,
- CRI_VTX1_U = 0x0e,
- CRI_VTX1_V = 0x0f,
- CRI_VTX1_U2 = 0x10,
- CRI_VTX1_V2 = 0x11,
- CRI_VTX2_X = 0x12,
- CRI_VTX2_Y = 0x13,
- CRI_VTX2_W = 0x14,
- CRI_VTX2_DIFFU= 0x15,
- CRI_VTX2_SPECU= 0x16,
- CRI_VTX2_U = 0x17,
- CRI_VTX2_V = 0x18,
- CRI_VTX2_U2 = 0x19,
- CRI_VTX2_V2 = 0x1a,
-
- CRI_ZPixelOffset = 0x1d,
- CRI_DrawCtrlLocal = 0x1e,
- CRI_TexPalAddr = 0x1f,
- CRI_TexCtrl0 = 0x20,
- CRI_TexCtrl1 = 0x21,
- CRI_TexAddr0 = 0x22,
- CRI_TexAddr1 = 0x23,
- CRI_TexBlendCtrl0 = 0x24,
- CRI_TexBlendCtrl1 = 0x25,
- CRI_TexXprClr = 0x26,
- CRI_TexDescr = 0x27,
-
- CRI_FogTable00= 0x28,
- CRI_FogTable04= 0x29,
- CRI_FogTable08= 0x2a,
- CRI_FogTable12= 0x2b,
- CRI_FogTable16= 0x2c,
- CRI_FogTable20= 0x2d,
- CRI_FogTable24= 0x2e,
- CRI_FogTable28= 0x2f,
- CRI_FogCtrl= 0x30,
- CRI_StencilCtrl= 0x31,
- CRI_ZBufCtrl= 0x32,
- CRI_ZBufOffset= 0x33,
- CRI_DstCtrl= 0x34,
- CRI_DrawCtrlGlobal0= 0x35,
- CRI_DrawCtrlGlobal1= 0x36,
- CRI_ZRW_WTMK = 0x37,
- CRI_DST_WTMK = 0x38,
- CRI_TexBlendColor= 0x39,
-
- CRI_VertBufAddr= 0x3e,
- /* new in ms1*/
- CRI_MauFrameAddr0 = 0x40,
- CRI_MauFrameAddr1 = 0x41,
- CRI_MauFrameAddr2 = 0x42,
- CRI_MauFrameAddr3 = 0x43,
- CRI_FrameDesc = 0x44,
- CRI_IDCT9bitEn = 0x45,
- CRI_MV0 = 0x46,
- CRI_MV1 = 0x47,
- CRI_MV2 = 0x48,
- CRI_MV3 = 0x49,
- CRI_MacroDescr = 0x4a, /*kickoff?*/
-
- CRI_MeuCtrl = 0x50,
- CRI_SrcYAddr = 0x51,
- CRI_DestAddr = 0x52,
- CRI_FmtrSrcDimen = 0x53,
- CRI_FmtrDestDimen = 0x54,
- CRI_SrcCbAddr = 0x55,
- CRI_SrcCrAddr = 0x56,
- CRI_SrcCrCbStride = 0x57,
-
- CRI_BCI_Power= 0x5f,
-
- CRI_PSCtrl=0xA0,
- CRI_SSClrKeyCtrl=0xA1,
- CRI_SSCtrl=0xA4,
- CRI_SSChromUpBound=0xA5,
- CRI_SSHoriScaleCtrl=0xA6,
- CRI_SSClrAdj=0xA7,
- CRI_SSBlendCtrl=0xA8,
- CRI_PSFBAddr0=0xB0,
- CRI_PSFBAddr1=0xB1,
- CRI_PSStride=0xB2,
- CRI_DB_LPB_Support=0xB3,
- CRI_SSFBAddr0=0xB4,
- CRI_SSFBAddr1=0xB5,
- CRI_SSStride=0xB6,
- CRI_SSOpaqueCtrl=0xB7,
- CRI_SSVertScaleCtrl=0xB8,
- CRI_SSVertInitValue=0xB9,
- CRI_SSSrcLineCnt=0xBA,
- CRI_FIFO_RAS_Ctrl=0xBB,
- CRI_PSWinStartCoord=0xBC,
- CRI_PSWinSize=0xBD,
- CRI_SSWinStartCoord=0xBE,
- CRI_SSWinSize=0xBF,
- CRI_PSFIFOMon0=0xC0,
- CRI_SSFIFOMon0=0xC1,
- CRI_PSFIFOMon1=0xC2,
- CRI_SSFIFOMon1=0xC3,
- CRI_PSFBSize=0xC4,
- CRI_SSFBSize=0xC5,
- CRI_SSFBAddr2=0xC6,
- /* 2D register starts at D0*/
- CRI_CurrXY=0xD0,
- CRI_DstXYorStep=0xD1 ,
- CRI_LineErr=0xD2 ,
- CRI_DrawCmd=0xD3, /*kick off for image xfer*/
- CRI_ShortStrkVecXfer=0xD4,
- CRI_BackClr=0xD5,
- CRI_ForeClr=0xD6,
- CRI_BitPlaneWtMask=0xD7,
- CRI_BitPlaneRdMask=0xD8,
- CRI_ClrCmp=0xD9 ,
- CRI_BackAndForeMix=0xDA ,
- CRI_TopLeftSciss=0xDB ,
- CRI_BotRightSciss=0xDC ,
- CRI_PixOrMultiCtrl=0xDD ,
- CRI_MultiCtrlOrRdSelct=0xDE ,
- CRI_MinorOrMajorAxisCnt=0xDF ,
- CRI_GlobalBmpDesc1=0xE0 ,
- CRI_GlobalBmpDesc2=0xE1 ,
- CRI_BurstPriBmpDesc1=0xE2 ,
- CRI_BurstPriBmpDesc2=0xE3 ,
- CRI_BurstSecBmpDesc1=0xE4 ,
- CRI_BurstSecBmpDesc2=0xE5,
- CRI_ImageDataPort=0xF8
-
-}CtrlRegIdx;
-
-/***********************
- Fog Mode
-************************/
-typedef enum
-{
- FGM_Z_FOG, /*Table*/
- FGM_V_FOG /*Vertex*/
-} FogMode;
-
-/***********************
- Texture
-************************/
-typedef enum
-{
- TAM_Wrap,
- TAM_Clamp,
- TAM_Mirror
-} TexAddressModel;
-
-typedef enum
-{
- TFT_S3TC4Bit,
- TFT_Pal8Bit565,
- TFT_Pal8Bit1555,
- TFT_ARGB8888,
- TFT_ARGB1555,
- TFT_ARGB4444,
- TFT_RGB565,
- TFT_Pal8Bit4444,
- TFT_S3TC4A4Bit, /*like S3TC4Bit but with 4 bit alpha*/
- TFT_S3TC4CA4Bit, /*like S3TC4Bit, but with 4 bit compressed alpha*/
- TFT_S3TCL4,
- TFT_S3TCA4L4,
- TFT_L8,
- TFT_A4L4,
- TFT_I8,
- TFT_A8
-} TexFmt;
-
-typedef enum
-{
- TPS_64,
- TPS_128,
- TPS_192,
- TPS_256
-} TexPaletteSize;
-
-#define MAX_MIPMAP_LOD_BIAS 255
-#define MIN_MIPMAP_LOD_BIAS -255
-
-typedef enum
-{
- TFM_Point, /*1 TPP*/
- TFM_Bilin, /*2 TPP*/
- TFM_Reserved,
- TFM_Trilin /*16 TPP*/
-} TexFilterMode;
-
-
-#define TBC_Decal 0x00850410
-#define TBC_Modul 0x00850011
-#define TBC_DecalAlpha 0x00852A04
-#define TBC_ModulAlpha 0x00110011
-#define TBC_Copy 0x00840410
-#define TBC_CopyAlpha 0x00900405
-#define TBC_NoTexMap 0x00850405
-#define TBC_Blend0 0x00810004
-#define TBC_Blend1 0x00870e02
-#define TBC_BlendAlpha0 0x00040004
-#define TBC_BlendAlpha1 TBC_Blend1
-#define TBC_BlendInt0 0x00040004
-#define TBC_BlendInt1 0x01c20e02
-#define TBC_AddAlpha 0x19910c11
-#define TBC_Add 0x18110c11
-
-#define TBC_Decal1 0x00870410
-#define TBC_Modul1 0x00870013
-#define TBC_DecalAlpha1 0x00832A00
-#define TBC_ModulAlpha1 0x00130013
-#define TBC_NoTexMap1 0x00870407
-#define TBC_Copy1 0x00870400
-#define TBC_CopyAlpha1 0x00900400
-#define TBC_AddAlpha1 0x19930c13
-#define TBC_Add1 0x18130c13
-
-/*
- * derived from TexBlendCtrl
- */
-
-typedef enum
-{
- TBC_UseSrc,
- TBC_UseTex,
- TBC_TexTimesSrc,
- TBC_BlendTexWithSrc
-} TexBlendCtrlMode;
-
-/***********************
- Draw Control
-************************/
-typedef enum
-{
- BCM_Reserved,
- BCM_None,
- BCM_CW,
- BCM_CCW
-} BackfaceCullingMode;
-
-typedef enum
-{
- SAM_Zero,
- SAM_One,
- SAM_DstClr,
- SAM_1DstClr,
- SAM_SrcAlpha,
- SAM_1SrcAlpha,
- SAM_DstAlpha,
- SAM_1DstAlpha
-} SrcAlphaBlendMode;
-
-/* -1 from state*/
-typedef enum
-{
- DAM_Zero,
- DAM_One,
- DAM_SrcClr,
- DAM_1SrcClr,
- DAM_SrcAlpha,
- DAM_1SrcAlpha,
- DAM_DstAlpha,
- DAM_1DstAlpha
-} DstAlphaBlendMode;
-
-/*
- * stencil control
- */
-
-typedef enum
-{
- STENCIL_Keep,
- STENCIL_Zero,
- STENCIL_Equal,
- STENCIL_IncClamp,
- STENCIL_DecClamp,
- STENCIL_Invert,
- STENCIL_Inc,
- STENCIL_Dec
-} StencilOp;
-
-/***************************************************************
-*** Bitfield Structures for Programming Interface **************
-***************************************************************/
-
-/**************************
- Command Header Entry
-**************************/
-
-typedef struct { /*for DrawIndexPrimitive command, vert0Idx is meaningful.*/
- unsigned int vert0Idx:16;
- unsigned int vertCnt:8;
- unsigned int cont:1;
- unsigned int type:2; /*00=list, 01=strip, 10=fan, 11=reserved*/
- unsigned int cmd:5;
-}Reg_DrawIndexPrimitive;
-
-typedef struct { /*for DrawIndexPrimitive command, vert0Idx is meaningful.*/
- unsigned int noW:1;
- unsigned int noCd:1;
- unsigned int noCs:1;
- unsigned int noU:1;
- unsigned int noV:1;
- unsigned int noU2:1;
- unsigned int noV2:1;
-
- unsigned int reserved:9;
- unsigned int vertCnt:8;
- unsigned int cont:1;
- unsigned int type:2; /* 00=list, 01=strip, 10=fan, 11=reserved*/
- unsigned int cmd:5;
-}Reg_DrawPrimitive;
-
-
-typedef struct {
- unsigned int startRegIdx:8;
- unsigned int reserved:8;
- unsigned int regCnt:8;
- unsigned int resvered1:1;
- unsigned int lowEn:1;
- unsigned int highEn:1;
- unsigned int cmd:5;
-}Reg_SetRegister;
-
-typedef struct {
- unsigned int reserved1:22;
- unsigned int isPrimary:1;
- unsigned int MIU_SYNC:1;
- unsigned int reserved2:3;
- unsigned int cmd:5;
-}Reg_QueuedPageFlip;
-
-typedef struct {
- unsigned int reserved1:22;
- unsigned int DIR:1;
- unsigned int CTG:1; /*set to 0*/
- unsigned int BPP:1;
- unsigned int reserved2:1;
- unsigned int cmd:5;
-}Reg_MasterImgXfer;
-
-typedef struct {
- unsigned int PD:4; /*PM=mono, PS=descriptor specified*/
- unsigned int PT:1;
- unsigned int SD:4;
- unsigned int ST:1;
- unsigned int DD:3;
- unsigned int DC:2; /*DC=destination clip*/
- unsigned int CS:1; /*cs=color specified*/
- unsigned int MIX3:8;
- unsigned int XP:1;
- unsigned int YP:1;
- unsigned int LP:1;
- unsigned int cmd:5;
-}Reg_2D;
-
-typedef struct {
- unsigned int CodedBlkPattern:6;
- unsigned int DCT_Type:1;
- unsigned int MB_Type:2;
- unsigned int MotionType:2;
- unsigned int MB_Row:6;
- unsigned int MB_Column:6;
- unsigned int mv3:1;
- unsigned int mv2:1;
- unsigned int mv1:1;
- unsigned int mv0:1;
- unsigned int cmd:5;
-}Reg_MacroBlock;
-
-typedef struct {
- unsigned int scanLnCnt:11;
- unsigned int clkCnt:5;
- unsigned int e3d:1;
- unsigned int e2d:1;
- unsigned int mau:1;
- unsigned int veu:1;
- unsigned int meuMit:1;
- unsigned int meuSit:1;
- unsigned int meuVx:1;
- unsigned int meuMau:1;
- unsigned int pageFlip:1;
- unsigned int scanLn:1;
- unsigned int clk:1;
- unsigned int cmd:5;
-}Reg_Wait;
-
-typedef struct{
- unsigned int reserved:27;
- unsigned int cmd:5;
-}Reg_ScaledImgXfer ;
-
-typedef struct{
- unsigned int eventTag:16;
- unsigned int reserved2:6;
- unsigned int ET:1;
- unsigned int INT:1;
- unsigned int reserved1:3;
- unsigned int cmd:5;
-}Reg_UpdtShadowStat;
-
-typedef union {
- Reg_DrawPrimitive vert;
- Reg_DrawIndexPrimitive vertIdx;
- Reg_SetRegister set;
- Reg_QueuedPageFlip pageFlip;
- Reg_MasterImgXfer masterImgXfer;
- Reg_ScaledImgXfer scaledImgXfer;
- Reg_UpdtShadowStat updtShadow;
- Reg_MacroBlock macroBlk;
- Reg_2D cmd2D;
- Reg_Wait wait;
-}CmdHeaderUnion;
-
-
-/*frank 2001/11/14 add BCI write macros*/
-/* Registers not used in the X server
- */
-
-#define SAVAGE_NOP_ID 0x2094
-#define SAVAGE_NOP_ID_MASK ((1<<22)-1)
-
-
-/* 3D instructions
- */
-
-/* Draw Primitive Control */
-
-
-#define SAVAGE_HW_NO_Z (1<<0)
-#define SAVAGE_HW_NO_W (1<<1)
-#define SAVAGE_HW_NO_CD (1<<2)
-#define SAVAGE_HW_NO_CS (1<<3)
-#define SAVAGE_HW_NO_U0 (1<<4)
-#define SAVAGE_HW_NO_V0 (1<<5)
-#define SAVAGE_HW_NO_UV0 ((1<<4) | (1<<5))
-#define SAVAGE_HW_NO_U1 (1<<6)
-#define SAVAGE_HW_NO_V1 (1<<7)
-#define SAVAGE_HW_NO_UV1 ((1<<6) | (1<<7))
-#define SAVAGE_HW_SKIPFLAGS 0x000000ff
-
-#endif
-
-
-
-
-
-
diff --git a/src/mesa/drivers/dri/savage/savage_init.h b/src/mesa/drivers/dri/savage/savage_init.h
deleted file mode 100644
index bfd3077d70c..00000000000
--- a/src/mesa/drivers/dri/savage/savage_init.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#ifndef _SAVAGE_INIT_H_
-#define _SAVAGE_INIT_H_
-
-#include
-#include "dri_util.h"
-#include "main/mtypes.h"
-
-#include "xmlconfig.h"
-
-typedef struct {
- drm_handle_t handle;
- drmSize size;
- char *map;
-} savageRegion, *savageRegionPtr;
-
-typedef struct {
- int chipset;
- int width;
- int height;
- int mem;
-
- int cpp; /* for front and back buffers */
- int zpp;
-
- int agpMode;
-
- unsigned int bufferSize;
-
-#if 0
- int bitsPerPixel;
-#endif
- unsigned int frontFormat;
- unsigned int frontOffset;
- unsigned int backOffset;
- unsigned int depthOffset;
-
- unsigned int aperturePitch;
-
- unsigned int textureOffset[SAVAGE_NR_TEX_HEAPS];
- unsigned int textureSize[SAVAGE_NR_TEX_HEAPS];
- unsigned int logTextureGranularity[SAVAGE_NR_TEX_HEAPS];
- drmAddress texVirtual[SAVAGE_NR_TEX_HEAPS];
-
- __DRIscreen *driScrnPriv;
-
- savageRegion aperture;
- savageRegion agpTextures;
-
- drmBufMapPtr bufs;
-
- unsigned int sarea_priv_offset;
-
- /* Configuration cache with default values for all contexts */
- driOptionCache optionCache;
-} savageScreenPrivate;
-
-
-#include "savagecontext.h"
-
-extern void savageGetLock( savageContextPtr imesa, GLuint flags );
-extern void savageXMesaSetClipRects(savageContextPtr imesa);
-
-
-#define GET_DISPATCH_AGE( imesa ) imesa->sarea->last_dispatch
-#define GET_ENQUEUE_AGE( imesa ) imesa->sarea->last_enqueue
-
-
-/* Lock the hardware and validate our state.
- */
-#define LOCK_HARDWARE( imesa ) \
- do { \
- char __ret=0; \
- DRM_CAS(imesa->driHwLock, imesa->hHWContext, \
- (DRM_LOCK_HELD|imesa->hHWContext), __ret); \
- if (__ret) \
- savageGetLock( imesa, 0 ); \
- } while (0)
-
-
-
-/* Unlock the hardware using the global current context
- */
-#define UNLOCK_HARDWARE(imesa) \
- DRM_UNLOCK(imesa->driFd, imesa->driHwLock, imesa->hHWContext);
-
-
-/* This is the wrong way to do it, I'm sure. Otherwise the drm
- * bitches that I've already got the heavyweight lock. At worst,
- * this is 3 ioctls. The best solution probably only gets me down
- * to 2 ioctls in the worst case.
- */
-#define LOCK_HARDWARE_QUIESCENT( imesa ) do { \
- LOCK_HARDWARE( imesa ); \
- savageRegetLockQuiescent( imesa ); \
-} while(0)
-
-/* The following definitions are copied from savage_regs.h in the XFree86
- * driver. They are unlikely to change. If they do we need to keep them in
- * sync. */
-
-#define S3_SAVAGE3D_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE_MX))
-
-#define S3_SAVAGE4_SERIES(chip) ((chip==S3_SAVAGE4) \
- || (chip==S3_PROSAVAGE) \
- || (chip==S3_TWISTER) \
- || (chip==S3_PROSAVAGEDDR))
-
-#define S3_SAVAGE_MOBILE_SERIES(chip) ((chip==S3_SAVAGE_MX) || (chip==S3_SUPERSAVAGE))
-
-#define S3_SAVAGE_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE2000))
-
-#define S3_MOBILE_TWISTER_SERIES(chip) ((chip==S3_TWISTER) \
- ||(chip==S3_PROSAVAGEDDR))
-
-/* Chip tags. These are used to group the adapters into
- * related families.
- */
-
-enum S3CHIPTAGS {
- S3_UNKNOWN = 0,
- S3_SAVAGE3D,
- S3_SAVAGE_MX,
- S3_SAVAGE4,
- S3_PROSAVAGE,
- S3_TWISTER,
- S3_PROSAVAGEDDR,
- S3_SUPERSAVAGE,
- S3_SAVAGE2000,
- S3_LAST
-};
-
-#endif
diff --git a/src/mesa/drivers/dri/savage/savage_xmesa.c b/src/mesa/drivers/dri/savage/savage_xmesa.c
deleted file mode 100644
index 681ed9aae34..00000000000
--- a/src/mesa/drivers/dri/savage/savage_xmesa.c
+++ /dev/null
@@ -1,1013 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#include
-
-#include "main/context.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-#include "main/simple_list.h"
-
-#include "utils.h"
-
-#include "main/extensions.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "vbo/vbo.h"
-
-#include "tnl/t_pipeline.h"
-
-#include "drivers/common/driverfuncs.h"
-#include "drivers/common/meta.h"
-
-#include "savagedd.h"
-#include "savagestate.h"
-#include "savagetex.h"
-#include "savagespan.h"
-#include "savagetris.h"
-#include "savageioctl.h"
-
-#include "savage_dri.h"
-
-#include "drirenderbuffer.h"
-#include "texmem.h"
-
-#define need_GL_EXT_secondary_color
-#include "main/remap_helper.h"
-
-#include "xmlpool.h"
-
-/* Driver-specific options
- */
-#define SAVAGE_ENABLE_VDMA(def) \
-DRI_CONF_OPT_BEGIN(enable_vdma,bool,def) \
- DRI_CONF_DESC(en,"Use DMA for vertex transfers") \
- DRI_CONF_DESC(de,"Benutze DMA für Vertextransfers") \
-DRI_CONF_OPT_END
-#define SAVAGE_ENABLE_FASTPATH(def) \
-DRI_CONF_OPT_BEGIN(enable_fastpath,bool,def) \
- DRI_CONF_DESC(en,"Use fast path for unclipped primitives") \
- DRI_CONF_DESC(de,"Schneller Codepfad für ungeschnittene Polygone") \
-DRI_CONF_OPT_END
-#define SAVAGE_SYNC_FRAMES(def) \
-DRI_CONF_OPT_BEGIN(sync_frames,bool,def) \
- DRI_CONF_DESC(en,"Synchronize with graphics hardware after each frame") \
- DRI_CONF_DESC(de,"Synchronisiere nach jedem Frame mit Grafikhardware") \
-DRI_CONF_OPT_END
-
-/* Configuration
- */
-PUBLIC const char __driConfigOptions[] =
-DRI_CONF_BEGIN
- DRI_CONF_SECTION_QUALITY
- DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
- DRI_CONF_COLOR_REDUCTION(DRI_CONF_COLOR_REDUCTION_DITHER)
- DRI_CONF_FLOAT_DEPTH(false)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_PERFORMANCE
- SAVAGE_ENABLE_VDMA(true)
- SAVAGE_ENABLE_FASTPATH(true)
- SAVAGE_SYNC_FRAMES(false)
- DRI_CONF_MAX_TEXTURE_UNITS(2,1,2)
- DRI_CONF_TEXTURE_HEAPS(DRI_CONF_TEXTURE_HEAPS_ALL)
- DRI_CONF_FORCE_S3TC_ENABLE(false)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_DEBUG
- DRI_CONF_NO_RAST(false)
- DRI_CONF_SECTION_END
-DRI_CONF_END;
-static const GLuint __driNConfigOptions = 10;
-
-
-static const struct dri_debug_control debug_control[] =
-{
- { "fall", DEBUG_FALLBACKS },
- { "api", DEBUG_VERBOSE_API },
- { "tex", DEBUG_VERBOSE_TEX },
- { "verb", DEBUG_VERBOSE_MSG },
- { "dma", DEBUG_DMA },
- { "state", DEBUG_STATE },
- { NULL, 0 }
-};
-#ifndef SAVAGE_DEBUG
-int SAVAGE_DEBUG = 0;
-#endif
-
-
-/*For time caculating test*/
-#if defined(DEBUG_TIME) && DEBUG_TIME
-struct timeval tv_s,tv_f;
-unsigned long time_sum=0;
-struct timeval tv_s1,tv_f1;
-#endif
-
-static const struct dri_extension card_extensions[] =
-{
- { "GL_ARB_multitexture", NULL },
- { "GL_EXT_stencil_wrap", NULL },
- { "GL_EXT_texture_lod_bias", NULL },
- { "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
- { NULL, NULL }
-};
-
-static const struct dri_extension s4_extensions[] =
-{
- { "GL_ARB_texture_env_add", NULL },
- { "GL_ARB_texture_mirrored_repeat", NULL },
- { NULL, NULL }
-};
-
-extern struct tnl_pipeline_stage _savage_texnorm_stage;
-extern struct tnl_pipeline_stage _savage_render_stage;
-
-static const struct tnl_pipeline_stage *savage_pipeline[] = {
-
- &_tnl_vertex_transform_stage,
- &_tnl_normal_transform_stage,
- &_tnl_lighting_stage,
- &_tnl_fog_coordinate_stage,
- &_tnl_texgen_stage,
- &_tnl_texture_transform_stage,
- &_savage_texnorm_stage,
- &_savage_render_stage,
- &_tnl_render_stage,
- 0,
-};
-
-
-PUBLIC const __DRIextension *savageScreenExtensions[] = {
- &driCoreExtension.base,
- &driLegacyExtension.base,
- &driReadDrawableExtension,
-};
-
-static GLboolean
-savageInitDriver(__DRIscreen *sPriv)
-{
- savageScreenPrivate *savageScreen;
- SAVAGEDRIPtr gDRIPriv = (SAVAGEDRIPtr)sPriv->pDevPriv;
-
- if (sPriv->devPrivSize != sizeof(SAVAGEDRIRec)) {
- fprintf(stderr,"\nERROR! sizeof(SAVAGEDRIRec) does not match passed size from device driver\n");
- return GL_FALSE;
- }
-
- /* Allocate the private area */
- savageScreen = (savageScreenPrivate *)malloc(sizeof(savageScreenPrivate));
- if (!savageScreen)
- return GL_FALSE;
-
- savageScreen->driScrnPriv = sPriv;
- sPriv->private = (void *)savageScreen;
-
- savageScreen->chipset=gDRIPriv->chipset;
- savageScreen->width=gDRIPriv->width;
- savageScreen->height=gDRIPriv->height;
- savageScreen->mem=gDRIPriv->mem;
- savageScreen->cpp=gDRIPriv->cpp;
- savageScreen->zpp=gDRIPriv->zpp;
-
- savageScreen->agpMode=gDRIPriv->agpMode;
-
- savageScreen->bufferSize=gDRIPriv->bufferSize;
-
- if (gDRIPriv->cpp == 4)
- savageScreen->frontFormat = DV_PF_8888;
- else
- savageScreen->frontFormat = DV_PF_565;
- savageScreen->frontOffset=gDRIPriv->frontOffset;
- savageScreen->backOffset = gDRIPriv->backOffset;
- savageScreen->depthOffset=gDRIPriv->depthOffset;
-
- savageScreen->textureOffset[SAVAGE_CARD_HEAP] =
- gDRIPriv->textureOffset;
- savageScreen->textureSize[SAVAGE_CARD_HEAP] =
- gDRIPriv->textureSize;
- savageScreen->logTextureGranularity[SAVAGE_CARD_HEAP] =
- gDRIPriv->logTextureGranularity;
-
- savageScreen->textureOffset[SAVAGE_AGP_HEAP] =
- gDRIPriv->agpTextureHandle;
- savageScreen->textureSize[SAVAGE_AGP_HEAP] =
- gDRIPriv->agpTextureSize;
- savageScreen->logTextureGranularity[SAVAGE_AGP_HEAP] =
- gDRIPriv->logAgpTextureGranularity;
-
- savageScreen->agpTextures.handle = gDRIPriv->agpTextureHandle;
- savageScreen->agpTextures.size = gDRIPriv->agpTextureSize;
- if (gDRIPriv->agpTextureSize) {
- if (drmMap(sPriv->fd,
- savageScreen->agpTextures.handle,
- savageScreen->agpTextures.size,
- (drmAddress *)&(savageScreen->agpTextures.map)) != 0) {
- free(savageScreen);
- sPriv->private = NULL;
- return GL_FALSE;
- }
- } else
- savageScreen->agpTextures.map = NULL;
-
- savageScreen->texVirtual[SAVAGE_CARD_HEAP] =
- (drmAddress)(((GLubyte *)sPriv->pFB)+gDRIPriv->textureOffset);
- savageScreen->texVirtual[SAVAGE_AGP_HEAP] =
- (drmAddress)(savageScreen->agpTextures.map);
-
- savageScreen->aperture.handle = gDRIPriv->apertureHandle;
- savageScreen->aperture.size = gDRIPriv->apertureSize;
- savageScreen->aperturePitch = gDRIPriv->aperturePitch;
- if (drmMap(sPriv->fd,
- savageScreen->aperture.handle,
- savageScreen->aperture.size,
- (drmAddress *)&savageScreen->aperture.map) != 0)
- {
- free(savageScreen);
- sPriv->private = NULL;
- return GL_FALSE;
- }
-
- savageScreen->bufs = drmMapBufs(sPriv->fd);
-
- savageScreen->sarea_priv_offset = gDRIPriv->sarea_priv_offset;
-
- /* parse information in __driConfigOptions */
- driParseOptionInfo (&savageScreen->optionCache,
- __driConfigOptions, __driNConfigOptions);
-
- sPriv->extensions = savageScreenExtensions;
-
-#if 0
- savageDDFastPathInit();
- savageDDTrifuncInit();
- savageDDSetupInit();
-#endif
- return GL_TRUE;
-}
-
-/* Accessed by dlsym from dri_mesa_init.c
- */
-static void
-savageDestroyScreen(__DRIscreen *sPriv)
-{
- savageScreenPrivate *savageScreen = (savageScreenPrivate *)sPriv->private;
-
- if (savageScreen->bufs)
- drmUnmapBufs(savageScreen->bufs);
-
- /* free all option information */
- driDestroyOptionInfo (&savageScreen->optionCache);
-
- free(savageScreen);
- sPriv->private = NULL;
-}
-
-static GLboolean
-savageCreateContext( gl_api api,
- const struct gl_config *mesaVis,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate )
-{
- struct gl_context *ctx, *shareCtx;
- savageContextPtr imesa;
- __DRIscreen *sPriv = driContextPriv->driScreenPriv;
- struct dd_function_table functions;
- savageScreenPrivate *savageScreen = (savageScreenPrivate *)sPriv->private;
- drm_savage_sarea_t *saPriv=(drm_savage_sarea_t *)(((char*)sPriv->pSAREA)+
- savageScreen->sarea_priv_offset);
- int textureSize[SAVAGE_NR_TEX_HEAPS];
- int i;
- imesa = (savageContextPtr)calloc(1, sizeof(savageContext));
- if (!imesa) {
- return GL_FALSE;
- }
-
- /* Init default driver functions then plug in savage-specific texture
- * functions that are needed as early as during context creation. */
- _mesa_init_driver_functions( &functions );
- savageDDInitTextureFuncs( &functions );
-
- /* Allocate the Mesa context */
- if (sharedContextPrivate)
- shareCtx = ((savageContextPtr) sharedContextPrivate)->glCtx;
- else
- shareCtx = NULL;
- ctx = _mesa_create_context(api, mesaVis, shareCtx, &functions, imesa);
- if (!ctx) {
- free(imesa);
- return GL_FALSE;
- }
- driContextPriv->driverPrivate = imesa;
-
- imesa->cmdBuf.size = SAVAGE_CMDBUF_SIZE;
- imesa->cmdBuf.base = imesa->cmdBuf.write =
- malloc(SAVAGE_CMDBUF_SIZE * sizeof(drm_savage_cmd_header_t));
- if (!imesa->cmdBuf.base)
- return GL_FALSE;
-
- /* Parse configuration files */
- driParseConfigFiles (&imesa->optionCache, &savageScreen->optionCache,
- sPriv->myNum, "savage");
-
- imesa->float_depth = driQueryOptionb(&imesa->optionCache, "float_depth") &&
- savageScreen->chipset >= S3_SAVAGE4;
- imesa->no_rast = driQueryOptionb(&imesa->optionCache, "no_rast");
-
-#if 0
- ctx->Const.MinLineWidth = 1.0;
- ctx->Const.MinLineWidthAA = 1.0;
- ctx->Const.MaxLineWidth = 3.0;
- ctx->Const.MaxLineWidthAA = 3.0;
- ctx->Const.LineWidthGranularity = 1.0;
-#endif
-
- ctx->Const.MaxDrawBuffers = 1;
-
- /* Dri stuff
- */
- imesa->hHWContext = driContextPriv->hHWContext;
- imesa->driFd = sPriv->fd;
- imesa->driHwLock = &sPriv->pSAREA->lock;
-
- imesa->savageScreen = savageScreen;
- imesa->driScreen = sPriv;
- imesa->sarea = saPriv;
- imesa->glBuffer = NULL;
-
- /* DMA buffer */
-
- for(i=0;i<5;i++)
- {
- imesa->apertureBase[i] = (GLubyte *)savageScreen->aperture.map +
- 0x01000000 * i;
- }
-
- imesa->aperturePitch = savageScreen->aperturePitch;
-
- /* change texHeap initialize to support two kind of texture heap*/
- /* here is some parts of initialization, others in InitDriver() */
-
- (void) memset( imesa->textureHeaps, 0, sizeof( imesa->textureHeaps ) );
- make_empty_list( & imesa->swapped );
-
- textureSize[SAVAGE_CARD_HEAP] = savageScreen->textureSize[SAVAGE_CARD_HEAP];
- textureSize[SAVAGE_AGP_HEAP] = savageScreen->textureSize[SAVAGE_AGP_HEAP];
- imesa->lastTexHeap = savageScreen->texVirtual[SAVAGE_AGP_HEAP] ? 2 : 1;
- switch(driQueryOptioni (&imesa->optionCache, "texture_heaps")) {
- case DRI_CONF_TEXTURE_HEAPS_CARD: /* only use card memory, if available */
- if (textureSize[SAVAGE_CARD_HEAP])
- imesa->lastTexHeap = 1;
- break;
- case DRI_CONF_TEXTURE_HEAPS_GART: /* only use gart memory, if available */
- if (imesa->lastTexHeap == 2 && textureSize[SAVAGE_AGP_HEAP])
- textureSize[SAVAGE_CARD_HEAP] = 0;
- break;
- /*default: Nothing to do, use all available memory. */
- }
-
- for (i = 0; i < imesa->lastTexHeap; i++) {
- imesa->textureHeaps[i] = driCreateTextureHeap(
- i, imesa,
- textureSize[i],
- 11, /* 2^11 = 2k alignment */
- SAVAGE_NR_TEX_REGIONS,
- (drmTextureRegionPtr)imesa->sarea->texList[i],
- &imesa->sarea->texAge[i],
- &imesa->swapped,
- sizeof( savageTexObj ),
- (destroy_texture_object_t *) savageDestroyTexObj );
- /* If textureSize[i] == 0 textureHeaps[i] is NULL. This can happen
- * if there is not enough card memory for a card texture heap. */
- if (imesa->textureHeaps[i])
- driSetTextureSwapCounterLocation( imesa->textureHeaps[i],
- & imesa->c_textureSwaps );
- }
- imesa->texture_depth = driQueryOptioni (&imesa->optionCache,
- "texture_depth");
- if (imesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_FB)
- imesa->texture_depth = ( savageScreen->cpp == 4 ) ?
- DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
-
- if (savageScreen->chipset >= S3_SAVAGE4)
- ctx->Const.MaxTextureUnits = 2;
- else
- ctx->Const.MaxTextureUnits = 1;
- if (driQueryOptioni(&imesa->optionCache, "texture_units") <
- ctx->Const.MaxTextureUnits)
- ctx->Const.MaxTextureUnits =
- driQueryOptioni(&imesa->optionCache, "texture_units");
- ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits;
- ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits;
-
- driCalculateMaxTextureLevels( imesa->textureHeaps,
- imesa->lastTexHeap,
- & ctx->Const,
- 4,
- 11, /* max 2D texture size is 2048x2048 */
- 0, /* 3D textures unsupported. */
- 0, /* cube textures unsupported. */
- 0, /* texture rectangles unsupported. */
- 12,
- GL_FALSE,
- 0 );
- if (ctx->Const.MaxTextureLevels <= 6) { /*spec requires at least 64x64*/
- __driUtilMessage("Not enough texture memory. "
- "Falling back to indirect rendering.");
- free(imesa);
- return GL_FALSE;
- }
-
- imesa->hw_stencil = mesaVis->stencilBits && mesaVis->depthBits == 24;
- imesa->depth_scale = (imesa->savageScreen->zpp == 2) ?
- (1.0F/0xffff):(1.0F/0xffffff);
-
- imesa->bufferSize = savageScreen->bufferSize;
- imesa->dmaVtxBuf.total = 0;
- imesa->dmaVtxBuf.used = 0;
- imesa->dmaVtxBuf.flushed = 0;
-
- imesa->clientVtxBuf.total = imesa->bufferSize / 4;
- imesa->clientVtxBuf.used = 0;
- imesa->clientVtxBuf.flushed = 0;
- imesa->clientVtxBuf.buf = (uint32_t *)malloc(imesa->bufferSize);
-
- imesa->vtxBuf = &imesa->clientVtxBuf;
-
- imesa->firstElt = -1;
-
- /* Uninitialized vertex format. Force setting the vertex state in
- * savageRenderStart.
- */
- imesa->vertex_size = 0;
-
- /* Utah stuff
- */
- imesa->new_state = ~0;
- imesa->new_gl_state = ~0;
- imesa->RenderIndex = ~0;
- imesa->dirty = ~0;
- imesa->lostContext = GL_TRUE;
- imesa->CurrentTexObj[0] = 0;
- imesa->CurrentTexObj[1] = 0;
-
- _mesa_meta_init( ctx );
-
- /* Initialize the software rasterizer and helper modules.
- */
- _swrast_CreateContext( ctx );
- _vbo_CreateContext( ctx );
- _tnl_CreateContext( ctx );
-
- _swsetup_CreateContext( ctx );
-
- /* Install the customized pipeline:
- */
- _tnl_destroy_pipeline( ctx );
- _tnl_install_pipeline( ctx, savage_pipeline );
-
- imesa->enable_fastpath = driQueryOptionb(&imesa->optionCache,
- "enable_fastpath");
- /* DRM versions before 2.1.3 would only render triangle lists. ELTS
- * support was added in 2.2.0. */
- if (imesa->enable_fastpath && sPriv->drm_version.minor < 2) {
- fprintf (stderr,
- "*** Disabling fast path because your DRM version is buggy "
- "or doesn't\n*** support ELTS. You need at least Savage DRM "
- "version 2.2.\n");
- imesa->enable_fastpath = GL_FALSE;
- }
-
- if (!savageScreen->bufs || savageScreen->chipset == S3_SUPERSAVAGE)
- imesa->enable_vdma = GL_FALSE;
- else
- imesa->enable_vdma = driQueryOptionb(&imesa->optionCache, "enable_vdma");
-
- imesa->sync_frames = driQueryOptionb(&imesa->optionCache, "sync_frames");
-
- /* Configure swrast to match hardware characteristics:
- */
- _tnl_allow_pixel_fog( ctx, GL_FALSE );
- _tnl_allow_vertex_fog( ctx, GL_TRUE );
- _swrast_allow_pixel_fog( ctx, GL_FALSE );
- _swrast_allow_vertex_fog( ctx, GL_TRUE );
-
- ctx->DriverCtx = (void *) imesa;
- imesa->glCtx = ctx;
-
-#ifndef SAVAGE_DEBUG
- SAVAGE_DEBUG = driParseDebugString( getenv( "SAVAGE_DEBUG" ),
- debug_control );
-#endif
-
- driInitExtensions( ctx, card_extensions, GL_TRUE );
- if (savageScreen->chipset >= S3_SAVAGE4)
- driInitExtensions( ctx, s4_extensions, GL_FALSE );
- if (ctx->Mesa_DXTn ||
- driQueryOptionb (&imesa->optionCache, "force_s3tc_enable")) {
- _mesa_enable_extension( ctx, "GL_S3_s3tc" );
- if (savageScreen->chipset >= S3_SAVAGE4)
- /* This extension needs DXT3 and DTX5 support in hardware.
- * Not available on Savage3D/MX/IX. */
- _mesa_enable_extension( ctx, "GL_EXT_texture_compression_s3tc" );
- }
-
- savageDDInitStateFuncs( ctx );
- savageDDInitSpanFuncs( ctx );
- savageDDInitDriverFuncs( ctx );
- savageDDInitIoctlFuncs( ctx );
- savageInitTriFuncs( ctx );
-
- savageDDInitState( imesa );
-
- driContextPriv->driverPrivate = (void *) imesa;
-
- return GL_TRUE;
-}
-
-static void
-savageDestroyContext(__DRIcontext *driContextPriv)
-{
- savageContextPtr imesa = (savageContextPtr) driContextPriv->driverPrivate;
- GLuint i;
-
- assert (imesa); /* should never be NULL */
- if (imesa) {
- savageFlushVertices(imesa);
- savageReleaseIndexedVerts(imesa);
- savageFlushCmdBuf(imesa, GL_TRUE); /* release DMA buffer */
- WAIT_IDLE_EMPTY(imesa);
-
- for (i = 0; i < imesa->lastTexHeap; i++)
- driDestroyTextureHeap(imesa->textureHeaps[i]);
-
- free(imesa->cmdBuf.base);
- free(imesa->clientVtxBuf.buf);
-
- _mesa_meta_free( imesa->glCtx );
-
- _swsetup_DestroyContext(imesa->glCtx );
- _tnl_DestroyContext( imesa->glCtx );
- _vbo_DestroyContext( imesa->glCtx );
- _swrast_DestroyContext( imesa->glCtx );
-
- /* free the Mesa context */
- imesa->glCtx->DriverCtx = NULL;
- _mesa_destroy_context(imesa->glCtx);
-
- /* no longer use vertex_dma_buf*/
- free(imesa);
- }
-}
-
-
-static GLboolean
-savageCreateBuffer( __DRIscreen *driScrnPriv,
- __DRIdrawable *driDrawPriv,
- const struct gl_config *mesaVis,
- GLboolean isPixmap)
-{
- savageScreenPrivate *screen = (savageScreenPrivate *) driScrnPriv->private;
-
- if (isPixmap) {
- return GL_FALSE; /* not implemented */
- }
- else {
- GLboolean swStencil = mesaVis->stencilBits > 0 && mesaVis->depthBits != 24;
- struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
- /*
- * XXX: this value needs to be set according to the config file
- * setting. But we don't get that until we create a rendering
- * context!!!!
- */
- GLboolean float_depth = GL_FALSE;
-
- {
- driRenderbuffer *frontRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- (GLubyte *) screen->aperture.map
- + 0x01000000 * TARGET_FRONT,
- screen->cpp,
- screen->frontOffset, screen->aperturePitch,
- driDrawPriv);
- savageSetSpanFunctions(frontRb, mesaVis, float_depth);
- assert(frontRb->Base.Data);
- _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
- }
-
- if (mesaVis->doubleBufferMode) {
- driRenderbuffer *backRb
- = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
- (GLubyte *) screen->aperture.map
- + 0x01000000 * TARGET_BACK,
- screen->cpp,
- screen->backOffset, screen->aperturePitch,
- driDrawPriv);
- savageSetSpanFunctions(backRb, mesaVis, float_depth);
- assert(backRb->Base.Data);
- _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
- }
-
- if (mesaVis->depthBits == 16) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_Z16,
- (GLubyte *) screen->aperture.map
- + 0x01000000 * TARGET_DEPTH,
- screen->zpp,
- screen->depthOffset, screen->aperturePitch,
- driDrawPriv);
- savageSetSpanFunctions(depthRb, mesaVis, float_depth);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
- else if (mesaVis->depthBits == 24) {
- driRenderbuffer *depthRb
- = driNewRenderbuffer(MESA_FORMAT_S8_Z24,
- (GLubyte *) screen->aperture.map
- + 0x01000000 * TARGET_DEPTH,
- screen->zpp,
- screen->depthOffset, screen->aperturePitch,
- driDrawPriv);
- savageSetSpanFunctions(depthRb, mesaVis, float_depth);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
- }
-
- if (mesaVis->stencilBits > 0 && !swStencil) {
- driRenderbuffer *stencilRb
- = driNewRenderbuffer(MESA_FORMAT_S8,
- (GLubyte *) screen->aperture.map
- + 0x01000000 * TARGET_DEPTH,
- screen->zpp,
- screen->depthOffset, screen->aperturePitch,
- driDrawPriv);
- savageSetSpanFunctions(stencilRb, mesaVis, float_depth);
- _mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base);
- }
-
- _mesa_add_soft_renderbuffers(fb,
- GL_FALSE, /* color */
- GL_FALSE, /* depth */
- swStencil,
- mesaVis->accumRedBits > 0,
- GL_FALSE, /* alpha */
- GL_FALSE /* aux */);
- driDrawPriv->driverPrivate = (void *) fb;
-
- return (driDrawPriv->driverPrivate != NULL);
- }
-}
-
-static void
-savageDestroyBuffer(__DRIdrawable *driDrawPriv)
-{
- _mesa_reference_framebuffer((struct gl_framebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-#if 0
-void XMesaSwapBuffers(__DRIdrawable *driDrawPriv)
-{
- /* XXX should do swap according to the buffer, not the context! */
- savageContextPtr imesa = savageCtx;
-
- FLUSH_VB( imesa->glCtx, "swap buffers" );
- savageSwapBuffers(imesa);
-}
-#endif
-
-
-void savageXMesaSetClipRects(savageContextPtr imesa)
-{
- __DRIdrawable *dPriv = imesa->driDrawable;
-
- if ((dPriv->numBackClipRects == 0)
- || (imesa->glCtx->DrawBuffer->_ColorDrawBufferIndexes[0] == BUFFER_FRONT_LEFT)) {
- imesa->numClipRects = dPriv->numClipRects;
- imesa->pClipRects = dPriv->pClipRects;
- imesa->drawX = dPriv->x;
- imesa->drawY = dPriv->y;
- } else {
- imesa->numClipRects = dPriv->numBackClipRects;
- imesa->pClipRects = dPriv->pBackClipRects;
- imesa->drawX = dPriv->backX;
- imesa->drawY = dPriv->backY;
- }
-
- savageCalcViewport( imesa->glCtx );
-}
-
-
-static void savageXMesaWindowMoved( savageContextPtr imesa )
-{
- __DRIdrawable *const drawable = imesa->driDrawable;
- __DRIdrawable *const readable = imesa->driReadable;
-
- if (0)
- fprintf(stderr, "savageXMesaWindowMoved\n\n");
-
- savageXMesaSetClipRects(imesa);
-
- driUpdateFramebufferSize(imesa->glCtx, drawable);
- if (drawable != readable) {
- driUpdateFramebufferSize(imesa->glCtx, readable);
- }
-}
-
-
-static GLboolean
-savageUnbindContext(__DRIcontext *driContextPriv)
-{
- savageContextPtr savage = (savageContextPtr) driContextPriv->driverPrivate;
- if (savage)
- savage->dirty = ~0;
-
- return GL_TRUE;
-}
-
-#if 0
-static GLboolean
-savageOpenFullScreen(__DRIcontext *driContextPriv)
-{
-
-
-
- if (driContextPriv) {
- savageContextPtr imesa = (savageContextPtr) driContextPriv->driverPrivate;
- imesa->IsFullScreen = GL_TRUE;
- imesa->backup_frontOffset = imesa->savageScreen->frontOffset;
- imesa->backup_backOffset = imesa->savageScreen->backOffset;
- imesa->backup_frontBitmapDesc = imesa->savageScreen->frontBitmapDesc;
- imesa->savageScreen->frontBitmapDesc = imesa->savageScreen->backBitmapDesc;
- imesa->toggle = TARGET_BACK;
- }
-
- return GL_TRUE;
-}
-
-static GLboolean
-savageCloseFullScreen(__DRIcontext *driContextPriv)
-{
-
- if (driContextPriv) {
- savageContextPtr imesa = (savageContextPtr) driContextPriv->driverPrivate;
- WAIT_IDLE_EMPTY(imesa);
- imesa->IsFullScreen = GL_FALSE;
- imesa->savageScreen->frontOffset = imesa->backup_frontOffset;
- imesa->savageScreen->backOffset = imesa->backup_backOffset;
- imesa->savageScreen->frontBitmapDesc = imesa->backup_frontBitmapDesc;
- }
- return GL_TRUE;
-}
-#endif
-
-static GLboolean
-savageMakeCurrent(__DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv)
-{
- if (driContextPriv) {
- savageContextPtr imesa
- = (savageContextPtr) driContextPriv->driverPrivate;
- struct gl_framebuffer *drawBuffer
- = (struct gl_framebuffer *) driDrawPriv->driverPrivate;
- struct gl_framebuffer *readBuffer
- = (struct gl_framebuffer *) driReadPriv->driverPrivate;
- driRenderbuffer *frontRb = (driRenderbuffer *)
- drawBuffer->Attachment[BUFFER_FRONT_LEFT].Renderbuffer;
- driRenderbuffer *backRb = (driRenderbuffer *)
- drawBuffer->Attachment[BUFFER_BACK_LEFT].Renderbuffer;
-
- assert(frontRb->Base.Data);
- if (imesa->glCtx->Visual.doubleBufferMode) {
- assert(backRb->Base.Data);
- }
-
- imesa->driReadable = driReadPriv;
- imesa->driDrawable = driDrawPriv;
- imesa->dirty = ~0;
-
- _mesa_make_current(imesa->glCtx, drawBuffer, readBuffer);
-
- savageXMesaWindowMoved( imesa );
- }
- else
- {
- _mesa_make_current(NULL, NULL, NULL);
- }
- return GL_TRUE;
-}
-
-
-void savageGetLock( savageContextPtr imesa, GLuint flags )
-{
- __DRIdrawable *const drawable = imesa->driDrawable;
- __DRIdrawable *const readable = imesa->driReadable;
- __DRIscreen *sPriv = imesa->driScreen;
- drm_savage_sarea_t *sarea = imesa->sarea;
- int me = imesa->hHWContext;
- int stamp = drawable->lastStamp;
- int heap;
- unsigned int timestamp = 0;
-
-
-
- /* We know there has been contention.
- */
- drmGetLock(imesa->driFd, imesa->hHWContext, flags);
-
-
- /* Note contention for throttling hint
- */
- imesa->any_contend = 1;
-
- /* If the window moved, may need to set a new cliprect now.
- *
- * NOTE: This releases and regains the hw lock, so all state
- * checking must be done *after* this call:
- */
- DRI_VALIDATE_DRAWABLE_INFO(sPriv, drawable);
- if (drawable != readable) {
- DRI_VALIDATE_DRAWABLE_INFO(sPriv, readable);
- }
-
-
- /* If we lost context, need to dump all registers to hardware.
- * Note that we don't care about 2d contexts, even if they perform
- * accelerated commands, so the DRI locking in the X server is even
- * more broken than usual.
- */
- if (sarea->ctxOwner != me) {
- imesa->dirty |= (SAVAGE_UPLOAD_LOCAL |
- SAVAGE_UPLOAD_GLOBAL |
- SAVAGE_UPLOAD_FOGTBL |
- SAVAGE_UPLOAD_TEX0 |
- SAVAGE_UPLOAD_TEX1 |
- SAVAGE_UPLOAD_TEXGLOBAL);
- imesa->lostContext = GL_TRUE;
- sarea->ctxOwner = me;
- }
-
- for (heap = 0; heap < imesa->lastTexHeap; ++heap) {
- /* If a heap was changed, update its timestamp. Do this before
- * DRI_AGE_TEXTURES updates the local_age. */
- if (imesa->textureHeaps[heap] &&
- imesa->textureHeaps[heap]->global_age[0] >
- imesa->textureHeaps[heap]->local_age) {
- if (timestamp == 0)
- timestamp = savageEmitEventLocked(imesa, 0);
- imesa->textureHeaps[heap]->timestamp = timestamp;
- }
- DRI_AGE_TEXTURES( imesa->textureHeaps[heap] );
- }
-
- if (drawable->lastStamp != stamp) {
- driUpdateFramebufferSize(imesa->glCtx, drawable);
- savageXMesaWindowMoved( imesa );
- }
-}
-
-static const __DRIconfig **
-savageFillInModes( __DRIscreen *psp,
- unsigned pixel_bits, unsigned depth_bits,
- unsigned stencil_bits, GLboolean have_back_buffer )
-{
- __DRIconfig **configs;
- struct gl_config * m;
- unsigned depth_buffer_factor;
- unsigned back_buffer_factor;
- GLenum fb_format;
- GLenum fb_type;
- int i;
-
- /* Right now GLX_SWAP_COPY_OML isn't supported, but it would be easy
- * enough to add support. Basically, if a context is created with an
- * fbconfig where the swap method is GLX_SWAP_COPY_OML, pageflipping
- * will never be used.
- *
- * FK: What about drivers that don't use page flipping? Could they
- * just expose GLX_SWAP_COPY_OML?
- */
- static const GLenum back_buffer_modes[] = {
- GLX_NONE, GLX_SWAP_UNDEFINED_OML /*, GLX_SWAP_COPY_OML */
- };
-
- uint8_t depth_bits_array[2];
- uint8_t stencil_bits_array[2];
- uint8_t msaa_samples_array[1];
-
- depth_bits_array[0] = depth_bits;
- depth_bits_array[1] = depth_bits;
-
- /* Just like with the accumulation buffer, always provide some modes
- * with a stencil buffer. It will be a sw fallback, but some apps won't
- * care about that.
- */
- stencil_bits_array[0] = 0;
- stencil_bits_array[1] = (stencil_bits == 0) ? 8 : stencil_bits;
-
- msaa_samples_array[0] = 0;
-
- depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 2 : 1;
- back_buffer_factor = (have_back_buffer) ? 2 : 1;
-
- if ( pixel_bits == 16 ) {
- fb_format = GL_RGB;
- fb_type = GL_UNSIGNED_SHORT_5_6_5;
- }
- else {
- fb_format = GL_BGR;
- fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- configs = driCreateConfigs(fb_format, fb_type,
- depth_bits_array, stencil_bits_array,
- depth_buffer_factor,
- back_buffer_modes, back_buffer_factor,
- msaa_samples_array, 1, GL_TRUE);
- if (configs == NULL) {
- fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
- __func__, __LINE__ );
- return NULL;
- }
-
- /* Mark the visual as slow if there are "fake" stencil bits.
- */
- for (i = 0; configs[i]; i++) {
- m = &configs[i]->modes;
- if ((m->stencilBits != 0) && (m->stencilBits != stencil_bits)) {
- m->visualRating = GLX_SLOW_CONFIG;
- }
- }
-
- return (const __DRIconfig **) configs;
-}
-
-
-/**
- * This is the driver specific part of the createNewScreen entry point.
- *
- * \todo maybe fold this into intelInitDriver
- *
- * \return the struct gl_config supported by this driver
- */
-static const __DRIconfig **
-savageInitScreen(__DRIscreen *psp)
-{
- static const __DRIversion ddx_expected = { 2, 0, 0 };
- static const __DRIversion dri_expected = { 4, 0, 0 };
- static const __DRIversion drm_expected = { 2, 1, 0 };
- SAVAGEDRIPtr dri_priv = (SAVAGEDRIPtr)psp->pDevPriv;
-
- if ( ! driCheckDriDdxDrmVersions2( "Savage",
- &psp->dri_version, & dri_expected,
- &psp->ddx_version, & ddx_expected,
- &psp->drm_version, & drm_expected ) )
- return NULL;
-
- if (!savageInitDriver(psp))
- return NULL;
-
- return savageFillInModes( psp,
- dri_priv->cpp*8,
- (dri_priv->cpp == 2) ? 16 : 24,
- (dri_priv->cpp == 2) ? 0 : 8,
- (dri_priv->backOffset != dri_priv->depthOffset) );
-}
-
-const struct __DriverAPIRec driDriverAPI = {
- savageInitScreen,
- savageDestroyScreen,
- savageCreateContext,
- savageDestroyContext,
- savageCreateBuffer,
- savageDestroyBuffer,
- savageSwapBuffers,
- savageMakeCurrent,
- savageUnbindContext
-};
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
- &driCoreExtension.base,
- &driLegacyExtension.base,
- NULL
-};
diff --git a/src/mesa/drivers/dri/savage/savagecontext.h b/src/mesa/drivers/dri/savage/savagecontext.h
deleted file mode 100644
index 75bec62fa84..00000000000
--- a/src/mesa/drivers/dri/savage/savagecontext.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-
-#ifndef SAVAGECONTEXT_INC
-#define SAVAGECONTEXT_INC
-
-typedef struct savage_context_t savageContext;
-typedef struct savage_context_t *savageContextPtr;
-typedef struct savage_texture_object_t *savageTextureObjectPtr;
-
-#include "dri_util.h"
-#include "main/mtypes.h"
-#include "xf86drm.h"
-#include "drm.h"
-#include "savage_drm.h"
-#include "savage_init.h"
-#include "savage_3d_reg.h"
-#include "main/mm.h"
-#include "tnl/t_vertex.h"
-
-#include "texmem.h"
-
-#include "xmlconfig.h"
-
-/* Reasons to fallback on all primitives.
- */
-#define SAVAGE_FALLBACK_TEXTURE 0x1
-#define SAVAGE_FALLBACK_DRAW_BUFFER 0x2
-#define SAVAGE_FALLBACK_READ_BUFFER 0x4
-#define SAVAGE_FALLBACK_COLORMASK 0x8
-#define SAVAGE_FALLBACK_SPECULAR 0x10
-#define SAVAGE_FALLBACK_LOGICOP 0x20
-/*frank 2001/11/12 add the stencil fallbak*/
-#define SAVAGE_FALLBACK_STENCIL 0x40
-#define SAVAGE_FALLBACK_RENDERMODE 0x80
-#define SAVAGE_FALLBACK_BLEND_EQ 0x100
-#define SAVAGE_FALLBACK_NORAST 0x200
-#define SAVAGE_FALLBACK_PROJ_TEXTURE 0x400
-
-
-#define HW_CULL 1
-
-/* for savagectx.new_state - manage GL->driver state changes
- */
-#define SAVAGE_NEW_TEXTURE 0x1
-#define SAVAGE_NEW_CULL 0x2
-
-/* What needs to be changed for the current vertex dma buffer?
- * This will go away!
- */
-#define SAVAGE_UPLOAD_LOCAL 0x1 /* DrawLocalCtrl (S4) or
- DrawCtrl and ZBufCtrl (S3D) */
-#define SAVAGE_UPLOAD_TEX0 0x2 /* texture unit 0 */
-#define SAVAGE_UPLOAD_TEX1 0x4 /* texture unit 1 (S4 only) */
-#define SAVAGE_UPLOAD_FOGTBL 0x8 /* fog table */
-#define SAVAGE_UPLOAD_GLOBAL 0x10 /* most global regs */
-#define SAVAGE_UPLOAD_TEXGLOBAL 0x20 /* TexBlendColor (S4 only) */
-
-/*define the max numer of vertex in vertex buf*/
-#define SAVAGE_MAX_VERTEXS 0x10000
-
-/* Don't make it too big. We don't want to buffer up a whole frame
- * that would force the application to wait later. */
-#define SAVAGE_CMDBUF_SIZE 1024
-
-/* Use the templated vertex formats:
- */
-#define TAG(x) savage##x
-#include "tnl_dd/t_dd_vertex.h"
-#undef TAG
-
-typedef void (*savage_tri_func)( savageContextPtr, savageVertex *,
- savageVertex *, savageVertex * );
-typedef void (*savage_line_func)( savageContextPtr,
- savageVertex *, savageVertex * );
-typedef void (*savage_point_func)( savageContextPtr, savageVertex * );
-
-
-/**************************************************************
- **************** enums for chip IDs ************************
- **************************************************************/
-
-#define CHIP_S3GX3MS1NB 0x8A25
-#define CHIP_S3GX3MS1NBK 0x8A26
-#define CHIP_S3TWISTER 0x8D01
-#define CHIP_S3TWISTERK 0x8D02
-#define CHIP_S3TWISTER_P4M 0x8D04
-#define CHIP_S3PARAMOUNT128 0x8C22 /*SuperSavage 128/MX*/
-#define CHIP_S3TRISTAR128SDR 0x8C2A /*SuperSavage 128/IX*/
-#define CHIP_S3TRISTAR64SDRM7 0x8C2C /*SuperSavage/IX M7 Package*/
-#define CHIP_S3TRISTAR64SDR 0x8C2E /*SuperSavage/IX*/
-#define CHIP_S3TRISTAR64CDDR 0x8C2F /*SuperSavage/IXC DDR*/
-
-#define IS_SAVAGE(imesa) (imesa->savageScreen->deviceID == CHIP_S3GX3MS1NB || \
- imesa->savageScreen->deviceID == CHIP_S3GX3MS1NBK || \
- imesa->savageScreen->deviceID == CHIP_S3TWISTER || \
- imesa->savageScreen->deviceID == CHIP_S3TWISTERK || \
- imesa->savageScreen->deviceID == CHIP_S3TWISTER_P4M || \
- imesa->savageScreen->deviceID == CHIP_S3PARAMOUNT128 || \
- imesa->savageScreen->deviceID == CHIP_S3TRISTAR128SDR || \
- imesa->savageScreen->deviceID == CHIP_S3TRISTAR64SDRM7 || \
- imesa->savageScreen->deviceID == CHIP_S3TRISTAR64SDR || \
- imesa->savageScreen->deviceID == CHIP_S3TRISTAR64CDDR )
-
-
-struct savage_vtxbuf_t {
- GLuint total, used, flushed; /* in 32 bit units */
- GLuint idx; /* for DMA buffers */
- uint32_t *buf;
-};
-
-struct savage_cmdbuf_t {
- GLuint size; /* size in qwords */
- drm_savage_cmd_header_t *base; /* initial state starts here */
- drm_savage_cmd_header_t *start; /* drawing/state commands start here */
- drm_savage_cmd_header_t *write; /* append stuff here */
-};
-
-struct savage_elt_t {
- GLuint n; /* number of elts currently allocated */
- drm_savage_cmd_header_t *cmd; /* the indexed drawing command */
-};
-
-
-struct savage_context_t {
- GLint refcount;
-
- struct gl_context *glCtx;
-
- int lastTexHeap;
- driTexHeap *textureHeaps[SAVAGE_NR_TEX_HEAPS];
- driTextureObject swapped;
-
- driTextureObject *CurrentTexObj[2];
-
- /* Hardware state
- */
-
- savageRegisters regs, oldRegs, globalRegMask;
-
- /* Manage our own state */
- GLuint new_state;
- GLuint new_gl_state;
- GLboolean ptexHack;
-
- /* Command buffer */
- struct savage_cmdbuf_t cmdBuf;
-
- /* Elt book-keeping */
- struct savage_elt_t elts;
- GLint firstElt;
-
- /* Vertex buffers */
- struct savage_vtxbuf_t dmaVtxBuf, clientVtxBuf;
- struct savage_vtxbuf_t *vtxBuf;
-
- /* aperture base */
- GLubyte *apertureBase[5];
- GLuint aperturePitch;
- /* Manage hardware state */
- GLuint dirty;
- GLboolean lostContext;
- GLuint bTexEn1;
- /* One of the few bits of hardware state that can't be calculated
- * completely on the fly:
- */
- GLuint LcsCullMode;
- GLuint texEnvColor;
-
- /* Vertex state
- */
- GLuint vertex_size;
- struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
- GLuint vertex_attr_count;
- char *verts; /* points to tnl->clipspace.vertex_buf */
-
- /* Rasterization state
- */
- GLuint SetupNewInputs;
- GLuint SetupIndex;
- GLuint RenderIndex;
-
- GLuint hw_primitive;
- GLenum raster_primitive;
- GLenum render_primitive;
-
- GLuint skip;
- GLubyte HwPrim;
- GLuint HwVertexSize;
-
- /* Fallback rasterization functions
- */
- savage_point_func draw_point;
- savage_line_func draw_line;
- savage_tri_func draw_tri;
-
- /* Funny mesa mirrors
- */
- GLuint MonoColor;
- GLuint ClearColor;
- GLfloat depth_scale;
- GLfloat hw_viewport[16];
- /* DRI stuff */
- GLuint bufferSize;
-
- struct gl_framebuffer *glBuffer;
-
- /* Two flags to keep track of fallbacks. */
- GLuint Fallback;
-
- GLuint needClip;
-
- /* These refer to the current draw (front vs. back) buffer:
- */
- int drawX; /* origin of drawable in draw buffer */
- int drawY;
- GLuint numClipRects; /* cliprects for that buffer */
- GLint currentClip;
- drm_clip_rect_t *pClipRects;
-
- /* use this bit to support single/double buffer */
- GLuint IsDouble;
- /* use this to indicate Fullscreen mode */
- GLuint IsFullScreen; /* FIXME - open/close fullscreen is gone, is this needed? */
- GLuint backup_frontOffset;
- GLuint backup_backOffset;
- GLuint backup_frontBitmapDesc;
- GLuint toggle;
- GLuint backup_streamFIFO;
- GLuint NotFirstFrame;
-
- GLboolean inSwap;
- GLuint lastSwap;
- GLuint ctxAge;
- GLuint dirtyAge;
- GLuint any_contend; /* throttle me harder */
-
- /* Scissor state needs to be mirrored so buffered commands can be
- * emitted with the old scissor state when scissor state changes.
- */
- struct {
- GLboolean enabled;
- GLint x, y;
- GLsizei w, h;
- } scissor;
-
- drm_context_t hHWContext;
- drm_hw_lock_t *driHwLock;
- GLuint driFd;
-
- __DRIdrawable *driDrawable;
- __DRIdrawable *driReadable;
-
- __DRIscreen *driScreen;
- savageScreenPrivate *savageScreen;
- drm_savage_sarea_t *sarea;
-
- GLboolean hw_stencil;
-
- /* Performance counters
- */
- GLuint c_textureSwaps;
-
- /* Configuration cache
- */
- driOptionCache optionCache;
- GLint texture_depth;
- GLboolean no_rast;
- GLboolean float_depth;
- GLboolean enable_fastpath;
- GLboolean enable_vdma;
- GLboolean sync_frames;
-};
-
-#define SAVAGE_CONTEXT(ctx) ((savageContextPtr)(ctx->DriverCtx))
-
-/* To remove all debugging, make sure SAVAGE_DEBUG is defined as a
- * preprocessor symbol, and equal to zero.
- */
-#ifndef SAVAGE_DEBUG
-extern int SAVAGE_DEBUG;
-#endif
-
-#define DEBUG_FALLBACKS 0x001
-#define DEBUG_VERBOSE_API 0x002
-#define DEBUG_VERBOSE_TEX 0x004
-#define DEBUG_VERBOSE_MSG 0x008
-#define DEBUG_DMA 0x010
-#define DEBUG_STATE 0x020
-
-#define TARGET_FRONT 0x0
-#define TARGET_BACK 0x1
-#define TARGET_DEPTH 0x2
-
-#define SUBPIXEL_X -0.5
-#define SUBPIXEL_Y -0.375
-
-#endif
diff --git a/src/mesa/drivers/dri/savage/savagedd.c b/src/mesa/drivers/dri/savage/savagedd.c
deleted file mode 100644
index c7f58835054..00000000000
--- a/src/mesa/drivers/dri/savage/savagedd.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#include "main/mtypes.h"
-#include "main/framebuffer.h"
-
-#include
-
-#include "main/mm.h"
-
-#include "savagedd.h"
-#include "savagestate.h"
-#include "savagetex.h"
-#include "savagecontext.h"
-
-#include "utils.h"
-
-
-/***************************************
- * Mesa's Driver Functions
- ***************************************/
-
-
-static const GLubyte *savageDDGetString( struct gl_context *ctx, GLenum name )
-{
- static char *cardNames[S3_LAST] = {
- "Unknown",
- "Savage3D",
- "Savage/MX/IX",
- "Savage4",
- "ProSavage",
- "Twister",
- "ProSavageDDR",
- "SuperSavage",
- "Savage2000"
- };
- static char buffer[128];
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- savageScreenPrivate *screen = imesa->savageScreen;
- enum S3CHIPTAGS chipset = screen->chipset;
- unsigned offset;
-
- if (chipset < S3_SAVAGE3D || chipset >= S3_LAST)
- chipset = S3_UNKNOWN; /* should not happen */
-
- switch (name) {
- case GL_VENDOR:
- return (GLubyte *)"S3 Graphics Inc.";
- case GL_RENDERER:
- offset = driGetRendererString( buffer, cardNames[chipset],
- screen->agpMode );
- return (GLubyte *)buffer;
- default:
- return 0;
- }
-}
-#if 0
-static GLint savageGetParameteri(const struct gl_context *ctx, GLint param)
-{
- switch (param) {
- case DD_HAVE_HARDWARE_FOG:
- return 1;
- default:
- return 0;
- }
-}
-#endif
-
-
-void savageDDInitDriverFuncs( struct gl_context *ctx )
-{
- ctx->Driver.GetString = savageDDGetString;
-}
diff --git a/src/mesa/drivers/dri/savage/savagedd.h b/src/mesa/drivers/dri/savage/savagedd.h
deleted file mode 100644
index c5261412999..00000000000
--- a/src/mesa/drivers/dri/savage/savagedd.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#ifndef SAVAGEDD_INC
-#define SAVAGEDD_INC
-
-#include "main/context.h"
-
-void savageDDInitDriverFuncs( struct gl_context *ctx );
-#endif
diff --git a/src/mesa/drivers/dri/savage/savageioctl.c b/src/mesa/drivers/dri/savage/savageioctl.c
deleted file mode 100644
index 46bbb653b81..00000000000
--- a/src/mesa/drivers/dri/savage/savageioctl.c
+++ /dev/null
@@ -1,662 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#include
-#include
-#include
-
-#include "main/mtypes.h"
-#include "main/macros.h"
-#include "main/dd.h"
-#include "main/context.h"
-#include "main/colormac.h"
-#include "main/mm.h"
-#include "swrast/swrast.h"
-
-#include "savagecontext.h"
-#include "savageioctl.h"
-#include "savagestate.h"
-#include "savagespan.h"
-
-#include "drm.h"
-#include
-
-#define DEPTH_SCALE_16 ((1<<16)-1)
-#define DEPTH_SCALE_24 ((1<<24)-1)
-
-
-void savageGetDMABuffer( savageContextPtr imesa )
-{
- int idx = 0;
- int size = 0;
- drmDMAReq dma;
- int retcode;
- drmBufPtr buf;
-
- assert (imesa->savageScreen->bufs);
-
- if (SAVAGE_DEBUG & DEBUG_DMA)
- fprintf(stderr, "Getting dma buffer\n");
-
- dma.context = imesa->hHWContext;
- dma.send_count = 0;
- dma.send_list = NULL;
- dma.send_sizes = NULL;
- dma.flags = 0;
- dma.request_count = 1;
- dma.request_size = imesa->bufferSize;
- dma.request_list = &idx;
- dma.request_sizes = &size;
- dma.granted_count = 0;
-
-
- if (SAVAGE_DEBUG & DEBUG_DMA)
- fprintf(stderr, "drmDMA (get) ctx %d count %d size 0x%x\n",
- dma.context, dma.request_count,
- dma.request_size);
-
- while (1) {
- retcode = drmDMA(imesa->driFd, &dma);
-
- if (SAVAGE_DEBUG & DEBUG_DMA)
- fprintf(stderr, "retcode %d sz %d idx %d count %d\n",
- retcode,
- dma.request_sizes[0],
- dma.request_list[0],
- dma.granted_count);
-
- if (retcode == 0 &&
- dma.request_sizes[0] &&
- dma.granted_count)
- break;
-
- if (SAVAGE_DEBUG & DEBUG_DMA)
- fprintf(stderr, "\n\nflush");
- }
-
- buf = &(imesa->savageScreen->bufs->list[idx]);
-
- if (SAVAGE_DEBUG & DEBUG_DMA)
- fprintf(stderr,
- "drmDMA (get) returns size[0] 0x%x idx[0] %d\n"
- "dma_buffer now: buf idx: %d size: %d used: %d addr %p\n",
- dma.request_sizes[0], dma.request_list[0],
- buf->idx, buf->total,
- buf->used, buf->address);
-
- imesa->dmaVtxBuf.total = buf->total / 4;
- imesa->dmaVtxBuf.used = 0;
- imesa->dmaVtxBuf.flushed = 0;
- imesa->dmaVtxBuf.idx = buf->idx;
- imesa->dmaVtxBuf.buf = (uint32_t *)buf->address;
-
- if (SAVAGE_DEBUG & DEBUG_DMA)
- fprintf(stderr, "finished getbuffer\n");
-}
-
-#if 0
-/* Still keeping this around because it demonstrates page flipping and
- * automatic z-clear. */
-static void savage_BCI_clear(struct gl_context *ctx, drm_savage_clear_t *pclear)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- int nbox = imesa->sarea->nbox;
- drm_clip_rect_t *pbox = imesa->sarea->boxes;
- int i;
-
-
- if (nbox > SAVAGE_NR_SAREA_CLIPRECTS)
- nbox = SAVAGE_NR_SAREA_CLIPRECTS;
-
- for (i = 0 ; i < nbox ; i++, pbox++) {
- unsigned int x = pbox->x1;
- unsigned int y = pbox->y1;
- unsigned int width = pbox->x2 - x;
- unsigned int height = pbox->y2 - y;
- uint32_t *bciptr;
-
- if (pbox->x1 > pbox->x2 ||
- pbox->y1 > pbox->y2 ||
- pbox->x2 > imesa->savageScreen->width ||
- pbox->y2 > imesa->savageScreen->height)
- continue;
-
- if ( pclear->flags & SAVAGE_FRONT ) {
- bciptr = savageDMAAlloc (imesa, 8);
- WRITE_CMD((bciptr) , 0x4BCC8C00,uint32_t);
- WRITE_CMD((bciptr) , imesa->savageScreen->frontOffset,uint32_t);
- WRITE_CMD((bciptr) , imesa->savageScreen->frontBitmapDesc,uint32_t);
- WRITE_CMD((bciptr) , pclear->clear_color,uint32_t);
- WRITE_CMD((bciptr) , (y <<16) | x,uint32_t);
- WRITE_CMD((bciptr) , (height << 16) | width,uint32_t);
- savageDMACommit (imesa, bciptr);
- }
- if ( pclear->flags & SAVAGE_BACK ) {
- bciptr = savageDMAAlloc (imesa, 8);
- WRITE_CMD((bciptr) , 0x4BCC8C00,uint32_t);
- WRITE_CMD((bciptr) , imesa->savageScreen->backOffset,uint32_t);
- WRITE_CMD((bciptr) , imesa->savageScreen->backBitmapDesc,uint32_t);
- WRITE_CMD((bciptr) , pclear->clear_color,uint32_t);
- WRITE_CMD((bciptr) , (y <<16) | x,uint32_t);
- WRITE_CMD((bciptr) , (height << 16) | width,uint32_t);
- savageDMACommit (imesa, bciptr);
- }
-
- if ( pclear->flags & (SAVAGE_DEPTH |SAVAGE_STENCIL) ) {
- uint32_t writeMask = 0x0;
- if(imesa->hw_stencil)
- {
- if(pclear->flags & SAVAGE_STENCIL)
- {
-
- writeMask |= 0xFF000000;
- }
- if(pclear->flags & SAVAGE_DEPTH)
- {
- writeMask |= 0x00FFFFFF;
- }
- }
- if(imesa->IsFullScreen && imesa->NotFirstFrame &&
- imesa->savageScreen->chipset >= S3_SAVAGE4)
- {
- imesa->regs.s4.zBufCtrl.ni.autoZEnable = GL_TRUE;
- imesa->regs.s4.zBufCtrl.ni.frameID =
- ~imesa->regs.s4.zBufCtrl.ni.frameID;
-
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
- }
- else
- {
- if(imesa->IsFullScreen)
- imesa->NotFirstFrame = GL_TRUE;
-
- if(imesa->hw_stencil)
- {
- bciptr = savageDMAAlloc (imesa, 10);
- if(writeMask != 0xFFFFFFFF)
- {
- WRITE_CMD((bciptr) , 0x960100D7,uint32_t);
- WRITE_CMD((bciptr) , writeMask,uint32_t);
- }
- }
- else
- {
- bciptr = savageDMAAlloc (imesa, 6);
- }
-
- WRITE_CMD((bciptr) , 0x4BCC8C00,uint32_t);
- WRITE_CMD((bciptr) , imesa->savageScreen->depthOffset,uint32_t);
- WRITE_CMD((bciptr) , imesa->savageScreen->depthBitmapDesc,uint32_t);
- WRITE_CMD((bciptr) , pclear->clear_depth,uint32_t);
- WRITE_CMD((bciptr) , (y <<16) | x,uint32_t);
- WRITE_CMD((bciptr) , (height << 16) | width,uint32_t);
- if(imesa->hw_stencil)
- {
- if(writeMask != 0xFFFFFFFF)
- {
- WRITE_CMD((bciptr) , 0x960100D7,uint32_t);
- WRITE_CMD((bciptr) , 0xFFFFFFFF,uint32_t);
- }
- }
- savageDMACommit (imesa, bciptr);
- }
- }
- }
- /* FK: Make sure that the clear stuff is emitted. Otherwise a
- software fallback may get overwritten by a delayed clear. */
- savageDMAFlush (imesa);
-}
-
-static void savage_BCI_swap(savageContextPtr imesa)
-{
- int nbox = imesa->sarea->nbox;
- drm_clip_rect_t *pbox = imesa->sarea->boxes;
- int i;
- volatile uint32_t *bciptr;
-
- if (nbox > SAVAGE_NR_SAREA_CLIPRECTS)
- nbox = SAVAGE_NR_SAREA_CLIPRECTS;
- savageDMAFlush (imesa);
-
- if(imesa->IsFullScreen)
- { /* full screen*/
- unsigned int tmp0;
- tmp0 = imesa->savageScreen->frontOffset;
- imesa->savageScreen->frontOffset = imesa->savageScreen->backOffset;
- imesa->savageScreen->backOffset = tmp0;
-
- if(imesa->toggle == TARGET_BACK)
- imesa->toggle = TARGET_FRONT;
- else
- imesa->toggle = TARGET_BACK;
-
- driFlipRenderbuffers(imesa->glCtx->DrawBuffer,
- imesa->toggle != TARGET_FRONT);
-
- imesa->regs.s4.destCtrl.ni.offset = imesa->savageScreen->backOffset>>11;
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
- bciptr = SAVAGE_GET_BCI_POINTER(imesa,3);
- *(bciptr) = 0x960100B0;
- *(bciptr) = (imesa->savageScreen->frontOffset);
- *(bciptr) = 0xA0000000;
- }
-
- else
- { /* Use bitblt copy from back to front buffer*/
-
- for (i = 0 ; i < nbox; i++, pbox++)
- {
- unsigned int w = pbox->x2 - pbox->x1;
- unsigned int h = pbox->y2 - pbox->y1;
-
- if (pbox->x1 > pbox->x2 ||
- pbox->y1 > pbox->y2 ||
- pbox->x2 > imesa->savageScreen->width ||
- pbox->y2 > imesa->savageScreen->height)
- continue;
-
- bciptr = SAVAGE_GET_BCI_POINTER(imesa,6);
-
- *(bciptr) = 0x4BCC00C0;
-
- *(bciptr) = imesa->savageScreen->backOffset;
- *(bciptr) = imesa->savageScreen->backBitmapDesc;
- *(bciptr) = (pbox->y1 <<16) | pbox->x1; /*x0, y0*/
- *(bciptr) = (pbox->y1 <<16) | pbox->x1;
- *(bciptr) = (h << 16) | w;
- }
-
- }
-}
-#endif
-
-
-static GLboolean intersect_rect( drm_clip_rect_t *out,
- const drm_clip_rect_t *a,
- const drm_clip_rect_t *b )
-{
- *out = *a;
- if (b->x1 > out->x1) out->x1 = b->x1;
- if (b->y1 > out->y1) out->y1 = b->y1;
- if (b->x2 < out->x2) out->x2 = b->x2;
- if (b->y2 < out->y2) out->y2 = b->y2;
-
- return ((out->x1 < out->x2) && (out->y1 < out->y2));
-}
-
-
-static GLuint savageIntersectClipRects(drm_clip_rect_t *dest,
- const drm_clip_rect_t *src,
- GLuint nsrc,
- const drm_clip_rect_t *clip)
-{
- GLuint i, ndest;
-
- for (i = 0, ndest = 0; i < nsrc; ++i, ++src) {
- if (intersect_rect(dest, src, clip)) {
- dest++;
- ndest++;
- }
- }
-
- return ndest;
-}
-
-
-static void savageDDClear( struct gl_context *ctx, GLbitfield mask )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
- GLuint colorMask, depthMask, clearColor, clearDepth, flags;
- GLint cx = ctx->DrawBuffer->_Xmin;
- GLint cy = ctx->DrawBuffer->_Ymin;
- GLint cw = ctx->DrawBuffer->_Xmax - cx;
- GLint ch = ctx->DrawBuffer->_Ymax - cy;
-
- /* XXX FIX ME: the cx,cy,cw,ch vars are currently ignored! */
- (void) ch;
- (void) cw;
-
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "%s\n", __FUNCTION__);
-
- clearColor = imesa->ClearColor;
- if (imesa->float_depth) {
- if (imesa->savageScreen->zpp == 2)
- clearDepth = savageEncodeFloat16(1.0 - ctx->Depth.Clear);
- else
- clearDepth = savageEncodeFloat24(1.0 - ctx->Depth.Clear);
- } else {
- if (imesa->savageScreen->zpp == 2)
- clearDepth = (GLuint) ((1.0 - ctx->Depth.Clear) * DEPTH_SCALE_16);
- else
- clearDepth = (GLuint) ((1.0 - ctx->Depth.Clear) * DEPTH_SCALE_24);
- }
-
- colorMask = 0;
- depthMask = 0;
- switch (imesa->savageScreen->cpp) {
- case 2:
- colorMask = PACK_COLOR_565(ctx->Color.ColorMask[0][0],
- ctx->Color.ColorMask[0][1],
- ctx->Color.ColorMask[0][2]);
- break;
- case 4:
- colorMask = PACK_COLOR_8888(ctx->Color.ColorMask[0][3],
- ctx->Color.ColorMask[0][2],
- ctx->Color.ColorMask[0][1],
- ctx->Color.ColorMask[0][0]);
- break;
- }
-
- flags = 0;
-
- if (mask & BUFFER_BIT_FRONT_LEFT) {
- flags |= SAVAGE_FRONT;
- mask &= ~BUFFER_BIT_FRONT_LEFT;
- }
-
- if (mask & BUFFER_BIT_BACK_LEFT) {
- flags |= SAVAGE_BACK;
- mask &= ~BUFFER_BIT_BACK_LEFT;
- }
-
- if ((mask & BUFFER_BIT_DEPTH) && ctx->Depth.Mask) {
- flags |= SAVAGE_DEPTH;
- depthMask |=
- (imesa->savageScreen->zpp == 2) ? 0xffffffff : 0x00ffffff;
- mask &= ~BUFFER_BIT_DEPTH;
- }
-
- if((mask & BUFFER_BIT_STENCIL) && imesa->hw_stencil)
- {
- flags |= SAVAGE_DEPTH;
- depthMask |= 0xff000000;
- mask &= ~BUFFER_BIT_STENCIL;
- }
-
- savageFlushVertices(imesa);
-
- if (flags) {
- GLboolean depthCleared = GL_FALSE;
- if (flags & (SAVAGE_FRONT|SAVAGE_BACK)) {
- drm_savage_cmd_header_t *cmd;
- cmd = savageAllocCmdBuf(imesa, sizeof(drm_savage_cmd_header_t));
- cmd[0].clear0.cmd = SAVAGE_CMD_CLEAR;
- if ((flags & SAVAGE_DEPTH) &&
- clearDepth == clearColor && depthMask == colorMask) {
- cmd[0].clear0.flags = flags;
- depthCleared = GL_TRUE;
- } else
- cmd[0].clear0.flags = flags & (SAVAGE_FRONT|SAVAGE_BACK);
- cmd[1].clear1.mask = colorMask;
- cmd[1].clear1.value = clearColor;
- }
-
- if ((flags & SAVAGE_DEPTH) && !depthCleared) {
- drm_savage_cmd_header_t *cmd;
- cmd = savageAllocCmdBuf(imesa, sizeof(drm_savage_cmd_header_t));
- cmd[0].clear0.cmd = SAVAGE_CMD_CLEAR;
- cmd[0].clear0.flags = SAVAGE_DEPTH;
- cmd[1].clear1.mask = depthMask;
- cmd[1].clear1.value = clearDepth;
- }
- }
-
- if (mask)
- _swrast_Clear( ctx, mask );
-}
-
-/*
- * Copy the back buffer to the front buffer.
- */
-void savageSwapBuffers( __DRIdrawable *dPriv )
-{
- savageContextPtr imesa;
-
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "%s\n================================\n", __FUNCTION__);
-
- assert(dPriv);
- assert(dPriv->driContextPriv);
- assert(dPriv->driContextPriv->driverPrivate);
-
- imesa = (savageContextPtr) dPriv->driContextPriv->driverPrivate;
- if (imesa->IsDouble)
- _mesa_notifySwapBuffers( imesa->glCtx );
-
- FLUSH_BATCH(imesa);
-
- if (imesa->sync_frames)
- imesa->lastSwap = savageEmitEvent( imesa, 0 );
-
- if (imesa->lastSwap != 0)
- savageWaitEvent( imesa, imesa->lastSwap );
-
- {
- drm_savage_cmd_header_t *cmd = savageAllocCmdBuf(imesa, 0);
- cmd->cmd.cmd = SAVAGE_CMD_SWAP;
- imesa->inSwap = GL_TRUE; /* ignore scissors in savageFlushCmdBuf */
- savageFlushCmdBuf(imesa, GL_FALSE);
- imesa->inSwap = GL_FALSE;
- }
-
- if (!imesa->sync_frames)
- /* don't sync, but limit the lag to one frame. */
- imesa->lastSwap = savageEmitEvent( imesa, 0 );
-}
-
-unsigned int savageEmitEventLocked( savageContextPtr imesa, unsigned int flags )
-{
- drm_savage_event_emit_t event;
- int ret;
- event.count = 0;
- event.flags = flags;
- ret = drmCommandWriteRead( imesa->driFd, DRM_SAVAGE_BCI_EVENT_EMIT,
- &event, sizeof(event) );
- if (ret) {
- fprintf (stderr, "emit event returned %d\n", ret);
- exit (1);
- }
- return event.count;
-}
-unsigned int savageEmitEvent( savageContextPtr imesa, unsigned int flags )
-{
- unsigned int ret;
- LOCK_HARDWARE( imesa );
- ret = savageEmitEventLocked( imesa, flags );
- UNLOCK_HARDWARE( imesa );
- return ret;
-}
-
-
-void savageWaitEvent( savageContextPtr imesa, unsigned int count )
-{
- drm_savage_event_wait_t event;
- int ret;
- event.count = count;
- event.flags = 0;
- ret = drmCommandWriteRead( imesa->driFd, DRM_SAVAGE_BCI_EVENT_WAIT,
- &event, sizeof(event) );
- if (ret) {
- fprintf (stderr, "wait event returned %d\n", ret);
- exit (1);
- }
-}
-
-
-void savageFlushVertices( savageContextPtr imesa )
-{
- struct savage_vtxbuf_t *buffer = imesa->vtxBuf;
-
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "%s\n", __FUNCTION__);
-
- if (!buffer->total)
- return;
-
- if (buffer->used > buffer->flushed) {
- drm_savage_cmd_header_t *cmd;
- /* State must be updated "per primitive" because hardware
- * culling must be disabled for unfilled primitives, points
- * and lines. */
- savageEmitChangedState (imesa);
- cmd = savageAllocCmdBuf(imesa, 0);
- cmd->prim.cmd = buffer == &imesa->dmaVtxBuf ?
- SAVAGE_CMD_DMA_PRIM : SAVAGE_CMD_VB_PRIM;
- cmd->prim.prim = imesa->HwPrim;
- cmd->prim.skip = imesa->skip;
- cmd->prim.start = buffer->flushed / imesa->HwVertexSize;
- cmd->prim.count = buffer->used / imesa->HwVertexSize - cmd->prim.start;
- buffer->flushed = buffer->used;
- }
-}
-
-void savageFlushCmdBufLocked( savageContextPtr imesa, GLboolean discard )
-{
- __DRIdrawable *dPriv = imesa->driDrawable;
-
- if (!imesa->dmaVtxBuf.total)
- discard = GL_FALSE;
-
- /* complete indexed drawing commands */
- savageFlushElts(imesa);
-
- if (imesa->cmdBuf.write != imesa->cmdBuf.start || discard) {
- drm_savage_cmdbuf_t cmdbuf;
- drm_savage_cmd_header_t *start;
- int ret;
-
- /* If we lost the context we must restore the initial state (at
- * the start of the command buffer). */
- if (imesa->lostContext) {
- start = imesa->cmdBuf.base;
- imesa->lostContext = GL_FALSE;
- } else
- start = imesa->cmdBuf.start;
-
- if ((SAVAGE_DEBUG & DEBUG_DMA) && discard)
- fprintf (stderr, "Discarding DMA buffer, used=%u\n",
- imesa->dmaVtxBuf.used);
-
- cmdbuf.dma_idx = imesa->dmaVtxBuf.idx;
- cmdbuf.discard = discard;
- cmdbuf.vb_addr = imesa->clientVtxBuf.buf;
- cmdbuf.vb_size = imesa->clientVtxBuf.total*4;
- cmdbuf.vb_stride = imesa->HwVertexSize;
- cmdbuf.cmd_addr = start;
- cmdbuf.size = (imesa->cmdBuf.write - start);
- if (!imesa->inSwap && imesa->scissor.enabled) {
- drm_clip_rect_t *box = dPriv->pClipRects, *ibox;
- drm_clip_rect_t scissor;
- GLuint nbox = dPriv->numClipRects, nibox;
- /* transform and clip scissor to viewport */
- scissor.x1 = MAX2(imesa->scissor.x, 0) + dPriv->x;
- scissor.y1 = MAX2(dPriv->h - imesa->scissor.y - imesa->scissor.h,
- 0) + dPriv->y;
- scissor.x2 = MIN2(imesa->scissor.x + imesa->scissor.w,
- dPriv->w) + dPriv->x;
- scissor.y2 = MIN2(dPriv->h - imesa->scissor.y,
- dPriv->h) + dPriv->y;
- /* intersect cliprects with scissor */
- ibox = malloc(dPriv->numClipRects*sizeof(drm_clip_rect_t));
- if (!ibox) {
- fprintf(stderr, "Out of memory.\n");
- exit(1);
- }
- nibox = savageIntersectClipRects(ibox, box, nbox, &scissor);
- cmdbuf.nbox = nibox;
- cmdbuf.box_addr = ibox;
- } else {
- cmdbuf.nbox = dPriv->numClipRects;
- cmdbuf.box_addr = dPriv->pClipRects;
- }
-
- ret = drmCommandWrite( imesa->driFd, DRM_SAVAGE_BCI_CMDBUF,
- &cmdbuf, sizeof(cmdbuf) );
- if (ret) {
- fprintf (stderr, "cmdbuf ioctl returned %d\n", ret);
- exit(1);
- }
-
- if (cmdbuf.box_addr != dPriv->pClipRects) {
- free(cmdbuf.box_addr);
- }
-
- /* Save the current state at the start of the command buffer. That
- * state will only be emitted, if the context was lost since the
- * last command buffer. */
- imesa->cmdBuf.write = imesa->cmdBuf.base;
- savageEmitOldState(imesa);
- imesa->cmdBuf.start = imesa->cmdBuf.write;
- }
-
- if (discard) {
- assert (!savageHaveIndexedVerts(imesa));
- imesa->dmaVtxBuf.total = 0;
- imesa->dmaVtxBuf.used = 0;
- imesa->dmaVtxBuf.flushed = 0;
- }
- if (!savageHaveIndexedVerts(imesa)) {
- imesa->clientVtxBuf.used = 0;
- imesa->clientVtxBuf.flushed = 0;
- }
-}
-
-
-void savageFlushCmdBuf( savageContextPtr imesa, GLboolean discard )
-{
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "%s\n", __FUNCTION__);
- LOCK_HARDWARE(imesa);
- savageFlushCmdBufLocked (imesa, discard);
- UNLOCK_HARDWARE(imesa);
-}
-
-
-static void savageDDFlush( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "%s\n", __FUNCTION__);
- savageFlushVertices (imesa);
- savageFlushCmdBuf(imesa, GL_FALSE);
-}
-
-static void savageDDFinish( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "%s\n", __FUNCTION__);
- savageFlushVertices (imesa);
- savageFlushCmdBuf(imesa, GL_FALSE);
- WAIT_IDLE_EMPTY(imesa);
-}
-
-void savageDDInitIoctlFuncs( struct gl_context *ctx )
-{
- ctx->Driver.Clear = savageDDClear;
- ctx->Driver.Flush = savageDDFlush;
- ctx->Driver.Finish = savageDDFinish;
-}
diff --git a/src/mesa/drivers/dri/savage/savageioctl.h b/src/mesa/drivers/dri/savage/savageioctl.h
deleted file mode 100644
index 7d34825c296..00000000000
--- a/src/mesa/drivers/dri/savage/savageioctl.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#ifndef SAVAGE_IOCTL_H
-#define SAVAGE_IOCTL_H
-
-#include "savagecontext.h"
-
-void savageFlushVertices( savageContextPtr mmesa );
-
-unsigned int savageEmitEventLocked( savageContextPtr imesa, unsigned int flags );
-unsigned int savageEmitEvent( savageContextPtr imesa, unsigned int flags );
-void savageWaitEvent( savageContextPtr imesa, unsigned int event);
-
-void savageFlushCmdBufLocked( savageContextPtr imesa, GLboolean discard );
-void savageFlushCmdBuf( savageContextPtr imesa, GLboolean discard );
-
-void savageDDInitIoctlFuncs( struct gl_context *ctx );
-
-void savageSwapBuffers( __DRIdrawable *dPriv );
-
-#define WAIT_IDLE_EMPTY(imesa) do { \
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG) \
- fprintf (stderr, "WAIT_IDLE_EMPTY in %s\n", __FUNCTION__); \
- savageWaitEvent(imesa, \
- savageEmitEvent(imesa, SAVAGE_WAIT_2D|SAVAGE_WAIT_3D)); \
-} while (0)
-
-#define WAIT_IDLE_EMPTY_LOCKED(imesa) do { \
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG) \
- fprintf (stderr, "WAIT_IDLE_EMPTY_LOCKED in %s\n", __FUNCTION__); \
- savageWaitEvent(imesa, savageEmitEventLocked( \
- imesa, SAVAGE_WAIT_2D|SAVAGE_WAIT_3D)); \
-} while (0)
-
-#define FLUSH_BATCH(imesa) do { \
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG) \
- fprintf (stderr, "FLUSH_BATCH in %s\n", __FUNCTION__); \
- savageFlushVertices(imesa); \
- savageFlushCmdBuf(imesa, GL_FALSE); \
-} while (0)
-
-extern void savageGetDMABuffer( savageContextPtr imesa );
-
-static INLINE
-void savageReleaseIndexedVerts( savageContextPtr imesa )
-{
- imesa->firstElt = -1;
-}
-
-static INLINE
-GLboolean savageHaveIndexedVerts( savageContextPtr imesa )
-{
- return (imesa->firstElt != -1);
-}
-
-static INLINE
-uint32_t *savageAllocVtxBuf( savageContextPtr imesa, GLuint words )
-{
- struct savage_vtxbuf_t *buffer = imesa->vtxBuf;
- uint32_t *head;
-
- if (buffer == &imesa->dmaVtxBuf) {
- if (!buffer->total) {
- LOCK_HARDWARE(imesa);
- savageGetDMABuffer(imesa);
- UNLOCK_HARDWARE(imesa);
- } else if (buffer->used + words > buffer->total) {
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "... flushing DMA buffer in %s\n",
- __FUNCTION__);
- savageReleaseIndexedVerts(imesa);
- savageFlushVertices(imesa);
- LOCK_HARDWARE(imesa);
- savageFlushCmdBufLocked(imesa, GL_TRUE); /* discard DMA buffer */
- savageGetDMABuffer(imesa);
- UNLOCK_HARDWARE(imesa);
- }
- } else if (buffer->used + words > buffer->total) {
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "... flushing client vertex buffer in %s\n",
- __FUNCTION__);
- savageReleaseIndexedVerts(imesa);
- savageFlushVertices(imesa);
- LOCK_HARDWARE(imesa);
- savageFlushCmdBufLocked(imesa, GL_FALSE); /* free clientVtxBuf */
- UNLOCK_HARDWARE(imesa);
- }
-
- head = &buffer->buf[buffer->used];
-
- buffer->used += words;
- return head;
-}
-
-static INLINE
-uint32_t *savageAllocIndexedVerts( savageContextPtr imesa, GLuint n )
-{
- uint32_t *ret;
- savageFlushVertices(imesa);
- ret = savageAllocVtxBuf(imesa, n*imesa->HwVertexSize);
- imesa->firstElt = imesa->vtxBuf->flushed / imesa->HwVertexSize;
- imesa->vtxBuf->flushed = imesa->vtxBuf->used;
- return ret;
-}
-
-/* Flush Elts:
- * - Complete the drawing command with the correct number of indices.
- * - Actually allocate entries for the indices in the command buffer.
- * (This allocation must succeed without wrapping the cmd buffer!)
- */
-static INLINE
-void savageFlushElts( savageContextPtr imesa )
-{
- if (imesa->elts.cmd) {
- GLuint qwords = (imesa->elts.n + 3) >> 2;
- assert(imesa->cmdBuf.write - imesa->cmdBuf.base + qwords
- <= imesa->cmdBuf.size);
- imesa->cmdBuf.write += qwords;
-
- imesa->elts.cmd->idx.count = imesa->elts.n;
- imesa->elts.cmd = NULL;
- }
-}
-
-/* Allocate a command buffer entry with bytes of arguments:
- * - implies savageFlushElts
- */
-static INLINE
-drm_savage_cmd_header_t *savageAllocCmdBuf( savageContextPtr imesa, GLuint bytes )
-{
- drm_savage_cmd_header_t *ret;
- GLuint qwords = ((bytes + 7) >> 3) + 1; /* round up */
- assert (qwords < imesa->cmdBuf.size);
-
- savageFlushElts(imesa);
-
- if (imesa->cmdBuf.write - imesa->cmdBuf.base + qwords > imesa->cmdBuf.size)
- savageFlushCmdBuf(imesa, GL_FALSE);
-
- ret = (drm_savage_cmd_header_t *)imesa->cmdBuf.write;
- imesa->cmdBuf.write += qwords;
- return ret;
-}
-
-/* Allocate Elts:
- * - if it doesn't fit, flush the cmd buffer first
- * - allocates the drawing command on the cmd buffer if there is no
- * incomplete indexed drawing command yet
- * - increments the number of elts. Final allocation is done in savageFlushElts
- */
-static INLINE
-uint16_t *savageAllocElts( savageContextPtr imesa, GLuint n )
-{
- uint16_t *ret;
- GLuint qwords;
- assert (savageHaveIndexedVerts(imesa));
-
- if (imesa->elts.cmd)
- qwords = (imesa->elts.n + n + 3) >> 2;
- else
- qwords = ((n + 3) >> 2) + 1;
- if (imesa->cmdBuf.write - imesa->cmdBuf.base + qwords > imesa->cmdBuf.size)
- savageFlushCmdBuf(imesa, GL_FALSE); /* implies savageFlushElts */
-
- if (!imesa->elts.cmd) {
- savageFlushVertices(imesa);
- imesa->elts.cmd = savageAllocCmdBuf(imesa, 0);
- imesa->elts.cmd->idx.cmd = (imesa->vtxBuf == &imesa->dmaVtxBuf) ?
- SAVAGE_CMD_DMA_IDX : SAVAGE_CMD_VB_IDX;
- imesa->elts.cmd->idx.prim = imesa->HwPrim;
- imesa->elts.cmd->idx.skip = imesa->skip;
- imesa->elts.n = 0;
- }
-
- ret = (uint16_t *)(imesa->elts.cmd+1) + imesa->elts.n;
- imesa->elts.n += n;
- return ret;
-}
-
-#endif
diff --git a/src/mesa/drivers/dri/savage/savagerender.c b/src/mesa/drivers/dri/savage/savagerender.c
deleted file mode 100644
index 6687dc5f466..00000000000
--- a/src/mesa/drivers/dri/savage/savagerender.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Copyright 2005 Felix Kuehling
- * 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 FELIX KUEHLING 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.
- */
-
-/*
- * Render unclipped vertex buffers by emitting vertices directly to
- * dma buffers. Use strip/fan hardware primitives where possible.
- * Simulate missing primitives with indexed vertices.
- */
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/imports.h"
-#include "main/mtypes.h"
-
-#include "math/m_xform.h"
-
-#include "tnl/t_context.h"
-
-#include "savagecontext.h"
-#include "savagestate.h"
-#include "savageioctl.h"
-
-/*
- * Standard render tab for Savage4 and smooth shading on Savage3D
- */
-#define HAVE_POINTS 0
-#define HAVE_LINES 0
-#define HAVE_LINE_STRIPS 0
-#define HAVE_TRIANGLES 1
-#define HAVE_TRI_STRIPS 1
-#define HAVE_TRI_STRIP_1 0
-#define HAVE_TRI_FANS 1
-#define HAVE_POLYGONS 0
-#define HAVE_QUADS 0
-#define HAVE_QUAD_STRIPS 0
-
-#define HAVE_ELTS 1
-
-#define LOCAL_VARS savageContextPtr imesa = SAVAGE_CONTEXT(ctx)
-#define INIT( prim ) do { \
- if (0) fprintf(stderr, "%s\n", __FUNCTION__); \
- savageFlushVertices(imesa); \
- switch (prim) { \
- case GL_TRIANGLES: imesa->HwPrim = SAVAGE_PRIM_TRILIST; break; \
- case GL_TRIANGLE_STRIP: imesa->HwPrim = SAVAGE_PRIM_TRISTRIP; break; \
- case GL_TRIANGLE_FAN: imesa->HwPrim = SAVAGE_PRIM_TRIFAN; break; \
- } \
-} while (0)
-#define FLUSH() savageFlushElts(imesa), savageFlushVertices(imesa)
-
-#define GET_CURRENT_VB_MAX_VERTS() \
- ((imesa->bufferSize/4 - imesa->vtxBuf->used) / imesa->HwVertexSize)
-#define GET_SUBSEQUENT_VB_MAX_VERTS() \
- (imesa->bufferSize/4 / imesa->HwVertexSize)
-
-#define ALLOC_VERTS( nr ) \
- savageAllocVtxBuf( imesa, (nr) * imesa->HwVertexSize )
-#define EMIT_VERTS( ctx, j, nr, buf ) \
- _tnl_emit_vertices_to_buffer(ctx, j, (j)+(nr), buf )
-
-#define ELTS_VARS( buf ) GLushort *dest = buf, firstElt = imesa->firstElt
-#define ELT_INIT( prim ) INIT(prim)
-
-/* (size - used - 1 qword for drawing command) * 4 elts per qword */
-#define GET_CURRENT_VB_MAX_ELTS() \
- ((imesa->cmdBuf.size - (imesa->cmdBuf.write - imesa->cmdBuf.base) - 1)*4)
-/* (size - space for initial state - 1 qword for drawing command) * 4 elts
- * imesa is not defined in validate_render :( */
-#define GET_SUBSEQUENT_VB_MAX_ELTS() \
- ((SAVAGE_CONTEXT(ctx)->cmdBuf.size - \
- (SAVAGE_CONTEXT(ctx)->cmdBuf.start - \
- SAVAGE_CONTEXT(ctx)->cmdBuf.base) - 1)*4)
-
-#define ALLOC_ELTS(nr) savageAllocElts(imesa, nr)
-#define EMIT_ELT(offset, x) do { \
- (dest)[offset] = (GLushort) ((x)+firstElt); \
-} while (0)
-#define EMIT_TWO_ELTS(offset, x, y) do { \
- *(GLuint *)(dest + offset) = (((y)+firstElt) << 16) | \
- ((x)+firstElt); \
-} while (0)
-
-#define INCR_ELTS( nr ) dest += nr
-#define ELTPTR dest
-#define RELEASE_ELT_VERTS() \
- savageReleaseIndexedVerts(imesa)
-
-#define EMIT_INDEXED_VERTS( ctx, start, count ) do { \
- GLuint *buf = savageAllocIndexedVerts(imesa, count-start); \
- EMIT_VERTS(ctx, start, count-start, buf); \
-} while (0)
-
-#define TAG(x) savage_##x
-#include "tnl_dd/t_dd_dmatmp.h"
-
-/*
- * On Savage3D triangle fans and strips are broken with flat
- * shading. With triangles it wants the color for flat shading in the
- * first vertex! So we make another template instance which uses
- * triangles only (with reordered vertices: SAVAGE_PRIM_TRILIST_201).
- * The reordering is done by the DRM.
- */
-#undef HAVE_TRI_STRIPS
-#undef HAVE_TRI_FANS
-#define HAVE_TRI_STRIPS 0
-#define HAVE_TRI_FANS 0
-
-#undef INIT
-#define INIT( prim ) do { \
- if (0) fprintf(stderr, "%s\n", __FUNCTION__); \
- savageFlushVertices(imesa); \
- imesa->HwPrim = SAVAGE_PRIM_TRILIST_201; \
-} while(0)
-
-#undef TAG
-#define TAG(x) savage_flat_##x##_s3d
-#include "tnl_dd/t_dd_dmatmp.h"
-
-
-/**********************************************************************/
-/* Render pipeline stage */
-/**********************************************************************/
-
-static GLboolean savage_run_render( struct gl_context *ctx,
- struct tnl_pipeline_stage *stage )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- tnl_render_func *tab, *tab_elts;
- GLboolean valid;
- GLuint i;
-
- if (savageHaveIndexedVerts(imesa))
- savageReleaseIndexedVerts(imesa);
-
- if (imesa->savageScreen->chipset < S3_SAVAGE4 &&
- (ctx->_TriangleCaps & DD_FLATSHADE)) {
- tab = savage_flat_render_tab_verts_s3d;
- tab_elts = savage_flat_render_tab_elts_s3d;
- valid = savage_flat_validate_render_s3d( ctx, VB );
- } else {
- tab = savage_render_tab_verts;
- tab_elts = savage_render_tab_elts;
- valid = savage_validate_render( ctx, VB );
- }
-
- /* Don't handle clipping or vertex manipulations.
- */
- if (imesa->RenderIndex != 0 || !valid) {
- return GL_TRUE;
- }
-
- tnl->Driver.Render.Start( ctx );
- /* Check RenderIndex again. The ptexHack is detected late in RenderStart.
- * Also check for ptex fallbacks detected late.
- */
- if (imesa->RenderIndex != 0 || imesa->Fallback != 0) {
- return GL_TRUE;
- }
-
- /* setup for hardware culling */
- imesa->raster_primitive = GL_TRIANGLES;
- imesa->new_state |= SAVAGE_NEW_CULL;
-
- /* update and emit state */
- savageDDUpdateHwState(ctx);
- savageEmitChangedState(imesa);
-
- if (VB->Elts) {
- tab = tab_elts;
- if (!savageHaveIndexedVerts(imesa)) {
- if (VB->Count > GET_SUBSEQUENT_VB_MAX_VERTS())
- return GL_TRUE;
- EMIT_INDEXED_VERTS(ctx, 0, VB->Count);
- }
- }
-
- for (i = 0 ; i < VB->PrimitiveCount ; i++)
- {
- GLuint prim = _tnl_translate_prim(&VB->Primitive[i]);
- GLuint start = VB->Primitive[i].start;
- GLuint length = VB->Primitive[i].count;
-
- if (length)
- tab[prim & PRIM_MODE_MASK]( ctx, start, start+length, prim);
- }
-
- tnl->Driver.Render.Finish( ctx );
-
- return GL_FALSE; /* finished the pipe */
-}
-
-struct tnl_pipeline_stage _savage_render_stage =
-{
- "savage render",
- NULL,
- NULL,
- NULL,
- NULL,
- savage_run_render /* run */
-};
-
-
-/**********************************************************************/
-/* Pipeline stage for texture coordinate normalization */
-/**********************************************************************/
-struct texnorm_stage_data {
- GLboolean active;
- GLvector4f texcoord[MAX_TEXTURE_UNITS];
-};
-
-#define TEXNORM_STAGE_DATA(stage) ((struct texnorm_stage_data *)stage->privatePtr)
-
-
-static GLboolean run_texnorm_stage( struct gl_context *ctx,
- struct tnl_pipeline_stage *stage )
-{
- struct texnorm_stage_data *store = TEXNORM_STAGE_DATA(stage);
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- GLuint i;
-
- if (imesa->Fallback || !store->active)
- return GL_TRUE;
-
- for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++) {
- const GLbitfield reallyEnabled = ctx->Texture.Unit[i]._ReallyEnabled;
- if (reallyEnabled) {
- const struct gl_texture_object *texObj = ctx->Texture.Unit[i]._Current;
- const GLboolean normalizeS = (texObj->Sampler.WrapS == GL_REPEAT);
- const GLboolean normalizeT = (reallyEnabled & TEXTURE_2D_BIT) &&
- (texObj->Sampler.WrapT == GL_REPEAT);
- const GLfloat *in = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_TEX0 + i]->data;
- const GLint instride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + i]->stride;
- GLfloat (*out)[4] = store->texcoord[i].data;
- GLint j;
-
- if (!ctx->Texture.Unit[i]._ReallyEnabled ||
- VB->AttribPtr[_TNL_ATTRIB_TEX0 + i]->size == 4)
- /* Never try to normalize homogenous tex coords! */
- continue;
-
- if (normalizeS && normalizeT) {
- /* take first texcoords as rough estimate of mean value */
- GLfloat correctionS = -floor(in[0]+0.5);
- GLfloat correctionT = -floor(in[1]+0.5);
- for (j = 0; j < VB->Count; ++j) {
- out[j][0] = in[0] + correctionS;
- out[j][1] = in[1] + correctionT;
- in = (GLfloat *)((GLubyte *)in + instride);
- }
- } else if (normalizeS) {
- /* take first texcoords as rough estimate of mean value */
- GLfloat correctionS = -floor(in[0]+0.5);
- if (reallyEnabled & TEXTURE_2D_BIT) {
- for (j = 0; j < VB->Count; ++j) {
- out[j][0] = in[0] + correctionS;
- out[j][1] = in[1];
- in = (GLfloat *)((GLubyte *)in + instride);
- }
- } else {
- for (j = 0; j < VB->Count; ++j) {
- out[j][0] = in[0] + correctionS;
- in = (GLfloat *)((GLubyte *)in + instride);
- }
- }
- } else if (normalizeT) {
- /* take first texcoords as rough estimate of mean value */
- GLfloat correctionT = -floor(in[1]+0.5);
- for (j = 0; j < VB->Count; ++j) {
- out[j][0] = in[0];
- out[j][1] = in[1] + correctionT;
- in = (GLfloat *)((GLubyte *)in + instride);
- }
- }
-
- if (normalizeS || normalizeT)
- VB->AttribPtr[_TNL_ATTRIB_TEX0 + i] = &store->texcoord[i];
- }
- }
-
- return GL_TRUE;
-}
-
-/* Called the first time stage->run() is invoked.
- */
-static GLboolean alloc_texnorm_data( struct gl_context *ctx,
- struct tnl_pipeline_stage *stage )
-{
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- struct texnorm_stage_data *store;
- GLuint i;
-
- stage->privatePtr = CALLOC(sizeof(*store));
- store = TEXNORM_STAGE_DATA(stage);
- if (!store)
- return GL_FALSE;
-
- for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
- _mesa_vector4f_alloc( &store->texcoord[i], 0, VB->Size, 32 );
-
- return GL_TRUE;
-}
-
-static void validate_texnorm( struct gl_context *ctx,
- struct tnl_pipeline_stage *stage )
-{
- struct texnorm_stage_data *store = TEXNORM_STAGE_DATA(stage);
- GLuint flags = 0;
-
- if (((ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
- (ctx->Texture.Unit[0]._Current->Sampler.WrapS == GL_REPEAT)) ||
- ((ctx->Texture.Unit[0]._ReallyEnabled & TEXTURE_2D_BIT) &&
- (ctx->Texture.Unit[0]._Current->Sampler.WrapT == GL_REPEAT)))
- flags |= VERT_BIT_TEX0;
-
- if (((ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
- (ctx->Texture.Unit[1]._Current->Sampler.WrapS == GL_REPEAT)) ||
- ((ctx->Texture.Unit[1]._ReallyEnabled & TEXTURE_2D_BIT) &&
- (ctx->Texture.Unit[1]._Current->Sampler.WrapT == GL_REPEAT)))
- flags |= VERT_BIT_TEX1;
-
- store->active = (flags != 0);
-}
-
-static void free_texnorm_data( struct tnl_pipeline_stage *stage )
-{
- struct texnorm_stage_data *store = TEXNORM_STAGE_DATA(stage);
- GLuint i;
-
- if (store) {
- for (i = 0 ; i < MAX_TEXTURE_UNITS ; i++)
- if (store->texcoord[i].data)
- _mesa_vector4f_free( &store->texcoord[i] );
- FREE( store );
- stage->privatePtr = 0;
- }
-}
-
-struct tnl_pipeline_stage _savage_texnorm_stage =
-{
- "savage texture coordinate normalization stage", /* name */
- NULL, /* private data */
- alloc_texnorm_data, /* run -- initially set to init */
- free_texnorm_data, /* destructor */
- validate_texnorm,
- run_texnorm_stage
-};
diff --git a/src/mesa/drivers/dri/savage/savagespan.c b/src/mesa/drivers/dri/savage/savagespan.c
deleted file mode 100644
index 8542f47fd92..00000000000
--- a/src/mesa/drivers/dri/savage/savagespan.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-#include "main/mtypes.h"
-#include "savagedd.h"
-#include "savagespan.h"
-#include "savageioctl.h"
-#include "savage_3d_reg.h"
-#include "swrast/swrast.h"
-
-#define DBG 0
-
-#define LOCAL_VARS \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- __DRIdrawable *const dPriv = drb->dPriv; \
- GLuint cpp = drb->cpp; \
- GLuint pitch = drb->pitch; \
- GLuint height = dPriv->h; \
- GLubyte *buf = drb->Base.Data + dPriv->x * cpp + dPriv->y * pitch; \
- GLuint p; \
- (void) p
-
-#define LOCAL_DEPTH_VARS \
- driRenderbuffer *drb = (driRenderbuffer *) rb; \
- __DRIdrawable *const dPriv = drb->dPriv; \
- GLuint zpp = drb->cpp; \
- GLuint pitch = drb->pitch; \
- GLuint height = dPriv->h; \
- GLubyte *buf = drb->Base.Data + dPriv->x * zpp + dPriv->y * pitch;
-
-#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
-
-#define Y_FLIP(_y) (height - _y - 1)
-
-#define HW_LOCK()
-
-#define HW_UNLOCK()
-
-#define HW_WRITE_LOCK()
-
-#define HW_READ_LOCK()
-
-
-/* 16 bit, 565 rgb color spanline and pixel functions
- */
-#define SPANTMP_PIXEL_FMT GL_RGB
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
-
-#define TAG(x) savage##x##_565
-#define TAG2(x,y) savage##x##_565##y
-#include "spantmp2.h"
-
-
-/* 32 bit, 8888 ARGB color spanline and pixel functions
- */
-#define SPANTMP_PIXEL_FMT GL_BGRA
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-
-#define TAG(x) savage##x##_8888
-#define TAG2(x,y) savage##x##_8888##y
-#include "spantmp2.h"
-
-
-#undef HW_WRITE_LOCK
-#define HW_WRITE_LOCK()
-#undef HW_READ_LOCK
-#define HW_READ_LOCK()
-
-
-
-/* 16 bit integer depthbuffer functions
- * Depth range is reversed. See also savageCalcViewport.
- */
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH( _x, _y, d ) \
- *(GLushort *)(buf + ((_x)<<1) + (_y)*pitch) = 0xFFFF - d
-
-#define READ_DEPTH( d, _x, _y ) \
- d = 0xFFFF - *(GLushort *)(buf + ((_x)<<1) + (_y)*pitch)
-
-#define TAG(x) savage##x##_z16
-#include "depthtmp.h"
-
-
-
-
-/* 16 bit float depthbuffer functions
- */
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH( _x, _y, d ) \
- *(GLushort *)(buf + ((_x)<<1) + (_y)*pitch) = \
- savageEncodeFloat16( 1.0 - (GLfloat)d/65535.0 )
-
-#define READ_DEPTH( d, _x, _y ) \
- d = 65535 - \
- savageDecodeFloat16( *(GLushort *)(buf + ((_x)<<1) + (_y)*pitch) ) * \
- 65535.0
-
-#define TAG(x) savage##x##_z16f
-#include "depthtmp.h"
-
-
-
-
-/* 8-bit stencil /24-bit integer depth depthbuffer functions.
- * Depth range is reversed. See also savageCalcViewport.
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d ) do { \
- GLuint tmp = *(GLuint *)(buf + ((_x)<<2) + (_y)*pitch); \
- tmp &= 0xFF000000; \
- tmp |= 0x00FFFFFF - d; \
- *(GLuint *)(buf + (_x<<2) + _y*pitch) = tmp; \
-} while(0)
-
-#define READ_DEPTH( d, _x, _y ) \
- d = 0x00FFFFFF - (*(GLuint *)(buf + ((_x)<<2) + (_y)*pitch) & 0x00FFFFFF)
-
-#define TAG(x) savage##x##_s8_z24
-#include "depthtmp.h"
-
-
-
-
-/* 24 bit float depthbuffer functions
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d ) do { \
- GLuint tmp = *(GLuint *)(buf + ((_x)<<2) + (_y)*pitch); \
- tmp &= 0xFF000000; \
- tmp |= savageEncodeFloat24( 1.0 - (GLfloat)d/16777215.0 ); \
- *(GLuint *)(buf + (_x<<2) + _y*pitch) = tmp; \
-} while(0)
-
-#define READ_DEPTH( d, _x, _y ) \
- d = 16777215 - savageDecodeFloat24( \
- *(GLuint *)(buf + ((_x)<<2) + (_y)*pitch) & 0x00FFFFFF) \
- * 16777215.0
-
-#define TAG(x) savage##x##_s8_z24f
-#include "depthtmp.h"
-
-
-#define WRITE_STENCIL( _x, _y, d ) do { \
- GLuint tmp = *(GLuint *)(buf + ((_x)<<2) + (_y)*pitch); \
- tmp &= 0x00FFFFFF; \
- tmp |= (((GLuint)d)<<24) & 0xFF000000; \
- *(GLuint *)(buf + ((_x)<<2) + (_y)*pitch) = tmp; \
-} while(0)
-
-#define READ_STENCIL( d, _x, _y ) \
- d = (GLstencil)((*(GLuint *)(buf + ((_x)<<2) + (_y)*pitch) & 0xFF000000) >> 24)
-
-#define TAG(x) savage##x##_s8_z24
-#include "stenciltmp.h"
-
-
-
-/*
- * Wrappers around _swrast_Copy/Draw/ReadPixels that make sure all
- * primitives are flushed and the hardware is idle before accessing
- * the frame buffer.
- */
-static void
-savageCopyPixels( struct gl_context *ctx,
- GLint srcx, GLint srcy, GLsizei width, GLsizei height,
- GLint destx, GLint desty,
- GLenum type )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- FLUSH_BATCH(imesa);
- WAIT_IDLE_EMPTY(imesa);
- _swrast_CopyPixels(ctx, srcx, srcy, width, height, destx, desty, type);
-}
-static void
-savageDrawPixels( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const struct gl_pixelstore_attrib *packing,
- const GLvoid *pixels )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- FLUSH_BATCH(imesa);
- WAIT_IDLE_EMPTY(imesa);
- _swrast_DrawPixels(ctx, x, y, width, height, format, type, packing, pixels);
-}
-static void
-savageReadPixels( struct gl_context *ctx,
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const struct gl_pixelstore_attrib *packing,
- GLvoid *pixels )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- FLUSH_BATCH(imesa);
- WAIT_IDLE_EMPTY(imesa);
- _swrast_ReadPixels(ctx, x, y, width, height, format, type, packing, pixels);
-}
-
-/*
- * Make sure the hardware is idle when span-rendering.
- */
-static void savageSpanRenderStart( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- FLUSH_BATCH(imesa);
- WAIT_IDLE_EMPTY(imesa);
-}
-
-
-void savageDDInitSpanFuncs( struct gl_context *ctx )
-{
- struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
- swdd->SpanRenderStart = savageSpanRenderStart;
-
- /* XXX these should probably be plugged in elsewhere */
- ctx->Driver.CopyPixels = savageCopyPixels;
- ctx->Driver.DrawPixels = savageDrawPixels;
- ctx->Driver.ReadPixels = savageReadPixels;
-}
-
-
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-savageSetSpanFunctions(driRenderbuffer *drb, const struct gl_config *vis,
- GLboolean float_depth)
-{
- if (drb->Base.Format == MESA_FORMAT_RGB565) {
- savageInitPointers_565(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
- savageInitPointers_8888(&drb->Base);
- }
- else if (drb->Base.Format == MESA_FORMAT_Z16) {
- if (float_depth) {
- savageInitDepthPointers_z16f(&drb->Base);
- }
- else {
- savageInitDepthPointers_z16(&drb->Base);
- }
- }
- else if (drb->Base.Format == MESA_FORMAT_S8_Z24) {
- if (float_depth) {
- savageInitDepthPointers_s8_z24f(&drb->Base);
- }
- else {
- savageInitDepthPointers_s8_z24(&drb->Base);
- }
- }
- else if (drb->Base.Format == MESA_FORMAT_S8) {
- savageInitStencilPointers_s8_z24(&drb->Base);
- }
-}
diff --git a/src/mesa/drivers/dri/savage/savagespan.h b/src/mesa/drivers/dri/savage/savagespan.h
deleted file mode 100644
index 41d6f75cbbe..00000000000
--- a/src/mesa/drivers/dri/savage/savagespan.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-#ifndef _SAVAGE_SPAN_H
-#define _SAVAGE_SPAN_H
-
-#include "drirenderbuffer.h"
-
-
-extern void savageDDInitSpanFuncs( struct gl_context *ctx );
-
-extern void
-savageSetSpanFunctions(driRenderbuffer *rb, const struct gl_config *vis,
- GLboolean float_depth);
-
-
-/*
- * Savage 16-bit float depth format with zExpOffset=16:
- * 4 bit unsigned exponent, 12 bit mantissa
- *
- * The meaning of the mantissa is different from IEEE floatint point
- * formats. The same number can't be encoded with different exponents.
- * So no bits are wasted.
- *
- * exponent | range encoded by mantissa | accuracy or mantissa
- * ---------+---------------------------+---------------------
- * 15 | 2^-1 .. 1 | 2^-13
- * 14 | 2^-2 .. 2^-1 | 2^-14
- * 13 | 2^-3 .. 2^-2 | 2^-15
- * ... | ... |
- * 2 | 2^-14 .. 2^-13 | 2^-27
- * 1 | 2^-15 .. 2^-14 | 2^-27
- * 0 | 2^-16 .. 2^-15 | 2^-28
- *
- * Note that there is no encoding for numbers < 2^-16.
- */
-static INLINE GLuint savageEncodeFloat16( GLdouble x )
-{
- GLint r = (GLint)(x * 0x10000000);
- GLint exp = 0;
- if (r < 0x1000)
- return 0;
- while (r - 0x1000 > 0x0fff) {
- r >>= 1;
- exp++;
- }
- return exp > 0xf ? 0xffff : (r - 0x1000) | (exp << 12);
-}
-static INLINE GLdouble savageDecodeFloat16( GLuint x )
-{
- static const GLdouble pow2[16] = {
- 1.0/(1<<28), 1.0/(1<<27), 1.0/(1<<26), 1.0/(1<<25),
- 1.0/(1<<24), 1.0/(1<<23), 1.0/(1<<22), 1.0/(1<<21),
- 1.0/(1<<20), 1.0/(1<<19), 1.0/(1<<18), 1.0/(1<<17),
- 1.0/(1<<16), 1.0/(1<<15), 1.0/(1<<14), 1.0/(1<<13)
- };
- static const GLdouble bias[16] = {
- 1.0/(1<<16), 1.0/(1<<15), 1.0/(1<<14), 1.0/(1<<13),
- 1.0/(1<<12), 1.0/(1<<11), 1.0/(1<<10), 1.0/(1<< 9),
- 1.0/(1<< 8), 1.0/(1<< 7), 1.0/(1<< 6), 1.0/(1<< 5),
- 1.0/(1<< 4), 1.0/(1<< 3), 1.0/(1<< 2), 1.0/(1<< 1)
- };
- GLuint mant = x & 0x0fff;
- GLuint exp = (x >> 12) & 0xf;
- return bias[exp] + pow2[exp]*mant;
-}
-
-/*
- * Savage 24-bit float depth format with zExpOffset=32:
- * 5 bit unsigned exponent, 19 bit mantissa
- *
- * Details analogous to the 16-bit format.
- */
-static INLINE GLuint savageEncodeFloat24( GLdouble x )
-{
- int64_t r = (int64_t)(x * ((int64_t)1 << (19+32)));
- GLint exp = 0;
- if (r < 0x80000)
- return 0;
- while (r - 0x80000 > 0x7ffff) {
- r >>= 1;
- exp++;
- }
- return exp > 0x1f ? 0xffffff : (r - 0x80000) | (exp << 19);
-}
-#define _1 (int64_t)1
-static INLINE GLdouble savageDecodeFloat24( GLuint x )
-{
- static const GLdouble pow2[32] = {
- 1.0/(_1<<51), 1.0/(_1<<50), 1.0/(_1<<49), 1.0/(_1<<48),
- 1.0/(_1<<47), 1.0/(_1<<46), 1.0/(_1<<45), 1.0/(_1<<44),
- 1.0/(_1<<43), 1.0/(_1<<42), 1.0/(_1<<41), 1.0/(_1<<40),
- 1.0/(_1<<39), 1.0/(_1<<38), 1.0/(_1<<37), 1.0/(_1<<36),
- 1.0/(_1<<35), 1.0/(_1<<34), 1.0/(_1<<33), 1.0/(_1<<32),
- 1.0/(_1<<31), 1.0/(_1<<30), 1.0/(_1<<29), 1.0/(_1<<28),
- 1.0/(_1<<27), 1.0/(_1<<26), 1.0/(_1<<25), 1.0/(_1<<24),
- 1.0/(_1<<23), 1.0/(_1<<22), 1.0/(_1<<21), 1.0/(_1<<20)
- };
- static const GLdouble bias[32] = {
- 1.0/(_1<<32), 1.0/(_1<<31), 1.0/(_1<<30), 1.0/(_1<<29),
- 1.0/(_1<<28), 1.0/(_1<<27), 1.0/(_1<<26), 1.0/(_1<<25),
- 1.0/(_1<<24), 1.0/(_1<<23), 1.0/(_1<<22), 1.0/(_1<<21),
- 1.0/(_1<<20), 1.0/(_1<<19), 1.0/(_1<<18), 1.0/(_1<<17),
- 1.0/(_1<<16), 1.0/(_1<<15), 1.0/(_1<<14), 1.0/(_1<<13),
- 1.0/(_1<<12), 1.0/(_1<<11), 1.0/(_1<<10), 1.0/(_1<< 9),
- 1.0/(_1<< 8), 1.0/(_1<< 7), 1.0/(_1<< 6), 1.0/(_1<< 5),
- 1.0/(_1<< 4), 1.0/(_1<< 3), 1.0/(_1<< 2), 1.0/(_1<< 1)
- };
- GLuint mant = x & 0x7ffff;
- GLuint exp = (x >> 19) & 0x1f;
- return bias[exp] + pow2[exp]*mant;
-}
-#undef _1
-
-
-#endif
diff --git a/src/mesa/drivers/dri/savage/savagestate.c b/src/mesa/drivers/dri/savage/savagestate.c
deleted file mode 100644
index 21ebf5dc2b2..00000000000
--- a/src/mesa/drivers/dri/savage/savagestate.c
+++ /dev/null
@@ -1,1731 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#include
-
-#include "main/mtypes.h"
-#include "main/enums.h"
-#include "main/macros.h"
-#include "main/dd.h"
-#include "main/mm.h"
-#include "main/state.h"
-
-#include "savagedd.h"
-#include "savagecontext.h"
-
-#include "savagestate.h"
-#include "savagetex.h"
-#include "savagetris.h"
-#include "savageioctl.h"
-#include "savage_bci.h"
-
-#include "swrast/swrast.h"
-#include "vbo/vbo.h"
-#include "tnl/tnl.h"
-#include "swrast_setup/swrast_setup.h"
-
-#include "xmlpool.h"
-
-/* Savage4, ProSavage[DDR], SuperSavage watermarks */
-#define S4_ZRLO 24
-#define S4_ZRHI 24
-#define S4_ZWLO 0
-#define S4_ZWHI 0
-
-#define S4_DRLO 0
-#define S4_DRHI 0
-#define S4_DWLO 0
-#define S4_DWHI 0
-
-#define S4_TR 15
-
-/* Savage3D/MX/IX watermarks */
-#define S3D_ZRLO 8
-#define S3D_ZRHI 24
-#define S3D_ZWLO 0
-#define S3D_ZWHI 24
-
-#define S3D_DRLO 0
-#define S3D_DRHI 0
-#define S3D_DWLO 0
-#define S3D_DWHI 0
-
-#define S3D_TR 15
-
-static void savageBlendFunc_s4(struct gl_context *);
-static void savageBlendFunc_s3d(struct gl_context *);
-
-static INLINE GLuint savagePackColor(GLuint format,
- GLubyte r, GLubyte g,
- GLubyte b, GLubyte a)
-{
- switch (format) {
- case DV_PF_8888:
- return SAVAGEPACKCOLOR8888(r,g,b,a);
- case DV_PF_565:
- return SAVAGEPACKCOLOR565(r,g,b);
- default:
-
- return 0;
- }
-}
-
-
-static void savageDDAlphaFunc_s4(struct gl_context *ctx, GLenum func, GLfloat ref)
-{
- savageBlendFunc_s4(ctx);
-}
-static void savageDDAlphaFunc_s3d(struct gl_context *ctx, GLenum func, GLfloat ref)
-{
- savageBlendFunc_s3d(ctx);
-}
-
-static void savageDDBlendEquationSeparate(struct gl_context *ctx,
- GLenum modeRGB, GLenum modeA)
-{
- assert( modeRGB == modeA );
-
- /* BlendEquation sets ColorLogicOpEnabled in an unexpected
- * manner.
- */
- FALLBACK( ctx, SAVAGE_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
-
- /* Can only do blend addition, not min, max, subtract, etc. */
- FALLBACK( ctx, SAVAGE_FALLBACK_BLEND_EQ,
- modeRGB != GL_FUNC_ADD);
-}
-
-
-static void savageBlendFunc_s4(struct gl_context *ctx)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- uint32_t drawLocalCtrl = imesa->regs.s4.drawLocalCtrl.ui;
- uint32_t drawCtrl0 = imesa->regs.s4.drawCtrl0.ui;
- uint32_t drawCtrl1 = imesa->regs.s4.drawCtrl1.ui;
-
- /* set up draw control register (including blending, alpha
- * test, and shading model)
- */
-
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_FALSE;
-
- /*
- * blend modes
- */
- if(ctx->Color.BlendEnabled){
- switch (ctx->Color.Blend[0].DstRGB)
- {
- case GL_ZERO:
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_Zero;
- break;
-
- case GL_ONE:
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_One;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_SRC_COLOR:
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_SrcClr;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_ONE_MINUS_SRC_COLOR:
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_1SrcClr;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_SRC_ALPHA:
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_SrcAlpha;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_ONE_MINUS_SRC_ALPHA:
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_1SrcAlpha;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_DST_ALPHA:
- if (imesa->glCtx->Visual.alphaBits == 0)
- {
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_One;
- }
- else
- {
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode= DAM_DstAlpha;
- }
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_ONE_MINUS_DST_ALPHA:
- if (imesa->glCtx->Visual.alphaBits == 0)
- {
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_Zero;
- }
- else
- {
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode=DAM_1DstAlpha;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites= GL_TRUE;
- }
- break;
- }
-
- switch (ctx->Color.Blend[0].SrcRGB)
- {
- case GL_ZERO:
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_Zero;
- break;
-
- case GL_ONE:
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_One;
- break;
-
- case GL_DST_COLOR:
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_DstClr;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_ONE_MINUS_DST_COLOR:
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_1DstClr;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_SRC_ALPHA:
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_SrcAlpha;
- break;
-
- case GL_ONE_MINUS_SRC_ALPHA:
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_1SrcAlpha;
- break;
-
- case GL_DST_ALPHA:
- if (imesa->glCtx->Visual.alphaBits == 0)
- {
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_One;
- }
- else
- {
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode= SAM_DstAlpha;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites= GL_TRUE;
- }
- break;
-
- case GL_ONE_MINUS_DST_ALPHA:
- if (imesa->glCtx->Visual.alphaBits == 0)
- {
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_Zero;
- }
- else
- {
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode=SAM_1DstAlpha;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites= GL_TRUE;
- }
- break;
- }
- }
- else
- {
- imesa->regs.s4.drawLocalCtrl.ni.dstAlphaMode = DAM_Zero;
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_One;
- }
-
- /* alpha test*/
-
- if(ctx->Color.AlphaEnabled)
- {
- ACmpFunc a;
- GLubyte alphaRef;
-
- CLAMPED_FLOAT_TO_UBYTE(alphaRef,ctx->Color.AlphaRef);
-
- switch(ctx->Color.AlphaFunc) {
- case GL_NEVER: a = CF_Never; break;
- case GL_ALWAYS: a = CF_Always; break;
- case GL_LESS: a = CF_Less; break;
- case GL_LEQUAL: a = CF_LessEqual; break;
- case GL_EQUAL: a = CF_Equal; break;
- case GL_GREATER: a = CF_Greater; break;
- case GL_GEQUAL: a = CF_GreaterEqual; break;
- case GL_NOTEQUAL: a = CF_NotEqual; break;
- default:return;
- }
-
- imesa->regs.s4.drawCtrl1.ni.alphaTestEn = GL_TRUE;
- imesa->regs.s4.drawCtrl1.ni.alphaTestCmpFunc = a;
- imesa->regs.s4.drawCtrl0.ni.alphaRefVal = alphaRef;
- }
- else
- {
- imesa->regs.s4.drawCtrl1.ni.alphaTestEn = GL_FALSE;
- }
-
- /* Set/Reset Z-after-alpha*/
-
- imesa->regs.s4.drawLocalCtrl.ni.wrZafterAlphaTst =
- imesa->regs.s4.drawCtrl1.ni.alphaTestEn;
- /*imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn =
- ~drawLocalCtrl.ni.wrZafterAlphaTst;*/
-
- if (drawLocalCtrl != imesa->regs.s4.drawLocalCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
- if (drawCtrl0 != imesa->regs.s4.drawCtrl0.ui ||
- drawCtrl1 != imesa->regs.s4.drawCtrl1.ui)
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
-}
-static void savageBlendFunc_s3d(struct gl_context *ctx)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- uint32_t drawCtrl = imesa->regs.s3d.drawCtrl.ui;
- uint32_t zBufCtrl = imesa->regs.s3d.zBufCtrl.ui;
-
- /* set up draw control register (including blending, alpha
- * test, dithering, and shading model)
- */
-
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = 0;
-
- /*
- * blend modes
- */
- if(ctx->Color.BlendEnabled){
- switch (ctx->Color.Blend[0].DstRGB)
- {
- case GL_ZERO:
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_Zero;
- break;
-
- case GL_ONE:
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_One;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_SRC_COLOR:
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_SrcClr;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_ONE_MINUS_SRC_COLOR:
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_1SrcClr;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_SRC_ALPHA:
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_SrcAlpha;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_ONE_MINUS_SRC_ALPHA:
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_1SrcAlpha;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_DST_ALPHA:
- if (imesa->glCtx->Visual.alphaBits == 0)
- {
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_One;
- }
- else
- {
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_DstAlpha;
- }
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_ONE_MINUS_DST_ALPHA:
- if (imesa->glCtx->Visual.alphaBits == 0)
- {
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_Zero;
- }
- else
- {
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_1DstAlpha;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- }
- break;
- }
-
- switch (ctx->Color.Blend[0].SrcRGB)
- {
- case GL_ZERO:
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_Zero;
- break;
-
- case GL_ONE:
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_One;
- break;
-
- case GL_DST_COLOR:
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_DstClr;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_ONE_MINUS_DST_COLOR:
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_1DstClr;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- break;
-
- case GL_SRC_ALPHA:
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_SrcAlpha;
- break;
-
- case GL_ONE_MINUS_SRC_ALPHA:
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_1SrcAlpha;
- break;
-
- case GL_DST_ALPHA:
- if (imesa->glCtx->Visual.alphaBits == 0)
- {
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_One;
- }
- else
- {
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_DstAlpha;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- }
- break;
-
- case GL_ONE_MINUS_DST_ALPHA:
- if (imesa->glCtx->Visual.alphaBits == 0)
- {
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_Zero;
- }
- else
- {
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_1DstAlpha;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
- }
- break;
- }
- }
- else
- {
- imesa->regs.s3d.drawCtrl.ni.dstAlphaMode = DAM_Zero;
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_One;
- }
-
- /* alpha test*/
-
- if(ctx->Color.AlphaEnabled)
- {
- ACmpFunc a;
- GLubyte alphaRef;
-
- CLAMPED_FLOAT_TO_UBYTE(alphaRef,ctx->Color.AlphaRef);
-
- switch(ctx->Color.AlphaFunc) {
- case GL_NEVER: a = CF_Never; break;
- case GL_ALWAYS: a = CF_Always; break;
- case GL_LESS: a = CF_Less; break;
- case GL_LEQUAL: a = CF_LessEqual; break;
- case GL_EQUAL: a = CF_Equal; break;
- case GL_GREATER: a = CF_Greater; break;
- case GL_GEQUAL: a = CF_GreaterEqual; break;
- case GL_NOTEQUAL: a = CF_NotEqual; break;
- default:return;
- }
-
- imesa->regs.s3d.drawCtrl.ni.alphaTestEn = GL_TRUE;
- imesa->regs.s3d.drawCtrl.ni.alphaTestCmpFunc = a;
- imesa->regs.s3d.drawCtrl.ni.alphaRefVal = alphaRef;
- }
- else
- {
- imesa->regs.s3d.drawCtrl.ni.alphaTestEn = GL_FALSE;
- }
-
- /* Set/Reset Z-after-alpha*/
-
- imesa->regs.s3d.zBufCtrl.ni.wrZafterAlphaTst =
- imesa->regs.s3d.drawCtrl.ni.alphaTestEn;
-
- if (drawCtrl != imesa->regs.s3d.drawCtrl.ui ||
- zBufCtrl != imesa->regs.s3d.zBufCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
-}
-
-static void savageDDBlendFuncSeparate_s4( struct gl_context *ctx, GLenum sfactorRGB,
- GLenum dfactorRGB, GLenum sfactorA,
- GLenum dfactorA )
-{
- assert (dfactorRGB == dfactorA && sfactorRGB == sfactorA);
- savageBlendFunc_s4( ctx );
-}
-static void savageDDBlendFuncSeparate_s3d( struct gl_context *ctx, GLenum sfactorRGB,
- GLenum dfactorRGB, GLenum sfactorA,
- GLenum dfactorA )
-{
- assert (dfactorRGB == dfactorA && sfactorRGB == sfactorA);
- savageBlendFunc_s3d( ctx );
-}
-
-
-
-static void savageDDDepthFunc_s4(struct gl_context *ctx, GLenum func)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- ZCmpFunc zmode;
- uint32_t drawLocalCtrl = imesa->regs.s4.drawLocalCtrl.ui;
- uint32_t zBufCtrl = imesa->regs.s4.zBufCtrl.ui;
- uint32_t zWatermarks = imesa->regs.s4.zWatermarks.ui; /* FIXME: in DRM */
-
- /* set up z-buffer control register (global)
- * set up z-buffer offset register (global)
- * set up z read/write watermarks register (global)
- */
-
- switch(func) { /* reversed (see savageCalcViewport) */
- case GL_NEVER: zmode = CF_Never; break;
- case GL_ALWAYS: zmode = CF_Always; break;
- case GL_LESS: zmode = CF_Greater; break;
- case GL_LEQUAL: zmode = CF_GreaterEqual; break;
- case GL_EQUAL: zmode = CF_Equal; break;
- case GL_GREATER: zmode = CF_Less; break;
- case GL_GEQUAL: zmode = CF_LessEqual; break;
- case GL_NOTEQUAL: zmode = CF_NotEqual; break;
- default:return;
- }
- if (ctx->Depth.Test)
- {
-
- imesa->regs.s4.zBufCtrl.ni.zCmpFunc = zmode;
- imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn = ctx->Depth.Mask;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdZbufWrites = GL_TRUE;
- imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
- }
- else if (imesa->glCtx->Stencil._Enabled && imesa->hw_stencil)
- {
- /* Need to keep Z on for Stencil. */
- imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Always;
- imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
- imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn = GL_FALSE;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdZbufWrites = GL_FALSE;
- }
- else
- {
-
- if (imesa->regs.s4.drawLocalCtrl.ni.drawUpdateEn == GL_FALSE)
- {
- imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Always;
- imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
- }
- else
-
- /* DRAWUPDATE_REQUIRES_Z_ENABLED*/
- {
- imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_FALSE;
- }
- imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn = GL_FALSE;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdZbufWrites = GL_FALSE;
- }
-
- if (drawLocalCtrl != imesa->regs.s4.drawLocalCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
- if (zBufCtrl != imesa->regs.s4.zBufCtrl.ui ||
- zWatermarks != imesa->regs.s4.zWatermarks.ui)
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
-}
-static void savageDDDepthFunc_s3d(struct gl_context *ctx, GLenum func)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- ZCmpFunc zmode;
- uint32_t drawCtrl = imesa->regs.s3d.drawCtrl.ui;
- uint32_t zBufCtrl = imesa->regs.s3d.zBufCtrl.ui;
- uint32_t zWatermarks = imesa->regs.s3d.zWatermarks.ui; /* FIXME: in DRM */
-
- /* set up z-buffer control register (global)
- * set up z-buffer offset register (global)
- * set up z read/write watermarks register (global)
- */
- switch(func) { /* reversed (see savageCalcViewport) */
- case GL_NEVER: zmode = CF_Never; break;
- case GL_ALWAYS: zmode = CF_Always; break;
- case GL_LESS: zmode = CF_Greater; break;
- case GL_LEQUAL: zmode = CF_GreaterEqual; break;
- case GL_EQUAL: zmode = CF_Equal; break;
- case GL_GREATER: zmode = CF_Less; break;
- case GL_GEQUAL: zmode = CF_LessEqual; break;
- case GL_NOTEQUAL: zmode = CF_NotEqual; break;
- default:return;
- }
- if (ctx->Depth.Test)
- {
- imesa->regs.s3d.zBufCtrl.ni.zBufEn = GL_TRUE;
- imesa->regs.s3d.zBufCtrl.ni.zCmpFunc = zmode;
- imesa->regs.s3d.zBufCtrl.ni.zUpdateEn = ctx->Depth.Mask;
-
- imesa->regs.s3d.drawCtrl.ni.flushPdZbufWrites = GL_TRUE;
- }
- else
- {
- if (imesa->regs.s3d.zBufCtrl.ni.drawUpdateEn == GL_FALSE) {
- imesa->regs.s3d.zBufCtrl.ni.zCmpFunc = CF_Always;
- imesa->regs.s3d.zBufCtrl.ni.zBufEn = GL_TRUE;
- }
- else
-
- /* DRAWUPDATE_REQUIRES_Z_ENABLED*/
- {
- imesa->regs.s3d.zBufCtrl.ni.zBufEn = GL_FALSE;
- }
- imesa->regs.s3d.zBufCtrl.ni.zUpdateEn = GL_FALSE;
- imesa->regs.s3d.drawCtrl.ni.flushPdZbufWrites = GL_FALSE;
- }
-
- if (drawCtrl != imesa->regs.s3d.drawCtrl.ui ||
- zBufCtrl != imesa->regs.s3d.zBufCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
- if (zWatermarks != imesa->regs.s3d.zWatermarks.ui)
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
-}
-
-static void savageDDDepthMask_s4(struct gl_context *ctx, GLboolean flag)
-{
- savageDDDepthFunc_s4(ctx,ctx->Depth.Func);
-}
-static void savageDDDepthMask_s3d(struct gl_context *ctx, GLboolean flag)
-{
- savageDDDepthFunc_s3d(ctx,ctx->Depth.Func);
-}
-
-
-
-
-/* =============================================================
- * Hardware clipping
- */
-
-
-static void savageDDScissor( struct gl_context *ctx, GLint x, GLint y,
- GLsizei w, GLsizei h )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
-
- /* Emit buffered commands with old scissor state. */
- FLUSH_BATCH(imesa);
-
- /* Mirror scissors in private context. */
- imesa->scissor.enabled = ctx->Scissor.Enabled;
- imesa->scissor.x = x;
- imesa->scissor.y = y;
- imesa->scissor.w = w;
- imesa->scissor.h = h;
-}
-
-
-
-static void savageDDDrawBuffer(struct gl_context *ctx, GLenum mode )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- uint32_t destCtrl = imesa->regs.s4.destCtrl.ui;
-
- if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
- FALLBACK( ctx, SAVAGE_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0] ) {
- case BUFFER_FRONT_LEFT:
- imesa->IsDouble = GL_FALSE;
- imesa->regs.s4.destCtrl.ni.offset = imesa->savageScreen->frontOffset>>11;
- break;
- case BUFFER_BACK_LEFT:
- imesa->IsDouble = GL_TRUE;
- imesa->regs.s4.destCtrl.ni.offset = imesa->savageScreen->backOffset>>11;
- break;
- default:
- FALLBACK( ctx, SAVAGE_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- imesa->NotFirstFrame = GL_FALSE;
- savageXMesaSetClipRects(imesa);
- FALLBACK(ctx, SAVAGE_FALLBACK_DRAW_BUFFER, GL_FALSE);
-
- if (destCtrl != imesa->regs.s4.destCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
-}
-
-static void savageDDReadBuffer(struct gl_context *ctx, GLenum mode )
-{
- /* nothing, until we implement h/w glRead/CopyPixels or CopyTexImage */
-}
-
-#if 0
-static void savageDDSetColor(struct gl_context *ctx,
- GLubyte r, GLubyte g,
- GLubyte b, GLubyte a )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- imesa->MonoColor = savagePackColor( imesa->savageScreen->frontFormat, r, g, b, a );
-}
-#endif
-
-/* =============================================================
- * Window position and viewport transformation
- */
-
-void savageCalcViewport( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- const GLfloat *v = ctx->Viewport._WindowMap.m;
- GLfloat *m = imesa->hw_viewport;
-
- m[MAT_SX] = v[MAT_SX];
- m[MAT_TX] = v[MAT_TX] + imesa->drawX + SUBPIXEL_X;
- m[MAT_SY] = - v[MAT_SY];
- m[MAT_TY] = - v[MAT_TY] + imesa->driDrawable->h + imesa->drawY + SUBPIXEL_Y;
- /* Depth range is reversed (far: 0, near: 1) so that float depth
- * compensates for loss of accuracy of far coordinates. */
- if (imesa->float_depth && imesa->savageScreen->zpp == 2) {
- /* The Savage 16-bit floating point depth format can't encode
- * numbers < 2^-16. Make sure all depth values stay greater
- * than that. */
- m[MAT_SZ] = - v[MAT_SZ] * imesa->depth_scale * (65535.0/65536.0);
- m[MAT_TZ] = 1.0 - v[MAT_TZ] * imesa->depth_scale * (65535.0/65536.0);
- } else {
- m[MAT_SZ] = - v[MAT_SZ] * imesa->depth_scale;
- m[MAT_TZ] = 1.0 - v[MAT_TZ] * imesa->depth_scale;
- }
-
- imesa->SetupNewInputs = ~0;
-}
-
-static void savageViewport( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height )
-{
- savageCalcViewport( ctx );
-}
-
-static void savageDepthRange( struct gl_context *ctx,
- GLclampd nearval, GLclampd farval )
-{
- savageCalcViewport( ctx );
-}
-
-
-/* =============================================================
- * Miscellaneous
- */
-
-static void savageDDClearColor(struct gl_context *ctx,
- const GLfloat color[4] )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- GLubyte c[4];
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-
- imesa->ClearColor = savagePackColor( imesa->savageScreen->frontFormat,
- c[0], c[1], c[2], c[3] );
-}
-
-/* Fallback to swrast for select and feedback.
- */
-static void savageRenderMode( struct gl_context *ctx, GLenum mode )
-{
- FALLBACK( ctx, SAVAGE_FALLBACK_RENDERMODE, (mode != GL_RENDER) );
-}
-
-
-#if HW_CULL
-
-/* =============================================================
- * Culling - the savage isn't quite as clean here as the rest of
- * its interfaces, but it's not bad.
- */
-static void savageDDCullFaceFrontFace(struct gl_context *ctx, GLenum unused)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- GLuint cullMode=imesa->LcsCullMode;
- switch (ctx->Polygon.CullFaceMode)
- {
- case GL_FRONT:
- switch (ctx->Polygon.FrontFace)
- {
- case GL_CW:
- cullMode = BCM_CW;
- break;
- case GL_CCW:
- cullMode = BCM_CCW;
- break;
- }
- break;
-
- case GL_BACK:
- switch (ctx->Polygon.FrontFace)
- {
- case GL_CW:
- cullMode = BCM_CCW;
- break;
- case GL_CCW:
- cullMode = BCM_CW;
- break;
- }
- break;
- }
- imesa->LcsCullMode = cullMode;
- imesa->new_state |= SAVAGE_NEW_CULL;
-}
-#endif /* end #if HW_CULL */
-
-static void savageUpdateCull( struct gl_context *ctx )
-{
-#if HW_CULL
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- GLuint cullMode;
- if (ctx->Polygon.CullFlag &&
- imesa->raster_primitive >= GL_TRIANGLES &&
- ctx->Polygon.CullFaceMode != GL_FRONT_AND_BACK)
- cullMode = imesa->LcsCullMode;
- else
- cullMode = BCM_None;
- if (imesa->savageScreen->chipset >= S3_SAVAGE4) {
- if (imesa->regs.s4.drawCtrl1.ni.cullMode != cullMode) {
- imesa->regs.s4.drawCtrl1.ni.cullMode = cullMode;
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
- }
- } else {
- if (imesa->regs.s3d.drawCtrl.ni.cullMode != cullMode) {
- imesa->regs.s3d.drawCtrl.ni.cullMode = cullMode;
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
- }
- }
-#endif /* end #if HW_CULL */
-}
-
-
-
-/* =============================================================
- * Color masks
- */
-
-/* Savage4 can disable draw updates when all channels are
- * masked. Savage3D has a bit called drawUpdateEn, but it doesn't seem
- * to have any effect. If only some channels are masked we need a
- * software fallback on all chips.
- */
-static void savageDDColorMask_s4(struct gl_context *ctx,
- GLboolean r, GLboolean g,
- GLboolean b, GLboolean a )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
- GLboolean passAny, passAll;
-
- if (ctx->Visual.alphaBits) {
- passAny = b || g || r || a;
- passAll = r && g && b && a;
- } else {
- passAny = b || g || r;
- passAll = r && g && b;
- }
-
- if (passAny) {
- if (!imesa->regs.s4.drawLocalCtrl.ni.drawUpdateEn) {
- imesa->regs.s4.drawLocalCtrl.ni.drawUpdateEn = GL_TRUE;
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
- }
- FALLBACK (ctx, SAVAGE_FALLBACK_COLORMASK, !passAll);
- } else if (imesa->regs.s4.drawLocalCtrl.ni.drawUpdateEn) {
- imesa->regs.s4.drawLocalCtrl.ni.drawUpdateEn = GL_FALSE;
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
- }
-}
-static void savageDDColorMask_s3d(struct gl_context *ctx,
- GLboolean r, GLboolean g,
- GLboolean b, GLboolean a )
-{
- if (ctx->Visual.alphaBits)
- FALLBACK (ctx, SAVAGE_FALLBACK_COLORMASK, !(r && g && b && a));
- else
- FALLBACK (ctx, SAVAGE_FALLBACK_COLORMASK, !(r && g && b));
-}
-
-static void savageUpdateSpecular_s4(struct gl_context *ctx) {
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
- uint32_t drawLocalCtrl = imesa->regs.s4.drawLocalCtrl.ui;
-
- if (_mesa_need_secondary_color(ctx)) {
- imesa->regs.s4.drawLocalCtrl.ni.specShadeEn = GL_TRUE;
- } else {
- imesa->regs.s4.drawLocalCtrl.ni.specShadeEn = GL_FALSE;
- }
-
- if (drawLocalCtrl != imesa->regs.s4.drawLocalCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
-}
-
-static void savageUpdateSpecular_s3d(struct gl_context *ctx) {
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
- uint32_t drawCtrl = imesa->regs.s3d.drawCtrl.ui;
-
- if (_mesa_need_secondary_color(ctx)) {
- imesa->regs.s3d.drawCtrl.ni.specShadeEn = GL_TRUE;
- } else {
- imesa->regs.s3d.drawCtrl.ni.specShadeEn = GL_FALSE;
- }
-
- if (drawCtrl != imesa->regs.s3d.drawCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
-}
-
-static void savageDDLightModelfv_s4(struct gl_context *ctx, GLenum pname,
- const GLfloat *param)
-{
- savageUpdateSpecular_s4 (ctx);
-}
-static void savageDDLightModelfv_s3d(struct gl_context *ctx, GLenum pname,
- const GLfloat *param)
-{
- savageUpdateSpecular_s3d (ctx);
-}
-
-static void savageDDShadeModel_s4(struct gl_context *ctx, GLuint mod)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
- uint32_t drawLocalCtrl = imesa->regs.s4.drawLocalCtrl.ui;
-
- if (mod == GL_SMOOTH)
- {
- imesa->regs.s4.drawLocalCtrl.ni.flatShadeEn = GL_FALSE;
- }
- else
- {
- imesa->regs.s4.drawLocalCtrl.ni.flatShadeEn = GL_TRUE;
- }
-
- if (drawLocalCtrl != imesa->regs.s4.drawLocalCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
-}
-static void savageDDShadeModel_s3d(struct gl_context *ctx, GLuint mod)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
- uint32_t drawCtrl = imesa->regs.s3d.drawCtrl.ui;
-
- if (mod == GL_SMOOTH)
- {
- imesa->regs.s3d.drawCtrl.ni.flatShadeEn = GL_FALSE;
- }
- else
- {
- imesa->regs.s3d.drawCtrl.ni.flatShadeEn = GL_TRUE;
- }
-
- if (drawCtrl != imesa->regs.s3d.drawCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
-}
-
-
-/* =============================================================
- * Fog
- * The fogCtrl register has the same position and the same layout
- * on savage3d and savage4. No need for two separate functions.
- */
-
-static void savageDDFogfv(struct gl_context *ctx, GLenum pname, const GLfloat *param)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- GLuint fogClr;
- uint32_t fogCtrl = imesa->regs.s4.fogCtrl.ui;
-
- /*if ((ctx->Fog.Enabled) &&(pname == GL_FOG_COLOR))*/
- if (ctx->Fog.Enabled)
- {
- fogClr = (((GLubyte)(ctx->Fog.Color[0]*255.0F) << 16) |
- ((GLubyte)(ctx->Fog.Color[1]*255.0F) << 8) |
- ((GLubyte)(ctx->Fog.Color[2]*255.0F) << 0));
- imesa->regs.s4.fogCtrl.ni.fogEn = GL_TRUE;
- /*cheap fog*/
- imesa->regs.s4.fogCtrl.ni.fogMode = GL_TRUE;
- imesa->regs.s4.fogCtrl.ni.fogClr = fogClr;
- }
- else
- {
- /*No fog*/
-
- imesa->regs.s4.fogCtrl.ni.fogEn = 0;
- imesa->regs.s4.fogCtrl.ni.fogMode = 0;
- }
-
- if (fogCtrl != imesa->regs.s4.fogCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
-}
-
-
-static void
-savageDDStencilFuncSeparate(struct gl_context *ctx, GLenum face, GLenum func,
- GLint ref, GLuint mask)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- unsigned a=0;
- const uint32_t zBufCtrl = imesa->regs.s4.zBufCtrl.ui;
- const uint32_t stencilCtrl = imesa->regs.s4.stencilCtrl.ui;
-
- imesa->regs.s4.zBufCtrl.ni.stencilRefVal = ctx->Stencil.Ref[0] & 0xff;
- imesa->regs.s4.stencilCtrl.ni.readMask = ctx->Stencil.ValueMask[0] & 0xff;
-
- switch (ctx->Stencil.Function[0])
- {
- case GL_NEVER: a = CF_Never; break;
- case GL_ALWAYS: a = CF_Always; break;
- case GL_LESS: a = CF_Less; break;
- case GL_LEQUAL: a = CF_LessEqual; break;
- case GL_EQUAL: a = CF_Equal; break;
- case GL_GREATER: a = CF_Greater; break;
- case GL_GEQUAL: a = CF_GreaterEqual; break;
- case GL_NOTEQUAL: a = CF_NotEqual; break;
- default:
- break;
- }
-
- imesa->regs.s4.stencilCtrl.ni.cmpFunc = a;
-
- if (zBufCtrl != imesa->regs.s4.zBufCtrl.ui ||
- stencilCtrl != imesa->regs.s4.stencilCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
-}
-
-static void
-savageDDStencilMaskSeparate(struct gl_context *ctx, GLenum face, GLuint mask)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
-
- if (imesa->regs.s4.stencilCtrl.ni.writeMask != (ctx->Stencil.WriteMask[0] & 0xff)) {
- imesa->regs.s4.stencilCtrl.ni.writeMask = (ctx->Stencil.WriteMask[0] & 0xff);
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
- }
-}
-
-static unsigned get_stencil_op_value( GLenum op )
-{
- switch (op)
- {
- case GL_KEEP: return STENCIL_Keep;
- case GL_ZERO: return STENCIL_Zero;
- case GL_REPLACE: return STENCIL_Equal;
- case GL_INCR: return STENCIL_IncClamp;
- case GL_DECR: return STENCIL_DecClamp;
- case GL_INVERT: return STENCIL_Invert;
- case GL_INCR_WRAP: return STENCIL_Inc;
- case GL_DECR_WRAP: return STENCIL_Dec;
- }
-
- /* Should *never* get here. */
- return STENCIL_Keep;
-}
-
-static void
-savageDDStencilOpSeparate(struct gl_context *ctx, GLenum face, GLenum fail,
- GLenum zfail, GLenum zpass)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- const uint32_t stencilCtrl = imesa->regs.s4.stencilCtrl.ui;
-
- imesa->regs.s4.stencilCtrl.ni.failOp = get_stencil_op_value( ctx->Stencil.FailFunc[0] );
- imesa->regs.s4.stencilCtrl.ni.passZfailOp = get_stencil_op_value( ctx->Stencil.ZFailFunc[0] );
- imesa->regs.s4.stencilCtrl.ni.passZpassOp = get_stencil_op_value( ctx->Stencil.ZPassFunc[0] );
-
- if (stencilCtrl != imesa->regs.s4.stencilCtrl.ui)
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
-}
-
-
-/* =============================================================
- */
-
-static void savageDDEnable_s4(struct gl_context *ctx, GLenum cap, GLboolean state)
-{
-
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- switch(cap) {
- case GL_ALPHA_TEST:
- /* we should consider the disable case*/
- savageBlendFunc_s4(ctx);
- break;
- case GL_BLEND:
- /*add the savageBlendFunc 2001/11/25
- * if call no such function, then glDisable(GL_BLEND) will do noting,
- *our chip has no disable bit
- */
- savageBlendFunc_s4(ctx);
- case GL_COLOR_LOGIC_OP:
- /* Fall through:
- * For some reason enable(GL_BLEND) affects ColorLogicOpEnabled.
- */
- FALLBACK (ctx, SAVAGE_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
- break;
- case GL_DEPTH_TEST:
- savageDDDepthFunc_s4(ctx,ctx->Depth.Func);
- break;
- case GL_SCISSOR_TEST:
- savageDDScissor(ctx, ctx->Scissor.X, ctx->Scissor.Y,
- ctx->Scissor.Width, ctx->Scissor.Height);
- break;
- case GL_STENCIL_TEST:
- if (!imesa->hw_stencil)
- FALLBACK (ctx, SAVAGE_FALLBACK_STENCIL, state);
- else {
- imesa->regs.s4.stencilCtrl.ni.stencilEn = state;
- if (ctx->Stencil._Enabled &&
- imesa->regs.s4.zBufCtrl.ni.zBufEn != GL_TRUE)
- {
- /* Stencil buffer requires Z enabled. */
- imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Always;
- imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
- imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn = GL_FALSE;
- }
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL | SAVAGE_UPLOAD_LOCAL;
- }
- break;
- case GL_FOG:
- savageDDFogfv(ctx,0,0);
- break;
- case GL_CULL_FACE:
-#if HW_CULL
- if (state)
- {
- savageDDCullFaceFrontFace(ctx,0);
- }
- else
- {
- imesa->LcsCullMode = BCM_None;
- imesa->new_state |= SAVAGE_NEW_CULL;
- }
-#endif
- break;
- case GL_DITHER:
- if (state)
- {
- if ( ctx->Color.DitherFlag )
- {
- imesa->regs.s4.drawCtrl1.ni.ditherEn=GL_TRUE;
- }
- }
- if (!ctx->Color.DitherFlag )
- {
- imesa->regs.s4.drawCtrl1.ni.ditherEn=GL_FALSE;
- }
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL;
- break;
-
- case GL_LIGHTING:
- savageUpdateSpecular_s4 (ctx);
- break;
- case GL_TEXTURE_1D:
- case GL_TEXTURE_3D:
- imesa->new_state |= SAVAGE_NEW_TEXTURE;
- break;
- case GL_TEXTURE_2D:
- imesa->new_state |= SAVAGE_NEW_TEXTURE;
- break;
- default:
- ;
- }
-}
-static void savageDDEnable_s3d(struct gl_context *ctx, GLenum cap, GLboolean state)
-{
-
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- switch(cap) {
- case GL_ALPHA_TEST:
- /* we should consider the disable case*/
- savageBlendFunc_s3d(ctx);
- break;
- case GL_BLEND:
- /*add the savageBlendFunc 2001/11/25
- * if call no such function, then glDisable(GL_BLEND) will do noting,
- *our chip has no disable bit
- */
- savageBlendFunc_s3d(ctx);
- case GL_COLOR_LOGIC_OP:
- /* Fall through:
- * For some reason enable(GL_BLEND) affects ColorLogicOpEnabled.
- */
- FALLBACK (ctx, SAVAGE_FALLBACK_LOGICOP,
- (ctx->Color.ColorLogicOpEnabled &&
- ctx->Color.LogicOp != GL_COPY));
- break;
- case GL_DEPTH_TEST:
- savageDDDepthFunc_s3d(ctx,ctx->Depth.Func);
- break;
- case GL_SCISSOR_TEST:
- savageDDScissor(ctx, ctx->Scissor.X, ctx->Scissor.Y,
- ctx->Scissor.Width, ctx->Scissor.Height);
- break;
- case GL_STENCIL_TEST:
- FALLBACK (ctx, SAVAGE_FALLBACK_STENCIL, state);
- break;
- case GL_FOG:
- savageDDFogfv(ctx,0,0);
- break;
- case GL_CULL_FACE:
-#if HW_CULL
- if (state)
- {
- savageDDCullFaceFrontFace(ctx,0);
- }
- else
- {
- imesa->LcsCullMode = BCM_None;
- imesa->new_state |= SAVAGE_NEW_CULL;
- }
-#endif
- break;
- case GL_DITHER:
- if (state)
- {
- if ( ctx->Color.DitherFlag )
- {
- imesa->regs.s3d.drawCtrl.ni.ditherEn=GL_TRUE;
- }
- }
- if (!ctx->Color.DitherFlag )
- {
- imesa->regs.s3d.drawCtrl.ni.ditherEn=GL_FALSE;
- }
- imesa->dirty |= SAVAGE_UPLOAD_LOCAL;
- break;
-
- case GL_LIGHTING:
- savageUpdateSpecular_s3d (ctx);
- break;
- case GL_TEXTURE_1D:
- case GL_TEXTURE_3D:
- imesa->new_state |= SAVAGE_NEW_TEXTURE;
- break;
- case GL_TEXTURE_2D:
- imesa->new_state |= SAVAGE_NEW_TEXTURE;
- break;
- default:
- ;
- }
-}
-
-void savageDDUpdateHwState( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
-
- if (imesa->new_state) {
- savageFlushVertices(imesa);
- if (imesa->new_state & SAVAGE_NEW_TEXTURE) {
- savageUpdateTextureState( ctx );
- }
- if ((imesa->new_state & SAVAGE_NEW_CULL)) {
- savageUpdateCull(ctx);
- }
- imesa->new_state = 0;
- }
-}
-
-
-static void savageDDPrintDirty( const char *msg, GLuint state )
-{
- fprintf(stderr, "%s (0x%x): %s%s%s%s%s%s\n",
- msg,
- (unsigned int) state,
- (state & SAVAGE_UPLOAD_LOCAL) ? "upload-local, " : "",
- (state & SAVAGE_UPLOAD_TEX0) ? "upload-tex0, " : "",
- (state & SAVAGE_UPLOAD_TEX1) ? "upload-tex1, " : "",
- (state & SAVAGE_UPLOAD_FOGTBL) ? "upload-fogtbl, " : "",
- (state & SAVAGE_UPLOAD_GLOBAL) ? "upload-global, " : "",
- (state & SAVAGE_UPLOAD_TEXGLOBAL) ? "upload-texglobal, " : ""
- );
-}
-
-
-/**
- * Check if global registers were changed
- */
-static GLboolean savageGlobalRegChanged (savageContextPtr imesa,
- GLuint first, GLuint last) {
- GLuint i;
- for (i = first - SAVAGE_FIRST_REG; i <= last - SAVAGE_FIRST_REG; ++i) {
- if (((imesa->oldRegs.ui[i] ^ imesa->regs.ui[i]) &
- imesa->globalRegMask.ui[i]) != 0)
- return GL_TRUE;
- }
- return GL_FALSE;
-}
-static void savageEmitOldRegs (savageContextPtr imesa,
- GLuint first, GLuint last, GLboolean global) {
- GLuint n = last-first+1;
- drm_savage_cmd_header_t *cmd = savageAllocCmdBuf(imesa, n*4);
- cmd->state.cmd = SAVAGE_CMD_STATE;
- cmd->state.global = global;
- cmd->state.count = n;
- cmd->state.start = first;
- memcpy(cmd+1, &imesa->oldRegs.ui[first-SAVAGE_FIRST_REG], n*4);
-}
-static void savageEmitContiguousRegs (savageContextPtr imesa,
- GLuint first, GLuint last) {
- GLuint i;
- GLuint n = last-first+1;
- drm_savage_cmd_header_t *cmd = savageAllocCmdBuf(imesa, n*4);
- cmd->state.cmd = SAVAGE_CMD_STATE;
- cmd->state.global = savageGlobalRegChanged(imesa, first, last);
- cmd->state.count = n;
- cmd->state.start = first;
- memcpy(cmd+1, &imesa->regs.ui[first-SAVAGE_FIRST_REG], n*4);
- /* savageAllocCmdBuf may need to flush the cmd buffer and backup
- * the current hardware state. It should see the "old" (current)
- * state that has actually been emitted to the hardware. Therefore
- * this update is done *after* savageAllocCmdBuf. */
- for (i = first - SAVAGE_FIRST_REG; i <= last - SAVAGE_FIRST_REG; ++i)
- imesa->oldRegs.ui[i] = imesa->regs.ui[i];
- if (SAVAGE_DEBUG & DEBUG_STATE)
- fprintf (stderr, "Emitting regs 0x%02x-0x%02x\n", first, last);
-}
-static void savageEmitChangedRegs (savageContextPtr imesa,
- GLuint first, GLuint last) {
- GLuint i, firstChanged;
- firstChanged = SAVAGE_NR_REGS;
- for (i = first - SAVAGE_FIRST_REG; i <= last - SAVAGE_FIRST_REG; ++i) {
- if (imesa->oldRegs.ui[i] != imesa->regs.ui[i]) {
- if (firstChanged == SAVAGE_NR_REGS)
- firstChanged = i;
- } else {
- if (firstChanged != SAVAGE_NR_REGS) {
- savageEmitContiguousRegs (imesa, firstChanged+SAVAGE_FIRST_REG,
- i-1+SAVAGE_FIRST_REG);
- firstChanged = SAVAGE_NR_REGS;
- }
- }
- }
- if (firstChanged != SAVAGE_NR_REGS)
- savageEmitContiguousRegs (imesa, firstChanged+SAVAGE_FIRST_REG,
- last);
-}
-static void savageEmitChangedRegChunk (savageContextPtr imesa,
- GLuint first, GLuint last) {
- GLuint i;
- for (i = first - SAVAGE_FIRST_REG; i <= last - SAVAGE_FIRST_REG; ++i) {
- if (imesa->oldRegs.ui[i] != imesa->regs.ui[i]) {
- savageEmitContiguousRegs (imesa, first, last);
- break;
- }
- }
-}
-static void savageUpdateRegister_s4(savageContextPtr imesa)
-{
- /* In case the texture image was changed without changing the
- * texture address as well, we need to force emitting the texture
- * address in order to flush texture cashes. */
- if ((imesa->dirty & SAVAGE_UPLOAD_TEX0) &&
- imesa->oldRegs.s4.texAddr[0].ui == imesa->regs.s4.texAddr[0].ui)
- imesa->oldRegs.s4.texAddr[0].ui = 0xffffffff;
- if ((imesa->dirty & SAVAGE_UPLOAD_TEX1) &&
- imesa->oldRegs.s4.texAddr[1].ui == imesa->regs.s4.texAddr[1].ui)
- imesa->oldRegs.s4.texAddr[1].ui = 0xffffffff;
-
- /* Fix up watermarks */
- if (imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites) {
- imesa->regs.s4.destTexWatermarks.ni.destWriteLow = 0;
- imesa->regs.s4.destTexWatermarks.ni.destFlush = 1;
- } else
- imesa->regs.s4.destTexWatermarks.ni.destWriteLow = S4_DWLO;
- if (imesa->regs.s4.drawLocalCtrl.ni.flushPdZbufWrites)
- imesa->regs.s4.zWatermarks.ni.wLow = 0;
- else
- imesa->regs.s4.zWatermarks.ni.wLow = S4_ZWLO;
-
- savageEmitChangedRegs (imesa, 0x1e, 0x39);
-
- imesa->dirty=0;
-}
-static void savageUpdateRegister_s3d(savageContextPtr imesa)
-{
- /* In case the texture image was changed without changing the
- * texture address as well, we need to force emitting the texture
- * address in order to flush texture cashes. */
- if ((imesa->dirty & SAVAGE_UPLOAD_TEX0) &&
- imesa->oldRegs.s3d.texAddr.ui == imesa->regs.s3d.texAddr.ui)
- imesa->oldRegs.s3d.texAddr.ui = 0xffffffff;
-
- /* Fix up watermarks */
- if (imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites) {
- imesa->regs.s3d.destTexWatermarks.ni.destWriteLow = 0;
- imesa->regs.s3d.destTexWatermarks.ni.destFlush = 1;
- } else
- imesa->regs.s3d.destTexWatermarks.ni.destWriteLow = S3D_DWLO;
- if (imesa->regs.s3d.drawCtrl.ni.flushPdZbufWrites)
- imesa->regs.s3d.zWatermarks.ni.wLow = 0;
- else
- imesa->regs.s3d.zWatermarks.ni.wLow = S3D_ZWLO;
-
-
- /* the savage3d uses two contiguous ranges of BCI registers:
- * 0x18-0x1c and 0x20-0x38. Some texture registers need to be
- * emitted in one chunk or we get some funky rendering errors. */
- savageEmitChangedRegs (imesa, 0x18, 0x19);
- savageEmitChangedRegChunk (imesa, 0x1a, 0x1c);
- savageEmitChangedRegs (imesa, 0x20, 0x38);
-
- imesa->dirty=0;
-}
-
-
-void savageEmitOldState( savageContextPtr imesa )
-{
- assert(imesa->cmdBuf.write == imesa->cmdBuf.base);
- if (imesa->savageScreen->chipset >= S3_SAVAGE4) {
- savageEmitOldRegs (imesa, 0x1e, 0x39, GL_TRUE);
- } else {
- savageEmitOldRegs (imesa, 0x18, 0x1c, GL_TRUE);
- savageEmitOldRegs (imesa, 0x20, 0x38, GL_FALSE);
- }
-}
-
-
-/* Push the state into the sarea and/or texture memory.
- */
-void savageEmitChangedState( savageContextPtr imesa )
-{
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_API)
- savageDDPrintDirty( "\n\n\nsavageEmitHwStateLocked", imesa->dirty );
-
- if (imesa->dirty)
- {
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf (stderr, "... emitting state\n");
- if (imesa->savageScreen->chipset >= S3_SAVAGE4)
- savageUpdateRegister_s4(imesa);
- else
- savageUpdateRegister_s3d(imesa);
- }
-
- imesa->dirty = 0;
-}
-
-
-static void savageDDInitState_s4( savageContextPtr imesa )
-{
-#if 1
- imesa->regs.s4.destCtrl.ui = 1<<7;
-#endif
-
- imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Less;
- imesa->regs.s4.zBufCtrl.ni.wToZEn = GL_TRUE;
- if (imesa->float_depth) {
- imesa->regs.s4.zBufCtrl.ni.zExpOffset =
- imesa->savageScreen->zpp == 2 ? 16 : 32;
- imesa->regs.s4.zBufCtrl.ni.floatZEn = GL_TRUE;
- } else {
- imesa->regs.s4.zBufCtrl.ni.zExpOffset = 0;
- imesa->regs.s4.zBufCtrl.ni.floatZEn = GL_FALSE;
- }
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_NoTexMap;
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_NoTexMap1;
- imesa->regs.s4.drawCtrl0.ui = 0;
-#if 0
- imesa->regs.s4.drawCtrl1.ni.xyOffsetEn = 1;
-#endif
-
- /* Set DestTexWatermarks_31,30 to 01 always.
- *Has no effect if dest. flush is disabled.
- */
-#if 0
- imesa->regs.s4.zWatermarks.ui = 0x12000C04;
- imesa->regs.s4.destTexWatermarks.ui = 0x40200400;
-#else
- /*imesa->regs.s4.zWatermarks.ui = 0x16001808;*/
- imesa->regs.s4.zWatermarks.ni.rLow = S4_ZRLO;
- imesa->regs.s4.zWatermarks.ni.rHigh = S4_ZRHI;
- imesa->regs.s4.zWatermarks.ni.wLow = S4_ZWLO;
- imesa->regs.s4.zWatermarks.ni.wHigh = S4_ZWHI;
- /*imesa->regs.s4.destTexWatermarks.ui = 0x4f000000;*/
- imesa->regs.s4.destTexWatermarks.ni.destReadLow = S4_DRLO;
- imesa->regs.s4.destTexWatermarks.ni.destReadHigh = S4_DRHI;
- imesa->regs.s4.destTexWatermarks.ni.destWriteLow = S4_DWLO;
- imesa->regs.s4.destTexWatermarks.ni.destWriteHigh = S4_DWHI;
- imesa->regs.s4.destTexWatermarks.ni.texRead = S4_TR;
- imesa->regs.s4.destTexWatermarks.ni.destFlush = 1;
-#endif
- imesa->regs.s4.drawCtrl0.ni.dPerfAccelEn = GL_TRUE;
-
- /* clrCmpAlphaBlendCtrl is needed to get alphatest and
- * alpha blending working properly
- */
-
- imesa->regs.s4.texCtrl[0].ni.dBias = 0x08;
- imesa->regs.s4.texCtrl[1].ni.dBias = 0x08;
- imesa->regs.s4.texCtrl[0].ni.texXprEn = GL_TRUE;
- imesa->regs.s4.texCtrl[1].ni.texXprEn = GL_TRUE;
- imesa->regs.s4.texCtrl[0].ni.dMax = 0x0f;
- imesa->regs.s4.texCtrl[1].ni.dMax = 0x0f;
- /* programm a valid tex address, in case texture state is emitted
- * in wrong order. */
- if (imesa->lastTexHeap == 2 && imesa->savageScreen->textureSize[1]) {
- /* AGP textures available */
- imesa->regs.s4.texAddr[0].ui = imesa->savageScreen->textureOffset[1]|3;
- imesa->regs.s4.texAddr[1].ui = imesa->savageScreen->textureOffset[1]|3;
- } else {
- /* no AGP textures available, use local */
- imesa->regs.s4.texAddr[0].ui = imesa->savageScreen->textureOffset[0]|2;
- imesa->regs.s4.texAddr[1].ui = imesa->savageScreen->textureOffset[0]|2;
- }
- imesa->regs.s4.drawLocalCtrl.ni.drawUpdateEn = GL_TRUE;
- imesa->regs.s4.drawLocalCtrl.ni.srcAlphaMode = SAM_One;
- imesa->regs.s4.drawLocalCtrl.ni.wrZafterAlphaTst = GL_FALSE;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdZbufWrites= GL_TRUE;
- imesa->regs.s4.drawLocalCtrl.ni.flushPdDestWrites= GL_TRUE;
-
- imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn= GL_TRUE;
- imesa->regs.s4.drawCtrl1.ni.ditherEn = (
- driQueryOptioni(&imesa->optionCache, "color_reduction") ==
- DRI_CONF_COLOR_REDUCTION_DITHER) ? GL_TRUE : GL_FALSE;
- imesa->regs.s4.drawCtrl1.ni.cullMode = BCM_None;
-
- imesa->regs.s4.zBufCtrl.ni.stencilRefVal = 0x00;
-
- imesa->regs.s4.stencilCtrl.ni.stencilEn = GL_FALSE;
- imesa->regs.s4.stencilCtrl.ni.cmpFunc = CF_Always;
- imesa->regs.s4.stencilCtrl.ni.failOp = STENCIL_Keep;
- imesa->regs.s4.stencilCtrl.ni.passZfailOp = STENCIL_Keep;
- imesa->regs.s4.stencilCtrl.ni.passZpassOp = STENCIL_Keep;
- imesa->regs.s4.stencilCtrl.ni.writeMask = 0xff;
- imesa->regs.s4.stencilCtrl.ni.readMask = 0xff;
-
- imesa->LcsCullMode=BCM_None;
- imesa->regs.s4.texDescr.ni.palSize = TPS_256;
-
- /* clear the local registers in the global reg mask */
- imesa->globalRegMask.s4.drawLocalCtrl.ui = 0;
- imesa->globalRegMask.s4.texPalAddr.ui = 0;
- imesa->globalRegMask.s4.texCtrl[0].ui = 0;
- imesa->globalRegMask.s4.texCtrl[1].ui = 0;
- imesa->globalRegMask.s4.texAddr[0].ui = 0;
- imesa->globalRegMask.s4.texAddr[1].ui = 0;
- imesa->globalRegMask.s4.texBlendCtrl[0].ui = 0;
- imesa->globalRegMask.s4.texBlendCtrl[1].ui = 0;
- imesa->globalRegMask.s4.texXprClr.ui = 0;
- imesa->globalRegMask.s4.texDescr.ui = 0;
-}
-static void savageDDInitState_s3d( savageContextPtr imesa )
-{
-#if 1
- imesa->regs.s3d.destCtrl.ui = 1<<7;
-#endif
-
- imesa->regs.s3d.zBufCtrl.ni.zCmpFunc = CF_Less;
-#if 0
- imesa->regs.s3d.drawCtrl.ni.xyOffsetEn = 1;
-#endif
-
- /* Set DestTexWatermarks_31,30 to 01 always.
- *Has no effect if dest. flush is disabled.
- */
-#if 0
- imesa->regs.s3d.zWatermarks.ui = 0x12000C04;
- imesa->regs.s3d.destTexWatermarks.ui = 0x40200400;
-#else
- /*imesa->regs.s3d.zWatermarks.ui = 0x16001808;*/
- imesa->regs.s3d.zWatermarks.ni.rLow = S3D_ZRLO;
- imesa->regs.s3d.zWatermarks.ni.rHigh = S3D_ZRHI;
- imesa->regs.s3d.zWatermarks.ni.wLow = S3D_ZWLO;
- imesa->regs.s3d.zWatermarks.ni.wHigh = S3D_ZWHI;
- /*imesa->regs.s3d.destTexWatermarks.ui = 0x4f000000;*/
- imesa->regs.s3d.destTexWatermarks.ni.destReadLow = S3D_DRLO;
- imesa->regs.s3d.destTexWatermarks.ni.destReadHigh = S3D_DRHI;
- imesa->regs.s3d.destTexWatermarks.ni.destWriteLow = S3D_DWLO;
- imesa->regs.s3d.destTexWatermarks.ni.destWriteHigh = S3D_DWHI;
- imesa->regs.s3d.destTexWatermarks.ni.texRead = S3D_TR;
- imesa->regs.s3d.destTexWatermarks.ni.destFlush = 1;
-#endif
-
- imesa->regs.s3d.texCtrl.ni.dBias = 0x08;
- imesa->regs.s3d.texCtrl.ni.texXprEn = GL_TRUE;
- /* texXprEn is needed to get alphatest and alpha blending working
- * properly. However, this makes texels with color texXprClr
- * completely transparent in some texture environment modes. I
- * couldn't find a way to disable this. So choose an arbitrary and
- * improbable color. (0 is a bad choice, makes all black texels
- * transparent.) */
- imesa->regs.s3d.texXprClr.ui = 0x26ae26ae;
- /* programm a valid tex address, in case texture state is emitted
- * in wrong order. */
- if (imesa->lastTexHeap == 2 && imesa->savageScreen->textureSize[1]) {
- /* AGP textures available */
- imesa->regs.s3d.texAddr.ui = imesa->savageScreen->textureOffset[1]|3;
- } else {
- /* no AGP textures available, use local */
- imesa->regs.s3d.texAddr.ui = imesa->savageScreen->textureOffset[0]|2;
- }
-
- imesa->regs.s3d.zBufCtrl.ni.drawUpdateEn = GL_TRUE;
- imesa->regs.s3d.zBufCtrl.ni.wrZafterAlphaTst = GL_FALSE;
- imesa->regs.s3d.zBufCtrl.ni.zUpdateEn = GL_TRUE;
-
- imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_One;
- imesa->regs.s3d.drawCtrl.ni.flushPdZbufWrites = GL_TRUE;
- imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
-
- imesa->regs.s3d.drawCtrl.ni.ditherEn = (
- driQueryOptioni(&imesa->optionCache, "color_reduction") ==
- DRI_CONF_COLOR_REDUCTION_DITHER) ? GL_TRUE : GL_FALSE;
- imesa->regs.s3d.drawCtrl.ni.cullMode = BCM_None;
-
- imesa->LcsCullMode = BCM_None;
- imesa->regs.s3d.texDescr.ni.palSize = TPS_256;
-
- /* clear the local registers in the global reg mask */
- imesa->globalRegMask.s3d.texPalAddr.ui = 0;
- imesa->globalRegMask.s3d.texXprClr.ui = 0;
- imesa->globalRegMask.s3d.texAddr.ui = 0;
- imesa->globalRegMask.s3d.texDescr.ui = 0;
- imesa->globalRegMask.s3d.texCtrl.ui = 0;
-
- imesa->globalRegMask.s3d.fogCtrl.ui = 0;
-
- /* drawCtrl is local with some exceptions */
- imesa->globalRegMask.s3d.drawCtrl.ui = 0;
- imesa->globalRegMask.s3d.drawCtrl.ni.cullMode = 0x3;
- imesa->globalRegMask.s3d.drawCtrl.ni.alphaTestCmpFunc = 0x7;
- imesa->globalRegMask.s3d.drawCtrl.ni.alphaTestEn = 0x1;
- imesa->globalRegMask.s3d.drawCtrl.ni.alphaRefVal = 0xff;
-
- /* zBufCtrl is local with some exceptions */
- imesa->globalRegMask.s3d.zBufCtrl.ui = 0;
- imesa->globalRegMask.s3d.zBufCtrl.ni.zCmpFunc = 0x7;
- imesa->globalRegMask.s3d.zBufCtrl.ni.zBufEn = 0x1;
-}
-void savageDDInitState( savageContextPtr imesa ) {
- memset (imesa->regs.ui, 0, SAVAGE_NR_REGS*sizeof(uint32_t));
- memset (imesa->globalRegMask.ui, 0xff, SAVAGE_NR_REGS*sizeof(uint32_t));
- if (imesa->savageScreen->chipset >= S3_SAVAGE4)
- savageDDInitState_s4 (imesa);
- else
- savageDDInitState_s3d (imesa);
-
- /*fprintf(stderr,"DBflag:%d\n",imesa->glCtx->Visual->DBflag);*/
- /* zbufoffset and destctrl have the same position and layout on
- * savage4 and savage3d. */
- if (imesa->glCtx->Visual.doubleBufferMode) {
- imesa->IsDouble = GL_TRUE;
- imesa->toggle = TARGET_BACK;
- imesa->regs.s4.destCtrl.ni.offset =
- imesa->savageScreen->backOffset>>11;
- } else {
- imesa->IsDouble = GL_FALSE;
- imesa->toggle = TARGET_FRONT;
- imesa->regs.s4.destCtrl.ni.offset =
- imesa->savageScreen->frontOffset>>11;
- }
- if(imesa->savageScreen->cpp == 2) {
- imesa->regs.s4.destCtrl.ni.dstPixFmt = 0;
- imesa->regs.s4.destCtrl.ni.dstWidthInTile =
- (imesa->savageScreen->width+63)>>6;
- } else {
- imesa->regs.s4.destCtrl.ni.dstPixFmt = 1;
- imesa->regs.s4.destCtrl.ni.dstWidthInTile =
- (imesa->savageScreen->width+31)>>5;
- }
- imesa->NotFirstFrame = GL_FALSE;
-
- imesa->regs.s4.zBufOffset.ni.offset=imesa->savageScreen->depthOffset>>11;
- if(imesa->savageScreen->zpp == 2) {
- imesa->regs.s4.zBufOffset.ni.zBufWidthInTiles =
- (imesa->savageScreen->width+63)>>6;
- imesa->regs.s4.zBufOffset.ni.zDepthSelect = 0;
- } else {
- imesa->regs.s4.zBufOffset.ni.zBufWidthInTiles =
- (imesa->savageScreen->width+31)>>5;
- imesa->regs.s4.zBufOffset.ni.zDepthSelect = 1;
- }
-
- memcpy (imesa->oldRegs.ui, imesa->regs.ui, SAVAGE_NR_REGS*sizeof(uint32_t));
-
- /* Emit the initial state to the (empty) command buffer. */
- assert (imesa->cmdBuf.write == imesa->cmdBuf.base);
- savageEmitOldState(imesa);
- imesa->cmdBuf.start = imesa->cmdBuf.write;
-}
-
-
-#define INTERESTED (~(NEW_MODELVIEW|NEW_PROJECTION|\
- NEW_TEXTURE_MATRIX|\
- NEW_USER_CLIP|NEW_CLIENT_STATE))
-
-static void savageDDInvalidateState( struct gl_context *ctx, GLuint new_state )
-{
- _swrast_InvalidateState( ctx, new_state );
- _swsetup_InvalidateState( ctx, new_state );
- _vbo_InvalidateState( ctx, new_state );
- _tnl_InvalidateState( ctx, new_state );
- SAVAGE_CONTEXT(ctx)->new_gl_state |= new_state;
-}
-
-
-void savageDDInitStateFuncs(struct gl_context *ctx)
-{
- ctx->Driver.UpdateState = savageDDInvalidateState;
- ctx->Driver.BlendEquationSeparate = savageDDBlendEquationSeparate;
- ctx->Driver.Fogfv = savageDDFogfv;
- ctx->Driver.Scissor = savageDDScissor;
-#if HW_CULL
- ctx->Driver.CullFace = savageDDCullFaceFrontFace;
- ctx->Driver.FrontFace = savageDDCullFaceFrontFace;
-#else
- ctx->Driver.CullFace = 0;
- ctx->Driver.FrontFace = 0;
-#endif /* end #if HW_CULL */
- ctx->Driver.DrawBuffer = savageDDDrawBuffer;
- ctx->Driver.ReadBuffer = savageDDReadBuffer;
- ctx->Driver.ClearColor = savageDDClearColor;
-
- ctx->Driver.DepthRange = savageDepthRange;
- ctx->Driver.Viewport = savageViewport;
- ctx->Driver.RenderMode = savageRenderMode;
-
- if (SAVAGE_CONTEXT( ctx )->savageScreen->chipset >= S3_SAVAGE4) {
- ctx->Driver.Enable = savageDDEnable_s4;
- ctx->Driver.AlphaFunc = savageDDAlphaFunc_s4;
- ctx->Driver.DepthFunc = savageDDDepthFunc_s4;
- ctx->Driver.DepthMask = savageDDDepthMask_s4;
- ctx->Driver.BlendFuncSeparate = savageDDBlendFuncSeparate_s4;
- ctx->Driver.ColorMask = savageDDColorMask_s4;
- ctx->Driver.ShadeModel = savageDDShadeModel_s4;
- ctx->Driver.LightModelfv = savageDDLightModelfv_s4;
- ctx->Driver.StencilFuncSeparate = savageDDStencilFuncSeparate;
- ctx->Driver.StencilMaskSeparate = savageDDStencilMaskSeparate;
- ctx->Driver.StencilOpSeparate = savageDDStencilOpSeparate;
- } else {
- ctx->Driver.Enable = savageDDEnable_s3d;
- ctx->Driver.AlphaFunc = savageDDAlphaFunc_s3d;
- ctx->Driver.DepthFunc = savageDDDepthFunc_s3d;
- ctx->Driver.DepthMask = savageDDDepthMask_s3d;
- ctx->Driver.BlendFuncSeparate = savageDDBlendFuncSeparate_s3d;
- ctx->Driver.ColorMask = savageDDColorMask_s3d;
- ctx->Driver.ShadeModel = savageDDShadeModel_s3d;
- ctx->Driver.LightModelfv = savageDDLightModelfv_s3d;
- ctx->Driver.StencilFuncSeparate = NULL;
- ctx->Driver.StencilMaskSeparate = NULL;
- ctx->Driver.StencilOpSeparate = NULL;
- }
-}
diff --git a/src/mesa/drivers/dri/savage/savagestate.h b/src/mesa/drivers/dri/savage/savagestate.h
deleted file mode 100644
index dca4fd0c01d..00000000000
--- a/src/mesa/drivers/dri/savage/savagestate.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#ifndef _SAVAGE_STATE_H
-#define _SAVAGE_STATE_H
-
-#include "savagecontext.h"
-
-void savageCalcViewport( struct gl_context *ctx );
-void savageEmitOldState( savageContextPtr imesa );
-void savageEmitChangedState( savageContextPtr imesa );
-
-extern void savageDDUpdateHwState( struct gl_context *ctx );
-extern void savageDDInitState( savageContextPtr imesa );
-extern void savageDDInitStateFuncs( struct gl_context *ctx );
-extern void savageDDRenderStart(struct gl_context *ctx);
-extern void savageDDRenderEnd(struct gl_context *ctx);
-
-#endif
diff --git a/src/mesa/drivers/dri/savage/savagetex.c b/src/mesa/drivers/dri/savage/savagetex.c
deleted file mode 100644
index 9486c12c158..00000000000
--- a/src/mesa/drivers/dri/savage/savagetex.c
+++ /dev/null
@@ -1,2123 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#include "main/context.h"
-#include "main/mm.h"
-#include "main/macros.h"
-#include "main/texstore.h"
-#include "main/texobj.h"
-#include "main/colormac.h"
-#include "main/simple_list.h"
-#include "main/enums.h"
-
-#include "savagecontext.h"
-#include "savagetex.h"
-#include "savagetris.h"
-#include "savageioctl.h"
-#include "savage_bci.h"
-
-#include "xmlpool.h"
-
-#define TILE_INDEX_DXT1 0
-#define TILE_INDEX_8 1
-#define TILE_INDEX_16 2
-#define TILE_INDEX_DXTn 3
-#define TILE_INDEX_32 4
-
-/* On Savage4 the texure LOD-bias needs an offset of ~ 0.3 to get
- * somewhere close to software rendering.
- */
-#define SAVAGE4_LOD_OFFSET 10
-
-/* Tile info for S3TC formats counts in 4x4 blocks instead of texels.
- * In DXT1 each block is encoded in 64 bits. In DXT3 and 5 each block is
- * encoded in 128 bits. */
-
-/* Size 1, 2 and 4 images are packed into the last subtile. Each image
- * is repeated to fill a 4x4 pixel area. The figure below shows the
- * layout of those 4x4 pixel areas in the 8x8 subtile.
- *
- * 4 2
- * x 1
- *
- * Yuck! 8-bit texture formats use 4x8 subtiles. See below.
- */
-static const savageTileInfo tileInfo_pro[5] = {
- {16, 16, 16, 8, 1, 2, {0x18, 0x10}}, /* DXT1 */
- {64, 32, 16, 4, 4, 8, {0x30, 0x20}}, /* 8-bit */
- {64, 16, 8, 2, 8, 8, {0x48, 0x08}}, /* 16-bit */
- {16, 8, 16, 4, 1, 2, {0x30, 0x20}}, /* DXT3, DXT5 */
- {32, 16, 4, 2, 8, 8, {0x90, 0x10}}, /* 32-bit */
-};
-
-/* Size 1, 2 and 4 images are packed into the last two subtiles. Each
- * image is repeated to fill a 4x4 pixel area. The figures below show
- * the layout of those 4x4 pixel areas in the two 4x8 subtiles.
- *
- * second last subtile: 4 last subtile: 2
- * x 1
- */
-static const savageTileInfo tileInfo_s3d_s4[5] = {
- {16, 16, 16, 8, 1, 2, {0x18, 0x10}}, /* DXT1 */
- {64, 32, 16, 4, 4, 8, {0x30, 0x20}}, /* 8-bit */
- {64, 16, 16, 2, 4, 8, {0x60, 0x40}}, /* 16-bit */
- {16, 8, 16, 4, 1, 2, {0x30, 0x20}}, /* DXT3, DXT5 */
- {32, 16, 8, 2, 4, 8, {0xc0, 0x80}}, /* 32-bit */
-};
-
-/** \brief Template for subtile uploads.
- * \param h height in pixels
- * \param w width in bytes
- */
-#define SUBTILE_FUNC(w,h) \
-static INLINE GLubyte *savageUploadSubtile_##w##x##h \
-(GLubyte *dest, GLubyte *src, GLuint srcStride) \
-{ \
- GLuint y; \
- for (y = 0; y < h; ++y) { \
- memcpy (dest, src, w); \
- src += srcStride; \
- dest += w; \
- } \
- return dest; \
-}
-
-SUBTILE_FUNC(2, 8) /* 4 bits per pixel, 4 pixels wide */
-SUBTILE_FUNC(4, 8)
-SUBTILE_FUNC(8, 8)
-SUBTILE_FUNC(16, 8)
-SUBTILE_FUNC(32, 8) /* 4 bytes per pixel, 8 pixels wide */
-
-SUBTILE_FUNC(8, 2) /* DXT1 */
-SUBTILE_FUNC(16, 2) /* DXT3 and DXT5 */
-
-/** \brief Upload a complete tile from src (srcStride) to dest
- *
- * \param tileInfo Pointer to tiling information
- * \param wInSub Width of source/dest image in subtiles
- * \param hInSub Height of source/dest image in subtiles
- * \param bpp Bytes per pixel
- * \param src Pointer to source data
- * \param srcStride Byte stride of rows in the source data
- * \param dest Pointer to destination
- *
- * Writes linearly to the destination memory in order to exploit write
- * combining.
- *
- * For a complete tile wInSub and hInSub are set to the same values as
- * in tileInfo. If the source image is smaller than a whole tile in
- * one or both dimensions then they are set to the values of the
- * source image. This only works as long as the source image is bigger
- * than 8x8 pixels.
- */
-static void savageUploadTile (const savageTileInfo *tileInfo,
- GLuint wInSub, GLuint hInSub, GLuint bpp,
- GLubyte *src, GLuint srcStride, GLubyte *dest) {
- GLuint subStride = tileInfo->subWidth * bpp;
- GLubyte *srcSRow = src, *srcSTile = src;
- GLubyte *(*subtileFunc) (GLubyte *, GLubyte *, GLuint);
- GLuint sx, sy;
- switch (subStride) {
- case 2: subtileFunc = savageUploadSubtile_2x8; break;
- case 4: subtileFunc = savageUploadSubtile_4x8; break;
- case 8: subtileFunc = tileInfo->subHeight == 8 ?
- savageUploadSubtile_8x8 : savageUploadSubtile_8x2; break;
- case 16: subtileFunc = tileInfo->subHeight == 8 ?
- savageUploadSubtile_16x8 : savageUploadSubtile_16x2; break;
- case 32: subtileFunc = savageUploadSubtile_32x8; break;
- default: assert(0);
- }
- for (sy = 0; sy < hInSub; ++sy) {
- srcSTile = srcSRow;
- for (sx = 0; sx < wInSub; ++sx) {
- src = srcSTile;
- dest = subtileFunc (dest, src, srcStride);
- srcSTile += subStride;
- }
- srcSRow += srcStride * tileInfo->subHeight;
- }
-}
-
-/** \brief Upload a image that is smaller than 8 pixels in either dimension.
- *
- * \param tileInfo Pointer to tiling information
- * \param width Width of the image
- * \param height Height of the image
- * \param bpp Bytes per pixel
- * \param src Pointer to source data
- * \param dest Pointer to destination
- *
- * This function handles all the special cases that need to be taken
- * care off. The caller may need to call this function multiple times
- * with the destination offset in different ways since small texture
- * images must be repeated in order to fill a whole tile (or 4x4 for
- * the last 3 levels).
- *
- * FIXME: Repeating inside this function would be more efficient.
- */
-static void savageUploadTiny (const savageTileInfo *tileInfo,
- GLuint pixWidth, GLuint pixHeight,
- GLuint width, GLuint height, GLuint bpp,
- GLubyte *src, GLubyte *dest) {
- GLuint size = MAX2(pixWidth, pixHeight);
-
- if (width > tileInfo->subWidth) { /* assert: height <= subtile height */
- GLuint wInSub = width / tileInfo->subWidth;
- GLuint srcStride = width * bpp;
- GLuint subStride = tileInfo->subWidth * bpp;
- GLuint subSkip = (tileInfo->subHeight - height) * subStride;
- GLubyte *srcSTile = src;
- GLuint sx, y;
- for (sx = 0; sx < wInSub; ++sx) {
- src = srcSTile;
- for (y = 0; y < height; ++y) {
- memcpy (dest, src, subStride);
- src += srcStride;
- dest += subStride;
- }
- dest += subSkip;
- srcSTile += subStride;
- }
- } else if (size > 4) { /* a tile or less wide, except the last 3 levels */
- GLuint srcStride = width * bpp;
- GLuint subStride = tileInfo->subWidth * bpp;
- /* if the subtile width is 4 we have to skip every other subtile */
- GLuint subSkip = tileInfo->subWidth <= 4 ?
- subStride * tileInfo->subHeight : 0;
- GLuint skipRemainder = tileInfo->subHeight - 1;
- GLuint y;
- for (y = 0; y < height; ++y) {
- memcpy (dest, src, srcStride);
- src += srcStride;
- dest += subStride;
- if ((y & skipRemainder) == skipRemainder)
- dest += subSkip;
- }
- } else { /* the last 3 mipmap levels */
- GLuint offset = (size <= 2 ? tileInfo->tinyOffset[size-1] : 0);
- GLuint subStride = tileInfo->subWidth * bpp;
- GLuint y;
- dest += offset;
- for (y = 0; y < height; ++y) {
- memcpy (dest, src, bpp*width);
- src += width * bpp;
- dest += subStride;
- }
- }
-}
-
-/** \brief Upload an image from mesa's internal copy.
- */
-static void savageUploadTexLevel( savageTexObjPtr t, int level )
-{
- const struct gl_texture_image *image = t->base.tObj->Image[0][level];
- const savageTileInfo *tileInfo = t->tileInfo;
- GLuint pixWidth = image->Width2, pixHeight = image->Height2;
- GLuint bpp = t->texelBytes;
- GLuint width, height;
-
- /* FIXME: Need triangle (rather than pixel) fallbacks to simulate
- * this using normal textured triangles.
- *
- * DO THIS IN DRIVER STATE MANAGMENT, not hardware state.
- */
- if(image->Border != 0)
- fprintf (stderr, "Not supported texture border %d.\n",
- (int) image->Border);
-
- if (t->hwFormat == TFT_S3TC4A4Bit || t->hwFormat == TFT_S3TC4CA4Bit ||
- t->hwFormat == TFT_S3TC4Bit) {
- width = (pixWidth+3) / 4;
- height = (pixHeight+3) / 4;
- } else {
- width = pixWidth;
- height = pixHeight;
- }
-
- if (pixWidth >= 8 && pixHeight >= 8) {
- GLuint *dirtyPtr = t->image[level].dirtyTiles;
- GLuint dirtyMask = 1;
-
- if (width >= tileInfo->width && height >= tileInfo->height) {
- GLuint wInTiles = width / tileInfo->width;
- GLuint hInTiles = height / tileInfo->height;
- GLubyte *srcTRow = image->Data, *src;
- GLubyte *dest = (GLubyte *)(t->bufAddr + t->image[level].offset);
- GLuint x, y;
- for (y = 0; y < hInTiles; ++y) {
- src = srcTRow;
- for (x = 0; x < wInTiles; ++x) {
- if (*dirtyPtr & dirtyMask) {
- savageUploadTile (tileInfo,
- tileInfo->wInSub, tileInfo->hInSub,
- bpp, src, width * bpp, dest);
- }
- src += tileInfo->width * bpp;
- dest += 2048; /* tile size is always 2k */
- if (dirtyMask == 1<<31) {
- dirtyMask = 1;
- dirtyPtr++;
- } else
- dirtyMask <<= 1;
- }
- srcTRow += width * tileInfo->height * bpp;
- }
- } else if (width >= tileInfo->width) {
- GLuint wInTiles = width / tileInfo->width;
- GLubyte *src = image->Data;
- GLubyte *dest = (GLubyte *)(t->bufAddr + t->image[level].offset);
- GLuint tileStride = tileInfo->width * bpp * height;
- savageContextPtr imesa = (savageContextPtr)t->base.heap->driverContext;
- GLuint x;
- /* Savage3D-based chips seem so use a constant tile stride
- * of 2048 for vertically incomplete tiles, but only if
- * the color depth is 32bpp. Nobody said this was supposed
- * to be logical!
- */
- if (bpp == 4 && imesa->savageScreen->chipset < S3_SAVAGE4)
- tileStride = 2048;
- for (x = 0; x < wInTiles; ++x) {
- if (*dirtyPtr & dirtyMask) {
- savageUploadTile (tileInfo,
- tileInfo->wInSub,
- height / tileInfo->subHeight,
- bpp, src, width * bpp, dest);
- }
- src += tileInfo->width * bpp;
- dest += tileStride;
- if (dirtyMask == 1<<31) {
- dirtyMask = 1;
- dirtyPtr++;
- } else
- dirtyMask <<= 1;
- }
- } else {
- savageUploadTile (tileInfo, width / tileInfo->subWidth,
- height / tileInfo->subHeight, bpp,
- image->Data, width * bpp,
- (GLubyte *)(t->bufAddr+t->image[level].offset));
- }
- } else {
- GLuint minHeight, minWidth, hRepeat, vRepeat, x, y;
- if (t->hwFormat == TFT_S3TC4A4Bit || t->hwFormat == TFT_S3TC4CA4Bit ||
- t->hwFormat == TFT_S3TC4Bit)
- minWidth = minHeight = 1;
- else
- minWidth = minHeight = 4;
- if (width > minWidth || height > minHeight) {
- minWidth = tileInfo->subWidth;
- minHeight = tileInfo->subHeight;
- }
- hRepeat = width >= minWidth ? 1 : minWidth / width;
- vRepeat = height >= minHeight ? 1 : minHeight / height;
- for (y = 0; y < vRepeat; ++y) {
- GLuint offset = y * tileInfo->subWidth*height * bpp;
- for (x = 0; x < hRepeat; ++x) {
- savageUploadTiny (tileInfo, pixWidth, pixHeight,
- width, height, bpp, image->Data,
- (GLubyte *)(t->bufAddr +
- t->image[level].offset+offset));
- offset += width * bpp;
- }
- }
- }
-}
-
-/** \brief Compute the destination size of a texture image
- */
-static GLuint savageTexImageSize (GLuint width, GLuint height, GLuint bpp) {
- /* full subtiles */
- if (width >= 8 && height >= 8)
- return width * height * bpp;
- /* special case for the last three mipmap levels: the hardware computes
- * the offset internally */
- else if (width <= 4 && height <= 4)
- return 0;
- /* partially filled sub tiles waste memory
- * on Savage3D and Savage4 with subtile width 4 every other subtile is
- * skipped if width < 8 so we can assume a uniform subtile width of 8 */
- else if (width >= 8)
- return width * 8 * bpp;
- else if (height >= 8)
- return 8 * height * bpp;
- else
- return 64 * bpp;
-}
-
-/** \brief Compute the destination size of a compressed texture image
- */
-static GLuint savageCompressedTexImageSize (GLuint width, GLuint height,
- GLuint bpp) {
- width = (width+3) / 4;
- height = (height+3) / 4;
- /* full subtiles */
- if (width >= 2 && height >= 2)
- return width * height * bpp;
- /* special case for the last three mipmap levels: the hardware computes
- * the offset internally */
- else if (width <= 1 && height <= 1)
- return 0;
- /* partially filled sub tiles waste memory
- * on Savage3D and Savage4 with subtile width 4 every other subtile is
- * skipped if width < 8 so we can assume a uniform subtile width of 8 */
- else if (width >= 2)
- return width * 2 * bpp;
- else if (height >= 2)
- return 2 * height * bpp;
- else
- return 4 * bpp;
-}
-
-/** \brief Compute the number of (partial) tiles of a texture image
- */
-static GLuint savageTexImageTiles (GLuint width, GLuint height,
- const savageTileInfo *tileInfo)
-{
- return (width + tileInfo->width - 1) / tileInfo->width *
- (height + tileInfo->height - 1) / tileInfo->height;
-}
-
-/** \brief Mark dirty tiles
- *
- * Some care must be taken because tileInfo may not be set or not
- * up-to-date. So we check if tileInfo is initialized and if the number
- * of tiles in the bit vector matches the number of tiles computed from
- * the current tileInfo.
- */
-static void savageMarkDirtyTiles (savageTexObjPtr t, GLuint level,
- GLuint totalWidth, GLuint totalHeight,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height)
-{
- GLuint wInTiles, hInTiles;
- GLuint x0, y0, x1, y1;
- GLuint x, y;
- if (!t->tileInfo)
- return;
- wInTiles = (totalWidth + t->tileInfo->width - 1) / t->tileInfo->width;
- hInTiles = (totalHeight + t->tileInfo->height - 1) / t->tileInfo->height;
- if (wInTiles * hInTiles != t->image[level].nTiles)
- return;
-
- x0 = xoffset / t->tileInfo->width;
- y0 = yoffset / t->tileInfo->height;
- x1 = (xoffset + width - 1) / t->tileInfo->width;
- y1 = (yoffset + height - 1) / t->tileInfo->height;
-
- for (y = y0; y <= y1; ++y) {
- GLuint *ptr = t->image[level].dirtyTiles + (y * wInTiles + x0) / 32;
- GLuint mask = 1 << (y * wInTiles + x0) % 32;
- for (x = x0; x <= x1; ++x) {
- *ptr |= mask;
- if (mask == (1<<31)) {
- ptr++;
- mask = 1;
- } else {
- mask <<= 1;
- }
- }
- }
-}
-
-/** \brief Mark all tiles as dirty
- */
-static void savageMarkAllTiles (savageTexObjPtr t, GLuint level)
-{
- GLuint words = (t->image[level].nTiles + 31) / 32;
- if (words)
- memset(t->image[level].dirtyTiles, ~0, words*sizeof(GLuint));
-}
-
-
-static void savageSetTexWrapping(savageTexObjPtr tex, GLenum s, GLenum t)
-{
- tex->setup.sWrapMode = s;
- tex->setup.tWrapMode = t;
-}
-
-static void savageSetTexFilter(savageTexObjPtr t, GLenum minf, GLenum magf)
-{
- t->setup.minFilter = minf;
- t->setup.magFilter = magf;
-}
-
-
-/* Need a fallback ?
- */
-static void savageSetTexBorderColor(savageTexObjPtr t, const GLfloat color[4])
-{
-/* t->Setup[SAVAGE_TEXREG_TEXBORDERCOL] = */
- /*t->setup.borderColor = SAVAGEPACKCOLOR8888(color[0],color[1],color[2],color[3]); */
-}
-
-
-
-static savageTexObjPtr
-savageAllocTexObj( struct gl_texture_object *texObj )
-{
- savageTexObjPtr t;
-
- t = (savageTexObjPtr) calloc(1,sizeof(*t));
- texObj->DriverData = t;
- if ( t != NULL ) {
- GLuint i;
-
- /* Initialize non-image-dependent parts of the state:
- */
- t->base.tObj = texObj;
- t->base.dirty_images[0] = 0;
- t->dirtySubImages = 0;
- t->tileInfo = NULL;
-
- /* Initialize dirty tiles bit vectors
- */
- for (i = 0; i < SAVAGE_TEX_MAXLEVELS; ++i)
- t->image[i].nTiles = 0;
-
- /* FIXME Something here to set initial values for other parts of
- * FIXME t->setup?
- */
-
- make_empty_list( &t->base );
-
- savageSetTexWrapping(t,texObj->Sampler.WrapS,texObj->Sampler.WrapT);
- savageSetTexFilter(t,texObj->Sampler.MinFilter,texObj->Sampler.MagFilter);
- savageSetTexBorderColor(t,texObj->Sampler.BorderColor.f);
- }
-
- return t;
-}
-
-/* Mesa texture formats for alpha-images on Savage3D/IX/MX
- *
- * Promoting texture images to ARGB888 or ARGB4444 doesn't work
- * because we can't tell the hardware to ignore the color components
- * and only use the alpha component. So we define our own texture
- * formats that promote to ARGB8888 or ARGB4444 and set the color
- * components to white. This way we get the correct result.
- */
-
-#if 0
-/* Using MESA_FORMAT_RGBA8888 to store alpha-only textures should
- * work but is space inefficient.
- */
-
-static GLboolean
-_savage_texstore_a1114444(TEXSTORE_PARAMS);
-
-static GLboolean
-_savage_texstore_a1118888(TEXSTORE_PARAMS);
-
-static struct gl_texture_format _savage_texformat_a1114444 = {
- MESA_FORMAT_ARGB4444, /* MesaFormat */
- GL_RGBA, /* BaseFormat */
- GL_UNSIGNED_NORMALIZED_ARB, /* DataType */
- 4, /* RedBits */
- 4, /* GreenBits */
- 4, /* BlueBits */
- 4, /* AlphaBits */
- 0, /* LuminanceBits */
- 0, /* IntensityBits */
- 0, /* IndexBits */
- 0, /* DepthBits */
- 0, /* StencilBits */
- 2, /* TexelBytes */
- _savage_texstore_a1114444, /* StoreTexImageFunc */
- NULL, NULL, NULL, NULL, NULL, NULL /* FetchTexel* filled in by
- * savageDDInitTextureFuncs */
-};
-static struct gl_texture_format _savage_texformat_a1118888 = {
- MESA_FORMAT_ARGB8888, /* MesaFormat */
- GL_RGBA, /* BaseFormat */
- GL_UNSIGNED_NORMALIZED_ARB, /* DataType */
- 8, /* RedBits */
- 8, /* GreenBits */
- 8, /* BlueBits */
- 8, /* AlphaBits */
- 0, /* LuminanceBits */
- 0, /* IntensityBits */
- 0, /* IndexBits */
- 0, /* DepthBits */
- 0, /* StencilBits */
- 4, /* TexelBytes */
- _savage_texstore_a1118888, /* StoreTexImageFunc */
- NULL, NULL, NULL, NULL, NULL, NULL /* FetchTexel* filled in by
- * savageDDInitTextureFuncs */
-};
-
-
-static GLboolean
-_savage_texstore_a1114444(TEXSTORE_PARAMS)
-{
- const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims,
- baseInternalFormat,
- baseInternalFormat,
- srcWidth, srcHeight, srcDepth,
- srcFormat, srcType, srcAddr,
- srcPacking);
- const GLchan *src = tempImage;
- GLint img, row, col;
-
- ASSERT(dstFormat == &_savage_texformat_a1114444);
- ASSERT(baseInternalFormat == GL_ALPHA);
-
- if (!tempImage)
- return GL_FALSE;
- for (img = 0; img < srcDepth; img++) {
- GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
- GLubyte *dstRow = (GLubyte *) dstAddr
- + dstImageOffsets[dstZoffset + img] * texelBytes
- + dstYoffset * dstRowStride
- + dstXoffset * texelBytes;
- for (row = 0; row < srcHeight; row++) {
- GLushort *dstUI = (GLushort *) dstRow;
- for (col = 0; col < srcWidth; col++) {
- dstUI[col] = PACK_COLOR_4444( CHAN_TO_UBYTE(src[0]),
- 255, 255, 255 );
- src += 1;
- }
- dstRow += dstRowStride;
- }
- }
- free((void *) tempImage);
-
- return GL_TRUE;
-}
-
-
-static GLboolean
-_savage_texstore_a1118888(TEXSTORE_PARAMS)
-{
- const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims,
- baseInternalFormat,
- baseInternalFormat,
- srcWidth, srcHeight, srcDepth,
- srcFormat, srcType, srcAddr,
- srcPacking);
- const GLchan *src = tempImage;
- GLint img, row, col;
-
- ASSERT(dstFormat == &_savage_texformat_a1118888);
- ASSERT(baseInternalFormat == GL_ALPHA);
-
- if (!tempImage)
- return GL_FALSE;
- for (img = 0; img < srcDepth; img++) {
- GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
- GLubyte *dstRow = (GLubyte *) dstAddr
- + dstImageOffsets[dstZoffset + img] * texelBytes
- + dstYoffset * dstRowStride
- + dstXoffset * texelBytes;
- for (row = 0; row < srcHeight; row++) {
- GLuint *dstUI = (GLuint *) dstRow;
- for (col = 0; col < srcWidth; col++) {
- dstUI[col] = PACK_COLOR_8888( CHAN_TO_UBYTE(src[0]),
- 255, 255, 255 );
- src += 1;
- }
- dstRow += dstRowStride;
- }
- }
- free((void *) tempImage);
-
- return GL_TRUE;
-}
-#endif
-
-
-/* Called by the _mesa_store_teximage[123]d() functions. */
-static gl_format
-savageChooseTextureFormat( struct gl_context *ctx, GLint internalFormat,
- GLenum format, GLenum type )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- const GLboolean do32bpt =
- ( imesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_32 );
- const GLboolean force16bpt =
- ( imesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_FORCE_16 );
- const GLboolean isSavage4 = (imesa->savageScreen->chipset >= S3_SAVAGE4);
- (void) format;
-
- switch ( internalFormat ) {
- case 4:
- case GL_RGBA:
- case GL_COMPRESSED_RGBA:
- switch ( type ) {
- case GL_UNSIGNED_INT_10_10_10_2:
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_4_4_4_4_REV:
- return MESA_FORMAT_ARGB4444;
- case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_UNSIGNED_SHORT_1_5_5_5_REV:
- return MESA_FORMAT_ARGB1555;
- default:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
- }
-
- case 3:
- case GL_RGB:
- case GL_COMPRESSED_RGB:
- switch ( type ) {
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_4_4_4_4_REV:
- return MESA_FORMAT_ARGB4444;
- case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_UNSIGNED_SHORT_1_5_5_5_REV:
- return MESA_FORMAT_ARGB1555;
- case GL_UNSIGNED_SHORT_5_6_5:
- case GL_UNSIGNED_SHORT_5_6_5_REV:
- return MESA_FORMAT_RGB565;
- default:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
- }
-
- case GL_RGBA8:
- case GL_RGBA12:
- case GL_RGBA16:
- return !force16bpt ?
- MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
-
- case GL_RGB10_A2:
- return !force16bpt ?
- MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
-
- case GL_RGBA4:
- case GL_RGBA2:
- return MESA_FORMAT_ARGB4444;
-
- case GL_RGB5_A1:
- return MESA_FORMAT_ARGB1555;
-
- case GL_RGB8:
- case GL_RGB10:
- case GL_RGB12:
- case GL_RGB16:
- return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
-
- case GL_RGB5:
- case GL_RGB4:
- case GL_R3_G3_B2:
- return MESA_FORMAT_RGB565;
-
- case GL_ALPHA:
- case GL_COMPRESSED_ALPHA:
-#if 0
- return isSavage4 ? MESA_FORMAT_a8 : (
- do32bpt ? &_savage_texformat_a1118888 : &_savage_texformat_a1114444);
-#else
- if (isSavage4)
- return MESA_FORMAT_A8;
- else if (do32bpt)
- return MESA_FORMAT_ARGB8888;
- else
- return MESA_FORMAT_ARGB4444;
-#endif
- case GL_ALPHA4:
-#if 0
- return isSavage4 ? MESA_FORMAT_a8 : &_savage_texformat_a1114444;
-#else
- if (isSavage4)
- return MESA_FORMAT_A8;
- else
- return MESA_FORMAT_ARGB4444;
-#endif
- case GL_ALPHA8:
- case GL_ALPHA12:
- case GL_ALPHA16:
-#if 0
- return isSavage4 ? MESA_FORMAT_a8 : (
- !force16bpt ? &_savage_texformat_a1118888 : &_savage_texformat_a1114444);
-#else
- if (isSavage4)
- return MESA_FORMAT_A8;
- else if (force16bpt)
- return MESA_FORMAT_ARGB4444;
- else
- return MESA_FORMAT_ARGB8888;
-#endif
- case 1:
- case GL_LUMINANCE:
- case GL_COMPRESSED_LUMINANCE:
- /* no alpha, but use argb1555 in 16bit case to get pure grey values */
- return isSavage4 ? MESA_FORMAT_L8 : (
- do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555);
- case GL_LUMINANCE4:
- return isSavage4 ? MESA_FORMAT_L8 : MESA_FORMAT_ARGB1555;
- case GL_LUMINANCE8:
- case GL_LUMINANCE12:
- case GL_LUMINANCE16:
- return isSavage4 ? MESA_FORMAT_L8 : (
- !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555);
-
- case 2:
- case GL_LUMINANCE_ALPHA:
- case GL_COMPRESSED_LUMINANCE_ALPHA:
- /* Savage4 has a al44 texture format. But it's not supported by Mesa. */
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
- case GL_LUMINANCE4_ALPHA4:
- case GL_LUMINANCE6_ALPHA2:
- return MESA_FORMAT_ARGB4444;
- case GL_LUMINANCE8_ALPHA8:
- case GL_LUMINANCE12_ALPHA4:
- case GL_LUMINANCE12_ALPHA12:
- case GL_LUMINANCE16_ALPHA16:
- return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
-#if 0
- /* TFT_I8 produces garbage on ProSavageDDR and subsequent texture
- * disable keeps rendering garbage. Disabled for now. */
- case GL_INTENSITY:
- case GL_COMPRESSED_INTENSITY:
- return isSavage4 ? MESA_FORMAT_i8 : (
- do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444);
- case GL_INTENSITY4:
- return isSavage4 ? MESA_FORMAT_i8 : MESA_FORMAT_ARGB4444;
- case GL_INTENSITY8:
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- return isSavage4 ? MESA_FORMAT_i8 : (
- !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444);
-#else
- case GL_INTENSITY:
- case GL_COMPRESSED_INTENSITY:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
- case GL_INTENSITY4:
- return MESA_FORMAT_ARGB4444;
- case GL_INTENSITY8:
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
-#endif
-
- case GL_RGB_S3TC:
- case GL_RGB4_S3TC:
- case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
- return MESA_FORMAT_RGB_DXT1;
- case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
- return MESA_FORMAT_RGBA_DXT1;
-
- case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
- return MESA_FORMAT_RGBA_DXT3;
-
- case GL_RGBA_S3TC:
- case GL_RGBA4_S3TC:
- if (!isSavage4)
- /* Not the best choice but Savage3D/MX/IX don't support DXT3 or DXT5. */
- return MESA_FORMAT_RGBA_DXT1;
- /* fall through */
- case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
- return MESA_FORMAT_RGBA_DXT5;
-
-/*
- case GL_COLOR_INDEX:
- case GL_COLOR_INDEX1_EXT:
- case GL_COLOR_INDEX2_EXT:
- case GL_COLOR_INDEX4_EXT:
- case GL_COLOR_INDEX8_EXT:
- case GL_COLOR_INDEX12_EXT:
- case GL_COLOR_INDEX16_EXT:
- return &_mesa_texformat_ci8;
-*/
- default:
- _mesa_problem(ctx, "unexpected texture format in %s", __FUNCTION__);
- return MESA_FORMAT_NONE;
- }
-}
-
-static void savageSetTexImages( savageContextPtr imesa,
- const struct gl_texture_object *tObj )
-{
- savageTexObjPtr t = (savageTexObjPtr) tObj->DriverData;
- struct gl_texture_image *image = tObj->Image[0][tObj->BaseLevel];
- GLuint offset, i, textureFormat, tileIndex, size;
- GLint firstLevel, lastLevel;
-
- assert(t);
- assert(image);
-
- switch (image->TexFormat) {
- case MESA_FORMAT_ARGB8888:
- textureFormat = TFT_ARGB8888;
- t->texelBytes = tileIndex = 4;
- break;
- case MESA_FORMAT_ARGB1555:
- textureFormat = TFT_ARGB1555;
- t->texelBytes = tileIndex = 2;
- break;
- case MESA_FORMAT_ARGB4444:
- textureFormat = TFT_ARGB4444;
- t->texelBytes = tileIndex = 2;
- break;
- case MESA_FORMAT_RGB565:
- textureFormat = TFT_RGB565;
- t->texelBytes = tileIndex = 2;
- break;
- case MESA_FORMAT_L8:
- textureFormat = TFT_L8;
- t->texelBytes = tileIndex = 1;
- break;
- case MESA_FORMAT_I8:
- textureFormat = TFT_I8;
- t->texelBytes = tileIndex = 1;
- break;
- case MESA_FORMAT_A8:
- textureFormat = TFT_A8;
- t->texelBytes = tileIndex = 1;
- break;
- case MESA_FORMAT_RGB_DXT1:
- textureFormat = TFT_S3TC4Bit;
- tileIndex = TILE_INDEX_DXT1;
- t->texelBytes = 8;
- break;
- case MESA_FORMAT_RGBA_DXT1:
- textureFormat = TFT_S3TC4Bit;
- tileIndex = TILE_INDEX_DXT1;
- t->texelBytes = 8;
- break;
- case MESA_FORMAT_RGBA_DXT3:
- textureFormat = TFT_S3TC4A4Bit;
- tileIndex = TILE_INDEX_DXTn;
- t->texelBytes = 16;
- break;
- case MESA_FORMAT_RGBA_DXT5:
- textureFormat = TFT_S3TC4CA4Bit;
- tileIndex = TILE_INDEX_DXTn;
- t->texelBytes = 16;
- break;
- default:
- _mesa_problem(imesa->glCtx, "Bad texture format in %s", __FUNCTION__);
- return;
- }
- t->hwFormat = textureFormat;
-
- /* Select tiling format depending on the chipset and texture format */
- if (imesa->savageScreen->chipset <= S3_SAVAGE4)
- t->tileInfo = &tileInfo_s3d_s4[tileIndex];
- else
- t->tileInfo = &tileInfo_pro[tileIndex];
-
- /* Compute which mipmap levels we really want to send to the hardware.
- */
- driCalculateTextureFirstLastLevel( &t->base );
- firstLevel = t->base.firstLevel;
- lastLevel = t->base.lastLevel;
-
- /* Figure out the size now (and count the levels). Upload won't be
- * done until later. If the number of tiles changes, it means that
- * this function is called for the first time on this tex object or
- * the image or the destination color format changed. So all tiles
- * are marked as dirty.
- */
- offset = 0;
- size = 1;
- for ( i = firstLevel ; i <= lastLevel && tObj->Image[0][i] ; i++ ) {
- GLuint nTiles;
- nTiles = savageTexImageTiles (image->Width2, image->Height2, t->tileInfo);
- if (t->image[i].nTiles != nTiles) {
- GLuint words = (nTiles + 31) / 32;
- if (t->image[i].nTiles != 0) {
- free(t->image[i].dirtyTiles);
- }
- t->image[i].dirtyTiles = malloc(words*sizeof(GLuint));
- memset(t->image[i].dirtyTiles, ~0, words*sizeof(GLuint));
- }
- t->image[i].nTiles = nTiles;
-
- t->image[i].offset = offset;
-
- image = tObj->Image[0][i];
- if (t->texelBytes >= 8)
- size = savageCompressedTexImageSize (image->Width2, image->Height2,
- t->texelBytes);
- else
- size = savageTexImageSize (image->Width2, image->Height2,
- t->texelBytes);
- offset += size;
- }
-
- t->base.lastLevel = i-1;
- t->base.totalSize = offset;
- /* the last three mipmap levels don't add to the offset. They are packed
- * into 64 pixels. */
- if (size == 0)
- t->base.totalSize += (t->texelBytes >= 8 ? 4 : 64) * t->texelBytes;
- /* 2k-aligned (really needed?) */
- t->base.totalSize = (t->base.totalSize + 2047UL) & ~2047UL;
-}
-
-void savageDestroyTexObj(savageContextPtr imesa, savageTexObjPtr t)
-{
- GLuint i;
-
- /* Free dirty tiles bit vectors */
- for (i = 0; i < SAVAGE_TEX_MAXLEVELS; ++i) {
- if (t->image[i].nTiles)
- free (t->image[i].dirtyTiles);
- }
-
- /* See if it was the driver's current object.
- */
- if ( imesa != NULL )
- {
- for ( i = 0 ; i < imesa->glCtx->Const.MaxTextureUnits ; i++ )
- {
- if ( &t->base == imesa->CurrentTexObj[ i ] ) {
- assert( t->base.bound & (1 << i) );
- imesa->CurrentTexObj[ i ] = NULL;
- }
- }
- }
-}
-
-/* Upload a texture's images to one of the texture heaps. May have to
- * eject our own and/or other client's texture objects to make room
- * for the upload.
- */
-static void savageUploadTexImages( savageContextPtr imesa, savageTexObjPtr t )
-{
- const GLint numLevels = t->base.lastLevel - t->base.firstLevel + 1;
- GLuint i;
-
- assert(t);
-
- LOCK_HARDWARE(imesa);
-
- /* Do we need to eject LRU texture objects?
- */
- if (!t->base.memBlock) {
- GLint heap;
- GLuint ofs;
-
- heap = driAllocateTexture(imesa->textureHeaps, imesa->lastTexHeap,
- (driTextureObject *)t);
- if (heap == -1) {
- UNLOCK_HARDWARE(imesa);
- return;
- }
-
- assert(t->base.memBlock);
- ofs = t->base.memBlock->ofs;
- t->setup.physAddr = imesa->savageScreen->textureOffset[heap] + ofs;
- t->bufAddr = (GLubyte *)imesa->savageScreen->texVirtual[heap] + ofs;
- imesa->dirty |= SAVAGE_UPLOAD_GLOBAL; /* FIXME: really needed? */
- }
-
- /* Let the world know we've used this memory recently.
- */
- driUpdateTextureLRU( &t->base );
- UNLOCK_HARDWARE(imesa);
-
- if (t->base.dirty_images[0] || t->dirtySubImages) {
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_TEX)
- fprintf(stderr, "Texture upload: |");
-
- /* Heap timestamps are only reliable with Savage DRM 2.3.x or
- * later. Earlier versions had only 16 bit time stamps which
- * would wrap too frequently. */
- if (imesa->savageScreen->driScrnPriv->drm_version.minor >= 3) {
- unsigned int heap = t->base.heap->heapId;
- LOCK_HARDWARE(imesa);
- savageWaitEvent (imesa, imesa->textureHeaps[heap]->timestamp);
- } else {
- savageFlushVertices (imesa);
- LOCK_HARDWARE(imesa);
- savageFlushCmdBufLocked (imesa, GL_FALSE);
- WAIT_IDLE_EMPTY_LOCKED(imesa);
- }
-
- for (i = 0 ; i < numLevels ; i++) {
- const GLint j = t->base.firstLevel + i; /* the texObj's level */
- if (t->base.dirty_images[0] & (1 << j)) {
- savageMarkAllTiles(t, j);
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_TEX)
- fprintf (stderr, "*");
- } else if (SAVAGE_DEBUG & DEBUG_VERBOSE_TEX) {
- if (t->dirtySubImages & (1 << j))
- fprintf (stderr, ".");
- else
- fprintf (stderr, " ");
- }
- if ((t->base.dirty_images[0] | t->dirtySubImages) & (1 << j))
- savageUploadTexLevel( t, j );
- }
-
- UNLOCK_HARDWARE(imesa);
- t->base.dirty_images[0] = 0;
- t->dirtySubImages = 0;
-
- if (SAVAGE_DEBUG & DEBUG_VERBOSE_TEX)
- fprintf(stderr, "|\n");
- }
-}
-
-
-static void
-savage4_set_wrap_mode( savageContextPtr imesa, unsigned unit,
- GLenum s_mode, GLenum t_mode )
-{
- switch( s_mode ) {
- case GL_REPEAT:
- imesa->regs.s4.texCtrl[ unit ].ni.uMode = TAM_Wrap;
- break;
- case GL_CLAMP:
- case GL_CLAMP_TO_EDGE:
- imesa->regs.s4.texCtrl[ unit ].ni.uMode = TAM_Clamp;
- break;
- case GL_MIRRORED_REPEAT:
- imesa->regs.s4.texCtrl[ unit ].ni.uMode = TAM_Mirror;
- break;
- }
-
- switch( t_mode ) {
- case GL_REPEAT:
- imesa->regs.s4.texCtrl[ unit ].ni.vMode = TAM_Wrap;
- break;
- case GL_CLAMP:
- case GL_CLAMP_TO_EDGE:
- imesa->regs.s4.texCtrl[ unit ].ni.vMode = TAM_Clamp;
- break;
- case GL_MIRRORED_REPEAT:
- imesa->regs.s4.texCtrl[ unit ].ni.vMode = TAM_Mirror;
- break;
- }
-}
-
-
-/**
- * Sets the hardware bits for the specified GL texture filter modes.
- *
- * \todo
- * Does the Savage4 have the ability to select the magnification filter?
- */
-static void
-savage4_set_filter_mode( savageContextPtr imesa, unsigned unit,
- GLenum minFilter, GLenum magFilter )
-{
- (void) magFilter;
-
- switch (minFilter) {
- case GL_NEAREST:
- imesa->regs.s4.texCtrl[ unit ].ni.filterMode = TFM_Point;
- imesa->regs.s4.texCtrl[ unit ].ni.mipmapEnable = GL_FALSE;
- break;
-
- case GL_LINEAR:
- imesa->regs.s4.texCtrl[ unit ].ni.filterMode = TFM_Bilin;
- imesa->regs.s4.texCtrl[ unit ].ni.mipmapEnable = GL_FALSE;
- break;
-
- case GL_NEAREST_MIPMAP_NEAREST:
- imesa->regs.s4.texCtrl[ unit ].ni.filterMode = TFM_Point;
- imesa->regs.s4.texCtrl[ unit ].ni.mipmapEnable = GL_TRUE;
- break;
-
- case GL_LINEAR_MIPMAP_NEAREST:
- imesa->regs.s4.texCtrl[ unit ].ni.filterMode = TFM_Bilin;
- imesa->regs.s4.texCtrl[ unit ].ni.mipmapEnable = GL_TRUE;
- break;
-
- case GL_NEAREST_MIPMAP_LINEAR:
- case GL_LINEAR_MIPMAP_LINEAR:
- imesa->regs.s4.texCtrl[ unit ].ni.filterMode = TFM_Trilin;
- imesa->regs.s4.texCtrl[ unit ].ni.mipmapEnable = GL_TRUE;
- break;
- }
-}
-
-
-static void savageUpdateTex0State_s4( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- struct gl_texture_object *tObj;
- struct gl_texture_image *image;
- savageTexObjPtr t;
- GLuint format;
-
- /* disable */
- imesa->regs.s4.texDescr.ni.tex0En = GL_FALSE;
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_NoTexMap;
- imesa->regs.s4.texCtrl[0].ui = 0x20f040;
- if (ctx->Texture.Unit[0]._ReallyEnabled == 0)
- return;
-
- tObj = ctx->Texture.Unit[0]._Current;
- if ((ctx->Texture.Unit[0]._ReallyEnabled & ~(TEXTURE_1D_BIT|TEXTURE_2D_BIT))
- || tObj->Image[0][tObj->BaseLevel]->Border > 0) {
- /* 3D texturing enabled, or texture border - fallback */
- FALLBACK (ctx, SAVAGE_FALLBACK_TEXTURE, GL_TRUE);
- return;
- }
-
- /* Do 2D texture setup */
-
- t = tObj->DriverData;
- if (!t) {
- t = savageAllocTexObj( tObj );
- if (!t)
- return;
- }
-
- imesa->CurrentTexObj[0] = &t->base;
- t->base.bound |= 1;
-
- if (t->base.dirty_images[0] || t->dirtySubImages) {
- savageSetTexImages(imesa, tObj);
- savageUploadTexImages(imesa, t);
- }
-
- driUpdateTextureLRU( &t->base );
-
- format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
-
- switch (ctx->Texture.Unit[0].EnvMode) {
- case GL_REPLACE:
- imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
- switch(format)
- {
- case GL_LUMINANCE:
- case GL_RGB:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_Decal;
- break;
-
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- case GL_INTENSITY:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_Copy;
- break;
-
- case GL_ALPHA:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_CopyAlpha;
- break;
- }
- __HWEnvCombineSingleUnitScale(imesa, 0, 0,
- &imesa->regs.s4.texBlendCtrl[0]);
- break;
-
- case GL_DECAL:
- imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
- switch (format)
- {
- case GL_RGB:
- case GL_LUMINANCE:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_Decal;
- break;
-
- case GL_RGBA:
- case GL_INTENSITY:
- case GL_LUMINANCE_ALPHA:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_DecalAlpha;
- break;
-
- /*
- GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_ALPHA, GL_INTENSITY
- are undefined with GL_DECAL
- */
-
- case GL_ALPHA:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_CopyAlpha;
- break;
- }
- __HWEnvCombineSingleUnitScale(imesa, 0, 0,
- &imesa->regs.s4.texBlendCtrl[0]);
- break;
-
- case GL_MODULATE:
- imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_ModulAlpha;
- __HWEnvCombineSingleUnitScale(imesa, 0, 0,
- &imesa->regs.s4.texBlendCtrl[0]);
- break;
-
- case GL_BLEND:
- imesa->regs.s4.texBlendColor.ui = imesa->texEnvColor;
-
- switch (format)
- {
- case GL_ALPHA:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_ModulAlpha;
- imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
- break;
-
- case GL_LUMINANCE:
- case GL_RGB:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_Blend0;
- imesa->regs.s4.texDescr.ni.tex1En = GL_TRUE;
- imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
- imesa->regs.s4.texDescr.ni.tex1Width =
- imesa->regs.s4.texDescr.ni.tex0Width;
- imesa->regs.s4.texDescr.ni.tex1Height =
- imesa->regs.s4.texDescr.ni.tex0Height;
- imesa->regs.s4.texDescr.ni.tex1Fmt =
- imesa->regs.s4.texDescr.ni.tex0Fmt;
-
- imesa->regs.s4.texAddr[1].ui = imesa->regs.s4.texAddr[0].ui;
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_Blend1;
-
- imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_TRUE;
- imesa->bTexEn1 = GL_TRUE;
- break;
-
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_BlendAlpha0;
- imesa->regs.s4.texDescr.ni.tex1En = GL_TRUE;
- imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
- imesa->regs.s4.texDescr.ni.tex1Width =
- imesa->regs.s4.texDescr.ni.tex0Width;
- imesa->regs.s4.texDescr.ni.tex1Height =
- imesa->regs.s4.texDescr.ni.tex0Height;
- imesa->regs.s4.texDescr.ni.tex1Fmt =
- imesa->regs.s4.texDescr.ni.tex0Fmt;
-
- imesa->regs.s4.texAddr[1].ui = imesa->regs.s4.texAddr[0].ui;
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_BlendAlpha1;
-
- imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_TRUE;
- imesa->bTexEn1 = GL_TRUE;
- break;
-
- case GL_INTENSITY:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_BlendInt0;
- imesa->regs.s4.texDescr.ni.tex1En = GL_TRUE;
- imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
- imesa->regs.s4.texDescr.ni.tex1Width =
- imesa->regs.s4.texDescr.ni.tex0Width;
- imesa->regs.s4.texDescr.ni.tex1Height =
- imesa->regs.s4.texDescr.ni.tex0Height;
- imesa->regs.s4.texDescr.ni.tex1Fmt =
- imesa->regs.s4.texDescr.ni.tex0Fmt;
-
- imesa->regs.s4.texAddr[1].ui = imesa->regs.s4.texAddr[0].ui;
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_BlendInt1;
-
- imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_TRUE;
- imesa->regs.s4.texCtrl[0].ni.alphaArg1Invert = GL_TRUE;
- imesa->bTexEn1 = GL_TRUE;
- break;
- }
- __HWEnvCombineSingleUnitScale(imesa, 0, 0,
- &imesa->regs.s4.texBlendCtrl[0]);
- break;
-
- case GL_ADD:
- imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
- switch (format)
- {
- case GL_ALPHA:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_ModulAlpha;
- break;
-
- case GL_LUMINANCE:
- case GL_RGB:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_Add;
- break;
-
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_Add;
- break;
-
- case GL_INTENSITY:
- imesa->regs.s4.texBlendCtrl[0].ui = TBC_AddAlpha;
- break;
- }
- __HWEnvCombineSingleUnitScale(imesa, 0, 0,
- &imesa->regs.s4.texBlendCtrl[0]);
- break;
-
-#if GL_ARB_texture_env_combine
- case GL_COMBINE_ARB:
- __HWParseTexEnvCombine(imesa, 0, &imesa->regs.s4.texCtrl[0],
- &imesa->regs.s4.texBlendCtrl[0]);
- break;
-#endif
-
- default:
- fprintf(stderr, "unknown tex env mode");
- exit(1);
- break;
- }
-
- savage4_set_wrap_mode( imesa, 0, t->setup.sWrapMode, t->setup.tWrapMode );
- savage4_set_filter_mode( imesa, 0, t->setup.minFilter, t->setup.magFilter );
-
- if((ctx->Texture.Unit[0].LodBias !=0.0F) ||
- (imesa->regs.s4.texCtrl[0].ni.dBias != 0))
- {
- int bias = (int)(ctx->Texture.Unit[0].LodBias * 32.0) +
- SAVAGE4_LOD_OFFSET;
- if (bias < -256)
- bias = -256;
- else if (bias > 255)
- bias = 255;
- imesa->regs.s4.texCtrl[0].ni.dBias = bias & 0x1ff;
- }
-
- image = tObj->Image[0][tObj->BaseLevel];
- imesa->regs.s4.texDescr.ni.tex0En = GL_TRUE;
- imesa->regs.s4.texDescr.ni.tex0Width = image->WidthLog2;
- imesa->regs.s4.texDescr.ni.tex0Height = image->HeightLog2;
- imesa->regs.s4.texDescr.ni.tex0Fmt = t->hwFormat;
- imesa->regs.s4.texCtrl[0].ni.dMax = t->base.lastLevel - t->base.firstLevel;
-
- if (imesa->regs.s4.texDescr.ni.tex1En)
- imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
-
- imesa->regs.s4.texAddr[0].ui = (uint32_t) t->setup.physAddr | 0x2;
- if(t->base.heap->heapId == SAVAGE_AGP_HEAP)
- imesa->regs.s4.texAddr[0].ui |= 0x1;
-
- return;
-}
-static void savageUpdateTex1State_s4( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- struct gl_texture_object *tObj;
- struct gl_texture_image *image;
- savageTexObjPtr t;
- GLuint format;
-
- /* disable */
- if(imesa->bTexEn1)
- {
- imesa->bTexEn1 = GL_FALSE;
- return;
- }
-
- imesa->regs.s4.texDescr.ni.tex1En = GL_FALSE;
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_NoTexMap1;
- imesa->regs.s4.texCtrl[1].ui = 0x20f040;
- imesa->regs.s4.texDescr.ni.texBLoopEn = GL_FALSE;
- if (ctx->Texture.Unit[1]._ReallyEnabled == 0)
- return;
-
- tObj = ctx->Texture.Unit[1]._Current;
-
- if ((ctx->Texture.Unit[1]._ReallyEnabled & ~(TEXTURE_1D_BIT|TEXTURE_2D_BIT))
- || tObj->Image[0][tObj->BaseLevel]->Border > 0) {
- /* 3D texturing enabled, or texture border - fallback */
- FALLBACK (ctx, SAVAGE_FALLBACK_TEXTURE, GL_TRUE);
- return;
- }
-
- /* Do 2D texture setup */
-
- t = tObj->DriverData;
- if (!t) {
- t = savageAllocTexObj( tObj );
- if (!t)
- return;
- }
-
- imesa->CurrentTexObj[1] = &t->base;
-
- t->base.bound |= 2;
-
- if (t->base.dirty_images[0] || t->dirtySubImages) {
- savageSetTexImages(imesa, tObj);
- savageUploadTexImages(imesa, t);
- }
-
- driUpdateTextureLRU( &t->base );
-
- format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
-
- switch (ctx->Texture.Unit[1].EnvMode) {
- case GL_REPLACE:
- imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_FALSE;
- switch (format)
- {
- case GL_LUMINANCE:
- case GL_RGB:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_Decal;
- break;
-
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- case GL_RGBA:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_Copy;
- break;
-
- case GL_ALPHA:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_CopyAlpha1;
- break;
- }
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
- break;
- case GL_MODULATE:
- imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_FALSE;
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_ModulAlpha1;
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
- break;
-
- case GL_ADD:
- imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_FALSE;
- switch (format)
- {
- case GL_ALPHA:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_ModulAlpha1;
- break;
-
- case GL_LUMINANCE:
- case GL_RGB:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_Add1;
- break;
-
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_Add1;
- break;
-
- case GL_INTENSITY:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_AddAlpha1;
- break;
- }
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
- break;
-
-#if GL_ARB_texture_env_combine
- case GL_COMBINE_ARB:
- __HWParseTexEnvCombine(imesa, 1, &texCtrl, &imesa->regs.s4.texBlendCtrl);
- break;
-#endif
-
- case GL_DECAL:
- imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_FALSE;
-
- switch (format)
- {
- case GL_LUMINANCE:
- case GL_RGB:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_Decal1;
- break;
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- case GL_RGBA:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_DecalAlpha1;
- break;
-
- /*
- // GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_ALPHA, GL_INTENSITY
- // are undefined with GL_DECAL
- */
- case GL_ALPHA:
- imesa->regs.s4.texBlendCtrl[1].ui = TBC_CopyAlpha1;
- break;
- }
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
- break;
-
- case GL_BLEND:
- if (format == GL_LUMINANCE)
- {
- /*
- // This is a hack for GLQuake, invert.
- */
- imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_TRUE;
- imesa->regs.s4.texBlendCtrl[1].ui = 0;
- }
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
- break;
-
- default:
- fprintf(stderr, "unknown tex 1 env mode\n");
- exit(1);
- break;
- }
-
- savage4_set_wrap_mode( imesa, 1, t->setup.sWrapMode, t->setup.tWrapMode );
- savage4_set_filter_mode( imesa, 1, t->setup.minFilter, t->setup.magFilter );
-
- if((ctx->Texture.Unit[1].LodBias !=0.0F) ||
- (imesa->regs.s4.texCtrl[1].ni.dBias != 0))
- {
- int bias = (int)(ctx->Texture.Unit[1].LodBias * 32.0) +
- SAVAGE4_LOD_OFFSET;
- if (bias < -256)
- bias = -256;
- else if (bias > 255)
- bias = 255;
- imesa->regs.s4.texCtrl[1].ni.dBias = bias & 0x1ff;
- }
-
- image = tObj->Image[0][tObj->BaseLevel];
- imesa->regs.s4.texDescr.ni.tex1En = GL_TRUE;
- imesa->regs.s4.texDescr.ni.tex1Width = image->WidthLog2;
- imesa->regs.s4.texDescr.ni.tex1Height = image->HeightLog2;
- imesa->regs.s4.texDescr.ni.tex1Fmt = t->hwFormat;
- imesa->regs.s4.texCtrl[1].ni.dMax = t->base.lastLevel - t->base.firstLevel;
- imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
-
- imesa->regs.s4.texAddr[1].ui = (uint32_t) t->setup.physAddr | 2;
- if(t->base.heap->heapId == SAVAGE_AGP_HEAP)
- imesa->regs.s4.texAddr[1].ui |= 0x1;
-}
-static void savageUpdateTexState_s3d( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- struct gl_texture_object *tObj;
- struct gl_texture_image *image;
- savageTexObjPtr t;
- GLuint format;
-
- /* disable */
- imesa->regs.s3d.texCtrl.ui = 0;
- imesa->regs.s3d.texCtrl.ni.texEn = GL_FALSE;
- imesa->regs.s3d.texCtrl.ni.dBias = 0x08;
- imesa->regs.s3d.texCtrl.ni.texXprEn = GL_TRUE;
- if (ctx->Texture.Unit[0]._ReallyEnabled == 0)
- return;
-
- tObj = ctx->Texture.Unit[0]._Current;
- if ((ctx->Texture.Unit[0]._ReallyEnabled & ~(TEXTURE_1D_BIT|TEXTURE_2D_BIT))
- || tObj->Image[0][tObj->BaseLevel]->Border > 0) {
- /* 3D texturing enabled, or texture border - fallback */
- FALLBACK (ctx, SAVAGE_FALLBACK_TEXTURE, GL_TRUE);
- return;
- }
-
- /* Do 2D texture setup */
- t = tObj->DriverData;
- if (!t) {
- t = savageAllocTexObj( tObj );
- if (!t)
- return;
- }
-
- imesa->CurrentTexObj[0] = &t->base;
- t->base.bound |= 1;
-
- if (t->base.dirty_images[0] || t->dirtySubImages) {
- savageSetTexImages(imesa, tObj);
- savageUploadTexImages(imesa, t);
- }
-
- driUpdateTextureLRU( &t->base );
-
- format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
-
- /* FIXME: copied from utah-glx, probably needs some tuning */
- switch (ctx->Texture.Unit[0].EnvMode) {
- case GL_DECAL:
- imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = SAVAGETBC_DECALALPHA_S3D;
- break;
- case GL_REPLACE:
- switch (format) {
- case GL_ALPHA: /* FIXME */
- imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = 1;
- break;
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = 4;
- break;
- case GL_RGB:
- case GL_LUMINANCE:
- imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = SAVAGETBC_DECAL_S3D;
- break;
- case GL_INTENSITY:
- imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = SAVAGETBC_COPY_S3D;
- }
- break;
- case GL_BLEND: /* hardware can't do GL_BLEND */
- FALLBACK (ctx, SAVAGE_FALLBACK_TEXTURE, GL_TRUE);
- return;
- case GL_MODULATE:
- imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = SAVAGETBC_MODULATEALPHA_S3D;
- break;
- default:
- fprintf(stderr, "unknown tex env mode\n");
- /*exit(1);*/
- break;
- }
-
- /* The Savage3D can't handle different wrapping modes in s and t.
- * If they are not the same, fall back to software. */
- if (t->setup.sWrapMode != t->setup.tWrapMode) {
- FALLBACK (ctx, SAVAGE_FALLBACK_TEXTURE, GL_TRUE);
- return;
- }
- imesa->regs.s3d.texCtrl.ni.uWrapEn = 0;
- imesa->regs.s3d.texCtrl.ni.vWrapEn = 0;
- imesa->regs.s3d.texCtrl.ni.wrapMode =
- (t->setup.sWrapMode == GL_REPEAT) ? TAM_Wrap : TAM_Clamp;
-
- switch (t->setup.minFilter) {
- case GL_NEAREST:
- imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Point;
- imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_TRUE;
- break;
-
- case GL_LINEAR:
- imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Bilin;
- imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_TRUE;
- break;
-
- case GL_NEAREST_MIPMAP_NEAREST:
- imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Point;
- imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_FALSE;
- break;
-
- case GL_LINEAR_MIPMAP_NEAREST:
- imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Bilin;
- imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_FALSE;
- break;
-
- case GL_NEAREST_MIPMAP_LINEAR:
- case GL_LINEAR_MIPMAP_LINEAR:
- imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Trilin;
- imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_FALSE;
- break;
- }
-
- /* There is no way to specify a maximum mipmap level. We may have to
- disable mipmapping completely. */
- /*
- if (t->max_level < t->image[0].image->WidthLog2 ||
- t->max_level < t->image[0].image->HeightLog2) {
- texCtrl.ni.mipmapEnable = GL_TRUE;
- if (texCtrl.ni.filterMode == TFM_Trilin)
- texCtrl.ni.filterMode = TFM_Bilin;
- texCtrl.ni.filterMode = TFM_Point;
- }
- */
-
- if((ctx->Texture.Unit[0].LodBias !=0.0F) ||
- (imesa->regs.s3d.texCtrl.ni.dBias != 0))
- {
- int bias = (int)(ctx->Texture.Unit[0].LodBias * 16.0);
- if (bias < -256)
- bias = -256;
- else if (bias > 255)
- bias = 255;
- imesa->regs.s3d.texCtrl.ni.dBias = bias & 0x1ff;
- }
-
- image = tObj->Image[0][tObj->BaseLevel];
- imesa->regs.s3d.texCtrl.ni.texEn = GL_TRUE;
- imesa->regs.s3d.texDescr.ni.texWidth = image->WidthLog2;
- imesa->regs.s3d.texDescr.ni.texHeight = image->HeightLog2;
- assert (t->hwFormat <= 7);
- imesa->regs.s3d.texDescr.ni.texFmt = t->hwFormat;
-
- imesa->regs.s3d.texAddr.ui = (uint32_t) t->setup.physAddr | 2;
- if(t->base.heap->heapId == SAVAGE_AGP_HEAP)
- imesa->regs.s3d.texAddr.ui |= 0x1;
-}
-
-
-static void savageTimestampTextures( savageContextPtr imesa )
-{
- /* Timestamp current texture objects for texture heap aging.
- * Only useful with long-lived 32-bit event tags available
- * with Savage DRM 2.3.x or later. */
- if ((imesa->CurrentTexObj[0] || imesa->CurrentTexObj[1]) &&
- imesa->savageScreen->driScrnPriv->drm_version.minor >= 3) {
- unsigned int e;
- FLUSH_BATCH(imesa);
- e = savageEmitEvent(imesa, SAVAGE_WAIT_3D);
- if (imesa->CurrentTexObj[0])
- imesa->CurrentTexObj[0]->timestamp = e;
- if (imesa->CurrentTexObj[1])
- imesa->CurrentTexObj[1]->timestamp = e;
- }
-}
-
-
-static void savageUpdateTextureState_s4( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
-
- /* When a texture is about to change or be disabled, timestamp the
- * old texture(s). We'll have to wait for this time stamp before
- * uploading anything to the same texture heap.
- */
- if ((imesa->CurrentTexObj[0] && ctx->Texture.Unit[0]._ReallyEnabled &&
- ctx->Texture.Unit[0]._Current->DriverData != imesa->CurrentTexObj[0]) ||
- (imesa->CurrentTexObj[1] && ctx->Texture.Unit[1]._ReallyEnabled &&
- ctx->Texture.Unit[1]._Current->DriverData != imesa->CurrentTexObj[1]) ||
- (imesa->CurrentTexObj[0] && !ctx->Texture.Unit[0]._ReallyEnabled) ||
- (imesa->CurrentTexObj[1] && !ctx->Texture.Unit[1]._ReallyEnabled))
- savageTimestampTextures(imesa);
-
- if (imesa->CurrentTexObj[0]) imesa->CurrentTexObj[0]->bound &= ~1;
- if (imesa->CurrentTexObj[1]) imesa->CurrentTexObj[1]->bound &= ~2;
- imesa->CurrentTexObj[0] = 0;
- imesa->CurrentTexObj[1] = 0;
- savageUpdateTex0State_s4( ctx );
- savageUpdateTex1State_s4( ctx );
- imesa->dirty |= (SAVAGE_UPLOAD_TEX0 |
- SAVAGE_UPLOAD_TEX1);
-}
-static void savageUpdateTextureState_s3d( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
-
- /* When a texture is about to change or be disabled, timestamp the
- * old texture(s). We'll have to wait for this time stamp before
- * uploading anything to the same texture heap.
- */
- if ((imesa->CurrentTexObj[0] && ctx->Texture.Unit[0]._ReallyEnabled &&
- ctx->Texture.Unit[0]._Current->DriverData != imesa->CurrentTexObj[0]) ||
- (imesa->CurrentTexObj[0] && !ctx->Texture.Unit[0]._ReallyEnabled))
- savageTimestampTextures(imesa);
-
- if (imesa->CurrentTexObj[0]) imesa->CurrentTexObj[0]->bound &= ~1;
- imesa->CurrentTexObj[0] = 0;
- savageUpdateTexState_s3d( ctx );
- imesa->dirty |= (SAVAGE_UPLOAD_TEX0);
-}
-void savageUpdateTextureState( struct gl_context *ctx)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
- FALLBACK (ctx, SAVAGE_FALLBACK_TEXTURE, GL_FALSE);
- FALLBACK(ctx, SAVAGE_FALLBACK_PROJ_TEXTURE, GL_FALSE);
- if (imesa->savageScreen->chipset >= S3_SAVAGE4)
- savageUpdateTextureState_s4 (ctx);
- else
- savageUpdateTextureState_s3d (ctx);
-}
-
-
-
-/*****************************************
- * DRIVER functions
- *****************************************/
-
-static void savageTexEnv( struct gl_context *ctx, GLenum target,
- GLenum pname, const GLfloat *param )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
-
- if (pname == GL_TEXTURE_ENV_MODE) {
-
- imesa->new_state |= SAVAGE_NEW_TEXTURE;
-
- } else if (pname == GL_TEXTURE_ENV_COLOR) {
-
- struct gl_texture_unit *texUnit =
- &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
- const GLfloat *fc = texUnit->EnvColor;
- GLuint r, g, b, a;
- CLAMPED_FLOAT_TO_UBYTE(r, fc[0]);
- CLAMPED_FLOAT_TO_UBYTE(g, fc[1]);
- CLAMPED_FLOAT_TO_UBYTE(b, fc[2]);
- CLAMPED_FLOAT_TO_UBYTE(a, fc[3]);
-
- imesa->texEnvColor = ((a << 24) | (r << 16) |
- (g << 8) | (b << 0));
-
-
- }
-}
-
-/* Update the heap's time stamp, so the new image is not uploaded
- * while the old one is still in use. If the texture that is going to
- * be changed is currently bound, we need to timestamp the texture
- * first. */
-static void savageTexImageChanged (savageTexObjPtr t) {
- if (t->base.heap) {
- if (t->base.bound)
- savageTimestampTextures(
- (savageContextPtr)t->base.heap->driverContext);
- if (t->base.timestamp > t->base.heap->timestamp)
- t->base.heap->timestamp = t->base.timestamp;
- }
-}
-
-static void savageTexImage1D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- savageTexObjPtr t = (savageTexObjPtr) texObj->DriverData;
- if (t) {
- savageTexImageChanged (t);
- } else {
- t = savageAllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage1D");
- return;
- }
- }
- _mesa_store_teximage1d( ctx, target, level, internalFormat,
- width, border, format, type,
- pixels, packing, texObj, texImage );
- t->base.dirty_images[0] |= (1 << level);
- SAVAGE_CONTEXT(ctx)->new_state |= SAVAGE_NEW_TEXTURE;
-}
-
-static void savageTexSubImage1D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLsizei width,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- savageTexObjPtr t = (savageTexObjPtr) texObj->DriverData;
- assert( t ); /* this _should_ be true */
- if (t) {
- savageTexImageChanged (t);
- savageMarkDirtyTiles(t, level, texImage->Width2, 1,
- xoffset, 0, width, 1);
- } else {
- t = savageAllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexSubImage1D");
- return;
- }
- t->base.dirty_images[0] |= (1 << level);
- }
- _mesa_store_texsubimage1d(ctx, target, level, xoffset, width,
- format, type, pixels, packing, texObj,
- texImage);
- t->dirtySubImages |= (1 << level);
- SAVAGE_CONTEXT(ctx)->new_state |= SAVAGE_NEW_TEXTURE;
-}
-
-static void savageTexImage2D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint height, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- savageTexObjPtr t = (savageTexObjPtr) texObj->DriverData;
- if (t) {
- savageTexImageChanged (t);
- } else {
- t = savageAllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
- return;
- }
- }
- _mesa_store_teximage2d( ctx, target, level, internalFormat,
- width, height, border, format, type,
- pixels, packing, texObj, texImage );
- t->base.dirty_images[0] |= (1 << level);
- SAVAGE_CONTEXT(ctx)->new_state |= SAVAGE_NEW_TEXTURE;
-}
-
-static void savageTexSubImage2D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- savageTexObjPtr t = (savageTexObjPtr) texObj->DriverData;
- assert( t ); /* this _should_ be true */
- if (t) {
- savageTexImageChanged (t);
- savageMarkDirtyTiles(t, level, texImage->Width2, texImage->Height2,
- xoffset, yoffset, width, height);
- } else {
- t = savageAllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexSubImage2D");
- return;
- }
- t->base.dirty_images[0] |= (1 << level);
- }
- _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width,
- height, format, type, pixels, packing, texObj,
- texImage);
- t->dirtySubImages |= (1 << level);
- SAVAGE_CONTEXT(ctx)->new_state |= SAVAGE_NEW_TEXTURE;
-}
-
-static void
-savageCompressedTexImage2D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint height, GLint border,
- GLsizei imageSize, const GLvoid *data,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- savageTexObjPtr t = (savageTexObjPtr) texObj->DriverData;
- if (t) {
- savageTexImageChanged (t);
- } else {
- t = savageAllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D");
- return;
- }
- }
- _mesa_store_compressed_teximage2d( ctx, target, level, internalFormat,
- width, height, border, imageSize,
- data, texObj, texImage );
- t->base.dirty_images[0] |= (1 << level);
- SAVAGE_CONTEXT(ctx)->new_state |= SAVAGE_NEW_TEXTURE;
-}
-
-static void
-savageCompressedTexSubImage2D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLsizei imageSize,
- const GLvoid *data,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- savageTexObjPtr t = (savageTexObjPtr) texObj->DriverData;
- assert( t ); /* this _should_ be true */
- if (t) {
- savageTexImageChanged (t);
- savageMarkDirtyTiles(t, level, texImage->Width2, texImage->Height2,
- xoffset, yoffset, width, height);
- } else {
- t = savageAllocTexObj(texObj);
- if (!t) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexSubImage2D");
- return;
- }
- t->base.dirty_images[0] |= (1 << level);
- }
- _mesa_store_compressed_texsubimage2d(ctx, target, level, xoffset, yoffset,
- width, height, format, imageSize,
- data, texObj, texImage);
- t->dirtySubImages |= (1 << level);
- SAVAGE_CONTEXT(ctx)->new_state |= SAVAGE_NEW_TEXTURE;
-}
-
-static void savageTexParameter( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj,
- GLenum pname, const GLfloat *params )
-{
- savageTexObjPtr t = (savageTexObjPtr) tObj->DriverData;
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
-
- if (!t || (target != GL_TEXTURE_1D && target != GL_TEXTURE_2D))
- return;
-
- switch (pname) {
- case GL_TEXTURE_MIN_FILTER:
- case GL_TEXTURE_MAG_FILTER:
- savageSetTexFilter(t,tObj->Sampler.MinFilter,tObj->Sampler.MagFilter);
- break;
-
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- savageSetTexWrapping(t,tObj->Sampler.WrapS,tObj->Sampler.WrapT);
- break;
-
- case GL_TEXTURE_BORDER_COLOR:
- savageSetTexBorderColor(t,tObj->Sampler.BorderColor.f);
- break;
-
- default:
- return;
- }
-
- imesa->new_state |= SAVAGE_NEW_TEXTURE;
-}
-
-static void savageBindTexture( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tObj )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
-
- assert( (target != GL_TEXTURE_1D && target != GL_TEXTURE_2D) ||
- (tObj->DriverData != NULL) );
-
- imesa->new_state |= SAVAGE_NEW_TEXTURE;
-}
-
-static void savageDeleteTexture( struct gl_context *ctx, struct gl_texture_object *tObj )
-{
- driTextureObject *t = (driTextureObject *)tObj->DriverData;
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
-
- if (t) {
- if (t->bound)
- savageTimestampTextures(imesa);
-
- driDestroyTextureObject(t);
- }
- /* Free mipmap images and the texture object itself */
- _mesa_delete_texture_object(ctx, tObj);
-}
-
-
-static struct gl_texture_object *
-savageNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
-{
- struct gl_texture_object *obj;
- obj = _mesa_new_texture_object(ctx, name, target);
- savageAllocTexObj( obj );
-
- return obj;
-}
-
-void savageDDInitTextureFuncs( struct dd_function_table *functions )
-{
- functions->TexEnv = savageTexEnv;
- functions->ChooseTextureFormat = savageChooseTextureFormat;
- functions->TexImage1D = savageTexImage1D;
- functions->TexSubImage1D = savageTexSubImage1D;
- functions->TexImage2D = savageTexImage2D;
- functions->TexSubImage2D = savageTexSubImage2D;
- functions->CompressedTexImage2D = savageCompressedTexImage2D;
- functions->CompressedTexSubImage2D = savageCompressedTexSubImage2D;
- functions->BindTexture = savageBindTexture;
- functions->NewTextureObject = savageNewTextureObject;
- functions->DeleteTexture = savageDeleteTexture;
- functions->IsTextureResident = driIsTextureResident;
- functions->TexParameter = savageTexParameter;
-
- /* Texel fetching with our custom texture formats works just like
- * the standard argb formats. */
-#if 0
- _savage_texformat_a1114444.FetchTexel1D = _mesa_texformat_argb4444.FetchTexel1D;
- _savage_texformat_a1114444.FetchTexel2D = _mesa_texformat_argb4444.FetchTexel2D;
- _savage_texformat_a1114444.FetchTexel3D = _mesa_texformat_argb4444.FetchTexel3D;
- _savage_texformat_a1114444.FetchTexel1Df= _mesa_texformat_argb4444.FetchTexel1Df;
- _savage_texformat_a1114444.FetchTexel2Df= _mesa_texformat_argb4444.FetchTexel2Df;
- _savage_texformat_a1114444.FetchTexel3Df= _mesa_texformat_argb4444.FetchTexel3Df;
-
- _savage_texformat_a1118888.FetchTexel1D = _mesa_texformat_argb8888.FetchTexel1D;
- _savage_texformat_a1118888.FetchTexel2D = _mesa_texformat_argb8888.FetchTexel2D;
- _savage_texformat_a1118888.FetchTexel3D = _mesa_texformat_argb8888.FetchTexel3D;
- _savage_texformat_a1118888.FetchTexel1Df= _mesa_texformat_argb8888.FetchTexel1Df;
- _savage_texformat_a1118888.FetchTexel2Df= _mesa_texformat_argb8888.FetchTexel2Df;
- _savage_texformat_a1118888.FetchTexel3Df= _mesa_texformat_argb8888.FetchTexel3Df;
-#endif
-}
diff --git a/src/mesa/drivers/dri/savage/savagetex.h b/src/mesa/drivers/dri/savage/savagetex.h
deleted file mode 100644
index 6108c1aade9..00000000000
--- a/src/mesa/drivers/dri/savage/savagetex.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#ifndef SAVAGETEX_INC
-#define SAVAGETEX_INC
-
-#include "main/mtypes.h"
-
-#include "savagecontext.h"
-#include "texmem.h"
-
-#define SAVAGE_TEX_MAXLEVELS 12
-
-/** \brief Texture tiling information */
-typedef struct savage_tileinfo_t {
- GLuint width, height; /**< tile width and height */
- GLuint wInSub, hInSub; /**< tile width and height in subtiles */
- GLuint subWidth, subHeight; /**< subtile width and height */
- GLuint tinyOffset[2]; /**< internal offsets size 1 and 2 images */
-} savageTileInfo, *savageTileInfoPtr;
-
-typedef struct {
- GLuint offset;
- GLuint nTiles;
- GLuint *dirtyTiles; /* bit vector of dirty tiles (still unused) */
-} savageTexImage;
-
-typedef struct {
- driTextureObject base;
-
- GLubyte *bufAddr;
-
- GLuint age;
- savageTexImage image[SAVAGE_TEX_MAXLEVELS];
- GLuint dirtySubImages;
-
- struct {
- GLuint sWrapMode, tWrapMode;
- GLuint minFilter, magFilter;
- GLuint physAddr;
- } setup;
-
- GLuint hwFormat;
- GLuint texelBytes;
- const savageTileInfo *tileInfo;
-} savageTexObj, *savageTexObjPtr;
-
-#define SAVAGE_NO_PALETTE 0x0
-#define SAVAGE_USE_PALETTE 0x1
-#define SAVAGE_UPDATE_PALETTE 0x2
-#define SAVAGE_FALLBACK_PALETTE 0x4
-#define __HWEnvCombineSingleUnitScale(imesa, flag0, flag1, TexBlendCtrl)
-#define __HWParseTexEnvCombine(imesa, flag0, TexCtrl, TexBlendCtrl)
-
-
-void savageUpdateTextureState( struct gl_context *ctx );
-void savageDDInitTextureFuncs( struct dd_function_table *functions );
-
-void savageDestroyTexObj( savageContextPtr imesa, savageTexObjPtr t );
-
-#endif
diff --git a/src/mesa/drivers/dri/savage/savagetris.c b/src/mesa/drivers/dri/savage/savagetris.c
deleted file mode 100644
index 79a951147f9..00000000000
--- a/src/mesa/drivers/dri/savage/savagetris.c
+++ /dev/null
@@ -1,1306 +0,0 @@
-/* -*- c-basic-offset: 3 -*- */
-/**************************************************************************
-
-Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
- VA Linux Systems Inc., Fremont, California.
-
-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
-on 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
-ATI, VA LINUX SYSTEMS AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell
- * Felix Kuehling
- *
- */
-
-#include
-#include
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-#include "savagetris.h"
-#include "savagestate.h"
-#include "savagetex.h"
-#include "savageioctl.h"
-
-static void savageRasterPrimitive( struct gl_context *ctx, GLuint prim );
-static void savageRenderPrimitive( struct gl_context *ctx, GLenum prim );
-
-
-static GLenum reduced_prim[GL_POLYGON+1] = {
- GL_POINTS,
- GL_LINES,
- GL_LINES,
- GL_LINES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES,
- GL_TRIANGLES
-};
-
-
-/***********************************************************************
- * Emit primitives *
- ***********************************************************************/
-
-#if defined (USE_X86_ASM)
-#define EMIT_VERT( j, vb, vertex_size, start, v ) \
-do { int __tmp; \
- vb += start; \
- __asm__ __volatile__( "rep ; movsl" \
- : "=%c" (j), "=D" (vb), "=S" (__tmp) \
- : "0" (vertex_size-start), \
- "D" ((long)vb), \
- "S" ((long)&(v)->ui[start])); \
-} while (0)
-#else
-#define EMIT_VERT( j, vb, vertex_size, start, v ) \
-do { \
- for ( j = start ; j < vertex_size ; j++ ) \
- vb[j] = (v)->ui[j]; \
- vb += vertex_size; \
-} while (0)
-#endif
-
-static void INLINE savage_draw_triangle (savageContextPtr imesa,
- savageVertexPtr v0,
- savageVertexPtr v1,
- savageVertexPtr v2) {
- GLuint vertsize = imesa->HwVertexSize;
- uint32_t *vb = savageAllocVtxBuf (imesa, 3*vertsize);
- GLuint j;
-
- EMIT_VERT (j, vb, vertsize, 0, v0);
- EMIT_VERT (j, vb, vertsize, 0, v1);
- EMIT_VERT (j, vb, vertsize, 0, v2);
-}
-
-static void INLINE savage_draw_quad (savageContextPtr imesa,
- savageVertexPtr v0,
- savageVertexPtr v1,
- savageVertexPtr v2,
- savageVertexPtr v3) {
- GLuint vertsize = imesa->HwVertexSize;
- uint32_t *vb = savageAllocVtxBuf (imesa, 6*vertsize);
- GLuint j;
-
- EMIT_VERT (j, vb, vertsize, 0, v0);
- EMIT_VERT (j, vb, vertsize, 0, v1);
- EMIT_VERT (j, vb, vertsize, 0, v3);
- EMIT_VERT (j, vb, vertsize, 0, v1);
- EMIT_VERT (j, vb, vertsize, 0, v2);
- EMIT_VERT (j, vb, vertsize, 0, v3);
-}
-
-static INLINE void savage_draw_point (savageContextPtr imesa,
- savageVertexPtr tmp) {
- GLuint vertsize = imesa->HwVertexSize;
- uint32_t *vb = savageAllocVtxBuf (imesa, 6*vertsize);
- const GLfloat x = tmp->v.x;
- const GLfloat y = tmp->v.y;
- const GLfloat sz = 0.5 * CLAMP(imesa->glCtx->Point.Size,
- imesa->glCtx->Const.MinPointSize,
- imesa->glCtx->Const.MaxPointSize);
- GLuint j;
-
- *(float *)&vb[0] = x - sz;
- *(float *)&vb[1] = y - sz;
- EMIT_VERT (j, vb, vertsize, 2, tmp);
-
- *(float *)&vb[0] = x + sz;
- *(float *)&vb[1] = y - sz;
- EMIT_VERT (j, vb, vertsize, 2, tmp);
-
- *(float *)&vb[0] = x + sz;
- *(float *)&vb[1] = y + sz;
- EMIT_VERT (j, vb, vertsize, 2, tmp);
-
- *(float *)&vb[0] = x + sz;
- *(float *)&vb[1] = y + sz;
- EMIT_VERT (j, vb, vertsize, 2, tmp);
-
- *(float *)&vb[0] = x - sz;
- *(float *)&vb[1] = y + sz;
- EMIT_VERT (j, vb, vertsize, 2, tmp);
-
- *(float *)&vb[0] = x - sz;
- *(float *)&vb[1] = y - sz;
- EMIT_VERT (j, vb, vertsize, 2, tmp);
-}
-
-static INLINE void savage_draw_line (savageContextPtr imesa,
- savageVertexPtr v0,
- savageVertexPtr v1 ) {
- GLuint vertsize = imesa->HwVertexSize;
- uint32_t *vb = savageAllocVtxBuf (imesa, 6*vertsize);
- const GLfloat width = CLAMP(imesa->glCtx->Line.Width,
- imesa->glCtx->Const.MinLineWidth,
- imesa->glCtx->Const.MaxLineWidth);
- GLfloat dx, dy, ix, iy;
- GLuint j;
-
- dx = v0->v.x - v1->v.x;
- dy = v0->v.y - v1->v.y;
-
- ix = width * .5; iy = 0;
- if (dx * dx > dy * dy) {
- iy = ix; ix = 0;
- }
-
- *(float *)&vb[0] = v0->v.x - ix;
- *(float *)&vb[1] = v0->v.y - iy;
- EMIT_VERT (j, vb, vertsize, 2, v0);
-
- *(float *)&vb[0] = v1->v.x + ix;
- *(float *)&vb[1] = v1->v.y + iy;
- EMIT_VERT (j, vb, vertsize, 2, v1);
-
- *(float *)&vb[0] = v0->v.x + ix;
- *(float *)&vb[1] = v0->v.y + iy;
- EMIT_VERT (j, vb, vertsize, 2, v0);
-
- *(float *)&vb[0] = v0->v.x - ix;
- *(float *)&vb[1] = v0->v.y - iy;
- EMIT_VERT (j, vb, vertsize, 2, v0);
-
- *(float *)&vb[0] = v1->v.x - ix;
- *(float *)&vb[1] = v1->v.y - iy;
- EMIT_VERT (j, vb, vertsize, 2, v1);
-
- *(float *)&vb[0] = v1->v.x + ix;
- *(float *)&vb[1] = v1->v.y + iy;
- EMIT_VERT (j, vb, vertsize, 2, v1);
-}
-
-/* Fallback drawing functions for the ptex hack. Code duplication
- * (especially lines and points) isn't beautiful, but I didn't feel
- * like inventing yet another template. :-/
- */
-#define PTEX_VERTEX( j, tmp, vertex_size, start, v) \
-do { \
- GLfloat rhw = 1.0 / v->f[vertex_size]; \
- for ( j = start ; j < vertex_size ; j++ ) \
- tmp.f[j] = v->f[j]; \
- tmp.f[3] *= v->f[vertex_size]; \
- tmp.f[vertex_size-2] *= rhw; \
- tmp.f[vertex_size-1] *= rhw; \
-} while (0)
-
-static void INLINE savage_ptex_tri (savageContextPtr imesa,
- savageVertexPtr v0,
- savageVertexPtr v1,
- savageVertexPtr v2) {
- GLuint vertsize = imesa->HwVertexSize;
- uint32_t *vb = savageAllocVtxBuf (imesa, 3*vertsize);
- savageVertex tmp;
- GLuint j;
-
- PTEX_VERTEX (j, tmp, vertsize, 0, v0); EMIT_VERT (j, vb, vertsize, 0, &tmp);
- PTEX_VERTEX (j, tmp, vertsize, 0, v1); EMIT_VERT (j, vb, vertsize, 0, &tmp);
- PTEX_VERTEX (j, tmp, vertsize, 0, v2); EMIT_VERT (j, vb, vertsize, 0, &tmp);
-}
-
-static INLINE void savage_ptex_line (savageContextPtr imesa,
- savageVertexPtr v0,
- savageVertexPtr v1 ) {
- GLuint vertsize = imesa->HwVertexSize;
- uint32_t *vb = savageAllocVtxBuf (imesa, 6*vertsize);
- const GLfloat width = CLAMP(imesa->glCtx->Line.Width,
- imesa->glCtx->Const.MinLineWidth,
- imesa->glCtx->Const.MaxLineWidth);
- GLfloat dx, dy, ix, iy;
- savageVertex tmp0, tmp1;
- GLuint j;
-
- PTEX_VERTEX (j, tmp0, vertsize, 2, v0);
- PTEX_VERTEX (j, tmp1, vertsize, 2, v1);
-
- dx = v0->v.x - v1->v.x;
- dy = v0->v.y - v1->v.y;
-
- ix = width * .5; iy = 0;
- if (dx * dx > dy * dy) {
- iy = ix; ix = 0;
- }
-
- *(float *)&vb[0] = v0->v.x - ix;
- *(float *)&vb[1] = v0->v.y - iy;
- EMIT_VERT (j, vb, vertsize, 2, &tmp0);
-
- *(float *)&vb[0] = v1->v.x + ix;
- *(float *)&vb[1] = v1->v.y + iy;
- EMIT_VERT (j, vb, vertsize, 2, &tmp1);
-
- *(float *)&vb[0] = v0->v.x + ix;
- *(float *)&vb[1] = v0->v.y + iy;
- EMIT_VERT (j, vb, vertsize, 2, &tmp0);
-
- *(float *)&vb[0] = v0->v.x - ix;
- *(float *)&vb[1] = v0->v.y - iy;
- EMIT_VERT (j, vb, vertsize, 2, &tmp0);
-
- *(float *)&vb[0] = v1->v.x - ix;
- *(float *)&vb[1] = v1->v.y - iy;
- EMIT_VERT (j, vb, vertsize, 2, &tmp1);
-
- *(float *)&vb[0] = v1->v.x + ix;
- *(float *)&vb[1] = v1->v.y + iy;
- EMIT_VERT (j, vb, vertsize, 2, &tmp1);
-}
-
-static INLINE void savage_ptex_point (savageContextPtr imesa,
- savageVertexPtr v0) {
- GLuint vertsize = imesa->HwVertexSize;
- uint32_t *vb = savageAllocVtxBuf (imesa, 6*vertsize);
- const GLfloat x = v0->v.x;
- const GLfloat y = v0->v.y;
- const GLfloat sz = 0.5 * CLAMP(imesa->glCtx->Point.Size,
- imesa->glCtx->Const.MinPointSize,
- imesa->glCtx->Const.MaxPointSize);
- savageVertex tmp;
- GLuint j;
-
- PTEX_VERTEX (j, tmp, vertsize, 2, v0);
-
- *(float *)&vb[0] = x - sz;
- *(float *)&vb[1] = y - sz;
- EMIT_VERT (j, vb, vertsize, 2, &tmp);
-
- *(float *)&vb[0] = x + sz;
- *(float *)&vb[1] = y - sz;
- EMIT_VERT (j, vb, vertsize, 2, &tmp);
-
- *(float *)&vb[0] = x + sz;
- *(float *)&vb[1] = y + sz;
- EMIT_VERT (j, vb, vertsize, 2, &tmp);
-
- *(float *)&vb[0] = x + sz;
- *(float *)&vb[1] = y + sz;
- EMIT_VERT (j, vb, vertsize, 2, &tmp);
-
- *(float *)&vb[0] = x - sz;
- *(float *)&vb[1] = y + sz;
- EMIT_VERT (j, vb, vertsize, 2, &tmp);
-
- *(float *)&vb[0] = x - sz;
- *(float *)&vb[1] = y - sz;
- EMIT_VERT (j, vb, vertsize, 2, &tmp);
-}
-
-/***********************************************************************
- * Macros for t_dd_tritmp.h to draw basic primitives *
- ***********************************************************************/
-
-#define TRI( a, b, c ) \
-do { \
- if (DO_FALLBACK) \
- imesa->draw_tri( imesa, a, b, c ); \
- else \
- savage_draw_triangle( imesa, a, b, c ); \
-} while (0)
-
-#define QUAD( a, b, c, d ) \
-do { \
- if (DO_FALLBACK) { \
- imesa->draw_tri( imesa, a, b, d ); \
- imesa->draw_tri( imesa, b, c, d ); \
- } else \
- savage_draw_quad( imesa, a, b, c, d ); \
-} while (0)
-
-#define LINE( v0, v1 ) \
-do { \
- if (DO_FALLBACK) \
- imesa->draw_line( imesa, v0, v1 ); \
- else \
- savage_draw_line( imesa, v0, v1 ); \
-} while (0)
-
-#define POINT( v0 ) \
-do { \
- if (DO_FALLBACK) \
- imesa->draw_point( imesa, v0 ); \
- else \
- savage_draw_point( imesa, v0 ); \
-} while (0)
-
-
-/***********************************************************************
- * Build render functions from dd templates *
- ***********************************************************************/
-
-#define SAVAGE_OFFSET_BIT 0x1
-#define SAVAGE_TWOSIDE_BIT 0x2
-#define SAVAGE_UNFILLED_BIT 0x4
-#define SAVAGE_FALLBACK_BIT 0x8
-#define SAVAGE_MAX_TRIFUNC 0x10
-
-
-static struct {
- tnl_points_func points;
- tnl_line_func line;
- tnl_triangle_func triangle;
- tnl_quad_func quad;
-} rast_tab[SAVAGE_MAX_TRIFUNC];
-
-
-#define DO_FALLBACK (IND & SAVAGE_FALLBACK_BIT)
-#define DO_OFFSET (IND & SAVAGE_OFFSET_BIT)
-#define DO_UNFILLED (IND & SAVAGE_UNFILLED_BIT)
-#define DO_TWOSIDE (IND & SAVAGE_TWOSIDE_BIT)
-#define DO_FLAT 0
-#define DO_TRI 1
-#define DO_QUAD 1
-#define DO_LINE 1
-#define DO_POINTS 1
-#define DO_FULL_QUAD 1
-
-#define HAVE_SPEC 1
-#define HAVE_BACK_COLORS 0
-#define HAVE_HW_FLATSHADE 1
-#define VERTEX savageVertex
-#define TAB rast_tab
-
-#define DEPTH_SCALE imesa->depth_scale
-#define REVERSE_DEPTH 1
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) _v->v.x
-#define VERT_Y(_v) _v->v.y
-#define VERT_Z(_v) _v->v.z
-#define AREA_IS_CCW( a ) (a > 0)
-#define GET_VERTEX(e) (imesa->verts + (e * imesa->vertex_size * sizeof(int)))
-
-#define VERT_SET_RGBA( v, c ) \
-do { \
- savage_color_t *color = (savage_color_t *)&((v)->ub4[coloroffset]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->blue, (c)[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->alpha, (c)[3]); \
-} while (0)
-#define VERT_COPY_RGBA( v0, v1 ) v0->ui[coloroffset] = v1->ui[coloroffset]
-#define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[coloroffset]
-#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[coloroffset] = color[idx]
-
-#define VERT_SET_SPEC( v, c ) \
-do { \
- if (specoffset) { \
- savage_color_t *spec = (savage_color_t *)&((v)->ub4[specoffset]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->blue, (c)[2]); \
- } \
-} while (0)
-#define VERT_COPY_SPEC( v0, v1 ) \
- if (specoffset) COPY_3V(v0->ub4[specoffset], v1->ub4[specoffset])
-#define VERT_SAVE_SPEC( idx ) \
- if (specoffset) spec[idx] = v[idx]->ui[specoffset]
-#define VERT_RESTORE_SPEC( idx ) \
- if (specoffset) v[idx]->ui[specoffset] = spec[idx]
-
-#define LOCAL_VARS(n) \
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx); \
- GLuint color[n] = { 0 }; \
- GLuint spec[n] = { 0 }; \
- GLuint coloroffset = \
- ((imesa->skip & SAVAGE_SKIP_W) ? 3 : 4); \
- GLboolean specoffset = \
- ((imesa->skip & SAVAGE_SKIP_C1) ? 0 : coloroffset+1); \
- (void) color; (void) spec; (void) coloroffset; (void) specoffset;
-
-/***********************************************************************
- * Helpers for rendering unfilled primitives *
- ***********************************************************************/
-
-#define RASTERIZE(x) if (imesa->raster_primitive != reduced_prim[x]) \
- savageRasterPrimitive( ctx, x )
-#define RENDER_PRIMITIVE imesa->render_primitive
-#define IND SAVAGE_FALLBACK_BIT
-#define TAG(x) x
-#include "tnl_dd/t_dd_unfilled.h"
-#undef IND
-
-
-/***********************************************************************
- * Generate GL render functions *
- ***********************************************************************/
-
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_TWOSIDE_BIT|SAVAGE_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_OFFSET_BIT|SAVAGE_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_TWOSIDE_BIT|SAVAGE_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_TWOSIDE_BIT|SAVAGE_OFFSET_BIT|SAVAGE_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_FALLBACK_BIT)
-#define TAG(x) x##_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_OFFSET_BIT|SAVAGE_FALLBACK_BIT)
-#define TAG(x) x##_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_TWOSIDE_BIT|SAVAGE_FALLBACK_BIT)
-#define TAG(x) x##_twoside_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_TWOSIDE_BIT|SAVAGE_OFFSET_BIT|SAVAGE_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_UNFILLED_BIT|SAVAGE_FALLBACK_BIT)
-#define TAG(x) x##_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_OFFSET_BIT|SAVAGE_UNFILLED_BIT|SAVAGE_FALLBACK_BIT)
-#define TAG(x) x##_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_TWOSIDE_BIT|SAVAGE_UNFILLED_BIT|SAVAGE_FALLBACK_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SAVAGE_TWOSIDE_BIT|SAVAGE_OFFSET_BIT|SAVAGE_UNFILLED_BIT| \
- SAVAGE_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-static void init_rast_tab( void )
-{
- init();
- init_offset();
- init_twoside();
- init_twoside_offset();
- init_unfilled();
- init_offset_unfilled();
- init_twoside_unfilled();
- init_twoside_offset_unfilled();
- init_fallback();
- init_offset_fallback();
- init_twoside_fallback();
- init_twoside_offset_fallback();
- init_unfilled_fallback();
- init_offset_unfilled_fallback();
- init_twoside_unfilled_fallback();
- init_twoside_offset_unfilled_fallback();
-}
-
-
-
-/***********************************************************************
- * Rasterization fallback helpers *
- ***********************************************************************/
-
-
-/* This code is hit only when a mix of accelerated and unaccelerated
- * primitives are being drawn, and only for the unaccelerated
- * primitives.
- */
-static void
-savage_fallback_tri( savageContextPtr imesa,
- savageVertexPtr v0,
- savageVertexPtr v1,
- savageVertexPtr v2 )
-{
- struct gl_context *ctx = imesa->glCtx;
- SWvertex v[3];
- FLUSH_BATCH(imesa);
- WAIT_IDLE_EMPTY(imesa);
- _swsetup_Translate( ctx, v0, &v[0] );
- _swsetup_Translate( ctx, v1, &v[1] );
- _swsetup_Translate( ctx, v2, &v[2] );
- _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
-}
-
-
-static void
-savage_fallback_line( savageContextPtr imesa,
- savageVertexPtr v0,
- savageVertexPtr v1 )
-{
- struct gl_context *ctx = imesa->glCtx;
- SWvertex v[2];
- FLUSH_BATCH(imesa);
- WAIT_IDLE_EMPTY(imesa);
- _swsetup_Translate( ctx, v0, &v[0] );
- _swsetup_Translate( ctx, v1, &v[1] );
- _swrast_Line( ctx, &v[0], &v[1] );
-}
-
-
-static void
-savage_fallback_point( savageContextPtr imesa,
- savageVertexPtr v0 )
-{
- struct gl_context *ctx = imesa->glCtx;
- SWvertex v[1];
- FLUSH_BATCH(imesa);
- WAIT_IDLE_EMPTY(imesa);
- _swsetup_Translate( ctx, v0, &v[0] );
- _swrast_Point( ctx, &v[0] );
-}
-
-
-
-/**********************************************************************/
-/* Render unclipped begin/end objects */
-/**********************************************************************/
-
-#define VERT(x) (savageVertexPtr)(savageVerts + (x * vertsize * sizeof(int)))
-#define RENDER_POINTS( start, count ) \
- for ( ; start < count ; start++) \
- savage_draw_point( imesa, VERT(start) )
-#define RENDER_LINE( v0, v1 ) \
- savage_draw_line( imesa, VERT(v0), VERT(v1) )
-#define RENDER_TRI( v0, v1, v2 ) \
- savage_draw_triangle( imesa, VERT(v0), VERT(v1), VERT(v2) )
-#define RENDER_QUAD( v0, v1, v2, v3 ) \
- savage_draw_quad( imesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
-#define INIT(x) do { \
- if (0) fprintf(stderr, "%s\n", __FUNCTION__); \
- savageRenderPrimitive( ctx, x ); \
- /*SAVAGE_CONTEXT(ctx)->render_primitive = x;*/ \
-} while (0)
-#undef LOCAL_VARS
-#define LOCAL_VARS \
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx); \
- const GLuint vertsize = imesa->vertex_size; \
- const char *savageVerts = (char *)imesa->verts; \
- const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
- (void) elt;
-#define RESET_STIPPLE
-#define RESET_OCCLUSION
-#define PRESERVE_VB_DEFS
-#define ELT(x) (x)
-#define TAG(x) savage_##x##_verts
-#include "tnl/t_vb_rendertmp.h"
-#undef ELT
-#undef TAG
-#define TAG(x) savage_##x##_elts
-#define ELT(x) elt[x]
-#include "tnl/t_vb_rendertmp.h"
-
-
-/**********************************************************************/
-/* Render clipped primitives */
-/**********************************************************************/
-
-static void savageRenderClippedPoly( struct gl_context *ctx, const GLuint *elts,
- GLuint n )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-
- /* Render the new vertices as an unclipped polygon.
- */
- {
- GLuint *tmp = VB->Elts;
- VB->Elts = (GLuint *)elts;
- tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n, PRIM_BEGIN|PRIM_END );
- VB->Elts = tmp;
- }
-}
-
-static void savageRenderClippedLine( struct gl_context *ctx, GLuint ii, GLuint jj )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->Driver.Render.Line( ctx, ii, jj );
-}
-/*
-static void savageFastRenderClippedPoly( struct gl_context *ctx, const GLuint *elts,
- GLuint n )
-{
- r128ContextPtr rmesa = R128_CONTEXT( ctx );
- GLuint vertsize = rmesa->vertex_size;
- GLuint *vb = r128AllocDmaLow( rmesa, (n-2) * 3 * 4 * vertsize );
- GLubyte *r128verts = (GLubyte *)rmesa->verts;
- const GLuint shift = rmesa->vertex_stride_shift;
- const GLuint *start = (const GLuint *)VERT(elts[0]);
- int i,j;
-
- rmesa->num_verts += (n-2) * 3;
-
- for (i = 2 ; i < n ; i++) {
- COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) start );
- COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) VERT(elts[i-1]) );
- COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) VERT(elts[i]) );
- }
-}
-*/
-
-
-
-/**********************************************************************/
-/* Choose render functions */
-/**********************************************************************/
-
-#define _SAVAGE_NEW_RENDER_STATE (_DD_NEW_LINE_STIPPLE | \
- _DD_NEW_LINE_SMOOTH | \
- _DD_NEW_POINT_SMOOTH | \
- _DD_NEW_TRI_STIPPLE | \
- _DD_NEW_TRI_SMOOTH | \
- _DD_NEW_TRI_UNFILLED | \
- _DD_NEW_TRI_LIGHT_TWOSIDE | \
- _DD_NEW_TRI_OFFSET) \
-
-/* original driver didn't have DD_POINT_SMOOTH. really needed? */
-#define POINT_FALLBACK (DD_POINT_SMOOTH)
-#define LINE_FALLBACK (DD_LINE_STIPPLE|DD_LINE_SMOOTH)
-#define TRI_FALLBACK (DD_TRI_STIPPLE|DD_TRI_SMOOTH)
-#define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)
-#define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
-
-
-static void savageChooseRenderState(struct gl_context *ctx)
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- GLuint flags = ctx->_TriangleCaps;
- GLuint index = 0;
-
- /* Hook in fallback functions for the ptex hack. Do this first, so
- * that a real fallback will overwrite them with the respective
- * savage_fallback_... function.
- */
- if (imesa->ptexHack) {
- /* Do textures make sense with points? */
- imesa->draw_point = savage_ptex_point;
- imesa->draw_line = savage_ptex_line;
- imesa->draw_tri = savage_ptex_tri;
- index |= SAVAGE_FALLBACK_BIT;
- } else {
- imesa->draw_point = savage_draw_point;
- imesa->draw_line = savage_draw_line;
- imesa->draw_tri = savage_draw_triangle;
- }
-
- if (flags & (ANY_RASTER_FLAGS|ANY_FALLBACK_FLAGS)) {
- if (flags & ANY_RASTER_FLAGS) {
- if (flags & DD_TRI_LIGHT_TWOSIDE) index |= SAVAGE_TWOSIDE_BIT;
- if (flags & DD_TRI_OFFSET) index |= SAVAGE_OFFSET_BIT;
- if (flags & DD_TRI_UNFILLED) index |= SAVAGE_UNFILLED_BIT;
- }
-
- /* Hook in fallbacks for specific primitives.
- */
- if (flags & ANY_FALLBACK_FLAGS) {
- if (flags & POINT_FALLBACK) imesa->draw_point = savage_fallback_point;
- if (flags & LINE_FALLBACK) imesa->draw_line = savage_fallback_line;
- if (flags & TRI_FALLBACK) imesa->draw_tri = savage_fallback_tri;
- index |= SAVAGE_FALLBACK_BIT;
- if (SAVAGE_DEBUG & DEBUG_FALLBACKS) {
- fprintf (stderr, "Per-primitive fallback, TriangleCaps=0x%x\n",
- ctx->_TriangleCaps);
- }
- }
- }
-
- if (index != imesa->RenderIndex) {
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->Driver.Render.Points = rast_tab[index].points;
- tnl->Driver.Render.Line = rast_tab[index].line;
- tnl->Driver.Render.Triangle = rast_tab[index].triangle;
- tnl->Driver.Render.Quad = rast_tab[index].quad;
-
- if (index == 0) {
- tnl->Driver.Render.PrimTabVerts = savage_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = savage_render_tab_elts;
- tnl->Driver.Render.ClippedLine = rast_tab[index].line;
- tnl->Driver.Render.ClippedPolygon = savageRenderClippedPoly/*r128FastRenderClippedPoly*/;
- } else {
- tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
- tnl->Driver.Render.ClippedLine = savageRenderClippedLine;
- tnl->Driver.Render.ClippedPolygon = savageRenderClippedPoly;
- }
-
- imesa->RenderIndex = index;
- }
-}
-
-/**********************************************************************/
-/* Validate state at pipeline start */
-/**********************************************************************/
-
-static void savageRunPipeline( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
-
- if (imesa->no_rast)
- FALLBACK(ctx, SAVAGE_FALLBACK_NORAST, GL_TRUE);
-
- if (imesa->new_state)
- savageDDUpdateHwState( ctx );
-
- if (!imesa->Fallback) {
- if (imesa->new_gl_state & _SAVAGE_NEW_RENDER_STATE)
- savageChooseRenderState( ctx );
-
- /* choose the correct primitive type for tnl rendering */
- if (imesa->savageScreen->chipset < S3_SAVAGE4 &&
- (ctx->_TriangleCaps & DD_FLATSHADE)) {
- if (imesa->HwPrim != SAVAGE_PRIM_TRILIST_201)
- savageFlushVertices(imesa);
- imesa->HwPrim = SAVAGE_PRIM_TRILIST_201;
- } else {
- if (imesa->HwPrim != SAVAGE_PRIM_TRILIST)
- savageFlushVertices(imesa);
- imesa->HwPrim = SAVAGE_PRIM_TRILIST;
- }
-
- imesa->new_gl_state = 0;
- }
-
- _tnl_run_pipeline( ctx );
-
- if (imesa->no_rast)
- FALLBACK(ctx, SAVAGE_FALLBACK_NORAST, GL_FALSE);
-}
-
-/**********************************************************************/
-/* High level hooks for t_vb_render.c */
-/**********************************************************************/
-
-/* This is called when Mesa switches between rendering triangle
- * primitives (such as GL_POLYGON, GL_QUADS, GL_TRIANGLE_STRIP, etc),
- * and lines, points and bitmaps.
- *
- * As the r128 uses triangles to render lines and points, it is
- * necessary to turn off hardware culling when rendering these
- * primitives.
- */
-
-static void savageRasterPrimitive( struct gl_context *ctx, GLuint prim )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT( ctx );
-
- /* Update culling */
- if (imesa->raster_primitive != prim) {
- imesa->raster_primitive = prim;
- imesa->new_state |= SAVAGE_NEW_CULL;
- savageDDUpdateHwState (ctx);
- }
-
-#if 0
- if (ctx->Polygon.StippleFlag && mmesa->haveHwStipple)
- {
- mmesa->dirty |= MGA_UPLOAD_CONTEXT;
- mmesa->setup.dwgctl &= ~(0xf<<20);
- if (mmesa->raster_primitive == GL_TRIANGLES)
- mmesa->setup.dwgctl |= mmesa->poly_stipple;
- }
-#endif
-}
-
-static void savageRenderPrimitive( struct gl_context *ctx, GLenum prim )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- GLuint rprim = reduced_prim[prim];
-
- imesa->render_primitive = prim;
-
- if (rprim == GL_TRIANGLES && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
- return;
-
- if (imesa->raster_primitive != rprim) {
- savageRasterPrimitive( ctx, rprim );
- }
-}
-
-/* Check if projective texture coordinates are used and if we can fake
- * them. Fallback to swrast we can't. Returns GL_TRUE if projective
- * texture coordinates must be faked, GL_FALSE otherwise.
- */
-static GLboolean savageCheckPTexHack( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- DECLARE_RENDERINPUTS(index_bitset);
-
- RENDERINPUTS_COPY( index_bitset, tnl->render_inputs_bitset );
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX0 ) && VB->AttribPtr[_TNL_ATTRIB_TEX0]->size == 4) {
- if (!RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_ATTRIB_TEX1, _TNL_LAST_TEX ))
- return GL_TRUE; /* apply ptex hack */
- else
- FALLBACK(ctx, SAVAGE_FALLBACK_PROJ_TEXTURE, GL_TRUE);
- }
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX1 ) && VB->AttribPtr[_TNL_ATTRIB_TEX1]->size == 4)
- FALLBACK(ctx, SAVAGE_FALLBACK_PROJ_TEXTURE, GL_TRUE);
-
- return GL_FALSE; /* don't apply ptex hack */
-}
-
-
-#define DO_EMIT_ATTR( ATTR, STYLE ) \
-do { \
- imesa->vertex_attrs[imesa->vertex_attr_count].attrib = (ATTR); \
- imesa->vertex_attrs[imesa->vertex_attr_count].format = (STYLE); \
- imesa->vertex_attr_count++; \
-} while (0)
-
-#define NEED_ATTR( INDEX, SKIP ) \
-do { \
- setupIndex |= (INDEX); \
- skip &= ~(SKIP); \
-} while (0)
-
-#define EMIT_ATTR( ATTR, STYLE, INDEX, SKIP ) \
-do { \
- NEED_ATTR( INDEX, SKIP ); \
- DO_EMIT_ATTR( ATTR, STYLE ); \
-} while (0)
-
-#define EMIT_PAD( N ) \
-do { \
- imesa->vertex_attrs[imesa->vertex_attr_count].attrib = 0; \
- imesa->vertex_attrs[imesa->vertex_attr_count].format = EMIT_PAD; \
- imesa->vertex_attrs[imesa->vertex_attr_count].offset = (N); \
- imesa->vertex_attr_count++; \
-} while (0)
-
-#define SAVAGE_EMIT_XYZ 0x0001
-#define SAVAGE_EMIT_W 0x0002
-#define SAVAGE_EMIT_C0 0x0004
-#define SAVAGE_EMIT_C1 0x0008
-#define SAVAGE_EMIT_FOG 0x0010
-#define SAVAGE_EMIT_S0 0x0020
-#define SAVAGE_EMIT_T0 0x0040
-#define SAVAGE_EMIT_Q0 0x0080
-#define SAVAGE_EMIT_ST0 0x0060
-#define SAVAGE_EMIT_STQ0 0x00e0
-#define SAVAGE_EMIT_S1 0x0100
-#define SAVAGE_EMIT_T1 0x0200
-#define SAVAGE_EMIT_ST1 0x0300
-
-
-static INLINE GLuint savageChooseVertexFormat_s3d( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- DECLARE_RENDERINPUTS(index_bitset);
- GLuint setupIndex = SAVAGE_EMIT_XYZ;
- GLubyte skip;
-
- RENDERINPUTS_COPY( index_bitset, tnl->render_inputs_bitset );
- imesa->vertex_attr_count = 0;
-
- skip = SAVAGE_SKIP_ALL_S3D;
- skip &= ~SAVAGE_SKIP_Z; /* all mesa vertices have a z coordinate */
-
- /* EMIT_ATTR's must be in order as they tell t_vertex.c how to
- * build up a hardware vertex.
- */
- if (RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_FIRST_TEX, _TNL_LAST_TEX ) || !(ctx->_TriangleCaps & DD_FLATSHADE))
- EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F_VIEWPORT, SAVAGE_EMIT_W, SAVAGE_SKIP_W );
- else {
- EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_3F_VIEWPORT, 0, 0 );
- EMIT_PAD( 4 );
- skip &= ~SAVAGE_SKIP_W;
- }
-
- /* t_context.c always includes a diffuse color */
- EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA, SAVAGE_EMIT_C0, SAVAGE_SKIP_C0 );
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR1 ))
- EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR, SAVAGE_EMIT_C1, SAVAGE_SKIP_C1 );
- else
- EMIT_PAD( 3 );
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_FOG ))
- EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, SAVAGE_EMIT_FOG, SAVAGE_SKIP_C1 );
- else
- EMIT_PAD( 1 );
- skip &= ~SAVAGE_SKIP_C1;
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX0 )) {
- if (imesa->ptexHack)
- EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_3F_XYW, SAVAGE_EMIT_STQ0, SAVAGE_SKIP_ST0);
- else if (VB->AttribPtr[_TNL_ATTRIB_TEX0]->size == 4)
- assert (0); /* should be caught by savageCheckPTexHack */
- else if (VB->AttribPtr[_TNL_ATTRIB_TEX0]->size >= 2)
- /* The chromium menu emits some 3D tex coords even though no
- * 3D texture is enabled. Ignore the 3rd coordinate. */
- EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_2F, SAVAGE_EMIT_ST0, SAVAGE_SKIP_ST0 );
- else if (VB->AttribPtr[_TNL_ATTRIB_TEX0]->size == 1) {
- EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_1F, SAVAGE_EMIT_S0, SAVAGE_SKIP_S0 );
- EMIT_PAD( 4 );
- } else
- EMIT_PAD( 8 );
- } else
- EMIT_PAD( 8 );
- skip &= ~SAVAGE_SKIP_ST0;
-
- assert (skip == 0);
- imesa->skip = skip;
- return setupIndex;
-}
-
-
-static INLINE GLuint savageChooseVertexFormat_s4( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- DECLARE_RENDERINPUTS(index_bitset);
- GLuint setupIndex = SAVAGE_EMIT_XYZ;
- GLubyte skip;
- GLuint size, mask;
-
- RENDERINPUTS_COPY( index_bitset, tnl->render_inputs_bitset );
- skip = SAVAGE_SKIP_ALL_S4;
- skip &= ~SAVAGE_SKIP_Z; /* all mesa vertices have a z coordinate */
-
- if (RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_FIRST_TEX, _TNL_LAST_TEX ) || !(ctx->_TriangleCaps & DD_FLATSHADE))
- NEED_ATTR( SAVAGE_EMIT_W, SAVAGE_SKIP_W );
-
- /* t_context.c always includes a diffuse color */
- NEED_ATTR( SAVAGE_EMIT_C0, SAVAGE_SKIP_C0 );
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR1 ))
- NEED_ATTR( SAVAGE_EMIT_C1, SAVAGE_SKIP_C1 );
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_FOG ))
- NEED_ATTR( SAVAGE_EMIT_FOG, SAVAGE_SKIP_C1 );
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX0 )) {
- if (imesa->ptexHack)
- NEED_ATTR( SAVAGE_EMIT_STQ0, SAVAGE_SKIP_ST0);
- else if (VB->AttribPtr[_TNL_ATTRIB_TEX0]->size == 4)
- assert (0); /* should be caught by savageCheckPTexHack */
- else if (VB->AttribPtr[_TNL_ATTRIB_TEX0]->size >= 2)
- /* The chromium menu emits some 3D tex coords even though no
- * 3D texture is enabled. Ignore the 3rd coordinate. */
- NEED_ATTR( SAVAGE_EMIT_ST0, SAVAGE_SKIP_ST0 );
- else
- NEED_ATTR( SAVAGE_EMIT_S0, SAVAGE_SKIP_S0 );
- }
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX1 )) {
- if (VB->AttribPtr[_TNL_ATTRIB_TEX1]->size == 4)
- /* projective textures are not supported by the hardware */
- assert (0); /* should be caught by savageCheckPTexHack */
- else if (VB->AttribPtr[_TNL_ATTRIB_TEX1]->size >= 2)
- NEED_ATTR( SAVAGE_EMIT_ST1, SAVAGE_SKIP_ST1 );
- else
- NEED_ATTR( SAVAGE_EMIT_S1, SAVAGE_SKIP_S1 );
- }
-
- /* if nothing changed we can skip the rest */
- if (setupIndex == imesa->SetupIndex && imesa->vertex_size != 0)
- return setupIndex;
-
- if (imesa->enable_vdma) {
- mask = SAVAGE_SKIP_W;
- size = 10 - (skip & 1) - (skip >> 1 & 1) -
- (skip >> 2 & 1) - (skip >> 3 & 1) - (skip >> 4 & 1) -
- (skip >> 5 & 1) - (skip >> 6 & 1) - (skip >> 7 & 1);
-
- while (size < 8) {
- if (skip & mask) {
- skip &= ~mask;
- size++;
- }
- mask <<= 1;
- }
- }
-
- imesa->vertex_attr_count = 0;
-
- if (skip & SAVAGE_SKIP_W)
- DO_EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_3F_VIEWPORT );
- else if (setupIndex & SAVAGE_EMIT_W)
- DO_EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F_VIEWPORT );
- else {
- DO_EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_3F_VIEWPORT );
- EMIT_PAD( 4 );
- }
-
- DO_EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA );
-
- if (!(skip & SAVAGE_SKIP_C1)) {
- if (!(setupIndex & (SAVAGE_EMIT_C1|SAVAGE_EMIT_FOG)))
- EMIT_PAD( 4 );
- else {
- if (setupIndex & SAVAGE_EMIT_C1)
- DO_EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR );
- else
- EMIT_PAD( 3 );
- if (setupIndex & SAVAGE_EMIT_FOG)
- DO_EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F );
- else
- EMIT_PAD( 1 );
- }
- }
-
- if ((skip & SAVAGE_SKIP_ST0) != SAVAGE_SKIP_ST0) {
- if ((setupIndex & SAVAGE_EMIT_STQ0) == SAVAGE_EMIT_STQ0)
- DO_EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_3F_XYW );
- else if ((setupIndex & SAVAGE_EMIT_ST0) == SAVAGE_EMIT_ST0)
- DO_EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_2F );
- else if ((setupIndex & SAVAGE_EMIT_ST0) == SAVAGE_EMIT_S0) {
- DO_EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_1F );
- if (!(skip & SAVAGE_SKIP_T0)) EMIT_PAD( 4 );
- } else {
- if (!(skip & SAVAGE_SKIP_S0)) EMIT_PAD( 4 );
- if (!(skip & SAVAGE_SKIP_T0)) EMIT_PAD( 4 );
- }
- }
-
- if ((skip & SAVAGE_SKIP_ST1) != SAVAGE_SKIP_ST1) {
- if ((setupIndex & SAVAGE_EMIT_ST1) == SAVAGE_EMIT_ST1)
- DO_EMIT_ATTR( _TNL_ATTRIB_TEX1, EMIT_2F );
- else if ((setupIndex & SAVAGE_EMIT_ST1) == SAVAGE_EMIT_S1) {
- DO_EMIT_ATTR( _TNL_ATTRIB_TEX1, EMIT_1F );
- if (!(skip & SAVAGE_SKIP_T1)) EMIT_PAD( 4 );
- } else {
- if (!(skip & SAVAGE_SKIP_S1)) EMIT_PAD( 4 );
- if (!(skip & SAVAGE_SKIP_T1)) EMIT_PAD( 4 );
- }
- }
-
- imesa->skip = skip;
- return setupIndex;
-}
-
-
-static void savageRenderStart( struct gl_context *ctx )
-{
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- GLuint setupIndex = SAVAGE_EMIT_XYZ;
- GLboolean ptexHack;
-
- /* Check if we need to apply the ptex hack. Choose a new render
- * state if necessary. (Note: this can't be done in
- * savageRunPipeline, since the number of vertex coordinates can
- * change in the pipeline. texmat or texgen or both?) */
- ptexHack = savageCheckPTexHack( ctx );
- if (ptexHack != imesa->ptexHack) {
- imesa->ptexHack = ptexHack;
- savageChooseRenderState (ctx);
- }
- /* Handle fallback cases identified in savageCheckPTexHack. */
- if (SAVAGE_CONTEXT(ctx)->Fallback) {
- tnl->Driver.Render.Start(ctx);
- return;
- }
-
- /* Important:
- */
- VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr;
-
- if (imesa->savageScreen->chipset < S3_SAVAGE4) {
- setupIndex = savageChooseVertexFormat_s3d(ctx);
- } else {
- setupIndex = savageChooseVertexFormat_s4(ctx);
- }
-
- /* Need to change the vertex emit code if the SetupIndex changed or
- * is set for the first time (indicated by vertex_size == 0). */
- if (setupIndex != imesa->SetupIndex || imesa->vertex_size == 0) {
- GLuint hwVertexSize;
- imesa->vertex_size =
- _tnl_install_attrs( ctx,
- imesa->vertex_attrs,
- imesa->vertex_attr_count,
- imesa->hw_viewport, 0 );
- imesa->vertex_size >>= 2;
- imesa->SetupIndex = setupIndex;
-
- hwVertexSize = imesa->vertex_size;
- if (setupIndex & SAVAGE_EMIT_Q0) {
- /* The vertex setup code emits homogenous texture
- * coordinates. They are converted to normal 2D coords by
- * savage_ptex_tri/line/point. Now we have two different
- * vertex sizes. Functions that emit vertices to the hardware
- * need to use HwVertexSize, anything that manipulates the
- * vertices generated by t_vertex uses vertex_size. */
- hwVertexSize--;
- assert (imesa->ptexHack);
- } else
- assert (!imesa->ptexHack);
-
- if (hwVertexSize != imesa->HwVertexSize) {
- /* Changing the vertex size: flush vertex and command buffer and
- * discard the DMA buffer, if we were using one. */
- savageFlushVertices(imesa);
- savageFlushCmdBuf(imesa, GL_TRUE);
- if (hwVertexSize == 8 && imesa->enable_vdma) {
- if (SAVAGE_DEBUG & DEBUG_DMA)
- fprintf (stderr, "Using DMA, skip=0x%02x\n", imesa->skip);
- /* we can use vertex dma */
- imesa->vtxBuf = &imesa->dmaVtxBuf;
- } else {
- if (SAVAGE_DEBUG & DEBUG_DMA)
- fprintf (stderr, "Not using DMA, skip=0x%02x\n", imesa->skip);
- imesa->vtxBuf = &imesa->clientVtxBuf;
- }
- imesa->HwVertexSize = hwVertexSize;
- }
- }
-}
-
-static void savageRenderFinish( struct gl_context *ctx )
-{
- /* Flush the last primitive now, before any state is changed. */
- savageFlushVertices(SAVAGE_CONTEXT(ctx));
-
- if (SAVAGE_CONTEXT(ctx)->RenderIndex & SAVAGE_FALLBACK_BIT)
- _swrast_flush( ctx );
-}
-
-
-/**********************************************************************/
-/* Transition to/from hardware rasterization. */
-/**********************************************************************/
-
-static const char * const fallbackStrings[] = {
- "Texture mode",
- "Draw buffer",
- "Read buffer",
- "Color mask",
- "Specular",
- "LogicOp",
- "glEnable(GL_STENCIL) without hw stencil buffer",
- "glRenderMode(selection or feedback)",
- "glBlendEquation",
- "Hardware rasterization disabled",
- "Projective texture",
-};
-
-void savageFallback( struct gl_context *ctx, GLuint bit, GLboolean mode )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
- GLuint oldfallback = imesa->Fallback;
- GLuint index;
- for (index = 0; (1 << index) < bit; ++index);
-
- if (mode) {
- imesa->Fallback |= bit;
- if (oldfallback == 0) {
- /* the first fallback */
- _swsetup_Wakeup( ctx );
- imesa->RenderIndex = ~0;
- }
- if (!(oldfallback & bit) && (SAVAGE_DEBUG & DEBUG_FALLBACKS))
- fprintf (stderr, "Savage begin fallback: 0x%x %s\n",
- bit, fallbackStrings[index]);
- }
- else {
- imesa->Fallback &= ~bit;
- if (oldfallback == bit) {
- /* the last fallback */
- _swrast_flush( ctx );
- tnl->Driver.Render.Start = savageRenderStart;
- tnl->Driver.Render.PrimitiveNotify = savageRenderPrimitive;
- tnl->Driver.Render.Finish = savageRenderFinish;
-
- tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
- tnl->Driver.Render.CopyPV = _tnl_copy_pv;
- tnl->Driver.Render.Interp = _tnl_interp;
-
- _tnl_invalidate_vertex_state( ctx, ~0 );
- _tnl_invalidate_vertices( ctx, ~0 );
- _tnl_install_attrs( ctx,
- imesa->vertex_attrs,
- imesa->vertex_attr_count,
- imesa->hw_viewport, 0 );
-
- imesa->new_gl_state |= _SAVAGE_NEW_RENDER_STATE;
- }
- if ((oldfallback & bit) && (SAVAGE_DEBUG & DEBUG_FALLBACKS))
- fprintf (stderr, "Savage end fallback: 0x%x %s\n",
- bit, fallbackStrings[index]);
- }
-}
-
-
-/**********************************************************************/
-/* Initialization. */
-/**********************************************************************/
-
-void savageInitTriFuncs( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- static int firsttime = 1;
-
- if (firsttime) {
- init_rast_tab();
- firsttime = 0;
- }
-
- tnl->Driver.RunPipeline = savageRunPipeline;
- tnl->Driver.Render.Start = savageRenderStart;
- tnl->Driver.Render.Finish = savageRenderFinish;
- tnl->Driver.Render.PrimitiveNotify = savageRenderPrimitive;
- tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
-
- tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
- tnl->Driver.Render.CopyPV = _tnl_copy_pv;
- tnl->Driver.Render.Interp = _tnl_interp;
-
- _tnl_init_vertices( ctx, ctx->Const.MaxArrayLockSize + 12,
- (6 + 2*ctx->Const.MaxTextureUnits) * sizeof(GLfloat) );
-
- SAVAGE_CONTEXT(ctx)->verts = (char *)tnl->clipspace.vertex_buf;
-}
diff --git a/src/mesa/drivers/dri/savage/savagetris.h b/src/mesa/drivers/dri/savage/savagetris.h
deleted file mode 100644
index 5dcae78f760..00000000000
--- a/src/mesa/drivers/dri/savage/savagetris.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/**************************************************************************
-
-Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
- VA Linux Systems Inc., Fremont, California.
-
-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
-on 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
-ATI, VA LINUX SYSTEMS AND/OR THEIR 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell
- * Felix Kuehling
- *
- */
-
-#ifndef __R128_TRIS_H__
-#define __R128_TRIS_H__
-
-#include "main/mtypes.h"
-
-extern void savageInitTriFuncs( struct gl_context *ctx );
-
-
-extern void savageFallback( struct gl_context *ctx, GLuint bit, GLboolean mode );
-#define FALLBACK( ctx, bit, mode ) savageFallback( ctx, bit, mode )
-
-
-#endif /* __R128_TRIS_H__ */
diff --git a/src/mesa/drivers/dri/savage/server/savage_dri.h b/src/mesa/drivers/dri/savage/server/savage_dri.h
deleted file mode 100644
index 214d9851aff..00000000000
--- a/src/mesa/drivers/dri/savage/server/savage_dri.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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
- * VIA, S3 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.
- */
-
-
-#ifndef __SAVAGE_DRI_H__
-#define __SAVAGE_DRI_H__
-
-#include "drm.h"
-
-typedef struct {
- int chipset;
- int width;
- int height;
- int mem;
- int cpp;
- int zpp;
-
- int agpMode; /* 0 for PCI cards */
-
- unsigned int sarea_priv_offset;
-
- unsigned int bufferSize; /* size of DMA buffers */
-
- unsigned int frontbufferSize;
- unsigned int frontOffset;
-
- unsigned int backbufferSize;
- unsigned int backOffset;
-
- unsigned int depthbufferSize;
- unsigned int depthOffset;
-
- unsigned int textureOffset;
- unsigned int textureSize;
- int logTextureGranularity;
-
- /* Linear aperture */
- drm_handle_t apertureHandle;
- unsigned int apertureSize;
- unsigned int aperturePitch; /* in byte */
-
- /* Status page (probably not needed, but no harm, read-only) */
- drm_handle_t statusHandle;
- unsigned int statusSize;
-
- /* AGP textures */
- drm_handle_t agpTextureHandle;
- unsigned int agpTextureSize;
- int logAgpTextureGranularity;
-
- /* Not sure about this one */
- drm_handle_t xvmcSurfHandle; /* ? */
-} SAVAGEDRIRec, *SAVAGEDRIPtr;
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/Makefile b/src/mesa/drivers/dri/sis/Makefile
deleted file mode 100644
index 0e0bf0d4eac..00000000000
--- a/src/mesa/drivers/dri/sis/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# src/mesa/drivers/dri/sis/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = sis_dri.so
-
-include ../Makefile.defines
-
-DRIVER_SOURCES = \
- sis6326_state.c \
- sis6326_clear.c \
- sis_alloc.c \
- sis_clear.c \
- sis_context.c \
- sis_dd.c \
- sis_fog.c \
- sis_lock.c \
- sis_screen.c \
- sis_span.c \
- sis_state.c \
- sis_stencil.c \
- sis_tex.c \
- sis_texstate.c \
- sis_tris.c
-
-C_SOURCES = \
- $(COMMON_SOURCES) \
- $(DRIVER_SOURCES)
-
-ASM_SOURCES =
-
-include ../Makefile.targets
-
diff --git a/src/mesa/drivers/dri/sis/server/sis_common.h b/src/mesa/drivers/dri/sis/server/sis_common.h
deleted file mode 100644
index bd9bab846fc..00000000000
--- a/src/mesa/drivers/dri/sis/server/sis_common.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Common header definitions for SiS 2D/3D/DRM suite
- *
- * Copyright (C) 2003 Eric Anholt
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the copyright holder not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The copyright holder makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author:
- * Eric Anholt
- *
- */
-
-#ifndef _SIS_COMMON_H_
-#define _SIS_COMMON_H_
-
-#define DRM_SIS_FB_ALLOC 0x04
-#define DRM_SIS_FB_FREE 0x05
-#define DRM_SIS_FLIP 0x08
-#define DRM_SIS_FLIP_INIT 0x09
-#define DRM_SIS_FLIP_FINAL 0x10
-#define DRM_SIS_AGP_INIT 0x13
-#define DRM_SIS_AGP_ALLOC 0x14
-#define DRM_SIS_AGP_FREE 0x15
-#define DRM_SIS_FB_INIT 0x16
-
-typedef struct {
- int context;
- unsigned long offset;
- unsigned long size;
- void *free;
-} drm_sis_mem_t;
-
-typedef struct {
- unsigned long offset, size;
-} drm_sis_agp_t;
-
-typedef struct {
- unsigned long offset, size;
-} drm_sis_fb_t;
-
-typedef struct {
- unsigned int left, right;
-} drm_sis_flip_t;
-
-#endif /* _SIS_COMMON_H_ */
-
diff --git a/src/mesa/drivers/dri/sis/server/sis_dri.h b/src/mesa/drivers/dri/sis/server/sis_dri.h
deleted file mode 100644
index 7d8f507115d..00000000000
--- a/src/mesa/drivers/dri/sis/server/sis_dri.h
+++ /dev/null
@@ -1,75 +0,0 @@
-
-/* modified from tdfx_dri.h */
-
-#ifndef _SIS_DRI_
-#define _SIS_DRI_
-
-#include "xf86drm.h"
-#include "drm.h"
-
-#define SIS_MAX_DRAWABLES 256
-#define SISIOMAPSIZE (64*1024)
-
-typedef struct {
- int CtxOwner;
- int QueueLength;
- unsigned int AGPCmdBufNext;
- unsigned int FrameCount;
-#ifdef SIS315DRI
- /* For 315 series */
- unsigned long sharedWPoffset;
-#endif
-#if 0
- unsigned char *AGPCmdBufBase;
- unsigned long AGPCmdBufAddr;
- unsigned long AGPCmdBufOffset;
- unsigned int AGPCmdBufSize;
- unsigned long AGPCmdBufNext;
-#endif
-} SISSAREAPriv, *SISSAREAPrivPtr;
-
-#define AGPVtxBufNext AGPCmdBufNext
-
-#define SIS_FRONT 0
-#define SIS_BACK 1
-#define SIS_DEPTH 2
-
-typedef struct {
- drm_handle_t handle;
- drmSize size;
-} sisRegion, *sisRegionPtr;
-
-typedef struct {
- sisRegion regs, agp;
- int deviceID;
- int width;
- int height;
- int mem; /* unused in Mesa 3 DRI */
- int bytesPerPixel;
- int priv1; /* unused in Mesa 3 DRI */
- int priv2; /* unused in Mesa 3 DRI */
- int fbOffset; /* unused in Mesa 3 DRI */
- int backOffset; /* unused in Mesa 3 DRI */
- int depthOffset; /* unused in Mesa 3 DRI */
- int textureOffset; /* unused in Mesa 3 DRI */
- int textureSize; /* unused in Mesa 3 DRI */
- unsigned int AGPCmdBufOffset;
- unsigned int AGPCmdBufSize;
- int irqEnabled; /* unused in Mesa 3 DRI */
- unsigned int scrnX, scrnY; /* unused in Mesa 3 DRI */
-} SISDRIRec, *SISDRIPtr;
-
-#define AGPVtxBufOffset AGPCmdBufOffset
-#define AGPVtxBufSize AGPCmdBufSize
-
-typedef struct {
- /* Nothing here yet */
- int dummy;
-} SISConfigPrivRec, *SISConfigPrivPtr;
-
-typedef struct {
- /* Nothing here yet */
- int dummy;
-} SISDRIContextRec, *SISDRIContextPtr;
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/sis6326_clear.c b/src/mesa/drivers/dri/sis/sis6326_clear.c
deleted file mode 100644
index fba6c7f2d7d..00000000000
--- a/src/mesa/drivers/dri/sis/sis6326_clear.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2005 Eric Anholt
- * 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, 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
- *
- */
-
-#include "sis_context.h"
-#include "sis_state.h"
-#include "sis_lock.h"
-#include "sis_reg.h"
-
-#include "swrast/swrast.h"
-#include "main/macros.h"
-
-static void sis_clear_front_buffer(struct gl_context *ctx, GLenum mask, GLint x,
- GLint y, GLint width, GLint height);
-static void sis_clear_back_buffer(struct gl_context *ctx, GLenum mask, GLint x,
- GLint y, GLint width, GLint height);
-static void sis_clear_z_buffer(struct gl_context * ctx, GLbitfield mask, GLint x,
- GLint y, GLint width, GLint height );
-
-static void
-set_color_pattern( sisContextPtr smesa, GLubyte red, GLubyte green,
- GLubyte blue, GLubyte alpha )
-{
- /* XXX only RGB565 and ARGB8888 */
- switch (smesa->colorFormat)
- {
- case DST_FORMAT_ARGB_8888:
- smesa->clearColorPattern = (alpha << 24) +
- (red << 16) + (green << 8) + (blue);
- break;
- case DST_FORMAT_RGB_565:
- smesa->clearColorPattern = ((red >> 3) << 11) +
- ((green >> 2) << 5) + (blue >> 3);
- smesa->clearColorPattern |= smesa->clearColorPattern << 16;
- break;
- default:
- sis_fatal_error("Bad dst color format\n");
- }
-}
-
-void
-sis6326UpdateZPattern(sisContextPtr smesa, GLclampd z)
-{
- CLAMPED_FLOAT_TO_USHORT(smesa->clearZStencilPattern, z * 65535.0);
-}
-
-void
-sis6326DDClear(struct gl_context *ctx, GLbitfield mask)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLint x1, y1, width1, height1;
-
- /* get region after locking: */
- x1 = ctx->DrawBuffer->_Xmin;
- y1 = ctx->DrawBuffer->_Ymin;
- width1 = ctx->DrawBuffer->_Xmax - x1;
- height1 = ctx->DrawBuffer->_Ymax - y1;
- y1 = Y_FLIP(y1 + height1 - 1);
-
- /* XXX: Scissoring */
-
- fprintf(stderr, "Clear\n");
-
- /* Mask out any non-existent buffers */
- if (smesa->depth.offset == 0 || !ctx->Depth.Mask)
- mask &= ~BUFFER_BIT_DEPTH;
-
- LOCK_HARDWARE();
-
- if (mask & BUFFER_BIT_FRONT_LEFT) {
- sis_clear_front_buffer(ctx, mask, x1, y1, width1, height1);
- mask &= ~BUFFER_BIT_FRONT_LEFT;
- }
-
- if (mask & BUFFER_BIT_BACK_LEFT) {
- sis_clear_back_buffer(ctx, mask, x1, y1, width1, height1);
- mask &= ~BUFFER_BIT_BACK_LEFT;
- }
-
- if (mask & BUFFER_BIT_DEPTH) {
- sis_clear_z_buffer(ctx, mask, x1, y1, width1, height1);
- mask &= ~BUFFER_BIT_DEPTH;
- }
-
- UNLOCK_HARDWARE();
-
- if (mask != 0)
- _swrast_Clear(ctx, mask);
-}
-
-
-void
-sis6326DDClearColor(struct gl_context *ctx, const GLfloat color[4])
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLubyte c[4];
-
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-
- set_color_pattern( smesa, c[0], c[1], c[2], c[3] );
-}
-
-void
-sis6326DDClearDepth(struct gl_context *ctx, GLclampd d)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- sis6326UpdateZPattern(smesa, d);
-}
-
-static void
-sis_clear_back_buffer(struct gl_context *ctx, GLenum mask, GLint x, GLint y,
- GLint width, GLint height)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- /* XXX: The order of writing these registers seems to matter, while
- * it actually shouldn't.
- */
- mWait3DCmdQueue(6);
- MMIO(REG_6326_BitBlt_DstSrcPitch, smesa->back.pitch << 16);
- MMIO(REG_6326_BitBlt_fgColor, SiS_ROP_PATCOPY |
- smesa->clearColorPattern);
- MMIO(REG_6326_BitBlt_bgColor, SiS_ROP_PATCOPY |
- smesa->clearColorPattern);
- MMIO(REG_6326_BitBlt_DstAddr, smesa->back.offset +
- (y+height) * smesa->back.pitch +
- (x+width) * smesa->bytesPerPixel);
- MMIO(REG_6326_BitBlt_HeightWidth, ((height-1) << 16) |
- (width * smesa->bytesPerPixel));
- MMIO_WMB();
- MMIO(REG_6326_BitBlt_Cmd, BLT_PAT_BG);
-}
-
-static void
-sis_clear_front_buffer(struct gl_context *ctx, GLenum mask, GLint x, GLint y,
- GLint width, GLint height)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- int count;
- drm_clip_rect_t *pExtents = NULL;
-
- pExtents = smesa->driDrawable->pClipRects;
- count = smesa->driDrawable->numClipRects;
-
- mWait3DCmdQueue(3);
- MMIO(REG_6326_BitBlt_DstSrcPitch, smesa->front.pitch << 16);
- MMIO(REG_6326_BitBlt_fgColor, SiS_ROP_PATCOPY |
- smesa->clearColorPattern);
- MMIO(REG_6326_BitBlt_bgColor, SiS_ROP_PATCOPY |
- smesa->clearColorPattern);
-
- while (count--) {
- GLint x1 = pExtents->x1 - smesa->driDrawable->x;
- GLint y1 = pExtents->y1 - smesa->driDrawable->y;
- GLint x2 = pExtents->x2 - smesa->driDrawable->x;
- GLint y2 = pExtents->y2 - smesa->driDrawable->y;
-
- if (x > x1)
- x1 = x;
- if (y > y1)
- y1 = y;
-
- if (x + width < x2)
- x2 = x + width;
- if (y + height < y2)
- y2 = y + height;
- width = x2 - x1;
- height = y2 - y1;
-
- pExtents++;
-
- if (width <= 0 || height <= 0)
- continue;
-
- mWait3DCmdQueue(3);
- MMIO(REG_6326_BitBlt_DstAddr, smesa->front.offset +
- (y2-1) * smesa->front.pitch + x2 * smesa->bytesPerPixel);
- MMIO(REG_6326_BitBlt_HeightWidth, ((height-1) << 16) |
- (width * smesa->bytesPerPixel));
- MMIO_WMB();
- MMIO(REG_6326_BitBlt_Cmd, BLT_PAT_BG);
- }
-}
-
-static void
-sis_clear_z_buffer(struct gl_context * ctx, GLbitfield mask, GLint x, GLint y,
- GLint width, GLint height)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- mWait3DCmdQueue(6);
- MMIO(REG_6326_BitBlt_DstAddr,
- smesa->depth.offset + y * smesa->depth.pitch + x * 2);
- MMIO(REG_6326_BitBlt_DstSrcPitch, smesa->depth.pitch << 16);
- MMIO(REG_6326_BitBlt_HeightWidth, ((height-1) << 16) | (width * 2));
- MMIO(REG_6326_BitBlt_fgColor, SiS_ROP_PATCOPY | smesa->clearZStencilPattern);
- MMIO(REG_6326_BitBlt_bgColor, SiS_ROP_PATCOPY | smesa->clearZStencilPattern);
- MMIO_WMB();
- MMIO(REG_6326_BitBlt_Cmd, BLT_PAT_BG | BLT_XINC | BLT_YINC);
-}
-
diff --git a/src/mesa/drivers/dri/sis/sis6326_reg.h b/src/mesa/drivers/dri/sis/sis6326_reg.h
deleted file mode 100644
index 8e645f0799c..00000000000
--- a/src/mesa/drivers/dri/sis/sis6326_reg.h
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- * Copyright 2005 Eric Anholt
- * 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, 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
- *
- */
-
-#ifndef _sis6326_reg_h_
-#define _sis6326_reg_h_
-
-#define REG_6326_BitBlt_SrcAddr 0x8280
-#define REG_6326_BitBlt_DstAddr 0x8284
-#define REG_6326_BitBlt_DstSrcPitch 0x8288
-#define REG_6326_BitBlt_HeightWidth 0x828c
-#define REG_6326_BitBlt_fgColor 0x8290
-#define REG_6326_BitBlt_bgColor 0x8294
-#define REG_6326_BitBlt_Mask30 0x8298
-#define REG_6326_BitBlt_Mask74 0x829c
-#define REG_6326_BitBlt_ClipTopLeft 0x82a0
-#define REG_6326_BitBlt_ClitBottomRight 0x82a4
-#define REG_6326_BitBlt_Cmd 0x82a8
-#define REG_6326_BitBlt_Pat 0x82ac
-
-#define REG_6326_3D_TSFSa 0x8800
-#define REG_6326_3D_TSZa 0x8804
-#define REG_6326_3D_TSXa 0x8808
-#define REG_6326_3D_TSYa 0x880C
-#define REG_6326_3D_TSARGBa 0x8810
-#define REG_6326_3D_TSUa 0x8814
-#define REG_6326_3D_TSVa 0x8818
-#define REG_6326_3D_TSWa 0x881C
-
-#define REG_6326_3D_TSFSb 0x8820
-#define REG_6326_3D_TSZb 0x8824
-#define REG_6326_3D_TSXb 0x8828
-#define REG_6326_3D_TSYb 0x882C
-#define REG_6326_3D_TSARGBb 0x8830
-#define REG_6326_3D_TSUb 0x8834
-#define REG_6326_3D_TSVb 0x8838
-#define REG_6326_3D_TSWb 0x883C
-
-#define REG_6326_3D_TSFSc 0x8840
-#define REG_6326_3D_TSZc 0x8844
-#define REG_6326_3D_TSXc 0x8848
-#define REG_6326_3D_TSYc 0x884C
-#define REG_6326_3D_TSARGBc 0x8850
-#define REG_6326_3D_TSUc 0x8854
-#define REG_6326_3D_TSVc 0x8858
-#define REG_6326_3D_TSWc 0x885C
-
-#define REG_6326_3D_TEnable 0x8A00
-#define REG_6326_3D_ZSet 0x8A04
-#define REG_6326_3D_ZAddress 0x8A08
-
-#define REG_6326_3D_AlphaSet 0x8A0C
-#define REG_6326_3D_AlphaAddress 0x8A10
-#define REG_6326_3D_DstSet 0x8A14
-#define REG_6326_3D_DstAddress 0x8A18
-#define REG_6326_3D_LinePattern 0x8A1C
-#define REG_6326_3D_FogSet 0x8A20
-
-#define REG_6326_3D_DstSrcBlendMode 0x8A28
-
-#define REG_6326_3D_ClipTopBottom 0x8A30
-#define REG_6326_3D_ClipLeftRight 0x8A34
-
-#define REG_6326_3D_TextureSet 0x8A38
-#define REG_6326_3D_TextureBlendSet 0x8A3C
-/* Low transparency value is in TextureBlendSet */
-#define REG_6326_3D_TextureTransparencyColorHigh 0x8A40
-
-#define REG_6326_3D_TextureAddress0 0x8A44
-#define REG_6326_3D_TextureAddress1 0x8A48
-#define REG_6326_3D_TextureAddress2 0x8A4C
-#define REG_6326_3D_TextureAddress3 0x8A50
-#define REG_6326_3D_TextureAddress4 0x8A54
-#define REG_6326_3D_TextureAddress5 0x8A58
-#define REG_6326_3D_TextureAddress6 0x8A5C
-#define REG_6326_3D_TextureAddress7 0x8A60
-#define REG_6326_3D_TextureAddress8 0x8A64
-#define REG_6326_3D_TextureAddress9 0x8A68
-
-#define REG_6326_3D_TexturePitch01 0x8A6C
-#define REG_6326_3D_TexturePitch23 0x8A70
-#define REG_6326_3D_TexturePitch45 0x8A74
-#define REG_6326_3D_TexturePitch67 0x8A78
-#define REG_6326_3D_TexturePitch89 0x8A7C
-
-#define REG_6326_3D_TextureWidthHeight 0x8A80
-#define REG_6326_3D_TextureBorderColor 0x8A90
-
-#define REG_6326_3D_EndPrimitiveList 0x8Aff
-
-/*
- * REG_6326_BitBlt_fgColor (0x8290-0x8293)
- * REG_6326_BitBlt_bgColor (0x8294-0x8297)
- */
-#define MASK_BltRop 0xff000000
-#define MASK_BltColor 0x00ffffff
-
-#define SiS_ROP_SRCCOPY 0xcc000000
-#define SiS_ROP_PATCOPY 0xf0000000
-
-/*
- * REG_6326_BitBlt_Cmd (0x82a8-0x82ab)
- */
-#define MASK_QueueStatus 0x0000ffff
-#define MASK_BltCmd0 0x00ff0000
-#define MASK_BltCmd1 0xff000000
-
-#define BLT_SRC_BG 0x00000000
-#define BLT_SRC_FG 0x00010000
-#define BLT_SRC_VID 0x00020000
-#define BLT_SRC_CPU 0x00030000
-#define BLT_PAT_BG 0x00000000
-#define BLT_PAT_FG 0x00040000
-#define BLT_PAT_PAT 0x000b0000
-#define BLT_XINC 0x00100000
-#define BLT_YINC 0x00200000
-#define BLT_CLIP 0x00400000
-#define BLT_BUSY 0x04000000
-
-/*
- * REG_3D_PrimitiveSet -- Define Fire Primitive Mask (89F8h-89FBh)
- */
-#define MASK_6326_DrawPrimitiveCommand 0x00000007
-#define MASK_6326_SetFirePosition 0x00000F00
-#define MASK_6326_ShadingMode 0x001c0000
-#define MASK_6326_Direction 0x0003f000
-
-/* OP_3D_{POINT,LINE,TRIANGLE}_DRAW same as 300-series */
-/* OP_3D_DIRECTION*_ same as 300-series */
-
-#define OP_6326_3D_FIRE_TFIRE 0x00000000
-#define OP_6326_3D_FIRE_TSARGBa 0x00000100
-#define OP_6326_3D_FIRE_TSWa 0x00000200
-#define OP_6326_3D_FIRE_TSARGBb 0x00000300
-#define OP_6326_3D_FIRE_TSWb 0x00000400
-#define OP_6326_3D_FIRE_TSARGBc 0x00000500
-#define OP_6326_3D_FIRE_TSWc 0x00000600
-#define OP_6326_3D_FIRE_TSVc 0x00000700
-
-#define OP_6326_3D_ATOP 0x00000000
-#define OP_6326_3D_BTOP 0x00010000
-#define OP_6326_3D_CTOP 0x00020000
-#define OP_6326_3D_AMID 0x00000000
-#define OP_6326_3D_BMID 0x00004000
-#define OP_6326_3D_CMID 0x00008000
-#define OP_6326_3D_ABOT 0x00000000
-#define OP_6326_3D_BBOT 0x00001000
-#define OP_6326_3D_CBOT 0x00002000
-
-#define OP_6326_3D_SHADE_FLAT_TOP 0x00040000
-#define OP_6326_3D_SHADE_FLAT_MID 0x00080000
-#define OP_6326_3D_SHADE_FLAT_BOT 0x000c0000
-#define OP_6326_3D_SHADE_FLAT_GOURAUD 0x00100000
-
-
-/*
- * REG_6326_3D_EngineFire
- */
-#define MASK_CmdQueueLen 0x0FFF0000
-#define ENG_3DIDLEQE 0x00000002
-#define ENG_3DIDLE 0x00000001
-
-/*
- * REG_6326_3D_TEnable -- Define Capility Enable Mask (8A00h-8A03h)
- */
-#define S_ENABLE_Dither (1 << 0)
-#define S_ENABLE_Transparency (1 << 1)
-#define S_ENABLE_Blend (1 << 2)
-#define S_ENABLE_Fog (1 << 3)
-#define S_ENABLE_Specular (1 << 4)
-#define S_ENABLE_LargeCache (1 << 5)
-#define S_ENABLE_TextureCache (1 << 7)
-#define S_ENABLE_TextureTransparency (1 << 8)
-#define S_ENABLE_TexturePerspective (1 << 9)
-#define S_ENABLE_Texture (1 << 10)
-#define S_ENABLE_PrimSetup (1 << 11)
-#define S_ENABLE_LinePattern (1 << 12)
-#define S_ENABLE_StippleAlpha (1 << 13) /* requires S_ENABLE_Stipple */
-#define S_ENABLE_Stipple (1 << 14)
-#define S_ENABLE_AlphaBuffer (1 << 16)
-#define S_ENABLE_AlphaTest (1 << 17)
-#define S_ENABLE_AlphaWrite (1 << 18)
-#define S_ENABLE_ZTest (1 << 20)
-#define S_ENABLE_ZWrite (1 << 21)
-
-/*
- * REG_3D_ZSet -- Define Z Buffer Setting Mask (8A08h-8A0Bh)
- */
-#define MASK_6326_ZBufferPitch 0x00003FFF
-#define MASK_6326_ZTestMode 0x00070000
-#define MASK_6326_ZBufferFormat 0x00100000
-
-#define S_ZSET_FORMAT_8 0x00000000
-#define S_ZSET_FORMAT_16 0x00100000
-
-#define S_ZSET_PASS_NEVER 0x00000000
-#define S_ZSET_PASS_LESS 0x00010000
-#define S_ZSET_PASS_EQUAL 0x00020000
-#define S_ZSET_PASS_LEQUAL 0x00030000
-#define S_ZSET_PASS_GREATER 0x00040000
-#define S_ZSET_PASS_NOTEQUAL 0x00050000
-#define S_ZSET_PASS_GEQUAL 0x00060000
-#define S_ZSET_PASS_ALWAYS 0x00070000
-
-/*
- * REG_3D_AlphaSet -- Define Alpha Buffer Setting Mask (8A0Ch-8A0Fh)
- */
-#define MASK_AlphaBufferPitch 0x000003FF
-#define MASK_AlphaRefValue 0x00FF0000
-#define MASK_AlphaTestMode 0x07000000
-#define MASK_AlphaBufferFormat 0x30000000
-
-#define S_ASET_FORMAT_8 0x30000000
-
-#define S_ASET_PASS_NEVER 0x00000000
-#define S_ASET_PASS_LESS 0x01000000
-#define S_ASET_PASS_EQUAL 0x02000000
-#define S_ASET_PASS_LEQUAL 0x03000000
-#define S_ASET_PASS_GREATER 0x04000000
-#define S_ASET_PASS_NOTEQUAL 0x05000000
-#define S_ASET_PASS_GEQUAL 0x06000000
-#define S_ASET_PASS_ALWAYS 0x07000000
-
-/*
- * REG_3D_DstSet -- Define Destination Buffer Setting Mask (8A14h-8A17h)
- */
-/* pitch, format, depth, rgborder, rop bits same as 300-series */
-
-/*
- * REG_6326_3D_FogSet -- Define Fog Mask (8A20h-8A23h)
- */
-#define MASK_6326_FogColor 0x00FFFFFF
-#define MASK_6326_FogMode 0x01000000
-
-#define FOGMODE_6326_CONST 0x00000000
-#define FOGMODE_6326_LINEAR 0x01000000
-
-/*
- * REG_6326_3D_DstSrcBlendMode (0x8A28 - 0x8A2B)
- */
-#define MASK_6326_SrcBlendMode 0xf0000000
-#define MASK_6326_DstBlendMode 0x0f000000
-#define MASK_6326_TransparencyColor 0x00ffffff
-
-#define S_DBLEND_ZERO 0x00000000
-#define S_DBLEND_ONE 0x10000000
-#define S_DBLEND_SRC_COLOR 0x20000000
-#define S_DBLEND_INV_SRC_COLOR 0x30000000
-#define S_DBLEND_SRC_ALPHA 0x40000000
-#define S_DBLEND_INV_SRC_ALPHA 0x50000000
-#define S_DBLEND_DST_ALPHA 0x60000000
-#define S_DBLEND_INV_DST_ALPHA 0x70000000
-
-#define S_SBLEND_ZERO 0x00000000
-#define S_SBLEND_ONE 0x01000000
-#define S_SBLEND_SRC_ALPHA 0x04000000
-#define S_SBLEND_INV_SRC_ALPHA 0x05000000
-#define S_SBLEND_DST_ALPHA 0x06000000
-#define S_SBLEND_INV_DST_ALPHA 0x07000000
-#define S_SBLEND_DST_COLOR 0x08000000
-#define S_SBLEND_INV_DST_COLOR 0x09000000
-#define S_SBLEND_SRC_ALPHA_SAT 0x0A000000
-#define S_SBLEND_BOTH_SRC_ALPHA 0x0B000000
-#define S_SBLEND_BOTH_INV_SRC_ALPHA 0x0C000000
-
-/*
- * REG_6326_3D_TextureSet (0x8A38 - 0x8A3B)
- */
-#define MASK_6326_TextureMinFilter 0x00000007
-#define MASK_6326_TextureMagFilter 0x00000008
-#define MASK_6326_ClearTexCache 0x00000010
-#define MASK_6326_TextureInSystem 0x00000020
-#define MASK_6326_TextureLevel 0x00000F00
-#define MASK_6326_TextureSignYUVFormat 0x00008000
-#define MASK_6326_TextureMappingMode 0x00FF0000
-
-#define TEXEL_6326_BGR_ORDER 0x80000000
-
-#define TEXEL_6326_INDEX1 0x00000000
-#define TEXEL_6326_INDEX2 0x01000000
-#define TEXEL_6326_INDEX4 0x02000000
-
-#define TEXEL_6326_M4 0x10000000
-#define TEXEL_6326_AM44 0x16000000
-
-#define TEXEL_6326_YUV422 0x20000000 /* YUYV */
-#define TEXEL_6326_YVU422 0x21000000 /* YVYU */
-#define TEXEL_6326_UVY422 0x22000000 /* UYVY */
-#define TEXEL_6326_VUY422 0x23000000 /* VYUY */
-
-#define TEXEL_6326_L1 0x30000000
-#define TEXEL_6326_L2 0x31000000
-#define TEXEL_6326_L4 0x32000000
-#define TEXEL_6326_L8 0x33000000
-
-#define TEXEL_6326_AL22 0x35000000
-#define TEXEL_6326_AL44 0x38000000
-#define TEXEL_6326_AL88 0x3c000000
-
-#define TEXEL_6326_RGB_332_8 0x40000000
-#define TEXEL_6326_RGB_233_8 0x41000000
-#define TEXEL_6326_RGB_232_8 0x42000000
-#define TEXEL_6326_ARGB_1232_8 0x43000000
-
-#define TEXEL_6326_RGB_555_16 0x50000000
-#define TEXEL_6326_RGB_565_16 0x51000000
-#define TEXEL_6326_ARGB_1555_16 0x52000000
-#define TEXEL_6326_ARGB_4444_16 0x53000000
-#define TEXEL_6326_ARGB_8332_16 0x54000000
-#define TEXEL_6326_ARGB_8233_16 0x55000000
-#define TEXEL_6326_ARGB_8232_16 0x56000000
-
-#define TEXEL_6326_ARGB_8565_24 0x63000000
-#define TEXEL_6326_ARGB_8555_24 0x67000000
-#define TEXEL_6326_RGB_888_24 0x68000000
-
-#define TEXEL_6326_ARGB_8888_32 0x73000000
-#define TEXEL_6326_ARGB_0888_32 0x74000000
-
-#define TEX_MAP_WRAP_U 0x00010000
-#define TEX_MAP_WRAP_V 0x00020000
-#define TEX_MAP_MIRROR_U 0x00040000
-#define TEX_MAP_MIRROR_V 0x00080000
-#define TEX_MAP_CLAMP_U 0x00100000
-#define TEX_MAP_CLAMP_V 0x00200000
-#define TEX_MAP_USE_CTB_SMOOTH 0x00400000
-#define TEX_MAP_USE_CTB 0x00800000
-
-#define TEX_FILTER_NEAREST 0x00000000
-#define TEX_FILTER_LINEAR 0x00000001
-#define TEX_FILTER_NEAREST_MIP_NEAREST 0x00000002
-#define TEX_FILTER_NEAREST_MIP_LINEAR 0x00000003
-#define TEX_FILTER_LINEAR_MIP_NEAREST 0x00000004
-#define TEX_FILTER_LINEAR_MIP_LINEAR 0x00000005
-#define TEX_FILTER_MAG_NEAREST 0x00000000
-#define TEX_FILTER_MAG_LINEAR 0x00000008
-
-/*
- * REG_6326_3D_TextureBlendSet (0x8A3C - 0x8A3F)
- */
-#define MASK_TextureTransparencyLowB 0x000000ff
-#define MASK_TextureTransparencyLowG 0x0000FF00
-#define MASK_TextureTransparencyLowR 0x00ff0000
-#define MASK_TextureBlend 0x0f000000
-
-#define TB_C_CS (0 << 26)
-#define TB_C_CF (1 << 26)
-#define TB_C_CFCS (2 << 26) /* also 3 << 26 */
-#define TB_C_CFOMAS_ASCS (4 << 26)
-#define TB_C_CSOMAF_AFCF (6 << 26) /* also 7 << 26 */
-
-#define TB_A_AS (0 << 24)
-#define TB_A_AF (1 << 24)
-#define TB_A_AFAS (1 << 24)
-
-/*
- * REG_6326_3D_TextureTransparencyColorHigh (0x8A40 - 0x8A43)
- */
-#define MASK_TextureTransparencyHighB 0x000000FF
-#define MASK_TextureTransparencyHighG 0x0000FF00
-#define MASK_TextureTransparencyHighR 0x00FF0000
-
-/*
- * REG_3D_TexturePitch01-89 (0x8A6C - 0x8A7F)
- */
-#define MASK_TexturePitchOdd 0x000003FF
-#define MASK_TexturePitchEven 0x03FF0000
-#define SHIFT_TexturePitchEven 16
-
-/*
- * REG_3D_TextureWidthHeightMix (0x8A80 - 0x8A83)
- */
-#define MASK_TextureWidthLog2 0xf0000000
-#define MASK_TextureHeightLog2 0x0f000000
-
-/*
- * REG_3D_TextureBorderColor (0x8A90 - 0x8A93)
- */
-#define MASK_TextureBorderColorB 0x000000FF
-#define MASK_TextureBorderColorG 0x0000FF00
-#define MASK_TextureBorderColorR 0x00FF0000
-#define MASK_TextureBorderColorA 0xFF000000
-
-#endif /* _sis6326_reg_h_ */
diff --git a/src/mesa/drivers/dri/sis/sis6326_state.c b/src/mesa/drivers/dri/sis/sis6326_state.c
deleted file mode 100644
index 9ca58293b43..00000000000
--- a/src/mesa/drivers/dri/sis/sis6326_state.c
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
- * Copyright 2005 Eric Anholt
- * 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, 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
- *
- */
-
-#include "sis_context.h"
-#include "sis_state.h"
-#include "sis_tris.h"
-#include "sis_lock.h"
-#include "sis_tex.h"
-#include "sis_reg.h"
-
-#include "main/context.h"
-#include "main/colormac.h"
-#include "main/state.h"
-#include "swrast/swrast.h"
-#include "vbo/vbo.h"
-#include "tnl/tnl.h"
-#include "swrast_setup/swrast_setup.h"
-
-
-/* =============================================================
- * Alpha blending
- */
-
-static void
-sis6326DDAlphaFunc( struct gl_context *ctx, GLenum func, GLfloat ref )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLubyte refbyte;
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- CLAMPED_FLOAT_TO_UBYTE(refbyte, ref);
- current->hwAlpha = refbyte << 16;
-
- /* Alpha Test function */
- switch (func)
- {
- case GL_NEVER:
- current->hwAlpha |= S_ASET_PASS_NEVER;
- break;
- case GL_LESS:
- current->hwAlpha |= S_ASET_PASS_LESS;
- break;
- case GL_EQUAL:
- current->hwAlpha |= S_ASET_PASS_EQUAL;
- break;
- case GL_LEQUAL:
- current->hwAlpha |= S_ASET_PASS_LEQUAL;
- break;
- case GL_GREATER:
- current->hwAlpha |= S_ASET_PASS_GREATER;
- break;
- case GL_NOTEQUAL:
- current->hwAlpha |= S_ASET_PASS_NOTEQUAL;
- break;
- case GL_GEQUAL:
- current->hwAlpha |= S_ASET_PASS_GEQUAL;
- break;
- case GL_ALWAYS:
- current->hwAlpha |= S_ASET_PASS_ALWAYS;
- break;
- }
-
- prev->hwAlpha = current->hwAlpha;
- smesa->GlobalFlag |= GFLAG_ALPHASETTING;
-}
-
-static void
-sis6326DDBlendFuncSeparate( struct gl_context *ctx,
- GLenum sfactorRGB, GLenum dfactorRGB,
- GLenum sfactorA, GLenum dfactorA )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- current->hwDstSrcBlend = 0;
-
- switch (dfactorRGB)
- {
- case GL_ZERO:
- current->hwDstSrcBlend |= S_DBLEND_ZERO;
- break;
- case GL_ONE:
- current->hwDstSrcBlend |= S_DBLEND_ONE;
- break;
- case GL_SRC_COLOR:
- current->hwDstSrcBlend |= S_DBLEND_SRC_COLOR;
- break;
- case GL_ONE_MINUS_SRC_COLOR:
- current->hwDstSrcBlend |= S_DBLEND_INV_SRC_COLOR;
- break;
- case GL_SRC_ALPHA:
- current->hwDstSrcBlend |= S_DBLEND_SRC_ALPHA;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- current->hwDstSrcBlend |= S_DBLEND_INV_SRC_ALPHA;
- break;
- case GL_DST_ALPHA:
- current->hwDstSrcBlend |= S_DBLEND_DST_ALPHA;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- current->hwDstSrcBlend |= S_DBLEND_INV_DST_ALPHA;
- break;
- }
-
- switch (sfactorRGB)
- {
- case GL_ZERO:
- current->hwDstSrcBlend |= S_SBLEND_ZERO;
- break;
- case GL_ONE:
- current->hwDstSrcBlend |= S_SBLEND_ONE;
- break;
- case GL_SRC_ALPHA:
- current->hwDstSrcBlend |= S_SBLEND_SRC_ALPHA;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- current->hwDstSrcBlend |= S_SBLEND_INV_SRC_ALPHA;
- break;
- case GL_DST_ALPHA:
- current->hwDstSrcBlend |= S_SBLEND_DST_ALPHA;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- current->hwDstSrcBlend |= S_SBLEND_INV_DST_ALPHA;
- break;
- case GL_DST_COLOR:
- current->hwDstSrcBlend |= S_SBLEND_DST_COLOR;
- break;
- case GL_ONE_MINUS_DST_COLOR:
- current->hwDstSrcBlend |= S_SBLEND_INV_DST_COLOR;
- break;
- case GL_SRC_ALPHA_SATURATE:
- current->hwDstSrcBlend |= S_SBLEND_SRC_ALPHA_SAT;
- break;
- }
-
- if (current->hwDstSrcBlend != prev->hwDstSrcBlend) {
- prev->hwDstSrcBlend = current->hwDstSrcBlend;
- smesa->GlobalFlag |= GFLAG_DSTBLEND;
- }
-}
-
-/* =============================================================
- * Depth testing
- */
-
-static void
-sis6326DDDepthFunc( struct gl_context *ctx, GLenum func )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- current->hwZ &= ~MASK_6326_ZTestMode;
- switch (func)
- {
- case GL_LESS:
- current->hwZ |= S_ZSET_PASS_LESS;
- break;
- case GL_GEQUAL:
- current->hwZ |= S_ZSET_PASS_GEQUAL;
- break;
- case GL_LEQUAL:
- current->hwZ |= S_ZSET_PASS_LEQUAL;
- break;
- case GL_GREATER:
- current->hwZ |= S_ZSET_PASS_GREATER;
- break;
- case GL_NOTEQUAL:
- current->hwZ |= S_ZSET_PASS_NOTEQUAL;
- break;
- case GL_EQUAL:
- current->hwZ |= S_ZSET_PASS_EQUAL;
- break;
- case GL_ALWAYS:
- current->hwZ |= S_ZSET_PASS_ALWAYS;
- break;
- case GL_NEVER:
- current->hwZ |= S_ZSET_PASS_NEVER;
- break;
- }
-
- if (current->hwZ != prev->hwZ) {
- prev->hwZ = current->hwZ;
- smesa->GlobalFlag |= GFLAG_ZSETTING;
- }
-}
-
-static void
-sis6326DDDepthMask( struct gl_context *ctx, GLboolean flag )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *current = &smesa->current;
-
- if (ctx->Depth.Test)
- current->hwCapEnable |= S_ENABLE_ZWrite;
- else
- current->hwCapEnable &= ~S_ENABLE_ZWrite;
-}
-
-/* =============================================================
- * Fog
- */
-
-static void
-sis6326DDFogfv( struct gl_context *ctx, GLenum pname, const GLfloat *params )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *current = &smesa->current;
- __GLSiSHardware *prev = &smesa->prev;
-
- GLint fogColor;
-
- switch(pname)
- {
- case GL_FOG_COLOR:
- fogColor = FLOAT_TO_UBYTE( ctx->Fog.Color[0] ) << 16;
- fogColor |= FLOAT_TO_UBYTE( ctx->Fog.Color[1] ) << 8;
- fogColor |= FLOAT_TO_UBYTE( ctx->Fog.Color[2] );
- current->hwFog = 0x01000000 | fogColor;
- if (current->hwFog != prev->hwFog) {
- prev->hwFog = current->hwFog;
- smesa->GlobalFlag |= GFLAG_FOGSETTING;
- }
- break;
- }
-}
-
-/* =============================================================
- * Clipping
- */
-
-void
-sis6326UpdateClipping(struct gl_context *ctx)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- GLint x1, y1, x2, y2;
-
- x1 = 0;
- y1 = 0;
- x2 = smesa->width - 1;
- y2 = smesa->height - 1;
-
- if (ctx->Scissor.Enabled) {
- if (ctx->Scissor.X > x1)
- x1 = ctx->Scissor.X;
- if (ctx->Scissor.Y > y1)
- y1 = ctx->Scissor.Y;
- if (ctx->Scissor.X + ctx->Scissor.Width - 1 < x2)
- x2 = ctx->Scissor.X + ctx->Scissor.Width - 1;
- if (ctx->Scissor.Y + ctx->Scissor.Height - 1 < y2)
- y2 = ctx->Scissor.Y + ctx->Scissor.Height - 1;
- }
-
- y1 = Y_FLIP(y1);
- y2 = Y_FLIP(y2);
-
- /*current->clipTopBottom = (y2 << 13) | y1;
- current->clipLeftRight = (x1 << 13) | x2;*/ /* XXX */
- current->clipTopBottom = (0 << 13) | smesa->height;
- current->clipLeftRight = (0 << 13) | smesa->width;
-
- if ((current->clipTopBottom != prev->clipTopBottom) ||
- (current->clipLeftRight != prev->clipLeftRight)) {
- prev->clipTopBottom = current->clipTopBottom;
- prev->clipLeftRight = current->clipLeftRight;
- smesa->GlobalFlag |= GFLAG_CLIPPING;
- }
-}
-
-static void
-sis6326DDScissor( struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h )
-{
- if (ctx->Scissor.Enabled)
- sis6326UpdateClipping( ctx );
-}
-
-/* =============================================================
- * Culling
- */
-
-static void
-sis6326UpdateCull( struct gl_context *ctx )
-{
- /* XXX culling */
-}
-
-
-static void
-sis6326DDCullFace( struct gl_context *ctx, GLenum mode )
-{
- sis6326UpdateCull( ctx );
-}
-
-static void
-sis6326DDFrontFace( struct gl_context *ctx, GLenum mode )
-{
- sis6326UpdateCull( ctx );
-}
-
-/* =============================================================
- * Masks
- */
-
-static void sis6326DDColorMask( struct gl_context *ctx,
- GLboolean r, GLboolean g,
- GLboolean b, GLboolean a )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- if (r && g && b && ((ctx->Visual.alphaBits == 0) || a)) {
- FALLBACK(smesa, SIS_FALLBACK_WRITEMASK, 0);
- } else {
- FALLBACK(smesa, SIS_FALLBACK_WRITEMASK, 1);
- }
-}
-
-/* =============================================================
- * Rendering attributes
- */
-
-static void sis6326UpdateSpecular(struct gl_context *ctx)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *current = &smesa->current;
-
- if (_mesa_need_secondary_color(ctx))
- current->hwCapEnable |= S_ENABLE_Specular;
- else
- current->hwCapEnable &= ~S_ENABLE_Specular;
-}
-
-static void sis6326DDLightModelfv(struct gl_context *ctx, GLenum pname,
- const GLfloat *param)
-{
- if (pname == GL_LIGHT_MODEL_COLOR_CONTROL) {
- sis6326UpdateSpecular(ctx);
- }
-}
-static void sis6326DDShadeModel( struct gl_context *ctx, GLenum mode )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- /* Signal to sisRasterPrimitive to recalculate dwPrimitiveSet */
- smesa->hw_primitive = -1;
-}
-
-/* =============================================================
- * Window position
- */
-
-/* =============================================================
- * Viewport
- */
-
-static void sis6326CalcViewport( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- const GLfloat *v = ctx->Viewport._WindowMap.m;
- GLfloat *m = smesa->hw_viewport;
-
- /* See also sis_translate_vertex.
- */
- m[MAT_SX] = v[MAT_SX];
- m[MAT_TX] = v[MAT_TX] + SUBPIXEL_X;
- m[MAT_SY] = - v[MAT_SY];
- m[MAT_TY] = - v[MAT_TY] + smesa->driDrawable->h + SUBPIXEL_Y;
- m[MAT_SZ] = v[MAT_SZ] * smesa->depth_scale;
- m[MAT_TZ] = v[MAT_TZ] * smesa->depth_scale;
-}
-
-static void sis6326DDViewport( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height )
-{
- sis6326CalcViewport( ctx );
-}
-
-static void sis6326DDDepthRange( struct gl_context *ctx,
- GLclampd nearval, GLclampd farval )
-{
- sis6326CalcViewport( ctx );
-}
-
-/* =============================================================
- * Miscellaneous
- */
-
-static void
-sis6326DDLogicOpCode( struct gl_context *ctx, GLenum opcode )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- if (!ctx->Color.ColorLogicOpEnabled)
- return;
-
- current->hwDstSet &= ~MASK_ROP2;
- switch (opcode)
- {
- case GL_CLEAR:
- current->hwDstSet |= LOP_CLEAR;
- break;
- case GL_SET:
- current->hwDstSet |= LOP_SET;
- break;
- case GL_COPY:
- current->hwDstSet |= LOP_COPY;
- break;
- case GL_COPY_INVERTED:
- current->hwDstSet |= LOP_COPY_INVERTED;
- break;
- case GL_NOOP:
- current->hwDstSet |= LOP_NOOP;
- break;
- case GL_INVERT:
- current->hwDstSet |= LOP_INVERT;
- break;
- case GL_AND:
- current->hwDstSet |= LOP_AND;
- break;
- case GL_NAND:
- current->hwDstSet |= LOP_NAND;
- break;
- case GL_OR:
- current->hwDstSet |= LOP_OR;
- break;
- case GL_NOR:
- current->hwDstSet |= LOP_NOR;
- break;
- case GL_XOR:
- current->hwDstSet |= LOP_XOR;
- break;
- case GL_EQUIV:
- current->hwDstSet |= LOP_EQUIV;
- break;
- case GL_AND_REVERSE:
- current->hwDstSet |= LOP_AND_REVERSE;
- break;
- case GL_AND_INVERTED:
- current->hwDstSet |= LOP_AND_INVERTED;
- break;
- case GL_OR_REVERSE:
- current->hwDstSet |= LOP_OR_REVERSE;
- break;
- case GL_OR_INVERTED:
- current->hwDstSet |= LOP_OR_INVERTED;
- break;
- }
-
- if (current->hwDstSet != prev->hwDstSet) {
- prev->hwDstSet = current->hwDstSet;
- smesa->GlobalFlag |= GFLAG_DESTSETTING;
- }
-}
-
-void sis6326DDDrawBuffer( struct gl_context *ctx, GLenum mode )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- if(getenv("SIS_DRAW_FRONT"))
- ctx->DrawBuffer->_ColorDrawBufferIndexes[0] = BUFFER_FRONT_LEFT;
-
- if (ctx->DrawBuffer->_NumColorDrawBuffers > 1) {
- FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- current->hwDstSet &= ~MASK_DstBufferPitch;
-
- switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0] ) {
- case BUFFER_FRONT_LEFT:
- current->hwOffsetDest = smesa->front.offset;
- current->hwDstSet |= smesa->front.pitch;
- FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_FALSE );
- break;
- case BUFFER_BACK_LEFT:
- current->hwOffsetDest = smesa->back.offset;
- current->hwDstSet |= smesa->back.pitch;
- FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_FALSE );
- break;
- default:
- FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- if (current->hwDstSet != prev->hwDstSet) {
- prev->hwDstSet = current->hwDstSet;
- smesa->GlobalFlag |= GFLAG_DESTSETTING;
- }
-
- if (current->hwOffsetDest != prev->hwOffsetDest) {
- prev->hwOffsetDest = current->hwOffsetDest;
- smesa->GlobalFlag |= GFLAG_DESTSETTING;
- }
-}
-
-/* =============================================================
- * Polygon stipple
- */
-
-/* =============================================================
- * Render mode
- */
-
-/* =============================================================
- * State enable/disable
- */
-
-static void
-sis6326DDEnable( struct gl_context *ctx, GLenum cap, GLboolean state )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *current = &smesa->current;
-
- switch (cap)
- {
- case GL_ALPHA_TEST:
- if (state)
- current->hwCapEnable |= S_ENABLE_AlphaTest;
- else
- current->hwCapEnable &= ~S_ENABLE_AlphaTest;
- break;
- case GL_BLEND:
- /* TODO: */
- if (state)
- /* if (state & !ctx->Color.ColorLogicOpEnabled) */
- current->hwCapEnable |= S_ENABLE_Blend;
- else
- current->hwCapEnable &= ~S_ENABLE_Blend;
- break;
- case GL_CULL_FACE:
- /* XXX culling */
- break;
- case GL_DEPTH_TEST:
- if (state && smesa->depth.offset != 0)
- current->hwCapEnable |= S_ENABLE_ZTest;
- else
- current->hwCapEnable &= ~S_ENABLE_ZTest;
- sis6326DDDepthMask( ctx, ctx->Depth.Mask );
- break;
- case GL_DITHER:
- if (state)
- current->hwCapEnable |= S_ENABLE_Dither;
- else
- current->hwCapEnable &= ~S_ENABLE_Dither;
- break;
- case GL_FOG:
- if (state)
- current->hwCapEnable |= S_ENABLE_Fog;
- else
- current->hwCapEnable &= ~S_ENABLE_Fog;
- break;
- case GL_COLOR_LOGIC_OP:
- if (state)
- sis6326DDLogicOpCode( ctx, ctx->Color.LogicOp );
- else
- sis6326DDLogicOpCode( ctx, GL_COPY );
- break;
- case GL_SCISSOR_TEST:
- sis6326UpdateClipping( ctx );
- break;
- case GL_STENCIL_TEST:
- if (state) {
- FALLBACK(smesa, SIS_FALLBACK_STENCIL, 1);
- } else {
- FALLBACK(smesa, SIS_FALLBACK_STENCIL, 0);
- }
- break;
- case GL_LIGHTING:
- case GL_COLOR_SUM_EXT:
- sis6326UpdateSpecular(ctx);
- break;
- }
-}
-
-/* =============================================================
- * State initialization, management
- */
-
-/* Called before beginning of rendering. */
-void
-sis6326UpdateHWState( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- if (smesa->NewGLState & _NEW_TEXTURE)
- sisUpdateTextureState( ctx );
-
- if (current->hwCapEnable ^ prev->hwCapEnable) {
- prev->hwCapEnable = current->hwCapEnable;
- smesa->GlobalFlag |= GFLAG_ENABLESETTING;
- }
-
- if (smesa->GlobalFlag & GFLAG_RENDER_STATES)
- sis_update_render_state( smesa );
-
- if (smesa->GlobalFlag & GFLAG_TEXTURE_STATES)
- sis_update_texture_state( smesa );
-}
-
-static void
-sis6326DDInvalidateState( struct gl_context *ctx, GLuint new_state )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- _swrast_InvalidateState( ctx, new_state );
- _swsetup_InvalidateState( ctx, new_state );
- _vbo_InvalidateState( ctx, new_state );
- _tnl_InvalidateState( ctx, new_state );
- smesa->NewGLState |= new_state;
-}
-
-/* Initialize the context's hardware state.
- */
-void sis6326DDInitState( sisContextPtr smesa )
-{
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
- struct gl_context *ctx = smesa->glCtx;
-
- /* add Texture Perspective Enable */
- current->hwCapEnable = S_ENABLE_TextureCache |
- S_ENABLE_TexturePerspective | S_ENABLE_Dither;
-
- /* Z test mode is LESS */
- current->hwZ = S_ZSET_PASS_LESS | S_ZSET_FORMAT_16;
- if (ctx->Visual.depthBits > 0)
- current->hwCapEnable |= S_ENABLE_ZWrite;
-
- /* Alpha test mode is ALWAYS, alpha ref value is 0 */
- current->hwAlpha = S_ASET_PASS_ALWAYS;
-
- /* ROP2 is COPYPEN */
- current->hwDstSet = LOP_COPY;
-
- /* LinePattern is 0, Repeat Factor is 0 */
- current->hwLinePattern = 0x00008000;
-
- /* Src blend is BLEND_ONE, Dst blend is D3DBLEND_ZERO */
- current->hwDstSrcBlend = S_SBLEND_ONE | S_DBLEND_ZERO;
-
- switch (smesa->bytesPerPixel)
- {
- case 2:
- current->hwDstSet |= DST_FORMAT_RGB_565;
- break;
- case 4:
- current->hwDstSet |= DST_FORMAT_ARGB_8888;
- break;
- }
-
- smesa->depth_scale = 1.0 / (GLfloat)0xffff;
-
- smesa->clearTexCache = GL_TRUE;
-
- smesa->clearColorPattern = 0;
-
- sis6326UpdateZPattern(smesa, 1.0);
- sis6326UpdateCull(ctx);
-
- /* Set initial fog settings. Start and end are the same case. */
- sis6326DDFogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density );
- sis6326DDFogfv( ctx, GL_FOG_END, &ctx->Fog.End );
- sis6326DDFogfv( ctx, GL_FOG_MODE, NULL );
-
- memcpy(prev, current, sizeof(__GLSiSHardware));
-}
-
-/* Initialize the driver's state functions.
- */
-void sis6326DDInitStateFuncs( struct gl_context *ctx )
-{
- ctx->Driver.UpdateState = sis6326DDInvalidateState;
-
- ctx->Driver.Clear = sis6326DDClear;
- ctx->Driver.ClearColor = sis6326DDClearColor;
- ctx->Driver.ClearDepth = sis6326DDClearDepth;
-
- ctx->Driver.AlphaFunc = sis6326DDAlphaFunc;
- ctx->Driver.BlendFuncSeparate = sis6326DDBlendFuncSeparate;
- ctx->Driver.ColorMask = sis6326DDColorMask;
- ctx->Driver.CullFace = sis6326DDCullFace;
- ctx->Driver.DepthMask = sis6326DDDepthMask;
- ctx->Driver.DepthFunc = sis6326DDDepthFunc;
- ctx->Driver.DepthRange = sis6326DDDepthRange;
- ctx->Driver.DrawBuffer = sis6326DDDrawBuffer;
- ctx->Driver.Enable = sis6326DDEnable;
- ctx->Driver.FrontFace = sis6326DDFrontFace;
- ctx->Driver.Fogfv = sis6326DDFogfv;
- ctx->Driver.LogicOpcode = sis6326DDLogicOpCode;
- ctx->Driver.Scissor = sis6326DDScissor;
- ctx->Driver.ShadeModel = sis6326DDShadeModel;
- ctx->Driver.LightModelfv = sis6326DDLightModelfv;
- ctx->Driver.Viewport = sis6326DDViewport;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_alloc.c b/src/mesa/drivers/dri/sis/sis_alloc.c
deleted file mode 100644
index ce34e44da22..00000000000
--- a/src/mesa/drivers/dri/sis/sis_alloc.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "sis_context.h"
-#include "sis_alloc.h"
-
-#include "sis_common.h"
-
-#include
-
-#define Z_BUFFER_HW_ALIGNMENT 16
-#define Z_BUFFER_HW_PLUS (16 + 4)
-
-/* 3D engine uses 2, and bitblt uses 4 */
-#define DRAW_BUFFER_HW_ALIGNMENT 16
-#define DRAW_BUFFER_HW_PLUS (16 + 4)
-
-#define ALIGNMENT(value, align) (((value) + (align) - 1) / (align) * (align))
-
-static int _total_video_memory_used = 0;
-static int _total_video_memory_count = 0;
-
-void *
-sisAllocFB( sisContextPtr smesa, GLuint size, void **handle )
-{
- drm_sis_mem_t fb;
-
- _total_video_memory_used += size;
-
- fb.context = smesa->hHWContext;
- fb.size = size;
- if (drmCommandWriteRead( smesa->driFd, DRM_SIS_FB_ALLOC, &fb,
- sizeof(drm_sis_mem_t) ) || fb.offset == 0)
- {
- return NULL;
- }
- *handle = (void *)fb.free;
-
- if (SIS_VERBOSE & VERBOSE_SIS_MEMORY) {
- fprintf(stderr, "sisAllocFB: size=%d, offset=%lu, pid=%d, count=%d\n",
- size, fb.offset, (GLint)getpid(),
- ++_total_video_memory_count);
- }
-
- return (void *)(smesa->FbBase + fb.offset);
-}
-
-void
-sisFreeFB( sisContextPtr smesa, void *handle )
-{
- drm_sis_mem_t fb;
-
- if (SIS_VERBOSE & VERBOSE_SIS_MEMORY) {
- fprintf(stderr, "sisFreeFB: free=%p, pid=%d, count=%d\n",
- handle, (GLint)getpid(), --_total_video_memory_count);
- }
-
- fb.context = smesa->hHWContext;
- fb.free = handle;
- drmCommandWrite( smesa->driFd, DRM_SIS_FB_FREE, &fb, sizeof(drm_sis_mem_t) );
-}
-
-void *
-sisAllocAGP( sisContextPtr smesa, GLuint size, void **handle )
-{
- drm_sis_mem_t agp;
-
- if (smesa->AGPSize == 0)
- return NULL;
-
- agp.context = smesa->hHWContext;
- agp.size = size;
- if (drmCommandWriteRead( smesa->driFd, DRM_SIS_AGP_ALLOC, &agp,
- sizeof(drm_sis_mem_t) ) || agp.offset == 0)
- {
- return NULL;
- }
- *handle = (void *)agp.free;
-
- if (SIS_VERBOSE & VERBOSE_SIS_MEMORY) {
- fprintf(stderr, "sisAllocAGP: size=%u, offset=%lu, pid=%d, count=%d\n",
- size, agp.offset, (GLint)getpid(),
- ++_total_video_memory_count);
- }
-
- return (void *)(smesa->AGPBase + agp.offset);
-}
-
-void
-sisFreeAGP( sisContextPtr smesa, void *handle )
-{
- drm_sis_mem_t agp;
-
- if (SIS_VERBOSE & VERBOSE_SIS_MEMORY) {
- fprintf(stderr, "sisFreeAGP: free=%p, pid=%d, count=%d\n",
- handle, (GLint)getpid(), --_total_video_memory_count);
- }
-
- agp.context = smesa->hHWContext;
- agp.free = handle;
- drmCommandWrite( smesa->driFd, DRM_SIS_AGP_FREE, &agp,
- sizeof(drm_sis_mem_t) );
-}
-
-void
-sisAllocZStencilBuffer( sisContextPtr smesa )
-{
- int cpp = ( smesa->glCtx->Visual.depthBits +
- smesa->glCtx->Visual.stencilBits ) / 8;
- char *addr;
-
- smesa->depth.bpp = cpp * 8;
- smesa->depth.pitch = ALIGNMENT(smesa->driDrawable->w * cpp, 4);
- smesa->depth.size = smesa->depth.pitch * smesa->driDrawable->h;
- smesa->depth.size += Z_BUFFER_HW_PLUS;
-
- addr = sisAllocFB(smesa, smesa->depth.size, &smesa->depth.handle);
- if (addr == NULL)
- sis_fatal_error("Failure to allocate Z buffer.\n");
- addr = (char *)ALIGNMENT((unsigned long)addr, Z_BUFFER_HW_ALIGNMENT);
-
- smesa->depth.map = addr;
- smesa->depth.offset = addr - (char *)smesa->FbBase;
-
- /* stencil buffer is same as depth buffer */
- smesa->stencil.size = smesa->depth.size;
- smesa->stencil.offset = smesa->depth.offset;
- smesa->stencil.handle = smesa->depth.handle;
- smesa->stencil.pitch = smesa->depth.pitch;
- smesa->stencil.bpp = smesa->depth.bpp;
- smesa->stencil.map = smesa->depth.map;
-}
-
-void
-sisFreeZStencilBuffer( sisContextPtr smesa )
-{
- sisFreeFB(smesa, smesa->depth.handle);
- smesa->depth.map = NULL;
- smesa->depth.offset = 0;
-}
-
-void
-sisAllocBackbuffer( sisContextPtr smesa )
-{
- int cpp = smesa->bytesPerPixel;
- char *addr;
-
- smesa->back.bpp = smesa->bytesPerPixel * 8;
- smesa->back.pitch = ALIGNMENT(smesa->driDrawable->w * cpp, 4);
- smesa->back.size = smesa->back.pitch * smesa->driDrawable->h;
- smesa->back.size += DRAW_BUFFER_HW_PLUS;
-
- addr = sisAllocFB(smesa, smesa->back.size, &smesa->back.handle);
- if (addr == NULL)
- sis_fatal_error("Failure to allocate back buffer.\n");
- addr = (char *)ALIGNMENT((unsigned long)addr, DRAW_BUFFER_HW_ALIGNMENT);
-
- smesa->back.map = addr;
- smesa->back.offset = addr - (char *)smesa->FbBase;
-}
-
-void
-sisFreeBackbuffer( sisContextPtr smesa )
-{
- sisFreeFB(smesa, smesa->back.handle);
- smesa->back.map = NULL;
- smesa->back.offset = 0;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_alloc.h b/src/mesa/drivers/dri/sis/sis_alloc.h
deleted file mode 100644
index eb784afad9e..00000000000
--- a/src/mesa/drivers/dri/sis/sis_alloc.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-enum {
- VIDEO_TYPE,
- AGP_TYPE
-};
-
-void sisAllocZStencilBuffer( sisContextPtr smesa );
-void sisFreeZStencilBuffer( sisContextPtr smesa );
-void sisAllocBackbuffer( sisContextPtr smesa );
-void sisFreeBackbuffer ( sisContextPtr smesa );
-void *sisAllocFB( sisContextPtr smesa, GLuint size, void **handle );
-void sisFreeFB( sisContextPtr smesa, void *handle );
-void *sisAllocAGP( sisContextPtr smesa, GLuint size, void **handle );
-void sisFreeAGP( sisContextPtr smesa, void *handle );
diff --git a/src/mesa/drivers/dri/sis/sis_clear.c b/src/mesa/drivers/dri/sis/sis_clear.c
deleted file mode 100644
index a5d870469da..00000000000
--- a/src/mesa/drivers/dri/sis/sis_clear.c
+++ /dev/null
@@ -1,408 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "sis_context.h"
-#include "sis_state.h"
-#include "sis_lock.h"
-
-#include "swrast/swrast.h"
-#include "main/macros.h"
-
-static GLbitfield sis_3D_Clear( struct gl_context * ctx, GLbitfield mask,
- GLint x, GLint y, GLint width,
- GLint height );
-static void sis_clear_color_buffer( struct gl_context *ctx, GLenum mask, GLint x,
- GLint y, GLint width, GLint height );
-static void sis_clear_z_stencil_buffer( struct gl_context * ctx,
- GLbitfield mask, GLint x,
- GLint y, GLint width,
- GLint height );
-
-static void
-set_color_pattern( sisContextPtr smesa, GLubyte red, GLubyte green,
- GLubyte blue, GLubyte alpha )
-{
- /* XXX only RGB565 and ARGB8888 */
- switch (smesa->colorFormat)
- {
- case DST_FORMAT_ARGB_8888:
- smesa->clearColorPattern = (alpha << 24) +
- (red << 16) + (green << 8) + (blue);
- break;
- case DST_FORMAT_RGB_565:
- smesa->clearColorPattern = ((red >> 3) << 11) +
- ((green >> 2) << 5) + (blue >> 3);
- smesa->clearColorPattern |= smesa->clearColorPattern << 16;
- break;
- default:
- sis_fatal_error("Bad dst color format\n");
- }
-}
-
-void
-sisUpdateZStencilPattern( sisContextPtr smesa, GLclampd z, GLint stencil )
-{
- GLuint zPattern;
-
- switch (smesa->zFormat)
- {
- case SiS_ZFORMAT_Z16:
- CLAMPED_FLOAT_TO_USHORT(zPattern, z);
- zPattern |= zPattern << 16;
- break;
- case SiS_ZFORMAT_S8Z24:
- zPattern = FLOAT_TO_UINT(z) >> 8;
- zPattern |= stencil << 24;
- break;
- case SiS_ZFORMAT_Z32:
- zPattern = FLOAT_TO_UINT(z);
- break;
- default:
- sis_fatal_error("Bad Z format\n");
- }
- smesa->clearZStencilPattern = zPattern;
-}
-
-void
-sisDDClear( struct gl_context * ctx, GLbitfield mask )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- GLint x1, y1, width1, height1;
-
- /* get region after locking: */
- x1 = ctx->DrawBuffer->_Xmin;
- y1 = ctx->DrawBuffer->_Ymin;
- width1 = ctx->DrawBuffer->_Xmax - x1;
- height1 = ctx->DrawBuffer->_Ymax - y1;
- y1 = Y_FLIP(y1 + height1 - 1);
-
- /* Mask out any non-existent buffers */
- if (ctx->Visual.depthBits == 0 || !ctx->Depth.Mask)
- mask &= ~BUFFER_BIT_DEPTH;
- if (ctx->Visual.stencilBits == 0)
- mask &= ~BUFFER_BIT_STENCIL;
-
- LOCK_HARDWARE();
-
- /* The 3d clear code is use for masked clears because apparently the SiS
- * 300-series can't do write masks for 2d blits. 3d isn't used in general
- * because it's slower, even in the case of clearing multiple buffers.
- */
- /* XXX: Appears to be broken with stencil. */
- if ((smesa->current.hwCapEnable2 & (MASK_AlphaMaskWriteEnable |
- MASK_ColorMaskWriteEnable) &&
- (mask & (BUFFER_BIT_BACK_LEFT | BUFFER_BIT_FRONT_LEFT)) != 0) ||
- ((ctx->Stencil.WriteMask[0] & 0xff) != 0xff &&
- (mask & BUFFER_BIT_STENCIL) != 0) )
- {
- mask = sis_3D_Clear( ctx, mask, x1, y1, width1, height1 );
- }
-
- if ( mask & BUFFER_BIT_FRONT_LEFT || mask & BUFFER_BIT_BACK_LEFT) {
- sis_clear_color_buffer( ctx, mask, x1, y1, width1, height1 );
- mask &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT);
- }
-
- if (mask & (BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL)) {
- if (smesa->depth.offset != 0)
- sis_clear_z_stencil_buffer( ctx, mask, x1, y1, width1, height1 );
- mask &= ~(BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL);
- }
-
- UNLOCK_HARDWARE();
-
- if (mask != 0)
- _swrast_Clear( ctx, mask);
-}
-
-
-void
-sisDDClearColor( struct gl_context * ctx, const GLfloat color[4] )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLubyte c[4];
-
- CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-
- set_color_pattern( smesa, c[0], c[1], c[2], c[3] );
-}
-
-void
-sisDDClearDepth( struct gl_context * ctx, GLclampd d )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- sisUpdateZStencilPattern( smesa, d, ctx->Stencil.Clear );
-}
-
-void
-sisDDClearStencil( struct gl_context * ctx, GLint s )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- sisUpdateZStencilPattern( smesa, ctx->Depth.Clear, s );
-}
-
-static GLbitfield
-sis_3D_Clear( struct gl_context * ctx, GLbitfield mask,
- GLint x, GLint y, GLint width, GLint height )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *current = &smesa->current;
-
- float left, top, right, bottom, zClearVal;
- GLboolean bClrColor, bClrDepth, bClrStencil;
- GLint dwPrimitiveSet;
- GLint dwEnable1 = 0, dwEnable2 = MASK_ColorMaskWriteEnable;
- GLint dwDepthMask = 0, dwSten1 = 0, dwSten2 = 0;
- GLint dirtyflags = GFLAG_ENABLESETTING | GFLAG_ENABLESETTING2 |
- GFLAG_CLIPPING | GFLAG_DESTSETTING;
- int count;
- drm_clip_rect_t *pExtents;
-
- bClrColor = (mask & (BUFFER_BIT_BACK_LEFT | BUFFER_BIT_FRONT_LEFT)) != 0;
- bClrDepth = (mask & BUFFER_BIT_DEPTH) != 0;
- bClrStencil = (mask & BUFFER_BIT_STENCIL) != 0;
-
- if (smesa->GlobalFlag & GFLAG_RENDER_STATES)
- sis_update_render_state( smesa );
-
- if (bClrStencil) {
- dwSten1 = STENCIL_FORMAT_8 | SiS_STENCIL_ALWAYS |
- ((ctx->Stencil.Clear & 0xff) << 8) | 0xff;
- dwSten2 = SiS_SFAIL_REPLACE | SiS_SPASS_ZFAIL_REPLACE |
- SiS_SPASS_ZPASS_REPLACE;
- dwEnable1 = MASK_ZWriteEnable | MASK_StencilWriteEnable |
- MASK_StencilTestEnable;
- dwEnable2 |= MASK_ZMaskWriteEnable;
- dwDepthMask |= (ctx->Stencil.WriteMask[0] & 0xff) << 24;
- } else if (bClrDepth) {
- dwEnable1 = MASK_ZWriteEnable;
- dwEnable2 |= MASK_ZMaskWriteEnable;
- }
-
- if (bClrDepth) {
- zClearVal = ctx->Depth.Clear;
- if (ctx->Visual.depthBits != 32)
- dwDepthMask |= 0x00ffffff;
- else
- dwDepthMask = 0xffffffff;
- } else
- zClearVal = 0.0;
-
- mWait3DCmdQueue(9);
- MMIO(REG_3D_TEnable, dwEnable1);
- MMIO(REG_3D_TEnable2, dwEnable2);
- if (bClrDepth || bClrStencil) {
- MMIO(REG_3D_ZSet, (current->hwZ & ~MASK_ZTestMode) | SiS_Z_COMP_ALWAYS);
- dirtyflags |= GFLAG_ZSETTING;
- }
- if (bClrColor) {
- MMIO(REG_3D_DstSet, (current->hwDstSet & ~MASK_ROP2) | LOP_COPY);
- } else {
- MMIO(REG_3D_DstAlphaWriteMask, 0L);
- }
- if (bClrStencil) {
- MMIO(REG_3D_StencilSet, dwSten1);
- MMIO(REG_3D_StencilSet2, dwSten2);
- dirtyflags |= GFLAG_STENCILSETTING;
- }
-
- if (mask & BUFFER_BIT_FRONT_LEFT) {
- pExtents = smesa->driDrawable->pClipRects;
- count = smesa->driDrawable->numClipRects;
- } else {
- pExtents = NULL;
- count = 1;
- }
-
- while(count--) {
- left = x;
- right = x + width;
- top = y;
- bottom = y + height;
-
- if (pExtents != NULL) {
- GLuint x1, y1, x2, y2;
-
- x1 = pExtents->x1 - smesa->driDrawable->x;
- y1 = pExtents->y1 - smesa->driDrawable->y;
- x2 = pExtents->x2 - smesa->driDrawable->x - 1;
- y2 = pExtents->y2 - smesa->driDrawable->y - 1;
-
- left = (left > x1) ? left : x1;
- right = (right > x2) ? x2 : right;
- top = (top > y1) ? top : y1;
- bottom = (bottom > y2) ? y2 : bottom;
- pExtents++;
- if (left > right || top > bottom)
- continue;
- }
-
- mWait3DCmdQueue(20);
-
- MMIO(REG_3D_ClipTopBottom, ((GLint)top << 13) | (GLint)bottom);
- MMIO(REG_3D_ClipLeftRight, ((GLint)left << 13) | (GLint)right);
-
- /* the first triangle */
- dwPrimitiveSet = OP_3D_TRIANGLE_DRAW | OP_3D_FIRE_TSARGBc |
- SHADE_FLAT_VertexC;
- MMIO(REG_3D_PrimitiveSet, dwPrimitiveSet);
-
- MMIO(REG_3D_TSZa, *(GLint *) &zClearVal);
- MMIO(REG_3D_TSXa, *(GLint *) &right);
- MMIO(REG_3D_TSYa, *(GLint *) &top);
- MMIO(REG_3D_TSARGBa, smesa->clearColorPattern);
-
- MMIO(REG_3D_TSZb, *(GLint *) &zClearVal);
- MMIO(REG_3D_TSXb, *(GLint *) &left);
- MMIO(REG_3D_TSYb, *(GLint *) &top);
- MMIO(REG_3D_TSARGBb, smesa->clearColorPattern);
-
- MMIO(REG_3D_TSZc, *(GLint *) &zClearVal);
- MMIO(REG_3D_TSXc, *(GLint *) &left);
- MMIO(REG_3D_TSYc, *(GLint *) &bottom);
- MMIO(REG_3D_TSARGBc, smesa->clearColorPattern);
-
- /* second triangle */
- dwPrimitiveSet = OP_3D_TRIANGLE_DRAW | OP_3D_FIRE_TSARGBb |
- SHADE_FLAT_VertexB;
- MMIO(REG_3D_PrimitiveSet, dwPrimitiveSet);
-
- MMIO(REG_3D_TSZb, *(GLint *) &zClearVal);
- MMIO(REG_3D_TSXb, *(GLint *) &right);
- MMIO(REG_3D_TSYb, *(GLint *) &bottom);
- MMIO(REG_3D_TSARGBb, smesa->clearColorPattern);
- }
-
- mEndPrimitive();
-
- /* If BUFFER_BIT_FRONT_LEFT is set, we've only cleared the front buffer so far */
- if ((mask & BUFFER_BIT_FRONT_LEFT) != 0 && (mask & BUFFER_BIT_BACK_LEFT) != 0)
- sis_3D_Clear( ctx, BUFFER_BIT_BACK_LEFT, x, y, width, height );
-
- smesa->GlobalFlag |= dirtyflags;
-
- return mask & ~(BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL | BUFFER_BIT_BACK_LEFT |
- BUFFER_BIT_FRONT_LEFT);
-}
-
-static void
-sis_clear_color_buffer( struct gl_context *ctx, GLenum mask, GLint x, GLint y,
- GLint width, GLint height )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- int count;
- drm_clip_rect_t *pExtents = NULL;
- GLint xx, yy;
- GLint x0, y0, width0, height0;
-
- /* Clear back buffer */
- if (mask & BUFFER_BIT_BACK_LEFT) {
- mWait3DCmdQueue (8);
- MMIO(REG_SRC_PITCH, (smesa->bytesPerPixel == 4) ?
- BLIT_DEPTH_32 : BLIT_DEPTH_16);
- MMIO(REG_DST_X_Y, (x << 16) | y);
- MMIO(REG_DST_ADDR, smesa->back.offset);
- MMIO(REG_DST_PITCH_HEIGHT, (smesa->virtualY << 16) | smesa->back.pitch);
- MMIO(REG_WIDTH_HEIGHT, (height << 16) | width);
- MMIO(REG_PATFG, smesa->clearColorPattern);
- MMIO(REG_BLIT_CMD, CMD_DIR_X_INC | CMD_DIR_Y_INC | CMD_ROP_PAT);
- MMIO(REG_CommandQueue, -1);
- }
-
- if ((mask & BUFFER_BIT_FRONT_LEFT) == 0)
- return;
-
- /* Clear front buffer */
- x0 = x;
- y0 = y;
- width0 = width;
- height0 = height;
-
- pExtents = smesa->driDrawable->pClipRects;
- count = smesa->driDrawable->numClipRects;
-
- while (count--) {
- GLint x2 = pExtents->x1 - smesa->driDrawable->x;
- GLint y2 = pExtents->y1 - smesa->driDrawable->y;
- GLint xx2 = pExtents->x2 - smesa->driDrawable->x;
- GLint yy2 = pExtents->y2 - smesa->driDrawable->y;
-
- x = (x0 > x2) ? x0 : x2;
- y = (y0 > y2) ? y0 : y2;
- xx = ((x0 + width0) > (xx2)) ? xx2 : x0 + width0;
- yy = ((y0 + height0) > (yy2)) ? yy2 : y0 + height0;
- width = xx - x;
- height = yy - y;
- pExtents++;
-
- if (width <= 0 || height <= 0)
- continue;
-
- mWait3DCmdQueue (8);
- MMIO(REG_SRC_PITCH, (smesa->bytesPerPixel == 4) ?
- BLIT_DEPTH_32 : BLIT_DEPTH_16);
- MMIO(REG_DST_X_Y, (x << 16) | y);
- MMIO(REG_DST_ADDR, smesa->front.offset);
- MMIO(REG_DST_PITCH_HEIGHT, (smesa->virtualY << 16) | smesa->front.pitch);
- MMIO(REG_WIDTH_HEIGHT, (height << 16) | width);
- MMIO(REG_PATFG, smesa->clearColorPattern);
- MMIO(REG_BLIT_CMD, CMD_DIR_X_INC | CMD_DIR_Y_INC | CMD_ROP_PAT);
- MMIO(REG_CommandQueue, -1);
- }
-}
-
-static void
-sis_clear_z_stencil_buffer( struct gl_context * ctx, GLbitfield mask,
- GLint x, GLint y, GLint width, GLint height )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- mWait3DCmdQueue (8);
- MMIO(REG_SRC_PITCH, (smesa->zFormat == SiS_ZFORMAT_Z16) ?
- BLIT_DEPTH_16 : BLIT_DEPTH_32);
- MMIO(REG_DST_X_Y, (x << 16) | y);
- MMIO(REG_DST_ADDR, smesa->depth.offset);
- MMIO(REG_DST_PITCH_HEIGHT, (smesa->virtualY << 16) | smesa->depth.pitch);
- MMIO(REG_WIDTH_HEIGHT, (height << 16) | width);
- MMIO(REG_PATFG, smesa->clearZStencilPattern);
- MMIO(REG_BLIT_CMD, CMD_DIR_X_INC | CMD_DIR_Y_INC | CMD_ROP_PAT);
- MMIO(REG_CommandQueue, -1);
-}
-
diff --git a/src/mesa/drivers/dri/sis/sis_context.c b/src/mesa/drivers/dri/sis/sis_context.c
deleted file mode 100644
index 26ecfc463ca..00000000000
--- a/src/mesa/drivers/dri/sis/sis_context.c
+++ /dev/null
@@ -1,719 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "sis_dri.h"
-
-#include "sis_context.h"
-#include "sis_state.h"
-#include "sis_dd.h"
-#include "sis_span.h"
-#include "sis_stencil.h"
-#include "sis_tex.h"
-#include "sis_tris.h"
-#include "sis_alloc.h"
-
-#include "main/imports.h"
-#include "utils.h"
-#include "main/framebuffer.h"
-
-#include "drivers/common/driverfuncs.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "vbo/vbo.h"
-
-#include "tnl/tnl.h"
-
-#define need_GL_EXT_fog_coord
-#define need_GL_EXT_secondary_color
-#include "main/remap_helper.h"
-
-#ifndef SIS_DEBUG
-int SIS_DEBUG = 0;
-#endif
-
-int GlobalCurrentHwcx = -1;
-int GlobalHwcxCountBase = 1;
-int GlobalCmdQueueLen = 0;
-
-static struct dri_extension card_extensions[] =
-{
- { "GL_ARB_multitexture", NULL },
- { "GL_ARB_texture_border_clamp", NULL },
- { "GL_ARB_texture_mirrored_repeat", NULL },
- /*{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },*/
- { "GL_EXT_texture_lod_bias", NULL },
- { "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
- { "GL_EXT_stencil_wrap", NULL },
- { "GL_MESA_ycbcr_texture", NULL },
- { "GL_NV_blend_square", NULL },
- { NULL, NULL }
-};
-
-#if 0
-static struct dri_extension card_extensions_6326[] =
-{
- /*{ "GL_ARB_texture_border_clamp", NULL },*/
- /*{ "GL_ARB_texture_mirrored_repeat", NULL },*/
- /*{ "GL_MESA_ycbcr_texture", NULL },*/
- { NULL, NULL }
-};
-#endif
-
-static const struct dri_debug_control debug_control[] =
-{
- { "fall", DEBUG_FALLBACKS },
- { NULL, 0 }
-};
-
-void
-WaitEngIdle (sisContextPtr smesa)
-{
- GLuint engineState;
-
- if (smesa->is6326) {
- do {
- engineState = MMIO_READ(REG_3D_EngineFire); /* XXX right reg? */
- } while ((engineState & ENG_3DIDLEQE) != 0);
- } else {
- do {
- engineState = MMIO_READ(REG_CommandQueue);
- } while ((engineState & SiS_EngIdle) != SiS_EngIdle);
- }
-}
-
-void
-Wait2DEngIdle (sisContextPtr smesa)
-{
- GLuint engineState;
-
- if (smesa->is6326) {
- do {
- engineState = MMIO_READ(REG_6326_BitBlt_Cmd);
- } while ((engineState & BLT_BUSY) != 0);
- } else {
- do {
- engineState = MMIO_READ(REG_CommandQueue);
- } while ((engineState & SiS_EngIdle2d) != SiS_EngIdle2d);
- }
-}
-
-/* To be called from mWait3DCmdQueue. Separate function for profiling
- * purposes, and speed doesn't matter because we're spinning anyway.
- */
-void
-WaitingFor3dIdle(sisContextPtr smesa, int wLen)
-{
- if (smesa->is6326) {
- while (*(smesa->CurrentQueueLenPtr) < wLen) {
- *(smesa->CurrentQueueLenPtr) =
- ((GLuint)MMIO_READ(REG_3D_EngineFire) >> 16) * 2;
- }
- } else {
- while (*(smesa->CurrentQueueLenPtr) < wLen) {
- *(smesa->CurrentQueueLenPtr) =
- (MMIO_READ(REG_CommandQueue) & MASK_QueueLen) - 20;
- }
- }
-}
-
-void sisReAllocateBuffers(struct gl_context *ctx, struct gl_framebuffer *drawbuffer,
- GLuint width, GLuint height)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- sisUpdateBufferSize(smesa);
-
- _mesa_resize_framebuffer(ctx, drawbuffer, width, height);
-}
-
-GLboolean
-sisCreateContext( gl_api api,
- const struct gl_config *glVisual,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate )
-{
- struct gl_context *ctx, *shareCtx;
- __DRIscreen *sPriv = driContextPriv->driScreenPriv;
- sisContextPtr smesa;
- sisScreenPtr sisScreen;
- int i;
- struct dd_function_table functions;
-
- smesa = (sisContextPtr)CALLOC( sizeof(*smesa) );
- if (smesa == NULL)
- return GL_FALSE;
-
- /* Init default driver functions then plug in our SIS-specific functions
- * (the texture functions are especially important)
- */
- _mesa_init_driver_functions(&functions);
- sisInitDriverFuncs(&functions);
- sisInitTextureFuncs(&functions);
-
- /* Allocate the Mesa context */
- if (sharedContextPrivate)
- shareCtx = ((sisContextPtr)sharedContextPrivate)->glCtx;
- else
- shareCtx = NULL;
- smesa->glCtx = _mesa_create_context( API_OPENGL, glVisual, shareCtx,
- &functions, (void *) smesa);
- if (!smesa->glCtx) {
- FREE(smesa);
- return GL_FALSE;
- }
- driContextPriv->driverPrivate = smesa;
- ctx = smesa->glCtx;
-
- sisScreen = smesa->sisScreen = (sisScreenPtr)(sPriv->private);
-
- smesa->is6326 = GL_FALSE; /* XXX */
- smesa->driContext = driContextPriv;
- smesa->driScreen = sPriv;
- smesa->driDrawable = NULL;
- smesa->hHWContext = driContextPriv->hHWContext;
- smesa->driHwLock = &sPriv->pSAREA->lock;
- smesa->driFd = sPriv->fd;
-
- smesa->virtualX = sisScreen->screenX;
- smesa->virtualY = sisScreen->screenY;
- smesa->bytesPerPixel = sisScreen->cpp;
- smesa->IOBase = sisScreen->mmio.map;
- smesa->Chipset = sisScreen->deviceID;
-
- smesa->FbBase = sPriv->pFB;
- smesa->displayWidth = sPriv->fbWidth;
- smesa->front.pitch = sPriv->fbStride;
-
- smesa->sarea = (SISSAREAPriv *)((char *)sPriv->pSAREA +
- sisScreen->sarea_priv_offset);
-
- /* support ARGB8888 and RGB565 */
- switch (smesa->bytesPerPixel)
- {
- case 4:
- smesa->redMask = 0x00ff0000;
- smesa->greenMask = 0x0000ff00;
- smesa->blueMask = 0x000000ff;
- smesa->alphaMask = 0xff000000;
- smesa->colorFormat = DST_FORMAT_ARGB_8888;
- break;
- case 2:
- smesa->redMask = 0xf800;
- smesa->greenMask = 0x07e0;
- smesa->blueMask = 0x001f;
- smesa->alphaMask = 0;
- smesa->colorFormat = DST_FORMAT_RGB_565;
- break;
- default:
- sis_fatal_error("Bad bytesPerPixel %d.\n", smesa->bytesPerPixel);
- }
-
- if (smesa->is6326) {
- ctx->Const.MaxTextureUnits = 1;
- ctx->Const.MaxTextureLevels = 9;
- } else {
- ctx->Const.MaxTextureUnits = 2;
- ctx->Const.MaxTextureLevels = 11;
- }
- ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits;
- ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits;
-
- /* Parse configuration files */
- driParseConfigFiles (&smesa->optionCache, &sisScreen->optionCache,
- sisScreen->driScreen->myNum, "sis");
-
-#if DO_DEBUG
- SIS_DEBUG = driParseDebugString(getenv("SIS_DEBUG"), debug_control);
-#endif
-
- /* TODO: index mode */
-
- smesa->CurrentQueueLenPtr = &(smesa->sarea->QueueLength);
- smesa->FrameCountPtr = &(smesa->sarea->FrameCount);
-
- /* set AGP */
- smesa->AGPSize = sisScreen->agp.size;
- smesa->AGPBase = sisScreen->agp.map;
- smesa->AGPAddr = sisScreen->agpBaseOffset;
-
- /* Create AGP command buffer */
- if (smesa->AGPSize != 0 &&
- !driQueryOptionb(&smesa->optionCache, "agp_disable"))
- {
- smesa->vb = sisAllocAGP(smesa, 64 * 1024, &smesa->vb_agp_handle);
- if (smesa->vb != NULL) {
- smesa->using_agp = GL_TRUE;
- smesa->vb_cur = smesa->vb;
- smesa->vb_last = smesa->vb;
- smesa->vb_end = smesa->vb + 64 * 1024;
- smesa->vb_agp_offset = ((long)smesa->vb - (long)smesa->AGPBase +
- (long)smesa->AGPAddr);
- }
- }
- if (!smesa->using_agp) {
- smesa->vb = malloc(64 * 1024);
- if (smesa->vb == NULL) {
- FREE(smesa);
- return GL_FALSE;
- }
- smesa->vb_cur = smesa->vb;
- smesa->vb_last = smesa->vb;
- smesa->vb_end = smesa->vb + 64 * 1024;
- }
-
- smesa->GlobalFlag = 0L;
-
- smesa->Fallback = 0;
-
- /* Initialize the software rasterizer and helper modules.
- */
- _swrast_CreateContext( ctx );
- _vbo_CreateContext( ctx );
- _tnl_CreateContext( ctx );
- _swsetup_CreateContext( ctx );
-
- _swrast_allow_pixel_fog( ctx, GL_TRUE );
- _swrast_allow_vertex_fog( ctx, GL_FALSE );
- _tnl_allow_pixel_fog( ctx, GL_TRUE );
- _tnl_allow_vertex_fog( ctx, GL_FALSE );
-
- /* XXX these should really go right after _mesa_init_driver_functions() */
- if (smesa->is6326) {
- sis6326DDInitStateFuncs( ctx );
- sis6326DDInitState( smesa ); /* Initializes smesa->zFormat, important */
- } else {
- sisDDInitStateFuncs( ctx );
- sisDDInitState( smesa ); /* Initializes smesa->zFormat, important */
- sisDDInitStencilFuncs( ctx );
- }
- sisInitTriFuncs( ctx );
- sisDDInitSpanFuncs( ctx );
-
- driInitExtensions( ctx, card_extensions, GL_FALSE );
-
- for (i = 0; i < SIS_MAX_TEXTURES; i++) {
- smesa->TexStates[i] = 0;
- smesa->PrevTexFormat[i] = 0;
- }
-
- if (driQueryOptionb(&smesa->optionCache, "no_rast")) {
- fprintf(stderr, "disabling 3D acceleration\n");
- FALLBACK(smesa, SIS_FALLBACK_DISABLE, 1);
- }
- smesa->texture_depth = driQueryOptioni(&smesa->optionCache, "texture_depth");
-
- return GL_TRUE;
-}
-
-void
-sisDestroyContext ( __DRIcontext *driContextPriv )
-{
- sisContextPtr smesa = (sisContextPtr)driContextPriv->driverPrivate;
-
- assert( smesa != NULL );
-
- if ( smesa != NULL ) {
- _swsetup_DestroyContext( smesa->glCtx );
- _tnl_DestroyContext( smesa->glCtx );
- _vbo_DestroyContext( smesa->glCtx );
- _swrast_DestroyContext( smesa->glCtx );
-
- if (smesa->using_agp)
- sisFreeAGP(smesa, smesa->vb_agp_handle);
-
- /* free the Mesa context */
- /* XXX: Is the next line needed? The DriverCtx (smesa) reference is
- * needed for sisDDDeleteTexture, since it needs to call the FB/AGP free
- * function.
- */
- /* smesa->glCtx->DriverCtx = NULL; */
- _mesa_destroy_context(smesa->glCtx);
- }
-
- FREE( smesa );
-}
-
-GLboolean
-sisMakeCurrent( __DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv )
-{
- if ( driContextPriv ) {
- GET_CURRENT_CONTEXT(ctx);
- sisContextPtr oldSisCtx = ctx ? SIS_CONTEXT(ctx) : NULL;
- sisContextPtr newSisCtx = (sisContextPtr) driContextPriv->driverPrivate;
- struct gl_framebuffer *drawBuffer, *readBuffer;
-
- if ( newSisCtx != oldSisCtx) {
- newSisCtx->GlobalFlag = GFLAG_ALL;
- }
-
- newSisCtx->driDrawable = driDrawPriv;
-
- drawBuffer = (struct gl_framebuffer *)driDrawPriv->driverPrivate;
- readBuffer = (struct gl_framebuffer *)driReadPriv->driverPrivate;
-
- _mesa_make_current( newSisCtx->glCtx, drawBuffer, readBuffer );
-
- sisUpdateBufferSize( newSisCtx );
- sisUpdateClipping( newSisCtx->glCtx );
- } else {
- _mesa_make_current( NULL, NULL, NULL );
- }
-
- return GL_TRUE;
-}
-
-GLboolean
-sisUnbindContext( __DRIcontext *driContextPriv )
-{
- return GL_TRUE;
-}
-
-void
-sis_update_render_state( sisContextPtr smesa )
-{
- __GLSiSHardware *prev = &smesa->prev;
-
- mWait3DCmdQueue (45);
-
- if (smesa->GlobalFlag & GFLAG_ENABLESETTING) {
- if (!smesa->clearTexCache) {
- MMIO(REG_3D_TEnable, prev->hwCapEnable);
- } else {
- MMIO(REG_3D_TEnable, prev->hwCapEnable | MASK_TextureCacheClear);
- MMIO(REG_3D_TEnable, prev->hwCapEnable);
- smesa->clearTexCache = GL_FALSE;
- }
- }
-
- if (smesa->GlobalFlag & GFLAG_ENABLESETTING2)
- MMIO(REG_3D_TEnable2, prev->hwCapEnable2);
-
- /* Z Setting */
- if (smesa->GlobalFlag & GFLAG_ZSETTING)
- {
- MMIO(REG_3D_ZSet, prev->hwZ);
- MMIO(REG_3D_ZStWriteMask, prev->hwZMask);
- MMIO(REG_3D_ZAddress, prev->hwOffsetZ);
- }
-
- /* Alpha Setting */
- if (smesa->GlobalFlag & GFLAG_ALPHASETTING)
- MMIO(REG_3D_AlphaSet, prev->hwAlpha);
-
- if (smesa->GlobalFlag & GFLAG_DESTSETTING) {
- MMIO(REG_3D_DstSet, prev->hwDstSet);
- MMIO(REG_3D_DstAlphaWriteMask, prev->hwDstMask);
- MMIO(REG_3D_DstAddress, prev->hwOffsetDest);
- }
-
- /* Line Setting */
-#if 0
- if (smesa->GlobalFlag & GFLAG_LINESETTING)
- MMIO(REG_3D_LinePattern, prev->hwLinePattern);
-#endif
-
- /* Fog Setting */
- if (smesa->GlobalFlag & GFLAG_FOGSETTING)
- {
- MMIO(REG_3D_FogSet, prev->hwFog);
- MMIO(REG_3D_FogInverseDistance, prev->hwFogInverse);
- MMIO(REG_3D_FogFarDistance, prev->hwFogFar);
- MMIO(REG_3D_FogFactorDensity, prev->hwFogDensity);
- }
-
- /* Stencil Setting */
- if (smesa->GlobalFlag & GFLAG_STENCILSETTING) {
- MMIO(REG_3D_StencilSet, prev->hwStSetting);
- MMIO(REG_3D_StencilSet2, prev->hwStSetting2);
- }
-
- /* Miscellaneous Setting */
- if (smesa->GlobalFlag & GFLAG_DSTBLEND)
- MMIO(REG_3D_DstBlendMode, prev->hwDstSrcBlend);
- if (smesa->GlobalFlag & GFLAG_CLIPPING) {
- MMIO(REG_3D_ClipTopBottom, prev->clipTopBottom);
- MMIO(REG_3D_ClipLeftRight, prev->clipLeftRight);
- }
-
- smesa->GlobalFlag &= ~GFLAG_RENDER_STATES;
-}
-
-void
-sis_update_texture_state (sisContextPtr smesa)
-{
- __GLSiSHardware *prev = &smesa->prev;
-
- mWait3DCmdQueue (55);
- if (smesa->clearTexCache || (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS)) {
- MMIO(REG_3D_TEnable, prev->hwCapEnable | MASK_TextureCacheClear);
- MMIO(REG_3D_TEnable, prev->hwCapEnable);
- smesa->clearTexCache = GL_FALSE;
- }
-
- /* Texture Setting */
- if (smesa->GlobalFlag & CFLAG_TEXTURERESET)
- MMIO(REG_3D_TextureSet, prev->texture[0].hwTextureSet);
-
- if (smesa->GlobalFlag & GFLAG_TEXTUREMIPMAP)
- MMIO(REG_3D_TextureMip, prev->texture[0].hwTextureMip);
-
- /*
- MMIO(REG_3D_TextureTransparencyColorHigh, prev->texture[0].hwTextureClrHigh);
- MMIO(REG_3D_TextureTransparencyColorLow, prev->texture[0].hwTextureClrLow);
- */
-
- if (smesa->GlobalFlag & GFLAG_TEXBORDERCOLOR)
- MMIO(REG_3D_TextureBorderColor, prev->texture[0].hwTextureBorderColor);
-
- if (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS) {
- switch ((prev->texture[0].hwTextureSet & MASK_TextureLevel) >> 8)
- {
- case 11:
- MMIO(REG_3D_TextureAddress11, prev->texture[0].texOffset11);
- case 10:
- MMIO(REG_3D_TextureAddress10, prev->texture[0].texOffset10);
- MMIO(REG_3D_TexturePitch10, prev->texture[0].texPitch10);
- case 9:
- MMIO(REG_3D_TextureAddress9, prev->texture[0].texOffset9);
- case 8:
- MMIO(REG_3D_TextureAddress8, prev->texture[0].texOffset8);
- MMIO(REG_3D_TexturePitch8, prev->texture[0].texPitch89);
- case 7:
- MMIO(REG_3D_TextureAddress7, prev->texture[0].texOffset7);
- case 6:
- MMIO(REG_3D_TextureAddress6, prev->texture[0].texOffset6);
- MMIO(REG_3D_TexturePitch6, prev->texture[0].texPitch67);
- case 5:
- MMIO(REG_3D_TextureAddress5, prev->texture[0].texOffset5);
- case 4:
- MMIO(REG_3D_TextureAddress4, prev->texture[0].texOffset4);
- MMIO(REG_3D_TexturePitch4, prev->texture[0].texPitch45);
- case 3:
- MMIO(REG_3D_TextureAddress3, prev->texture[0].texOffset3);
- case 2:
- MMIO(REG_3D_TextureAddress2, prev->texture[0].texOffset2);
- MMIO(REG_3D_TexturePitch2, prev->texture[0].texPitch23);
- case 1:
- MMIO(REG_3D_TextureAddress1, prev->texture[0].texOffset1);
- case 0:
- MMIO(REG_3D_TextureAddress0, prev->texture[0].texOffset0);
- MMIO(REG_3D_TexturePitch0, prev->texture[0].texPitch01);
- }
- }
- if (smesa->GlobalFlag & CFLAG_TEXTURERESET_1)
- MMIO(REG_3D_Texture1Set, prev->texture[1].hwTextureSet);
- if (smesa->GlobalFlag & GFLAG_TEXTUREMIPMAP_1)
- MMIO(REG_3D_Texture1Mip, prev->texture[1].hwTextureMip);
-
- if (smesa->GlobalFlag & GFLAG_TEXBORDERCOLOR_1) {
- MMIO(REG_3D_Texture1BorderColor,
- prev->texture[1].hwTextureBorderColor);
- }
- if (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS_1) {
- switch ((prev->texture[1].hwTextureSet & MASK_TextureLevel) >> 8)
- {
- case 11:
- MMIO(REG_3D_Texture1Address11, prev->texture[1].texOffset11);
- case 10:
- MMIO(REG_3D_Texture1Address10, prev->texture[1].texOffset10);
- MMIO(REG_3D_Texture1Pitch10, prev->texture[1].texPitch10);
- case 9:
- MMIO(REG_3D_Texture1Address9, prev->texture[1].texOffset9);
- case 8:
- MMIO(REG_3D_Texture1Address8, prev->texture[1].texOffset8);
- MMIO(REG_3D_Texture1Pitch8, prev->texture[1].texPitch89);
- case 7:
- MMIO(REG_3D_Texture1Address7, prev->texture[1].texOffset7);
- case 6:
- MMIO(REG_3D_Texture1Address6, prev->texture[1].texOffset6);
- MMIO(REG_3D_Texture1Pitch6, prev->texture[1].texPitch67);
- case 5:
- MMIO(REG_3D_Texture1Address5, prev->texture[1].texOffset5);
- case 4:
- MMIO(REG_3D_Texture1Address4, prev->texture[1].texOffset4);
- MMIO(REG_3D_Texture1Pitch4, prev->texture[1].texPitch45);
- case 3:
- MMIO(REG_3D_Texture1Address3, prev->texture[1].texOffset3);
- case 2:
- MMIO(REG_3D_Texture1Address2, prev->texture[1].texOffset2);
- MMIO(REG_3D_Texture1Pitch2, prev->texture[1].texPitch23);
- case 1:
- MMIO(REG_3D_Texture1Address1, prev->texture[1].texOffset1);
- case 0:
- MMIO(REG_3D_Texture1Address0, prev->texture[1].texOffset0);
- MMIO(REG_3D_Texture1Pitch0, prev->texture[1].texPitch01);
- }
- }
-
- /* texture environment */
- if (smesa->GlobalFlag & GFLAG_TEXTUREENV) {
- MMIO(REG_3D_TextureBlendFactor, prev->hwTexEnvColor);
- MMIO(REG_3D_TextureColorBlendSet0, prev->hwTexBlendColor0);
- MMIO(REG_3D_TextureAlphaBlendSet0, prev->hwTexBlendAlpha0);
- }
- if (smesa->GlobalFlag & GFLAG_TEXTUREENV_1) {
- MMIO(REG_3D_TextureBlendFactor, prev->hwTexEnvColor);
- MMIO(REG_3D_TextureColorBlendSet1, prev->hwTexBlendColor1);
- MMIO(REG_3D_TextureAlphaBlendSet1, prev->hwTexBlendAlpha1);
- }
-
- smesa->GlobalFlag &= ~GFLAG_TEXTURE_STATES;
-}
-
-void
-sis6326_update_render_state( sisContextPtr smesa )
-{
- __GLSiSHardware *prev = &smesa->prev;
-
- mWait3DCmdQueue (45);
-
- if (smesa->GlobalFlag & GFLAG_ENABLESETTING) {
- if (!smesa->clearTexCache) {
- MMIO(REG_6326_3D_TEnable, prev->hwCapEnable);
- } else {
- MMIO(REG_6326_3D_TEnable, prev->hwCapEnable & ~S_ENABLE_TextureCache);
- MMIO(REG_6326_3D_TEnable, prev->hwCapEnable);
- smesa->clearTexCache = GL_FALSE;
- }
- }
-
- /* Z Setting */
- if (smesa->GlobalFlag & GFLAG_ZSETTING) {
- MMIO(REG_6326_3D_ZSet, prev->hwZ);
- MMIO(REG_6326_3D_ZAddress, prev->hwOffsetZ);
- }
-
- /* Alpha Setting */
- if (smesa->GlobalFlag & GFLAG_ALPHASETTING)
- MMIO(REG_6326_3D_AlphaSet, prev->hwAlpha);
-
- if (smesa->GlobalFlag & GFLAG_DESTSETTING) {
- MMIO(REG_6326_3D_DstSet, prev->hwDstSet);
- MMIO(REG_6326_3D_DstAddress, prev->hwOffsetDest);
- }
-
- /* Fog Setting */
- if (smesa->GlobalFlag & GFLAG_FOGSETTING) {
- MMIO(REG_6326_3D_FogSet, prev->hwFog);
- }
-
- /* Miscellaneous Setting */
- if (smesa->GlobalFlag & GFLAG_DSTBLEND)
- MMIO(REG_6326_3D_DstSrcBlendMode, prev->hwDstSrcBlend);
-
- if (smesa->GlobalFlag & GFLAG_CLIPPING) {
- MMIO(REG_6326_3D_ClipTopBottom, prev->clipTopBottom);
- MMIO(REG_6326_3D_ClipLeftRight, prev->clipLeftRight);
- }
-
- smesa->GlobalFlag &= ~GFLAG_RENDER_STATES;
-}
-
-void
-sis6326_update_texture_state (sisContextPtr smesa)
-{
- __GLSiSHardware *prev = &smesa->prev;
-
- mWait3DCmdQueue (55);
- if (smesa->clearTexCache || (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS)) {
- MMIO(REG_6326_3D_TEnable, prev->hwCapEnable & ~S_ENABLE_TextureCache);
- MMIO(REG_6326_3D_TEnable, prev->hwCapEnable);
- smesa->clearTexCache = GL_FALSE;
- }
-
- /* Texture Setting */
- if (smesa->GlobalFlag & CFLAG_TEXTURERESET)
- MMIO(REG_6326_3D_TextureSet, prev->texture[0].hwTextureSet);
-
- if (smesa->GlobalFlag & GFLAG_TEXTUREMIPMAP)
- MMIO(REG_6326_3D_TextureWidthHeight, prev->texture[0].hwTexWidthHeight);
-
- /*
- MMIO(REG_3D_TextureTransparencyColorHigh, prev->texture[0].hwTextureClrHigh);
- MMIO(REG_3D_TextureTransparencyColorLow, prev->texture[0].hwTextureClrLow);
- */
-
- if (smesa->GlobalFlag & GFLAG_TEXBORDERCOLOR)
- MMIO(REG_6326_3D_TextureBorderColor, prev->texture[0].hwTextureBorderColor);
-
- if (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS) {
- switch ((prev->texture[0].hwTextureSet & MASK_6326_TextureLevel) >> 8)
- {
- case 9:
- MMIO(REG_6326_3D_TextureAddress9, prev->texture[0].texOffset9);
- /* FALLTHROUGH */
- case 8:
- MMIO(REG_6326_3D_TextureAddress8, prev->texture[0].texOffset8);
- MMIO(REG_6326_3D_TexturePitch89, prev->texture[0].texPitch89);
- /* FALLTHROUGH */
- case 7:
- MMIO(REG_6326_3D_TextureAddress7, prev->texture[0].texOffset7);
- /* FALLTHROUGH */
- case 6:
- MMIO(REG_6326_3D_TextureAddress6, prev->texture[0].texOffset6);
- MMIO(REG_6326_3D_TexturePitch67, prev->texture[0].texPitch67);
- /* FALLTHROUGH */
- case 5:
- MMIO(REG_6326_3D_TextureAddress5, prev->texture[0].texOffset5);
- /* FALLTHROUGH */
- case 4:
- MMIO(REG_6326_3D_TextureAddress4, prev->texture[0].texOffset4);
- MMIO(REG_6326_3D_TexturePitch45, prev->texture[0].texPitch45);
- /* FALLTHROUGH */
- case 3:
- MMIO(REG_6326_3D_TextureAddress3, prev->texture[0].texOffset3);
- /* FALLTHROUGH */
- case 2:
- MMIO(REG_6326_3D_TextureAddress2, prev->texture[0].texOffset2);
- MMIO(REG_6326_3D_TexturePitch23, prev->texture[0].texPitch23);
- /* FALLTHROUGH */
- case 1:
- MMIO(REG_6326_3D_TextureAddress1, prev->texture[0].texOffset1);
- /* FALLTHROUGH */
- case 0:
- MMIO(REG_6326_3D_TextureAddress0, prev->texture[0].texOffset0);
- MMIO(REG_6326_3D_TexturePitch01, prev->texture[0].texPitch01);
- break;
- }
- }
-
- /* texture environment */
- if (smesa->GlobalFlag & GFLAG_TEXTUREENV) {
- MMIO(REG_6326_3D_TextureBlendSet, prev->hwTexBlendSet);
- }
-
- smesa->GlobalFlag &= ~GFLAG_TEXTURE_STATES;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_context.h b/src/mesa/drivers/dri/sis/sis_context.h
deleted file mode 100644
index a82a659431e..00000000000
--- a/src/mesa/drivers/dri/sis/sis_context.h
+++ /dev/null
@@ -1,479 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#ifndef _sis_ctx_h_
-#define _sis_ctx_h_
-
-#include "main/context.h"
-#include "dri_util.h"
-#include "drm.h"
-#include "drm_sarea.h"
-#include "xmlconfig.h"
-#include "tnl/t_vertex.h"
-
-#include "sis_screen.h"
-#include "sis_reg.h"
-#include "sis6326_reg.h"
-#include "sis_dri.h"
-
-/* for GLboolean */
-#include
-
-#define PCI_CHIP_SIS300 0x0300
-#define PCI_CHIP_SIS630 0x6300
-#define PCI_CHIP_SIS540 0x5300
-
-#define NEW_TEXTURING 0x1
-#define NEW_TEXTURE_ENV 0x2
-
-/* Flags for software fallback cases:
- */
-#define SIS_FALLBACK_TEXTURE 0x0001
-#define SIS_FALLBACK_TEXTURE0 0x0002
-#define SIS_FALLBACK_TEXTURE1 0x0004
-#define SIS_FALLBACK_TEXENV0 0x0008
-#define SIS_FALLBACK_TEXENV1 0x0010
-#define SIS_FALLBACK_DRAW_BUFFER 0x0020
-#define SIS_FALLBACK_STENCIL 0x0040
-#define SIS_FALLBACK_WRITEMASK 0x0080
-#define SIS_FALLBACK_DISABLE 0x0100
-
-/* Flags for hardware state that needs to be updated */
-#define GFLAG_ENABLESETTING 0x00000001
-#define GFLAG_ENABLESETTING2 0x00000002
-#define GFLAG_ZSETTING 0x00000004
-#define GFLAG_ALPHASETTING 0x00000008
-#define GFLAG_DESTSETTING 0x00000010
-#define GFLAG_LINESETTING 0x00000020
-#define GFLAG_STENCILSETTING 0x00000040
-#define GFLAG_FOGSETTING 0x00000080
-#define GFLAG_DSTBLEND 0x00000100
-#define GFLAG_CLIPPING 0x00000200
-#define CFLAG_TEXTURERESET 0x00000400
-#define GFLAG_TEXTUREMIPMAP 0x00000800
-#define GFLAG_TEXBORDERCOLOR 0x00001000
-#define GFLAG_TEXTUREADDRESS 0x00002000
-#define GFLAG_TEXTUREENV 0x00004000
-#define CFLAG_TEXTURERESET_1 0x00008000
-#define GFLAG_TEXTUREMIPMAP_1 0x00010000
-#define GFLAG_TEXBORDERCOLOR_1 0x00020000
-#define GFLAG_TEXTUREADDRESS_1 0x00040000
-#define GFLAG_TEXTUREENV_1 0x00080000
-#define GFLAG_ALL 0x000fffff
-
-#define GFLAG_TEXTURE_STATES (CFLAG_TEXTURERESET | GFLAG_TEXTUREMIPMAP | \
- GFLAG_TEXBORDERCOLOR | GFLAG_TEXTUREADDRESS | \
- CFLAG_TEXTURERESET_1 | GFLAG_TEXTUREMIPMAP_1 | \
- GFLAG_TEXBORDERCOLOR_1 | \
- GFLAG_TEXTUREADDRESS_1 | \
- GFLAG_TEXTUREENV | GFLAG_TEXTUREENV_1)
-
-
-#define GFLAG_RENDER_STATES (GFLAG_ENABLESETTING | GFLAG_ENABLESETTING2 | \
- GFLAG_ZSETTING | GFLAG_ALPHASETTING | \
- GFLAG_DESTSETTING | GFLAG_FOGSETTING | \
- GFLAG_STENCILSETTING | GFLAG_DSTBLEND | \
- GFLAG_CLIPPING)
-
-/* Use the templated vertex format:
- */
-#define TAG(x) sis##x
-#include "tnl_dd/t_dd_vertex.h"
-#undef TAG
-
-/* Subpixel offsets for window coordinates (triangles):
- */
-#define SUBPIXEL_X (-0.5F)
-#define SUBPIXEL_Y (-0.5F)
-
-#define SIS_MAX_TEXTURE_SIZE 2048
-#define SIS_MAX_TEXTURES 2
-#define SIS_MAX_TEXTURE_LEVELS 11
-#define SIS_MAX_FRAME_LENGTH 3
-
-typedef struct {
- GLubyte *Data; /* Pointer to texture in offscreen */
- GLuint memType; /* VIDEO_TYPE or AGP_TYPE */
- void *handle; /* Handle for sisFree*() */
- GLuint pitch;
- GLuint size;
-} sisTexImage;
-
-typedef struct sis_tex_obj {
- sisTexImage image[SIS_MAX_TEXTURE_LEVELS]; /* Image data for each mipmap
- * level */
- GLenum format; /* One of GL_ALPHA, GL_INTENSITY, GL_LUMINANCE,
- * GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA
- * MESA_YCBCR */
- GLint hwformat; /* One of the TEXEL_ defines */
- GLint numImages; /* Number of images loaded into .image */
-} sisTexObj, *sisTexObjPtr;
-
-/*
- ** Device dependent context state
- */
-typedef struct __GLSiSTextureRec
-{
- GLint hwTextureSet;
- GLint hwTextureMip;
- GLint hwTextureClrHigh;
- GLint hwTextureClrLow;
- GLint hwTexWidthHeight; /* 6326: Texture Blending Setting */
- GLint hwTextureBorderColor;
-
- GLint texOffset0;
- GLint texOffset1;
- GLint texOffset2;
- GLint texOffset3;
- GLint texOffset4;
- GLint texOffset5;
- GLint texOffset6;
- GLint texOffset7;
- GLint texOffset8;
- GLint texOffset9;
- GLint texOffset10;
- GLint texOffset11;
-
- GLint texPitch01;
- GLint texPitch23;
- GLint texPitch45;
- GLint texPitch67;
- GLint texPitch89;
- GLint texPitch10;
-} __GLSiSTexture;
-
-typedef struct __GLSiSHardwareRec
-{
- GLint hwCapEnable, hwCapEnable2; /* Enable Setting */
-
- GLint hwOffsetZ, hwZ; /* Z Setting */
-
- GLint hwZBias, hwZMask; /* Z Setting */
-
- GLint hwAlpha; /* Alpha Setting */
-
- GLint hwDstSet, hwDstMask; /* Destination Setting */
-
- GLint hwOffsetDest; /* Destination Setting */
-
- GLint hwLinePattern; /* Line Setting */
-
- GLint hwFog; /* Fog Setting */
-
- GLint hwFogFar, hwFogInverse; /* Fog Distance setting */
-
- GLint hwFogDensity; /* Fog factor & density */
-
- GLint hwStSetting, hwStSetting2; /* Stencil Setting */
-
- GLint hwStOffset; /* Stencil Setting */
-
- GLint hwDstSrcBlend; /* Blending mode Setting */
-
- GLint clipTopBottom; /* Clip for Top & Bottom */
-
- GLint clipLeftRight; /* Clip for Left & Right */
-
- struct __GLSiSTextureRec texture[2];
-
- GLint hwTexEnvColor; /* Texture Blending Setting */
-
- GLint hwTexBlendSet; /* 6326 */
- GLint hwTexBlendColor0;
- GLint hwTexBlendColor1;
- GLint hwTexBlendAlpha0;
- GLint hwTexBlendAlpha1;
-
-}
-__GLSiSHardware;
-
-typedef struct sis_context sisContextRec;
-typedef struct sis_context *sisContextPtr;
-
-typedef void (*sis_quad_func)( sisContextPtr,
- sisVertex *,
- sisVertex *,
- sisVertex *,
- sisVertex * );
-
-typedef void (*sis_tri_func)( sisContextPtr,
- sisVertex *,
- sisVertex *,
- sisVertex * );
-
-typedef void (*sis_line_func)( sisContextPtr,
- sisVertex *,
- sisVertex * );
-
-typedef void (*sis_point_func)( sisContextPtr,
- sisVertex * );
-
-/**
- * Derived from gl_renderbuffer.
- */
-struct sis_renderbuffer {
- struct gl_renderbuffer Base; /* must be first! */
- drmSize size;
- GLuint offset;
- void *handle;
- GLuint pitch;
- GLuint bpp;
- char *map;
-};
-
-/* Device dependent context state */
-
-struct sis_context
-{
- /* This must be first in this structure */
- struct gl_context *glCtx;
-
- /* Vertex state */
- GLuint vertex_size;
- struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
- GLuint vertex_attr_count;
- char *verts; /* points to tnl->clipspace.vertex_buf */
-
- /* Vertex buffer (in system memory or AGP) state. */
- unsigned char *vb; /* Beginning of vertex buffer */
- unsigned char *vb_cur; /* Current write location in vertex buffer */
- unsigned char *vb_last; /* Last written location in vertex buffer */
- unsigned char *vb_end; /* End of vertex buffer */
- void *vb_agp_handle;
- GLuint vb_agp_offset;
- GLboolean using_agp;
- GLint coloroffset; /* Offset in vertex format of current color */
- GLint specoffset; /* Offset in vertex format of specular color */
-
- GLuint NewGLState;
- GLuint Fallback;
- GLuint RenderIndex;
- GLfloat hw_viewport[16];
- GLfloat depth_scale;
-
- unsigned int virtualX, virtualY;
- unsigned int bytesPerPixel;
- unsigned char *IOBase;
- unsigned char *FbBase;
- unsigned int displayWidth;
-
- /* HW RGBA layout */
- unsigned int redMask, greenMask, blueMask, alphaMask;
- unsigned int colorFormat;
-
- /* Z format */
- unsigned int zFormat;
-
- /* Clear patterns, 4 bytes */
- unsigned int clearColorPattern;
- unsigned int clearZStencilPattern;
-
- /* Fallback rasterization functions
- */
- sis_point_func draw_point;
- sis_line_func draw_line;
- sis_tri_func draw_tri;
- sis_quad_func draw_quad;
-
- GLuint hw_primitive;
- GLenum raster_primitive;
- GLenum render_primitive;
-
- /* DRM fd */
- int driFd;
-
- /* AGP Memory */
- unsigned int AGPSize;
- unsigned char *AGPBase;
- unsigned int AGPAddr;
-
- /* register 0x89F4 */
- GLint AGPParseSet;
-
- /* register 0x89F8 */
- GLint dwPrimitiveSet;
-
- __GLSiSHardware prev, current;
-
- int Chipset;
- GLboolean is6326;
-
- GLint drawableID;
-
- GLint GlobalFlag;
- DECLARE_RENDERINPUTS(last_tcl_state_bitset);
-
- /* Stereo */
- GLboolean useStereo;
- GLboolean stereoEnabled;
- int stereo_drawIndex;
- int stereo_drawSide;
- GLboolean irqEnabled;
-
- GLboolean clearTexCache;
-
- GLuint TexStates[SIS_MAX_TEXTURES];
- GLuint PrevTexFormat[SIS_MAX_TEXTURES];
-
- int *CurrentQueueLenPtr;
- unsigned int *FrameCountPtr;
-
- /* Front/back/depth buffer info */
- GLuint width, height; /* size of buffers */
- GLint bottom; /* used for FLIP macro */
- /* XXX These don't belong here. They should be per-drawable state. */
- struct sis_renderbuffer front;
- struct sis_renderbuffer back;
- struct sis_renderbuffer depth;
- struct sis_renderbuffer stencil; /* mirrors depth */
-
- /* Mirrors of some DRI state
- */
- __DRIcontext *driContext; /* DRI context */
- __DRIscreen *driScreen; /* DRI screen */
- __DRIdrawable *driDrawable; /* DRI drawable bound to this ctx */
-
- unsigned int lastStamp; /* mirror driDrawable->lastStamp */
-
- drm_context_t hHWContext;
- drm_hw_lock_t *driHwLock;
-
- sisScreenPtr sisScreen; /* Screen private DRI data */
- SISSAREAPrivPtr sarea; /* Private SAREA data */
-
- /* Configuration cache */
- driOptionCache optionCache;
- GLint texture_depth;
-};
-
-#define SIS_CONTEXT(ctx) ((sisContextPtr)(ctx->DriverCtx))
-
-/* Macros */
-#define GET_IOBase(x) ((x)->IOBase)
-
-#define Y_FLIP(Y) (smesa->bottom - (Y))
-
-#define SISPACKCOLOR565( r, g, b ) \
- ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))
-
-#define SISPACKCOLOR8888( r, g, b, a ) \
- (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-
-#define SIS_VERBOSE 0
-
-
-#define MMIO(reg, value) \
-{\
- *(volatile GLint *)(smesa->IOBase + (reg)) = value; \
-}
-
-#define MMIO_READ(reg) *(volatile GLint *)(smesa->IOBase + (reg))
-#define MMIO_READf(reg) *(volatile GLfloat *)(smesa->IOBase + (reg))
-
-#if defined(__i386__) || defined(__x86_64__)
-#define MMIO_WMB() __asm __volatile("" : : : "memory")
-#elif defined(__ia64__)
-#define MMIO_WMB() __asm __volatile("mf" : : : "memory")
-#else
-#error platform needs WMB
-#endif
-
-#define mEndPrimitive() \
-{ \
- *(volatile GLubyte *)(smesa->IOBase + REG_3D_EndPrimitiveList) = 0xff; \
- *(volatile GLuint *)(smesa->IOBase + 0x8b60) = 0xffffffff; \
-}
-
-#define sis_fatal_error(...) \
-do { \
- fprintf(stderr, "[%s:%d]:", __FILE__, __LINE__); \
- fprintf(stderr, __VA_ARGS__); \
- exit(-1); \
-} while (0)
-
-/* Lock required */
-#define mWait3DCmdQueue(wLen) \
-/* Update the mirrored queue pointer if it doesn't indicate enough space */ \
-if (*(smesa->CurrentQueueLenPtr) < (wLen)) { \
- *(smesa->CurrentQueueLenPtr) = \
- (*(GLint *)(GET_IOBase(smesa) + REG_CommandQueue) & MASK_QueueLen) - 20; \
- /* Spin and wait if the queue is actually too full */ \
- if (*(smesa->CurrentQueueLenPtr) < (wLen)) \
- WaitingFor3dIdle(smesa, wLen); \
- *(smesa->CurrentQueueLenPtr) -= wLen; \
-}
-
-enum _sis_verbose {
- VERBOSE_SIS_BUFFER = 0x1,
- VERBOSE_SIS_MEMORY = 0x2
-};
-
-extern GLboolean sisCreateContext( gl_api api,
- const struct gl_config *glVisual,
- __DRIcontext *driContextPriv,
- void *sharedContextPrivate );
-extern void sisDestroyContext( __DRIcontext * );
-
-void sisReAllocateBuffers(struct gl_context *ctx, struct gl_framebuffer *drawbuffer,
- GLuint width, GLuint height);
-
-extern GLboolean sisMakeCurrent( __DRIcontext *driContextPriv,
- __DRIdrawable *driDrawPriv,
- __DRIdrawable *driReadPriv );
-
-extern GLboolean sisUnbindContext( __DRIcontext *driContextPriv );
-
-void WaitEngIdle (sisContextPtr smesa);
-void Wait2DEngIdle (sisContextPtr smesa);
-void WaitingFor3dIdle(sisContextPtr smesa, int wLen);
-
-/* update to hw */
-extern void sis_update_texture_state( sisContextPtr smesa );
-extern void sis_update_render_state( sisContextPtr smesa );
-extern void sis6326_update_texture_state( sisContextPtr smesa );
-extern void sis6326_update_render_state( sisContextPtr smesa );
-
-/* ================================================================
- * Debugging:
- */
-#define DO_DEBUG 1
-
-#if DO_DEBUG
-extern int SIS_DEBUG;
-#else
-#define SIS_DEBUG 0
-#endif
-
-#define DEBUG_FALLBACKS 0x01
-
-#endif /* _sis_ctx_h_ */
diff --git a/src/mesa/drivers/dri/sis/sis_dd.c b/src/mesa/drivers/dri/sis/sis_dd.c
deleted file mode 100644
index bba516f8dcd..00000000000
--- a/src/mesa/drivers/dri/sis/sis_dd.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- *
- */
-
-#include "sis_context.h"
-#include "sis_dd.h"
-#include "sis_lock.h"
-#include "sis_alloc.h"
-#include "sis_span.h"
-#include "sis_state.h"
-#include "sis_tris.h"
-
-#include "main/formats.h"
-#include "main/renderbuffer.h"
-
-#include "utils.h"
-
-/* Return the width and height of the given buffer.
- */
-static void
-sisGetBufferSize( struct gl_framebuffer *buffer,
- GLuint *width, GLuint *height )
-{
- GET_CURRENT_CONTEXT(ctx);
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- LOCK_HARDWARE();
- *width = smesa->driDrawable->w;
- *height = smesa->driDrawable->h;
- UNLOCK_HARDWARE();
-}
-
-/* Return various strings for glGetString().
- */
-static const GLubyte *
-sisGetString( struct gl_context *ctx, GLenum name )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- static char buffer[128];
- unsigned offset;
- GLuint agp_mode = (smesa->AGPSize > 0);
-
- switch ( name )
- {
- case GL_VENDOR:
- return (GLubyte *)"Eric Anholt";
-
- case GL_RENDERER:
- offset = driGetRendererString( buffer, "SiS", agp_mode );
-
- return (GLubyte *)buffer;
-
- default:
- return NULL;
- }
-}
-
-/* Send all commands to the hardware.
- */
-static void
-sisFlush( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- SIS_FIREVERTICES(smesa);
-}
-
-/* Make sure all commands have been sent to the hardware and have
- * completed processing.
- */
-static void
-sisFinish( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- SIS_FIREVERTICES(smesa);
- LOCK_HARDWARE();
- WaitEngIdle( smesa );
- UNLOCK_HARDWARE();
-}
-
-static void
-sisDeleteRenderbuffer(struct gl_renderbuffer *rb)
-{
- /* Don't free() since we're contained in sis_context struct. */
-}
-
-static GLboolean
-sisRenderbufferStorage(struct gl_context *ctx, struct gl_renderbuffer *rb,
- GLenum internalFormat, GLuint width, GLuint height)
-{
- rb->Width = width;
- rb->Height = height;
- rb->InternalFormat = internalFormat;
- return GL_TRUE;
-}
-
-static void
-sisInitRenderbuffer(struct gl_renderbuffer *rb, GLenum format)
-{
- const GLuint name = 0;
-
- _mesa_init_renderbuffer(rb, name);
-
- /* Make sure we're using a null-valued GetPointer routine */
- assert(rb->GetPointer(NULL, rb, 0, 0) == NULL);
-
- rb->InternalFormat = format;
-
- if (format == GL_RGBA) {
- /* Color */
- rb->Format = MESA_FORMAT_ARGB8888;
- rb->DataType = GL_UNSIGNED_BYTE;
- }
- else if (format == GL_DEPTH_COMPONENT16) {
- /* Depth */
- /* we always Get/Put 32-bit Z values */
- rb->Format = MESA_FORMAT_Z16;
- rb->DataType = GL_UNSIGNED_INT;
- }
- else if (format == GL_DEPTH_COMPONENT24) {
- /* Depth */
- /* we always Get/Put 32-bit Z values */
- rb->Format = MESA_FORMAT_Z32;
- rb->DataType = GL_UNSIGNED_INT;
- }
- else {
- /* Stencil */
- ASSERT(format == GL_STENCIL_INDEX8_EXT);
- rb->Format = MESA_FORMAT_S8;
- rb->DataType = GL_UNSIGNED_BYTE;
- }
-
- rb->Delete = sisDeleteRenderbuffer;
- rb->AllocStorage = sisRenderbufferStorage;
-}
-
-void
-sisUpdateBufferSize(sisContextPtr smesa)
-{
- __GLSiSHardware *current = &smesa->current;
- __GLSiSHardware *prev = &smesa->prev;
- struct gl_framebuffer *fb = smesa->glCtx->DrawBuffer;
-
- if (!smesa->front.Base.InternalFormat) {
- /* do one-time init for the renderbuffers */
- sisInitRenderbuffer(&smesa->front.Base, GL_RGBA);
- sisSetSpanFunctions(&smesa->front, &fb->Visual);
- _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &smesa->front.Base);
-
- if (fb->Visual.doubleBufferMode) {
- sisInitRenderbuffer(&smesa->back.Base, GL_RGBA);
- sisSetSpanFunctions(&smesa->back, &fb->Visual);
- _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &smesa->back.Base);
- }
-
- if (smesa->glCtx->Visual.depthBits > 0) {
- sisInitRenderbuffer(&smesa->depth.Base,
- (smesa->glCtx->Visual.depthBits == 16
- ? GL_DEPTH_COMPONENT16 : GL_DEPTH_COMPONENT24));
- sisSetSpanFunctions(&smesa->depth, &fb->Visual);
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &smesa->depth.Base);
- }
-
- if (smesa->glCtx->Visual.stencilBits > 0) {
- sisInitRenderbuffer(&smesa->stencil.Base, GL_STENCIL_INDEX8_EXT);
- sisSetSpanFunctions(&smesa->stencil, &fb->Visual);
- _mesa_add_renderbuffer(fb, BUFFER_STENCIL, &smesa->stencil.Base);
- }
- }
-
- /* Make sure initialization did what we think it should */
- assert(smesa->front.Base.InternalFormat);
- assert(smesa->front.Base.AllocStorage);
- if (fb->Visual.doubleBufferMode) {
- assert(fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer);
- assert(smesa->front.Base.AllocStorage);
- }
- if (fb->Visual.depthBits) {
- assert(fb->Attachment[BUFFER_DEPTH].Renderbuffer);
- assert(smesa->depth.Base.AllocStorage);
- }
-
- /* XXX Should get the base offset of the frontbuffer from the X Server */
- smesa->front.offset = smesa->driDrawable->x * smesa->bytesPerPixel +
- smesa->driDrawable->y * smesa->front.pitch;
- smesa->front.map = (char *) smesa->driScreen->pFB + smesa->front.offset;
-
- if ( smesa->width == smesa->driDrawable->w &&
- smesa->height == smesa->driDrawable->h )
- {
- return;
- }
-
- smesa->front.bpp = smesa->bytesPerPixel * 8;
- /* Front pitch set on context create */
- smesa->front.size = smesa->front.pitch * smesa->driDrawable->h;
-
- smesa->width = smesa->driDrawable->w;
- smesa->height = smesa->driDrawable->h;
- smesa->bottom = smesa->height - 1;
-
- if (smesa->back.offset)
- sisFreeBackbuffer( smesa );
- if (smesa->depth.offset)
- sisFreeZStencilBuffer( smesa );
-
- if ( smesa->glCtx->Visual.depthBits > 0 )
- sisAllocZStencilBuffer( smesa );
- if ( smesa->glCtx->Visual.doubleBufferMode )
- sisAllocBackbuffer( smesa );
-
- current->hwZ &= ~MASK_ZBufferPitch;
- current->hwZ |= smesa->depth.pitch >> 2;
- current->hwOffsetZ = smesa->depth.offset >> 2;
-
- if ((current->hwOffsetZ != prev->hwOffsetZ) || (current->hwZ != prev->hwZ)) {
- prev->hwOffsetZ = current->hwOffsetZ;
- prev->hwZ = current->hwZ;
- smesa->GlobalFlag |= GFLAG_ZSETTING;
- }
-
- sisUpdateClipping( smesa->glCtx );
-}
-
-/* Initialize the driver's misc functions.
- */
-void
-sisInitDriverFuncs( struct dd_function_table *functions )
-{
- functions->GetBufferSize = sisGetBufferSize;
- functions->GetString = sisGetString;
- functions->Finish = sisFinish;
- functions->Flush = sisFlush;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_dd.h b/src/mesa/drivers/dri/sis/sis_dd.h
deleted file mode 100644
index b141243a59a..00000000000
--- a/src/mesa/drivers/dri/sis/sis_dd.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#ifndef __SIS_DD_H__
-#define __SIS_DD_H__
-
-extern void sisUpdateBufferSize( sisContextPtr smesa );
-
-extern void sisInitDriverFuncs( struct dd_function_table *functions );
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/sis_fog.c b/src/mesa/drivers/dri/sis/sis_fog.c
deleted file mode 100644
index a9b84654a3d..00000000000
--- a/src/mesa/drivers/dri/sis/sis_fog.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "sis_context.h"
-#include "sis_state.h"
-
-#include "main/macros.h"
-
-static GLint convertFtToFogFt( GLfloat dwInValue );
-static GLint doFPtoFixedNoRound( GLfloat dwInValue, int nFraction );
-
-void
-sisDDFogfv( struct gl_context *ctx, GLenum pname, const GLfloat *params )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- float fArg;
- GLint fogColor;
-
- switch (pname)
- {
- case GL_FOG_COORDINATE_SOURCE_EXT:
- current->hwFog &= ~MASK_FogMode;
- switch (ctx->Fog.FogCoordinateSource)
- {
- case GL_FOG_COORDINATE_EXT:
- current->hwFog &= ~MASK_FogZLookup;
- break;
- case GL_FRAGMENT_DEPTH_EXT:
- current->hwFog |= MASK_FogZLookup;
- break;
- }
- if (current->hwFog != prev->hwFog) {
- prev->hwFog = current->hwFog;
- smesa->GlobalFlag |= GFLAG_FOGSETTING;
- }
- break;
- case GL_FOG_MODE:
- current->hwFog &= ~MASK_FogMode;
- switch (ctx->Fog.Mode)
- {
- case GL_LINEAR:
- current->hwFog |= FOGMODE_LINEAR;
- break;
- case GL_EXP:
- current->hwFog |= FOGMODE_EXP;
- break;
- case GL_EXP2:
- current->hwFog |= FOGMODE_EXP2;
- break;
- }
- if (current->hwFog != prev->hwFog) {
- prev->hwFog = current->hwFog;
- smesa->GlobalFlag |= GFLAG_FOGSETTING;
- }
- break;
- case GL_FOG_DENSITY:
- current->hwFogDensity = convertFtToFogFt( ctx->Fog.Density );
- if (current->hwFogDensity != prev->hwFogDensity) {
- prev->hwFogDensity = current->hwFogDensity;
- smesa->GlobalFlag |= GFLAG_FOGSETTING;
- }
- break;
- case GL_FOG_START:
- case GL_FOG_END:
- fArg = 1.0 / (ctx->Fog.End - ctx->Fog.Start);
- current->hwFogInverse = doFPtoFixedNoRound( fArg, 10 );
- if (pname == GL_FOG_END)
- {
- if (smesa->Chipset == PCI_CHIP_SIS300)
- current->hwFogFar = doFPtoFixedNoRound( ctx->Fog.End, 10 );
- else
- current->hwFogFar = doFPtoFixedNoRound( ctx->Fog.End, 6 );
- }
- if (current->hwFogFar != prev->hwFogFar ||
- current->hwFogInverse != prev->hwFogInverse)
- {
- prev->hwFogFar = current->hwFogFar;
- prev->hwFogInverse = current->hwFogInverse;
- smesa->GlobalFlag |= GFLAG_FOGSETTING;
- }
- break;
- case GL_FOG_INDEX:
- /* TODO */
- break;
- case GL_FOG_COLOR:
- fogColor = FLOAT_TO_UBYTE( ctx->Fog.Color[0] ) << 16;
- fogColor |= FLOAT_TO_UBYTE( ctx->Fog.Color[1] ) << 8;
- fogColor |= FLOAT_TO_UBYTE( ctx->Fog.Color[2] );
- current->hwFog &= 0xff000000;
- current->hwFog |= fogColor;
- if (current->hwFog != prev->hwFog) {
- prev->hwFog = current->hwFog;
- smesa->GlobalFlag |= GFLAG_FOGSETTING;
- }
- break;
- }
-}
-
-static GLint
-doFPtoFixedNoRound( GLfloat dwInValue, int nFraction )
-{
- GLint dwMantissa;
- int nTemp;
- union { int i; float f; } u;
- GLint val;
-
- u.f = dwInValue;
- val = u.i;
-
- if (val == 0)
- return 0;
- nTemp = (int) (val & 0x7F800000) >> 23;
- nTemp = nTemp - 127 + nFraction - 23;
- dwMantissa = (val & 0x007FFFFF) | 0x00800000;
-
- if (nTemp < -25)
- return 0;
- if (nTemp > 0)
- dwMantissa <<= nTemp;
- else {
- nTemp = -nTemp;
- dwMantissa >>= nTemp;
- }
- if (val & 0x80000000)
- dwMantissa = ~dwMantissa + 1;
- return dwMantissa;
-}
-
-/* s[8].23->s[7].10 */
-static GLint
-convertFtToFogFt( GLfloat dwInValue )
-{
- GLint dwMantissa, dwExp;
- GLint dwRet;
- union { int i; float f; } u;
- GLint val;
-
- u.f = dwInValue;
- val = u.i;
-
- if (val == 0)
- return 0;
-
- /* ----- Standard float Format: s[8].23 -----
- * ----- = (-1)^S * 2^(E - 127) * (1 + M / 2^23) -----
- * ----- = (-1)^S * 2^((E-63) - 64) * (1 + (M/2^13) / 2^10) -----
- * ----- Density float Format: s[7].10 -----
- * ----- New Exponential = E - 63 -----
- * ----- New Mantissa = M / 2^13 -----
- * ----- -----
- */
-
- dwExp = (val & 0x7F800000) >> 23;
- dwExp -= 63;
-
- if (dwExp < 0)
- return 0;
-
- if (dwExp <= 0x7F)
- dwMantissa = (val & 0x007FFFFF) >> (23 - 10);
- else {
- /* ----- To Return +Max(or -Max) ----- */
- dwExp = 0x7F;
- dwMantissa = 0x3FF;
- }
-
- dwRet = (val & 0x80000000) >> (31 - 17); /* Shift Sign Bit */
-
- dwRet |= (dwExp << 10) | dwMantissa;
-
- return dwRet;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_lock.c b/src/mesa/drivers/dri/sis/sis_lock.c
deleted file mode 100644
index b8ff4e31e25..00000000000
--- a/src/mesa/drivers/dri/sis/sis_lock.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#include "main/context.h"
-#include "sis_context.h"
-#include "sis_lock.h"
-#include "sis_dd.h"
-#include "sis_state.h"
-#include "drirenderbuffer.h"
-
-/* Update the hardware state. This is called if another context has
- * grabbed the hardware lock, which includes the X server. This
- * function also updates the driver's window state after the X server
- * moves, resizes or restacks a window -- the change will be reflected
- * in the drawable position and clip rects. Since the X server grabs
- * the hardware lock when it changes the window state, this routine will
- * automatically be called after such a change.
- */
-void
-sisGetLock( sisContextPtr smesa, GLuint flags )
-{
- __DRIdrawable *dPriv = smesa->driDrawable;
- __DRIscreen *sPriv = smesa->driScreen;
- SISSAREAPrivPtr sarea = smesa->sarea;
-
- drmGetLock( smesa->driFd, smesa->hHWContext, flags );
-
- /* The window might have moved, so we might need to get new clip
- * rects.
- *
- * NOTE: This releases and regrabs the hw lock to allow the X server
- * to respond to the DRI protocol request for new drawable info.
- * Since the hardware state depends on having the latest drawable
- * clip rects, all state checking must be done _after_ this call.
- */
- DRI_VALIDATE_DRAWABLE_INFO( sPriv, dPriv );
-
- if ( smesa->lastStamp != dPriv->lastStamp ) {
- sisUpdateBufferSize( smesa );
- sisUpdateClipping( smesa->glCtx );
- if (smesa->is6326)
- sis6326DDDrawBuffer( smesa->glCtx, smesa->glCtx->Color.DrawBuffer[0] );
- else
- sisDDDrawBuffer( smesa->glCtx, smesa->glCtx->Color.DrawBuffer[0] );
- driUpdateFramebufferSize(smesa->glCtx, dPriv);
- smesa->lastStamp = dPriv->lastStamp;
- }
-
- if ( sarea->CtxOwner != smesa->hHWContext ) {
- sarea->CtxOwner = smesa->hHWContext;
- smesa->GlobalFlag = GFLAG_ALL;
- }
-}
diff --git a/src/mesa/drivers/dri/sis/sis_lock.h b/src/mesa/drivers/dri/sis/sis_lock.h
deleted file mode 100644
index 54844e9b099..00000000000
--- a/src/mesa/drivers/dri/sis/sis_lock.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#ifndef __SIS_LOCK_H
-#define __SIS_LOCK_H
-
-extern void sisGetLock( sisContextPtr smesa, GLuint flags );
-
-#ifdef DEBUG_LOCKING
-extern char *prevLockFile;
-extern int prevLockLine;
-#define DEBUG_LOCK() \
- do { \
- prevLockFile=(__FILE__); \
- prevLockLine=(__LINE__); \
- } while (0)
-#define DEBUG_RESET() \
- do { \
- prevLockFile=NULL; \
- prevLockLine=0; \
- } while (0)
-#define DEBUG_CHECK_LOCK() \
- do { \
- if(prevLockFile){ \
- fprintf(stderr, "LOCK SET : %s:%d\n", __FILE__, __LINE__); \
- } \
- } while (0)
-#else
-#define DEBUG_LOCK()
-#define DEBUG_RESET()
-#define DEBUG_CHECK_LOCK()
-#endif
-
-/* Lock the hardware using the global current context */
-#define LOCK_HARDWARE() \
- do { \
- char __ret=0; \
- mEndPrimitive(); \
- DEBUG_CHECK_LOCK(); \
- DRM_CAS( smesa->driHwLock, smesa->hHWContext, \
- (DRM_LOCK_HELD | smesa->hHWContext), __ret ); \
- if ( __ret != 0 ) \
- sisGetLock( smesa, 0 ); \
- DEBUG_LOCK(); \
- } while (0)
-
-/* Unlock the hardware using the global current context */
-#define UNLOCK_HARDWARE() \
- do { \
- mEndPrimitive(); \
- DRM_UNLOCK(smesa->driFd, smesa->driHwLock, \
- smesa->hHWContext); \
- DEBUG_RESET(); \
- } while (0)
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/sis_reg.h b/src/mesa/drivers/dri/sis/sis_reg.h
deleted file mode 100644
index e40c4371bfe..00000000000
--- a/src/mesa/drivers/dri/sis/sis_reg.h
+++ /dev/null
@@ -1,902 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#ifndef _sis_reg_h_
-#define _sis_reg_h_
-
-/*
- * Define All the Register Address of 6327
- */
-#define REG_SRC_ADDR 0x8200
-#define REG_SRC_PITCH 0x8204
-# define BLIT_DEPTH_8 0x00000000
-# define BLIT_DEPTH_15 0x40000000
-# define BLIT_DEPTH_16 0x80000000
-# define BLIT_DEPTH_32 0xc0000000
-#define REG_SRC_X_Y 0x8208
-#define REG_DST_X_Y 0x820c
-#define REG_DST_ADDR 0x8210
-#define REG_DST_PITCH_HEIGHT 0x8214
-#define REG_WIDTH_HEIGHT 0x8218
-#define REG_PATFG 0x821c
-#define REG_PATBG 0x8220
-#define REG_SRCFG 0x8224
-#define REG_SRCBG 0x8228
-#define REG_MONOPAT0 0x822c
-#define REG_MONOPAT1 0x8230
-#define REG_CLIPLT 0x8234
-#define REG_CLIPRB 0x8238
-#define REG_BLIT_CMD 0x823c
-# define CMD_ROP_PAT 0x0000f000
-# define CMD_ROP_SRC 0x0000cc00
-# define CMD_DD_ENABLE 0x00000006
-# define CMD_SRC_VIDEO 0x00000000
-# define CMD_SRC_CPU 0x00000010
-# define CMD_DIR_X_DEC 0x00000000
-# define CMD_DIR_X_INC 0x00010000
-# define CMD_DIR_Y_DEC 0x00000000
-# define CMD_DIR_Y_INC 0x00020000
-
-#define REG_CommandQueue 0x8240
-
-#define REG_3D_TSFSa 0x8800
-#define REG_3D_TSZa 0x8804
-#define REG_3D_TSXa 0x8808
-#define REG_3D_TSYa 0x880C
-#define REG_3D_TSARGBa 0x8810
-#define REG_3D_TSWGa 0x8814
-#define REG_3D_TSUAa 0x8818
-#define REG_3D_TSVAa 0x881C
-#define REG_3D_TSUBa 0x8820
-#define REG_3D_TSVBa 0x8824
-#define REG_3D_TSUCa 0x8828
-#define REG_3D_TSVCa 0x882C
-
-#define REG_3D_TSFSb 0x8830
-#define REG_3D_TSZb 0x8834
-#define REG_3D_TSXb 0x8838
-#define REG_3D_TSYb 0x883C
-#define REG_3D_TSARGBb 0x8840
-#define REG_3D_TSWGb 0x8844
-#define REG_3D_TSUAb 0x8848
-#define REG_3D_TSVAb 0x884C
-#define REG_3D_TSUBb 0x8850
-#define REG_3D_TSVBb 0x8854
-#define REG_3D_TSUCb 0x8858
-#define REG_3D_TSVCb 0x885C
-
-#define REG_3D_TSFSc 0x8860
-#define REG_3D_TSZc 0x8864
-#define REG_3D_TSXc 0x8868
-#define REG_3D_TSYc 0x886C
-#define REG_3D_TSARGBc 0x8870
-#define REG_3D_TSWGc 0x8874
-#define REG_3D_TSUAc 0x8878
-#define REG_3D_TSVAc 0x887C
-#define REG_3D_TSUBc 0x8880
-#define REG_3D_TSVBc 0x8884
-#define REG_3D_TSUCc 0x8888
-#define REG_3D_TSVCc 0x888C
-
-/*
- * REG_3D_AGPCmdSetting (89e4h-89f7)
- */
-#define REG_3D_AGPCmBase 0x89E4
-#define REG_3D_AGPRmDwNum 0x89E8
-#define REG_3D_AGPTtDwNum 0x89EC
-#define REG_3D_AGPCmFire 0x89F0
-
-#define REG_3D_ParsingSet 0x89F4
-#define REG_3D_PrimitiveSet 0x89F8
-#define REG_3D_ShadeMode 0x89F8
-#define REG_3D_EngineFire 0x89FC
-#define REG_3D_EngineStatus 0x89FC
-#define REG_3D_TEnable 0x8A00
-#define REG_3D_TEnable2 0x8A04
-
-#define REG_3D_ZSet 0x8A08
-#define REG_3D_ZBias 0x8A0C
-#define REG_3D_ZStWriteMask 0x8A10
-
-#define REG_3D_ZAddress 0x8A14
-#define REG_3D_AlphaSet 0x8A18
-#define REG_3D_AlphaAddress 0x8A1C
-#define REG_3D_DstSet 0x8A20
-#define REG_3D_DstAlphaWriteMask 0x8A24
-
-#define REG_3D_DstAddress 0x8A28
-
-#define REG_3D_LinePattern 0x8A2C
-
-#define REG_3D_FogSet 0x8A30
-
-#define REG_3D_FogFarDistance 0x8A34
-#define REG_3D_FogInverseDistance 0x8A38
-#define REG_3D_FogFactorDensity 0x8A3C
-
-#define REG_3D_StencilSet 0x8A44
-#define REG_3D_StencilSet2 0x8A48
-#define REG_3D_StencilAddress 0x8A4C
-
-#define REG_3D_DstBlendMode 0x8A50
-#define REG_3D_SrcBlendMode 0x8A50
-#define REG_3D_ClipTopBottom 0x8A54
-#define REG_3D_ClipLeftRight 0x8A58
-
-#define REG_3D_Brightness 0x8A5C
-
-#define REG_3D_BumpMapSet 0x8A68
-#define REG_3D_BumpMapAddress 0x8A6C
-#define REG_3D_BumpMapPitch 0x8A70
-#define REG_3D_BumpMapMatrix0 0x8A74
-#define REG_3D_BumpMapMatrix1 0x8A78
-
-/*
- * Define the Texture Register Address of 6326
- */
-#define REG_3D_TextureSet 0x8A7C
-#define REG_3D_TextureWidthHeight 0x8A7C
-#define REG_3D_TextureMip 0x8A80
-
-#define REG_3D_TextureTransparencyColorHigh 0x8A84
-#define REG_3D_TextureTransparencyColorLow 0x8A88
-#define REG_3D_TextureBorderColor 0x8A8C
-#define REG_3D_TextureAddress0 0x8A90
-#define REG_3D_TextureAddress1 0x8A94
-#define REG_3D_TextureAddress2 0x8A98
-#define REG_3D_TextureAddress3 0x8A9C
-#define REG_3D_TextureAddress4 0x8AA0
-#define REG_3D_TextureAddress5 0x8AA4
-#define REG_3D_TextureAddress6 0x8AA8
-#define REG_3D_TextureAddress7 0x8AAC
-#define REG_3D_TextureAddress8 0x8AB0
-#define REG_3D_TextureAddress9 0x8AB4
-#define REG_3D_TextureAddress10 0x8AB8
-#define REG_3D_TextureAddress11 0x8ABC
-#define REG_3D_TexturePitch0 0x8AC0
-#define REG_3D_TexturePitch1 0x8AC0
-#define REG_3D_TexturePitch2 0x8AC4
-#define REG_3D_TexturePitch3 0x8AC4
-#define REG_3D_TexturePitch4 0x8AC8
-#define REG_3D_TexturePitch5 0x8AC8
-#define REG_3D_TexturePitch6 0x8ACC
-#define REG_3D_TexturePitch7 0x8ACC
-#define REG_3D_TexturePitch8 0x8AD0
-#define REG_3D_TexturePitch9 0x8AD0
-#define REG_3D_TexturePitch10 0x8AD4
-
-#define REG_3D_Texture1Set 0x8ADC
-#define REG_3D_Texture1WidthHeight 0x8ADC
-#define REG_3D_Texture1Mip 0x8AE0
-
-#define REG_3D_Texture1TransparencyColorHigh 0x8AE4
-#define REG_3D_Texture1TransparencyColorLow 0x8AE8
-#define REG_3D_Texture1BorderColor 0x8AEC
-#define REG_3D_Texture1Address0 0x8AF0
-#define REG_3D_Texture1Address1 0x8AF4
-#define REG_3D_Texture1Address2 0x8AF8
-#define REG_3D_Texture1Address3 0x8AFC
-#define REG_3D_Texture1Address4 0x8B00
-#define REG_3D_Texture1Address5 0x8B04
-#define REG_3D_Texture1Address6 0x8B08
-#define REG_3D_Texture1Address7 0x8B0C
-#define REG_3D_Texture1Address8 0x8B10
-#define REG_3D_Texture1Address9 0x8B14
-#define REG_3D_Texture1Address10 0x8B18
-#define REG_3D_Texture1Address11 0x8B1C
-#define REG_3D_Texture1Pitch0 0x8B20
-#define REG_3D_Texture1Pitch1 0x8B20
-#define REG_3D_Texture1Pitch2 0x8B24
-#define REG_3D_Texture1Pitch3 0x8B24
-#define REG_3D_Texture1Pitch4 0x8B28
-#define REG_3D_Texture1Pitch5 0x8B28
-#define REG_3D_Texture1Pitch6 0x8B2C
-#define REG_3D_Texture1Pitch7 0x8B2C
-#define REG_3D_Texture1Pitch8 0x8B30
-#define REG_3D_Texture1Pitch9 0x8B30
-#define REG_3D_Texture1Pitch10 0x8B34
-
-#define REG_3D_TextureBlendFactor 0x8B3C
-#define REG_3D_TextureColorBlendSet0 0x8B40
-#define REG_3D_TextureColorBlendSet1 0x8B44
-#define REG_3D_TextureAlphaBlendSet0 0x8B48
-#define REG_3D_TextureAlphaBlendSet1 0x8B4C
-/*
- * Define the End of Primitive List of 6326
- */
-#define REG_3D_EndPrimitiveList 0X8B50
-
-
-/*
- * Define the Stipple Register Address of 6326
- */
-#define REG_3D_Stipple0 0X8B60
-
-#define REG_3D_TexturePalette 0x8C00
-
-/*
- * REG_CommandQueue -- (8240h-8243h)
- */
-#define MASK_QueueLen 0x0000ffff
-#define SiS_EngIdle2d 0x80000000
-#define SiS_EngIdle 0xe0000000
-#define MASK_EngState 0xf0000000
-
-/*
- * REG_3D_ParsingSet -- Define Parsing Mask (89F4h-89F7h)
- */
-#define MASK_VertexDWSize 0xf0000000
-#define MASK_VertexDataFormat 0x0fff0000
-/* Because the original MASK_PsVertex_* names of these bits appared to be
- * wrong, new names SiS_PS_* based off of the 4.3.0 driver and research are
- * below.
- */
-#define SiS_PS_HAS_XYZ MASK_PsVertex_HAS_RHW
-#define SiS_PS_HAS_W MASK_PsVertex_HAS_NORMALXYZ
-#define SiS_PS_HAS_DIFFUSE MASK_PsVertex_HAS_SPECULAR
-#define SiS_PS_HAS_SPECULAR MASK_PsVertex_HAS_DIFFUSE
-#define SiS_PS_HAS_UV0 MASK_PsVertex_HAS_UVSet2
-#define SiS_PS_HAS_UV1 MASK_PsVertex_HAS_UVSet3
-#define MASK_PsVertex_HAS_RHW 0x08000000
-#define MASK_PsVertex_HAS_NORMALXYZ 0x04000000
-#define MASK_PsVertex_HAS_DIFFUSE 0x02000000
-#define MASK_PsVertex_HAS_SPECULAR 0x01000000
-#define MASK_PsUVSet 0x00ff0000
-#define MASK_PsVertex_HAS_1SetUV 0x00800000
-#define MASK_PsVertex_HAS_2SetUV 0x00c00000
-#define MASK_PsVertex_HAS_3SetUV 0x00e00000
-#define MASK_PsVertex_HAS_UVSet1 0x00800000
-#define MASK_PsVertex_HAS_UVSet2 0x00400000
-#define MASK_PsVertex_HAS_UVSet3 0x00200000
-#define MASK_PsCullDirection_CCW 0x00008000
-#define MASK_PsShadingMode 0x00007000
-/* XXX Shading modes just a guess, but seem to work*/
-#define MASK_PsShadingFlatA 0x00001000
-#define MASK_PsShadingFlatB 0x00002000
-#define MASK_PsShadingFlatC 0x00003000
-#define MASK_PsShadingSmooth 0x00004000
-#define MASK_PsTextureFrom 0x000003f0
-#define MASK_PsTexture0FromA 0x00000000
-#define MASK_PsTexture1FromA 0x00000000
-#define MASK_PsTexture1FromB 0x00000040
-#define MASK_PsBumpTextureFromA 0x00000000
-#define MASK_PsBumpTextureFromB 0x00000010
-#define MASK_PsBumpTextureFromC 0x00000020
-#define MASK_PsDataType 0x0000000f
-#define MASK_PsPointList 0x00000000
-#define MASK_PsLineList 0x00000004
-#define MASK_PsLineStrip 0x00000005
-#define MASK_PsTriangleList 0x00000008
-#define MASK_PsTriangleStrip 0x00000009
-#define MASK_PsTriangleFan 0x0000000a
-
-/*
- * REG_3D_PrimitiveSet -- Define Fire Primitive Mask (89F8h-89FBh)
- */
-#define MASK_DrawPrimitiveCommand 0x00000007
-#define MASK_SetFirePosition 0x00001F00
-#define MASK_BumpTextureFrom 0x00030000
-#define MASK_Texture1From 0x000C0000
-#define MASK_Texture0From 0x00300000
-#define MASK_ShadingMode 0x07000000
-#define MASK_CullDirection 0x08000000
-
-#define OP_3D_POINT_DRAW 0x00000000
-#define OP_3D_LINE_DRAW 0x00000001
-#define OP_3D_TRIANGLE_DRAW 0x00000002
-
-#define OP_3D_DIRECTION_RIGHT 0x00000000
-#define OP_3D_DIRECTION_LEFT 0x00000100
-#define OP_3D_DIRECTION_HORIZONTAL 0x00000000
-#define OP_3D_DIRECTION_VERTICAL 0x00000100
-
-#define OP_3D_FIRE_TFIRE 0x00000000
-#define OP_3D_FIRE_TSARGBa 0x00000100
-#define OP_3D_FIRE_TSWa 0x00000200
-#define OP_3D_FIRE_TSVAa 0x00000300
-#define OP_3D_FIRE_TSVBa 0x00000400
-#define OP_3D_FIRE_TSVCa 0x00000500
-
-#define OP_3D_FIRE_TSARGBb 0x00000900
-#define OP_3D_FIRE_TSWb 0x00000a00
-#define OP_3D_FIRE_TSVAb 0x00000b00
-#define OP_3D_FIRE_TSVBb 0x00000c00
-#define OP_3D_FIRE_TSVCb 0x00000d00
-
-#define OP_3D_FIRE_TSARGBc 0x00001100
-#define OP_3D_FIRE_TSWc 0x00001200
-#define OP_3D_FIRE_TSVAc 0x00001300
-#define OP_3D_FIRE_TSVBc 0x00001400
-#define OP_3D_FIRE_TSVCc 0x00001500
-
-#define OP_3D_Texture0FromA 0x00000000
-#define OP_3D_Texture0FromB 0x00100000
-#define OP_3D_Texture0FromC 0x00200000
-#define OP_3D_Texture1FromA 0x00000000
-#define OP_3D_Texture1FromB 0x00040000
-#define OP_3D_Texture1FromC 0x00080000
-#define OP_3D_TextureBumpFromA 0x00000000
-#define OP_3D_TextureBumpFromB 0x00010000
-#define OP_3D_TextureBumpFromC 0x00020000
-
-#define OP_3D_CullDirection_CCW 0x08000000
-
-#define SHADE_FLAT_VertexA 0x01000000
-#define SHADE_FLAT_VertexB 0x02000000
-#define SHADE_FLAT_VertexC 0x03000000
-#define SHADE_GOURAUD 0x04000000
-
-/*
- * Define Command Queue Length Mask (89FCh-89FF)
- */
-#define MASK_CmdQueueLen 0x0FFF0000
-
-/*
- * REG_3D_TEnable -- Define Capility Enable Mask (8A00h-8A03h)
- */
-#define MASK_DitherEnable 0x00000001
-#define MASK_BlendEnable 0x00000002
-#define MASK_FogTestEnable 0x00000004
-#define MASK_FogEnable 0x00000008
-#define MASK_SpecularEnable 0x00000010
-#define MASK_FogPerspectiveEnable 0x00000020
-#define MASK_TextureCacheClear 0x00000040
-#define MASK_TextureCacheEnable 0x00000080
-#define MASK_BumpMapEnable 0x00000100
-#define MASK_TexturePerspectiveEnable 0x00000200
-#define MASK_TextureEnable 0x00000400
-#define MASK_CullEnable 0x00000800
-#define MASK_TextureNumUsed 0x0000F000
-#define MASK_AlphaBufferEnable 0x00010000
-#define MASK_AlphaTestEnable 0x00020000
-#define MASK_AlphaWriteEnable 0x00040000
-#define MASK_ZTestEnable 0x00080000
-#define MASK_ZWriteEnable 0x00100000
-#define MASK_StencilBufferEnable 0x00200000
-#define MASK_StencilTestEnable 0x00400000
-#define MASK_StencilWriteEnable 0x00800000
-#define MASK_Texture0TransparencyEnable 0x01000000
-#define MASK_Texture1TransparencyEnable 0x02000000
-#define MASK_TextureAWrapUCorrection 0x04000000
-#define MASK_TextureAWrapVCorrection 0x08000000
-#define MASK_TextureBWrapUCorrection 0x10000000
-#define MASK_TextureBWrapVCorrection 0x20000000
-#define MASK_TextureCWrapUCorrection 0x40000000
-#define MASK_TextureCWrapVCorrection 0x80000000
-
-/*
- * REG_3D_TEnable2 -- Define Capility Enable Mask2 (8A04h-8A07h)
- */
-#define MASK_Texture0BlockTextureEnable 0x00000001
-#define MASK_Texture1BlockTextureEnable 0x00000002
-#define MASK_Texture0AnisotropicEnable 0x00000010
-#define MASK_Texture1AnisotropicEnable 0x00000020
-#define MASK_TextureMipmapBiasEnable 0x00000040
-#define MASK_LinePatternEnable 0x00000100
-#define MASK_StippleAlphaEnable 0x00000200
-#define MASK_StippleEnable 0x00000400
-#define MASK_AntiAliasEnable 0x00000800
-#define MASK_ZMaskWriteEnable 0x00001000
-#define MASK_StencilMaskWriteEnable 0x00002000
-#define MASK_AlphaMaskWriteEnable 0x00004000
-#define MASK_ColorMaskWriteEnable 0x00008000
-#define MASK_ZCacheClear 0x00010000
-#define MASK_ZCacheEnable 0x00020000
-#define MASK_StencilCacheClear 0x00040000
-#define MASK_StencilCacheEnable 0x00080000
-#define MASK_AlphaCacheClear 0x00100000
-#define MASK_AlphaCacheEnable 0x00200000
-#define MASK_ColorCacheClear 0x00400000
-#define MASK_ColorCacheEnable 0x00800000
-
-/*
- * REG_3D_ZSet -- Define Z Buffer Setting Mask (8A08h-8A0Bh)
- */
-#define MASK_ZBufferPitch 0x00000FFF
-#define MASK_ZTestMode 0x00070000
-#define MASK_ZBufferInSystem 0x00080000
-#define MASK_ZBufferFormat 0x01F00000
-
-#define SiS_Z_COMP_NEVER 0x00000000
-#define SiS_Z_COMP_S_LT_B 0x00010000
-#define SiS_Z_COMP_S_EQ_B 0x00020000
-#define SiS_Z_COMP_S_LE_B 0x00030000
-#define SiS_Z_COMP_S_GT_B 0x00040000
-#define SiS_Z_COMP_S_NE_B 0x00050000
-#define SiS_Z_COMP_S_GE_B 0x00060000
-#define SiS_Z_COMP_ALWAYS 0x00070000
-
-#define SiS_ZFORMAT_Z16 0x00000000
-#define SiS_ZFORMAT_Z16_INT 0x00100000
-#define SiS_ZFORMAT_S1Z15 0x00400000
-#define SiS_ZFORMAT_S1Z15_INT 0x00500000
-#define SiS_ZFORMAT_Z32 0x00800000
-#define SiS_ZFORMAT_S1Z31 0x00C00000
-#define SiS_ZFORMAT_S2Z30 0x00D00000
-#define SiS_ZFORMAT_S4Z28 0x00E00000
-#define SiS_ZFORMAT_S8Z24 0x00F00000
-#define SiS_ZFORMAT_FZ30 0x01800000
-#define SiS_ZFORMAT_FS1Z30 0x01C00000
-#define SiS_ZFORMAT_FS2Z30 0x01D00000
-
-/*
- * REG_3D_ZBias -- Define Z Buffer Setting Mask (8A0Ch-8A0Fh)
- */
-#define MASK_ZBias 0xFFFFFFFF
-
-/*
- * REG_3D_ZStWriteMask -- Define Z and Stencil Buffer Mask (8A10h-8A13h)
- */
-#define MASK_ZWriteMask 0x00FFFFFF
-
-/*
- * REG_3D_ZAddress -- Define Z Buffer Base Address(8A14h-8A17h)
- */
-#define MASK_ZAddress 0xFFFFFFFF
-
-/*
- * REG_3D_AlphaSet -- Define Alpha Buffer Setting Mask (8A18h-8A1Bh)
- */
-#define MASK_AlphaBufferPitch 0x000003FF
-#define MASK_AlphaRefValue 0x00FF0000
-#define MASK_AlphaTestMode 0x07000000
-#define MASK_AlphaBufferInSystem 0x08000000
-#define MASK_AlphaBufferFormat 0x30000000
-
-#define SiS_ALPHA_NEVER 0x00000000
-#define SiS_ALPHA_LESS 0x01000000
-#define SiS_ALPHA_EQUAL 0x02000000
-#define SiS_ALPHA_LEQUAL 0x03000000
-#define SiS_ALPHA_GREATER 0x04000000
-#define SiS_ALPHA_NOTEQUAL 0x05000000
-#define SiS_ALPHA_GEQUAL 0x06000000
-#define SiS_ALPHA_ALWAYS 0x07000000
-
-/*
- * REG_3D_AlphaAddress -- Define Alpha Buffer Base Address(8A1Ch-8A1Fh)
- */
-#define MASK_AlphaAddress 0xFFFFFFFF
-
-/*
- * REG_3D_DstSet -- Define Destination Buffer Setting Mask (8A20h-8A23h)
- */
-#define MASK_DstBufferPitch 0x00000FFF
-#define MASK_DstBufferFormat 0x000F0000
-#define MASK_DstBufferBitDepth 0x00300000
-#define MASK_DstBufferRgbOrder 0x00400000
-#define MASK_DstBufferInSystem 0x00800000
-#define MASK_Dst7BitFormat 0x007F0000
-#define MASK_ROP2 0x0F000000
-
-#define DST_FORMAT_RGB_555 0x00100000
-#define DST_FORMAT_RGB_565 0x00110000
-#define DST_FORMAT_ARGB_1555 0x00120000
-#define DST_FORMAT_ARGB_4444 0x00130000
-#define DST_FORMAT_ARGB_1888 0x00300000
-#define DST_FORMAT_ARGB_2888 0x00310000
-#define DST_FORMAT_ARGB_4888 0x00320000
-#define DST_FORMAT_ARGB_8888 0x00330000
-#define DST_FORMAT_ARGB_0888 0x00340000
-
-#define DST_FORMAT_BGR_555 0x00500000
-#define DST_FORMAT_BGR_565 0x00510000
-#define DST_FORMAT_ABGR_1555 0x00520000
-#define DST_FORMAT_ABGR_4444 0x00530000
-#define DST_FORMAT_ABGR_1888 0x00700000
-#define DST_FORMAT_ABGR_2888 0x00710000
-#define DST_FORMAT_ABGR_4888 0x00720000
-#define DST_FORMAT_ABGR_8888 0x00730000
-#define DST_FORMAT_ABGR_0888 0x00740000
-
-#define LOP_CLEAR 0x00000000
-#define LOP_NOR 0x01000000
-#define LOP_AND_INVERTED 0x02000000
-#define LOP_COPY_INVERTED 0x03000000
-#define LOP_AND_REVERSE 0x04000000
-#define LOP_INVERT 0x05000000
-#define LOP_XOR 0x06000000
-#define LOP_NAND 0x07000000
-#define LOP_AND 0x08000000
-#define LOP_EQUIV 0x09000000
-#define LOP_NOOP 0x0a000000
-#define LOP_OR_INVERTED 0x0b000000
-#define LOP_COPY 0x0c000000
-#define LOP_OR_REVERSE 0x0d000000
-#define LOP_OR 0x0e000000
-#define LOP_SET 0x0f000000
-
-/*
- * REG_3D_DstAlphaWriteMask -- Define Destination/Alpha Buffer Write Mask (8A24h-8A27h)
- */
-#define MASK_ColorWriteMask 0x00FFFFFF
-#define MASK_AlphaWriteMask 0xFF000000
-
-/*
- * REG_3D_DstAddress -- Define Destination Buffer Base Address(8A1Ch-8A1Fh)
- */
-#define MASK_DstAddress 0xFFFFFFFF
-
-/*
- * REG_3D_LinePattern -- Define Line Pattern (8A2Ch-8A2Fh)
- */
-#define MASK_LinePatternRepeatFactor 0x00007FFF
-#define MASK_LinePatternLastPixelFlag 0x00008000
-#define MASK_LinePattern 0xFFFF0000
-
-/*
- * REG_3D_FogSet -- Define Fog Mask (8A30h-8A33h)
- */
-#define MASK_FogColor 0x00FFFFFF
-#define MASK_FogMode 0x07000000
-#define MASK_FogZLookup 0x08000000
-
-#define FOGMODE_CHEAP 0x04000000
-#define FOGMODE_LINEAR 0x05000000
-#define FOGMODE_EXP 0x06000000
-#define FOGMODE_EXP2 0x07000000
-
-/*
- * REG_3D_FogStartEnd -- Define Fog Start End Setting (0x8A34 - 0x8A37)
- */
-#define MASK_FogFarDistance 0x0007FFFF
-
-/*
- * REG_3D_FogStartEnd -- Define Fog End Setting (0x8A38 - 0x8A3B)
- */
-#define MASK_FogInvFarDistance 0x0007FFFF
-
-/*
- * REG_3D_FogFactorDensity (0x8A3C - 0x8A3F)
- */
-#define MASK_FogDensity 0x0003FFFF
-#define MASK_FogFactor 0xFF000000
-
-/*
- * REG_3D_StencilSet -- Define stencil test (8A44h-8A47h)
- */
-#define MASK_StencilValueMask 0x000000ff
-#define MASK_StencilRefMask 0x0000ff00
-#define MASK_StencilTestMode 0x07000000
-#define MASK_StencilBufferInSystem 0x08000000
-#define MASK_StencilFormat 0x30000000
-
-#define SiS_STENCIL_NEVER 0x00000000
-#define SiS_STENCIL_LESS 0x01000000
-#define SiS_STENCIL_EQUAL 0x02000000
-#define SiS_STENCIL_LEQUAL 0x03000000
-#define SiS_STENCIL_GREATER 0x04000000
-#define SiS_STENCIL_NOTEQUAL 0x05000000
-#define SiS_STENCIL_GEQUAL 0x06000000
-#define SiS_STENCIL_ALWAYS 0x07000000
-
-#define STENCIL_FORMAT_1 0x00000000
-#define STENCIL_FORMAT_2 0x10000000
-#define STENCIL_FORMAT_4 0x20000000
-#define STENCIL_FORMAT_8 0x30000000
-
-/*
- * REG_3D_StencilSet2 -- Define stencil test (8A4h-8A47h)
- */
-#define MASK_StencilBufferPitch 0x00000FFF
-#define MASK_StencilZPassOp 0x00007000
-#define MASK_StencilZFailOp 0x00070000
-#define MASK_StencilFailOp 0x00700000
-#define MASK_StencilWriteMask 0xFF000000
-
-#define SiS_SFAIL_KEEP 0x00000000
-#define SiS_SFAIL_ZERO 0x00100000
-#define SiS_SFAIL_REPLACE 0x00200000
-#define SiS_SFAIL_INCR 0x00300000 /* guess -- was _WRAP */
-#define SiS_SFAIL_DECR 0x00400000 /* guess -- was _WRAP */
-#define SiS_SFAIL_INVERT 0x00500000
-#define SiS_SFAIL_INCR_WRAP 0x00600000 /* guess */
-#define SiS_SFAIL_DECR_WRAP 0x00700000 /* guess */
-
-#define SiS_SPASS_ZFAIL_KEEP 0x00000000
-#define SiS_SPASS_ZFAIL_ZERO 0x00010000
-#define SiS_SPASS_ZFAIL_REPLACE 0x00020000
-#define SiS_SPASS_ZFAIL_INCR 0x00030000 /* guess -- was _WRAP */
-#define SiS_SPASS_ZFAIL_DECR 0x00040000 /* guess -- was _WRAP */
-#define SiS_SPASS_ZFAIL_INVERT 0x00050000
-#define SiS_SPASS_ZFAIL_INCR_WRAP 0x00060000 /* guess */
-#define SiS_SPASS_ZFAIL_DECR_WRAP 0x00070000 /* guess */
-
-#define SiS_SPASS_ZPASS_KEEP 0x00000000
-#define SiS_SPASS_ZPASS_ZERO 0x00001000
-#define SiS_SPASS_ZPASS_REPLACE 0x00002000
-#define SiS_SPASS_ZPASS_INCR 0x00003000 /* guess -- was _WRAP */
-#define SiS_SPASS_ZPASS_DECR 0x00004000 /* guess -- was _WRAP */
-#define SiS_SPASS_ZPASS_INVERT 0x00005000
-#define SiS_SPASS_ZPASS_INCR_WRAP 0x00006000 /* guess */
-#define SiS_SPASS_ZPASS_DECR_WRAP 0x00007000 /* guess */
-
-/*
- * REG_3D_DstBlendMode (0x8A50 - 0x8A53)
- */
-#define MASK_SrcBlendMode 0x0000000F
-#define MASK_DstBlendMode 0x000000F0
-
-#define SiS_D_ZERO 0x00000000
-#define SiS_D_ONE 0x00000010
-#define SiS_D_SRC_COLOR 0x00000020
-#define SiS_D_ONE_MINUS_SRC_COLOR 0x00000030
-#define SiS_D_SRC_ALPHA 0x00000040
-#define SiS_D_ONE_MINUS_SRC_ALPHA 0x00000050
-#define SiS_D_DST_ALPHA 0x00000060
-#define SiS_D_ONE_MINUS_DST_ALPHA 0x00000070
-#define SiS_D_DST_COLOR 0x00000080
-#define SiS_D_ONE_MINUS_DST_COLOR 0x00000090
-#define SiS_D_SRC_ALPHA_SAT 0x000000a0
-
-#define SiS_S_ZERO 0x00000000
-#define SiS_S_ONE 0x00000001
-#define SiS_S_SRC_COLOR 0x00000002
-#define SiS_S_ONE_MINUS_SRC_COLOR 0x00000003
-#define SiS_S_SRC_ALPHA 0x00000004
-#define SiS_S_ONE_MINUS_SRC_ALPHA 0x00000005
-#define SiS_S_DST_ALPHA 0x00000006
-#define SiS_S_ONE_MINUS_DST_ALPHA 0x00000007
-#define SiS_S_DST_COLOR 0x00000008
-#define SiS_S_ONE_MINUS_DST_COLOR 0x00000009
-#define SiS_S_SRC_ALPHA_SATURATE 0x0000000a
-#define SiS_S_BOTH_SRC_ALPHA 0x0000000b
-#define SiS_S_BOTH_ONE_MINUS_SRC_ALPHA 0x0000000c
-
-/*
- * REG_3D_ClipTopBottom (0x8A54 - 0x8A57)
- */
-#define MASK_BottomClip 0x00001FFF
-#define MASK_TopClip 0x03FFE000
-
-/*
- * REG_3D_ClipLeftRight (0x8A58 - 0x8A5B)
- */
-#define MASK_RightClip 0x00001FFF
-#define MASK_LeftClip 0x03FFE000
-
-/*
- * REG_3D_TextureSet (0x8A7C - 0x8A7F)
- * REG_3D_Texture1Set (0x8ADC - 0x8ADF)
- */
-#define MASK_TextureHeight 0x0000000F
-#define MASK_TextureWidth 0x000000F0
-#define MASK_TextureLevel 0x00000F00
-#define MASK_TextureSignYUVFormat 0x00001000
-#define MASK_TextureMappingMode 0x00FF0000
-#define MASK_TextureWrapU 0x00010000
-#define MASK_TextureWrapV 0x00020000
-#define MASK_TextureMirrorU 0x00040000
-#define MASK_TextureMirrorV 0x00080000
-#define MASK_TextureClampU 0x00100000
-#define MASK_TextureClampV 0x00200000
-#define MASK_TextureBorderU 0x00400000
-#define MASK_TextureBorderV 0x00800000
-#define MASK_TextureFormat 0xFF000000
-#define MASK_TextureBitDepth 0x70000000
-#define MASK_TextureRgbOrder 0x80000000
-
-#define TEXEL_INDEX1 0x00000000
-#define TEXEL_INDEX2 0x01000000
-#define TEXEL_INDEX4 0x02000000
-#define TEXEL_INDEX8 0x03000000
-
-#define TEXEL_INDEX1WithAlpha 0x04000000
-#define TEXEL_INDEX2WithAlpha 0x05000000
-#define TEXEL_INDEX4WithAlpha 0x06000000
-#define TEXEL_INDEX8WithAlpha 0x07000000
-
-#define TEXEL_I1 0x10000000
-#define TEXEL_I2 0x11000000
-#define TEXEL_I4 0x12000000
-#define TEXEL_I8 0x13000000
-
-#define TEXEL_DXT1 0x19000000
-#define TEXEL_DXT2 0x1A000000
-#define TEXEL_DXT3 0x1B000000
-
-#define TEXEL_YUV422 0x20000000
-#define TEXEL_YVU422 0x21000000
-#define TEXEL_UVY422 0x22000000
-#define TEXEL_VUY422 0x23000000
-#define TEXEL_YUV411 0x24000000
-
-#define TEXEL_L1 0x30000000
-#define TEXEL_L2 0x31000000
-#define TEXEL_L4 0x32000000
-#define TEXEL_L8 0x33000000
-
-#define TEXEL_AL11 0x34000000
-#define TEXEL_AL44 0x35000000
-#define TEXEL_AL26 0x37000000
-#define TEXEL_AL88 0x38000000
-
-#define TEXEL_A1 0x40000000
-#define TEXEL_A2 0x41000000
-#define TEXEL_A4 0x42000000
-#define TEXEL_A8 0x43000000
-
-#define TEXEL_RGB_332_8 0x50000000
-#define TEXEL_RGB_233_8 0x51000000
-#define TEXEL_RGB_232_8 0x52000000
-#define TEXEL_ARGB_1232_8 0x53000000
-#define TEXEL_ARGB_2222_8 0x54000000
-
-#define TEXEL_RGB_555_16 0x60000000
-#define TEXEL_RGB_565_16 0x61000000
-#define TEXEL_ARGB_1555_16 0x62000000
-#define TEXEL_ARGB_4444_16 0x63000000
-
-#define TEXEL_ARGB_1888_32 0x70000000
-#define TEXEL_ARGB_2888_32 0x71000000
-#define TEXEL_ARGB_4888_32 0x72000000
-#define TEXEL_ARGB_8888_32 0x73000000
-#define TEXEL_ARGB_0888_32 0x74000000
-
-#define TEXEL_BGR_332_8 0xD0000000
-#define TEXEL_BGR_233_8 0xD1000000
-#define TEXEL_BGR_232_8 0xD2000000
-#define TEXEL_ABGR_1232_8 0xD3000000
-#define TEXEL_ABGR_2222_8 0xD4000000
-
-#define TEXEL_BGR_555_16 0xE0000000
-#define TEXEL_BGR_565_16 0xE1000000
-#define TEXEL_ABGR_1555_16 0xE2000000
-#define TEXEL_ABGR_4444_16 0xE3000000
-
-#define TEXEL_ABGR_1888_32 0xF0000000
-#define TEXEL_ABGR_2888_32 0xF1000000
-#define TEXEL_ABGR_4888_32 0xF2000000
-#define TEXEL_ABGR_8888_32 0xF3000000
-#define TEXEL_ABGR_0888_32 0xF4000000
-
-#define TEXEL_VU88 0x00000000
-#define TEXEL_LVU655 0x00800000
-#define TEXEL_LVU888 0x01000000
-#define TEXEL_UV88 0x02000000
-#define TEXEL_LUV655 0x02800000
-#define TEXEL_LUV888 0x03000000
-
-/*
- * REG_3D_TextureMip (0x8A80 - 0x8A83)
- * REG_3D_Texture1Mip (0x8AE0 - 0x8AE3)
- */
-#define MASK_TextureAnisotropyRatio 0x0000000F
-#define MASK_TextureMipmapLodBias 0x00003FF0
-#define MASK_TextureFilterMin 0x0001C000
-#define MASK_TextureFilterMag 0x00020000
-#define MASK_TextureFilter 0x0003C000
-#define MASK_TextureLevelInSystem 0x3FFC0000
-#define MASK_TextureLevel0InSystem 0x00040000
-#define MASK_TextureBlockLength 0xF0000000
-
-#define TEXTURE_FILTER_NEAREST 0x00000000
-#define TEXTURE_FILTER_LINEAR 0x00004000
-#define TEXTURE_FILTER_NEAREST_MIP_NEAREST 0x00008000
-#define TEXTURE_FILTER_NEAREST_MIP_LINEAR 0x00010000
-#define TEXTURE_FILTER_LINEAR_MIP_NEAREST 0x0000c000
-#define TEXTURE_FILTER_LINEAR_MIP_LINEAR 0x00014000
-
-/*
- * REG_3D_TextureTransparencyColorHigh (0x8A84 - 0x8A87)
- * REG_3D_Texture1TransparencyColorHigh (0x8AE4 - 0x8AE7)
- */
-#define MASK_TextureTransparencyColorHighB 0x000000FF
-#define MASK_TextureTransparencyColorHighG 0x0000FF00
-#define MASK_TextureTransparencyColorHighR 0x00FF0000
-#define MASK_TextureAlphaTransparencyMode 0x08000000
-
-/*
- * REG_3D_TextureTransparencyColorLow (0x8A88 - 0x8A8B)
- * REG_3D_Texture1TransparencyColorLow (0x8AE8 - 0x8AEB)
- */
-#define MASK_TextureTransparencyColorLowB 0x000000FF
-#define MASK_TextureTransparencyColorLowG 0x0000FF00
-#define MASK_TextureTransparencyColorLowR 0x00FF0000
-#define MASK_TextureBlockHeight 0x07000000
-#define MASK_TextureBlockWidth 0x70000000
-
-/*
- * REG_3D_TextureTransparencyColorLow (0x8A8C - 0x8A8F)
- * REG_3D_Texture1TransparencyColorLow (0x8AEC - 0x8AEF)
- */
-#define MASK_TextureBorderColorB 0x000000FF
-#define MASK_TextureBorderColorG 0x0000FF00
-#define MASK_TextureBorderColorR 0x00FF0000
-#define MASK_TextureBorderColorA 0xFF000000
-
-/*
- * REG_3D_TexturePitch0-10 (0x8AC0 - 0x8AD7)
- * REG_3D_Texture1Pitch0-10 (0x8B20 - 0x8B37)
- */
-#define MASK_TexturePitchOdd 0x000003FF
-#define MASK_TexturePitchEven 0x03FF0000
-#define SHIFT_TexturePitchEven 16
-
-/*
- * REG_3D_TextureColorBlendSet0 (0x8B40 - 0x8B43)
- * REG_3D_TextureColorBlendSet1 (0x8B44 - 0x8B46)
- * REG_3D_TextureAlphaBlendSet0 (0x8B40 - 0x8B43)
- * REG_3D_TextureAlphaBlendSet1 (0x8B44 - 0x8B46)
- */
-#define STAGE0_C_CF 0xa1485000
-#define STAGE0_C_CS 0xc1485000
-#define STAGE0_C_CFCS 0xa1705000
-#define STAGE0_C_CFOMAS_CSAS 0xc534c001
-#define STAGE0_C_CFOMCS_CCCS 0x4530c001
-
-#define STAGE0_A_AF 0x63230000
-#define STAGE0_A_AS 0xc3230000
-#define STAGE0_A_AFAS 0x63c30000
-#define STAGE0_A_AFOMAS_ACAS 0x46c60001
-
-#define STAGE1_C_CF 0xa1485000
-#define STAGE1_C_CS 0xe1485000
-#define STAGE1_C_CFCS 0xa1785000
-#define STAGE1_C_CFOMAS_CSAS 0xe5394001
-#define STAGE1_C_CFOMCS_CCCS 0x45394001
-
-#define STAGE1_A_AF 0xa3230000
-#define STAGE1_A_AS 0xe3230000
-#define STAGE1_A_AFAS 0xa3e30000
-#define STAGE1_A_AFOMAS_ACAS 0x4aea0001
-
-/* What registers are these associated with? */
-#define MASK_BMMemoryInSystem 0x00000080
-#define MASK_BMHeight 0x00000F00
-#define MASK_BMWidth 0x0000F000
-#define MASK_BMFilter 0x00010000
-#define MASK_BMMappingMode 0x007E0000
-#define MASK_BMFormat 0x07800000
-#define MASK_BMTxBumpmap 0x08000000
-
-#define MASK_BMAddress 0xFFFFFFFC
-
-#define MASK_BMOffset 0xFF800000
-#define MASK_BMScale 0x007FE000
-#define MASK_BMPitch 0x00001FFF
-
-#define MASK_BMMatrix00 0x000007FF
-#define MASK_BMMatrix01 0x07FF0000
-#define MASK_BMMatrix10 0x000007FF
-#define MASK_BMMatrix11 0x07FF0000
-
-#define MASK_TextureRealInSystem 0x00000001
-#define MASK_TextureDowngrade 0x00000002
-
-#define ALPHA_BUFFER_FORMAT_1 0x00000000
-#define ALPHA_BUFFER_FORMAT_2 0x10000000
-#define ALPHA_BUFFER_FORMAT_4 0x20000000
-#define ALPHA_BUFFER_FORMAT_8 0x30000000
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/sis_screen.c b/src/mesa/drivers/dri/sis/sis_screen.c
deleted file mode 100644
index 75f6fcf2116..00000000000
--- a/src/mesa/drivers/dri/sis/sis_screen.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#include "dri_util.h"
-
-#include "main/context.h"
-#include "utils.h"
-#include "main/imports.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-
-#include "sis_context.h"
-#include "sis_dri.h"
-#include "sis_lock.h"
-
-#include "xmlpool.h"
-
-#include "GL/internal/dri_interface.h"
-
-#define SIS_AGP_DISABLE(def) \
-DRI_CONF_OPT_BEGIN(agp_disable,bool,def) \
- DRI_CONF_DESC(en,"Disable AGP vertex dispatch") \
-DRI_CONF_OPT_END
-
-PUBLIC const char __driConfigOptions[] =
-DRI_CONF_BEGIN
- DRI_CONF_SECTION_QUALITY
- DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
- DRI_CONF_SECTION_END
- DRI_CONF_SECTION_DEBUG
- SIS_AGP_DISABLE(true)
- DRI_CONF_NO_RAST(false)
- DRI_CONF_SECTION_END
-DRI_CONF_END;
-static const GLuint __driNConfigOptions = 3;
-
-extern const struct dri_extension card_extensions[];
-
-static const __DRIconfig **
-sisFillInModes(__DRIscreen *psp, int bpp)
-{
- __DRIconfig **configs;
- unsigned depth_buffer_factor;
- unsigned back_buffer_factor;
- GLenum fb_format;
- GLenum fb_type;
- static const GLenum back_buffer_modes[] = {
- GLX_NONE, GLX_SWAP_UNDEFINED_OML
- };
- uint8_t depth_bits_array[4];
- uint8_t stencil_bits_array[4];
- uint8_t msaa_samples_array[1];
-
- depth_bits_array[0] = 0;
- stencil_bits_array[0] = 0;
- depth_bits_array[1] = 16;
- stencil_bits_array[1] = 0;
- depth_bits_array[2] = 24;
- stencil_bits_array[2] = 8;
- depth_bits_array[3] = 32;
- stencil_bits_array[3] = 0;
-
- msaa_samples_array[0] = 0;
-
- depth_buffer_factor = 4;
- back_buffer_factor = 2;
-
- if (bpp == 16) {
- fb_format = GL_RGB;
- fb_type = GL_UNSIGNED_SHORT_5_6_5;
- } else {
- fb_format = GL_BGRA;
- fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
- }
-
- configs = driCreateConfigs(fb_format, fb_type, depth_bits_array,
- stencil_bits_array, depth_buffer_factor,
- back_buffer_modes, back_buffer_factor,
- msaa_samples_array, 1, GL_TRUE);
- if (configs == NULL) {
- fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__, __LINE__);
- return NULL;
- }
-
- return (const __DRIconfig **) configs;
-}
-
-
-/* Create the device specific screen private data struct.
- */
-static sisScreenPtr
-sisCreateScreen( __DRIscreen *sPriv )
-{
- sisScreenPtr sisScreen;
- SISDRIPtr sisDRIPriv = (SISDRIPtr)sPriv->pDevPriv;
-
- if (sPriv->devPrivSize != sizeof(SISDRIRec)) {
- fprintf(stderr,"\nERROR! sizeof(SISDRIRec) does not match passed size from device driver\n");
- return GL_FALSE;
- }
-
- /* Allocate the private area */
- sisScreen = (sisScreenPtr)CALLOC( sizeof(*sisScreen) );
- if ( sisScreen == NULL )
- return NULL;
-
- sisScreen->screenX = sisDRIPriv->width;
- sisScreen->screenY = sisDRIPriv->height;
- sisScreen->cpp = sisDRIPriv->bytesPerPixel;
- sisScreen->deviceID = sisDRIPriv->deviceID;
- sisScreen->AGPCmdBufOffset = sisDRIPriv->AGPCmdBufOffset;
- sisScreen->AGPCmdBufSize = sisDRIPriv->AGPCmdBufSize;
- sisScreen->sarea_priv_offset = sizeof(drm_sarea_t);
-
- sisScreen->mmio.handle = sisDRIPriv->regs.handle;
- sisScreen->mmio.size = sisDRIPriv->regs.size;
- if ( drmMap( sPriv->fd, sisScreen->mmio.handle, sisScreen->mmio.size,
- &sisScreen->mmio.map ) )
- {
- FREE( sisScreen );
- return NULL;
- }
-
- if (sisDRIPriv->agp.size) {
- sisScreen->agp.handle = sisDRIPriv->agp.handle;
- sisScreen->agpBaseOffset = drmAgpBase(sPriv->fd);
- sisScreen->agp.size = sisDRIPriv->agp.size;
- if ( drmMap( sPriv->fd, sisScreen->agp.handle, sisScreen->agp.size,
- &sisScreen->agp.map ) )
- {
- sisScreen->agp.size = 0;
- }
- }
-
- sisScreen->driScreen = sPriv;
-
- /* parse information in __driConfigOptions */
- driParseOptionInfo(&sisScreen->optionCache,
- __driConfigOptions, __driNConfigOptions);
-
- return sisScreen;
-}
-
-/* Destroy the device specific screen private data struct.
- */
-static void
-sisDestroyScreen( __DRIscreen *sPriv )
-{
- sisScreenPtr sisScreen = (sisScreenPtr)sPriv->private;
-
- if ( sisScreen == NULL )
- return;
-
- if (sisScreen->agp.size != 0)
- drmUnmap( sisScreen->agp.map, sisScreen->agp.size );
- drmUnmap( sisScreen->mmio.map, sisScreen->mmio.size );
-
- FREE( sisScreen );
- sPriv->private = NULL;
-}
-
-
-/* Create and initialize the Mesa and driver specific pixmap buffer
- * data.
- */
-static GLboolean
-sisCreateBuffer( __DRIscreen *driScrnPriv,
- __DRIdrawable *driDrawPriv,
- const struct gl_config *mesaVis,
- GLboolean isPixmap )
-{
- /*sisScreenPtr screen = (sisScreenPtr) driScrnPriv->private;*/
- struct gl_framebuffer *fb;
-
- if (isPixmap)
- return GL_FALSE; /* not implemented */
-
- fb = _mesa_create_framebuffer(mesaVis);
-
- _mesa_add_soft_renderbuffers(fb,
- GL_FALSE, /* color */
- GL_FALSE, /* depth */
- mesaVis->stencilBits > 0,
- mesaVis->accumRedBits > 0,
- GL_FALSE, /* alpha */
- GL_FALSE /* aux */);
- driDrawPriv->driverPrivate = (void *) fb;
-
- return (driDrawPriv->driverPrivate != NULL);
-}
-
-
-static void
-sisDestroyBuffer(__DRIdrawable *driDrawPriv)
-{
- _mesa_reference_framebuffer((struct gl_framebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
-}
-
-static void sisCopyBuffer( __DRIdrawable *dPriv )
-{
- sisContextPtr smesa = (sisContextPtr)dPriv->driContextPriv->driverPrivate;
- int i;
-
- while ((*smesa->FrameCountPtr) - MMIO_READ(0x8a2c) > SIS_MAX_FRAME_LENGTH)
- ;
-
- LOCK_HARDWARE();
-
- for (i = 0; i < dPriv->numClipRects; i++) {
- drm_clip_rect_t *box = &dPriv->pClipRects[i];
-
- mWait3DCmdQueue(10);
- MMIO(REG_SRC_ADDR, smesa->back.offset);
- MMIO(REG_SRC_PITCH, smesa->back.pitch | ((smesa->bytesPerPixel == 4) ?
- BLIT_DEPTH_32 : BLIT_DEPTH_16));
- MMIO(REG_SRC_X_Y, ((box->x1 - dPriv->x) << 16) | (box->y1 - dPriv->y));
- MMIO(REG_DST_X_Y, ((box->x1 - dPriv->x) << 16) | (box->y1 - dPriv->y));
- MMIO(REG_DST_ADDR, smesa->front.offset);
- MMIO(REG_DST_PITCH_HEIGHT, (smesa->virtualY << 16) | smesa->front.pitch);
- MMIO(REG_WIDTH_HEIGHT, ((box->y2 - box->y1) << 16) | (box->x2 - box->x1));
- MMIO(REG_BLIT_CMD, CMD_DIR_X_INC | CMD_DIR_Y_INC | CMD_ROP_SRC);
- MMIO(REG_CommandQueue, -1);
- }
-
- *(GLint *)(smesa->IOBase+0x8a2c) = *smesa->FrameCountPtr;
- (*smesa->FrameCountPtr)++;
-
- UNLOCK_HARDWARE ();
-}
-
-
-/* Copy the back color buffer to the front color buffer */
-static void
-sisSwapBuffers(__DRIdrawable *dPriv)
-{
- if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
- sisContextPtr smesa = (sisContextPtr) dPriv->driContextPriv->driverPrivate;
- struct gl_context *ctx = smesa->glCtx;
-
- if (ctx->Visual.doubleBufferMode) {
- _mesa_notifySwapBuffers( ctx ); /* flush pending rendering comands */
- sisCopyBuffer( dPriv );
- }
- } else {
- /* XXX this shouldn't be an error but we can't handle it for now */
- _mesa_problem(NULL, "%s: drawable has no context!", __FUNCTION__);
- }
-}
-
-
-/**
- * This is the driver specific part of the createNewScreen entry point.
- *
- * \todo maybe fold this into intelInitDriver
- *
- * \return the struct gl_config supported by this driver
- */
-static const __DRIconfig **
-sisInitScreen(__DRIscreen *psp)
-{
- static const __DRIversion ddx_expected = {0, 8, 0};
- static const __DRIversion dri_expected = {4, 0, 0};
- static const __DRIversion drm_expected = {1, 0, 0};
- static const char *driver_name = "SiS";
- SISDRIPtr dri_priv = (SISDRIPtr)psp->pDevPriv;
-
- if (!driCheckDriDdxDrmVersions2(driver_name,
- &psp->dri_version, &dri_expected,
- &psp->ddx_version, &ddx_expected,
- &psp->drm_version, &drm_expected))
- return NULL;
-
- psp->private = sisCreateScreen(psp);
-
- if (!psp->private) {
- sisDestroyScreen(psp);
- return NULL;
- }
-
- return sisFillInModes(psp, dri_priv->bytesPerPixel * 8);
-}
-
-const struct __DriverAPIRec driDriverAPI = {
- .InitScreen = sisInitScreen,
- .DestroyScreen = sisDestroyScreen,
- .CreateContext = sisCreateContext,
- .DestroyContext = sisDestroyContext,
- .CreateBuffer = sisCreateBuffer,
- .DestroyBuffer = sisDestroyBuffer,
- .SwapBuffers = sisSwapBuffers,
- .MakeCurrent = sisMakeCurrent,
- .UnbindContext = sisUnbindContext,
- .GetSwapInfo = NULL,
- .GetDrawableMSC = NULL,
- .WaitForMSC = NULL,
- .WaitForSBC = NULL,
- .SwapBuffersMSC = NULL
-
-};
-
-/* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
- &driCoreExtension.base,
- &driLegacyExtension.base,
- NULL
-};
diff --git a/src/mesa/drivers/dri/sis/sis_screen.h b/src/mesa/drivers/dri/sis/sis_screen.h
deleted file mode 100644
index 8009fecc31f..00000000000
--- a/src/mesa/drivers/dri/sis/sis_screen.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#ifndef __SIS_SCREEN_H
-#define __SIS_SCREEN_H
-
-typedef struct {
- drm_handle_t handle; /* Handle to the DRM region */
- drmSize size; /* Size of the DRM region */
- drmAddress map; /* Mapping of the DRM region */
-} sisRegionRec2, *sisRegionPtr2;
-
-typedef struct {
- sisRegionRec2 mmio;
- sisRegionRec2 agp;
- unsigned long agpBaseOffset;
-
- unsigned int AGPCmdBufOffset;
- unsigned int AGPCmdBufSize;
-
- int deviceID;
-
- int cpp;
- unsigned int screenX, screenY;
-
- __DRIscreen *driScreen;
- unsigned int sarea_priv_offset;
-
- /* Configuration cache with default values for all contexts */
- driOptionCache optionCache;
-
-} sisScreenRec, *sisScreenPtr;
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/sis_span.c b/src/mesa/drivers/dri/sis/sis_span.c
deleted file mode 100644
index 01c1fc428da..00000000000
--- a/src/mesa/drivers/dri/sis/sis_span.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "sis_context.h"
-#include "sis_span.h"
-#include "sis_lock.h"
-#include "sis_tris.h"
-
-#include "swrast/swrast.h"
-
-#define DBG 0
-
-#define LOCAL_VARS \
- sisContextPtr smesa = SIS_CONTEXT(ctx); \
- __DRIdrawable *dPriv = smesa->driDrawable; \
- struct sis_renderbuffer *srb = (struct sis_renderbuffer *) rb; \
- GLuint pitch = srb->pitch; \
- char *buf = srb->map; \
- GLuint p; \
- (void) buf; (void) p;
-
-
-#define LOCAL_DEPTH_VARS \
- sisContextPtr smesa = SIS_CONTEXT(ctx); \
- __DRIdrawable *dPriv = smesa->driDrawable; \
- struct sis_renderbuffer *srb = (struct sis_renderbuffer *) rb; \
- char *buf = srb->map;
-
-#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
-
-#define HW_LOCK() do {} while(0);
-
-#define HW_UNLOCK() do {} while(0);
-
-/* RGB565 */
-#define SPANTMP_PIXEL_FMT GL_RGB
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
-
-#define TAG(x) sis##x##_RGB565
-#define TAG2(x,y) sis##x##_RGB565##y
-#include "spantmp2.h"
-
-
-/* ARGB8888 */
-/* FIXME the old code always read back alpha as 0xff, i.e. fully opaque.
- Was there a reason to do so ? If so that'll won't work with that template... */
-#define SPANTMP_PIXEL_FMT GL_BGRA
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-
-#define TAG(x) sis##x##_ARGB8888
-#define TAG2(x,y) sis##x##_ARGB8888##y
-#include "spantmp2.h"
-
-
-/* 16 bit depthbuffer functions.
- */
-#define VALUE_TYPE GLushort
-
-#define WRITE_DEPTH( _x, _y, d ) \
- *(GLushort *)(buf + (_x)*2 + (_y)*srb->pitch) = d;
-
-#define READ_DEPTH( d, _x, _y ) \
- d = *(GLushort *)(buf + (_x)*2 + (_y)*srb->pitch);
-
-#define TAG(x) sis##x##_z16
-#include "depthtmp.h"
-
-
-/* 32 bit depthbuffer functions.
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d ) \
- *(GLuint *)(buf + (_x)*4 + (_y)*srb->pitch) = d;
-
-#define READ_DEPTH( d, _x, _y ) \
- d = *(GLuint *)(buf + (_x)*4 + (_y)*srb->pitch);
-
-#define TAG(x) sis##x##_z32
-#include "depthtmp.h"
-
-
-/* 8/24 bit interleaved depth/stencil functions
- */
-#define VALUE_TYPE GLuint
-
-#define WRITE_DEPTH( _x, _y, d ) { \
- GLuint tmp = *(GLuint *)(buf + (_x)*4 + (_y)*srb->pitch); \
- tmp &= 0xff000000; \
- tmp |= (d & 0x00ffffff); \
- *(GLuint *)(buf + (_x)*4 + (_y)*srb->pitch) = tmp; \
-}
-
-#define READ_DEPTH( d, _x, _y ) { \
- d = *(GLuint *)(buf + (_x)*4 + (_y)*srb->pitch) & 0x00ffffff; \
-}
-
-#define TAG(x) sis##x##_z24_s8
-#include "depthtmp.h"
-
-#define WRITE_STENCIL( _x, _y, d ) { \
- GLuint tmp = *(GLuint *)(buf + (_x)*4 + (_y)*smesa->depth.pitch); \
- tmp &= 0x00ffffff; \
- tmp |= (d << 24); \
- *(GLuint *)(buf + (_x)*4 + (_y)*srb->pitch) = tmp; \
-}
-
-#define READ_STENCIL( d, _x, _y ) \
- d = (*(GLuint *)(buf + (_x)*4 + (_y)*srb->pitch) & 0xff000000) >> 24;
-
-#define TAG(x) sis##x##_z24_s8
-#include "stenciltmp.h"
-
-
-
-void sisSpanRenderStart( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- SIS_FIREVERTICES(smesa);
- LOCK_HARDWARE();
- WaitEngIdle( smesa );
-}
-
-void sisSpanRenderFinish( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- _swrast_flush( ctx );
- UNLOCK_HARDWARE();
-}
-
-void
-sisDDInitSpanFuncs( struct gl_context *ctx )
-{
- struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
- swdd->SpanRenderStart = sisSpanRenderStart;
- swdd->SpanRenderFinish = sisSpanRenderFinish;
-}
-
-
-
-/**
- * Plug in the Get/Put routines for the given driRenderbuffer.
- */
-void
-sisSetSpanFunctions(struct sis_renderbuffer *srb, const struct gl_config *vis)
-{
- if (srb->Base.Format == MESA_FORMAT_RGB565) {
- sisInitPointers_RGB565( &srb->Base );
- }
- else if (srb->Base.Format == MESA_FORMAT_ARGB8888) {
- sisInitPointers_ARGB8888( &srb->Base );
- }
- else if (srb->Base.Format == MESA_FORMAT_Z16) {
- sisInitDepthPointers_z16(&srb->Base);
- }
- else if (srb->Base.Format == MESA_FORMAT_S8_Z24) {
- sisInitDepthPointers_z24_s8(&srb->Base);
- }
- else if (srb->Base.Format == MESA_FORMAT_Z32) {
- sisInitDepthPointers_z32(&srb->Base);
- }
- else if (srb->Base.Format == MESA_FORMAT_S8) {
- sisInitStencilPointers_z24_s8(&srb->Base);
- }
-}
diff --git a/src/mesa/drivers/dri/sis/sis_span.h b/src/mesa/drivers/dri/sis/sis_span.h
deleted file mode 100644
index cbe4bbdc551..00000000000
--- a/src/mesa/drivers/dri/sis/sis_span.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#ifndef __SIS_SPAN_H__
-#define __SIS_SPAN_H__
-
-#include "drirenderbuffer.h"
-
-
-extern void sisSpanRenderStart( struct gl_context *ctx );
-extern void sisSpanRenderFinish( struct gl_context *ctx );
-
-extern void sisDDInitSpanFuncs( struct gl_context *ctx );
-
-extern void
-sisSetSpanFunctions(struct sis_renderbuffer *srb, const struct gl_config *vis);
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/sis_state.c b/src/mesa/drivers/dri/sis/sis_state.c
deleted file mode 100644
index 828772ed6ef..00000000000
--- a/src/mesa/drivers/dri/sis/sis_state.c
+++ /dev/null
@@ -1,864 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "sis_context.h"
-#include "sis_state.h"
-#include "sis_tris.h"
-#include "sis_lock.h"
-
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/state.h"
-#include "swrast/swrast.h"
-#include "vbo/vbo.h"
-#include "tnl/tnl.h"
-#include "swrast_setup/swrast_setup.h"
-
-
-/* =============================================================
- * Alpha blending
- */
-
-static void
-sisDDAlphaFunc( struct gl_context * ctx, GLenum func, GLfloat ref )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLubyte refbyte;
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- CLAMPED_FLOAT_TO_UBYTE(refbyte, ref);
- current->hwAlpha = refbyte << 16;
-
- /* Alpha Test function */
- switch (func)
- {
- case GL_NEVER:
- current->hwAlpha |= SiS_ALPHA_NEVER;
- break;
- case GL_LESS:
- current->hwAlpha |= SiS_ALPHA_LESS;
- break;
- case GL_EQUAL:
- current->hwAlpha |= SiS_ALPHA_EQUAL;
- break;
- case GL_LEQUAL:
- current->hwAlpha |= SiS_ALPHA_LEQUAL;
- break;
- case GL_GREATER:
- current->hwAlpha |= SiS_ALPHA_GREATER;
- break;
- case GL_NOTEQUAL:
- current->hwAlpha |= SiS_ALPHA_NOTEQUAL;
- break;
- case GL_GEQUAL:
- current->hwAlpha |= SiS_ALPHA_GEQUAL;
- break;
- case GL_ALWAYS:
- current->hwAlpha |= SiS_ALPHA_ALWAYS;
- break;
- }
-
- prev->hwAlpha = current->hwAlpha;
- smesa->GlobalFlag |= GFLAG_ALPHASETTING;
-}
-
-static void
-sisDDBlendFuncSeparate( struct gl_context *ctx,
- GLenum sfactorRGB, GLenum dfactorRGB,
- GLenum sfactorA, GLenum dfactorA )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- current->hwDstSrcBlend = 0;
-
- switch (dfactorRGB)
- {
- case GL_ZERO:
- current->hwDstSrcBlend |= SiS_D_ZERO;
- break;
- case GL_ONE:
- current->hwDstSrcBlend |= SiS_D_ONE;
- break;
- case GL_SRC_COLOR:
- current->hwDstSrcBlend |= SiS_D_SRC_COLOR;
- break;
- case GL_ONE_MINUS_SRC_COLOR:
- current->hwDstSrcBlend |= SiS_D_ONE_MINUS_SRC_COLOR;
- break;
- case GL_SRC_ALPHA:
- current->hwDstSrcBlend |= SiS_D_SRC_ALPHA;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- current->hwDstSrcBlend |= SiS_D_ONE_MINUS_SRC_ALPHA;
- break;
- case GL_DST_COLOR:
- current->hwDstSrcBlend |= SiS_D_DST_COLOR;
- break;
- case GL_ONE_MINUS_DST_COLOR:
- current->hwDstSrcBlend |= SiS_D_ONE_MINUS_DST_COLOR;
- break;
- case GL_DST_ALPHA:
- current->hwDstSrcBlend |= SiS_D_DST_ALPHA;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- current->hwDstSrcBlend |= SiS_D_ONE_MINUS_DST_ALPHA;
- break;
- default:
- fprintf(stderr, "Unknown dst blend function 0x%x\n", dfactorRGB);
- break;
- }
-
- switch (sfactorRGB)
- {
- case GL_ZERO:
- current->hwDstSrcBlend |= SiS_S_ZERO;
- break;
- case GL_ONE:
- current->hwDstSrcBlend |= SiS_S_ONE;
- break;
- case GL_SRC_COLOR:
- current->hwDstSrcBlend |= SiS_S_SRC_COLOR;
- break;
- case GL_ONE_MINUS_SRC_COLOR:
- current->hwDstSrcBlend |= SiS_S_ONE_MINUS_SRC_COLOR;
- break;
- case GL_SRC_ALPHA:
- current->hwDstSrcBlend |= SiS_S_SRC_ALPHA;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- current->hwDstSrcBlend |= SiS_S_ONE_MINUS_SRC_ALPHA;
- break;
- case GL_DST_COLOR:
- current->hwDstSrcBlend |= SiS_S_DST_COLOR;
- break;
- case GL_ONE_MINUS_DST_COLOR:
- current->hwDstSrcBlend |= SiS_S_ONE_MINUS_DST_COLOR;
- break;
- case GL_DST_ALPHA:
- current->hwDstSrcBlend |= SiS_S_DST_ALPHA;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- current->hwDstSrcBlend |= SiS_S_ONE_MINUS_DST_ALPHA;
- break;
- case GL_SRC_ALPHA_SATURATE:
- current->hwDstSrcBlend |= SiS_S_SRC_ALPHA_SATURATE;
- break;
- default:
- fprintf(stderr, "Unknown src blend function 0x%x\n", sfactorRGB);
- break;
- }
-
- if (current->hwDstSrcBlend != prev->hwDstSrcBlend) {
- prev->hwDstSrcBlend = current->hwDstSrcBlend;
- smesa->GlobalFlag |= GFLAG_DSTBLEND;
- }
-}
-
-/* =============================================================
- * Depth testing
- */
-
-static void
-sisDDDepthFunc( struct gl_context * ctx, GLenum func )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- current->hwZ &= ~MASK_ZTestMode;
- switch (func)
- {
- case GL_LESS:
- current->hwZ |= SiS_Z_COMP_S_LT_B;
- break;
- case GL_GEQUAL:
- current->hwZ |= SiS_Z_COMP_S_GE_B;
- break;
- case GL_LEQUAL:
- current->hwZ |= SiS_Z_COMP_S_LE_B;
- break;
- case GL_GREATER:
- current->hwZ |= SiS_Z_COMP_S_GT_B;
- break;
- case GL_NOTEQUAL:
- current->hwZ |= SiS_Z_COMP_S_NE_B;
- break;
- case GL_EQUAL:
- current->hwZ |= SiS_Z_COMP_S_EQ_B;
- break;
- case GL_ALWAYS:
- current->hwZ |= SiS_Z_COMP_ALWAYS;
- break;
- case GL_NEVER:
- current->hwZ |= SiS_Z_COMP_NEVER;
- break;
- }
-
- if (current->hwZ != prev->hwZ) {
- prev->hwZ = current->hwZ;
- smesa->GlobalFlag |= GFLAG_ZSETTING;
- }
-}
-
-void
-sisDDDepthMask( struct gl_context * ctx, GLboolean flag )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- if (!ctx->Depth.Test)
- flag = GL_FALSE;
-
- if (ctx->Visual.stencilBits) {
- if (flag || (ctx->Stencil.WriteMask[0] != 0)) {
- current->hwCapEnable |= MASK_ZWriteEnable;
- if (flag && ((ctx->Stencil.WriteMask[0] & 0xff) == 0xff)) {
- current->hwCapEnable2 &= ~MASK_ZMaskWriteEnable;
- } else {
- current->hwCapEnable2 |= MASK_ZMaskWriteEnable;
- current->hwZMask = (ctx->Stencil.WriteMask[0] << 24) |
- ((flag) ? 0x00ffffff : 0);
-
- if (current->hwZMask ^ prev->hwZMask) {
- prev->hwZMask = current->hwZMask;
- smesa->GlobalFlag |= GFLAG_ZSETTING;
- }
- }
- } else {
- current->hwCapEnable &= ~MASK_ZWriteEnable;
- }
- } else {
- if (flag) {
- current->hwCapEnable |= MASK_ZWriteEnable;
- current->hwCapEnable2 &= ~MASK_ZMaskWriteEnable;
- } else {
- current->hwCapEnable &= ~MASK_ZWriteEnable;
- }
- }
-}
-
-/* =============================================================
- * Clipping
- */
-
-void
-sisUpdateClipping( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- GLint x1, y1, x2, y2;
-
- if (smesa->is6326) {
- /* XXX: 6326 has its own clipping for now. Should be fixed */
- sis6326UpdateClipping(ctx);
- return;
- }
-
- x1 = 0;
- y1 = 0;
- x2 = smesa->width - 1;
- y2 = smesa->height - 1;
-
- if (ctx->Scissor.Enabled) {
- if (ctx->Scissor.X > x1)
- x1 = ctx->Scissor.X;
- if (ctx->Scissor.Y > y1)
- y1 = ctx->Scissor.Y;
- if (ctx->Scissor.X + ctx->Scissor.Width - 1 < x2)
- x2 = ctx->Scissor.X + ctx->Scissor.Width - 1;
- if (ctx->Scissor.Y + ctx->Scissor.Height - 1 < y2)
- y2 = ctx->Scissor.Y + ctx->Scissor.Height - 1;
- }
-
- y1 = Y_FLIP(y1);
- y2 = Y_FLIP(y2);
-
- current->clipTopBottom = (y2 << 13) | y1;
- current->clipLeftRight = (x1 << 13) | x2;
-
- if ((current->clipTopBottom ^ prev->clipTopBottom) ||
- (current->clipLeftRight ^ prev->clipLeftRight))
- {
- prev->clipTopBottom = current->clipTopBottom;
- prev->clipLeftRight = current->clipLeftRight;
- smesa->GlobalFlag |= GFLAG_CLIPPING;
- }
-}
-
-static void
-sisDDScissor( struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h )
-{
- if (ctx->Scissor.Enabled)
- sisUpdateClipping( ctx );
-}
-
-/* =============================================================
- * Culling
- */
-
-static void
-sisUpdateCull( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLint cullflag, frontface;
-
- cullflag = ctx->Polygon.CullFaceMode;
- frontface = ctx->Polygon.FrontFace;
-
- smesa->AGPParseSet &= ~(MASK_PsCullDirection_CCW);
- smesa->dwPrimitiveSet &= ~(MASK_CullDirection);
-
- if((cullflag == GL_FRONT && frontface == GL_CCW) ||
- (cullflag == GL_BACK && frontface == GL_CW))
- {
- smesa->AGPParseSet |= MASK_PsCullDirection_CCW;
- smesa->dwPrimitiveSet |= OP_3D_CullDirection_CCW;
- }
-}
-
-
-static void
-sisDDCullFace( struct gl_context *ctx, GLenum mode )
-{
- sisUpdateCull( ctx );
-}
-
-static void
-sisDDFrontFace( struct gl_context *ctx, GLenum mode )
-{
- sisUpdateCull( ctx );
-}
-
-/* =============================================================
- * Masks
- */
-
-static void sisDDColorMask( struct gl_context *ctx,
- GLboolean r, GLboolean g,
- GLboolean b, GLboolean a )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- if (r && g && b && ((ctx->Visual.alphaBits == 0) || a)) {
- current->hwCapEnable2 &= ~(MASK_AlphaMaskWriteEnable |
- MASK_ColorMaskWriteEnable);
- } else {
- current->hwCapEnable2 |= (MASK_AlphaMaskWriteEnable |
- MASK_ColorMaskWriteEnable);
-
- current->hwDstMask = (r) ? smesa->redMask : 0 |
- (g) ? smesa->greenMask : 0 |
- (b) ? smesa->blueMask : 0 |
- (a) ? smesa->alphaMask : 0;
- }
-
- if (current->hwDstMask != prev->hwDstMask) {
- prev->hwDstMask = current->hwDstMask;
- smesa->GlobalFlag |= GFLAG_DESTSETTING;
- }
-}
-
-/* =============================================================
- * Rendering attributes
- */
-
-static void sisUpdateSpecular(struct gl_context *ctx)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *current = &smesa->current;
-
- if (_mesa_need_secondary_color(ctx))
- current->hwCapEnable |= MASK_SpecularEnable;
- else
- current->hwCapEnable &= ~MASK_SpecularEnable;
-}
-
-static void sisDDLightModelfv(struct gl_context *ctx, GLenum pname,
- const GLfloat *param)
-{
- if (pname == GL_LIGHT_MODEL_COLOR_CONTROL) {
- sisUpdateSpecular(ctx);
- }
-}
-
-static void sisDDShadeModel( struct gl_context *ctx, GLenum mode )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- /* Signal to sisRasterPrimitive to recalculate dwPrimitiveSet */
- smesa->hw_primitive = -1;
-}
-
-/* =============================================================
- * Window position
- */
-
-/* =============================================================
- * Viewport
- */
-
-static void sisCalcViewport( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- const GLfloat *v = ctx->Viewport._WindowMap.m;
- GLfloat *m = smesa->hw_viewport;
-
- /* See also sis_translate_vertex.
- */
- m[MAT_SX] = v[MAT_SX];
- m[MAT_TX] = v[MAT_TX] + SUBPIXEL_X;
- m[MAT_SY] = - v[MAT_SY];
- m[MAT_TY] = - v[MAT_TY] + smesa->driDrawable->h + SUBPIXEL_Y;
- m[MAT_SZ] = v[MAT_SZ] * smesa->depth_scale;
- m[MAT_TZ] = v[MAT_TZ] * smesa->depth_scale;
-}
-
-static void sisDDViewport( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height )
-{
- sisCalcViewport( ctx );
-}
-
-static void sisDDDepthRange( struct gl_context *ctx,
- GLclampd nearval, GLclampd farval )
-{
- sisCalcViewport( ctx );
-}
-
-/* =============================================================
- * Miscellaneous
- */
-
-static void
-sisDDLogicOpCode( struct gl_context *ctx, GLenum opcode )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- current->hwDstSet &= ~MASK_ROP2;
- switch (opcode)
- {
- case GL_CLEAR:
- current->hwDstSet |= LOP_CLEAR;
- break;
- case GL_SET:
- current->hwDstSet |= LOP_SET;
- break;
- case GL_COPY:
- current->hwDstSet |= LOP_COPY;
- break;
- case GL_COPY_INVERTED:
- current->hwDstSet |= LOP_COPY_INVERTED;
- break;
- case GL_NOOP:
- current->hwDstSet |= LOP_NOOP;
- break;
- case GL_INVERT:
- current->hwDstSet |= LOP_INVERT;
- break;
- case GL_AND:
- current->hwDstSet |= LOP_AND;
- break;
- case GL_NAND:
- current->hwDstSet |= LOP_NAND;
- break;
- case GL_OR:
- current->hwDstSet |= LOP_OR;
- break;
- case GL_NOR:
- current->hwDstSet |= LOP_NOR;
- break;
- case GL_XOR:
- current->hwDstSet |= LOP_XOR;
- break;
- case GL_EQUIV:
- current->hwDstSet |= LOP_EQUIV;
- break;
- case GL_AND_REVERSE:
- current->hwDstSet |= LOP_AND_REVERSE;
- break;
- case GL_AND_INVERTED:
- current->hwDstSet |= LOP_AND_INVERTED;
- break;
- case GL_OR_REVERSE:
- current->hwDstSet |= LOP_OR_REVERSE;
- break;
- case GL_OR_INVERTED:
- current->hwDstSet |= LOP_OR_INVERTED;
- break;
- }
-
- if (current->hwDstSet ^ prev->hwDstSet) {
- prev->hwDstSet = current->hwDstSet;
- smesa->GlobalFlag |= GFLAG_DESTSETTING;
- }
-}
-
-void sisDDDrawBuffer( struct gl_context *ctx, GLenum mode )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
- FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- current->hwDstSet &= ~MASK_DstBufferPitch;
- switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0] ) {
- case BUFFER_FRONT_LEFT:
- FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_FALSE );
- current->hwOffsetDest = smesa->front.offset >> 1;
- current->hwDstSet |= smesa->front.pitch >> 2;
- break;
- case BUFFER_BACK_LEFT:
- FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_FALSE );
- current->hwOffsetDest = smesa->back.offset >> 1;
- current->hwDstSet |= smesa->back.pitch >> 2;
- break;
- default:
- FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_TRUE );
- return;
- }
-
- if (current->hwDstSet != prev->hwDstSet) {
- prev->hwDstSet = current->hwDstSet;
- smesa->GlobalFlag |= GFLAG_DESTSETTING;
- }
-
- if (current->hwOffsetDest != prev->hwOffsetDest) {
- prev->hwOffsetDest = current->hwOffsetDest;
- smesa->GlobalFlag |= GFLAG_DESTSETTING;
- }
-}
-
-/* =============================================================
- * Polygon stipple
- */
-
-/* =============================================================
- * Render mode
- */
-
-/* =============================================================
- * State enable/disable
- */
-
-static void
-sisDDEnable( struct gl_context * ctx, GLenum cap, GLboolean state )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *current = &smesa->current;
-
- switch (cap)
- {
- case GL_ALPHA_TEST:
- if (state)
- current->hwCapEnable |= MASK_AlphaTestEnable;
- else
- current->hwCapEnable &= ~MASK_AlphaTestEnable;
- break;
- case GL_BLEND:
- /* TODO: */
- if (state)
- /* if (state & !ctx->Color.ColorLogicOpEnabled) */
- current->hwCapEnable |= MASK_BlendEnable;
- else
- current->hwCapEnable &= ~MASK_BlendEnable;
- break;
- case GL_CULL_FACE:
- if (state)
- current->hwCapEnable |= MASK_CullEnable;
- else
- current->hwCapEnable &= ~MASK_CullEnable;
- break;
- case GL_DEPTH_TEST:
- if (state && smesa->depth.offset != 0)
- current->hwCapEnable |= MASK_ZTestEnable;
- else
- current->hwCapEnable &= ~MASK_ZTestEnable;
- sisDDDepthMask( ctx, ctx->Depth.Mask );
- break;
- case GL_DITHER:
- if (state)
- current->hwCapEnable |= MASK_DitherEnable;
- else
- current->hwCapEnable &= ~MASK_DitherEnable;
- break;
- case GL_FOG:
- if (state)
- current->hwCapEnable |= MASK_FogEnable;
- else
- current->hwCapEnable &= ~MASK_FogEnable;
- break;
- case GL_COLOR_LOGIC_OP:
- if (state)
- sisDDLogicOpCode( ctx, ctx->Color.LogicOp );
- else
- sisDDLogicOpCode( ctx, GL_COPY );
- break;
- case GL_SCISSOR_TEST:
- sisUpdateClipping( ctx );
- break;
- case GL_STENCIL_TEST:
- if (state) {
- if (smesa->zFormat != SiS_ZFORMAT_S8Z24)
- FALLBACK(smesa, SIS_FALLBACK_STENCIL, 1);
- else
- current->hwCapEnable |= (MASK_StencilTestEnable |
- MASK_StencilWriteEnable);
- } else {
- FALLBACK(smesa, SIS_FALLBACK_STENCIL, 0);
- current->hwCapEnable &= ~(MASK_StencilTestEnable |
- MASK_StencilWriteEnable);
- }
- break;
- case GL_LIGHTING:
- case GL_COLOR_SUM_EXT:
- sisUpdateSpecular(ctx);
- break;
- }
-}
-
-
-/* =============================================================
- * State initialization, management
- */
-
-/* Called before beginning of rendering. */
-void
-sisUpdateHWState( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- /* enable setting 1 */
- if (current->hwCapEnable ^ prev->hwCapEnable) {
- prev->hwCapEnable = current->hwCapEnable;
- smesa->GlobalFlag |= GFLAG_ENABLESETTING;
- }
-
- /* enable setting 2 */
- if (current->hwCapEnable2 ^ prev->hwCapEnable2) {
- prev->hwCapEnable2 = current->hwCapEnable2;
- smesa->GlobalFlag |= GFLAG_ENABLESETTING2;
- }
-
- if (smesa->GlobalFlag & GFLAG_RENDER_STATES)
- sis_update_render_state( smesa );
-
- if (smesa->GlobalFlag & GFLAG_TEXTURE_STATES)
- sis_update_texture_state( smesa );
-}
-
-static void
-sisDDInvalidateState( struct gl_context *ctx, GLuint new_state )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- _swrast_InvalidateState( ctx, new_state );
- _swsetup_InvalidateState( ctx, new_state );
- _vbo_InvalidateState( ctx, new_state );
- _tnl_InvalidateState( ctx, new_state );
- smesa->NewGLState |= new_state;
-}
-
-/* Initialize the context's hardware state.
- */
-void sisDDInitState( sisContextPtr smesa )
-{
- __GLSiSHardware *current = &smesa->current;
- __GLSiSHardware *prev = &(smesa->prev);
- struct gl_context *ctx = smesa->glCtx;
-
- /* add Texture Perspective Enable */
- prev->hwCapEnable = MASK_FogPerspectiveEnable | MASK_TextureCacheEnable |
- MASK_TexturePerspectiveEnable | MASK_DitherEnable;
-
- /*
- prev->hwCapEnable2 = 0x00aa0080;
- */
- /* if multi-texture enabled, disable Z pre-test */
- prev->hwCapEnable2 = MASK_TextureMipmapBiasEnable;
-
- /* Z test mode is LESS */
- prev->hwZ = SiS_Z_COMP_S_LT_B;
-
- /* Depth mask */
- prev->hwZMask = 0xffffffff;
-
- /* Alpha test mode is ALWAYS, alpha ref value is 0 */
- prev->hwAlpha = SiS_ALPHA_ALWAYS;
-
- /* ROP2 is COPYPEN */
- prev->hwDstSet = LOP_COPY;
-
- /* color mask */
- prev->hwDstMask = 0xffffffff;
-
- /* LinePattern is 0, Repeat Factor is 0 */
- prev->hwLinePattern = 0x00008000;
-
- /* Src blend is BLEND_ONE, Dst blend is D3DBLEND_ZERO */
- prev->hwDstSrcBlend = SiS_S_ONE | SiS_D_ZERO;
-
- /* Stenciling disabled, function ALWAYS, ref value zero, mask all ones */
- prev->hwStSetting = STENCIL_FORMAT_8 | SiS_STENCIL_ALWAYS | 0xff;
- /* Op is KEEP for all three operations */
- prev->hwStSetting2 = SiS_SFAIL_KEEP | SiS_SPASS_ZFAIL_KEEP |
- SiS_SPASS_ZPASS_KEEP;
-
- /* Texture mapping mode is Tile */
-#if 0
- prev->texture[0].hwTextureSet = 0x00030000;
-#endif
- /* Magnified & minified texture filter is NEAREST */
-#if 0
- prev->texture[0].hwTextureMip = 0;
-#endif
-
- /* Texture Blending setting -- use fragment color/alpha*/
- prev->hwTexBlendColor0 = STAGE0_C_CF;
- prev->hwTexBlendColor1 = STAGE1_C_CF;
- prev->hwTexBlendAlpha0 = STAGE0_A_AF;
- prev->hwTexBlendAlpha1 = STAGE1_A_AF;
-
- switch (smesa->bytesPerPixel)
- {
- case 2:
- prev->hwDstSet |= DST_FORMAT_RGB_565;
- break;
- case 4:
- prev->hwDstSet |= DST_FORMAT_ARGB_8888;
- break;
- }
-
- switch (ctx->Visual.depthBits)
- {
- case 0:
- prev->hwCapEnable &= ~MASK_ZWriteEnable;
- case 16:
- smesa->zFormat = SiS_ZFORMAT_Z16;
- prev->hwCapEnable |= MASK_ZWriteEnable;
- smesa->depth_scale = 1.0 / (GLfloat)0xffff;
- break;
- case 32:
- smesa->zFormat = SiS_ZFORMAT_Z32;
- prev->hwCapEnable |= MASK_ZWriteEnable;
- smesa->depth_scale = 1.0 / (GLfloat)0xffffffff;
- break;
- case 24:
- assert (ctx->Visual.stencilBits);
- smesa->zFormat = SiS_ZFORMAT_S8Z24;
- prev->hwCapEnable |= MASK_StencilBufferEnable;
- prev->hwCapEnable |= MASK_ZWriteEnable;
- smesa->depth_scale = 1.0 / (GLfloat)0xffffff;
- break;
- }
-
- prev->hwZ |= smesa->zFormat;
-
- /* TODO: need to clear cache? */
- smesa->clearTexCache = GL_TRUE;
-
- smesa->clearColorPattern = 0;
-
- smesa->AGPParseSet = MASK_PsTexture1FromB | MASK_PsBumpTextureFromC;
- smesa->dwPrimitiveSet = OP_3D_Texture1FromB | OP_3D_TextureBumpFromC;
-
- sisUpdateZStencilPattern( smesa, 1.0, 0 );
- sisUpdateCull( ctx );
-
- memcpy( current, prev, sizeof (__GLSiSHardware) );
-
- /* Set initial fog settings. Start and end are the same case. */
- sisDDFogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density );
- sisDDFogfv( ctx, GL_FOG_END, &ctx->Fog.End );
- sisDDFogfv( ctx, GL_FOG_COORDINATE_SOURCE_EXT, NULL );
- sisDDFogfv( ctx, GL_FOG_MODE, NULL );
-}
-
-/* Initialize the driver's state functions.
- */
-void sisDDInitStateFuncs( struct gl_context *ctx )
-{
- ctx->Driver.UpdateState = sisDDInvalidateState;
-
- ctx->Driver.Clear = sisDDClear;
- ctx->Driver.ClearColor = sisDDClearColor;
- ctx->Driver.ClearDepth = sisDDClearDepth;
- ctx->Driver.ClearStencil = sisDDClearStencil;
-
- ctx->Driver.AlphaFunc = sisDDAlphaFunc;
- ctx->Driver.BlendFuncSeparate = sisDDBlendFuncSeparate;
- ctx->Driver.ColorMask = sisDDColorMask;
- ctx->Driver.CullFace = sisDDCullFace;
- ctx->Driver.DepthMask = sisDDDepthMask;
- ctx->Driver.DepthFunc = sisDDDepthFunc;
- ctx->Driver.DepthRange = sisDDDepthRange;
- ctx->Driver.DrawBuffer = sisDDDrawBuffer;
- ctx->Driver.Enable = sisDDEnable;
- ctx->Driver.FrontFace = sisDDFrontFace;
- ctx->Driver.Fogfv = sisDDFogfv;
- ctx->Driver.Hint = NULL;
- ctx->Driver.Lightfv = NULL;
- ctx->Driver.LogicOpcode = sisDDLogicOpCode;
- ctx->Driver.PolygonMode = NULL;
- ctx->Driver.PolygonStipple = NULL;
- ctx->Driver.ReadBuffer = NULL;
- ctx->Driver.RenderMode = NULL;
- ctx->Driver.Scissor = sisDDScissor;
- ctx->Driver.ShadeModel = sisDDShadeModel;
- ctx->Driver.LightModelfv = sisDDLightModelfv;
- ctx->Driver.Viewport = sisDDViewport;
-
- /* XXX this should go away */
- ctx->Driver.ResizeBuffers = sisReAllocateBuffers;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_state.h b/src/mesa/drivers/dri/sis/sis_state.h
deleted file mode 100644
index dcade4a9796..00000000000
--- a/src/mesa/drivers/dri/sis/sis_state.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#ifndef __SIS_STATE_H__
-#define __SIS_STATE_H__
-
-#include "sis_context.h"
-
-/* sis6326_clear.c */
-extern void sis6326DDClear( struct gl_context *ctx, GLbitfield mask );
-extern void sis6326DDClearColor( struct gl_context * ctx, const GLfloat color[4] );
-extern void sis6326DDClearDepth( struct gl_context * ctx, GLclampd d );
-extern void sis6326UpdateZPattern(sisContextPtr smesa, GLclampd z);
-
-/* sis_clear.c */
-extern void sisDDClear( struct gl_context *ctx, GLbitfield mask );
-extern void sisDDClearColor( struct gl_context * ctx, const GLfloat color[4] );
-extern void sisDDClearDepth( struct gl_context * ctx, GLclampd d );
-extern void sisDDClearStencil( struct gl_context * ctx, GLint s );
-extern void sisUpdateZStencilPattern( sisContextPtr smesa, GLclampd z,
- int stencil );
-
-/* sis_fog.c */
-extern void sisDDFogfv( struct gl_context * ctx, GLenum pname, const GLfloat * params );
-
-/* sis6326_state.c */
-extern void sis6326DDInitState( sisContextPtr smesa );
-extern void sis6326DDInitStateFuncs( struct gl_context *ctx );
-extern void sis6326UpdateClipping( struct gl_context * gc );
-extern void sis6326DDDrawBuffer( struct gl_context *ctx, GLenum mode );
-extern void sis6326UpdateHWState( struct gl_context *ctx );
-
-/* sis_state.c */
-extern void sisDDInitState( sisContextPtr smesa );
-extern void sisDDInitStateFuncs( struct gl_context *ctx );
-extern void sisDDDepthMask( struct gl_context * ctx, GLboolean flag );
-extern void sisUpdateClipping( struct gl_context * gc );
-extern void sisDDDrawBuffer( struct gl_context *ctx, GLenum mode );
-extern void sisUpdateHWState( struct gl_context *ctx );
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/sis_stencil.c b/src/mesa/drivers/dri/sis/sis_stencil.c
deleted file mode 100644
index 92eb08f31fb..00000000000
--- a/src/mesa/drivers/dri/sis/sis_stencil.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "sis_context.h"
-#include "sis_state.h"
-#include "sis_stencil.h"
-
-static void
-sisDDStencilFuncSeparate( struct gl_context * ctx, GLenum face,
- GLenum func, GLint ref, GLuint mask )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- /* set reference */
- current->hwStSetting = (STENCIL_FORMAT_8 |
- ((ctx->Stencil.Ref[0] & 0xff) << 8) |
- (ctx->Stencil.ValueMask[0] & 0xff));
-
- switch (func)
- {
- case GL_NEVER:
- current->hwStSetting |= SiS_STENCIL_NEVER;
- break;
- case GL_LESS:
- current->hwStSetting |= SiS_STENCIL_LESS;
- break;
- case GL_EQUAL:
- current->hwStSetting |= SiS_STENCIL_EQUAL;
- break;
- case GL_LEQUAL:
- current->hwStSetting |= SiS_STENCIL_LEQUAL;
- break;
- case GL_GREATER:
- current->hwStSetting |= SiS_STENCIL_GREATER;
- break;
- case GL_NOTEQUAL:
- current->hwStSetting |= SiS_STENCIL_NOTEQUAL;
- break;
- case GL_GEQUAL:
- current->hwStSetting |= SiS_STENCIL_GEQUAL;
- break;
- case GL_ALWAYS:
- current->hwStSetting |= SiS_STENCIL_ALWAYS;
- break;
- }
-
- if (current->hwStSetting != prev->hwStSetting)
- {
- prev->hwStSetting = current->hwStSetting;
-
- smesa->GlobalFlag |= GFLAG_STENCILSETTING;
- }
-}
-
-static void
-sisDDStencilMaskSeparate( struct gl_context * ctx, GLenum face, GLuint mask )
-{
- if (!ctx->Visual.stencilBits)
- return;
-
- /* set Z buffer Write Enable */
- sisDDDepthMask (ctx, ctx->Depth.Mask);
-}
-
-static void
-sisDDStencilOpSeparate( struct gl_context * ctx, GLenum face, GLenum fail,
- GLenum zfail, GLenum zpass )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- current->hwStSetting2 &= ~(MASK_StencilZPassOp | MASK_StencilZFailOp |
- MASK_StencilFailOp);
-
- switch (fail)
- {
- case GL_KEEP:
- current->hwStSetting2 |= SiS_SFAIL_KEEP;
- break;
- case GL_ZERO:
- current->hwStSetting2 |= SiS_SFAIL_ZERO;
- break;
- case GL_REPLACE:
- current->hwStSetting2 |= SiS_SFAIL_REPLACE;
- break;
- case GL_INVERT:
- current->hwStSetting2 |= SiS_SFAIL_INVERT;
- break;
- case GL_INCR:
- current->hwStSetting2 |= SiS_SFAIL_INCR;
- break;
- case GL_DECR:
- current->hwStSetting2 |= SiS_SFAIL_DECR;
- break;
- case GL_INCR_WRAP:
- current->hwStSetting2 |= SiS_SFAIL_INCR_WRAP;
- break;
- case GL_DECR_WRAP:
- current->hwStSetting2 |= SiS_SFAIL_DECR_WRAP;
- break;
- }
-
- switch (zfail)
- {
- case GL_KEEP:
- current->hwStSetting2 |= SiS_SPASS_ZFAIL_KEEP;
- break;
- case GL_ZERO:
- current->hwStSetting2 |= SiS_SPASS_ZFAIL_ZERO;
- break;
- case GL_REPLACE:
- current->hwStSetting2 |= SiS_SPASS_ZFAIL_REPLACE;
- break;
- case GL_INVERT:
- current->hwStSetting2 |= SiS_SPASS_ZFAIL_INVERT;
- break;
- case GL_INCR:
- current->hwStSetting2 |= SiS_SPASS_ZFAIL_INCR;
- break;
- case GL_DECR:
- current->hwStSetting2 |= SiS_SPASS_ZFAIL_DECR;
- break;
- case GL_INCR_WRAP:
- current->hwStSetting2 |= SiS_SPASS_ZFAIL_INCR_WRAP;
- break;
- case GL_DECR_WRAP:
- current->hwStSetting2 |= SiS_SPASS_ZFAIL_DECR_WRAP;
- break;
- }
-
- switch (zpass)
- {
- case GL_KEEP:
- current->hwStSetting2 |= SiS_SPASS_ZPASS_KEEP;
- break;
- case GL_ZERO:
- current->hwStSetting2 |= SiS_SPASS_ZPASS_ZERO;
- break;
- case GL_REPLACE:
- current->hwStSetting2 |= SiS_SPASS_ZPASS_REPLACE;
- break;
- case GL_INVERT:
- current->hwStSetting2 |= SiS_SPASS_ZPASS_INVERT;
- break;
- case GL_INCR:
- current->hwStSetting2 |= SiS_SPASS_ZPASS_INCR;
- break;
- case GL_DECR:
- current->hwStSetting2 |= SiS_SPASS_ZPASS_DECR;
- break;
- case GL_INCR_WRAP:
- current->hwStSetting2 |= SiS_SPASS_ZPASS_INCR_WRAP;
- break;
- case GL_DECR_WRAP:
- current->hwStSetting2 |= SiS_SPASS_ZPASS_DECR_WRAP;
- break;
- }
-
- if (current->hwStSetting2 != prev->hwStSetting2)
- {
- prev->hwStSetting2 = current->hwStSetting2;
- smesa->GlobalFlag |= GFLAG_STENCILSETTING;
- }
-}
-
-void
-sisDDInitStencilFuncs( struct gl_context *ctx )
-{
- ctx->Driver.StencilFuncSeparate = sisDDStencilFuncSeparate;
- ctx->Driver.StencilMaskSeparate = sisDDStencilMaskSeparate;
- ctx->Driver.StencilOpSeparate = sisDDStencilOpSeparate;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_stencil.h b/src/mesa/drivers/dri/sis/sis_stencil.h
deleted file mode 100644
index 9d061e87fd7..00000000000
--- a/src/mesa/drivers/dri/sis/sis_stencil.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#ifndef __SIS_STENCIL_H__
-#define __SIS_STENCIL_H__
-
-extern void sisDDInitStencilFuncs( struct gl_context *ctx );
-
-#endif
diff --git a/src/mesa/drivers/dri/sis/sis_tex.c b/src/mesa/drivers/dri/sis/sis_tex.c
deleted file mode 100644
index bb4896d9bdf..00000000000
--- a/src/mesa/drivers/dri/sis/sis_tex.c
+++ /dev/null
@@ -1,568 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#include "swrast/swrast.h"
-#include "main/imports.h"
-#include "main/texstore.h"
-#include "main/texobj.h"
-
-#include "sis_context.h"
-#include "sis_alloc.h"
-#include "sis_tex.h"
-#include "xmlpool.h"
-
-#define ALIGN(value, align) (GLubyte *)((long)(value + align - 1) & ~(align - 1))
-
-#define TEXTURE_HW_ALIGNMENT 4
-#define TEXTURE_HW_PLUS (4 + 4)
-
-static sisTexObjPtr
-sisAllocTexObj( struct gl_texture_object *texObj )
-{
- sisTexObjPtr t;
-
- t = (sisTexObjPtr) CALLOC_STRUCT( sis_tex_obj );
- texObj->DriverData = t;
- return t;
-}
-
-static void
-sisAllocTexImage( sisContextPtr smesa, sisTexObjPtr t, int level,
- const struct gl_texture_image *image )
-{
- char *addr;
- int size, texel_size;
-
- if (t->format == 0) {
- t->format = image->_BaseFormat;
- switch (image->TexFormat)
- {
- case MESA_FORMAT_ARGB8888:
- t->hwformat = TEXEL_ARGB_8888_32;
- break;
- case MESA_FORMAT_ARGB4444:
- t->hwformat = TEXEL_ARGB_4444_16;
- break;
- case MESA_FORMAT_ARGB1555:
- t->hwformat = TEXEL_ARGB_1555_16;
- break;
- case MESA_FORMAT_RGB565:
- t->hwformat = TEXEL_RGB_565_16;
- break;
- case MESA_FORMAT_RGB332:
- t->hwformat = TEXEL_RGB_332_8;
- break;
- case MESA_FORMAT_I8:
- t->hwformat = TEXEL_I8;
- break;
- case MESA_FORMAT_A8:
- t->hwformat = TEXEL_A8;
- break;
- case MESA_FORMAT_L8:
- t->hwformat = TEXEL_L8;
- break;
- case MESA_FORMAT_AL88:
- t->hwformat = TEXEL_AL88;
- break;
- case MESA_FORMAT_YCBCR:
- t->hwformat = TEXEL_YUV422;
- break;
- case MESA_FORMAT_YCBCR_REV:
- t->hwformat = TEXEL_VUY422;
- break;
- default:
- sis_fatal_error("Bad texture format 0x%x.\n", image->TexFormat);
- }
- }
- assert(t->format == image->_BaseFormat);
-
- texel_size = _mesa_get_format_bytes(image->TexFormat);
- size = image->Width * image->Height * texel_size + TEXTURE_HW_PLUS;
-
- addr = sisAllocFB( smesa, size, &t->image[level].handle );
- if (addr == NULL) {
- addr = sisAllocAGP( smesa, size, &t->image[level].handle );
- if (addr == NULL)
- sis_fatal_error("Failure to allocate texture memory.\n");
- t->image[level].memType = AGP_TYPE;
- }
- else
- t->image[level].memType = VIDEO_TYPE;
-
- t->image[level].Data = ALIGN(addr, TEXTURE_HW_ALIGNMENT);
- t->image[level].pitch = image->Width * texel_size;
- t->image[level].size = image->Width * image->Height * texel_size;
- t->numImages++;
-}
-
-static void
-sisFreeTexImage( sisContextPtr smesa, sisTexObjPtr t, int level )
-{
- assert(level >= 0);
- assert(level < SIS_MAX_TEXTURE_LEVELS);
- if (t->image[level].Data == NULL)
- return;
-
- switch (t->image[level].memType)
- {
- case VIDEO_TYPE:
- sisFreeFB( smesa, t->image[level].handle );
- break;
- case AGP_TYPE:
- sisFreeAGP( smesa, t->image[level].handle );
- break;
- }
- t->image[level].Data = NULL;
- t->image[level].handle = NULL;
- /* If there are no textures loaded any more, reset the hw format so the
- * object can be reused for new formats
- */
- t->numImages--;
- if (t->numImages == 0) {
- t->format = 0;
- t->hwformat = 0;
- }
-}
-
-static void
-sisTexEnv( struct gl_context *ctx, GLenum target, GLenum pname, const GLfloat *param )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURE_ENV;
-}
-
-static void
-sisTexParameter( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *texObj, GLenum pname,
- const GLfloat *params )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURING;
-}
-
-static void
-sisBindTexture( struct gl_context *ctx, GLenum target,
- struct gl_texture_object *texObj )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- sisTexObjPtr t;
-
- if ( target == GL_TEXTURE_2D || target == GL_TEXTURE_1D ) {
- if ( texObj->DriverData == NULL ) {
- sisAllocTexObj( texObj );
- }
- }
-
- t = texObj->DriverData;
- if (!t)
- return;
-
- if (smesa->PrevTexFormat[ctx->Texture.CurrentUnit] != t->format) {
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURE_ENV;
- smesa->PrevTexFormat[ctx->Texture.CurrentUnit] = t->format;
- }
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURING;
-}
-
-static void
-sisDeleteTexture( struct gl_context * ctx, struct gl_texture_object *texObj )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- sisTexObjPtr t;
- int i;
-
- smesa->clearTexCache = GL_TRUE;
-
- t = texObj->DriverData;
- if (t == NULL) {
- /*
- * this shows the texture is default object and never be a
- * argument of sisTexImage*
- */
- return;
- }
- for (i = 0; i < SIS_MAX_TEXTURE_LEVELS; i++) {
- sisFreeTexImage( smesa, t, i );
- }
-
- FREE(t);
- texObj->DriverData = NULL;
- /* Free mipmap images and the texture object itself */
- _mesa_delete_texture_object(ctx, texObj);
-}
-
-static GLboolean sisIsTextureResident( struct gl_context * ctx,
- struct gl_texture_object *texObj )
-{
- return (texObj->DriverData != NULL);
-}
-
-static gl_format
-sisChooseTextureFormat( struct gl_context *ctx, GLint internalFormat,
- GLenum format, GLenum type )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- const GLboolean do32bpt =
- (smesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_32);
- const GLboolean force16bpt =
- (smesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_FORCE_16);
-
- switch ( internalFormat ) {
- case 4:
- case GL_RGBA:
- case GL_COMPRESSED_RGBA:
- switch ( type ) {
- case GL_UNSIGNED_INT_10_10_10_2:
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_4_4_4_4_REV:
- return MESA_FORMAT_ARGB4444;
- case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_UNSIGNED_SHORT_1_5_5_5_REV:
- return MESA_FORMAT_ARGB1555;
- default:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
- }
-
- case 3:
- case GL_RGB:
- case GL_COMPRESSED_RGB:
- switch ( type ) {
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_4_4_4_4_REV:
- return MESA_FORMAT_ARGB4444;
- case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_UNSIGNED_SHORT_1_5_5_5_REV:
- return MESA_FORMAT_ARGB1555;
- case GL_UNSIGNED_SHORT_5_6_5:
- case GL_UNSIGNED_SHORT_5_6_5_REV:
- return MESA_FORMAT_RGB565;
- default:
- return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
- }
-
- case GL_RGBA8:
- case GL_RGBA12:
- case GL_RGBA16:
- return !force16bpt ?
- MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
-
- case GL_RGB10_A2:
- return !force16bpt ?
- MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
-
- case GL_RGBA4:
- case GL_RGBA2:
- return MESA_FORMAT_ARGB4444;
-
- case GL_RGB5_A1:
- return MESA_FORMAT_ARGB1555;
-
- case GL_RGB8:
- case GL_RGB10:
- case GL_RGB12:
- case GL_RGB16:
- return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
-
- case GL_RGB5:
- case GL_RGB4:
- return MESA_FORMAT_RGB565;
-
- case GL_R3_G3_B2:
- return MESA_FORMAT_RGB332;
-
- case GL_ALPHA:
- case GL_ALPHA4: /* FIXME: This could use its own texstore */
- case GL_ALPHA8:
- case GL_ALPHA12:
- case GL_ALPHA16:
- case GL_COMPRESSED_ALPHA:
- return MESA_FORMAT_A8;
-
- case 1:
- case GL_LUMINANCE:
- case GL_LUMINANCE4: /* FIXME: This could use its own texstore */
- case GL_LUMINANCE8:
- case GL_LUMINANCE12:
- case GL_LUMINANCE16:
- case GL_COMPRESSED_LUMINANCE:
- return MESA_FORMAT_L8;
-
- case 2:
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE4_ALPHA4: /* FIXME: This could use its own texstore */
- case GL_LUMINANCE6_ALPHA2: /* FIXME: This could use its own texstore */
- case GL_LUMINANCE8_ALPHA8:
- case GL_LUMINANCE12_ALPHA4: /* FIXME: This could use its own texstore */
- case GL_LUMINANCE12_ALPHA12:
- case GL_LUMINANCE16_ALPHA16:
- case GL_COMPRESSED_LUMINANCE_ALPHA:
- return MESA_FORMAT_AL88;
-
- case GL_INTENSITY:
- case GL_INTENSITY4:
- case GL_INTENSITY8:
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- case GL_COMPRESSED_INTENSITY:
- return MESA_FORMAT_I8;
-
- case GL_YCBCR_MESA:
- if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
- type == GL_UNSIGNED_BYTE)
- return MESA_FORMAT_YCBCR;
- else
- return MESA_FORMAT_YCBCR_REV;
-
- default:
- _mesa_problem(ctx, "unexpected format in sisDDChooseTextureFormat: %d",
- internalFormat);
- return MESA_FORMAT_NONE;
- }
-}
-
-static void sisTexImage1D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- sisTexObjPtr t;
-
- if ( texObj->DriverData == NULL )
- sisAllocTexObj( texObj );
- t = texObj->DriverData;
-
- /* Note, this will call sisChooseTextureFormat */
- _mesa_store_teximage1d( ctx, target, level, internalFormat,
- width, border, format, type,
- pixels, packing, texObj, texImage );
-
- /* Allocate offscreen space for the texture */
- sisFreeTexImage(smesa, t, level);
- sisAllocTexImage(smesa, t, level, texImage);
-
- /* Upload the texture */
- WaitEngIdle(smesa);
- memcpy(t->image[level].Data, texImage->Data, t->image[level].size);
-
- if (smesa->PrevTexFormat[ctx->Texture.CurrentUnit] != t->format)
- {
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURE_ENV;
- smesa->PrevTexFormat[ctx->Texture.CurrentUnit] = t->format;
- }
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURING;
-}
-
-
-static void sisTexSubImage1D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLsizei width,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- sisTexObjPtr t;
- GLuint copySize;
- GLint texelBytes;
- const char *src;
- GLubyte *dst;
-
- if ( texObj->DriverData == NULL )
- sisAllocTexObj( texObj );
- t = texObj->DriverData;
-
- _mesa_store_texsubimage1d(ctx, target, level, xoffset, width,
- format, type, pixels, packing, texObj,
- texImage);
-
- /* Allocate offscreen space for the texture */
- sisFreeTexImage(smesa, t, level);
- sisAllocTexImage(smesa, t, level, texImage);
-
- /* Upload the texture */
- WaitEngIdle(smesa);
- texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
-
- copySize = width * texelBytes;
- src = (char *)texImage->Data + xoffset * texelBytes;
- dst = t->image[level].Data + xoffset * texelBytes;
-
- memcpy( dst, src, copySize );
-
- smesa->clearTexCache = GL_TRUE;
-
- if (smesa->PrevTexFormat[ctx->Texture.CurrentUnit] != t->format)
- {
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURE_ENV;
- smesa->PrevTexFormat[ctx->Texture.CurrentUnit] = t->format;
- }
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURING;
-}
-
-static void sisTexImage2D( struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat,
- GLint width, GLint height, GLint border,
- GLenum format, GLenum type, const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- sisTexObjPtr t;
-
- if ( texObj->DriverData == NULL )
- sisAllocTexObj( texObj );
- t = texObj->DriverData;
-
- /* Note, this will call sisChooseTextureFormat */
- _mesa_store_teximage2d(ctx, target, level, internalFormat,
- width, height, border, format, type, pixels,
- &ctx->Unpack, texObj, texImage);
-
- /* Allocate offscreen space for the texture */
- sisFreeTexImage(smesa, t, level);
- sisAllocTexImage(smesa, t, level, texImage);
-
- /* Upload the texture */
- WaitEngIdle(smesa);
- memcpy(t->image[level].Data, texImage->Data, t->image[level].size);
-
- if (smesa->PrevTexFormat[ctx->Texture.CurrentUnit] != t->format)
- {
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURE_ENV;
- smesa->PrevTexFormat[ctx->Texture.CurrentUnit] = t->format;
- }
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURING;
-}
-
-static void sisTexSubImage2D( struct gl_context *ctx,
- GLenum target,
- GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- sisTexObjPtr t;
- GLuint copySize;
- GLint texelBytes;
- const char *src;
- GLubyte *dst;
- int j;
- GLuint soffset;
-
- if ( texObj->DriverData == NULL )
- sisAllocTexObj( texObj );
- t = texObj->DriverData;
-
- _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width,
- height, format, type, pixels, packing, texObj,
- texImage);
-
- /* Allocate offscreen space for the texture */
- sisFreeTexImage(smesa, t, level);
- sisAllocTexImage(smesa, t, level, texImage);
-
- /* Upload the texture */
- WaitEngIdle(smesa);
- texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
-
- copySize = width * texelBytes;
- src = (char *)texImage->Data + (xoffset + yoffset * texImage->Width) *
- texelBytes;
- dst = t->image[level].Data + (xoffset + yoffset * texImage->Width) *
- texelBytes;
- soffset = texImage->Width * texelBytes;
-
- for (j = yoffset; j < yoffset + height; j++) {
- memcpy( dst, src, copySize );
- src += soffset;
- dst += soffset;
- }
-
- smesa->clearTexCache = GL_TRUE;
-
- if (smesa->PrevTexFormat[ctx->Texture.CurrentUnit] != t->format)
- {
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURE_ENV;
- smesa->PrevTexFormat[ctx->Texture.CurrentUnit] = t->format;
- }
- smesa->TexStates[ctx->Texture.CurrentUnit] |= NEW_TEXTURING;
-}
-
-
-/**
- * Allocate a new texture object.
- * Called via ctx->Driver.NewTextureObject.
- * Note: this function will be called during context creation to
- * allocate the default texture objects.
- * Note: we could use containment here to 'derive' the driver-specific
- * texture object from the core mesa gl_texture_object. Not done at this time.
- */
-static struct gl_texture_object *
-sisNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
-{
- struct gl_texture_object *obj;
- obj = _mesa_new_texture_object(ctx, name, target);
- return obj;
-}
-
-
-void sisInitTextureFuncs( struct dd_function_table *functions )
-{
- functions->TexEnv = sisTexEnv;
- functions->ChooseTextureFormat = sisChooseTextureFormat;
- functions->TexImage1D = sisTexImage1D;
- functions->TexSubImage1D = sisTexSubImage1D;
- functions->TexImage2D = sisTexImage2D;
- functions->TexSubImage2D = sisTexSubImage2D;
- functions->TexParameter = sisTexParameter;
- functions->BindTexture = sisBindTexture;
- functions->NewTextureObject = sisNewTextureObject;
- functions->DeleteTexture = sisDeleteTexture;
- functions->IsTextureResident = sisIsTextureResident;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_tex.h b/src/mesa/drivers/dri/sis/sis_tex.h
deleted file mode 100644
index f467b7dca9e..00000000000
--- a/src/mesa/drivers/dri/sis/sis_tex.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#ifndef __SIS_TEX_H__
-#define __SIS_TEX_H__
-
-extern void sisInitTextureFuncs( struct dd_function_table *table );
-extern void sisUpdateTextureState( struct gl_context *ctx );
-
-#endif /* __SIS_TEX_H__ */
diff --git a/src/mesa/drivers/dri/sis/sis_texstate.c b/src/mesa/drivers/dri/sis/sis_texstate.c
deleted file mode 100644
index 6580f155bae..00000000000
--- a/src/mesa/drivers/dri/sis/sis_texstate.c
+++ /dev/null
@@ -1,712 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "main/glheader.h"
-#include "main/imports.h"
-#include "main/colormac.h"
-#include "main/context.h"
-#include "main/macros.h"
-
-#include "sis_context.h"
-#include "sis_tex.h"
-#include "sis_tris.h"
-#include "sis_alloc.h"
-
-static GLint TransferTexturePitch (GLint dwPitch);
-
-/* Handle texenv stuff, called from validate_texture (renderstart) */
-static void
-sis_set_texture_env0( struct gl_context *ctx, struct gl_texture_object *texObj,
- int unit )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLubyte c[4];
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- struct gl_texture_unit *texture_unit = &ctx->Texture.Unit[unit];
-
- sisTexObjPtr t = texObj->DriverData;
-
- switch (texture_unit->EnvMode)
- {
- case GL_REPLACE:
- switch (t->format)
- {
- case GL_ALPHA:
- current->hwTexBlendColor0 = STAGE0_C_CF;
- current->hwTexBlendAlpha0 = STAGE0_A_AS;
- break;
- case GL_LUMINANCE:
- case GL_RGB:
- case GL_YCBCR_MESA:
- current->hwTexBlendColor0 = STAGE0_C_CS;
- current->hwTexBlendAlpha0 = STAGE0_A_AF;
- break;
- case GL_INTENSITY:
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- current->hwTexBlendColor0 = STAGE0_C_CS;
- current->hwTexBlendAlpha0 = STAGE0_A_AS;
- break;
- default:
- sis_fatal_error("unknown base format 0x%x\n", t->format);
- }
- break;
-
- case GL_MODULATE:
- switch (t->format)
- {
- case GL_ALPHA:
- current->hwTexBlendColor0 = STAGE0_C_CF;
- current->hwTexBlendAlpha0 = STAGE0_A_AFAS;
- break;
- case GL_LUMINANCE:
- case GL_RGB:
- case GL_YCBCR_MESA:
- current->hwTexBlendColor0 = STAGE0_C_CFCS;
- current->hwTexBlendAlpha0 = STAGE0_A_AF;
- break;
- case GL_INTENSITY:
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- current->hwTexBlendColor0 = STAGE0_C_CFCS;
- current->hwTexBlendAlpha0 = STAGE0_A_AFAS;
- break;
- default:
- sis_fatal_error("unknown base format 0x%x\n", t->format);
- }
- break;
-
- case GL_DECAL:
- switch (t->format)
- {
- case GL_RGB:
- case GL_YCBCR_MESA:
- current->hwTexBlendColor0 = STAGE0_C_CS;
- current->hwTexBlendAlpha0 = STAGE0_A_AF;
- break;
- case GL_RGBA:
- current->hwTexBlendColor0 = STAGE0_C_CFOMAS_CSAS;
- current->hwTexBlendAlpha0 = STAGE0_A_AF;
- break;
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_INTENSITY:
- case GL_LUMINANCE_ALPHA:
- current->hwTexBlendColor0 = STAGE0_C_CF;
- current->hwTexBlendAlpha0 = STAGE0_A_AF;
- break;
- default:
- sis_fatal_error("unknown base format 0x%x\n", t->format);
- }
- break;
-
- case GL_BLEND:
- UNCLAMPED_FLOAT_TO_RGBA_CHAN(c, texture_unit->EnvColor);
- current->hwTexEnvColor = ((GLint) (c[3])) << 24 |
- ((GLint) (c[0])) << 16 |
- ((GLint) (c[1])) << 8 |
- ((GLint) (c[2]));
- switch (t->format)
- {
- case GL_ALPHA:
- current->hwTexBlendColor0 = STAGE0_C_CF;
- current->hwTexBlendAlpha0 = STAGE0_A_AFAS;
- break;
- case GL_LUMINANCE:
- case GL_RGB:
- case GL_YCBCR_MESA:
- current->hwTexBlendColor0 = STAGE0_C_CFOMCS_CCCS;
- current->hwTexBlendAlpha0 = STAGE0_A_AF;
- break;
- case GL_INTENSITY:
- current->hwTexBlendColor0 = STAGE0_C_CFOMCS_CCCS;
- current->hwTexBlendAlpha0 = STAGE0_A_AFOMAS_ACAS;
- break;
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- current->hwTexBlendColor0 = STAGE0_C_CFOMCS_CCCS;
- current->hwTexBlendAlpha0 = STAGE0_A_AFAS;
- break;
- default:
- sis_fatal_error("unknown base format 0x%x\n", t->format);
- }
- break;
-
- default:
- sis_fatal_error("unknown env mode 0x%x\n", texture_unit->EnvMode);
- }
-
- if ((current->hwTexBlendColor0 != prev->hwTexBlendColor0) ||
- (current->hwTexBlendAlpha0 != prev->hwTexBlendAlpha0) ||
- (current->hwTexEnvColor != prev->hwTexEnvColor))
- {
- prev->hwTexEnvColor = current->hwTexEnvColor;
- prev->hwTexBlendColor0 = current->hwTexBlendColor0;
- prev->hwTexBlendAlpha0 = current->hwTexBlendAlpha0;
- smesa->GlobalFlag |= GFLAG_TEXTUREENV;
- }
-}
-
-/* Handle texenv stuff, called from validate_texture (renderstart) */
-static void
-sis_set_texture_env1( struct gl_context *ctx, struct gl_texture_object *texObj,
- int unit)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLubyte c[4];
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- struct gl_texture_unit *texture_unit = &ctx->Texture.Unit[unit];
-
- sisTexObjPtr t = texObj->DriverData;
-
- switch (texture_unit->EnvMode)
- {
- case GL_REPLACE:
- switch (t->format)
- {
- case GL_ALPHA:
- current->hwTexBlendColor1 = STAGE1_C_CF;
- current->hwTexBlendAlpha1 = STAGE1_A_AS;
- break;
- case GL_LUMINANCE:
- case GL_RGB:
- case GL_YCBCR_MESA:
- current->hwTexBlendColor1 = STAGE1_C_CS;
- current->hwTexBlendAlpha1 = STAGE1_A_AF;
- break;
- case GL_INTENSITY:
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- current->hwTexBlendColor1 = STAGE1_C_CS;
- current->hwTexBlendAlpha1 = STAGE1_A_AS;
- break;
- default:
- sis_fatal_error("unknown base format 0x%x\n", t->format);
- }
- break;
-
- case GL_MODULATE:
- switch (t->format)
- {
- case GL_ALPHA:
- current->hwTexBlendColor1 = STAGE1_C_CF;
- current->hwTexBlendAlpha1 = STAGE1_A_AFAS;
- break;
- case GL_LUMINANCE:
- case GL_RGB:
- case GL_YCBCR_MESA:
- current->hwTexBlendColor1 = STAGE1_C_CFCS;
- current->hwTexBlendAlpha1 = STAGE1_A_AF;
- break;
- case GL_INTENSITY:
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- current->hwTexBlendColor1 = STAGE1_C_CFCS;
- current->hwTexBlendAlpha1 = STAGE1_A_AFAS;
- break;
- default:
- sis_fatal_error("unknown base format 0x%x\n", t->format);
- }
- break;
-
- case GL_DECAL:
- switch (t->format)
- {
- case GL_RGB:
- case GL_YCBCR_MESA:
- current->hwTexBlendColor1 = STAGE1_C_CS;
- current->hwTexBlendAlpha1 = STAGE1_A_AF;
- break;
- case GL_RGBA:
- current->hwTexBlendColor1 = STAGE1_C_CFOMAS_CSAS;
- current->hwTexBlendAlpha1 = STAGE1_A_AF;
- break;
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_INTENSITY:
- case GL_LUMINANCE_ALPHA:
- current->hwTexBlendColor1 = STAGE1_C_CF;
- current->hwTexBlendAlpha1 = STAGE1_A_AF;
- break;
- default:
- sis_fatal_error("unknown base format 0x%x\n", t->format);
- }
- break;
-
- case GL_BLEND:
- UNCLAMPED_FLOAT_TO_RGBA_CHAN(c, texture_unit->EnvColor);
- current->hwTexEnvColor = ((GLint) (c[3])) << 24 |
- ((GLint) (c[0])) << 16 |
- ((GLint) (c[1])) << 8 |
- ((GLint) (c[2]));
- switch (t->format)
- {
- case GL_ALPHA:
- current->hwTexBlendColor1 = STAGE1_C_CF;
- current->hwTexBlendAlpha1 = STAGE1_A_AFAS;
- break;
- case GL_LUMINANCE:
- case GL_RGB:
- case GL_YCBCR_MESA:
- current->hwTexBlendColor1 = STAGE1_C_CFOMCS_CCCS;
- current->hwTexBlendAlpha1 = STAGE1_A_AF;
- break;
- case GL_INTENSITY:
- current->hwTexBlendColor1 = STAGE1_C_CFOMCS_CCCS;
- current->hwTexBlendAlpha1 = STAGE1_A_AFOMAS_ACAS;
- break;
- case GL_LUMINANCE_ALPHA:
- case GL_RGBA:
- current->hwTexBlendColor1 = STAGE1_C_CFOMCS_CCCS;
- current->hwTexBlendAlpha1 = STAGE1_A_AFAS;
- break;
- default:
- sis_fatal_error("unknown base format 0x%x\n", t->format);
- }
- break;
-
- default:
- sis_fatal_error("unknown env mode 0x%x\n", texture_unit->EnvMode);
- }
-
- if ((current->hwTexBlendColor1 != prev->hwTexBlendColor1) ||
- (current->hwTexBlendAlpha1 != prev->hwTexBlendAlpha1) ||
- (current->hwTexEnvColor != prev->hwTexEnvColor))
- {
- prev->hwTexBlendColor1 = current->hwTexBlendColor1;
- prev->hwTexBlendAlpha1 = current->hwTexBlendAlpha1;
- prev->hwTexEnvColor = current->hwTexEnvColor;
- smesa->GlobalFlag |= GFLAG_TEXTUREENV_1;
- }
-}
-
-/* Returns 0 if a software fallback is necessary */
-static GLboolean
-sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
- int hw_unit )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- int ok = 1;
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- sisTexObjPtr t = texObj->DriverData;
-
- GLint firstLevel, lastLevel;
- GLint i;
-
- current->texture[hw_unit].hwTextureMip = 0UL;
- current->texture[hw_unit].hwTextureSet = t->hwformat;
-
- if ((texObj->Sampler.MinFilter == GL_NEAREST) || (texObj->Sampler.MinFilter == GL_LINEAR)) {
- firstLevel = lastLevel = texObj->BaseLevel;
- } else {
- /* Compute which mipmap levels we really want to send to the hardware.
- * This depends on the base image size, GL_TEXTURE_MIN_LOD,
- * GL_TEXTURE_MAX_LOD, GL_TEXTURE_BASE_LEVEL and GL_TEXTURE_MAX_LEVEL.
- * Yes, this looks overly complicated, but it's all needed.
- */
-
- firstLevel = texObj->BaseLevel + (GLint)(texObj->Sampler.MinLod + 0.5);
- firstLevel = MAX2(firstLevel, texObj->BaseLevel);
- lastLevel = texObj->BaseLevel + (GLint)(texObj->Sampler.MaxLod + 0.5);
- lastLevel = MAX2(lastLevel, texObj->BaseLevel);
- lastLevel = MIN2(lastLevel, texObj->BaseLevel +
- texObj->Image[0][texObj->BaseLevel]->MaxLog2);
- lastLevel = MIN2(lastLevel, texObj->MaxLevel);
- lastLevel = MAX2(firstLevel, lastLevel); /* need at least one level */
- }
-
- current->texture[hw_unit].hwTextureSet |= (lastLevel << 8);
-
- switch (texObj->Sampler.MagFilter)
- {
- case GL_NEAREST:
- current->texture[hw_unit].hwTextureMip |= TEXTURE_FILTER_NEAREST;
- break;
- case GL_LINEAR:
- current->texture[hw_unit].hwTextureMip |= (TEXTURE_FILTER_LINEAR << 3);
- break;
- }
-
- {
- GLint b;
-
- /* The mipmap lod biasing is based on experiment. It seems there's a
- * limit of around +4/-4 to the bias value; we're being conservative.
- */
- b = (GLint) (ctx->Texture.Unit[hw_unit].LodBias * 32.0);
- if (b > 127)
- b = 127;
- else if (b < -128)
- b = -128;
-
- current->texture[hw_unit].hwTextureMip |= ((b << 4) &
- MASK_TextureMipmapLodBias);
- }
-
- switch (texObj->Sampler.MinFilter)
- {
- case GL_NEAREST:
- current->texture[hw_unit].hwTextureMip |= TEXTURE_FILTER_NEAREST;
- break;
- case GL_LINEAR:
- current->texture[hw_unit].hwTextureMip |= TEXTURE_FILTER_LINEAR;
- break;
- case GL_NEAREST_MIPMAP_NEAREST:
- current->texture[hw_unit].hwTextureMip |=
- TEXTURE_FILTER_NEAREST_MIP_NEAREST;
- break;
- case GL_NEAREST_MIPMAP_LINEAR:
- current->texture[hw_unit].hwTextureMip |=
- TEXTURE_FILTER_NEAREST_MIP_LINEAR;
- break;
- case GL_LINEAR_MIPMAP_NEAREST:
- current->texture[hw_unit].hwTextureMip |=
- TEXTURE_FILTER_LINEAR_MIP_NEAREST;
- break;
- case GL_LINEAR_MIPMAP_LINEAR:
- current->texture[hw_unit].hwTextureMip |=
- TEXTURE_FILTER_LINEAR_MIP_LINEAR;
- break;
- }
-
- switch (texObj->Sampler.WrapS)
- {
- case GL_REPEAT:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureWrapU;
- break;
- case GL_MIRRORED_REPEAT:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureMirrorU;
- break;
- case GL_CLAMP:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureClampU;
- /* XXX: GL_CLAMP isn't conformant, but falling back makes the situation
- * worse in other programs at the moment.
- */
- /*ok = 0;*/
- break;
- case GL_CLAMP_TO_EDGE:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureClampU;
- break;
- case GL_CLAMP_TO_BORDER:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureBorderU;
- break;
- }
-
- switch (texObj->Sampler.WrapT)
- {
- case GL_REPEAT:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureWrapV;
- break;
- case GL_MIRRORED_REPEAT:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureMirrorV;
- break;
- case GL_CLAMP:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureClampV;
- /* XXX: GL_CLAMP isn't conformant, but falling back makes the situation
- * worse in other programs at the moment.
- */
- /*ok = 0;*/
- break;
- case GL_CLAMP_TO_EDGE:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureClampV;
- break;
- case GL_CLAMP_TO_BORDER:
- current->texture[hw_unit].hwTextureSet |= MASK_TextureBorderV;
- break;
- }
-
- {
- GLubyte c[4];
- CLAMPED_FLOAT_TO_UBYTE(c[0], texObj->Sampler.BorderColor.f[0]);
- CLAMPED_FLOAT_TO_UBYTE(c[1], texObj->Sampler.BorderColor.f[1]);
- CLAMPED_FLOAT_TO_UBYTE(c[2], texObj->Sampler.BorderColor.f[2]);
- CLAMPED_FLOAT_TO_UBYTE(c[3], texObj->Sampler.BorderColor.f[3]);
-
- current->texture[hw_unit].hwTextureBorderColor =
- PACK_COLOR_8888(c[3], c[0], c[1], c[2]);
- }
-
- if (current->texture[hw_unit].hwTextureBorderColor !=
- prev->texture[hw_unit].hwTextureBorderColor)
- {
- prev->texture[hw_unit].hwTextureBorderColor =
- current->texture[hw_unit].hwTextureBorderColor;
- if (hw_unit == 1)
- smesa->GlobalFlag |= GFLAG_TEXBORDERCOLOR_1;
- else
- smesa->GlobalFlag |= GFLAG_TEXBORDERCOLOR;
- }
-
- current->texture[hw_unit].hwTextureSet |=
- texObj->Image[0][firstLevel]->WidthLog2 << 4;
- current->texture[hw_unit].hwTextureSet |=
- texObj->Image[0][firstLevel]->HeightLog2;
-
- if (hw_unit == 0)
- smesa->GlobalFlag |= GFLAG_TEXTUREADDRESS;
- else
- smesa->GlobalFlag |= GFLAG_TEXTUREADDRESS_1;
-
- for (i = firstLevel; i <= lastLevel; i++)
- {
- GLuint texOffset = 0;
- GLuint texPitch = TransferTexturePitch( t->image[i].pitch );
-
- switch (t->image[i].memType)
- {
- case VIDEO_TYPE:
- texOffset = ((unsigned long)t->image[i].Data - (unsigned long)smesa->FbBase);
- break;
- case AGP_TYPE:
- texOffset = ((unsigned long)t->image[i].Data - (unsigned long)smesa->AGPBase) +
- (unsigned long) smesa->AGPAddr;
- current->texture[hw_unit].hwTextureMip |=
- (MASK_TextureLevel0InSystem << i);
- break;
- }
-
- switch (i)
- {
- case 0:
- prev->texture[hw_unit].texOffset0 = texOffset;
- prev->texture[hw_unit].texPitch01 = texPitch << 16;
- break;
- case 1:
- prev->texture[hw_unit].texOffset1 = texOffset;
- prev->texture[hw_unit].texPitch01 |= texPitch;
- break;
- case 2:
- prev->texture[hw_unit].texOffset2 = texOffset;
- prev->texture[hw_unit].texPitch23 = texPitch << 16;
- break;
- case 3:
- prev->texture[hw_unit].texOffset3 = texOffset;
- prev->texture[hw_unit].texPitch23 |= texPitch;
- break;
- case 4:
- prev->texture[hw_unit].texOffset4 = texOffset;
- prev->texture[hw_unit].texPitch45 = texPitch << 16;
- break;
- case 5:
- prev->texture[hw_unit].texOffset5 = texOffset;
- prev->texture[hw_unit].texPitch45 |= texPitch;
- break;
- case 6:
- prev->texture[hw_unit].texOffset6 = texOffset;
- prev->texture[hw_unit].texPitch67 = texPitch << 16;
- break;
- case 7:
- prev->texture[hw_unit].texOffset7 = texOffset;
- prev->texture[hw_unit].texPitch67 |= texPitch;
- break;
- case 8:
- prev->texture[hw_unit].texOffset8 = texOffset;
- prev->texture[hw_unit].texPitch89 = texPitch << 16;
- break;
- case 9:
- prev->texture[hw_unit].texOffset9 = texOffset;
- prev->texture[hw_unit].texPitch89 |= texPitch;
- break;
- case 10:
- prev->texture[hw_unit].texOffset10 = texOffset;
- prev->texture[hw_unit].texPitch10 = texPitch << 16;
- break;
- case 11:
- prev->texture[hw_unit].texOffset11 = texOffset;
- prev->texture[hw_unit].texPitch10 |= texPitch;
- break;
- }
- }
-
- if (current->texture[hw_unit].hwTextureSet !=
- prev->texture[hw_unit].hwTextureSet)
- {
- prev->texture[hw_unit].hwTextureSet =
- current->texture[hw_unit].hwTextureSet;
- if (hw_unit == 1)
- smesa->GlobalFlag |= CFLAG_TEXTURERESET_1;
- else
- smesa->GlobalFlag |= CFLAG_TEXTURERESET;
- }
- if (current->texture[hw_unit].hwTextureMip !=
- prev->texture[hw_unit].hwTextureMip)
- {
- prev->texture[hw_unit].hwTextureMip =
- current->texture[hw_unit].hwTextureMip;
- if (hw_unit == 1)
- smesa->GlobalFlag |= GFLAG_TEXTUREMIPMAP_1;
- else
- smesa->GlobalFlag |= GFLAG_TEXTUREMIPMAP;
- }
-
- return ok;
-}
-
-/* Disable a texture unit, called from validate_texture */
-static void
-sis_reset_texture_env (struct gl_context *ctx, int hw_unit)
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- __GLSiSHardware *prev = &smesa->prev;
- __GLSiSHardware *current = &smesa->current;
-
- if (hw_unit == 1)
- {
- current->hwTexBlendColor1 = STAGE1_C_CF;
- current->hwTexBlendAlpha1 = STAGE1_A_AF;
-
- if ((current->hwTexBlendColor1 != prev->hwTexBlendColor1) ||
- (current->hwTexBlendAlpha1 != prev->hwTexBlendAlpha1) ||
- (current->hwTexEnvColor != prev->hwTexEnvColor))
- {
- prev->hwTexBlendColor1 = current->hwTexBlendColor1;
- prev->hwTexBlendAlpha1 = current->hwTexBlendAlpha1;
- prev->hwTexEnvColor = current->hwTexEnvColor;
- smesa->GlobalFlag |= GFLAG_TEXTUREENV_1;
- }
- } else {
- current->hwTexBlendColor0 = STAGE0_C_CF;
- current->hwTexBlendAlpha0 = STAGE0_A_AF;
-
- if ((current->hwTexBlendColor0 != prev->hwTexBlendColor0) ||
- (current->hwTexBlendAlpha0 != prev->hwTexBlendAlpha0) ||
- (current->hwTexEnvColor != prev->hwTexEnvColor))
- {
- prev->hwTexBlendColor0 = current->hwTexBlendColor0;
- prev->hwTexBlendAlpha0 = current->hwTexBlendAlpha0;
- prev->hwTexEnvColor = current->hwTexEnvColor;
- smesa->GlobalFlag |= GFLAG_TEXTUREENV;
- }
- }
-}
-
-static void updateTextureUnit( struct gl_context *ctx, int unit )
-{
- sisContextPtr smesa = SIS_CONTEXT( ctx );
- const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
- struct gl_texture_object *texObj = texUnit->_Current;
- GLint fallbackbit;
-
- if (unit == 0)
- fallbackbit = SIS_FALLBACK_TEXTURE0;
- else
- fallbackbit = SIS_FALLBACK_TEXTURE1;
-
- if (texUnit->_ReallyEnabled & (TEXTURE_1D_BIT | TEXTURE_2D_BIT)) {
- if (smesa->TexStates[unit] & NEW_TEXTURING) {
- GLboolean ok;
-
- ok = sis_set_texobj_parm (ctx, texObj, unit);
- FALLBACK( smesa, fallbackbit, !ok );
- }
- if (smesa->TexStates[unit] & NEW_TEXTURE_ENV) {
- if (unit == 0)
- sis_set_texture_env0( ctx, texObj, unit );
- else
- sis_set_texture_env1( ctx, texObj, unit );
- }
- smesa->TexStates[unit] = 0;
- } else if ( texUnit->_ReallyEnabled ) {
- /* fallback */
- FALLBACK( smesa, fallbackbit, 1 );
- } else {
- sis_reset_texture_env( ctx, unit );
- FALLBACK( smesa, fallbackbit, 0 );
- }
-}
-
-
-void sisUpdateTextureState( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT( ctx );
- int i;
- __GLSiSHardware *current = &smesa->current;
-
-#if 1
- /* TODO : if unmark these, error in multitexture */ /* XXX */
- for (i = 0; i < SIS_MAX_TEXTURES; i++)
- smesa->TexStates[i] |= (NEW_TEXTURING | NEW_TEXTURE_ENV);
-#endif
-
- updateTextureUnit( ctx, 0 );
- updateTextureUnit( ctx, 1 );
-
- /* XXX Issues with the 2nd unit but not the first being enabled? */
- if ( ctx->Texture.Unit[0]._ReallyEnabled &
- (TEXTURE_1D_BIT | TEXTURE_2D_BIT) ||
- ctx->Texture.Unit[1]._ReallyEnabled &
- (TEXTURE_1D_BIT | TEXTURE_2D_BIT) )
- {
- current->hwCapEnable |= MASK_TextureEnable;
- current->hwCapEnable &= ~MASK_TextureNumUsed;
- if (ctx->Texture.Unit[1]._ReallyEnabled)
- current->hwCapEnable |= 0x00002000;
- else
- current->hwCapEnable |= 0x00001000;
- } else {
- current->hwCapEnable &= ~MASK_TextureEnable;
- }
-}
-
-static GLint
-BitScanForward( GLshort w )
-{
- GLint i;
-
- for (i = 0; i < 16; i++) {
- if (w & (1 << i))
- break;
- }
- return i;
-}
-
-static GLint
-TransferTexturePitch( GLint dwPitch )
-{
- GLint dwRet, i;
-
- i = BitScanForward( (GLshort)dwPitch );
- dwRet = dwPitch >> i;
- dwRet |= i << 9;
- return dwRet;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_tris.c b/src/mesa/drivers/dri/sis/sis_tris.c
deleted file mode 100644
index 8db593fb9c7..00000000000
--- a/src/mesa/drivers/dri/sis/sis_tris.c
+++ /dev/null
@@ -1,1154 +0,0 @@
-/* $XFree86*/ /* -*- c-basic-offset: 3 -*- */
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin
- * Eric Anholt
- */
-
-#include "main/glheader.h"
-#include "main/mtypes.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-
-#include "swrast/swrast.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-
-#include "sis_context.h"
-#include "sis_tris.h"
-#include "sis_state.h"
-#include "sis_lock.h"
-#include "sis_span.h"
-#include "sis_tex.h"
-
-/* 6326 and 300-series shared */
-static const GLuint hw_prim[GL_POLYGON+1] = {
- OP_3D_POINT_DRAW, /* GL_POINTS */
- OP_3D_LINE_DRAW, /* GL_LINES */
- OP_3D_LINE_DRAW, /* GL_LINE_LOOP */
- OP_3D_LINE_DRAW, /* GL_LINE_STRIP */
- OP_3D_TRIANGLE_DRAW, /* GL_TRIANGLES */
- OP_3D_TRIANGLE_DRAW, /* GL_TRIANGLE_STRIP */
- OP_3D_TRIANGLE_DRAW, /* GL_TRIANGLE_FAN */
- OP_3D_TRIANGLE_DRAW, /* GL_QUADS */
- OP_3D_TRIANGLE_DRAW, /* GL_QUAD_STRIP */
- OP_3D_TRIANGLE_DRAW /* GL_POLYGON */
-};
-
-static const GLuint hw_prim_mmio_fire[OP_3D_TRIANGLE_DRAW+1] = {
- OP_3D_FIRE_TSARGBa,
- OP_3D_FIRE_TSARGBb,
- OP_3D_FIRE_TSARGBc
-};
-static const GLuint hw_prim_6326_mmio_fire[OP_3D_TRIANGLE_DRAW+1] = {
- OP_6326_3D_FIRE_TSARGBa,
- OP_6326_3D_FIRE_TSARGBb,
- OP_6326_3D_FIRE_TSARGBc
-};
-
-static const GLuint hw_prim_mmio_shade[OP_3D_TRIANGLE_DRAW+1] = {
- SHADE_FLAT_VertexA,
- SHADE_FLAT_VertexB,
- SHADE_FLAT_VertexC
-};
-
-static const GLuint hw_prim_agp_type[OP_3D_TRIANGLE_DRAW+1] = {
- MASK_PsPointList,
- MASK_PsLineList,
- MASK_PsTriangleList
-};
-
-static const GLuint hw_prim_agp_shade[OP_3D_TRIANGLE_DRAW+1] = {
- MASK_PsShadingFlatA,
- MASK_PsShadingFlatB,
- MASK_PsShadingFlatC
-};
-
-static void sisRasterPrimitive( struct gl_context *ctx, GLuint hwprim );
-static void sisRenderPrimitive( struct gl_context *ctx, GLenum prim );
-
-/***********************************************************************
- * Emit primitives as inline vertices *
- ***********************************************************************/
-
-#define HAVE_QUADS 0
-#define HAVE_LINES 1
-#define HAVE_POINTS 1
-#define CTX_ARG sisContextPtr smesa
-#define GET_VERTEX_DWORDS() smesa->vertex_size
-#define ALLOC_VERTS( n, size ) sisAllocDmaLow( smesa, n * size * sizeof(int) )
-#undef LOCAL_VARS
-#define LOCAL_VARS \
- sisContextPtr smesa = SIS_CONTEXT(ctx); \
- const char *vertptr = smesa->verts;
-#define VERT(x) (sisVertex *)(vertptr + (x * vertsize * sizeof(int)))
-#define VERTEX sisVertex
-#undef TAG
-#define TAG(x) sis_##x
-#include "tnl_dd/t_dd_triemit.h"
-#undef TAG
-#undef LOCAL_VARS
-
-/***********************************************************************
- * Dispatch vertices to hardware through MMIO *
- ***********************************************************************/
-
-/* The ARGB write of the last vertex of the primitive fires the 3d engine, so
- * save it until the end.
- */
-#define SIS_MMIO_WRITE_VERTEX(_v, i, lastvert) \
-do { \
- GLuint __color, __i = 0; \
- MMIO(REG_3D_TSXa+(i)*0x30, _v->ui[__i++]); \
- MMIO(REG_3D_TSYa+(i)*0x30, _v->ui[__i++]); \
- MMIO(REG_3D_TSZa+(i)*0x30, _v->ui[__i++]); \
- if (SIS_STATES & VERT_W) \
- MMIO(REG_3D_TSWGa+(i)*0x30, _v->ui[__i++]); \
- __color = _v->ui[__i++]; \
- if (SIS_STATES & VERT_SPEC) \
- MMIO(REG_3D_TSFSa+(i)*0x30, _v->ui[__i++]); \
- if (SIS_STATES & VERT_UV0) { \
- MMIO(REG_3D_TSUAa+(i)*0x30, _v->ui[__i++]); \
- MMIO(REG_3D_TSVAa+(i)*0x30, _v->ui[__i++]); \
- } \
- if (SIS_STATES & VERT_UV1) { \
- MMIO(REG_3D_TSUBa+(i)*0x30, _v->ui[__i++]); \
- MMIO(REG_3D_TSVBa+(i)*0x30, _v->ui[__i++]); \
- } \
- if (lastvert || (SIS_STATES & VERT_SMOOTH)) \
- MMIO(REG_3D_TSARGBa+(i)*0x30, __color); \
-} while (0)
-
-#define SIS6326_MMIO_WRITE_VERTEX(_v, i, lastvert) \
-do { \
- GLuint __color, __i = 0; \
- MMIO(REG_6326_3D_TSXa+(i)*0x20, _v->ui[__i++]); \
- MMIO(REG_6326_3D_TSYa+(i)*0x20, _v->ui[__i++]); \
- MMIO(REG_6326_3D_TSZa+(i)*0x20, _v->ui[__i++]); \
- if (SIS_STATES & VERT_W) \
- MMIO(REG_6326_3D_TSWa+(i)*0x20, _v->ui[__i++]); \
- __color = _v->ui[__i++]; \
- if (SIS_STATES & VERT_SPEC) \
- MMIO(REG_6326_3D_TSFSa+(i)*0x20, _v->ui[__i++]); \
- if (SIS_STATES & VERT_UV0) { \
- MMIO(REG_6326_3D_TSUa+(i)*0x20, _v->ui[__i++]); \
- MMIO(REG_6326_3D_TSVa+(i)*0x20, _v->ui[__i++]); \
- } \
- if (lastvert || (SIS_STATES & VERT_SMOOTH)) \
- MMIO(REG_6326_3D_TSARGBa+(i)*0x30, __color); \
-} while (0)
-
-#define MMIO_VERT_REG_COUNT 10
-
-#define VERT_SMOOTH 0x01
-#define VERT_W 0x02
-#define VERT_SPEC 0x04
-#define VERT_UV0 0x08
-#define VERT_UV1 0x10
-#define VERT_6326 0x20 /* Right after UV1, but won't have a UV1 set */
-
-typedef void (*mmio_draw_func)(sisContextPtr smesa, char *verts);
-static mmio_draw_func sis_tri_func_mmio[48];
-static mmio_draw_func sis_line_func_mmio[48];
-static mmio_draw_func sis_point_func_mmio[48];
-
-#define SIS_STATES (0)
-#define TAG(x) x##_none
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH)
-#define TAG(x) x##_g
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_W)
-#define TAG(x) x##_w
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_W)
-#define TAG(x) x##_gw
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SPEC)
-#define TAG(x) x##_s
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_SPEC)
-#define TAG(x) x##_gs
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_W | VERT_SPEC)
-#define TAG(x) x##_ws
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_W | VERT_SPEC)
-#define TAG(x) x##_gws
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_UV0)
-#define TAG(x) x##_t0
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_UV0)
-#define TAG(x) x##_gt0
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_W | VERT_UV0)
-#define TAG(x) x##_wt0
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_W | VERT_UV0)
-#define TAG(x) x##_gwt0
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SPEC | VERT_UV0)
-#define TAG(x) x##_st0
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_SPEC | VERT_UV0)
-#define TAG(x) x##_gst0
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_W | VERT_SPEC | VERT_UV0)
-#define TAG(x) x##_wst0
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_W | VERT_SPEC | VERT_UV0)
-#define TAG(x) x##_gwst0
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_UV1)
-#define TAG(x) x##_t1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_UV1)
-#define TAG(x) x##_gt1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_W | VERT_UV1)
-#define TAG(x) x##_wt1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_W | VERT_UV1)
-#define TAG(x) x##_gwt1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SPEC | VERT_UV1)
-#define TAG(x) x##_st1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_SPEC | VERT_UV1)
-#define TAG(x) x##_gst1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_W | VERT_SPEC | VERT_UV1)
-#define TAG(x) x##_wst1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_W | VERT_SPEC | VERT_UV1)
-#define TAG(x) x##_gwst1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_UV0 | VERT_UV1)
-#define TAG(x) x##_t0t1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_UV0 | VERT_UV1)
-#define TAG(x) x##_gt0t1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_W | VERT_UV0 | VERT_UV1)
-#define TAG(x) x##_wt0t1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_W | VERT_UV0 | VERT_UV1)
-#define TAG(x) x##_gwt0t1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SPEC | VERT_UV0 | VERT_UV1)
-#define TAG(x) x##_st0t1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_SPEC | VERT_UV0 | VERT_UV1)
-#define TAG(x) x##_gst0t1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_W | VERT_SPEC | VERT_UV0 | VERT_UV1)
-#define TAG(x) x##_wst0t1
-#include "sis_tritmp.h"
-
-#define SIS_STATES (VERT_SMOOTH | VERT_W | VERT_SPEC | VERT_UV0 | VERT_UV1)
-#define TAG(x) x##_gwst0t1
-#include "sis_tritmp.h"
-
-/***********************************************************************
- * Macros for t_dd_tritmp.h to draw basic primitives *
- ***********************************************************************/
-
-#define TRI( a, b, c ) \
-do { \
- if (DO_FALLBACK) \
- smesa->draw_tri( smesa, a, b, c ); \
- else \
- sis_triangle( smesa, a, b, c ); \
-} while (0)
-
-#define QUAD( a, b, c, d ) \
-do { \
- if (DO_FALLBACK) { \
- smesa->draw_tri( smesa, a, b, d ); \
- smesa->draw_tri( smesa, b, c, d ); \
- } else \
- sis_quad( smesa, a, b, c, d ); \
-} while (0)
-
-#define LINE( v0, v1 ) \
-do { \
- if (DO_FALLBACK) \
- smesa->draw_line( smesa, v0, v1 ); \
- else \
- sis_line( smesa, v0, v1 ); \
-} while (0)
-
-#define POINT( v0 ) \
-do { \
- if (DO_FALLBACK) \
- smesa->draw_point( smesa, v0 ); \
- else \
- sis_point( smesa, v0 ); \
-} while (0)
-
-/***********************************************************************
- * Build render functions from dd templates *
- ***********************************************************************/
-
-#define SIS_OFFSET_BIT 0x01
-#define SIS_TWOSIDE_BIT 0x02
-#define SIS_UNFILLED_BIT 0x04
-#define SIS_FALLBACK_BIT 0x08
-#define SIS_MAX_TRIFUNC 0x10
-
-
-static struct {
- tnl_points_func points;
- tnl_line_func line;
- tnl_triangle_func triangle;
- tnl_quad_func quad;
-} rast_tab[SIS_MAX_TRIFUNC];
-
-
-#define DO_FALLBACK (IND & SIS_FALLBACK_BIT)
-#define DO_OFFSET (IND & SIS_OFFSET_BIT)
-#define DO_UNFILLED (IND & SIS_UNFILLED_BIT)
-#define DO_TWOSIDE (IND & SIS_TWOSIDE_BIT)
-#define DO_FLAT 0
-#define DO_TRI 1
-#define DO_QUAD 1
-#define DO_LINE 1
-#define DO_POINTS 1
-#define DO_FULL_QUAD 1
-
-#define HAVE_SPEC 1
-#define HAVE_BACK_COLORS 0
-#define HAVE_HW_FLATSHADE 1
-#define VERTEX sisVertex
-#define TAB rast_tab
-
-#define DEPTH_SCALE smesa->depth_scale
-#define UNFILLED_TRI unfilled_tri
-#define UNFILLED_QUAD unfilled_quad
-#define VERT_X(_v) _v->v.x
-#define VERT_Y(_v) _v->v.y
-#define VERT_Z(_v) _v->v.z
-#define AREA_IS_CCW( a ) (a > 0)
-#define GET_VERTEX(e) (smesa->verts + (e * smesa->vertex_size * sizeof(int)))
-
-#define VERT_SET_RGBA( v, c ) \
-do { \
- sis_color_t *color = (sis_color_t *)&((v)->ui[coloroffset]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->blue, (c)[2]); \
- UNCLAMPED_FLOAT_TO_UBYTE(color->alpha, (c)[3]); \
-} while (0)
-
-#define VERT_COPY_RGBA( v0, v1 ) v0->ui[coloroffset] = v1->ui[coloroffset]
-
-#define VERT_SET_SPEC( v, c ) \
-do { \
- if (specoffset != 0) { \
- sis_color_t *spec = (sis_color_t *)&((v)->ui[specoffset]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->red, (c)[0]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->green, (c)[1]); \
- UNCLAMPED_FLOAT_TO_UBYTE(spec->blue, (c)[2]); \
- } \
-} while (0)
-#define VERT_COPY_SPEC( v0, v1 ) \
-do { \
- if (specoffset != 0) { \
- sis_color_t *spec0 = (sis_color_t *)&((v0)->ui[specoffset]); \
- sis_color_t *spec1 = (sis_color_t *)&((v1)->ui[specoffset]); \
- spec0->red = spec1->red; \
- spec0->green = spec1->green; \
- spec0->blue = spec1->blue; \
- } \
-} while (0)
-
-#define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[coloroffset]
-#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[coloroffset] = color[idx]
-#define VERT_SAVE_SPEC( idx ) if (specoffset != 0) spec[idx] = v[idx]->ui[specoffset]
-#define VERT_RESTORE_SPEC( idx ) if (specoffset != 0) v[idx]->ui[specoffset] = spec[idx]
-
-#define LOCAL_VARS(n) \
- sisContextPtr smesa = SIS_CONTEXT(ctx); \
- GLuint color[n] = { 0 }; \
- GLuint spec[n] = { 0 }; \
- GLuint coloroffset = smesa->coloroffset; \
- GLuint specoffset = smesa->specoffset; \
- (void) color; (void) spec; (void) coloroffset; (void) specoffset;
-
-/***********************************************************************
- * Helpers for rendering unfilled primitives *
- ***********************************************************************/
-
-#define RASTERIZE(x) if (smesa->hw_primitive != hw_prim[x]) \
- sisRasterPrimitive( ctx, hw_prim[x] )
-#define RENDER_PRIMITIVE smesa->render_primitive
-#define IND SIS_FALLBACK_BIT
-#define TAG(x) x
-#include "tnl_dd/t_dd_unfilled.h"
-#undef IND
-
-
-/***********************************************************************
- * Generate GL render functions *
- ***********************************************************************/
-
-
-#define IND (0)
-#define TAG(x) x
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_OFFSET_BIT)
-#define TAG(x) x##_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_TWOSIDE_BIT)
-#define TAG(x) x##_twoside
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_TWOSIDE_BIT|SIS_OFFSET_BIT)
-#define TAG(x) x##_twoside_offset
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_UNFILLED_BIT)
-#define TAG(x) x##_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_OFFSET_BIT|SIS_UNFILLED_BIT)
-#define TAG(x) x##_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_TWOSIDE_BIT|SIS_UNFILLED_BIT)
-#define TAG(x) x##_twoside_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_TWOSIDE_BIT|SIS_OFFSET_BIT|SIS_UNFILLED_BIT)
-#define TAG(x) x##_twoside_offset_unfilled
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_FALLBACK_BIT)
-#define TAG(x) x##_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_OFFSET_BIT|SIS_FALLBACK_BIT)
-#define TAG(x) x##_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_TWOSIDE_BIT|SIS_FALLBACK_BIT)
-#define TAG(x) x##_twoside_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_TWOSIDE_BIT|SIS_OFFSET_BIT|SIS_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_UNFILLED_BIT|SIS_FALLBACK_BIT)
-#define TAG(x) x##_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_OFFSET_BIT|SIS_UNFILLED_BIT|SIS_FALLBACK_BIT)
-#define TAG(x) x##_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_TWOSIDE_BIT|SIS_UNFILLED_BIT|SIS_FALLBACK_BIT)
-#define TAG(x) x##_twoside_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-#define IND (SIS_TWOSIDE_BIT|SIS_OFFSET_BIT|SIS_UNFILLED_BIT| \
- SIS_FALLBACK_BIT)
-#define TAG(x) x##_twoside_offset_unfilled_fallback
-#include "tnl_dd/t_dd_tritmp.h"
-
-
-static void init_rast_tab( void )
-{
- init();
- init_offset();
- init_twoside();
- init_twoside_offset();
- init_unfilled();
- init_offset_unfilled();
- init_twoside_unfilled();
- init_twoside_offset_unfilled();
- init_fallback();
- init_offset_fallback();
- init_twoside_fallback();
- init_twoside_offset_fallback();
- init_unfilled_fallback();
- init_offset_unfilled_fallback();
- init_twoside_unfilled_fallback();
- init_twoside_offset_unfilled_fallback();
-}
-
-
-
-/***********************************************************************
- * Rasterization fallback helpers *
- ***********************************************************************/
-
-
-/* This code is hit only when a mix of accelerated and unaccelerated
- * primitives are being drawn, and only for the unaccelerated
- * primitives.
- */
-
-static void
-sis_fallback_tri( sisContextPtr smesa,
- sisVertex *v0,
- sisVertex *v1,
- sisVertex *v2 )
-{
- struct gl_context *ctx = smesa->glCtx;
- SWvertex v[3];
- _swsetup_Translate( ctx, v0, &v[0] );
- _swsetup_Translate( ctx, v1, &v[1] );
- _swsetup_Translate( ctx, v2, &v[2] );
- sisSpanRenderStart( ctx );
- _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
- sisSpanRenderFinish( ctx );
- _swrast_flush( ctx );
-}
-
-
-static void
-sis_fallback_line( sisContextPtr smesa,
- sisVertex *v0,
- sisVertex *v1 )
-{
- struct gl_context *ctx = smesa->glCtx;
- SWvertex v[2];
- _swsetup_Translate( ctx, v0, &v[0] );
- _swsetup_Translate( ctx, v1, &v[1] );
- sisSpanRenderStart( ctx );
- _swrast_Line( ctx, &v[0], &v[1] );
- sisSpanRenderFinish( ctx );
- _swrast_flush( ctx );
-}
-
-
-static void
-sis_fallback_point( sisContextPtr smesa,
- sisVertex *v0 )
-{
- struct gl_context *ctx = smesa->glCtx;
- SWvertex v[1];
- _swsetup_Translate( ctx, v0, &v[0] );
- sisSpanRenderStart( ctx );
- _swrast_Point( ctx, &v[0] );
- sisSpanRenderFinish( ctx );
- _swrast_flush( ctx );
-}
-
-
-
-/**********************************************************************/
-/* Render unclipped begin/end objects */
-/**********************************************************************/
-
-#define IND 0
-#define V(x) (sisVertex *)(vertptr + (x * vertsize * sizeof(int)))
-#define RENDER_POINTS( start, count ) \
- for ( ; start < count ; start++) \
- POINT( V(ELT(start)) )
-#define RENDER_LINE( v0, v1 ) LINE( V(v0), V(v1) )
-#define RENDER_TRI( v0, v1, v2 ) TRI( V(v0), V(v1), V(v2) )
-#define RENDER_QUAD( v0, v1, v2, v3 ) QUAD( V(v0), V(v1), V(v2), V(v3) )
-#define INIT(x) sisRenderPrimitive( ctx, x )
-#undef LOCAL_VARS
-#define LOCAL_VARS \
- sisContextPtr smesa = SIS_CONTEXT(ctx); \
- const GLuint vertsize = smesa->vertex_size; \
- const char *vertptr = (char *)smesa->verts; \
- const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
- (void) elt;
-#define RESET_STIPPLE
-#define RESET_OCCLUSION
-#define PRESERVE_VB_DEFS
-#define ELT(x) (x)
-#define TAG(x) sis_##x##_verts
-#include "tnl/t_vb_rendertmp.h"
-#undef ELT
-#undef TAG
-#define TAG(x) sis_##x##_elts
-#define ELT(x) elt[x]
-#include "tnl/t_vb_rendertmp.h"
-
-
-/**********************************************************************/
-/* Choose render functions */
-/**********************************************************************/
-
-#define POINT_FALLBACK (DD_POINT_SMOOTH)
-#define LINE_FALLBACK (DD_LINE_STIPPLE|DD_LINE_SMOOTH)
-#define TRI_FALLBACK (DD_TRI_STIPPLE|DD_TRI_SMOOTH)
-#define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)
-#define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
-#define _SIS_NEW_RENDER_STATE (ANY_RASTER_FLAGS | ANY_FALLBACK_FLAGS)
-
-static void sisChooseRenderState(struct gl_context *ctx)
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- sisContextPtr smesa = SIS_CONTEXT( ctx );
- GLuint flags = ctx->_TriangleCaps;
- GLuint index = 0;
-
- if (smesa->Fallback)
- return;
-
- if (flags & (ANY_RASTER_FLAGS|ANY_FALLBACK_FLAGS)) {
-
- if (flags & ANY_RASTER_FLAGS) {
- if (flags & DD_TRI_LIGHT_TWOSIDE) index |= SIS_TWOSIDE_BIT;
- if (flags & DD_TRI_OFFSET) index |= SIS_OFFSET_BIT;
- if (flags & DD_TRI_UNFILLED) index |= SIS_UNFILLED_BIT;
- }
-
- smesa->draw_point = sis_point;
- smesa->draw_line = sis_line;
- smesa->draw_tri = sis_triangle;
- /* Hook in fallbacks for specific primitives.
- */
- if (flags & ANY_FALLBACK_FLAGS) {
- if (flags & POINT_FALLBACK)
- smesa->draw_point = sis_fallback_point;
- if (flags & LINE_FALLBACK)
- smesa->draw_line = sis_fallback_line;
- if (flags & TRI_FALLBACK)
- smesa->draw_tri = sis_fallback_tri;
- index |= SIS_FALLBACK_BIT;
- }
- }
-
- if (index != smesa->RenderIndex) {
- smesa->RenderIndex = index;
-
- tnl->Driver.Render.Points = rast_tab[index].points;
- tnl->Driver.Render.Line = rast_tab[index].line;
- tnl->Driver.Render.ClippedLine = rast_tab[index].line;
- tnl->Driver.Render.Triangle = rast_tab[index].triangle;
- tnl->Driver.Render.Quad = rast_tab[index].quad;
-
- if (index == 0) {
- tnl->Driver.Render.PrimTabVerts = sis_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = sis_render_tab_elts;
- tnl->Driver.Render.ClippedPolygon = sis_fast_clipped_poly;
- } else {
- tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
- tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
- tnl->Driver.Render.ClippedPolygon = _tnl_RenderClippedPolygon;
- }
- }
-}
-
-/**********************************************************************/
-/* Multipass rendering for front buffering */
-/**********************************************************************/
-static GLboolean multipass_cliprect( struct gl_context *ctx, GLuint pass )
-{
- sisContextPtr smesa = SIS_CONTEXT( ctx );
-
- if (pass >= smesa->driDrawable->numClipRects) {
- return GL_FALSE;
- } else {
- GLint x1, y1, x2, y2;
-
- x1 = smesa->driDrawable->pClipRects[pass].x1 - smesa->driDrawable->x;
- y1 = smesa->driDrawable->pClipRects[pass].y1 - smesa->driDrawable->y;
- x2 = smesa->driDrawable->pClipRects[pass].x2 - smesa->driDrawable->x;
- y2 = smesa->driDrawable->pClipRects[pass].y2 - smesa->driDrawable->y;
-
- if (ctx->Scissor.Enabled) {
- GLint scisy1 = Y_FLIP(ctx->Scissor.Y + ctx->Scissor.Height - 1);
- GLint scisy2 = Y_FLIP(ctx->Scissor.Y);
-
- if (ctx->Scissor.X > x1)
- x1 = ctx->Scissor.X;
- if (scisy1 > y1)
- y1 = scisy1;
- if (ctx->Scissor.X + ctx->Scissor.Width - 1 < x2)
- x2 = ctx->Scissor.X + ctx->Scissor.Width - 1;
- if (scisy2 < y2)
- y2 = scisy2;
- }
-
- MMIO(REG_3D_ClipTopBottom, y1 << 13 | y2);
- MMIO(REG_3D_ClipLeftRight, x1 << 13 | x2);
- /* Mark that we clobbered these registers */
- smesa->GlobalFlag |= GFLAG_CLIPPING;
- return GL_TRUE;
- }
-}
-
-
-
-/**********************************************************************/
-/* Validate state at pipeline start */
-/**********************************************************************/
-
-static void sisRunPipeline( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT( ctx );
-
- if (smesa->NewGLState) {
- SIS_FIREVERTICES(smesa);
- if (smesa->NewGLState & _NEW_TEXTURE) {
- sisUpdateTextureState(ctx);
- }
-
- if (smesa->NewGLState & _SIS_NEW_RENDER_STATE)
- sisChooseRenderState( ctx );
-
- smesa->NewGLState = 0;
- }
-
- _tnl_run_pipeline( ctx );
-
- /* XXX: If we put flushing in sis_state.c and friends, we can avoid this.
- * Is it worth it?
- */
- SIS_FIREVERTICES(smesa);
-}
-
-/**********************************************************************/
-/* High level hooks for t_vb_render.c */
-/**********************************************************************/
-
-/* This is called when Mesa switches between rendering triangle
- * primitives (such as GL_POLYGON, GL_QUADS, GL_TRIANGLE_STRIP, etc),
- * and lines, points and bitmaps.
- */
-
-static void sisRasterPrimitive( struct gl_context *ctx, GLuint hwprim )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- if (smesa->hw_primitive != hwprim) {
- SIS_FIREVERTICES(smesa);
- smesa->hw_primitive = hwprim;
-
- smesa->AGPParseSet &= ~(MASK_PsDataType | MASK_PsShadingMode);
- smesa->AGPParseSet |= hw_prim_agp_type[hwprim];
-
- if (smesa->is6326) {
- smesa->dwPrimitiveSet &= ~(MASK_6326_DrawPrimitiveCommand |
- MASK_6326_SetFirePosition | MASK_6326_ShadingMode);
- smesa->dwPrimitiveSet |= hwprim | hw_prim_6326_mmio_fire[hwprim];
- } else {
- smesa->dwPrimitiveSet &= ~(MASK_DrawPrimitiveCommand |
- MASK_SetFirePosition | MASK_ShadingMode);
- smesa->dwPrimitiveSet |= hwprim | hw_prim_mmio_fire[hwprim];
- }
-
- if (ctx->Light.ShadeModel == GL_FLAT) {
- smesa->AGPParseSet |= hw_prim_agp_shade[hwprim];
- smesa->dwPrimitiveSet |= hw_prim_mmio_shade[hwprim];
- } else {
- smesa->AGPParseSet |= MASK_PsShadingSmooth;
- if (smesa->is6326) {
- smesa->dwPrimitiveSet |= OP_6326_3D_SHADE_FLAT_GOURAUD;
- } else {
- smesa->dwPrimitiveSet |= SHADE_GOURAUD;
- }
- }
- }
-}
-
-static void sisRenderPrimitive( struct gl_context *ctx, GLenum prim )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
-
- smesa->render_primitive = prim;
-
- if (prim >= GL_TRIANGLES && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
- return;
- sisRasterPrimitive( ctx, hw_prim[prim] );
-}
-
-#define EMIT_ATTR( ATTR, STYLE) \
-do { \
- smesa->vertex_attrs[smesa->vertex_attr_count].attrib = (ATTR); \
- smesa->vertex_attrs[smesa->vertex_attr_count].format = (STYLE); \
- smesa->vertex_attr_count++; \
-} while (0)
-
-#define EMIT_PAD( N ) \
-do { \
- smesa->vertex_attrs[smesa->vertex_attr_count].attrib = 0; \
- smesa->vertex_attrs[smesa->vertex_attr_count].format = EMIT_PAD; \
- smesa->vertex_attrs[smesa->vertex_attr_count].offset = (N); \
- smesa->vertex_attr_count++; \
-} while (0)
-
-static void sisRenderStart( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- struct vertex_buffer *VB = &tnl->vb;
- DECLARE_RENDERINPUTS(index_bitset);
- GLuint AGPParseSet = smesa->AGPParseSet;
- GLboolean tex_fallback = GL_FALSE;
-
- RENDERINPUTS_COPY( index_bitset, tnl->render_inputs_bitset );
-
- if (ctx->DrawBuffer->_ColorDrawBufferIndexes[0] == BUFFER_FRONT_LEFT &&
- smesa->driDrawable->numClipRects != 0)
- {
- multipass_cliprect(ctx, 0);
- if (smesa->driDrawable->numClipRects > 1)
- tnl->Driver.Render.Multipass = multipass_cliprect;
- else
- tnl->Driver.Render.Multipass = NULL;
- } else {
- tnl->Driver.Render.Multipass = NULL;
- }
-
- /* Important:
- */
- VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr;
- smesa->vertex_attr_count = 0;
-
- /* EMIT_ATTR's must be in order as they tell t_vertex.c how to build up a
- * hardware vertex.
- */
-
- AGPParseSet &= ~(MASK_VertexDWSize | MASK_VertexDataFormat);
- AGPParseSet |= SiS_PS_HAS_XYZ | SiS_PS_HAS_DIFFUSE;
- if (RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_FIRST_TEX, _TNL_LAST_TEX )) {
- EMIT_ATTR(_TNL_ATTRIB_POS, EMIT_4F_VIEWPORT);
- AGPParseSet |= SiS_PS_HAS_W;
- smesa->coloroffset = 4;
- } else {
- EMIT_ATTR(_TNL_ATTRIB_POS, EMIT_3F_VIEWPORT);
- smesa->coloroffset = 3;
- }
-
- EMIT_ATTR(_TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA);
-
- smesa->specoffset = 0;
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR1 ) ||
- RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_FOG )) {
- AGPParseSet |= SiS_PS_HAS_SPECULAR;
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR1 )) {
- EMIT_ATTR(_TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR);
- smesa->specoffset = smesa->coloroffset + 1;
- } else {
- EMIT_PAD(3);
- }
-
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_FOG )) {
- EMIT_ATTR(_TNL_ATTRIB_FOG, EMIT_1UB_1F);
- } else {
- EMIT_PAD(1);
- }
- }
-
- /* projective textures are not supported by the hardware */
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX0 )) {
- if (VB->AttribPtr[_TNL_ATTRIB_TEX0]->size > 2)
- tex_fallback = GL_TRUE;
- EMIT_ATTR(_TNL_ATTRIB_TEX0, EMIT_2F);
- AGPParseSet |= SiS_PS_HAS_UV0;
- }
- /* Will only hit tex1 on SiS300 */
- if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX1 )) {
- if (VB->AttribPtr[_TNL_ATTRIB_TEX1]->size > 2)
- tex_fallback = GL_TRUE;
- EMIT_ATTR(_TNL_ATTRIB_TEX1, EMIT_2F);
- AGPParseSet |= SiS_PS_HAS_UV1;
- }
- FALLBACK(smesa, SIS_FALLBACK_TEXTURE, tex_fallback);
-
- if (!RENDERINPUTS_EQUAL( smesa->last_tcl_state_bitset, index_bitset )) {
- smesa->AGPParseSet = AGPParseSet;
-
- smesa->vertex_size = _tnl_install_attrs( ctx, smesa->vertex_attrs,
- smesa->vertex_attr_count, smesa->hw_viewport, 0 );
-
- smesa->vertex_size >>= 2;
- smesa->AGPParseSet |= smesa->vertex_size << 28;
- }
-}
-
-static void sisRenderFinish( struct gl_context *ctx )
-{
-}
-
-/**********************************************************************/
-/* AGP/PCI vertex submission */
-/**********************************************************************/
-
-void
-sisFlushPrimsLocked(sisContextPtr smesa)
-{
- if (smesa->vb_cur == smesa->vb_last)
- return;
-
- if (smesa->is6326)
- sis6326UpdateHWState(smesa->glCtx);
- else
- sisUpdateHWState(smesa->glCtx);
-
- if (smesa->using_agp) {
- mWait3DCmdQueue(8);
- mEndPrimitive();
- MMIO(REG_3D_AGPCmBase, (smesa->vb_last - smesa->vb) +
- smesa->vb_agp_offset);
- MMIO(REG_3D_AGPTtDwNum, ((smesa->vb_cur - smesa->vb_last) / 4) |
- 0x50000000);
- MMIO(REG_3D_ParsingSet, smesa->AGPParseSet);
- MMIO(REG_3D_AGPCmFire, (GLint)(-1));
- mEndPrimitive();
- } else {
- int mmio_index = 0, incr = 0;
- void (*sis_emit_func)(sisContextPtr smesa, char *verts) = NULL;
-
- if (smesa->AGPParseSet & MASK_PsShadingSmooth)
- mmio_index |= VERT_SMOOTH;
- if (smesa->AGPParseSet & SiS_PS_HAS_SPECULAR)
- mmio_index |= VERT_SPEC;
- if (smesa->AGPParseSet & SiS_PS_HAS_W)
- mmio_index |= VERT_W;
- if (smesa->AGPParseSet & SiS_PS_HAS_UV0)
- mmio_index |= VERT_UV0;
- if (smesa->AGPParseSet & SiS_PS_HAS_UV1)
- mmio_index |= VERT_UV1;
- if (smesa->is6326)
- mmio_index |= VERT_6326;
-
- switch (smesa->AGPParseSet & MASK_PsDataType) {
- case MASK_PsPointList:
- incr = smesa->vertex_size * 4;
- sis_emit_func = sis_point_func_mmio[mmio_index];
- break;
- case MASK_PsLineList:
- incr = smesa->vertex_size * 4 * 2;
- sis_emit_func = sis_line_func_mmio[mmio_index];
- break;
- case MASK_PsTriangleList:
- incr = smesa->vertex_size * 4 * 3;
- sis_emit_func = sis_tri_func_mmio[mmio_index];
- break;
- }
-
- if (!smesa->is6326) {
- mWait3DCmdQueue(1);
- MMIO(REG_3D_PrimitiveSet, smesa->dwPrimitiveSet);
- }
- while (smesa->vb_last < smesa->vb_cur) {
- assert(sis_emit_func);
- sis_emit_func(smesa, (char *)smesa->vb_last);
- smesa->vb_last += incr;
- }
- mWait3DCmdQueue(1);
- mEndPrimitive();
-
- /* With PCI, we can just start writing to the start of the VB again. */
- smesa->vb_cur = smesa->vb;
- }
- smesa->vb_last = smesa->vb_cur;
-}
-
-void sisFlushPrims(sisContextPtr smesa)
-{
- LOCK_HARDWARE();
- sisFlushPrimsLocked(smesa);
- UNLOCK_HARDWARE();
-}
-
-/**********************************************************************/
-/* Transition to/from hardware rasterization. */
-/**********************************************************************/
-
-static const char * const fallbackStrings[] = {
- "Texture mode",
- "Texture 0 mode",
- "Texture 1 mode",
- "Texture 0 env", /* Note: unused */
- "Texture 1 env", /* Note: unused */
- "glDrawBuffer(GL_FRONT_AND_BACK)",
- "glEnable(GL_STENCIL) without hw stencil buffer",
- "write mask",
- "no_rast",
-};
-
-static const char *getFallbackString(GLuint bit)
-{
- int i = 0;
- while (bit > 1) {
- i++;
- bit >>= 1;
- }
- return fallbackStrings[i];
-}
-
-void sisFallback( struct gl_context *ctx, GLuint bit, GLboolean mode )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- GLuint oldfallback = smesa->Fallback;
-
- if (mode) {
- smesa->Fallback |= bit;
- if (oldfallback == 0) {
- SIS_FIREVERTICES(smesa);
- _swsetup_Wakeup( ctx );
- smesa->RenderIndex = ~0;
- if (SIS_DEBUG & DEBUG_FALLBACKS) {
- fprintf(stderr, "SiS begin rasterization fallback: 0x%x %s\n",
- bit, getFallbackString(bit));
- }
- }
- }
- else {
- smesa->Fallback &= ~bit;
- if (oldfallback == bit) {
- _swrast_flush( ctx );
- tnl->Driver.Render.Start = sisRenderStart;
- tnl->Driver.Render.PrimitiveNotify = sisRenderPrimitive;
- tnl->Driver.Render.Finish = sisRenderFinish;
-
- tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
- tnl->Driver.Render.CopyPV = _tnl_copy_pv;
- tnl->Driver.Render.Interp = _tnl_interp;
-
- _tnl_invalidate_vertex_state( ctx, ~0 );
- _tnl_invalidate_vertices( ctx, ~0 );
- _tnl_install_attrs( ctx,
- smesa->vertex_attrs,
- smesa->vertex_attr_count,
- smesa->hw_viewport, 0 );
-
- smesa->NewGLState |= _SIS_NEW_RENDER_STATE;
- if (SIS_DEBUG & DEBUG_FALLBACKS) {
- fprintf(stderr, "SiS end rasterization fallback: 0x%x %s\n",
- bit, getFallbackString(bit));
- }
- }
- }
-}
-
-
-/**********************************************************************/
-/* Initialization. */
-/**********************************************************************/
-
-void sisInitTriFuncs( struct gl_context *ctx )
-{
- sisContextPtr smesa = SIS_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- static int firsttime = 1;
-
- if (firsttime) {
- init_rast_tab();
- firsttime = 0;
-
- sis_vert_init_none();
- sis_vert_init_g();
- sis_vert_init_w();
- sis_vert_init_gw();
- sis_vert_init_s();
- sis_vert_init_gs();
- sis_vert_init_ws();
- sis_vert_init_gws();
- sis_vert_init_t0();
- sis_vert_init_gt0();
- sis_vert_init_wt0();
- sis_vert_init_gwt0();
- sis_vert_init_st0();
- sis_vert_init_gst0();
- sis_vert_init_wst0();
- sis_vert_init_gwst0();
- sis_vert_init_t1();
- sis_vert_init_gt1();
- sis_vert_init_wt1();
- sis_vert_init_gwt1();
- sis_vert_init_st1();
- sis_vert_init_gst1();
- sis_vert_init_wst1();
- sis_vert_init_gwst1();
- sis_vert_init_t0t1();
- sis_vert_init_gt0t1();
- sis_vert_init_wt0t1();
- sis_vert_init_gwt0t1();
- sis_vert_init_st0t1();
- sis_vert_init_gst0t1();
- sis_vert_init_wst0t1();
- sis_vert_init_gwst0t1();
- }
-
- smesa->RenderIndex = ~0;
- smesa->NewGLState |= _SIS_NEW_RENDER_STATE;
-
- tnl->Driver.RunPipeline = sisRunPipeline;
- tnl->Driver.Render.Start = sisRenderStart;
- tnl->Driver.Render.Finish = sisRenderFinish;
- tnl->Driver.Render.PrimitiveNotify = sisRenderPrimitive;
- tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
-
- tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
- tnl->Driver.Render.CopyPV = _tnl_copy_pv;
- tnl->Driver.Render.Interp = _tnl_interp;
-
- _tnl_init_vertices( ctx, ctx->Const.MaxArrayLockSize + 12,
- (6 + 2*ctx->Const.MaxTextureUnits) * sizeof(GLfloat) );
-
- smesa->verts = (char *)tnl->clipspace.vertex_buf;
-}
diff --git a/src/mesa/drivers/dri/sis/sis_tris.h b/src/mesa/drivers/dri/sis/sis_tris.h
deleted file mode 100644
index d454090607b..00000000000
--- a/src/mesa/drivers/dri/sis/sis_tris.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/**************************************************************************
-
-Copyright 2003 Eric Anholt
-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
-on 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
-ERIC ANHOLT 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
- */
-
-#ifndef __SIS_TRIS_H__
-#define __SIS_TRIS_H__
-
-#include "sis_lock.h"
-#include "main/mtypes.h"
-
-extern void sisInitTriFuncs( struct gl_context *ctx );
-extern void sisFlushPrims( sisContextPtr smesa );
-extern void sisFlushPrimsLocked( sisContextPtr smesa );
-extern void sisFallback( struct gl_context *ctx, GLuint bit, GLboolean mode );
-
-#define FALLBACK( smesa, bit, mode ) sisFallback( smesa->glCtx, bit, mode )
-
-#define SIS_FIREVERTICES(smesa) \
-do { \
- if (smesa->vb_cur != smesa->vb_last) \
- sisFlushPrims(smesa); \
-} while (0)
-
-static INLINE GLuint *sisAllocDmaLow(sisContextPtr smesa, int bytes)
-{
- GLuint *start;
-
- if (smesa->vb_cur + bytes >= smesa->vb_end) {
- LOCK_HARDWARE();
- sisFlushPrimsLocked(smesa);
- if (smesa->using_agp) {
- WaitEngIdle(smesa);
- smesa->vb_cur = smesa->vb;
- smesa->vb_last = smesa->vb_cur;
- }
- UNLOCK_HARDWARE();
- }
-
- start = (GLuint *)smesa->vb_cur;
- smesa->vb_cur += bytes;
- return start;
-}
-
-#endif /* __SIS_TRIS_H__ */
diff --git a/src/mesa/drivers/dri/sis/sis_tritmp.h b/src/mesa/drivers/dri/sis/sis_tritmp.h
deleted file mode 100644
index f75e17318fc..00000000000
--- a/src/mesa/drivers/dri/sis/sis_tritmp.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/* $XFree86*/ /* -*- c-basic-offset: 3 -*- */
-/*
- * Copyright 2005 Eric Anholt
- * 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, 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
- * Jim Duchek -- Utah GLX 6326 code
- * Alan Cox -- 6326 Debugging
- *
- */
-
-static void TAG(sis_draw_tri_mmio)(sisContextPtr smesa, char *verts)
-{
- sisVertexPtr v0 = (sisVertexPtr)verts;
- sisVertexPtr v1 = (sisVertexPtr)(verts + smesa->vertex_size * 4);
- sisVertexPtr v2 = (sisVertexPtr)(verts + smesa->vertex_size * 4 * 2);
-
- mWait3DCmdQueue (MMIO_VERT_REG_COUNT * 3);
- SIS_MMIO_WRITE_VERTEX(v0, 0, 0);
- SIS_MMIO_WRITE_VERTEX(v1, 1, 0);
- SIS_MMIO_WRITE_VERTEX(v2, 2, 1);
-}
-
-static void TAG(sis_draw_line_mmio)(sisContextPtr smesa, char *verts)
-{
- sisVertexPtr v0 = (sisVertexPtr)verts;
- sisVertexPtr v1 = (sisVertexPtr)(verts + smesa->vertex_size * 4);
-
- mWait3DCmdQueue (MMIO_VERT_REG_COUNT * 2);
- SIS_MMIO_WRITE_VERTEX(v0, 0, 0);
- SIS_MMIO_WRITE_VERTEX(v1, 1, 1);
-}
-
-static void TAG(sis_draw_point_mmio)(sisContextPtr smesa, char *verts)
-{
- sisVertexPtr v0 = (sisVertexPtr)verts;
-
- mWait3DCmdQueue (MMIO_VERT_REG_COUNT * 1);
- SIS_MMIO_WRITE_VERTEX(v0, 1, 1);
-}
-
-#if !(SIS_STATES & VERT_UV1)
-static void TAG(sis6326_draw_tri_mmio)(sisContextPtr smesa, char *verts)
-{
- sisVertexPtr v0 = (sisVertexPtr)verts;
- sisVertexPtr v1 = (sisVertexPtr)(verts + smesa->vertex_size * 4);
- sisVertexPtr v2 = (sisVertexPtr)(verts + smesa->vertex_size * 4 * 2);
- GLfloat x0, x1, x2;
- GLfloat y0, y1, y2;
- GLfloat delt02, diffx02, diffy02, diffy12;
- GLint dwPrimitiveSet = smesa->dwPrimitiveSet;
- sisVertex tv0, tv1, tv2;
-
- /* XXX Culling? */
-
- tv0 = *v0;
- tv1 = *v1;
- tv2 = *v2;
- tv0.v.y = Y_FLIP(tv0.v.y);
- tv1.v.y = Y_FLIP(tv1.v.y);
- tv2.v.y = Y_FLIP(tv2.v.y);
- v0 = &tv0;
- v1 = &tv1;
- v2 = &tv2;
-
- /* Cull polygons we won't draw. The hardware draws funky things if it
- is fed these */
- if((((v1->v.x - v0->v.x) * (v0->v.y - v2->v.y)) +
- ((v1->v.y - v0->v.y) * (v2->v.x - v0->v.x))) < 0)
- return;
- y0 = v0->v.y;
- y1 = v1->v.y;
- y2 = v2->v.y;
-
-
- if (y0 > y1) {
- if (y1 > y2) {
- x0 = v0->v.x;
- x1 = v1->v.x;
- x2 = v2->v.x;
- dwPrimitiveSet |= OP_6326_3D_ATOP | OP_6326_3D_BMID | OP_6326_3D_CBOT;
- if ((SIS_STATES & VERT_SMOOTH) == 0)
- dwPrimitiveSet |= OP_6326_3D_SHADE_FLAT_BOT;
- } else {
- if (y0 > y2) {
- x0 = v0->v.x;
- x1 = v2->v.x;
- y1 = v2->v.y;
- dwPrimitiveSet |= OP_6326_3D_ATOP | OP_6326_3D_CMID |
- OP_6326_3D_BBOT;
- if ((SIS_STATES & VERT_SMOOTH) == 0)
- dwPrimitiveSet |= OP_6326_3D_SHADE_FLAT_MID;
- } else {
- x0 = v2->v.x;
- y0 = v2->v.y;
- x1 = v0->v.x;
- y1 = v0->v.y;
- dwPrimitiveSet |= OP_6326_3D_CTOP | OP_6326_3D_AMID |
- OP_6326_3D_BBOT;
- if ((SIS_STATES & VERT_SMOOTH) == 0)
- dwPrimitiveSet |= OP_6326_3D_SHADE_FLAT_TOP;
- }
- x2 = v1->v.x;
- y2 = v1->v.y;
- }
- } else {
- if (y0 > y2) {
- x0 = v1->v.x;
- y0 = v1->v.y;
- x1 = v0->v.x;
- y1 = v0->v.y;
- x2 = v2->v.x;
- dwPrimitiveSet |= OP_6326_3D_BTOP | OP_6326_3D_AMID | OP_6326_3D_CBOT;
- if ((SIS_STATES & VERT_SMOOTH) == 0)
- dwPrimitiveSet |= OP_6326_3D_SHADE_FLAT_BOT;
- } else {
- if (y1 > y2) {
- x0 = v1->v.x;
- y0 = v1->v.y;
- x1 = v2->v.x;
- y1 = v2->v.y;
- dwPrimitiveSet |= OP_6326_3D_BTOP | OP_6326_3D_CMID |
- OP_6326_3D_ABOT;
- if ((SIS_STATES & VERT_SMOOTH) == 0)
- dwPrimitiveSet |= OP_6326_3D_SHADE_FLAT_MID;
- } else {
- x0 = v2->v.x;
- y0 = v2->v.y;
- x1 = v1->v.x;
- dwPrimitiveSet |= OP_6326_3D_CTOP | OP_6326_3D_BMID |
- OP_6326_3D_ABOT;
- if ((SIS_STATES & VERT_SMOOTH) == 0)
- dwPrimitiveSet |= OP_6326_3D_SHADE_FLAT_TOP;
- }
- x2 = v0->v.x;
- y2 = v0->v.y;
- }
- }
-
- if (x1 <= x0 && x1 <= x2) {
- dwPrimitiveSet |= OP_3D_DIRECTION_LEFT;
- } else if (x1 < x0 || x1 < x2) {
- GLfloat tmp;
-
- diffx02 = x0 - x2;
- diffy02 = y0 - y2;
- diffy12 = y1 - y2;
-
- delt02 = diffx02 / diffy02;
- tmp = x1 - (diffy12 * delt02 + x2);
-
- if (tmp <= 0.0)
- dwPrimitiveSet |= OP_3D_DIRECTION_LEFT;
- }
-
- tv0 = *v0;
- tv1 = *v1;
- tv2 = *v2;
- tv0.v.y = Y_FLIP(tv0.v.y);
- tv1.v.y = Y_FLIP(tv1.v.y);
- tv2.v.y = Y_FLIP(tv2.v.y);
- v0 = &tv0;
- v1 = &tv1;
- v2 = &tv2;
-
- y0 = v0->v.y;
- y1 = v1->v.y;
- y2 = v2->v.y;
-
-/* fprintf(stderr, "Vertex0 %f %f %f\n", v0->v.x, v0->v.y, v0->v.z);
- fprintf(stderr, "Vertex1 %f %f %f\n", v1->v.x, v1->v.y, v1->v.z);
- fprintf(stderr, "Vertex2 %f %f %f\n", v2->v.x, v2->v.y, v2->v.z);*/
- mWait3DCmdQueue(MMIO_VERT_REG_COUNT * 3 + 1);
- MMIO(REG_3D_PrimitiveSet, dwPrimitiveSet);
- SIS_MMIO_WRITE_VERTEX(v0, 0, 0);
- SIS_MMIO_WRITE_VERTEX(v1, 1, 0);
- SIS_MMIO_WRITE_VERTEX(v2, 2, 1);
- mEndPrimitive();
-}
-
-static void TAG(sis6326_draw_line_mmio)(sisContextPtr smesa, char *verts)
-{
- sisVertexPtr v0 = (sisVertexPtr)verts;
- sisVertexPtr v1 = (sisVertexPtr)(verts + smesa->vertex_size * 4);
- GLint dwPrimitiveSet = smesa->dwPrimitiveSet;
-
- if (abs(v0->v.y - v1->v.y) > abs(v0->v.x - v1->v.x))
- {
- dwPrimitiveSet |= OP_3D_DIRECTION_VERTICAL;
- if (v0->v.y > v1->v.y)
- dwPrimitiveSet |= OP_6326_3D_ATOP | OP_6326_3D_BBOT;
- else
- dwPrimitiveSet |= OP_6326_3D_BTOP | OP_6326_3D_ABOT;
- } else {
- if (v0->v.y > v1->v.y)
- dwPrimitiveSet |= OP_6326_3D_BTOP | OP_6326_3D_ABOT;
- else
- dwPrimitiveSet |= OP_6326_3D_ATOP | OP_6326_3D_BBOT;
- }
-
- mWait3DCmdQueue (MMIO_VERT_REG_COUNT * 2 + 1);
- MMIO(REG_3D_PrimitiveSet, dwPrimitiveSet);
- SIS_MMIO_WRITE_VERTEX(v0, 0, 0);
- SIS_MMIO_WRITE_VERTEX(v1, 1, 1);
-}
-
-static void TAG(sis6326_draw_point_mmio)(sisContextPtr smesa, char *verts)
-{
- sisVertexPtr v0 = (sisVertexPtr)verts;
-
- mWait3DCmdQueue (MMIO_VERT_REG_COUNT * 1 + 1);
- MMIO(REG_3D_PrimitiveSet, smesa->dwPrimitiveSet | OP_6326_3D_ATOP);
- SIS_MMIO_WRITE_VERTEX(v0, 1, 1);
-}
-#endif
-
-static INLINE void TAG(sis_vert_init)( void )
-{
- sis_tri_func_mmio[SIS_STATES] = TAG(sis_draw_tri_mmio);
- sis_line_func_mmio[SIS_STATES] = TAG(sis_draw_line_mmio);
- sis_point_func_mmio[SIS_STATES] = TAG(sis_draw_point_mmio);
-#if !(SIS_STATES & VERT_UV1)
- sis_tri_func_mmio[SIS_STATES | VERT_6326] = TAG(sis6326_draw_tri_mmio);
- sis_line_func_mmio[SIS_STATES | VERT_6326] = TAG(sis6326_draw_line_mmio);
- sis_point_func_mmio[SIS_STATES | VERT_6326] = TAG(sis6326_draw_point_mmio);
-#endif
-}
-
-#undef TAG
-#undef SIS_STATES
diff --git a/src/mesa/drivers/dri/tdfx/BUGS b/src/mesa/drivers/dri/tdfx/BUGS
deleted file mode 100644
index b15f6a91ed8..00000000000
--- a/src/mesa/drivers/dri/tdfx/BUGS
+++ /dev/null
@@ -1,64 +0,0 @@
-REMOVE THIS FILE BEFORE MERGING WITH TRUNK
-------------------------------------------
-
-OUTSTANDING BUGS
-
-demos/reflect - reading back Z on Voodoo3, image offset to right
- Fixed in latest Glide.
-
-Q3 - some polygons drawn as vertical strips, similar to bug that was
- seen in demos/fire. Voodoo3 only. May be related to glDepthMask
- or glColorMask.
-
-book/fog - not fogging
- Fog in orthograph mode still not implemented. Checking with
- 3dfx engineers for ideas.
-
-Q3 demo crashes after changing display settings
- but the full Q3 game version seems OK.
-
-
-
-MORE OUTSTANDING BUGS
-
-private context was NULL! causing immediate failure of any glx prog. cant
-reproduce after restarting the X server. putting it down as halluc.
-
-texture object image was NULL, causing segmentation failure. happens with
-prboom. ive put a check in tdfx_texstate.c but this isn't a fix.
-
-prboom, wall textures near first chainsaw aren't bound properly. sideways
-movements causes the wall textures to move with you. prboom busted?
-
-16bpp mode, quake3, windowed, q3dm1, floor under rocketlauncher bands. it
-looks like multitexturing gone wrong. i'll disable a tmu and test.
-
-sof, polygons appear at wrong x,y,z positions, intermittent, have not yet
-found reliable way of reproducing. culling? sometimes polys disappear.
-
-descent3 is all black in 16bpp mode - FIXED (palette problems)
-
-smeared pixels in quake3 - FIXED (texture memory overlapped FB)
-
-
-
-PERFORMANCE COMPARISON (Brian / Alan)
-
- V3/16 is Voodoo3 in 16bpp on a P3/500
- V5/16 is Voodoo5 in 16bpp on a P3/600
- V5/32 is Voodoo5 in 32bpp on a P3/600
- V5A/16 is Voodoo5 in 16bpp on an Alpha AXP/600
- V5A/32 is Voodoo5 in 32bpp on an Alpha AXP/600
-
- tdfx-2-1-branch tdfx-3-0-0-branch
-demo V3/16 V5/16 V5/32 V3/16 V5/16 V5/32 V5A/16 V5A/32
-------------------------------------------------------------------------
-gloss 257 183 174 320 308 177 313 167
-fire 42 39 52 41
-fire (no help) 98 80 50 106 113 73 124 80
-tunnel 61 50 70 58
-tunnel (no help) 167 142 57 138 152 113 171 122
-gears 663 554 540 881 1232 776 1484 830
-teapot 20 21 37 36
-teapot (no help) 22 14 14 24 30 30 43 42
-
diff --git a/src/mesa/drivers/dri/tdfx/Makefile b/src/mesa/drivers/dri/tdfx/Makefile
deleted file mode 100644
index ed84df20925..00000000000
--- a/src/mesa/drivers/dri/tdfx/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# src/mesa/drivers/dri/tdfx/Makefile
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = tdfx_dri.so
-
-include ../Makefile.defines
-
-DRIVER_SOURCES = \
- tdfx_context.c \
- tdfx_dd.c \
- tdfx_lock.c \
- tdfx_pixels.c \
- tdfx_render.c \
- tdfx_screen.c \
- tdfx_span.c \
- tdfx_state.c \
- tdfx_tex.c \
- tdfx_texman.c \
- tdfx_texstate.c \
- tdfx_tris.c \
- tdfx_vb.c
-
-C_SOURCES = \
- $(COMMON_SOURCES) \
- $(DRIVER_SOURCES)
-
-
-ASM_SOURCES =
-
-include ../Makefile.targets
-
-
diff --git a/src/mesa/drivers/dri/tdfx/X86/fx_3dnow_fastpath.S b/src/mesa/drivers/dri/tdfx/X86/fx_3dnow_fastpath.S
deleted file mode 100644
index 500c97c536a..00000000000
--- a/src/mesa/drivers/dri/tdfx/X86/fx_3dnow_fastpath.S
+++ /dev/null
@@ -1,83 +0,0 @@
-
-#include "../../X86/assyntax.h"
-
-#define SETUP_RGBA 0x1
-#define SETUP_TMU0 0x2
-#define SETUP_TMU1 0x4
-
-
-/* Pack either rgba or texture into the remaining half of a 32 byte vertex.
- */
-#define CLIP_R 24
-#define CLIP_G 16
-#define CLIP_B 20
-#define CLIP_A 28 /* defined inf fxdrv.h */
-
-#define CLIP_S0 16
-#define CLIP_T0 20
-#define CLIP_S1 24
-#define CLIP_T1 28
-
-#define SIZE 4
-#define TYPE (0)
-#define TAG(x) x
-#include "fx_3dnow_fasttmp.h"
-
-#define SIZE 8
-#define TYPE (SETUP_RGBA)
-#define TAG(x) x##_RGBA
-#include "fx_3dnow_fasttmp.h"
-
-#define SIZE 6
-#define TYPE (SETUP_TMU0)
-#define TAG(x) x##_TMU0
-#include "fx_3dnow_fasttmp.h"
-
-#define SIZE 8
-#define TYPE (SETUP_TMU0|SETUP_TMU1)
-#define TAG(x) x##_TMU0_TMU1
-#include "fx_3dnow_fasttmp.h"
-
-#undef CLIP_S1
-#undef CLIP_T1
-#define CLIP_S1 16
-#define CLIP_T1 20
-
-#define SIZE 6
-#define TYPE (SETUP_TMU1)
-#define TAG(x) x##_TMU1
-#include "fx_3dnow_fasttmp.h"
-
-/* These three need to use a full 64 byte clip-space vertex.
- */
-#undef CLIP_S0
-#undef CLIP_T0
-#undef CLIP_S1
-#undef CLIP_T1
-
-#define CLIP_S0 32
-#define CLIP_T0 36
-#define CLIP_S1 40
-#define CLIP_T1 44
-
-#define SIZE 10
-#define TYPE (SETUP_RGBA|SETUP_TMU0)
-#define TAG(x) x##_RGBA_TMU0
-#include "fx_3dnow_fasttmp.h"
-
-#define SIZE 12
-#define TYPE (SETUP_RGBA|SETUP_TMU0|SETUP_TMU1)
-#define TAG(x) x##_RGBA_TMU0_TMU1
-#include "fx_3dnow_fasttmp.h"
-
-#undef CLIP_S1
-#undef CLIP_T1
-#define CLIP_S1 32
-#define CLIP_T1 36
-
-#define SIZE 10
-#define TYPE (SETUP_RGBA|SETUP_TMU1)
-#define TAG(x) x##_RGBA_TMU1
-#include "fx_3dnow_fasttmp.h"
-
-
diff --git a/src/mesa/drivers/dri/tdfx/X86/fx_3dnow_fasttmp.h b/src/mesa/drivers/dri/tdfx/X86/fx_3dnow_fasttmp.h
deleted file mode 100644
index 78c5fef7469..00000000000
--- a/src/mesa/drivers/dri/tdfx/X86/fx_3dnow_fasttmp.h
+++ /dev/null
@@ -1,313 +0,0 @@
-
-#if !defined(NASM_ASSEMBLER) && !defined(MASM_ASSEMBLER)
-#define TAGLLBL(a) TAG(.L##a)
-#else
-#define TAGLLBL(a) TAG(a)
-#endif
-
-#if !GLIDE3
-
-#define GR_VERTEX_X_OFFSET 0
-#define GR_VERTEX_Y_OFFSET 4
-#define GR_VERTEX_Z_OFFSET 8
-#define GR_VERTEX_R_OFFSET 12
-#define GR_VERTEX_G_OFFSET 16
-#define GR_VERTEX_B_OFFSET 20
-#define GR_VERTEX_OOZ_OFFSET 24
-#define GR_VERTEX_A_OFFSET 28
-#define GR_VERTEX_OOW_OFFSET 32
-
-#else /* GLIDE3 */
-
-#define GR_VERTEX_X_OFFSET 0
-#define GR_VERTEX_Y_OFFSET 4
-#define GR_VERTEX_OOZ_OFFSET 8
-#define GR_VERTEX_OOW_OFFSET 12
-#define GR_VERTEX_R_OFFSET 16
-#define GR_VERTEX_G_OFFSET 20
-#define GR_VERTEX_B_OFFSET 24
-#define GR_VERTEX_A_OFFSET 28
-#define GR_VERTEX_Z_OFFSET 32
-
-#endif /* GLIDE3 */
-
-#define GR_VERTEX_SOW_TMU0_OFFSET 36
-#define GR_VERTEX_TOW_TMU0_OFFSET 40
-#define GR_VERTEX_OOW_TMU0_OFFSET 44
-#define GR_VERTEX_SOW_TMU1_OFFSET 48
-#define GR_VERTEX_TOW_TMU1_OFFSET 52
-#define GR_VERTEX_OOW_TMU1_OFFSET 56
-
-
-
-
-/*#define MAT_SX 0 /* accessed by REGIND !! */
-#define MAT_SY 20
-#define MAT_SZ 40
-#define MAT_TX 48
-#define MAT_TY 52
-#define MAT_TZ 56
-
-
-
-
-/* Do viewport map, device scale and perspective projection.
- *
- * void project_verts( GLfloat *first,
- * GLfloat *last,
- * const GLfloat *m,
- * GLuint stride )
- *
- *
- * Rearrange fxVertices to look like grVertices.
- */
-
-GLOBL GLNAME( TAG(fx_3dnow_project_vertices) )
-GLNAME( TAG(fx_3dnow_project_vertices) ):
-
- PUSH_L ( EBP )
-
- MOV_L ( REGOFF(8, ESP), ECX ) /* first_vert */
- MOV_L ( REGOFF(12, ESP), EDX ) /* last_vert */
-
- CMP_L ( ECX, EDX )
- JE ( TAGLLBL(FXPV_end) )
-
- FEMMS
-
- PREFETCH ( REGIND(ECX) ) /* fetch the first vertex */
-
- MOV_L ( REGOFF(16, ESP), EBP ) /* matrix */
- MOV_L ( REGOFF(20, ESP), EAX ) /* stride */
-
- MOVD ( REGOFF(MAT_TX, EBP), MM6 ) /* | tx */
- PUNPCKLDQ ( REGOFF(MAT_TY, EBP), MM6 ) /* ty | tx */
-
-#if !defined(FX_V2)
- MOV_L ( CONST(0x49400000), REGOFF(-8, ESP) ) /* snapper */
- MOV_L ( CONST(0x49400000), REGOFF(-4, ESP) ) /* snapper */
-#endif
-
- MOVQ ( REGOFF(-8, ESP), MM4 ) /* snapper | snapper */
- PFADD ( MM4, MM6 ) /* ty+snapper | tx+snapper */
-
- MOVD ( REGIND(EBP), MM5 )
- PUNPCKLDQ ( REGOFF(MAT_SY, EBP), MM5 ) /* vsy | vsx */
-
- MOVD ( REGOFF(MAT_SZ, EBP), MM1 ) /* | vsz */
-
-
-ALIGNTEXT32
-TAGLLBL(FXPV_loop_start):
-
- PREFETCH ( REGOFF(64, ECX) ) /* fetch the next-ish vertex */
-
-
- MOVD ( REGOFF(12, ECX), MM0 ) /* | f[3] */
- PFRCP ( MM0, MM0 ) /* oow = 1/f[3] */
-
- MOVD ( REGOFF(12, ECX), MM7 ) /* | f[3] */
- PFRCPIT1 ( MM0, MM7 )
- PFRCPIT2 ( MM0, MM7 ) /* oow | oow */
-
- PUNPCKLDQ ( MM7, MM7 )
-
-
-#if (TYPE & SETUP_RGBA)
- MOVD ( REGOFF(CLIP_R, ECX ), MM0 ) /* f[RCOORD] = f[CLIP_R]; */
- MOVD ( MM0, REGOFF(GR_VERTEX_R_OFFSET, ECX) )
-#endif
-
-#if (TYPE & SETUP_TMU1)
- MOVQ ( REGOFF(CLIP_S1, ECX), MM0 ) /* f[S1COORD] = f[CLIP_S1] * oow */
- PFMUL ( MM7, MM0 ) /* f[T1COORD] = f[CLIP_T1] * oow */
- MOVQ ( MM0, REGOFF(GR_VERTEX_SOW_TMU1_OFFSET, ECX) )
-#endif
-
-
-#if (TYPE & SETUP_TMU0)
- MOVQ ( REGOFF(CLIP_S0, ECX), MM0 ) /* f[S0COORD] = f[CLIP_S0] * oow */
- PFMUL ( MM7, MM0 ) /* f[T0COORD] = f[CLIP_T0] * oow */
- MOVQ ( MM0, REGOFF(GR_VERTEX_SOW_TMU0_OFFSET, ECX) )
-#endif
-
-
-
-
-
-/* DO_SETUP_XYZ */
-
- MOVQ ( REGIND(ECX), MM2 ) /* f[1] | f[0] */
- PFMUL ( MM7, MM2 ) /* f[1] * oow | f[0] * oow */
-
- MOVD ( REGOFF(8, ECX), MM3 ) /* | f[2] */
- PFMUL ( MM7, MM3 ) /* | f[2] * oow */
-
- MOVD ( REGOFF(MAT_TZ, EBP), MM0 ) /* | vtz */
- PFMUL ( MM1, MM3 ) /* | f[2] *= vsz */
-
- PFADD ( MM0, MM3 ) /* | f[2] += vtz */
- PFMUL ( MM5, MM2 ) /* f[1] *= vsy | f[0] *= vsx */
-
- PFADD ( MM6, MM2 ) /* f[1] += vty | f[0] += vtx */
-
-#if !defined(FX_V2)
- PFSUB ( MM4, MM2 ) /* f[0,1] -= snapper */
-#endif
-
- MOVQ ( MM2, REGOFF(GR_VERTEX_X_OFFSET, ECX) )
- MOVD ( MM3, REGOFF(GR_VERTEX_OOZ_OFFSET, ECX) )
-
-
-/* end of DO_SETUP_XYZ */
-
- MOVD ( MM7, REGOFF(GR_VERTEX_OOW_OFFSET, ECX) ) /* f[OOWCOORD] = oow */
- ADD_L ( EAX, ECX ) /* f += stride */
-
- CMP_L ( ECX, EDX ) /* stall??? */
- JA ( TAGLLBL(FXPV_loop_start) )
-
-TAGLLBL(FXPV_end):
- FEMMS
- POP_L ( EBP )
- RET
-
-
-
-
-
-
-
-/* void project_verts( GLfloat *first,
- * GLfloat *last,
- * const GLfloat *m,
- * GLuint stride,
- * const GLubyte *mask )
- *
- */
-
-GLOBL GLNAME( TAG(fx_3dnow_project_clipped_vertices) )
-GLNAME( TAG(fx_3dnow_project_clipped_vertices) ):
-
- PUSH_L ( EBP )
-
- MOV_L ( REGOFF(8, ESP), ECX ) /* first FXDRIVER(VB)->verts*/
- MOV_L ( REGOFF(12, ESP), EDX ) /* last FXDRIVER(VB)->last_vert */
-
- FEMMS
-
- PUSH_L ( EDI )
- PUSH_L ( ESI )
-
- PREFETCH ( REGIND(ECX) ) /* fetch the first vertex */
-
- MOV_L ( REGOFF(24, ESP), EBP ) /* mat ctx->Viewport.WindowMap.M */
- MOV_L ( REGOFF(28, ESP), EAX ) /* stride */
- MOV_L ( REGOFF(32, ESP), ESI ) /* VB->ClipMask */
-
- MOVD ( REGOFF(MAT_TX, EBP), MM6 ) /* | tx */
- PUNPCKLDQ ( REGOFF(MAT_TY, EBP), MM6 ) /* ty | tx */
-
-#if !defined(FX_V2)
- MOV_L ( CONST(0x49400000), REGOFF(-8, ESP) ) /* snapper */
- MOV_L ( CONST(0x49400000), REGOFF(-4, ESP) ) /* snapper */
-#endif
-
- MOVQ ( REGOFF(-8, ESP), MM4 ) /* snapper | snapper */
- PFADD ( MM4, MM6 ) /* ty+snapper | tx+snapper */
-
- MOVD ( REGIND(EBP), MM5 )
- PUNPCKLDQ ( REGOFF(MAT_SY, EBP), MM5 ) /* vsy | vsx */
-
- MOVD ( REGOFF(MAT_SZ, EBP), MM1 ) /* | vsz */
-
-
-
-ALIGNTEXT32
-TAGLLBL(FXPCV_loop_start):
-
- PREFETCH ( REGOFF(64, ECX) ) /* fetch the next-ish vertex */
-
- CMP_B ( CONST(0), REGIND(ESI) )
- JNE ( TAGLLBL(FXPCV_skip) )
-
- MOVD ( REGOFF(12, ECX), MM0) /* | f[3] */
- PFRCP ( MM0, MM0 ) /* oow = 1/f[3] */
-
- MOVD ( REGOFF(12, ECX), MM7) /* | f[3] */
- PFRCPIT1 ( MM0, MM7 )
- PFRCPIT2 ( MM0, MM7 ) /* oow | oow */
-
- PUNPCKLDQ ( MM7, MM7 )
-
-
-#if (TYPE & SETUP_RGBA)
- MOVD ( REGOFF(CLIP_R, ECX ), MM0 ) /* f[RCOORD] = f[CLIP_R]; */
- MOVD ( MM0, REGOFF(GR_VERTEX_R_OFFSET, ECX) )
-#endif
-
-#if (TYPE & SETUP_TMU1)
- MOVQ ( REGOFF(CLIP_S1, ECX), MM0 ) /* f[S1COORD] = f[CLIP_S1] * oow */
- PFMUL ( MM7, MM0 ) /* f[T1COORD] = f[CLIP_T1] * oow */
- MOVQ ( MM0, REGOFF(GR_VERTEX_SOW_TMU1_OFFSET, ECX) )
-#endif
-
-
-#if (TYPE & SETUP_TMU0)
- MOVQ ( REGOFF(CLIP_S0, ECX), MM0 ) /* f[S0COORD] = f[CLIP_S0] * oow */
- PFMUL ( MM7, MM0 ) /* f[T0COORD] = f[CLIP_T0] * oow */
- MOVQ ( MM0, REGOFF(GR_VERTEX_SOW_TMU0_OFFSET, ECX) )
-#endif
-
-
-
-
-/* DO_SETUP_XYZ */
-
- MOVQ ( REGIND(ECX), MM2 ) /* f[1] | f[0] */
- PFMUL ( MM7, MM2 ) /* f[1] * oow | f[0] * oow */
-
- MOVD ( REGOFF(8, ECX), MM3 ) /* | f[2] */
- PFMUL ( MM7, MM3 ) /* | f[2] * oow */
-
- MOVD ( REGOFF(MAT_TZ, EBP), MM0 ) /* | vtz */
- PFMUL ( MM1, MM3 ) /* | f[2] *= vsz */
-
- PFADD ( MM0, MM3 ) /* | f[2] += vtz */
- PFMUL ( MM5, MM2 ) /* f[1] *= vsy | f[0] *= vsx */
-
- PFADD ( MM6, MM2 ) /* f[1] += vty | f[0] += vtx */
-
-#if !defined(FX_V2)
- PFSUB ( MM4, MM2 ) /* f[0,1] -= snapper */
-#endif
-
- MOVQ ( MM2, REGOFF(GR_VERTEX_X_OFFSET, ECX) )
- MOVD ( MM3, REGOFF(GR_VERTEX_OOZ_OFFSET, ECX) )
-
-
-/* end of DO_SETUP_XYZ */
-
- MOVD ( MM7, REGOFF(GR_VERTEX_OOW_OFFSET, ECX) ) /* f[OOWCOORD] = oow */
-
-TAGLLBL(FXPCV_skip):
- ADD_L ( EAX, ECX ) /* f += stride */
-
- INC_L ( ESI ) /* next ClipMask */
- CMP_L ( ECX, EDX )
- JA ( TAGLLBL(FXPCV_loop_start) )
-
- POP_L ( ESI )
- POP_L ( EDI )
-
-TAGLLBL(FXPCV_end):
- FEMMS
- POP_L ( EBP )
- RET
-
-
-
-#undef TYPE
-#undef TAG
-#undef SIZE
-
diff --git a/src/mesa/drivers/dri/tdfx/dri_glide.h b/src/mesa/drivers/dri/tdfx/dri_glide.h
deleted file mode 100644
index 3ad2bf68c6e..00000000000
--- a/src/mesa/drivers/dri/tdfx/dri_glide.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*-
- *
- * Copyright 2000 VA Linux Systems Inc., Fremont, California.
- *
- * 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, 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
- * VA LINUX SYSTEMS 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.
- */
-
-/*
- * Original rewrite:
- * Gareth Hughes , 29 Sep - 1 Oct 2000
- *
- * Authors:
- * Gareth Hughes
- *
- */
-
-#ifndef __DRI_GLIDE_H__
-#define __DRI_GLIDE_H__
-
-#include
-#include "dri_mesaint.h"
-
-/*
- * This is the private interface between Glide and the DRI.
- */
-extern void grDRIOpen( char *pFB, char *pRegs, int deviceID,
- int width, int height,
- int mem, int cpp, int stride,
- int fifoOffset, int fifoSize,
- int fbOffset, int backOffset, int depthOffset,
- int textureOffset, int textureSize,
- volatile int *fifoPtr, volatile int *fifoRead );
-extern void grDRIPosition( int x, int y, int w, int h,
- int numClip, drm_clip_rect_t *pClip );
-extern void grDRILostContext( void );
-extern void grDRIImportFifo( int fifoPtr, int fifoRead );
-extern void grDRIInvalidateAll( void );
-extern void grDRIResetSAREA( void );
-extern void grDRIBufferSwap( FxU32 swapInterval );
-#endif
diff --git a/src/mesa/drivers/dri/tdfx/server/tdfx_dri.h b/src/mesa/drivers/dri/tdfx/server/tdfx_dri.h
deleted file mode 100644
index dc29984a272..00000000000
--- a/src/mesa/drivers/dri/tdfx/server/tdfx_dri.h
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#ifndef _TDFX_DRI_
-#define _TDFX_DRI_
-
-#include "xf86drm.h"
-#include "drm.h"
-
-typedef struct {
- drm_handle_t regs;
- drmSize regsSize;
- int deviceID;
- int width;
- int height;
- int mem;
- int cpp;
- int stride;
- int fifoOffset;
- int fifoSize;
- int fbOffset;
- int backOffset;
- int depthOffset;
- int textureOffset;
- int textureSize;
- unsigned int sarea_priv_offset;
-} TDFXDRIRec, *TDFXDRIPtr;
-
-#endif
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_context.c b/src/mesa/drivers/dri/tdfx/tdfx_context.c
deleted file mode 100644
index ad151359e67..00000000000
--- a/src/mesa/drivers/dri/tdfx/tdfx_context.c
+++ /dev/null
@@ -1,1013 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*-
- *
- * Copyright 2000 VA Linux Systems Inc., Fremont, California.
- *
- * 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, 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
- * VA LINUX SYSTEMS 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.
- */
-
-/**
- * \file tdfx_context.c
- * Context management functions for 3Dfx hardware.
- *
- * \author Gareth Hughes (original rewrite 29 Sep - 1 Oct 2000)
- * \author Brian Paul
- * \author Daniel Borca (new fixes 19 Jul 2004)
- */
-
-#include