diff options
Diffstat (limited to 'src/mesa/drivers/dri/i810')
24 files changed, 0 insertions, 8168 deletions
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<<FB0_PITCH_SHIFT) | FB0_* - * 1: FB1_* - */ -#define CMD_OP_FRONT_BUFFER_INFO ((0x0<<29)|(0x14<<23)) -#define FB0_PITCH_SHIFT 8 -#define FB0_FLIP_SYNC (0<<6) -#define FB0_FLIP_ASYNC (1<<6) -#define FB0_BASE_ADDR_SHIFT 0 -#define FB0_BASE_ADDR_MASK 0x03FFFFF8 - -/* GFXCMDPARSER_DEST_BUFFER_INFO, p96 - * - * Format: - */ -#define CMD_OP_DESTBUFFER_INFO ((0x0<<29)|(0x15<<23)) -#define DB1_BASE_ADDR_SHIFT 0 -#define DB1_BASE_ADDR_MASK 0x03FFF000 -#define DB1_PITCH_512B (0x0<<0) -#define DB1_PITCH_1K (0x1<<0) -#define DB1_PITCH_2K (0x2<<0) -#define DB1_PITCH_4K (0x4<<0) - - -/* GFXRENDERSTATE_DEST_BUFFER_VARIABLES, p152 - * - * Format: - * 0: GFX_OP_DESTBUFFER_VARS - * 1: DEST_* - */ -#define GFX_OP_DESTBUFFER_VARS ((0x3<<29)|(0x1d<<24)|(0x85<<16)|0x0) -#define DV_HORG_BIAS_MASK (0xf<<20) -#define DV_HORG_BIAS_OGL (0x0<<20) -#define DV_VORG_BIAS_MASK (0xf<<16) -#define DV_VORG_BIAS_OGL (0x0<<16) -#define DV_PF_MASK (0x7<<8) -#define DV_PF_INDEX (0x0<<8) -#define DV_PF_555 (0x1<<8) -#define DV_PF_565 (0x2<<8) - -#define GFX_OP_ANTIALIAS ((0x3<<29)|(0x6<<24)) -#define AA_UPDATE_EDGEFLAG (1<<13) -#define AA_ENABLE_EDGEFLAG (1<<12) -#define AA_UPDATE_POLYWIDTH (1<<11) -#define AA_POLYWIDTH_05 (1<<9) -#define AA_POLYWIDTH_10 (2<<9) -#define AA_POLYWIDTH_20 (3<<9) -#define AA_POLYWIDTH_40 (4<<9) -#define AA_UPDATE_LINEWIDTH (1<<8) -#define AA_LINEWIDTH_05 (1<<6) -#define AA_LINEWIDTH_10 (2<<6) -#define AA_LINEWIDTH_20 (3<<6) -#define AA_LINEWIDTH_40 (4<<6) -#define AA_UPDATE_BB_EXPANSION (1<<5) -#define AA_BB_EXPANSION_SHIFT 2 -#define AA_UPDATE_AA_ENABLE (1<<1) -#define AA_ENABLE (1<<0) - -#define GFX_OP_STIPPLE ((0x3<<29)|(0x1d<<24)|(0x83<<16)) -#define ST1_ENABLE (1<<16) -#define ST1_MASK (0xffff) - -#define I810_SET_FIELD( var, mask, value ) (var &= ~(mask), var |= value) - -#endif diff --git a/src/mesa/drivers/dri/i810/i810context.c b/src/mesa/drivers/dri/i810/i810context.c deleted file mode 100644 index 604b1e36f97..00000000000 --- a/src/mesa/drivers/dri/i810/i810context.c +++ /dev/null @@ -1,570 +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 <[email protected]> - * - */ - - -#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 <unistd.h> /* 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 <[email protected]> - */ - - -/* - * 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 <[email protected]> - * - */ - - -#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 <[email protected]> - * - */ - -#ifndef _I810_INIT_H_ -#define _I810_INIT_H_ - -#include <sys/time.h> -#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 <stdio.h> - -#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<<i)) - i810UploadTexLevel( imesa, t, i ); - - t->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<<unit)); - imesa->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<<unit)); - t->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<<unit)); - t->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<<unit); - -} - -/** - * Update hardware state for a texture unit. - * - * \todo - * 1D textures should be supported! Just use a 2D texture with the second - * texture coordinate value fixed at 0.0. - */ -static void i810UpdateTexUnit( struct gl_context *ctx, GLuint unit, - int * next_color_stage, int * next_alpha_stage ) -{ - i810ContextPtr imesa = I810_CONTEXT(ctx); - struct gl_texture_unit *texUnit = &ctx->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 <[email protected]> - */ - -#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 <[email protected]> - * - * - */ - -/* 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<<I810_DMA_BUF_ORDER) -#define I810_DMA_BUF_NR 256 - -#define I810_NR_SAREA_CLIPRECTS 8 - -/* Each region is a minimum of 64k, and there are at most 64 of them. - */ -#define I810_NR_TEX_REGIONS 64 -#define I810_LOG_MIN_TEX_REGION_SIZE 16 - -/* Destbuffer state - * - backbuffer linear offset and pitch -- invarient in the current dri - * - zbuffer linear offset and pitch -- also invarient - * - drawing origin in back and depth buffers. - * - * Keep the depth/back buffer state here to acommodate private buffers - * in the future. - */ -#define I810_DESTREG_DI0 0 /* CMD_OP_DESTBUFFER_INFO (2 dwords) */ -#define I810_DESTREG_DI1 1 -#define I810_DESTREG_DV0 2 /* GFX_OP_DESTBUFFER_VARS (2 dwords) */ -#define I810_DESTREG_DV1 3 -#define I810_DESTREG_DR0 4 /* GFX_OP_DRAWRECT_INFO (4 dwords) */ -#define I810_DESTREG_DR1 5 -#define I810_DESTREG_DR2 6 -#define I810_DESTREG_DR3 7 -#define I810_DESTREG_DR4 8 -#define I810_DEST_SETUP_SIZE 10 - -/* Context state - */ -#define I810_CTXREG_CF0 0 /* GFX_OP_COLOR_FACTOR */ -#define I810_CTXREG_CF1 1 -#define I810_CTXREG_ST0 2 /* GFX_OP_STIPPLE */ -#define I810_CTXREG_ST1 3 -#define I810_CTXREG_VF 4 /* GFX_OP_VERTEX_FMT */ -#define I810_CTXREG_MT 5 /* GFX_OP_MAP_TEXELS */ -#define I810_CTXREG_MC0 6 /* GFX_OP_MAP_COLOR_STAGES - stage 0 */ -#define I810_CTXREG_MC1 7 /* GFX_OP_MAP_COLOR_STAGES - stage 1 */ -#define I810_CTXREG_MC2 8 /* GFX_OP_MAP_COLOR_STAGES - stage 2 */ -#define I810_CTXREG_MA0 9 /* GFX_OP_MAP_ALPHA_STAGES - stage 0 */ -#define I810_CTXREG_MA1 10 /* GFX_OP_MAP_ALPHA_STAGES - stage 1 */ -#define I810_CTXREG_MA2 11 /* GFX_OP_MAP_ALPHA_STAGES - stage 2 */ -#define I810_CTXREG_SDM 12 /* GFX_OP_SRC_DEST_MONO */ -#define I810_CTXREG_FOG 13 /* GFX_OP_FOG_COLOR */ -#define I810_CTXREG_B1 14 /* GFX_OP_BOOL_1 */ -#define I810_CTXREG_B2 15 /* GFX_OP_BOOL_2 */ -#define I810_CTXREG_LCS 16 /* GFX_OP_LINEWIDTH_CULL_SHADE_MODE */ -#define I810_CTXREG_PV 17 /* GFX_OP_PV_RULE -- Invarient! */ -#define I810_CTXREG_ZA 18 /* GFX_OP_ZBIAS_ALPHAFUNC */ -#define I810_CTXREG_AA 19 /* GFX_OP_ANTIALIAS */ -#define I810_CTX_SETUP_SIZE 20 - -/* Texture state (per tex unit) - */ -#define I810_TEXREG_MI0 0 /* GFX_OP_MAP_INFO (4 dwords) */ -#define I810_TEXREG_MI1 1 -#define I810_TEXREG_MI2 2 -#define I810_TEXREG_MI3 3 -#define I810_TEXREG_MF 4 /* GFX_OP_MAP_FILTER */ -#define I810_TEXREG_MLC 5 /* GFX_OP_MAP_LOD_CTL */ -#define I810_TEXREG_MLL 6 /* GFX_OP_MAP_LOD_LIMITS */ -#define I810_TEXREG_MCS 7 /* GFX_OP_MAP_COORD_SETS ??? */ -#define I810_TEX_SETUP_SIZE 8 - -/* Driver specific DRM command indices - * NOTE: these are not OS specific, but they are driver specific - */ -#define DRM_I810_INIT 0x00 -#define DRM_I810_VERTEX 0x01 -#define DRM_I810_CLEAR 0x02 -#define DRM_I810_FLUSH 0x03 -#define DRM_I810_GETAGE 0x04 -#define DRM_I810_GETBUF 0x05 -#define DRM_I810_SWAP 0x06 -#define DRM_I810_COPY 0x07 -#define DRM_I810_DOCOPY 0x08 -#define DRM_I810_OV0INFO 0x09 -#define DRM_I810_FSTATUS 0x0a -#define DRM_I810_OV0FLIP 0x0b -#define DRM_I810_MC 0x0c -#define DRM_I810_RSTATUS 0x0d -#define DRM_I810_FLIP 0x0e - -#endif - -typedef enum _drmI810Initfunc { - I810_INIT_DMA = 0x01, - I810_CLEANUP_DMA = 0x02, - I810_INIT_DMA_1_4 = 0x03 -} drmI810Initfunc; - -typedef struct { - drmI810Initfunc func; - unsigned int mmio_offset; - unsigned int buffers_offset; - int sarea_priv_offset; - unsigned int ring_start; - unsigned int ring_end; - unsigned int ring_size; - unsigned int front_offset; - unsigned int back_offset; - unsigned int depth_offset; - unsigned int overlay_offset; - unsigned int overlay_physical; - unsigned int w; - unsigned int h; - unsigned int pitch; - unsigned int pitch_bits; -} drmI810Init; - -typedef struct { - void *virtual; - int request_idx; - int request_size; - int granted; -} drmI810DMA; - -/* Flags for clear ioctl - */ -#define I810_FRONT 0x1 -#define I810_BACK 0x2 -#define I810_DEPTH 0x4 - -typedef struct { - int clear_color; - int clear_depth; - int flags; -} drmI810Clear; - -typedef struct { - int idx; /* buffer index */ - int used; /* nr bytes in use */ - int discard; /* client is finished with the buffer? */ -} drmI810Vertex; - -/* Flags for vertex ioctl - */ -#define PR_TRIANGLES (0x0<<18) -#define PR_TRISTRIP_0 (0x1<<18) -#define PR_TRISTRIP_1 (0x2<<18) -#define PR_TRIFAN (0x3<<18) -#define PR_POLYGON (0x4<<18) -#define PR_LINES (0x5<<18) -#define PR_LINESTRIP (0x6<<18) -#define PR_RECTS (0x7<<18) -#define PR_MASK (0x7<<18) - -#endif diff --git a/src/mesa/drivers/dri/i810/server/i810_dri.h b/src/mesa/drivers/dri/i810/server/i810_dri.h deleted file mode 100644 index 4a714f03062..00000000000 --- a/src/mesa/drivers/dri/i810/server/i810_dri.h +++ /dev/null @@ -1,127 +0,0 @@ - -#ifndef _I810_DRI_ -#define _I810_DRI_ - -#include "xf86drm.h" -#include "i810_common.h" - -#define I810_MAX_DRAWABLES 256 - -typedef struct { - drm_handle_t regs; - drmSize regsSize; - - drmSize backbufferSize; - drm_handle_t backbuffer; - - drmSize depthbufferSize; - drm_handle_t depthbuffer; - - drm_handle_t textures; - int textureSize; - - drm_handle_t agp_buffers; - drmSize agp_buf_size; - - int deviceID; - int width; - int height; - int mem; - int cpp; - int bitsPerPixel; - int fbOffset; - int fbStride; - - int backOffset; - int depthOffset; - - int auxPitch; - int auxPitchBits; - - int logTextureGranularity; - int textureOffset; - - /* For non-dma direct rendering. - */ - int ringOffset; - int ringSize; - - drmBufMapPtr drmBufs; - int irq; - unsigned int sarea_priv_offset; - -} I810DRIRec, *I810DRIPtr; - -/* WARNING: Do not change the SAREA structure without changing the kernel - * as well */ - -#define I810_UPLOAD_TEX0IMAGE 0x1 /* handled clientside */ -#define I810_UPLOAD_TEX1IMAGE 0x2 /* handled clientside */ -#define I810_UPLOAD_CTX 0x4 -#define I810_UPLOAD_BUFFERS 0x8 -#define I810_UPLOAD_TEX0 0x10 -#define I810_UPLOAD_TEX1 0x20 -#define I810_UPLOAD_CLIPRECTS 0x40 - -typedef struct { - unsigned char next, prev; /* indices to form a circular LRU */ - unsigned char in_use; /* owned by a client, or free? */ - int age; /* tracked by clients to update local LRU's */ -} I810TexRegionRec, *I810TexRegionPtr; - -typedef struct { - unsigned int ContextState[I810_CTX_SETUP_SIZE]; - unsigned int BufferState[I810_DEST_SETUP_SIZE]; - unsigned int TexState[2][I810_TEX_SETUP_SIZE]; - unsigned int dirty; - - unsigned int nbox; - drm_clip_rect_t boxes[I810_NR_SAREA_CLIPRECTS]; - - /* Maintain an LRU of contiguous regions of texture space. If - * you think you own a region of texture memory, and it has an - * age different to the one you set, then you are mistaken and - * it has been stolen by another client. If global texAge - * hasn't changed, there is no need to walk the list. - * - * These regions can be used as a proxy for the fine-grained - * texture information of other clients - by maintaining them - * in the same lru which is used to age their own textures, - * clients have an approximate lru for the whole of global - * texture space, and can make informed decisions as to which - * areas to kick out. There is no need to choose whether to - * kick out your own texture or someone else's - simply eject - * them all in LRU order. - */ - - drmTextureRegion texList[I810_NR_TEX_REGIONS + 1]; - - /* Last elt is sentinal */ - int texAge; /* last time texture was uploaded */ - - int last_enqueue; /* last time a buffer was enqueued */ - int last_dispatch; /* age of the most recently dispatched buffer */ - int last_quiescent; /* */ - - int ctxOwner; /* last context to upload state */ - - int vertex_prim; - - int pf_enabled; /* is pageflipping allowed? */ - int pf_active; /* is pageflipping active right now? */ - int pf_current_page; /* which buffer is being displayed? */ - - -} I810SAREARec, *I810SAREAPtr; - -typedef struct { - /* Nothing here yet */ - int dummy; -} I810ConfigPrivRec, *I810ConfigPrivPtr; - -typedef struct { - /* Nothing here yet */ - int dummy; -} I810DRIContextRec, *I810DRIContextPtr; - -#endif diff --git a/src/mesa/drivers/dri/i810/server/i810_reg.h b/src/mesa/drivers/dri/i810/server/i810_reg.h deleted file mode 100644 index e7e5081038e..00000000000 --- a/src/mesa/drivers/dri/i810/server/i810_reg.h +++ /dev/null @@ -1,991 +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 <[email protected]> - * - * based on the i740 driver by - * Kevin E. Martin <[email protected]> - * - * - */ - -#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 */ |