Merge branch 'i965', adding i965G support.
Conflicts: src/i830_cursor.c src/i830_driver.c
This commit is contained in:
commit
d150b53d10
|
|
@ -1,2 +0,0 @@
|
|||
i810.4
|
||||
i810.4x
|
||||
|
|
@ -0,0 +1,847 @@
|
|||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
||||
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
|
||||
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
#ifndef BRW_DEFINES_H
|
||||
#define BRW_DEFINES_H
|
||||
|
||||
/*
|
||||
*/
|
||||
#if 0
|
||||
#define MI_NOOP 0x00
|
||||
#define MI_USER_INTERRUPT 0x02
|
||||
#define MI_WAIT_FOR_EVENT 0x03
|
||||
#define MI_FLUSH 0x04
|
||||
#define MI_REPORT_HEAD 0x07
|
||||
#define MI_ARB_ON_OFF 0x08
|
||||
#define MI_BATCH_BUFFER_END 0x0A
|
||||
#define MI_OVERLAY_FLIP 0x11
|
||||
#define MI_LOAD_SCAN_LINES_INCL 0x12
|
||||
#define MI_LOAD_SCAN_LINES_EXCL 0x13
|
||||
#define MI_DISPLAY_BUFFER_INFO 0x14
|
||||
#define MI_SET_CONTEXT 0x18
|
||||
#define MI_STORE_DATA_IMM 0x20
|
||||
#define MI_STORE_DATA_INDEX 0x21
|
||||
#define MI_LOAD_REGISTER_IMM 0x22
|
||||
#define MI_STORE_REGISTER_MEM 0x24
|
||||
#define MI_BATCH_BUFFER_START 0x31
|
||||
|
||||
#define MI_SYNCHRONOUS_FLIP 0x0
|
||||
#define MI_ASYNCHRONOUS_FLIP 0x1
|
||||
|
||||
#define MI_BUFFER_SECURE 0x0
|
||||
#define MI_BUFFER_NONSECURE 0x1
|
||||
|
||||
#define MI_ARBITRATE_AT_CHAIN_POINTS 0x0
|
||||
#define MI_ARBITRATE_BETWEEN_INSTS 0x1
|
||||
#define MI_NO_ARBITRATION 0x3
|
||||
|
||||
#define MI_CONDITION_CODE_WAIT_DISABLED 0x0
|
||||
#define MI_CONDITION_CODE_WAIT_0 0x1
|
||||
#define MI_CONDITION_CODE_WAIT_1 0x2
|
||||
#define MI_CONDITION_CODE_WAIT_2 0x3
|
||||
#define MI_CONDITION_CODE_WAIT_3 0x4
|
||||
#define MI_CONDITION_CODE_WAIT_4 0x5
|
||||
|
||||
#define MI_DISPLAY_PIPE_A 0x0
|
||||
#define MI_DISPLAY_PIPE_B 0x1
|
||||
|
||||
#define MI_DISPLAY_PLANE_A 0x0
|
||||
#define MI_DISPLAY_PLANE_B 0x1
|
||||
#define MI_DISPLAY_PLANE_C 0x2
|
||||
|
||||
#define MI_STANDARD_FLIP 0x0
|
||||
#define MI_ENQUEUE_FLIP_PERFORM_BASE_FRAME_NUMBER_LOAD 0x1
|
||||
#define MI_ENQUEUE_FLIP_TARGET_FRAME_NUMBER_RELATIVE 0x2
|
||||
#define MI_ENQUEUE_FLIP_ABSOLUTE_TARGET_FRAME_NUMBER 0x3
|
||||
|
||||
#define MI_PHYSICAL_ADDRESS 0x0
|
||||
#define MI_VIRTUAL_ADDRESS 0x1
|
||||
|
||||
#define MI_BUFFER_MEMORY_MAIN 0x0
|
||||
#define MI_BUFFER_MEMORY_GTT 0x2
|
||||
#define MI_BUFFER_MEMORY_PER_PROCESS_GTT 0x3
|
||||
|
||||
#define MI_FLIP_CONTINUE 0x0
|
||||
#define MI_FLIP_ON 0x1
|
||||
#define MI_FLIP_OFF 0x2
|
||||
|
||||
#define MI_UNTRUSTED_REGISTER_SPACE 0x0
|
||||
#define MI_TRUSTED_REGISTER_SPACE 0x1
|
||||
#endif
|
||||
|
||||
/* 3D state:
|
||||
*/
|
||||
#define _3DOP_3DSTATE_PIPELINED 0x0
|
||||
#define _3DOP_3DSTATE_NONPIPELINED 0x1
|
||||
#define _3DOP_3DCONTROL 0x2
|
||||
#define _3DOP_3DPRIMITIVE 0x3
|
||||
|
||||
#define _3DSTATE_PIPELINED_POINTERS 0x00
|
||||
#define _3DSTATE_BINDING_TABLE_POINTERS 0x01
|
||||
#define _3DSTATE_VERTEX_BUFFERS 0x08
|
||||
#define _3DSTATE_VERTEX_ELEMENTS 0x09
|
||||
#define _3DSTATE_INDEX_BUFFER 0x0A
|
||||
#define _3DSTATE_VF_STATISTICS 0x0B
|
||||
#define _3DSTATE_DRAWING_RECTANGLE 0x00
|
||||
#define _3DSTATE_CONSTANT_COLOR 0x01
|
||||
#define _3DSTATE_SAMPLER_PALETTE_LOAD 0x02
|
||||
#define _3DSTATE_CHROMA_KEY 0x04
|
||||
#define _3DSTATE_DEPTH_BUFFER 0x05
|
||||
#define _3DSTATE_POLY_STIPPLE_OFFSET 0x06
|
||||
#define _3DSTATE_POLY_STIPPLE_PATTERN 0x07
|
||||
#define _3DSTATE_LINE_STIPPLE 0x08
|
||||
#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP 0x09
|
||||
#define _3DCONTROL 0x00
|
||||
#define _3DPRIMITIVE 0x00
|
||||
|
||||
#define PIPE_CONTROL_NOWRITE 0x00
|
||||
#define PIPE_CONTROL_WRITEIMMEDIATE 0x01
|
||||
#define PIPE_CONTROL_WRITEDEPTH 0x02
|
||||
#define PIPE_CONTROL_WRITETIMESTAMP 0x03
|
||||
|
||||
#define PIPE_CONTROL_GTTWRITE_PROCESS_LOCAL 0x00
|
||||
#define PIPE_CONTROL_GTTWRITE_GLOBAL 0x01
|
||||
|
||||
#define _3DPRIM_POINTLIST 0x01
|
||||
#define _3DPRIM_LINELIST 0x02
|
||||
#define _3DPRIM_LINESTRIP 0x03
|
||||
#define _3DPRIM_TRILIST 0x04
|
||||
#define _3DPRIM_TRISTRIP 0x05
|
||||
#define _3DPRIM_TRIFAN 0x06
|
||||
#define _3DPRIM_QUADLIST 0x07
|
||||
#define _3DPRIM_QUADSTRIP 0x08
|
||||
#define _3DPRIM_LINELIST_ADJ 0x09
|
||||
#define _3DPRIM_LINESTRIP_ADJ 0x0A
|
||||
#define _3DPRIM_TRILIST_ADJ 0x0B
|
||||
#define _3DPRIM_TRISTRIP_ADJ 0x0C
|
||||
#define _3DPRIM_TRISTRIP_REVERSE 0x0D
|
||||
#define _3DPRIM_POLYGON 0x0E
|
||||
#define _3DPRIM_RECTLIST 0x0F
|
||||
#define _3DPRIM_LINELOOP 0x10
|
||||
#define _3DPRIM_POINTLIST_BF 0x11
|
||||
#define _3DPRIM_LINESTRIP_CONT 0x12
|
||||
#define _3DPRIM_LINESTRIP_BF 0x13
|
||||
#define _3DPRIM_LINESTRIP_CONT_BF 0x14
|
||||
#define _3DPRIM_TRIFAN_NOSTIPPLE 0x15
|
||||
|
||||
#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
|
||||
#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM 1
|
||||
|
||||
#define BRW_ANISORATIO_2 0
|
||||
#define BRW_ANISORATIO_4 1
|
||||
#define BRW_ANISORATIO_6 2
|
||||
#define BRW_ANISORATIO_8 3
|
||||
#define BRW_ANISORATIO_10 4
|
||||
#define BRW_ANISORATIO_12 5
|
||||
#define BRW_ANISORATIO_14 6
|
||||
#define BRW_ANISORATIO_16 7
|
||||
|
||||
#define BRW_BLENDFACTOR_ONE 0x1
|
||||
#define BRW_BLENDFACTOR_SRC_COLOR 0x2
|
||||
#define BRW_BLENDFACTOR_SRC_ALPHA 0x3
|
||||
#define BRW_BLENDFACTOR_DST_ALPHA 0x4
|
||||
#define BRW_BLENDFACTOR_DST_COLOR 0x5
|
||||
#define BRW_BLENDFACTOR_SRC_ALPHA_SATURATE 0x6
|
||||
#define BRW_BLENDFACTOR_CONST_COLOR 0x7
|
||||
#define BRW_BLENDFACTOR_CONST_ALPHA 0x8
|
||||
#define BRW_BLENDFACTOR_SRC1_COLOR 0x9
|
||||
#define BRW_BLENDFACTOR_SRC1_ALPHA 0x0A
|
||||
#define BRW_BLENDFACTOR_ZERO 0x11
|
||||
#define BRW_BLENDFACTOR_INV_SRC_COLOR 0x12
|
||||
#define BRW_BLENDFACTOR_INV_SRC_ALPHA 0x13
|
||||
#define BRW_BLENDFACTOR_INV_DST_ALPHA 0x14
|
||||
#define BRW_BLENDFACTOR_INV_DST_COLOR 0x15
|
||||
#define BRW_BLENDFACTOR_INV_CONST_COLOR 0x17
|
||||
#define BRW_BLENDFACTOR_INV_CONST_ALPHA 0x18
|
||||
#define BRW_BLENDFACTOR_INV_SRC1_COLOR 0x19
|
||||
#define BRW_BLENDFACTOR_INV_SRC1_ALPHA 0x1A
|
||||
|
||||
#define BRW_BLENDFUNCTION_ADD 0
|
||||
#define BRW_BLENDFUNCTION_SUBTRACT 1
|
||||
#define BRW_BLENDFUNCTION_REVERSE_SUBTRACT 2
|
||||
#define BRW_BLENDFUNCTION_MIN 3
|
||||
#define BRW_BLENDFUNCTION_MAX 4
|
||||
|
||||
#define BRW_ALPHATEST_FORMAT_UNORM8 0
|
||||
#define BRW_ALPHATEST_FORMAT_FLOAT32 1
|
||||
|
||||
#define BRW_CHROMAKEY_KILL_ON_ANY_MATCH 0
|
||||
#define BRW_CHROMAKEY_REPLACE_BLACK 1
|
||||
|
||||
#define BRW_CLIP_API_OGL 0
|
||||
#define BRW_CLIP_API_DX 1
|
||||
|
||||
#define BRW_CLIPMODE_NORMAL 0
|
||||
#define BRW_CLIPMODE_CLIP_ALL 1
|
||||
#define BRW_CLIPMODE_CLIP_NON_REJECTED 2
|
||||
#define BRW_CLIPMODE_REJECT_ALL 3
|
||||
#define BRW_CLIPMODE_ACCEPT_ALL 4
|
||||
|
||||
#define BRW_CLIP_NDCSPACE 0
|
||||
#define BRW_CLIP_SCREENSPACE 1
|
||||
|
||||
#define BRW_COMPAREFUNCTION_ALWAYS 0
|
||||
#define BRW_COMPAREFUNCTION_NEVER 1
|
||||
#define BRW_COMPAREFUNCTION_LESS 2
|
||||
#define BRW_COMPAREFUNCTION_EQUAL 3
|
||||
#define BRW_COMPAREFUNCTION_LEQUAL 4
|
||||
#define BRW_COMPAREFUNCTION_GREATER 5
|
||||
#define BRW_COMPAREFUNCTION_NOTEQUAL 6
|
||||
#define BRW_COMPAREFUNCTION_GEQUAL 7
|
||||
|
||||
#define BRW_COVERAGE_PIXELS_HALF 0
|
||||
#define BRW_COVERAGE_PIXELS_1 1
|
||||
#define BRW_COVERAGE_PIXELS_2 2
|
||||
#define BRW_COVERAGE_PIXELS_4 3
|
||||
|
||||
#define BRW_CULLMODE_BOTH 0
|
||||
#define BRW_CULLMODE_NONE 1
|
||||
#define BRW_CULLMODE_FRONT 2
|
||||
#define BRW_CULLMODE_BACK 3
|
||||
|
||||
#define BRW_DEFAULTCOLOR_R8G8B8A8_UNORM 0
|
||||
#define BRW_DEFAULTCOLOR_R32G32B32A32_FLOAT 1
|
||||
|
||||
#define BRW_DEPTHFORMAT_D32_FLOAT_S8X24_UINT 0
|
||||
#define BRW_DEPTHFORMAT_D32_FLOAT 1
|
||||
#define BRW_DEPTHFORMAT_D24_UNORM_S8_UINT 2
|
||||
#define BRW_DEPTHFORMAT_D16_UNORM 5
|
||||
|
||||
#define BRW_FLOATING_POINT_IEEE_754 0
|
||||
#define BRW_FLOATING_POINT_NON_IEEE_754 1
|
||||
|
||||
#define BRW_FRONTWINDING_CW 0
|
||||
#define BRW_FRONTWINDING_CCW 1
|
||||
|
||||
#define BRW_INDEX_BYTE 0
|
||||
#define BRW_INDEX_WORD 1
|
||||
#define BRW_INDEX_DWORD 2
|
||||
|
||||
#define BRW_LOGICOPFUNCTION_CLEAR 0
|
||||
#define BRW_LOGICOPFUNCTION_NOR 1
|
||||
#define BRW_LOGICOPFUNCTION_AND_INVERTED 2
|
||||
#define BRW_LOGICOPFUNCTION_COPY_INVERTED 3
|
||||
#define BRW_LOGICOPFUNCTION_AND_REVERSE 4
|
||||
#define BRW_LOGICOPFUNCTION_INVERT 5
|
||||
#define BRW_LOGICOPFUNCTION_XOR 6
|
||||
#define BRW_LOGICOPFUNCTION_NAND 7
|
||||
#define BRW_LOGICOPFUNCTION_AND 8
|
||||
#define BRW_LOGICOPFUNCTION_EQUIV 9
|
||||
#define BRW_LOGICOPFUNCTION_NOOP 10
|
||||
#define BRW_LOGICOPFUNCTION_OR_INVERTED 11
|
||||
#define BRW_LOGICOPFUNCTION_COPY 12
|
||||
#define BRW_LOGICOPFUNCTION_OR_REVERSE 13
|
||||
#define BRW_LOGICOPFUNCTION_OR 14
|
||||
#define BRW_LOGICOPFUNCTION_SET 15
|
||||
|
||||
#define BRW_MAPFILTER_NEAREST 0x0
|
||||
#define BRW_MAPFILTER_LINEAR 0x1
|
||||
#define BRW_MAPFILTER_ANISOTROPIC 0x2
|
||||
|
||||
#define BRW_MIPFILTER_NONE 0
|
||||
#define BRW_MIPFILTER_NEAREST 1
|
||||
#define BRW_MIPFILTER_LINEAR 3
|
||||
|
||||
#define BRW_POLYGON_FRONT_FACING 0
|
||||
#define BRW_POLYGON_BACK_FACING 1
|
||||
|
||||
#define BRW_PREFILTER_ALWAYS 0x0
|
||||
#define BRW_PREFILTER_NEVER 0x1
|
||||
#define BRW_PREFILTER_LESS 0x2
|
||||
#define BRW_PREFILTER_EQUAL 0x3
|
||||
#define BRW_PREFILTER_LEQUAL 0x4
|
||||
#define BRW_PREFILTER_GREATER 0x5
|
||||
#define BRW_PREFILTER_NOTEQUAL 0x6
|
||||
#define BRW_PREFILTER_GEQUAL 0x7
|
||||
|
||||
#define BRW_PROVOKING_VERTEX_0 0
|
||||
#define BRW_PROVOKING_VERTEX_1 1
|
||||
#define BRW_PROVOKING_VERTEX_2 2
|
||||
|
||||
#define BRW_RASTRULE_UPPER_LEFT 0
|
||||
#define BRW_RASTRULE_UPPER_RIGHT 1
|
||||
|
||||
#define BRW_RENDERTARGET_CLAMPRANGE_UNORM 0
|
||||
#define BRW_RENDERTARGET_CLAMPRANGE_SNORM 1
|
||||
#define BRW_RENDERTARGET_CLAMPRANGE_FORMAT 2
|
||||
|
||||
#define BRW_STENCILOP_KEEP 0
|
||||
#define BRW_STENCILOP_ZERO 1
|
||||
#define BRW_STENCILOP_REPLACE 2
|
||||
#define BRW_STENCILOP_INCRSAT 3
|
||||
#define BRW_STENCILOP_DECRSAT 4
|
||||
#define BRW_STENCILOP_INCR 5
|
||||
#define BRW_STENCILOP_DECR 6
|
||||
#define BRW_STENCILOP_INVERT 7
|
||||
|
||||
#define BRW_SURFACE_MIPMAPLAYOUT_BELOW 0
|
||||
#define BRW_SURFACE_MIPMAPLAYOUT_RIGHT 1
|
||||
|
||||
#define BRW_SURFACEFORMAT_R32G32B32A32_FLOAT 0x000
|
||||
#define BRW_SURFACEFORMAT_R32G32B32A32_SINT 0x001
|
||||
#define BRW_SURFACEFORMAT_R32G32B32A32_UINT 0x002
|
||||
#define BRW_SURFACEFORMAT_R32G32B32A32_UNORM 0x003
|
||||
#define BRW_SURFACEFORMAT_R32G32B32A32_SNORM 0x004
|
||||
#define BRW_SURFACEFORMAT_R64G64_FLOAT 0x005
|
||||
#define BRW_SURFACEFORMAT_R32G32B32X32_FLOAT 0x006
|
||||
#define BRW_SURFACEFORMAT_R32G32B32A32_SSCALED 0x007
|
||||
#define BRW_SURFACEFORMAT_R32G32B32A32_USCALED 0x008
|
||||
#define BRW_SURFACEFORMAT_R32G32B32_FLOAT 0x040
|
||||
#define BRW_SURFACEFORMAT_R32G32B32_SINT 0x041
|
||||
#define BRW_SURFACEFORMAT_R32G32B32_UINT 0x042
|
||||
#define BRW_SURFACEFORMAT_R32G32B32_UNORM 0x043
|
||||
#define BRW_SURFACEFORMAT_R32G32B32_SNORM 0x044
|
||||
#define BRW_SURFACEFORMAT_R32G32B32_SSCALED 0x045
|
||||
#define BRW_SURFACEFORMAT_R32G32B32_USCALED 0x046
|
||||
#define BRW_SURFACEFORMAT_R16G16B16A16_UNORM 0x080
|
||||
#define BRW_SURFACEFORMAT_R16G16B16A16_SNORM 0x081
|
||||
#define BRW_SURFACEFORMAT_R16G16B16A16_SINT 0x082
|
||||
#define BRW_SURFACEFORMAT_R16G16B16A16_UINT 0x083
|
||||
#define BRW_SURFACEFORMAT_R16G16B16A16_FLOAT 0x084
|
||||
#define BRW_SURFACEFORMAT_R32G32_FLOAT 0x085
|
||||
#define BRW_SURFACEFORMAT_R32G32_SINT 0x086
|
||||
#define BRW_SURFACEFORMAT_R32G32_UINT 0x087
|
||||
#define BRW_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS 0x088
|
||||
#define BRW_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT 0x089
|
||||
#define BRW_SURFACEFORMAT_L32A32_FLOAT 0x08A
|
||||
#define BRW_SURFACEFORMAT_R32G32_UNORM 0x08B
|
||||
#define BRW_SURFACEFORMAT_R32G32_SNORM 0x08C
|
||||
#define BRW_SURFACEFORMAT_R64_FLOAT 0x08D
|
||||
#define BRW_SURFACEFORMAT_R16G16B16X16_UNORM 0x08E
|
||||
#define BRW_SURFACEFORMAT_R16G16B16X16_FLOAT 0x08F
|
||||
#define BRW_SURFACEFORMAT_A32X32_FLOAT 0x090
|
||||
#define BRW_SURFACEFORMAT_L32X32_FLOAT 0x091
|
||||
#define BRW_SURFACEFORMAT_I32X32_FLOAT 0x092
|
||||
#define BRW_SURFACEFORMAT_R16G16B16A16_SSCALED 0x093
|
||||
#define BRW_SURFACEFORMAT_R16G16B16A16_USCALED 0x094
|
||||
#define BRW_SURFACEFORMAT_R32G32_SSCALED 0x095
|
||||
#define BRW_SURFACEFORMAT_R32G32_USCALED 0x096
|
||||
#define BRW_SURFACEFORMAT_B8G8R8A8_UNORM 0x0C0
|
||||
#define BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB 0x0C1
|
||||
#define BRW_SURFACEFORMAT_R10G10B10A2_UNORM 0x0C2
|
||||
#define BRW_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB 0x0C3
|
||||
#define BRW_SURFACEFORMAT_R10G10B10A2_UINT 0x0C4
|
||||
#define BRW_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM 0x0C5
|
||||
#define BRW_SURFACEFORMAT_R8G8B8A8_UNORM 0x0C7
|
||||
#define BRW_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB 0x0C8
|
||||
#define BRW_SURFACEFORMAT_R8G8B8A8_SNORM 0x0C9
|
||||
#define BRW_SURFACEFORMAT_R8G8B8A8_SINT 0x0CA
|
||||
#define BRW_SURFACEFORMAT_R8G8B8A8_UINT 0x0CB
|
||||
#define BRW_SURFACEFORMAT_R16G16_UNORM 0x0CC
|
||||
#define BRW_SURFACEFORMAT_R16G16_SNORM 0x0CD
|
||||
#define BRW_SURFACEFORMAT_R16G16_SINT 0x0CE
|
||||
#define BRW_SURFACEFORMAT_R16G16_UINT 0x0CF
|
||||
#define BRW_SURFACEFORMAT_R16G16_FLOAT 0x0D0
|
||||
#define BRW_SURFACEFORMAT_B10G10R10A2_UNORM 0x0D1
|
||||
#define BRW_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB 0x0D2
|
||||
#define BRW_SURFACEFORMAT_R11G11B10_FLOAT 0x0D3
|
||||
#define BRW_SURFACEFORMAT_R32_SINT 0x0D6
|
||||
#define BRW_SURFACEFORMAT_R32_UINT 0x0D7
|
||||
#define BRW_SURFACEFORMAT_R32_FLOAT 0x0D8
|
||||
#define BRW_SURFACEFORMAT_R24_UNORM_X8_TYPELESS 0x0D9
|
||||
#define BRW_SURFACEFORMAT_X24_TYPELESS_G8_UINT 0x0DA
|
||||
#define BRW_SURFACEFORMAT_L16A16_UNORM 0x0DF
|
||||
#define BRW_SURFACEFORMAT_I24X8_UNORM 0x0E0
|
||||
#define BRW_SURFACEFORMAT_L24X8_UNORM 0x0E1
|
||||
#define BRW_SURFACEFORMAT_A24X8_UNORM 0x0E2
|
||||
#define BRW_SURFACEFORMAT_I32_FLOAT 0x0E3
|
||||
#define BRW_SURFACEFORMAT_L32_FLOAT 0x0E4
|
||||
#define BRW_SURFACEFORMAT_A32_FLOAT 0x0E5
|
||||
#define BRW_SURFACEFORMAT_B8G8R8X8_UNORM 0x0E9
|
||||
#define BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB 0x0EA
|
||||
#define BRW_SURFACEFORMAT_R8G8B8X8_UNORM 0x0EB
|
||||
#define BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB 0x0EC
|
||||
#define BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP 0x0ED
|
||||
#define BRW_SURFACEFORMAT_B10G10R10X2_UNORM 0x0EE
|
||||
#define BRW_SURFACEFORMAT_L16A16_FLOAT 0x0F0
|
||||
#define BRW_SURFACEFORMAT_R32_UNORM 0x0F1
|
||||
#define BRW_SURFACEFORMAT_R32_SNORM 0x0F2
|
||||
#define BRW_SURFACEFORMAT_R10G10B10X2_USCALED 0x0F3
|
||||
#define BRW_SURFACEFORMAT_R8G8B8A8_SSCALED 0x0F4
|
||||
#define BRW_SURFACEFORMAT_R8G8B8A8_USCALED 0x0F5
|
||||
#define BRW_SURFACEFORMAT_R16G16_SSCALED 0x0F6
|
||||
#define BRW_SURFACEFORMAT_R16G16_USCALED 0x0F7
|
||||
#define BRW_SURFACEFORMAT_R32_SSCALED 0x0F8
|
||||
#define BRW_SURFACEFORMAT_R32_USCALED 0x0F9
|
||||
#define BRW_SURFACEFORMAT_B5G6R5_UNORM 0x100
|
||||
#define BRW_SURFACEFORMAT_B5G6R5_UNORM_SRGB 0x101
|
||||
#define BRW_SURFACEFORMAT_B5G5R5A1_UNORM 0x102
|
||||
#define BRW_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB 0x103
|
||||
#define BRW_SURFACEFORMAT_B4G4R4A4_UNORM 0x104
|
||||
#define BRW_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB 0x105
|
||||
#define BRW_SURFACEFORMAT_R8G8_UNORM 0x106
|
||||
#define BRW_SURFACEFORMAT_R8G8_SNORM 0x107
|
||||
#define BRW_SURFACEFORMAT_R8G8_SINT 0x108
|
||||
#define BRW_SURFACEFORMAT_R8G8_UINT 0x109
|
||||
#define BRW_SURFACEFORMAT_R16_UNORM 0x10A
|
||||
#define BRW_SURFACEFORMAT_R16_SNORM 0x10B
|
||||
#define BRW_SURFACEFORMAT_R16_SINT 0x10C
|
||||
#define BRW_SURFACEFORMAT_R16_UINT 0x10D
|
||||
#define BRW_SURFACEFORMAT_R16_FLOAT 0x10E
|
||||
#define BRW_SURFACEFORMAT_I16_UNORM 0x111
|
||||
#define BRW_SURFACEFORMAT_L16_UNORM 0x112
|
||||
#define BRW_SURFACEFORMAT_A16_UNORM 0x113
|
||||
#define BRW_SURFACEFORMAT_L8A8_UNORM 0x114
|
||||
#define BRW_SURFACEFORMAT_I16_FLOAT 0x115
|
||||
#define BRW_SURFACEFORMAT_L16_FLOAT 0x116
|
||||
#define BRW_SURFACEFORMAT_A16_FLOAT 0x117
|
||||
#define BRW_SURFACEFORMAT_R5G5_SNORM_B6_UNORM 0x119
|
||||
#define BRW_SURFACEFORMAT_B5G5R5X1_UNORM 0x11A
|
||||
#define BRW_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB 0x11B
|
||||
#define BRW_SURFACEFORMAT_R8G8_SSCALED 0x11C
|
||||
#define BRW_SURFACEFORMAT_R8G8_USCALED 0x11D
|
||||
#define BRW_SURFACEFORMAT_R16_SSCALED 0x11E
|
||||
#define BRW_SURFACEFORMAT_R16_USCALED 0x11F
|
||||
#define BRW_SURFACEFORMAT_R8_UNORM 0x140
|
||||
#define BRW_SURFACEFORMAT_R8_SNORM 0x141
|
||||
#define BRW_SURFACEFORMAT_R8_SINT 0x142
|
||||
#define BRW_SURFACEFORMAT_R8_UINT 0x143
|
||||
#define BRW_SURFACEFORMAT_A8_UNORM 0x144
|
||||
#define BRW_SURFACEFORMAT_I8_UNORM 0x145
|
||||
#define BRW_SURFACEFORMAT_L8_UNORM 0x146
|
||||
#define BRW_SURFACEFORMAT_P4A4_UNORM 0x147
|
||||
#define BRW_SURFACEFORMAT_A4P4_UNORM 0x148
|
||||
#define BRW_SURFACEFORMAT_R8_SSCALED 0x149
|
||||
#define BRW_SURFACEFORMAT_R8_USCALED 0x14A
|
||||
#define BRW_SURFACEFORMAT_R1_UINT 0x181
|
||||
#define BRW_SURFACEFORMAT_YCRCB_NORMAL 0x182
|
||||
#define BRW_SURFACEFORMAT_YCRCB_SWAPUVY 0x183
|
||||
#define BRW_SURFACEFORMAT_BC1_UNORM 0x186
|
||||
#define BRW_SURFACEFORMAT_BC2_UNORM 0x187
|
||||
#define BRW_SURFACEFORMAT_BC3_UNORM 0x188
|
||||
#define BRW_SURFACEFORMAT_BC4_UNORM 0x189
|
||||
#define BRW_SURFACEFORMAT_BC5_UNORM 0x18A
|
||||
#define BRW_SURFACEFORMAT_BC1_UNORM_SRGB 0x18B
|
||||
#define BRW_SURFACEFORMAT_BC2_UNORM_SRGB 0x18C
|
||||
#define BRW_SURFACEFORMAT_BC3_UNORM_SRGB 0x18D
|
||||
#define BRW_SURFACEFORMAT_MONO8 0x18E
|
||||
#define BRW_SURFACEFORMAT_YCRCB_SWAPUV 0x18F
|
||||
#define BRW_SURFACEFORMAT_YCRCB_SWAPY 0x190
|
||||
#define BRW_SURFACEFORMAT_DXT1_RGB 0x191
|
||||
#define BRW_SURFACEFORMAT_FXT1 0x192
|
||||
#define BRW_SURFACEFORMAT_R8G8B8_UNORM 0x193
|
||||
#define BRW_SURFACEFORMAT_R8G8B8_SNORM 0x194
|
||||
#define BRW_SURFACEFORMAT_R8G8B8_SSCALED 0x195
|
||||
#define BRW_SURFACEFORMAT_R8G8B8_USCALED 0x196
|
||||
#define BRW_SURFACEFORMAT_R64G64B64A64_FLOAT 0x197
|
||||
#define BRW_SURFACEFORMAT_R64G64B64_FLOAT 0x198
|
||||
#define BRW_SURFACEFORMAT_BC4_SNORM 0x199
|
||||
#define BRW_SURFACEFORMAT_BC5_SNORM 0x19A
|
||||
#define BRW_SURFACEFORMAT_R16G16B16_UNORM 0x19C
|
||||
#define BRW_SURFACEFORMAT_R16G16B16_SNORM 0x19D
|
||||
#define BRW_SURFACEFORMAT_R16G16B16_SSCALED 0x19E
|
||||
#define BRW_SURFACEFORMAT_R16G16B16_USCALED 0x19F
|
||||
|
||||
#define BRW_SURFACERETURNFORMAT_FLOAT32 0
|
||||
#define BRW_SURFACERETURNFORMAT_S1 1
|
||||
|
||||
#define BRW_SURFACE_1D 0
|
||||
#define BRW_SURFACE_2D 1
|
||||
#define BRW_SURFACE_3D 2
|
||||
#define BRW_SURFACE_CUBE 3
|
||||
#define BRW_SURFACE_BUFFER 4
|
||||
#define BRW_SURFACE_NULL 7
|
||||
|
||||
#define BRW_TEXCOORDMODE_WRAP 0
|
||||
#define BRW_TEXCOORDMODE_MIRROR 1
|
||||
#define BRW_TEXCOORDMODE_CLAMP 2
|
||||
#define BRW_TEXCOORDMODE_CUBE 3
|
||||
#define BRW_TEXCOORDMODE_CLAMP_BORDER 4
|
||||
#define BRW_TEXCOORDMODE_MIRROR_ONCE 5
|
||||
|
||||
#define BRW_THREAD_PRIORITY_NORMAL 0
|
||||
#define BRW_THREAD_PRIORITY_HIGH 1
|
||||
|
||||
#define BRW_TILEWALK_XMAJOR 0
|
||||
#define BRW_TILEWALK_YMAJOR 1
|
||||
|
||||
#define BRW_VERTEX_SUBPIXEL_PRECISION_8BITS 0
|
||||
#define BRW_VERTEX_SUBPIXEL_PRECISION_4BITS 1
|
||||
|
||||
#define BRW_VERTEXBUFFER_ACCESS_VERTEXDATA 0
|
||||
#define BRW_VERTEXBUFFER_ACCESS_INSTANCEDATA 1
|
||||
|
||||
#define BRW_VFCOMPONENT_NOSTORE 0
|
||||
#define BRW_VFCOMPONENT_STORE_SRC 1
|
||||
#define BRW_VFCOMPONENT_STORE_0 2
|
||||
#define BRW_VFCOMPONENT_STORE_1_FLT 3
|
||||
#define BRW_VFCOMPONENT_STORE_1_INT 4
|
||||
#define BRW_VFCOMPONENT_STORE_VID 5
|
||||
#define BRW_VFCOMPONENT_STORE_IID 6
|
||||
#define BRW_VFCOMPONENT_STORE_PID 7
|
||||
|
||||
|
||||
|
||||
/* Execution Unit (EU) defines
|
||||
*/
|
||||
|
||||
#define BRW_ALIGN_1 0
|
||||
#define BRW_ALIGN_16 1
|
||||
|
||||
#define BRW_ADDRESS_DIRECT 0
|
||||
#define BRW_ADDRESS_REGISTER_INDIRECT_REGISTER 1
|
||||
|
||||
#define BRW_CHANNEL_X 0
|
||||
#define BRW_CHANNEL_Y 1
|
||||
#define BRW_CHANNEL_Z 2
|
||||
#define BRW_CHANNEL_W 3
|
||||
|
||||
#define BRW_COMPRESSION_NONE 0
|
||||
#define BRW_COMPRESSION_2NDHALF 1
|
||||
#define BRW_COMPRESSION_COMPRESSED 2
|
||||
|
||||
#define BRW_CONDITIONAL_NONE 0
|
||||
#define BRW_CONDITIONAL_Z 1
|
||||
#define BRW_CONDITIONAL_NZ 2
|
||||
#define BRW_CONDITIONAL_EQ 1 /* Z */
|
||||
#define BRW_CONDITIONAL_NEQ 2 /* NZ */
|
||||
#define BRW_CONDITIONAL_G 3
|
||||
#define BRW_CONDITIONAL_GE 4
|
||||
#define BRW_CONDITIONAL_L 5
|
||||
#define BRW_CONDITIONAL_LE 6
|
||||
#define BRW_CONDITIONAL_C 7
|
||||
#define BRW_CONDITIONAL_O 8
|
||||
|
||||
#define BRW_DEBUG_NONE 0
|
||||
#define BRW_DEBUG_BREAKPOINT 1
|
||||
|
||||
#define BRW_DEPENDENCY_NORMAL 0
|
||||
#define BRW_DEPENDENCY_NOTCLEARED 1
|
||||
#define BRW_DEPENDENCY_NOTCHECKED 2
|
||||
#define BRW_DEPENDENCY_DISABLE 3
|
||||
|
||||
#define BRW_EXECUTE_1 0
|
||||
#define BRW_EXECUTE_2 1
|
||||
#define BRW_EXECUTE_4 2
|
||||
#define BRW_EXECUTE_8 3
|
||||
#define BRW_EXECUTE_16 4
|
||||
#define BRW_EXECUTE_32 5
|
||||
|
||||
#define BRW_HORIZONTAL_STRIDE_0 0
|
||||
#define BRW_HORIZONTAL_STRIDE_1 1
|
||||
#define BRW_HORIZONTAL_STRIDE_2 2
|
||||
#define BRW_HORIZONTAL_STRIDE_4 3
|
||||
|
||||
#define BRW_INSTRUCTION_NORMAL 0
|
||||
#define BRW_INSTRUCTION_SATURATE 1
|
||||
|
||||
#define BRW_MASK_ENABLE 0
|
||||
#define BRW_MASK_DISABLE 1
|
||||
|
||||
#define BRW_OPCODE_MOV 1
|
||||
#define BRW_OPCODE_SEL 2
|
||||
#define BRW_OPCODE_NOT 4
|
||||
#define BRW_OPCODE_AND 5
|
||||
#define BRW_OPCODE_OR 6
|
||||
#define BRW_OPCODE_XOR 7
|
||||
#define BRW_OPCODE_SHR 8
|
||||
#define BRW_OPCODE_SHL 9
|
||||
#define BRW_OPCODE_RSR 10
|
||||
#define BRW_OPCODE_RSL 11
|
||||
#define BRW_OPCODE_ASR 12
|
||||
#define BRW_OPCODE_CMP 16
|
||||
#define BRW_OPCODE_JMPI 32
|
||||
#define BRW_OPCODE_IF 34
|
||||
#define BRW_OPCODE_IFF 35
|
||||
#define BRW_OPCODE_ELSE 36
|
||||
#define BRW_OPCODE_ENDIF 37
|
||||
#define BRW_OPCODE_DO 38
|
||||
#define BRW_OPCODE_WHILE 39
|
||||
#define BRW_OPCODE_BREAK 40
|
||||
#define BRW_OPCODE_CONTINUE 41
|
||||
#define BRW_OPCODE_HALT 42
|
||||
#define BRW_OPCODE_MSAVE 44
|
||||
#define BRW_OPCODE_MRESTORE 45
|
||||
#define BRW_OPCODE_PUSH 46
|
||||
#define BRW_OPCODE_POP 47
|
||||
#define BRW_OPCODE_WAIT 48
|
||||
#define BRW_OPCODE_SEND 49
|
||||
#define BRW_OPCODE_ADD 64
|
||||
#define BRW_OPCODE_MUL 65
|
||||
#define BRW_OPCODE_AVG 66
|
||||
#define BRW_OPCODE_FRC 67
|
||||
#define BRW_OPCODE_RNDU 68
|
||||
#define BRW_OPCODE_RNDD 69
|
||||
#define BRW_OPCODE_RNDE 70
|
||||
#define BRW_OPCODE_RNDZ 71
|
||||
#define BRW_OPCODE_MAC 72
|
||||
#define BRW_OPCODE_MACH 73
|
||||
#define BRW_OPCODE_LZD 74
|
||||
#define BRW_OPCODE_SAD2 80
|
||||
#define BRW_OPCODE_SADA2 81
|
||||
#define BRW_OPCODE_DP4 84
|
||||
#define BRW_OPCODE_DPH 85
|
||||
#define BRW_OPCODE_DP3 86
|
||||
#define BRW_OPCODE_DP2 87
|
||||
#define BRW_OPCODE_DPA2 88
|
||||
#define BRW_OPCODE_LINE 89
|
||||
#define BRW_OPCODE_NOP 126
|
||||
|
||||
#define BRW_PREDICATE_NONE 0
|
||||
#define BRW_PREDICATE_NORMAL 1
|
||||
#define BRW_PREDICATE_ALIGN1_ANYV 2
|
||||
#define BRW_PREDICATE_ALIGN1_ALLV 3
|
||||
#define BRW_PREDICATE_ALIGN1_ANY2H 4
|
||||
#define BRW_PREDICATE_ALIGN1_ALL2H 5
|
||||
#define BRW_PREDICATE_ALIGN1_ANY4H 6
|
||||
#define BRW_PREDICATE_ALIGN1_ALL4H 7
|
||||
#define BRW_PREDICATE_ALIGN1_ANY8H 8
|
||||
#define BRW_PREDICATE_ALIGN1_ALL8H 9
|
||||
#define BRW_PREDICATE_ALIGN1_ANY16H 10
|
||||
#define BRW_PREDICATE_ALIGN1_ALL16H 11
|
||||
#define BRW_PREDICATE_ALIGN16_REPLICATE_X 2
|
||||
#define BRW_PREDICATE_ALIGN16_REPLICATE_Y 3
|
||||
#define BRW_PREDICATE_ALIGN16_REPLICATE_Z 4
|
||||
#define BRW_PREDICATE_ALIGN16_REPLICATE_W 5
|
||||
#define BRW_PREDICATE_ALIGN16_ANY4H 6
|
||||
#define BRW_PREDICATE_ALIGN16_ALL4H 7
|
||||
|
||||
#define BRW_ARCHITECTURE_REGISTER_FILE 0
|
||||
#define BRW_GENERAL_REGISTER_FILE 1
|
||||
#define BRW_MESSAGE_REGISTER_FILE 2
|
||||
#define BRW_IMMEDIATE_VALUE 3
|
||||
|
||||
#define BRW_REGISTER_TYPE_UD 0
|
||||
#define BRW_REGISTER_TYPE_D 1
|
||||
#define BRW_REGISTER_TYPE_UW 2
|
||||
#define BRW_REGISTER_TYPE_W 3
|
||||
#define BRW_REGISTER_TYPE_UB 4
|
||||
#define BRW_REGISTER_TYPE_B 5
|
||||
#define BRW_REGISTER_TYPE_VF 5 /* packed float vector, immediates only? */
|
||||
#define BRW_REGISTER_TYPE_HF 6
|
||||
#define BRW_REGISTER_TYPE_V 6 /* packed int vector, immediates only, uword dest only */
|
||||
#define BRW_REGISTER_TYPE_F 7
|
||||
|
||||
#define BRW_ARF_NULL 0x00
|
||||
#define BRW_ARF_ADDRESS 0x10
|
||||
#define BRW_ARF_ACCUMULATOR 0x20
|
||||
#define BRW_ARF_FLAG 0x30
|
||||
#define BRW_ARF_MASK 0x40
|
||||
#define BRW_ARF_MASK_STACK 0x50
|
||||
#define BRW_ARF_MASK_STACK_DEPTH 0x60
|
||||
#define BRW_ARF_STATE 0x70
|
||||
#define BRW_ARF_CONTROL 0x80
|
||||
#define BRW_ARF_NOTIFICATION_COUNT 0x90
|
||||
#define BRW_ARF_IP 0xA0
|
||||
|
||||
#define BRW_AMASK 0
|
||||
#define BRW_IMASK 1
|
||||
#define BRW_LMASK 2
|
||||
#define BRW_CMASK 3
|
||||
|
||||
|
||||
|
||||
#define BRW_THREAD_NORMAL 0
|
||||
#define BRW_THREAD_ATOMIC 1
|
||||
#define BRW_THREAD_SWITCH 2
|
||||
|
||||
#define BRW_VERTICAL_STRIDE_0 0
|
||||
#define BRW_VERTICAL_STRIDE_1 1
|
||||
#define BRW_VERTICAL_STRIDE_2 2
|
||||
#define BRW_VERTICAL_STRIDE_4 3
|
||||
#define BRW_VERTICAL_STRIDE_8 4
|
||||
#define BRW_VERTICAL_STRIDE_16 5
|
||||
#define BRW_VERTICAL_STRIDE_32 6
|
||||
#define BRW_VERTICAL_STRIDE_64 7
|
||||
#define BRW_VERTICAL_STRIDE_128 8
|
||||
#define BRW_VERTICAL_STRIDE_256 9
|
||||
#define BRW_VERTICAL_STRIDE_ONE_DIMENSIONAL 0xF
|
||||
|
||||
#define BRW_WIDTH_1 0
|
||||
#define BRW_WIDTH_2 1
|
||||
#define BRW_WIDTH_4 2
|
||||
#define BRW_WIDTH_8 3
|
||||
#define BRW_WIDTH_16 4
|
||||
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_1K 0
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_2K 1
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_4K 2
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_8K 3
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_16K 4
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_32K 5
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_64K 6
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_128K 7
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_256K 8
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_512K 9
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_1M 10
|
||||
#define BRW_STATELESS_BUFFER_BOUNDARY_2M 11
|
||||
|
||||
#define BRW_POLYGON_FACING_FRONT 0
|
||||
#define BRW_POLYGON_FACING_BACK 1
|
||||
|
||||
#define BRW_MESSAGE_TARGET_NULL 0
|
||||
#define BRW_MESSAGE_TARGET_MATH 1
|
||||
#define BRW_MESSAGE_TARGET_SAMPLER 2
|
||||
#define BRW_MESSAGE_TARGET_GATEWAY 3
|
||||
#define BRW_MESSAGE_TARGET_DATAPORT_READ 4
|
||||
#define BRW_MESSAGE_TARGET_DATAPORT_WRITE 5
|
||||
#define BRW_MESSAGE_TARGET_URB 6
|
||||
#define BRW_MESSAGE_TARGET_THREAD_SPAWNER 7
|
||||
|
||||
#define BRW_SAMPLER_RETURN_FORMAT_FLOAT32 0
|
||||
#define BRW_SAMPLER_RETURN_FORMAT_UINT32 2
|
||||
#define BRW_SAMPLER_RETURN_FORMAT_SINT32 3
|
||||
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE 0
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE 0
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS 0
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD8_KILLPIX 1
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD 1
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD 1
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_GRADIENTS 2
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS 2
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE 0
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE 2
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD4X2_RESINFO 2
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD8_RESINFO 2
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD16_RESINFO 2
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD4X2_LD 3
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD8_LD 3
|
||||
#define BRW_SAMPLER_MESSAGE_SIMD16_LD 3
|
||||
|
||||
#define BRW_DATAPORT_OWORD_BLOCK_1_OWORDLOW 0
|
||||
#define BRW_DATAPORT_OWORD_BLOCK_1_OWORDHIGH 1
|
||||
#define BRW_DATAPORT_OWORD_BLOCK_2_OWORDS 2
|
||||
#define BRW_DATAPORT_OWORD_BLOCK_4_OWORDS 3
|
||||
#define BRW_DATAPORT_OWORD_BLOCK_8_OWORDS 4
|
||||
|
||||
#define BRW_DATAPORT_OWORD_DUAL_BLOCK_1OWORD 0
|
||||
#define BRW_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS 2
|
||||
|
||||
#define BRW_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS 2
|
||||
#define BRW_DATAPORT_DWORD_SCATTERED_BLOCK_16DWORDS 3
|
||||
|
||||
#define BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ 0
|
||||
#define BRW_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ 1
|
||||
#define BRW_DATAPORT_READ_MESSAGE_DWORD_BLOCK_READ 2
|
||||
#define BRW_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ 3
|
||||
|
||||
#define BRW_DATAPORT_READ_TARGET_DATA_CACHE 0
|
||||
#define BRW_DATAPORT_READ_TARGET_RENDER_CACHE 1
|
||||
#define BRW_DATAPORT_READ_TARGET_SAMPLER_CACHE 2
|
||||
|
||||
#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE 0
|
||||
#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE_REPLICATED 1
|
||||
#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN01 2
|
||||
#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN23 3
|
||||
#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_SINGLE_SOURCE_SUBSPAN01 4
|
||||
|
||||
#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE 0
|
||||
#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE 1
|
||||
#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE 2
|
||||
#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE 3
|
||||
#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE 4
|
||||
#define BRW_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE 5
|
||||
#define BRW_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE 7
|
||||
|
||||
#define BRW_MATH_FUNCTION_INV 1
|
||||
#define BRW_MATH_FUNCTION_LOG 2
|
||||
#define BRW_MATH_FUNCTION_EXP 3
|
||||
#define BRW_MATH_FUNCTION_SQRT 4
|
||||
#define BRW_MATH_FUNCTION_RSQ 5
|
||||
#define BRW_MATH_FUNCTION_SIN 6 /* was 7 */
|
||||
#define BRW_MATH_FUNCTION_COS 7 /* was 8 */
|
||||
#define BRW_MATH_FUNCTION_SINCOS 8 /* was 6 */
|
||||
#define BRW_MATH_FUNCTION_TAN 9
|
||||
#define BRW_MATH_FUNCTION_POW 10
|
||||
#define BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER 11
|
||||
#define BRW_MATH_FUNCTION_INT_DIV_QUOTIENT 12
|
||||
#define BRW_MATH_FUNCTION_INT_DIV_REMAINDER 13
|
||||
|
||||
#define BRW_MATH_INTEGER_UNSIGNED 0
|
||||
#define BRW_MATH_INTEGER_SIGNED 1
|
||||
|
||||
#define BRW_MATH_PRECISION_FULL 0
|
||||
#define BRW_MATH_PRECISION_PARTIAL 1
|
||||
|
||||
#define BRW_MATH_SATURATE_NONE 0
|
||||
#define BRW_MATH_SATURATE_SATURATE 1
|
||||
|
||||
#define BRW_MATH_DATA_VECTOR 0
|
||||
#define BRW_MATH_DATA_SCALAR 1
|
||||
|
||||
#define BRW_URB_OPCODE_WRITE 0
|
||||
|
||||
#define BRW_URB_SWIZZLE_NONE 0
|
||||
#define BRW_URB_SWIZZLE_INTERLEAVE 1
|
||||
#define BRW_URB_SWIZZLE_TRANSPOSE 2
|
||||
|
||||
#define BRW_SCRATCH_SPACE_SIZE_1K 0
|
||||
#define BRW_SCRATCH_SPACE_SIZE_2K 1
|
||||
#define BRW_SCRATCH_SPACE_SIZE_4K 2
|
||||
#define BRW_SCRATCH_SPACE_SIZE_8K 3
|
||||
#define BRW_SCRATCH_SPACE_SIZE_16K 4
|
||||
#define BRW_SCRATCH_SPACE_SIZE_32K 5
|
||||
#define BRW_SCRATCH_SPACE_SIZE_64K 6
|
||||
#define BRW_SCRATCH_SPACE_SIZE_128K 7
|
||||
#define BRW_SCRATCH_SPACE_SIZE_256K 8
|
||||
#define BRW_SCRATCH_SPACE_SIZE_512K 9
|
||||
#define BRW_SCRATCH_SPACE_SIZE_1M 10
|
||||
#define BRW_SCRATCH_SPACE_SIZE_2M 11
|
||||
|
||||
|
||||
|
||||
|
||||
#define CMD_URB_FENCE 0x6000
|
||||
#define CMD_CONST_BUFFER_STATE 0x6001
|
||||
#define CMD_CONST_BUFFER 0x6002
|
||||
|
||||
#define CMD_STATE_BASE_ADDRESS 0x6101
|
||||
#define CMD_STATE_INSN_POINTER 0x6102
|
||||
#define CMD_PIPELINE_SELECT 0x6104
|
||||
|
||||
#define CMD_PIPELINED_STATE_POINTERS 0x7800
|
||||
#define CMD_BINDING_TABLE_PTRS 0x7801
|
||||
#define CMD_VERTEX_BUFFER 0x7808
|
||||
#define CMD_VERTEX_ELEMENT 0x7809
|
||||
#define CMD_INDEX_BUFFER 0x780a
|
||||
#define CMD_VF_STATISTICS 0x780b
|
||||
|
||||
#define CMD_DRAW_RECT 0x7900
|
||||
#define CMD_BLEND_CONSTANT_COLOR 0x7901
|
||||
#define CMD_CHROMA_KEY 0x7904
|
||||
#define CMD_DEPTH_BUFFER 0x7905
|
||||
#define CMD_POLY_STIPPLE_OFFSET 0x7906
|
||||
#define CMD_POLY_STIPPLE_PATTERN 0x7907
|
||||
#define CMD_LINE_STIPPLE_PATTERN 0x7908
|
||||
#define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7908
|
||||
|
||||
#define CMD_PIPE_CONTROL 0x7a00
|
||||
|
||||
#define CMD_3D_PRIM 0x7b00
|
||||
|
||||
#define CMD_MI_FLUSH 0x0200
|
||||
|
||||
|
||||
/* Various values from the R0 vertex header:
|
||||
*/
|
||||
#define R02_PRIM_END 0x1
|
||||
#define R02_PRIM_START 0x2
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
35
src/common.h
35
src/common.h
|
|
@ -130,13 +130,17 @@ extern void I830DPRINTF_stub(const char *filename, int line,
|
|||
|
||||
#define ADVANCE_LP_RING() do { \
|
||||
if (ringused > needed) \
|
||||
ErrorF("%s: ADVANCE_LP_RING: exceeded allocation %d/%d\n ", \
|
||||
__FUNCTION__, ringused, needed); \
|
||||
FatalError("%s: ADVANCE_LP_RING: exceeded allocation %d/%d\n ", \
|
||||
__FUNCTION__, ringused, needed); \
|
||||
else if (ringused < needed) \
|
||||
FatalError("%s: ADVANCE_LP_RING: under-used allocation %d/%d\n ", \
|
||||
__FUNCTION__, ringused, needed); \
|
||||
RecPtr->LpRing->tail = outring; \
|
||||
RecPtr->LpRing->space -= ringused; \
|
||||
if (outring & 0x07) \
|
||||
ErrorF("ADVANCE_LP_RING: " \
|
||||
"outring (0x%x) isn't on a QWord boundary\n", outring); \
|
||||
FatalError("%s: ADVANCE_LP_RING: " \
|
||||
"outring (0x%x) isn't on a QWord boundary\n", \
|
||||
__FUNCTION__, outring); \
|
||||
OUTREG(LP_RING + RING_TAIL, outring); \
|
||||
} while (0)
|
||||
|
||||
|
|
@ -277,6 +281,26 @@ extern int I810_DEBUG;
|
|||
#define PCI_CHIP_I945_GM_BRIDGE 0x27A0
|
||||
#endif
|
||||
|
||||
#ifndef PCI_CHIP_I965_G_1
|
||||
#define PCI_CHIP_I965_G_1 0x2982
|
||||
#define PCI_CHIP_I965_G_1_BRIDGE 0x2980
|
||||
#endif
|
||||
|
||||
#ifndef PCI_CHIP_I965_Q
|
||||
#define PCI_CHIP_I965_Q 0x2992
|
||||
#define PCI_CHIP_I965_Q_BRIDGE 0x2990
|
||||
#endif
|
||||
|
||||
#ifndef PCI_CHIP_I965_G
|
||||
#define PCI_CHIP_I965_G 0x29A2
|
||||
#define PCI_CHIP_I965_G_BRIDGE 0x29A0
|
||||
#endif
|
||||
|
||||
#ifndef PCI_CHIP_I946_GZ
|
||||
#define PCI_CHIP_I946_GZ 0x2972
|
||||
#define PCI_CHIP_I946_GZ_BRIDGE 0x2970
|
||||
#endif
|
||||
|
||||
#define IS_I810(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I810 || \
|
||||
pI810->PciInfo->chipType == PCI_CHIP_I810_DC100 || \
|
||||
pI810->PciInfo->chipType == PCI_CHIP_I810_E)
|
||||
|
|
@ -292,7 +316,8 @@ extern int I810_DEBUG;
|
|||
#define IS_I915GM(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I915_GM)
|
||||
#define IS_I945G(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I945_G)
|
||||
#define IS_I945GM(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I945_GM)
|
||||
#define IS_I9XX(pI810) (IS_I915G(pI810) || IS_I915GM(pI810) || IS_I945G(pI810) || IS_I945GM(pI810))
|
||||
#define IS_I965G(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I965_G || pI810->PciInfo->chipType == PCI_CHIP_I965_G_1 || pI810->PciInfo->chipType == PCI_CHIP_I965_Q || pI810->PciInfo->chipType == PCI_CHIP_I946_GZ)
|
||||
#define IS_I9XX(pI810) (IS_I915G(pI810) || IS_I915GM(pI810) || IS_I945G(pI810) || IS_I945GM(pI810) || IS_I965G(pI810))
|
||||
|
||||
#define IS_MOBILE(pI810) (IS_I830(pI810) || IS_I85X(pI810) || IS_I915GM(pI810) || IS_I945GM(pI810))
|
||||
|
||||
|
|
|
|||
|
|
@ -140,6 +140,10 @@ static SymTabRec I810Chipsets[] = {
|
|||
{PCI_CHIP_I915_GM, "915GM"},
|
||||
{PCI_CHIP_I945_G, "945G"},
|
||||
{PCI_CHIP_I945_GM, "945GM"},
|
||||
{PCI_CHIP_I965_G, "965G"},
|
||||
{PCI_CHIP_I965_G_1, "965G"},
|
||||
{PCI_CHIP_I965_Q, "965Q"},
|
||||
{PCI_CHIP_I946_GZ, "946GZ"},
|
||||
{-1, NULL}
|
||||
};
|
||||
|
||||
|
|
@ -159,6 +163,10 @@ static PciChipsets I810PciChipsets[] = {
|
|||
{PCI_CHIP_I915_GM, PCI_CHIP_I915_GM, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I945_G, PCI_CHIP_I945_G, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I945_GM, PCI_CHIP_I945_GM, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I965_G, PCI_CHIP_I965_G, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I965_G_1, PCI_CHIP_I965_G_1, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I965_Q, PCI_CHIP_I965_Q, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I946_GZ, PCI_CHIP_I946_GZ, RES_SHARED_VGA},
|
||||
{-1, -1, RES_UNDEFINED }
|
||||
};
|
||||
|
||||
|
|
@ -324,17 +332,16 @@ const char *I810driSymbols[] = {
|
|||
"DRICreatePCIBusID",
|
||||
NULL
|
||||
};
|
||||
#endif
|
||||
|
||||
const char *I810shadowSymbols[] = {
|
||||
"shadowInit",
|
||||
"shadowSetup",
|
||||
"shadowAdd",
|
||||
"shadowRemove",
|
||||
"shadowUpdateRotatePacked",
|
||||
NULL
|
||||
};
|
||||
|
||||
#endif /* I830_ONLY */
|
||||
|
||||
#ifndef I810_DEBUG
|
||||
int I810_DEBUG = (0
|
||||
/* | DEBUG_ALWAYS_SYNC */
|
||||
|
|
@ -578,6 +585,10 @@ I810Probe(DriverPtr drv, int flags)
|
|||
case PCI_CHIP_I915_GM:
|
||||
case PCI_CHIP_I945_G:
|
||||
case PCI_CHIP_I945_GM:
|
||||
case PCI_CHIP_I965_G:
|
||||
case PCI_CHIP_I965_G_1:
|
||||
case PCI_CHIP_I965_Q:
|
||||
case PCI_CHIP_I946_GZ:
|
||||
xf86SetEntitySharable(usedChips[i]);
|
||||
|
||||
/* Allocate an entity private if necessary */
|
||||
|
|
|
|||
934
src/i810_reg.h
934
src/i810_reg.h
|
|
@ -293,8 +293,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define STATE_VAR_UPDATE_DISABLE 0x02
|
||||
#define PAL_STIP_DISABLE 0x01
|
||||
|
||||
#define INST_DONE 0x2090
|
||||
#define INST_PS 0x20c4
|
||||
|
||||
#define MEMMODE 0x20dc
|
||||
|
||||
|
|
@ -303,6 +301,66 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
*/
|
||||
#define IPEIR 0x2088
|
||||
#define IPEHR 0x208C
|
||||
#define INST_DONE 0x2090
|
||||
#define INST_PS 0x20c4
|
||||
#define IPEIR_I965 0x2064 /* i965 */
|
||||
#define IPEHR_I965 0x2068 /* i965 */
|
||||
#define INST_DONE_I965 0x206c
|
||||
#define INST_PS_I965 0x2070
|
||||
#define ACTHD 0x2074
|
||||
#define DMA_FADD_P 0x2078
|
||||
#define INST_DONE_1 0x207c
|
||||
|
||||
#define CACHE_MODE_0 0x2120
|
||||
#define CACHE_MODE_1 0x2124
|
||||
#define MI_ARB_STATE 0x20e4
|
||||
|
||||
#define WIZ_CTL 0x7c00
|
||||
#define WIZ_CTL_SINGLE_SUBSPAN (1<<6)
|
||||
#define WIZ_CTL_IGNORE_STALLS (1<<5)
|
||||
|
||||
#define SVG_WORK_CTL 0x7408
|
||||
|
||||
#define TS_CTL 0x7e00
|
||||
#define TS_MUX_ERR_CODE (0<<8)
|
||||
#define TS_MUX_URB_0 (1<<8)
|
||||
#define TS_MUX_DISPATCH_ID_0 (10<<8)
|
||||
#define TS_MUX_ERR_CODE_VALID (15<<8)
|
||||
#define TS_MUX_TID_0 (16<<8)
|
||||
#define TS_MUX_EUID_0 (18<<8)
|
||||
#define TS_MUX_FFID_0 (22<<8)
|
||||
#define TS_MUX_EOT (26<<8)
|
||||
#define TS_MUX_SIDEBAND_0 (27<<8)
|
||||
#define TS_SNAP_ALL_CHILD (1<<2)
|
||||
#define TS_SNAP_ALL_ROOT (1<<1)
|
||||
#define TS_SNAP_ENABLE (1<<0)
|
||||
|
||||
#define TS_DEBUG_DATA 0x7e0c
|
||||
|
||||
#define TD_CTL 0x8000
|
||||
#define TD_CTL2 0x8004
|
||||
|
||||
|
||||
#define ECOSKPD 0x21d0
|
||||
#define EXCC 0x2028
|
||||
|
||||
/* I965 debug regs:
|
||||
*/
|
||||
#define IA_VERTICES_COUNT_QW 0x2310
|
||||
#define IA_PRIMITIVES_COUNT_QW 0x2318
|
||||
#define VS_INVOCATION_COUNT_QW 0x2320
|
||||
#define GS_INVOCATION_COUNT_QW 0x2328
|
||||
#define GS_PRIMITIVES_COUNT_QW 0x2330
|
||||
#define CL_INVOCATION_COUNT_QW 0x2338
|
||||
#define CL_PRIMITIVES_COUNT_QW 0x2340
|
||||
#define PS_INVOCATION_COUNT_QW 0x2348
|
||||
#define PS_DEPTH_COUNT_QW 0x2350
|
||||
#define TIMESTAMP_QW 0x2358
|
||||
#define CLKCMP_QW 0x2360
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* General error reporting regs, p296
|
||||
|
|
@ -366,6 +424,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define FENCE 0x2000
|
||||
#define FENCE_NR 8
|
||||
|
||||
#define FENCE_NEW 0x3000
|
||||
#define FENCE_NEW_NR 16
|
||||
|
||||
#define FENCE_LINEAR 0
|
||||
#define FENCE_XMAJOR 1
|
||||
#define FENCE_YMAJOR 2
|
||||
|
||||
#define I915G_FENCE_START_MASK 0x0ff00000
|
||||
|
||||
#define I830_FENCE_START_MASK 0x07f80000
|
||||
|
|
@ -772,6 +837,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define DSPBPOS 0x7118C
|
||||
#define DSPBSIZE 0x71190
|
||||
|
||||
#define DSPASURF 0x7019C
|
||||
#define DSPATILEOFF 0x701A4
|
||||
|
||||
#define DSPBSURF 0x7119C
|
||||
#define DSPBTILEOFF 0x711A4
|
||||
|
||||
/* 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)| \
|
||||
|
|
@ -837,6 +908,9 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define I852_GME 0x2
|
||||
#define I852_GM 0x5
|
||||
|
||||
#define CMD_MI (0 << 29)
|
||||
#define CMD_2D (2 << 29)
|
||||
#define CMD_3D (3 << 29)
|
||||
/* BLT commands */
|
||||
#define COLOR_BLT_CMD ((2<<29)|(0x40<<22)|(0x3))
|
||||
#define COLOR_BLT_WRITE_ALPHA (1<<21)
|
||||
|
|
@ -867,14 +941,623 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define XY_MONO_SRC_BLT_WRITE_RGB (1<<20)
|
||||
|
||||
/* 3d state */
|
||||
#define STATE3D_ANTI_ALIASING (CMD_3D | (0x06<<24))
|
||||
#define LINE_CAP_WIDTH_MODIFY (1 << 16)
|
||||
#define LINE_CAP_WIDTH_1_0 (0x1 << 14)
|
||||
#define LINE_WIDTH_MODIFY (1 << 8)
|
||||
#define LINE_WIDTH_1_0 (0x1 << 6)
|
||||
|
||||
#define STATE3D_RASTERIZATION_RULES (CMD_3D | (0x07<<24))
|
||||
#define ENABLE_POINT_RASTER_RULE (1<<15)
|
||||
#define OGL_POINT_RASTER_RULE (1<<13)
|
||||
#define ENABLE_TEXKILL_3D_4D (1<<10)
|
||||
#define TEXKILL_3D (0<<9)
|
||||
#define TEXKILL_4D (1<<9)
|
||||
#define ENABLE_LINE_STRIP_PROVOKE_VRTX (1<<8)
|
||||
#define ENABLE_TRI_FAN_PROVOKE_VRTX (1<<5)
|
||||
#define LINE_STRIP_PROVOKE_VRTX(x) ((x)<<6)
|
||||
#define TRI_FAN_PROVOKE_VRTX(x) ((x)<<3)
|
||||
|
||||
#define STATE3D_INDEPENDENT_ALPHA_BLEND (CMD_3D | (0x0b<<24))
|
||||
#define IAB_MODIFY_ENABLE (1<<23)
|
||||
#define IAB_ENABLE (1<<22)
|
||||
#define IAB_MODIFY_FUNC (1<<21)
|
||||
#define IAB_FUNC_SHIFT 16
|
||||
#define IAB_MODIFY_SRC_FACTOR (1<<11)
|
||||
#define IAB_SRC_FACTOR_SHIFT 6
|
||||
#define IAB_SRC_FACTOR_MASK (BLENDFACT_MASK<<6)
|
||||
#define IAB_MODIFY_DST_FACTOR (1<<5)
|
||||
#define IAB_DST_FACTOR_SHIFT 0
|
||||
#define IAB_DST_FACTOR_MASK (BLENDFACT_MASK<<0)
|
||||
|
||||
#define BLENDFUNC_ADD 0x0
|
||||
#define BLENDFUNC_SUBTRACT 0x1
|
||||
#define BLENDFUNC_REVERSE_SUBTRACT 0x2
|
||||
#define BLENDFUNC_MIN 0x3
|
||||
#define BLENDFUNC_MAX 0x4
|
||||
#define BLENDFUNC_MASK 0x7
|
||||
|
||||
#define BLENDFACT_ZERO 0x01
|
||||
#define BLENDFACT_ONE 0x02
|
||||
#define BLENDFACT_SRC_COLR 0x03
|
||||
#define BLENDFACT_INV_SRC_COLR 0x04
|
||||
#define BLENDFACT_SRC_ALPHA 0x05
|
||||
#define BLENDFACT_INV_SRC_ALPHA 0x06
|
||||
#define BLENDFACT_DST_ALPHA 0x07
|
||||
#define BLENDFACT_INV_DST_ALPHA 0x08
|
||||
#define BLENDFACT_DST_COLR 0x09
|
||||
#define BLENDFACT_INV_DST_COLR 0x0a
|
||||
#define BLENDFACT_SRC_ALPHA_SATURATE 0x0b
|
||||
#define BLENDFACT_CONST_COLOR 0x0c
|
||||
#define BLENDFACT_INV_CONST_COLOR 0x0d
|
||||
#define BLENDFACT_CONST_ALPHA 0x0e
|
||||
#define BLENDFACT_INV_CONST_ALPHA 0x0f
|
||||
#define BLENDFACT_MASK 0x0f
|
||||
|
||||
#define STATE3D_MODES_4 (CMD_3D | (0x0d<<24))
|
||||
#define ENABLE_LOGIC_OP_FUNC (1<<23)
|
||||
#define LOGIC_OP_FUNC(x) ((x)<<18)
|
||||
#define LOGICOP_MASK (0xf<<18)
|
||||
#define MODE4_ENABLE_STENCIL_TEST_MASK ((1<<17)|(0xff00))
|
||||
#define ENABLE_STENCIL_TEST_MASK (1<<17)
|
||||
#define STENCIL_TEST_MASK(x) ((x)<<8)
|
||||
#define MODE4_ENABLE_STENCIL_WRITE_MASK ((1<<16)|(0x00ff))
|
||||
#define ENABLE_STENCIL_WRITE_MASK (1<<16)
|
||||
#define STENCIL_WRITE_MASK(x) ((x)&0xff)
|
||||
|
||||
#define LOGICOP_CLEAR 0
|
||||
#define LOGICOP_NOR 0x1
|
||||
#define LOGICOP_AND_INV 0x2
|
||||
#define LOGICOP_COPY_INV 0x3
|
||||
#define LOGICOP_AND_RVRSE 0x4
|
||||
#define LOGICOP_INV 0x5
|
||||
#define LOGICOP_XOR 0x6
|
||||
#define LOGICOP_NAND 0x7
|
||||
#define LOGICOP_AND 0x8
|
||||
#define LOGICOP_EQUIV 0x9
|
||||
#define LOGICOP_NOOP 0xa
|
||||
#define LOGICOP_OR_INV 0xb
|
||||
#define LOGICOP_COPY 0xc
|
||||
#define LOGICOP_OR_RVRSE 0xd
|
||||
#define LOGICOP_OR 0xe
|
||||
#define LOGICOP_SET 0xf
|
||||
|
||||
#define STATE3D_COORD_SET_BINDINGS (CMD_3D | (0x16<<24))
|
||||
#define CSB_TCB(iunit,eunit) ((eunit) << ((iunit) * 3))
|
||||
|
||||
#define STATE3D_SCISSOR_ENABLE (CMD_3D | (0x1c<<24)|(0x10<<19))
|
||||
#define ENABLE_SCISSOR_RECT ((1<<1) | 1)
|
||||
#define DISABLE_SCISSOR_RECT ((1<<1) | 0)
|
||||
|
||||
#define STATE3D_MAP_STATE (CMD_3D | (0x1d<<24)|(0x00<<16))
|
||||
|
||||
#define MS1_MAPMASK_SHIFT 0
|
||||
#define MS1_MAPMASK_MASK (0x8fff<<0)
|
||||
|
||||
#define MS2_UNTRUSTED_SURFACE (1<<31)
|
||||
#define MS2_ADDRESS_MASK 0xfffffffc
|
||||
#define MS2_VERTICAL_LINE_STRIDE (1<<1)
|
||||
#define MS2_VERTICAL_OFFSET (1<<1)
|
||||
|
||||
#define MS3_HEIGHT_SHIFT 21
|
||||
#define MS3_WIDTH_SHIFT 10
|
||||
#define MS3_PALETTE_SELECT (1<<9)
|
||||
#define MS3_MAPSURF_FORMAT_SHIFT 7
|
||||
#define MS3_MAPSURF_FORMAT_MASK (0x7<<7)
|
||||
#define MAPSURF_8BIT (1<<7)
|
||||
#define MAPSURF_16BIT (2<<7)
|
||||
#define MAPSURF_32BIT (3<<7)
|
||||
#define MAPSURF_422 (5<<7)
|
||||
#define MAPSURF_COMPRESSED (6<<7)
|
||||
#define MAPSURF_4BIT_INDEXED (7<<7)
|
||||
#define MS3_MT_FORMAT_MASK (0x7 << 3)
|
||||
#define MS3_MT_FORMAT_SHIFT 3
|
||||
#define MT_4BIT_IDX_ARGB8888 (7<<3) /* SURFACE_4BIT_INDEXED */
|
||||
#define MT_8BIT_I8 (0<<3) /* SURFACE_8BIT */
|
||||
#define MT_8BIT_L8 (1<<3)
|
||||
#define MT_8BIT_A8 (4<<3)
|
||||
#define MT_8BIT_MONO8 (5<<3)
|
||||
#define MT_16BIT_RGB565 (0<<3) /* SURFACE_16BIT */
|
||||
#define MT_16BIT_ARGB1555 (1<<3)
|
||||
#define MT_16BIT_ARGB4444 (2<<3)
|
||||
#define MT_16BIT_AY88 (3<<3)
|
||||
#define MT_16BIT_88DVDU (5<<3)
|
||||
#define MT_16BIT_BUMP_655LDVDU (6<<3)
|
||||
#define MT_16BIT_I16 (7<<3)
|
||||
#define MT_16BIT_L16 (8<<3)
|
||||
#define MT_16BIT_A16 (9<<3)
|
||||
#define MT_32BIT_ARGB8888 (0<<3) /* SURFACE_32BIT */
|
||||
#define MT_32BIT_ABGR8888 (1<<3)
|
||||
#define MT_32BIT_XRGB8888 (2<<3)
|
||||
#define MT_32BIT_XBGR8888 (3<<3)
|
||||
#define MT_32BIT_QWVU8888 (4<<3)
|
||||
#define MT_32BIT_AXVU8888 (5<<3)
|
||||
#define MT_32BIT_LXVU8888 (6<<3)
|
||||
#define MT_32BIT_XLVU8888 (7<<3)
|
||||
#define MT_32BIT_ARGB2101010 (8<<3)
|
||||
#define MT_32BIT_ABGR2101010 (9<<3)
|
||||
#define MT_32BIT_AWVU2101010 (0xA<<3)
|
||||
#define MT_32BIT_GR1616 (0xB<<3)
|
||||
#define MT_32BIT_VU1616 (0xC<<3)
|
||||
#define MT_32BIT_xI824 (0xD<<3)
|
||||
#define MT_32BIT_xA824 (0xE<<3)
|
||||
#define MT_32BIT_xL824 (0xF<<3)
|
||||
#define MT_422_YCRCB_SWAPY (0<<3) /* SURFACE_422 */
|
||||
#define MT_422_YCRCB_NORMAL (1<<3)
|
||||
#define MT_422_YCRCB_SWAPUV (2<<3)
|
||||
#define MT_422_YCRCB_SWAPUVY (3<<3)
|
||||
#define MT_COMPRESS_DXT1 (0<<3) /* SURFACE_COMPRESSED */
|
||||
#define MT_COMPRESS_DXT2_3 (1<<3)
|
||||
#define MT_COMPRESS_DXT4_5 (2<<3)
|
||||
#define MT_COMPRESS_FXT1 (3<<3)
|
||||
#define MT_COMPRESS_DXT1_RGB (4<<3)
|
||||
#define MS3_USE_FENCE_REGS (1<<2)
|
||||
#define MS3_TILED_SURFACE (1<<1)
|
||||
#define MS3_TILE_WALK (1<<0)
|
||||
|
||||
#define MS4_PITCH_SHIFT 21
|
||||
#define MS4_CUBE_FACE_ENA_NEGX (1<<20)
|
||||
#define MS4_CUBE_FACE_ENA_POSX (1<<19)
|
||||
#define MS4_CUBE_FACE_ENA_NEGY (1<<18)
|
||||
#define MS4_CUBE_FACE_ENA_POSY (1<<17)
|
||||
#define MS4_CUBE_FACE_ENA_NEGZ (1<<16)
|
||||
#define MS4_CUBE_FACE_ENA_POSZ (1<<15)
|
||||
#define MS4_CUBE_FACE_ENA_MASK (0x3f<<15)
|
||||
#define MS4_MAX_LOD_SHIFT 9
|
||||
#define MS4_MAX_LOD_MASK (0x3f<<9)
|
||||
#define MS4_MIP_LAYOUT_LEGACY (0<<8)
|
||||
#define MS4_MIP_LAYOUT_BELOW_LPT (0<<8)
|
||||
#define MS4_MIP_LAYOUT_RIGHT_LPT (1<<8)
|
||||
#define MS4_VOLUME_DEPTH_SHIFT 0
|
||||
#define MS4_VOLUME_DEPTH_MASK (0xff<<0)
|
||||
|
||||
#define STATE3D_SAMPLER_STATE (CMD_3D | (0x1d<<24)|(0x01<<16))
|
||||
|
||||
#define SS1_MAPMASK_SHIFT 0
|
||||
#define SS1_MAPMASK_MASK (0x8fff<<0)
|
||||
|
||||
#define SS2_REVERSE_GAMMA_ENABLE (1<<31)
|
||||
#define SS2_PLANAR_TO_PACKED_ENABLE (1<<30)
|
||||
#define SS2_COLORSPACE_CONVERSION (1<<29)
|
||||
#define SS2_CHROMAKEY_SHIFT 27
|
||||
#define SS2_BASE_MIP_LEVEL_SHIFT 22
|
||||
#define SS2_BASE_MIP_LEVEL_MASK (0x1f<<22)
|
||||
#define SS2_MIP_FILTER_SHIFT 20
|
||||
#define SS2_MIP_FILTER_MASK (0x3<<20)
|
||||
#define MIPFILTER_NONE 0
|
||||
#define MIPFILTER_NEAREST 1
|
||||
#define MIPFILTER_LINEAR 3
|
||||
#define SS2_MAG_FILTER_SHIFT 17
|
||||
#define SS2_MAG_FILTER_MASK (0x7<<17)
|
||||
#define FILTER_NEAREST 0
|
||||
#define FILTER_LINEAR 1
|
||||
#define FILTER_ANISOTROPIC 2
|
||||
#define FILTER_4X4_1 3
|
||||
#define FILTER_4X4_2 4
|
||||
#define FILTER_4X4_FLAT 5
|
||||
#define FILTER_6X5_MONO 6 /* XXX - check */
|
||||
#define SS2_MIN_FILTER_SHIFT 14
|
||||
#define SS2_MIN_FILTER_MASK (0x7<<14)
|
||||
#define SS2_LOD_BIAS_SHIFT 5
|
||||
#define SS2_LOD_BIAS_ONE (0x10<<5)
|
||||
#define SS2_LOD_BIAS_MASK (0x1ff<<5)
|
||||
/* Shadow requires:
|
||||
* MT_X8{I,L,A}24 or MT_{I,L,A}16 texture format
|
||||
* FILTER_4X4_x MIN and MAG filters
|
||||
*/
|
||||
#define SS2_SHADOW_ENABLE (1<<4)
|
||||
#define SS2_MAX_ANISO_MASK (1<<3)
|
||||
#define SS2_MAX_ANISO_2 (0<<3)
|
||||
#define SS2_MAX_ANISO_4 (1<<3)
|
||||
#define SS2_SHADOW_FUNC_SHIFT 0
|
||||
#define SS2_SHADOW_FUNC_MASK (0x7<<0)
|
||||
/* SS2_SHADOW_FUNC values: see COMPAREFUNC_* */
|
||||
|
||||
#define SS3_MIN_LOD_SHIFT 24
|
||||
#define SS3_MIN_LOD_ONE (0x10<<24)
|
||||
#define SS3_MIN_LOD_MASK (0xff<<24)
|
||||
#define SS3_KILL_PIXEL_ENABLE (1<<17)
|
||||
#define SS3_TCX_ADDR_MODE_SHIFT 12
|
||||
#define SS3_TCX_ADDR_MODE_MASK (0x7<<12)
|
||||
#define TEXCOORDMODE_WRAP 0
|
||||
#define TEXCOORDMODE_MIRROR 1
|
||||
#define TEXCOORDMODE_CLAMP_EDGE 2
|
||||
#define TEXCOORDMODE_CUBE 3
|
||||
#define TEXCOORDMODE_CLAMP_BORDER 4
|
||||
#define TEXCOORDMODE_MIRROR_ONCE 5
|
||||
#define SS3_TCY_ADDR_MODE_SHIFT 9
|
||||
#define SS3_TCY_ADDR_MODE_MASK (0x7<<9)
|
||||
#define SS3_TCZ_ADDR_MODE_SHIFT 6
|
||||
#define SS3_TCZ_ADDR_MODE_MASK (0x7<<6)
|
||||
#define SS3_NORMALIZED_COORDS (1<<5)
|
||||
#define SS3_TEXTUREMAP_INDEX_SHIFT 1
|
||||
#define SS3_TEXTUREMAP_INDEX_MASK (0xf<<1)
|
||||
#define SS3_DEINTERLACER_ENABLE (1<<0)
|
||||
|
||||
#define SS4_BORDER_COLOR_MASK (~0)
|
||||
|
||||
#define STATE3D_LOAD_STATE_IMMEDIATE_1 (CMD_3D | (0x1d<<24)|(0x04<<16))
|
||||
#define I1_LOAD_S(n) (1 << (4 + n))
|
||||
|
||||
#define S0_VB_OFFSET_MASK 0xffffffc
|
||||
#define S0_AUTO_CACHE_INV_DISABLE (1<<0)
|
||||
|
||||
#define S1_VERTEX_WIDTH_SHIFT 24
|
||||
#define S1_VERTEX_WIDTH_MASK (0x3f<<24)
|
||||
#define S1_VERTEX_PITCH_SHIFT 16
|
||||
#define S1_VERTEX_PITCH_MASK (0x3f<<16)
|
||||
|
||||
#define TEXCOORDFMT_2D 0x0
|
||||
#define TEXCOORDFMT_3D 0x1
|
||||
#define TEXCOORDFMT_4D 0x2
|
||||
#define TEXCOORDFMT_1D 0x3
|
||||
#define TEXCOORDFMT_2D_16 0x4
|
||||
#define TEXCOORDFMT_4D_16 0x5
|
||||
#define TEXCOORDFMT_NOT_PRESENT 0xf
|
||||
#define S2_TEXCOORD_FMT0_MASK 0xf
|
||||
#define S2_TEXCOORD_FMT1_SHIFT 4
|
||||
#define S2_TEXCOORD_FMT(unit, type) ((type)<<(unit*4))
|
||||
#define S2_TEXCOORD_NONE (~0)
|
||||
|
||||
/* S3 not interesting */
|
||||
|
||||
#define S4_POINT_WIDTH_SHIFT 23
|
||||
#define S4_POINT_WIDTH_MASK (0x1ff<<23)
|
||||
#define S4_LINE_WIDTH_SHIFT 19
|
||||
#define S4_LINE_WIDTH_ONE (0x2<<19)
|
||||
#define S4_LINE_WIDTH_MASK (0xf<<19)
|
||||
#define S4_FLATSHADE_ALPHA (1<<18)
|
||||
#define S4_FLATSHADE_FOG (1<<17)
|
||||
#define S4_FLATSHADE_SPECULAR (1<<16)
|
||||
#define S4_FLATSHADE_COLOR (1<<15)
|
||||
#define S4_CULLMODE_BOTH (0<<13)
|
||||
#define S4_CULLMODE_NONE (1<<13)
|
||||
#define S4_CULLMODE_CW (2<<13)
|
||||
#define S4_CULLMODE_CCW (3<<13)
|
||||
#define S4_CULLMODE_MASK (3<<13)
|
||||
#define S4_VFMT_POINT_WIDTH (1<<12)
|
||||
#define S4_VFMT_SPEC_FOG (1<<11)
|
||||
#define S4_VFMT_COLOR (1<<10)
|
||||
#define S4_VFMT_DEPTH_OFFSET (1<<9)
|
||||
#define S4_VFMT_XYZ (1<<6)
|
||||
#define S4_VFMT_XYZW (2<<6)
|
||||
#define S4_VFMT_XY (3<<6)
|
||||
#define S4_VFMT_XYW (4<<6)
|
||||
#define S4_VFMT_XYZW_MASK (7<<6)
|
||||
#define S4_FORCE_DEFAULT_DIFFUSE (1<<5)
|
||||
#define S4_FORCE_DEFAULT_SPECULAR (1<<4)
|
||||
#define S4_LOCAL_DEPTH_OFFSET_ENABLE (1<<3)
|
||||
#define S4_VFMT_FOG_PARAM (1<<2)
|
||||
#define S4_SPRITE_POINT_ENABLE (1<<1)
|
||||
#define S4_LINE_ANTIALIAS_ENABLE (1<<0)
|
||||
|
||||
#define S4_VFMT_MASK (S4_VFMT_POINT_WIDTH | \
|
||||
S4_VFMT_SPEC_FOG | \
|
||||
S4_VFMT_COLOR | \
|
||||
S4_VFMT_DEPTH_OFFSET | \
|
||||
S4_VFMT_XYZW_MASK | \
|
||||
S4_VFMT_FOG_PARAM)
|
||||
|
||||
|
||||
#define S5_WRITEDISABLE_ALPHA (1<<31)
|
||||
#define S5_WRITEDISABLE_RED (1<<30)
|
||||
#define S5_WRITEDISABLE_GREEN (1<<29)
|
||||
#define S5_WRITEDISABLE_BLUE (1<<28)
|
||||
#define S5_WRITEDISABLE_MASK (0xf<<28)
|
||||
#define S5_FORCE_DEFAULT_POINT_SIZE (1<<27)
|
||||
#define S5_LAST_PIXEL_ENABLE (1<<26)
|
||||
#define S5_GLOBAL_DEPTH_OFFSET_ENABLE (1<<25)
|
||||
#define S5_FOG_ENABLE (1<<24)
|
||||
#define S5_STENCIL_REF_SHIFT 16
|
||||
#define S5_STENCIL_REF_MASK (0xff<<16)
|
||||
#define S5_STENCIL_TEST_FUNC_SHIFT 13
|
||||
#define S5_STENCIL_TEST_FUNC_MASK (0x7<<13)
|
||||
#define S5_STENCIL_FAIL_SHIFT 10
|
||||
#define S5_STENCIL_FAIL_MASK (0x7<<10)
|
||||
#define S5_STENCIL_PASS_Z_FAIL_SHIFT 7
|
||||
#define S5_STENCIL_PASS_Z_FAIL_MASK (0x7<<7)
|
||||
#define S5_STENCIL_PASS_Z_PASS_SHIFT 4
|
||||
#define S5_STENCIL_PASS_Z_PASS_MASK (0x7<<4)
|
||||
#define S5_STENCIL_WRITE_ENABLE (1<<3)
|
||||
#define S5_STENCIL_TEST_ENABLE (1<<2)
|
||||
#define S5_COLOR_DITHER_ENABLE (1<<1)
|
||||
#define S5_LOGICOP_ENABLE (1<<0)
|
||||
|
||||
|
||||
#define S6_ALPHA_TEST_ENABLE (1<<31)
|
||||
#define S6_ALPHA_TEST_FUNC_SHIFT 28
|
||||
#define S6_ALPHA_TEST_FUNC_MASK (0x7<<28)
|
||||
#define S6_ALPHA_REF_SHIFT 20
|
||||
#define S6_ALPHA_REF_MASK (0xff<<20)
|
||||
#define S6_DEPTH_TEST_ENABLE (1<<19)
|
||||
#define S6_DEPTH_TEST_FUNC_SHIFT 16
|
||||
#define S6_DEPTH_TEST_FUNC_MASK (0x7<<16)
|
||||
#define S6_CBUF_BLEND_ENABLE (1<<15)
|
||||
#define S6_CBUF_BLEND_FUNC_SHIFT 12
|
||||
#define S6_CBUF_BLEND_FUNC_MASK (0x7<<12)
|
||||
#define S6_CBUF_SRC_BLEND_FACT_SHIFT 8
|
||||
#define S6_CBUF_SRC_BLEND_FACT_MASK (0xf<<8)
|
||||
#define S6_CBUF_DST_BLEND_FACT_SHIFT 4
|
||||
#define S6_CBUF_DST_BLEND_FACT_MASK (0xf<<4)
|
||||
#define S6_DEPTH_WRITE_ENABLE (1<<3)
|
||||
#define S6_COLOR_WRITE_ENABLE (1<<2)
|
||||
#define S6_TRISTRIP_PV_SHIFT 0
|
||||
#define S6_TRISTRIP_PV_MASK (0x3<<0)
|
||||
|
||||
#define S7_DEPTH_OFFSET_CONST_MASK ~0
|
||||
|
||||
#define STATE3D_PIXEL_SHADER_PROGRAM (CMD_3D | (0x1d<<24)|(0x05<<16))
|
||||
|
||||
#define REG_TYPE_R 0 /* temporary regs, no need to
|
||||
* dcl, must be written before
|
||||
* read -- Preserved between
|
||||
* phases.
|
||||
*/
|
||||
#define REG_TYPE_T 1 /* Interpolated values, must be
|
||||
* dcl'ed before use.
|
||||
*
|
||||
* 0..7: texture coord,
|
||||
* 8: diffuse spec,
|
||||
* 9: specular color,
|
||||
* 10: fog parameter in w.
|
||||
*/
|
||||
#define REG_TYPE_CONST 2 /* Restriction: only one const
|
||||
* can be referenced per
|
||||
* instruction, though it may be
|
||||
* selected for multiple inputs.
|
||||
* Constants not initialized
|
||||
* default to zero.
|
||||
*/
|
||||
#define REG_TYPE_S 3 /* sampler */
|
||||
#define REG_TYPE_OC 4 /* output color (rgba) */
|
||||
#define REG_TYPE_OD 5 /* output depth (w), xyz are
|
||||
* temporaries. If not written,
|
||||
* interpolated depth is used?
|
||||
*/
|
||||
#define REG_TYPE_U 6 /* unpreserved temporaries */
|
||||
#define REG_TYPE_MASK 0x7
|
||||
#define REG_NR_MASK 0xf
|
||||
|
||||
|
||||
/* REG_TYPE_T:
|
||||
*/
|
||||
#define T_TEX0 0
|
||||
#define T_TEX1 1
|
||||
#define T_TEX2 2
|
||||
#define T_TEX3 3
|
||||
#define T_TEX4 4
|
||||
#define T_TEX5 5
|
||||
#define T_TEX6 6
|
||||
#define T_TEX7 7
|
||||
#define T_DIFFUSE 8
|
||||
#define T_SPECULAR 9
|
||||
#define T_FOG_W 10 /* interpolated fog is in W coord */
|
||||
|
||||
/* Arithmetic instructions */
|
||||
|
||||
/* .replicate_swizzle == selection and replication of a particular
|
||||
* scalar channel, ie., .xxxx, .yyyy, .zzzz or .wwww
|
||||
*/
|
||||
#define A0_NOP (0x0<<24) /* no operation */
|
||||
#define A0_ADD (0x1<<24) /* dst = src0 + src1 */
|
||||
#define A0_MOV (0x2<<24) /* dst = src0 */
|
||||
#define A0_MUL (0x3<<24) /* dst = src0 * src1 */
|
||||
#define A0_MAD (0x4<<24) /* dst = src0 * src1 + src2 */
|
||||
#define A0_DP2ADD (0x5<<24) /* dst.xyzw = src0.xy dot src1.xy + src2.replicate_swizzle */
|
||||
#define A0_DP3 (0x6<<24) /* dst.xyzw = src0.xyz dot src1.xyz */
|
||||
#define A0_DP4 (0x7<<24) /* dst.xyzw = src0.xyzw dot src1.xyzw */
|
||||
#define A0_FRC (0x8<<24) /* dst = src0 - floor(src0) */
|
||||
#define A0_RCP (0x9<<24) /* dst.xyzw = 1/(src0.replicate_swizzle) */
|
||||
#define A0_RSQ (0xa<<24) /* dst.xyzw = 1/(sqrt(abs(src0.replicate_swizzle))) */
|
||||
#define A0_EXP (0xb<<24) /* dst.xyzw = exp2(src0.replicate_swizzle) */
|
||||
#define A0_LOG (0xc<<24) /* dst.xyzw = log2(abs(src0.replicate_swizzle)) */
|
||||
#define A0_CMP (0xd<<24) /* dst = (src0 >= 0.0) ? src1 : src2 */
|
||||
#define A0_MIN (0xe<<24) /* dst = (src0 < src1) ? src0 : src1 */
|
||||
#define A0_MAX (0xf<<24) /* dst = (src0 >= src1) ? src0 : src1 */
|
||||
#define A0_FLR (0x10<<24) /* dst = floor(src0) */
|
||||
#define A0_MOD (0x11<<24) /* dst = src0 fmod 1.0 */
|
||||
#define A0_TRC (0x12<<24) /* dst = int(src0) */
|
||||
#define A0_SGE (0x13<<24) /* dst = src0 >= src1 ? 1.0 : 0.0 */
|
||||
#define A0_SLT (0x14<<24) /* dst = src0 < src1 ? 1.0 : 0.0 */
|
||||
#define A0_DEST_SATURATE (1<<22)
|
||||
#define A0_DEST_TYPE_SHIFT 19
|
||||
/* Allow: R, OC, OD, U */
|
||||
#define A0_DEST_NR_SHIFT 14
|
||||
/* Allow R: 0..15, OC,OD: 0..0, U: 0..2 */
|
||||
#define A0_DEST_CHANNEL_X (1<<10)
|
||||
#define A0_DEST_CHANNEL_Y (2<<10)
|
||||
#define A0_DEST_CHANNEL_Z (4<<10)
|
||||
#define A0_DEST_CHANNEL_W (8<<10)
|
||||
#define A0_DEST_CHANNEL_ALL (0xf<<10)
|
||||
#define A0_DEST_CHANNEL_SHIFT 10
|
||||
#define A0_SRC0_TYPE_SHIFT 7
|
||||
#define A0_SRC0_NR_SHIFT 2
|
||||
|
||||
#define A0_DEST_CHANNEL_XY (A0_DEST_CHANNEL_X|A0_DEST_CHANNEL_Y)
|
||||
#define A0_DEST_CHANNEL_XYZ (A0_DEST_CHANNEL_XY|A0_DEST_CHANNEL_Z)
|
||||
|
||||
|
||||
#define SRC_X 0
|
||||
#define SRC_Y 1
|
||||
#define SRC_Z 2
|
||||
#define SRC_W 3
|
||||
#define SRC_ZERO 4
|
||||
#define SRC_ONE 5
|
||||
|
||||
#define A1_SRC0_CHANNEL_X_NEGATE (1<<31)
|
||||
#define A1_SRC0_CHANNEL_X_SHIFT 28
|
||||
#define A1_SRC0_CHANNEL_Y_NEGATE (1<<27)
|
||||
#define A1_SRC0_CHANNEL_Y_SHIFT 24
|
||||
#define A1_SRC0_CHANNEL_Z_NEGATE (1<<23)
|
||||
#define A1_SRC0_CHANNEL_Z_SHIFT 20
|
||||
#define A1_SRC0_CHANNEL_W_NEGATE (1<<19)
|
||||
#define A1_SRC0_CHANNEL_W_SHIFT 16
|
||||
#define A1_SRC1_TYPE_SHIFT 13
|
||||
#define A1_SRC1_NR_SHIFT 8
|
||||
#define A1_SRC1_CHANNEL_X_NEGATE (1<<7)
|
||||
#define A1_SRC1_CHANNEL_X_SHIFT 4
|
||||
#define A1_SRC1_CHANNEL_Y_NEGATE (1<<3)
|
||||
#define A1_SRC1_CHANNEL_Y_SHIFT 0
|
||||
|
||||
#define A2_SRC1_CHANNEL_Z_NEGATE (1<<31)
|
||||
#define A2_SRC1_CHANNEL_Z_SHIFT 28
|
||||
#define A2_SRC1_CHANNEL_W_NEGATE (1<<27)
|
||||
#define A2_SRC1_CHANNEL_W_SHIFT 24
|
||||
#define A2_SRC2_TYPE_SHIFT 21
|
||||
#define A2_SRC2_NR_SHIFT 16
|
||||
#define A2_SRC2_CHANNEL_X_NEGATE (1<<15)
|
||||
#define A2_SRC2_CHANNEL_X_SHIFT 12
|
||||
#define A2_SRC2_CHANNEL_Y_NEGATE (1<<11)
|
||||
#define A2_SRC2_CHANNEL_Y_SHIFT 8
|
||||
#define A2_SRC2_CHANNEL_Z_NEGATE (1<<7)
|
||||
#define A2_SRC2_CHANNEL_Z_SHIFT 4
|
||||
#define A2_SRC2_CHANNEL_W_NEGATE (1<<3)
|
||||
#define A2_SRC2_CHANNEL_W_SHIFT 0
|
||||
|
||||
|
||||
|
||||
/* Texture instructions */
|
||||
#define T0_TEXLD (0x15<<24) /* Sample texture using predeclared
|
||||
* sampler and address, and output
|
||||
* filtered texel data to destination
|
||||
* register */
|
||||
#define T0_TEXLDP (0x16<<24) /* Same as texld but performs a
|
||||
* perspective divide of the texture
|
||||
* coordinate .xyz values by .w before
|
||||
* sampling. */
|
||||
#define T0_TEXLDB (0x17<<24) /* Same as texld but biases the
|
||||
* computed LOD by w. Only S4.6 two's
|
||||
* comp is used. This implies that a
|
||||
* float to fixed conversion is
|
||||
* done. */
|
||||
#define T0_TEXKILL (0x18<<24) /* Does not perform a sampling
|
||||
* operation. Simply kills the pixel
|
||||
* if any channel of the address
|
||||
* register is < 0.0. */
|
||||
#define T0_DEST_TYPE_SHIFT 19
|
||||
/* Allow: R, OC, OD, U */
|
||||
/* Note: U (unpreserved) regs do not retain their values between
|
||||
* phases (cannot be used for feedback)
|
||||
*
|
||||
* Note: oC and OD registers can only be used as the destination of a
|
||||
* texture instruction once per phase (this is an implementation
|
||||
* restriction).
|
||||
*/
|
||||
#define T0_DEST_NR_SHIFT 14
|
||||
/* Allow R: 0..15, OC,OD: 0..0, U: 0..2 */
|
||||
#define T0_SAMPLER_NR_SHIFT 0 /* This field ignored for TEXKILL */
|
||||
#define T0_SAMPLER_NR_MASK (0xf<<0)
|
||||
|
||||
#define T1_ADDRESS_REG_TYPE_SHIFT 24 /* Reg to use as texture coord */
|
||||
/* Allow R, T, OC, OD -- R, OC, OD are 'dependent' reads, new program phase */
|
||||
#define T1_ADDRESS_REG_NR_SHIFT 17
|
||||
#define T2_MBZ 0
|
||||
|
||||
/* Declaration instructions */
|
||||
#define D0_DCL (0x19<<24) /* Declare a t (interpolated attrib)
|
||||
* register or an s (sampler)
|
||||
* register. */
|
||||
#define D0_SAMPLE_TYPE_SHIFT 22
|
||||
#define D0_SAMPLE_TYPE_2D (0x0<<22)
|
||||
#define D0_SAMPLE_TYPE_CUBE (0x1<<22)
|
||||
#define D0_SAMPLE_TYPE_VOLUME (0x2<<22)
|
||||
#define D0_SAMPLE_TYPE_MASK (0x3<<22)
|
||||
|
||||
#define D0_TYPE_SHIFT 19
|
||||
/* Allow: T, S */
|
||||
#define D0_NR_SHIFT 14
|
||||
/* Allow T: 0..10, S: 0..15 */
|
||||
#define D0_CHANNEL_X (1<<10)
|
||||
#define D0_CHANNEL_Y (2<<10)
|
||||
#define D0_CHANNEL_Z (4<<10)
|
||||
#define D0_CHANNEL_W (8<<10)
|
||||
#define D0_CHANNEL_ALL (0xf<<10)
|
||||
#define D0_CHANNEL_NONE (0<<10)
|
||||
|
||||
#define D0_CHANNEL_XY (D0_CHANNEL_X|D0_CHANNEL_Y)
|
||||
#define D0_CHANNEL_XYZ (D0_CHANNEL_XY|D0_CHANNEL_Z)
|
||||
/* End description of STATE3D_PIXEL_SHADER_PROGRAM */
|
||||
|
||||
#define STATE3D_PIXEL_SHADER_CONSTANTS (CMD_3D | (0x1d<<24)|(0x06<<16))
|
||||
|
||||
#define STATE3D_DRAWING_RECTANGLE (CMD_3D | (0x1d<<24)|(0x80<<16)|3)
|
||||
|
||||
#define STATE3D_SCISSOR_RECTANGLE (CMD_3D | (0x1d<<24)|(0x81<<16)|1)
|
||||
|
||||
#define STATE3D_STIPPLE (CMD_3D | (0x1d<<24)|(0x83<<16))
|
||||
#define ST1_ENABLE (1<<16)
|
||||
#define ST1_MASK (0xffff)
|
||||
|
||||
#define STATE3D_DEST_BUFFER_VARIABLES (CMD_3D | (0x1d<<24)|(0x85<<16))
|
||||
#define TEX_DEFAULT_COLOR_OGL (0<<30)
|
||||
#define TEX_DEFAULT_COLOR_D3D (1<<30)
|
||||
#define ZR_EARLY_DEPTH (1<<29)
|
||||
#define LOD_PRECLAMP_OGL (1<<28)
|
||||
#define LOD_PRECLAMP_D3D (0<<28)
|
||||
#define DITHER_FULL_ALWAYS (0<<26)
|
||||
#define DITHER_FULL_ON_FB_BLEND (1<<26)
|
||||
#define DITHER_CLAMPED_ALWAYS (2<<26)
|
||||
#define LINEAR_GAMMA_BLEND_32BPP (1<<25)
|
||||
#define DEBUG_DISABLE_ENH_DITHER (1<<24)
|
||||
#define DSTORG_HORIZ_BIAS(x) ((x)<<20)
|
||||
#define DSTORG_VERT_BIAS(x) ((x)<<16)
|
||||
#define COLOR_4_2_2_CHNL_WRT_ALL 0
|
||||
#define COLOR_4_2_2_CHNL_WRT_Y (1<<12)
|
||||
#define COLOR_4_2_2_CHNL_WRT_CR (2<<12)
|
||||
#define COLOR_4_2_2_CHNL_WRT_CB (3<<12)
|
||||
#define COLOR_4_2_2_CHNL_WRT_CRCB (4<<12)
|
||||
#define COLR_BUF_8BIT 0
|
||||
#define COLR_BUF_RGB555 (1<<8)
|
||||
#define COLR_BUF_RGB565 (2<<8)
|
||||
#define COLR_BUF_ARGB8888 (3<<8)
|
||||
#define DEPTH_FRMT_16_FIXED 0
|
||||
#define DEPTH_FRMT_16_FLOAT (1<<2)
|
||||
#define DEPTH_FRMT_24_FIXED_8_OTHER (2<<2)
|
||||
#define VERT_LINE_STRIDE_1 (1<<1)
|
||||
#define VERT_LINE_STRIDE_0 (0<<1)
|
||||
#define VERT_LINE_STRIDE_OFS_1 1
|
||||
#define VERT_LINE_STRIDE_OFS_0 0
|
||||
|
||||
#define STATE3D_CONST_BLEND_COLOR (CMD_3D | (0x1d<<24)|(0x88<<16))
|
||||
|
||||
#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 STATE3D_BUFFER_INFO (CMD_3D | (0x1d<<24)|(0x8e<<16)|1)
|
||||
#define BUFFERID_COLOR_BACK (3 << 24)
|
||||
#define BUFFERID_COLOR_AUX (4 << 24)
|
||||
#define BUFFERID_MC_INTRA_CORR (5 << 24)
|
||||
#define BUFFERID_DEPTH (7 << 24)
|
||||
#define BUFFER_USE_FENCES (1 << 23)
|
||||
|
||||
#define STATE3D_DFLT_Z_CMD (CMD_3D | (0x1d<<24)|(0x98<<16))
|
||||
|
||||
#define STATE3D_DFLT_DIFFUSE_CMD (CMD_3D | (0x1d<<24)|(0x99<<16))
|
||||
|
||||
#define STATE3D_DFLT_SPEC_CMD (CMD_3D | (0x1d<<24)|(0x9a<<16))
|
||||
|
||||
#define PRIMITIVE3D (CMD_3D | (0x1f<<24))
|
||||
#define PRIM3D_INLINE (0<<23)
|
||||
#define PRIM3D_INDIRECT (1<<23)
|
||||
#define PRIM3D_TRILIST (0x0<<18)
|
||||
#define PRIM3D_TRISTRIP (0x1<<18)
|
||||
#define PRIM3D_TRISTRIP_RVRSE (0x2<<18)
|
||||
#define PRIM3D_TRIFAN (0x3<<18)
|
||||
#define PRIM3D_POLY (0x4<<18)
|
||||
#define PRIM3D_LINELIST (0x5<<18)
|
||||
#define PRIM3D_LINESTRIP (0x6<<18)
|
||||
#define PRIM3D_RECTLIST (0x7<<18)
|
||||
#define PRIM3D_POINTLIST (0x8<<18)
|
||||
#define PRIM3D_DIB (0x9<<18)
|
||||
#define PRIM3D_CLEAR_RECT (0xa<<18)
|
||||
#define PRIM3D_ZONE_INIT (0xd<<18)
|
||||
#define PRIM3D_MASK (0x1f<<18)
|
||||
|
||||
|
||||
#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)
|
||||
|
|
@ -907,7 +1590,10 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define MI_WRITE_DIRTY_STATE (1<<4)
|
||||
#define MI_END_SCENE (1<<3)
|
||||
#define MI_INHIBIT_RENDER_CACHE_FLUSH (1<<2)
|
||||
#define MI_STATE_INSTRUCTION_CACHE_FLUSH (1<<1)
|
||||
#define MI_INVALIDATE_MAP_CACHE (1<<0)
|
||||
/* broadwater flush bits */
|
||||
#define BRW_MI_GLOBAL_SNAPSHOT_RESET (1 << 3)
|
||||
|
||||
/* Noop */
|
||||
#define MI_NOOP 0x00
|
||||
|
|
@ -921,6 +1607,244 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define ENABLE_FOG_CONST (1<<24)
|
||||
#define ENABLE_FOG_DENSITY (1<<23)
|
||||
|
||||
/*
|
||||
* New regs for broadwater -- we need to split this file up sensibly somehow.
|
||||
*/
|
||||
#define BRW_3D(Pipeline,Opcode,Subopcode) (CMD_3D | \
|
||||
((Pipeline) << 27) | \
|
||||
((Opcode) << 24) | \
|
||||
((Subopcode) << 16))
|
||||
|
||||
#define BRW_URB_FENCE BRW_3D(0, 0, 0)
|
||||
#define BRW_CS_URB_STATE BRW_3D(0, 0, 1)
|
||||
#define BRW_CONSTANT_BUFFER BRW_3D(0, 0, 2)
|
||||
#define BRW_STATE_PREFETCH BRW_3D(0, 0, 3)
|
||||
|
||||
#define BRW_STATE_BASE_ADDRESS BRW_3D(0, 1, 1)
|
||||
#define BRW_STATE_SIP BRW_3D(0, 1, 2)
|
||||
#define BRW_PIPELINE_SELECT BRW_3D(0, 1, 4)
|
||||
|
||||
#define BRW_MEDIA_STATE_POINTERS BRW_3D(2, 0, 0)
|
||||
#define BRW_MEDIA_OBJECT BRW_3D(2, 1, 0)
|
||||
|
||||
#define BRW_3DSTATE_PIPELINED_POINTERS BRW_3D(3, 0, 0)
|
||||
#define BRW_3DSTATE_BINDING_TABLE_POINTERS BRW_3D(3, 0, 1)
|
||||
#define BRW_3DSTATE_VERTEX_BUFFERS BRW_3D(3, 0, 8)
|
||||
#define BRW_3DSTATE_VERTEX_ELEMENTS BRW_3D(3, 0, 9)
|
||||
#define BRW_3DSTATE_INDEX_BUFFER BRW_3D(3, 0, 0xa)
|
||||
#define BRW_3DSTATE_VF_STATISTICS BRW_3D(3, 0, 0xb)
|
||||
|
||||
#define BRW_3DSTATE_DRAWING_RECTANGLE BRW_3D(3, 1, 0)
|
||||
#define BRW_3DSTATE_CONSTANT_COLOR BRW_3D(3, 1, 1)
|
||||
#define BRW_3DSTATE_SAMPLER_PALETTE_LOAD BRW_3D(3, 1, 2)
|
||||
#define BRW_3DSTATE_CHROMA_KEY BRW_3D(3, 1, 4)
|
||||
#define BRW_3DSTATE_DEPTH_BUFFER BRW_3D(3, 1, 5)
|
||||
#define BRW_3DSTATE_POLY_STIPPLE_OFFSET BRW_3D(3, 1, 6)
|
||||
#define BRW_3DSTATE_POLY_STIPPLE_PATTERN BRW_3D(3, 1, 7)
|
||||
#define BRW_3DSTATE_LINE_STIPPLE BRW_3D(3, 1, 8)
|
||||
#define BRW_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP BRW_3D(3, 1, 9)
|
||||
/* These two are BLC and CTG only, not BW or CL */
|
||||
#define BRW_3DSTATE_AA_LINE_PARAMS BRW_3D(3, 1, 0xa)
|
||||
#define BRW_3DSTATE_GS_SVB_INDEX BRW_3D(3, 1, 0xb)
|
||||
|
||||
#define BRW_PIPE_CONTROL BRW_3D(3, 2, 0)
|
||||
|
||||
#define BRW_3DPRIMITIVE BRW_3D(3, 3, 0)
|
||||
|
||||
#define PIPELINE_SELECT_3D 0
|
||||
#define PIPELINE_SELECT_MEDIA 1
|
||||
|
||||
#define UF0_CS_REALLOC (1 << 13)
|
||||
#define UF0_VFE_REALLOC (1 << 12)
|
||||
#define UF0_SF_REALLOC (1 << 11)
|
||||
#define UF0_CLIP_REALLOC (1 << 10)
|
||||
#define UF0_GS_REALLOC (1 << 9)
|
||||
#define UF0_VS_REALLOC (1 << 8)
|
||||
#define UF1_CLIP_FENCE_SHIFT 20
|
||||
#define UF1_GS_FENCE_SHIFT 10
|
||||
#define UF1_VS_FENCE_SHIFT 0
|
||||
#define UF2_CS_FENCE_SHIFT 20
|
||||
#define UF2_VFE_FENCE_SHIFT 10
|
||||
#define UF2_SF_FENCE_SHIFT 0
|
||||
|
||||
/* for BRW_STATE_BASE_ADDRESS */
|
||||
#define BASE_ADDRESS_MODIFY (1 << 0)
|
||||
|
||||
/* for BRW_3DSTATE_PIPELINED_POINTERS */
|
||||
#define BRW_GS_DISABLE 0
|
||||
#define BRW_GS_ENABLE 1
|
||||
#define BRW_CLIP_DISABLE 0
|
||||
#define BRW_CLIP_ENABLE 1
|
||||
|
||||
/* for BRW_PIPE_CONTROL */
|
||||
#define BRW_PIPE_CONTROL_NOWRITE (0 << 14)
|
||||
#define BRW_PIPE_CONTROL_WRITE_QWORD (1 << 14)
|
||||
#define BRW_PIPE_CONTROL_WRITE_DEPTH (2 << 14)
|
||||
#define BRW_PIPE_CONTROL_WRITE_TIME (3 << 14)
|
||||
#define BRW_PIPE_CONTROL_DEPTH_STALL (1 << 13)
|
||||
#define BRW_PIPE_CONTROL_WC_FLUSH (1 << 12)
|
||||
#define BRW_PIPE_CONTROL_IS_FLUSH (1 << 11)
|
||||
#define BRW_PIPE_CONTROL_NOTIFY_ENABLE (1 << 8)
|
||||
#define BRW_PIPE_CONTROL_GLOBAL_GTT (1 << 2)
|
||||
#define BRW_PIPE_CONTROL_LOCAL_PGTT (0 << 2)
|
||||
|
||||
/* VERTEX_BUFFER_STATE Structure */
|
||||
#define VB0_BUFFER_INDEX_SHIFT 27
|
||||
#define VB0_VERTEXDATA (0 << 26)
|
||||
#define VB0_INSTANCEDATA (1 << 26)
|
||||
#define VB0_BUFFER_PITCH_SHIFT 0
|
||||
|
||||
/* VERTEX_ELEMENT_STATE Structure */
|
||||
#define VE0_VERTEX_BUFFER_INDEX_SHIFT 27
|
||||
#define VE0_VALID (1 << 26)
|
||||
#define VE0_FORMAT_SHIFT 16
|
||||
#define VE0_OFFSET_SHIFT 0
|
||||
#define VE1_VFCOMPONENT_0_SHIFT 28
|
||||
#define VE1_VFCOMPONENT_1_SHIFT 24
|
||||
#define VE1_VFCOMPONENT_2_SHIFT 20
|
||||
#define VE1_VFCOMPONENT_3_SHIFT 16
|
||||
#define VE1_DESTINATION_ELEMENT_OFFSET_SHIFT 0
|
||||
|
||||
/* 3DPRIMITIVE bits */
|
||||
#define BRW_3DPRIMITIVE_VERTEX_SEQUENTIAL (0 << 15)
|
||||
#define BRW_3DPRIMITIVE_VERTEX_RANDOM (1 << 15)
|
||||
/* Primitive types are in brw_defines.h */
|
||||
#define BRW_3DPRIMITIVE_TOPOLOGY_SHIFT 10
|
||||
|
||||
#define BRW_SVG_CTL 0x7400
|
||||
|
||||
#define BRW_SVG_CTL_GS_BA (0 << 8)
|
||||
#define BRW_SVG_CTL_SS_BA (1 << 8)
|
||||
#define BRW_SVG_CTL_IO_BA (2 << 8)
|
||||
#define BRW_SVG_CTL_GS_AUB (3 << 8)
|
||||
#define BRW_SVG_CTL_IO_AUB (4 << 8)
|
||||
#define BRW_SVG_CTL_SIP (5 << 8)
|
||||
|
||||
#define BRW_SVG_RDATA 0x7404
|
||||
#define BRW_SVG_WORK_CTL 0x7408
|
||||
|
||||
#define BRW_VF_CTL 0x7500
|
||||
|
||||
#define BRW_VF_CTL_SNAPSHOT_COMPLETE (1 << 31)
|
||||
#define BRW_VF_CTL_SNAPSHOT_MUX_SELECT_THREADID (0 << 8)
|
||||
#define BRW_VF_CTL_SNAPSHOT_MUX_SELECT_VF_DEBUG (1 << 8)
|
||||
#define BRW_VF_CTL_SNAPSHOT_TYPE_VERTEX_SEQUENCE (0 << 4)
|
||||
#define BRW_VF_CTL_SNAPSHOT_TYPE_VERTEX_INDEX (1 << 4)
|
||||
#define BRW_VF_CTL_SKIP_INITIAL_PRIMITIVES (1 << 3)
|
||||
#define BRW_VF_CTL_MAX_PRIMITIVES_LIMIT_ENABLE (1 << 2)
|
||||
#define BRW_VF_CTL_VERTEX_RANGE_LIMIT_ENABLE (1 << 1)
|
||||
#define BRW_VF_CTL_SNAPSHOT_ENABLE (1 << 0)
|
||||
|
||||
#define BRW_VF_STRG_VAL 0x7504
|
||||
#define BRW_VF_STR_VL_OVR 0x7508
|
||||
#define BRW_VF_VC_OVR 0x750c
|
||||
#define BRW_VF_STR_PSKIP 0x7510
|
||||
#define BRW_VF_MAX_PRIM 0x7514
|
||||
#define BRW_VF_RDATA 0x7518
|
||||
|
||||
#define BRW_VS_CTL 0x7600
|
||||
#define BRW_VS_CTL_SNAPSHOT_COMPLETE (1 << 31)
|
||||
#define BRW_VS_CTL_SNAPSHOT_MUX_VERTEX_0 (0 << 8)
|
||||
#define BRW_VS_CTL_SNAPSHOT_MUX_VERTEX_1 (1 << 8)
|
||||
#define BRW_VS_CTL_SNAPSHOT_MUX_VALID_COUNT (2 << 8)
|
||||
#define BRW_VS_CTL_SNAPSHOT_MUX_VS_KERNEL_POINTER (3 << 8)
|
||||
#define BRW_VS_CTL_SNAPSHOT_ALL_THREADS (1 << 2)
|
||||
#define BRW_VS_CTL_THREAD_SNAPSHOT_ENABLE (1 << 1)
|
||||
#define BRW_VS_CTL_SNAPSHOT_ENABLE (1 << 0)
|
||||
|
||||
#define BRW_VS_STRG_VAL 0x7604
|
||||
#define BRW_VS_RDATA 0x7608
|
||||
|
||||
#define BRW_SF_CTL 0x7b00
|
||||
#define BRW_SF_CTL_SNAPSHOT_COMPLETE (1 << 31)
|
||||
#define BRW_SF_CTL_SNAPSHOT_MUX_VERTEX_0_FF_ID (0 << 8)
|
||||
#define BRW_SF_CTL_SNAPSHOT_MUX_VERTEX_0_REL_COUNT (1 << 8)
|
||||
#define BRW_SF_CTL_SNAPSHOT_MUX_VERTEX_1_FF_ID (2 << 8)
|
||||
#define BRW_SF_CTL_SNAPSHOT_MUX_VERTEX_1_REL_COUNT (3 << 8)
|
||||
#define BRW_SF_CTL_SNAPSHOT_MUX_VERTEX_2_FF_ID (4 << 8)
|
||||
#define BRW_SF_CTL_SNAPSHOT_MUX_VERTEX_2_REL_COUNT (5 << 8)
|
||||
#define BRW_SF_CTL_SNAPSHOT_MUX_VERTEX_COUNT (6 << 8)
|
||||
#define BRW_SF_CTL_SNAPSHOT_MUX_SF_KERNEL_POINTER (7 << 8)
|
||||
#define BRW_SF_CTL_MIN_MAX_PRIMITIVE_RANGE_ENABLE (1 << 4)
|
||||
#define BRW_SF_CTL_DEBUG_CLIP_RECTANGLE_ENABLE (1 << 3)
|
||||
#define BRW_SF_CTL_SNAPSHOT_ALL_THREADS (1 << 2)
|
||||
#define BRW_SF_CTL_THREAD_SNAPSHOT_ENABLE (1 << 1)
|
||||
#define BRW_SF_CTL_SNAPSHOT_ENABLE (1 << 0)
|
||||
|
||||
#define BRW_SF_STRG_VAL 0x7b04
|
||||
#define BRW_SF_RDATA 0x7b18
|
||||
|
||||
#define BRW_WIZ_CTL 0x7c00
|
||||
#define BRW_WIZ_CTL_SNAPSHOT_COMPLETE (1 << 31)
|
||||
#define BRW_WIZ_CTL_SUBSPAN_INSTANCE_SHIFT 16
|
||||
#define BRW_WIZ_CTL_SNAPSHOT_MUX_WIZ_KERNEL_POINTER (0 << 8)
|
||||
#define BRW_WIZ_CTL_SNAPSHOT_MUX_SUBSPAN_INSTANCE (1 << 8)
|
||||
#define BRW_WIZ_CTL_SNAPSHOT_MUX_PRIMITIVE_SEQUENCE (2 << 8)
|
||||
#define BRW_WIZ_CTL_SINGLE_SUBSPAN_DISPATCH (1 << 6)
|
||||
#define BRW_WIZ_CTL_IGNORE_COLOR_SCOREBOARD_STALLS (1 << 5)
|
||||
#define BRW_WIZ_CTL_ENABLE_SUBSPAN_INSTANCE_COMPARE (1 << 4)
|
||||
#define BRW_WIZ_CTL_USE_UPSTREAM_SNAPSHOT_FLAG (1 << 3)
|
||||
#define BRW_WIZ_CTL_SNAPSHOT_ALL_THREADS (1 << 2)
|
||||
#define BRW_WIZ_CTL_THREAD_SNAPSHOT_ENABLE (1 << 1)
|
||||
#define BRW_WIZ_CTL_SNAPSHOT_ENABLE (1 << 0)
|
||||
|
||||
#define BRW_WIZ_STRG_VAL 0x7c04
|
||||
#define BRW_WIZ_RDATA 0x7c18
|
||||
|
||||
#define BRW_TS_CTL 0x7e00
|
||||
#define BRW_TS_CTL_SNAPSHOT_COMPLETE (1 << 31)
|
||||
#define BRW_TS_CTL_SNAPSHOT_MESSAGE_ERROR (0 << 8)
|
||||
#define BRW_TS_CTL_SNAPSHOT_INTERFACE_DESCRIPTOR (3 << 8)
|
||||
#define BRW_TS_CTL_SNAPSHOT_ALL_CHILD_THREADS (1 << 2)
|
||||
#define BRW_TS_CTL_SNAPSHOT_ALL_ROOT_THREADS (1 << 1)
|
||||
#define BRW_TS_CTL_SNAPSHOT_ENABLE (1 << 0)
|
||||
|
||||
#define BRW_TS_STRG_VAL 0x7e04
|
||||
#define BRW_TS_RDATA 0x7e08
|
||||
|
||||
#define BRW_TD_CTL 0x8000
|
||||
#define BRW_TD_CTL_MUX_SHIFT 8
|
||||
#define BRW_TD_CTL_EXTERNAL_HALT_R0_DEBUG_MATCH (1 << 7)
|
||||
#define BRW_TD_CTL_FORCE_EXTERNAL_HALT (1 << 6)
|
||||
#define BRW_TD_CTL_EXCEPTION_MASK_OVERRIDE (1 << 5)
|
||||
#define BRW_TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE (1 << 4)
|
||||
#define BRW_TD_CTL_BREAKPOINT_ENABLE (1 << 2)
|
||||
#define BRW_TD_CTL2 0x8004
|
||||
#define BRW_TD_CTL2_ILLEGAL_OPCODE_EXCEPTION_OVERRIDE (1 << 28)
|
||||
#define BRW_TD_CTL2_MASKSTACK_EXCEPTION_OVERRIDE (1 << 26)
|
||||
#define BRW_TD_CTL2_SOFTWARE_EXCEPTION_OVERRIDE (1 << 25)
|
||||
#define BRW_TD_CTL2_ACTIVE_THREAD_LIMIT_SHIFT 16
|
||||
#define BRW_TD_CTL2_ACTIVE_THREAD_LIMIT_ENABLE (1 << 8)
|
||||
#define BRW_TD_CTL2_THREAD_SPAWNER_EXECUTION_MASK_ENABLE (1 << 7)
|
||||
#define BRW_TD_CTL2_WIZ_EXECUTION_MASK_ENABLE (1 << 6)
|
||||
#define BRW_TD_CTL2_SF_EXECUTION_MASK_ENABLE (1 << 5)
|
||||
#define BRW_TD_CTL2_CLIPPER_EXECUTION_MASK_ENABLE (1 << 4)
|
||||
#define BRW_TD_CTL2_GS_EXECUTION_MASK_ENABLE (1 << 3)
|
||||
#define BRW_TD_CTL2_VS_EXECUTION_MASK_ENABLE (1 << 0)
|
||||
#define BRW_TD_VF_VS_EMSK 0x8008
|
||||
#define BRW_TD_GS_EMSK 0x800c
|
||||
#define BRW_TD_CLIP_EMSK 0x8010
|
||||
#define BRW_TD_SF_EMSK 0x8014
|
||||
#define BRW_TD_WIZ_EMSK 0x8018
|
||||
#define BRW_TD_0_6_EHTRG_VAL 0x801c
|
||||
#define BRW_TD_0_7_EHTRG_VAL 0x8020
|
||||
#define BRW_TD_0_6_EHTRG_MSK 0x8024
|
||||
#define BRW_TD_0_7_EHTRG_MSK 0x8028
|
||||
#define BRW_TD_RDATA 0x802c
|
||||
#define BRW_TD_TS_EMSK 0x8030
|
||||
|
||||
#define BRW_EU_CTL 0x8800
|
||||
#define BRW_EU_CTL_SELECT_SHIFT 16
|
||||
#define BRW_EU_CTL_DATA_MUX_SHIFT 8
|
||||
#define BRW_EU_ATT_0 0x8810
|
||||
#define BRW_EU_ATT_1 0x8814
|
||||
#define BRW_EU_ATT_DATA_0 0x8820
|
||||
#define BRW_EU_ATT_DATA_1 0x8824
|
||||
#define BRW_EU_ATT_CLR_0 0x8830
|
||||
#define BRW_EU_ATT_CLR_1 0x8834
|
||||
#define BRW_EU_RDATA 0x8840
|
||||
|
||||
/* End regs for broadwater */
|
||||
|
||||
#define MAX_DISPLAY_PIPES 2
|
||||
|
||||
|
|
|
|||
16
src/i830.h
16
src/i830.h
|
|
@ -47,6 +47,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#ifndef _I830_H_
|
||||
#define _I830_H_
|
||||
|
||||
#include "xf86_OSproc.h"
|
||||
#include "compiler.h"
|
||||
#include "xf86PciInfo.h"
|
||||
#include "xf86Pci.h"
|
||||
|
|
@ -146,7 +147,7 @@ typedef struct {
|
|||
} I830RingBuffer;
|
||||
|
||||
typedef struct {
|
||||
unsigned int Fence[8];
|
||||
unsigned int Fence[FENCE_NEW_NR * 2];
|
||||
} I830RegRec, *I830RegPtr;
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -284,6 +285,12 @@ typedef struct _I830Rec {
|
|||
int TexGranularity;
|
||||
int drmMinor;
|
||||
Bool have3DWindows;
|
||||
|
||||
unsigned int front_tiled;
|
||||
unsigned int back_tiled;
|
||||
unsigned int depth_tiled;
|
||||
unsigned int rotated_tiled;
|
||||
unsigned int rotated2_tiled;
|
||||
#endif
|
||||
|
||||
Bool NeedRingBufferLow;
|
||||
|
|
@ -423,6 +430,9 @@ typedef struct _I830Rec {
|
|||
Bool devicePresence;
|
||||
|
||||
OsTimerPtr devicesTimer;
|
||||
|
||||
CARD32 savedAsurf;
|
||||
CARD32 savedBsurf;
|
||||
} I830Rec;
|
||||
|
||||
#define I830PTR(p) ((I830Ptr)((p)->driverPrivate))
|
||||
|
|
@ -497,8 +507,8 @@ extern long I830GetExcessMemoryAllocations(ScrnInfoPtr pScrn);
|
|||
extern Bool I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags);
|
||||
extern Bool I830DoPoolAllocation(ScrnInfoPtr pScrn, I830MemPool *pool);
|
||||
extern Bool I830FixupOffsets(ScrnInfoPtr pScrn);
|
||||
extern Bool I830BindGARTMemory(ScrnInfoPtr pScrn);
|
||||
extern Bool I830UnbindGARTMemory(ScrnInfoPtr pScrn);
|
||||
extern Bool I830BindAGPMemory(ScrnInfoPtr pScrn);
|
||||
extern Bool I830UnbindAGPMemory(ScrnInfoPtr pScrn);
|
||||
extern unsigned long I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result,
|
||||
I830MemPool *pool, long size,
|
||||
unsigned long alignment, int flags);
|
||||
|
|
|
|||
|
|
@ -133,6 +133,7 @@ void
|
|||
I830Sync(ScrnInfoPtr pScrn)
|
||||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
int flags = MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE;
|
||||
|
||||
if (I810_DEBUG & (DEBUG_VERBOSE_ACCEL | DEBUG_VERBOSE_SYNC))
|
||||
ErrorF("I830Sync\n");
|
||||
|
|
@ -147,13 +148,17 @@ I830Sync(ScrnInfoPtr pScrn)
|
|||
|
||||
if (pI830->entityPrivate && !pI830->entityPrivate->RingRunning) return;
|
||||
|
||||
if (IS_I965G(pI830))
|
||||
flags = 0;
|
||||
|
||||
/* Send a flush instruction and then wait till the ring is empty.
|
||||
* This is stronger than waiting for the blitter to finish as it also
|
||||
* flushes the internal graphics caches.
|
||||
*/
|
||||
|
||||
{
|
||||
BEGIN_LP_RING(2);
|
||||
OUT_RING(MI_FLUSH | MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE);
|
||||
OUT_RING(MI_FLUSH | flags);
|
||||
OUT_RING(MI_NOOP); /* pad to quadword */
|
||||
ADVANCE_LP_RING();
|
||||
}
|
||||
|
|
@ -168,9 +173,13 @@ void
|
|||
I830EmitFlush(ScrnInfoPtr pScrn)
|
||||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
int flags = MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE;
|
||||
|
||||
if (IS_I965G(pI830))
|
||||
flags = 0;
|
||||
|
||||
BEGIN_LP_RING(2);
|
||||
OUT_RING(MI_FLUSH | MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE);
|
||||
OUT_RING(MI_FLUSH | flags);
|
||||
OUT_RING(MI_NOOP); /* pad to quadword */
|
||||
ADVANCE_LP_RING();
|
||||
}
|
||||
|
|
@ -386,6 +395,28 @@ I830AccelInit(ScreenPtr pScreen)
|
|||
return XAAInit(pScreen, infoPtr);
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
CheckTiling(ScrnInfoPtr pScrn)
|
||||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
unsigned int tiled = 0;
|
||||
|
||||
/* Check tiling */
|
||||
if (IS_I965G(pI830)) {
|
||||
if (pI830->bufferOffset == pScrn->fbOffset && pI830->front_tiled == FENCE_XMAJOR)
|
||||
tiled = 1;
|
||||
if (pI830->bufferOffset == pI830->RotatedMem.Start && pI830->rotated_tiled == FENCE_XMAJOR)
|
||||
tiled = 1;
|
||||
if (pI830->bufferOffset == pI830->BackBuffer.Start && pI830->back_tiled == FENCE_XMAJOR)
|
||||
tiled = 1;
|
||||
/* not really supported as it's always YMajor tiled */
|
||||
if (pI830->bufferOffset == pI830->DepthBuffer.Start && pI830->depth_tiled == FENCE_XMAJOR)
|
||||
tiled = 1;
|
||||
}
|
||||
|
||||
return tiled;
|
||||
}
|
||||
|
||||
void
|
||||
I830SetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop,
|
||||
unsigned int planemask)
|
||||
|
|
@ -439,6 +470,9 @@ I830SubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y, int w, int h)
|
|||
|
||||
ADVANCE_LP_RING();
|
||||
}
|
||||
|
||||
if (IS_I965G(pI830))
|
||||
I830EmitFlush(pScrn);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -473,6 +507,7 @@ I830SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int src_x1, int src_y1,
|
|||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
int dst_x2, dst_y2;
|
||||
unsigned int tiled = CheckTiling(pScrn);
|
||||
|
||||
if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
|
||||
ErrorF("I830SubsequentScreenToScreenCopy %d,%d - %d,%d %dx%d\n",
|
||||
|
|
@ -481,14 +516,18 @@ I830SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int src_x1, int src_y1,
|
|||
dst_x2 = dst_x1 + w;
|
||||
dst_y2 = dst_y1 + h;
|
||||
|
||||
if (tiled)
|
||||
pI830->BR[13] = ((pI830->BR[13] & 0xFFFF) >> 2) |
|
||||
(pI830->BR[13] & 0xFFFF0000);
|
||||
|
||||
{
|
||||
BEGIN_LP_RING(8);
|
||||
|
||||
if (pScrn->bitsPerPixel == 32) {
|
||||
OUT_RING(XY_SRC_COPY_BLT_CMD | XY_SRC_COPY_BLT_WRITE_ALPHA |
|
||||
XY_SRC_COPY_BLT_WRITE_RGB);
|
||||
XY_SRC_COPY_BLT_WRITE_RGB | tiled << 15 | tiled << 11);
|
||||
} else {
|
||||
OUT_RING(XY_SRC_COPY_BLT_CMD);
|
||||
OUT_RING(XY_SRC_COPY_BLT_CMD | tiled << 15 | tiled << 11);
|
||||
}
|
||||
OUT_RING(pI830->BR[13]);
|
||||
OUT_RING((dst_y1 << 16) | (dst_x1 & 0xffff));
|
||||
|
|
@ -500,6 +539,9 @@ I830SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int src_x1, int src_y1,
|
|||
|
||||
ADVANCE_LP_RING();
|
||||
}
|
||||
|
||||
if (IS_I965G(pI830))
|
||||
I830EmitFlush(pScrn);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -541,6 +583,7 @@ I830SubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn, int pattx, int patty,
|
|||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
int x1, x2, y1, y2;
|
||||
unsigned int tiled = CheckTiling(pScrn);
|
||||
|
||||
x1 = x;
|
||||
x2 = x + w;
|
||||
|
|
@ -550,16 +593,22 @@ I830SubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn, int pattx, int patty,
|
|||
if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
|
||||
ErrorF("I830SubsequentMono8x8PatternFillRect\n");
|
||||
|
||||
if (tiled)
|
||||
pI830->BR[13] = ((pI830->BR[13] & 0xFFFF) >> 2) |
|
||||
(pI830->BR[13] & 0xFFFF0000);
|
||||
|
||||
{
|
||||
BEGIN_LP_RING(10);
|
||||
|
||||
if (pScrn->bitsPerPixel == 32) {
|
||||
OUT_RING(XY_MONO_PAT_BLT_CMD | XY_MONO_PAT_BLT_WRITE_ALPHA |
|
||||
XY_MONO_PAT_BLT_WRITE_RGB |
|
||||
tiled << 11 |
|
||||
((patty << 8) & XY_MONO_PAT_VERT_SEED) |
|
||||
((pattx << 12) & XY_MONO_PAT_HORT_SEED));
|
||||
} else {
|
||||
OUT_RING(XY_MONO_PAT_BLT_CMD |
|
||||
tiled << 11 |
|
||||
((patty << 8) & XY_MONO_PAT_VERT_SEED) |
|
||||
((pattx << 12) & XY_MONO_PAT_HORT_SEED));
|
||||
}
|
||||
|
|
@ -574,6 +623,9 @@ I830SubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn, int pattx, int patty,
|
|||
OUT_RING(0);
|
||||
ADVANCE_LP_RING();
|
||||
}
|
||||
|
||||
if (IS_I965G(pI830))
|
||||
I830EmitFlush(pScrn);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -649,6 +701,7 @@ static void
|
|||
I830SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
|
||||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
unsigned int tiled = CheckTiling(pScrn);
|
||||
|
||||
if (pI830->init == 0) {
|
||||
pI830->BR[12] = (pI830->AccelInfoRec->ScanlineColorExpandBuffers[0] -
|
||||
|
|
@ -666,14 +719,19 @@ I830SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
|
|||
ErrorF("I830SubsequentColorExpandScanline %d (addr %x)\n",
|
||||
bufno, pI830->BR[12]);
|
||||
|
||||
if (tiled)
|
||||
pI830->BR[13] = ((pI830->BR[13] & 0xFFFF) >> 2) |
|
||||
(pI830->BR[13] & 0xFFFF0000);
|
||||
|
||||
{
|
||||
BEGIN_LP_RING(8);
|
||||
|
||||
if (pScrn->bitsPerPixel == 32) {
|
||||
OUT_RING(XY_MONO_SRC_BLT_CMD | XY_MONO_SRC_BLT_WRITE_ALPHA |
|
||||
tiled << 11 |
|
||||
XY_MONO_SRC_BLT_WRITE_RGB);
|
||||
} else {
|
||||
OUT_RING(XY_MONO_SRC_BLT_CMD);
|
||||
OUT_RING(XY_MONO_SRC_BLT_CMD | tiled << 11);
|
||||
}
|
||||
OUT_RING(pI830->BR[13]);
|
||||
OUT_RING(0); /* x1 = 0, y1 = 0 */
|
||||
|
|
@ -690,6 +748,9 @@ I830SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
|
|||
*/
|
||||
pI830->BR[9] += pScrn->displayWidth * pI830->cpp;
|
||||
I830GetNextScanlineColorExpandBuffer(pScrn);
|
||||
|
||||
if (IS_I965G(pI830))
|
||||
I830EmitFlush(pScrn);
|
||||
}
|
||||
|
||||
#if DO_SCANLINE_IMAGE_WRITE
|
||||
|
|
@ -741,6 +802,7 @@ static void
|
|||
I830SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno)
|
||||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
unsigned int tiled = CheckTiling(pScrn);
|
||||
|
||||
if (pI830->init == 0) {
|
||||
pI830->BR[12] = (pI830->AccelInfoRec->ScanlineColorExpandBuffers[0] -
|
||||
|
|
@ -763,9 +825,10 @@ I830SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno)
|
|||
|
||||
if (pScrn->bitsPerPixel == 32) {
|
||||
OUT_RING(XY_SRC_COPY_BLT_CMD | XY_SRC_COPY_BLT_WRITE_ALPHA |
|
||||
tiled << 11 |
|
||||
XY_SRC_COPY_BLT_WRITE_RGB);
|
||||
} else {
|
||||
OUT_RING(XY_SRC_COPY_BLT_CMD);
|
||||
OUT_RING(XY_SRC_COPY_BLT_CMD | tiled << 11);
|
||||
}
|
||||
OUT_RING(pI830->BR[13]);
|
||||
OUT_RING(0); /* x1 = 0, y1 = 0 */
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ typedef struct {
|
|||
drmTextureRegion texList[I830_NR_TEX_REGIONS+1];
|
||||
int last_upload; /* last time texture was uploaded */
|
||||
int last_enqueue; /* last time a buffer was enqueued */
|
||||
int last_dispatch; /* age of the most recently dispatched buffer */
|
||||
volatile int last_dispatch; /* age of the most recently dispatched buffer */
|
||||
int ctxOwner; /* last context to upload state */
|
||||
int texAge;
|
||||
int pf_enabled; /* is pageflipping allowed? */
|
||||
|
|
@ -115,6 +115,12 @@ typedef struct {
|
|||
int rotated_size;
|
||||
int rotated_pitch;
|
||||
int virtualX, virtualY;
|
||||
|
||||
unsigned int front_tiled;
|
||||
unsigned int back_tiled;
|
||||
unsigned int depth_tiled;
|
||||
unsigned int rotated_tiled;
|
||||
unsigned int rotated2_tiled;
|
||||
} drmI830Sarea;
|
||||
|
||||
/* Flags for perf_boxes
|
||||
|
|
|
|||
|
|
@ -99,18 +99,32 @@ I830InitHWCursor(ScrnInfoPtr pScrn)
|
|||
temp |= CURSOR_MODE_64_4C_AX;
|
||||
/* Need to set control, then address. */
|
||||
OUTREG(CURSOR_A_CONTROL, temp);
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Physical);
|
||||
if (pI830->CursorNeedsPhysical) {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Physical);
|
||||
} else {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Start);
|
||||
else
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Start);
|
||||
}
|
||||
if (pI830->Clone || pI830->MergedFB) {
|
||||
temp &= ~MCURSOR_PIPE_SELECT;
|
||||
temp |= (!pI830->pipe << 28);
|
||||
OUTREG(CURSOR_B_CONTROL, temp);
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Physical);
|
||||
if (pI830->CursorNeedsPhysical) {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Physical);
|
||||
} else {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Start);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Start);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
temp = INREG(CURSOR_CONTROL);
|
||||
|
|
@ -461,6 +475,7 @@ I830SetCursorPosition(ScrnInfoPtr pScrn, int x, int y)
|
|||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
CARD32 temp = 0;
|
||||
static Bool outsideViewport = FALSE;
|
||||
Bool hide = FALSE, show = FALSE;
|
||||
int oldx = x, oldy = y;
|
||||
int hotspotx = 0, hotspoty = 0;
|
||||
|
|
@ -555,15 +570,29 @@ I830SetCursorPosition(ScrnInfoPtr pScrn, int x, int y)
|
|||
|
||||
/* have to upload the base for the new position */
|
||||
if (IS_I9XX(pI830)) {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Physical);
|
||||
if (pI830->Clone) {
|
||||
if (pI830->CursorNeedsPhysical) {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Physical);
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Physical);
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Physical);
|
||||
} else {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Start);
|
||||
else
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Start);
|
||||
}
|
||||
if (pI830->Clone) {
|
||||
if (pI830->CursorNeedsPhysical) {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Physical);
|
||||
} else {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Start);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Start);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -595,25 +624,39 @@ I830ShowCursor(ScrnInfoPtr pScrn)
|
|||
temp |= (pI830->pipe << 28); /* Connect to correct pipe */
|
||||
/* Need to set mode, then address. */
|
||||
OUTREG(CURSOR_A_CONTROL, temp);
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Physical);
|
||||
if (pI830->CursorNeedsPhysical) {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Physical);
|
||||
} else {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Start);
|
||||
else
|
||||
OUTREG(CURSOR_A_BASE, pI830->CursorMem->Start);
|
||||
}
|
||||
if (pI830->Clone || pI830->MergedFB) {
|
||||
temp &= ~MCURSOR_PIPE_SELECT;
|
||||
temp |= (!pI830->pipe << 28);
|
||||
OUTREG(CURSOR_B_CONTROL, temp);
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Physical);
|
||||
if (pI830->CursorNeedsPhysical) {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Physical);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Physical);
|
||||
} else {
|
||||
if (pI830->CursorIsARGB)
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMemARGB->Start);
|
||||
else
|
||||
OUTREG(CURSOR_B_BASE, pI830->CursorMem->Start);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
temp = INREG(CURSOR_CONTROL);
|
||||
temp &= ~(CURSOR_FORMAT_MASK | CURSOR_GAMMA_ENABLE);
|
||||
temp |= CURSOR_ENABLE;
|
||||
if (pI830->CursorIsARGB)
|
||||
temp |= CURSOR_FORMAT_ARGB | CURSOR_GAMMA_ENABLE;
|
||||
temp |= CURSOR_FORMAT_ARGB;
|
||||
else
|
||||
temp |= CURSOR_FORMAT_3C;
|
||||
OUTREG(CURSOR_CONTROL, temp);
|
||||
|
|
@ -635,7 +678,7 @@ I830HideCursor(ScrnInfoPtr pScrn)
|
|||
pI830->cursorOn = FALSE;
|
||||
if (IS_MOBILE(pI830) || IS_I9XX(pI830)) {
|
||||
temp = INREG(CURSOR_A_CONTROL);
|
||||
temp &= ~(CURSOR_MODE|MCURSOR_GAMMA_ENABLE);
|
||||
temp &= ~CURSOR_MODE;
|
||||
temp |= CURSOR_MODE_DISABLE;
|
||||
OUTREG(CURSOR_A_CONTROL, temp);
|
||||
/* This is needed to flush the above change. */
|
||||
|
|
@ -652,7 +695,7 @@ I830HideCursor(ScrnInfoPtr pScrn)
|
|||
}
|
||||
} else {
|
||||
temp = INREG(CURSOR_CONTROL);
|
||||
temp &= ~(CURSOR_ENABLE|CURSOR_GAMMA_ENABLE);
|
||||
temp &= ~CURSOR_ENABLE;
|
||||
OUTREG(CURSOR_CONTROL, temp);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -279,12 +279,25 @@ static void
|
|||
I830_Sync(ScrnInfoPtr pScrn)
|
||||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
int flags = MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE;
|
||||
|
||||
MARKER();
|
||||
|
||||
if (pI830->AccelInfoRec) {
|
||||
(*pI830->AccelInfoRec->Sync) (pScrn);
|
||||
}
|
||||
if (pI830->noAccel)
|
||||
return;
|
||||
|
||||
if (IS_I965G(pI830))
|
||||
flags = 0;
|
||||
|
||||
BEGIN_LP_RING(2);
|
||||
OUT_RING(MI_FLUSH | flags);
|
||||
OUT_RING(MI_NOOP); /* pad to quadword */
|
||||
ADVANCE_LP_RING();
|
||||
|
||||
I830WaitLpRing(pScrn, pI830->LpRing->mem.Size - 8, 0);
|
||||
|
||||
pI830->LpRing->space = pI830->LpRing->mem.Size - 8;
|
||||
pI830->nextColorExpandBuf = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
119
src/i830_dri.c
119
src/i830_dri.c
|
|
@ -81,8 +81,11 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "i830.h"
|
||||
#include "i830_dri.h"
|
||||
|
||||
#include "dristruct.h"
|
||||
|
||||
static char I830KernelDriverName[] = "i915";
|
||||
static char I830ClientDriverName[] = "i915";
|
||||
static char I965ClientDriverName[] = "i965";
|
||||
|
||||
static Bool I830InitVisualConfigs(ScreenPtr pScreen);
|
||||
static Bool I830CreateContext(ScreenPtr pScreen, VisualPtr visual,
|
||||
|
|
@ -99,6 +102,8 @@ static void I830DRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index);
|
|||
static void I830DRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
|
||||
RegionPtr prgnSrc, CARD32 index);
|
||||
|
||||
static Bool I830DRICloseFullScreen(ScreenPtr pScreen);
|
||||
static Bool I830DRIOpenFullScreen(ScreenPtr pScreen);
|
||||
static void I830DRITransitionTo2d(ScreenPtr pScreen);
|
||||
static void I830DRITransitionTo3d(ScreenPtr pScreen);
|
||||
static void I830DRITransitionMultiToSingle3d(ScreenPtr pScreen);
|
||||
|
|
@ -424,11 +429,13 @@ I830CheckDRIAvailable(ScrnInfoPtr pScrn)
|
|||
* for known symbols in each module. */
|
||||
if (!xf86LoaderCheckSymbol("GlxSetVisualConfigs"))
|
||||
return FALSE;
|
||||
if (!xf86LoaderCheckSymbol("DRIScreenInit"))
|
||||
return FALSE;
|
||||
if (!xf86LoaderCheckSymbol("drmAvailable"))
|
||||
return FALSE;
|
||||
if (!xf86LoaderCheckSymbol("DRIQueryVersion")) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||
"[dri] %s failed (libdri.a too old)\n", "I830DRIScreenInit");
|
||||
"[dri] %s failed (libdri.a too old)\n", "I830CheckDRIAvailable");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -440,10 +447,10 @@ I830CheckDRIAvailable(ScrnInfoPtr pScrn)
|
|||
if (major != DRIINFO_MAJOR_VERSION || minor < DRIINFO_MINOR_VERSION) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||
"[dri] %s failed because of a version mismatch.\n"
|
||||
"[dri] libdri version is %d.%d.%d bug version %d.%d.x is needed.\n"
|
||||
"[dri] libDRI version is %d.%d.%d but version %d.%d.x is needed.\n"
|
||||
"[dri] Disabling DRI.\n",
|
||||
"I830DRIScreenInit", major, minor, patch,
|
||||
DRIINFO_MAJOR_VERSION, DRIINFO_MINOR_VERSION);
|
||||
"I830CheckDRIAvailable", major, minor, patch,
|
||||
DRIINFO_MAJOR_VERSION, DRIINFO_MINOR_VERSION);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
|
@ -475,7 +482,11 @@ I830DRIScreenInit(ScreenPtr pScreen)
|
|||
pI830->LockHeld = 0;
|
||||
|
||||
pDRIInfo->drmDriverName = I830KernelDriverName;
|
||||
pDRIInfo->clientDriverName = I830ClientDriverName;
|
||||
if (IS_I965G(pI830))
|
||||
pDRIInfo->clientDriverName = I965ClientDriverName;
|
||||
else
|
||||
pDRIInfo->clientDriverName = I830ClientDriverName;
|
||||
|
||||
if (xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
|
||||
pDRIInfo->busIdString = DRICreatePCIBusID(pI830->PciInfo);
|
||||
} else {
|
||||
|
|
@ -488,13 +499,16 @@ I830DRIScreenInit(ScreenPtr pScreen)
|
|||
pDRIInfo->ddxDriverMajorVersion = I830_MAJOR_VERSION;
|
||||
pDRIInfo->ddxDriverMinorVersion = I830_MINOR_VERSION;
|
||||
pDRIInfo->ddxDriverPatchVersion = I830_PATCHLEVEL;
|
||||
#if 1 /* temporary until this gets removed from the libdri layer */
|
||||
#if 1 /* Remove this soon - see bug 5714 */
|
||||
pDRIInfo->frameBufferPhysicalAddress = (char *) pI830->LinearAddr +
|
||||
pI830->FrontBuffer.Start;
|
||||
pDRIInfo->frameBufferSize = ROUND_TO_PAGE(pScrn->displayWidth *
|
||||
pScrn->virtualY * pI830->cpp);
|
||||
pDRIInfo->frameBufferStride = pScrn->displayWidth * pI830->cpp;
|
||||
#else
|
||||
/* For rotation we map a 0 length framebuffer as we remap ourselves later */
|
||||
pDRIInfo->frameBufferSize = 0;
|
||||
#endif
|
||||
pDRIInfo->frameBufferStride = pScrn->displayWidth * pI830->cpp;
|
||||
pDRIInfo->ddxDrawableTableEntry = I830_MAX_DRAWABLES;
|
||||
|
||||
if (SAREA_MAX_DRAWABLES < I830_MAX_DRAWABLES)
|
||||
|
|
@ -534,6 +548,7 @@ I830DRIScreenInit(ScreenPtr pScreen)
|
|||
pDRIInfo->TransitionSingleToMulti3D = I830DRITransitionSingleToMulti3d;
|
||||
pDRIInfo->TransitionMultiToSingle3D = I830DRITransitionMultiToSingle3d;
|
||||
|
||||
/* do driver-independent DRI screen initialization here */
|
||||
if (!DRIScreenInit(pScreen, pDRIInfo, &pI830->drmSubFD)) {
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[dri] DRIScreenInit failed. Disabling DRI.\n");
|
||||
|
|
@ -544,6 +559,27 @@ I830DRIScreenInit(ScreenPtr pScreen)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
#if 0 /* disabled now, see frameBufferSize above being set to 0 */
|
||||
/* for this driver, get rid of the front buffer mapping now */
|
||||
if (xf86LoaderCheckSymbol("DRIGetScreenPrivate")) {
|
||||
DRIScreenPrivPtr pDRIPriv
|
||||
= (DRIScreenPrivPtr) DRIGetScreenPrivate(pScreen);
|
||||
|
||||
if (pDRIPriv && pDRIPriv->drmFD && pDRIPriv->hFrameBuffer) {
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[intel] removing original screen mapping\n");
|
||||
drmRmMap(pDRIPriv->drmFD, pDRIPriv->hFrameBuffer);
|
||||
pDRIPriv->hFrameBuffer = 0;
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[intel] done removing original screen mapping\n");
|
||||
}
|
||||
}
|
||||
else {
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[intel] DRIGetScreenPrivate not found!!!!\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Check the i915 DRM versioning */
|
||||
{
|
||||
drmVersionPtr version;
|
||||
|
|
@ -589,11 +625,11 @@ I830DRIScreenInit(ScreenPtr pScreen)
|
|||
/* Check the i915 DRM version */
|
||||
version = drmGetVersion(pI830->drmSubFD);
|
||||
if (version) {
|
||||
if (version->version_major != 1 || version->version_minor < 4) {
|
||||
if (version->version_major != 1 || version->version_minor < 3) {
|
||||
/* incompatible drm version */
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[dri] %s failed because of a version mismatch.\n"
|
||||
"[dri] i915 kernel module version is %d.%d.%d but version 1.4 or greater is needed.\n"
|
||||
"[dri] i915 kernel module version is %d.%d.%d but version 1.3 or greater is needed.\n"
|
||||
"[dri] Disabling DRI.\n",
|
||||
"I830DRIScreenInit",
|
||||
version->version_major,
|
||||
|
|
@ -623,21 +659,31 @@ I830DRIMapScreenRegions(ScrnInfoPtr pScrn, drmI830Sarea *sarea)
|
|||
ScreenPtr pScreen = pScrn->pScreen;
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"[drm] Mapping front buffer\n");
|
||||
if (drmAddMap(pI830->drmSubFD,
|
||||
(drm_handle_t)(sarea->front_offset + pI830->LinearAddr),
|
||||
sarea->front_size,
|
||||
DRM_FRAME_BUFFER, /*DRM_AGP,*/
|
||||
0,
|
||||
(drmAddress) &sarea->front_handle) < 0) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||
"[drm] drmAddMap(front_handle) failed. Disabling DRI\n");
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
#if 1 /* Remove this soon - see bug 5714 */
|
||||
pI830->pDRIInfo->frameBufferSize = ROUND_TO_PAGE(pScrn->displayWidth *
|
||||
pScrn->virtualY * pI830->cpp);
|
||||
#endif
|
||||
|
||||
/* The I965G isn't ready for the front buffer mapping to be moved around,
|
||||
* because of issues with rmmap, it seems.
|
||||
*/
|
||||
if (!IS_I965G(pI830)) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"[drm] Mapping front buffer\n");
|
||||
if (drmAddMap(pI830->drmSubFD,
|
||||
(drm_handle_t)(sarea->front_offset + pI830->LinearAddr),
|
||||
sarea->front_size,
|
||||
DRM_AGP,
|
||||
0,
|
||||
(drmAddress) &sarea->front_handle) < 0) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||
"[drm] drmAddMap(front_handle) failed. Disabling DRI\n");
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Front Buffer = 0x%08x\n",
|
||||
(int)sarea->front_handle);
|
||||
}
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Front Buffer = 0x%08x\n",
|
||||
(int)sarea->front_handle);
|
||||
|
||||
if (drmAddMap(pI830->drmSubFD,
|
||||
(drm_handle_t)(sarea->back_offset + pI830->LinearAddr),
|
||||
|
|
@ -684,12 +730,10 @@ I830DRIUnmapScreenRegions(ScrnInfoPtr pScrn, drmI830Sarea *sarea)
|
|||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
|
||||
#if 1
|
||||
if (sarea->front_handle) {
|
||||
drmRmMap(pI830->drmSubFD, sarea->front_handle);
|
||||
sarea->front_handle = 0;
|
||||
}
|
||||
#endif
|
||||
if (sarea->back_handle) {
|
||||
drmRmMap(pI830->drmSubFD, sarea->back_handle);
|
||||
sarea->back_handle = 0;
|
||||
|
|
@ -785,7 +829,6 @@ I830DRIDoMappings(ScreenPtr pScreen)
|
|||
/* screen mappings probably failed */
|
||||
xf86DrvMsg(pScreen->myNum, X_ERROR,
|
||||
"[drm] drmAddMap(screen mappings) failed. Disabling DRI\n");
|
||||
DRICloseScreen(pScreen);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -824,9 +867,6 @@ I830DRIDoMappings(ScreenPtr pScreen)
|
|||
pI830DRI->mem = pScrn->videoRam * 1024;
|
||||
pI830DRI->cpp = pI830->cpp;
|
||||
|
||||
pI830DRI->fbOffset = pI830->FrontBuffer.Start;
|
||||
pI830DRI->fbStride = pI830->backPitch;
|
||||
|
||||
pI830DRI->bitsPerPixel = pScrn->bitsPerPixel;
|
||||
|
||||
pI830DRI->sarea_priv_offset = sizeof(XF86DRISAREARec);
|
||||
|
|
@ -1166,8 +1206,10 @@ I830DRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
|
|||
|
||||
I830SelectBuffer(pScrn, I830_SELECT_BACK);
|
||||
I830SubsequentScreenToScreenCopy(pScrn, x1, y1, destx, desty, w, h);
|
||||
I830SelectBuffer(pScrn, I830_SELECT_DEPTH);
|
||||
I830SubsequentScreenToScreenCopy(pScrn, x1, y1, destx, desty, w, h);
|
||||
if (!IS_I965G(pI830)) {
|
||||
I830SelectBuffer(pScrn, I830_SELECT_DEPTH);
|
||||
I830SubsequentScreenToScreenCopy(pScrn, x1, y1, destx, desty, w, h);
|
||||
}
|
||||
}
|
||||
I830SelectBuffer(pScrn, I830_SELECT_FRONT);
|
||||
I830EmitFlush(pScrn);
|
||||
|
|
@ -1207,6 +1249,7 @@ I830DRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
|
|||
* might be faster, but seems like a lot more work...
|
||||
*/
|
||||
|
||||
|
||||
#if 0
|
||||
/* This should be done *before* XAA syncs,
|
||||
* Otherwise will have to sync again???
|
||||
|
|
@ -1216,7 +1259,7 @@ I830DRIShadowUpdate (ScreenPtr pScreen, shadowBufPtr pBuf)
|
|||
{
|
||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
RegionPtr damage = (RegionPtr) shadowDamage(pBuf);
|
||||
RegionPtr damage = &pBuf->damage;
|
||||
int i, num = REGION_NUM_RECTS(damage);
|
||||
BoxPtr pbox = REGION_RECTS(damage);
|
||||
drmI830Sarea *pSAREAPriv = DRIGetSAREAPrivate(pScreen);
|
||||
|
|
@ -1346,6 +1389,7 @@ I830DRITransitionTo2d(ScreenPtr pScreen)
|
|||
}
|
||||
|
||||
pI830->have3DWindows = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1362,6 +1406,14 @@ I830UpdateDRIBuffers(ScrnInfoPtr pScrn, drmI830Sarea *sarea)
|
|||
|
||||
I830DRIUnmapScreenRegions(pScrn, sarea);
|
||||
|
||||
sarea->front_tiled = pI830->front_tiled;
|
||||
sarea->back_tiled = pI830->back_tiled;
|
||||
sarea->depth_tiled = pI830->depth_tiled;
|
||||
sarea->rotated_tiled = pI830->rotated_tiled;
|
||||
#if 0
|
||||
sarea->rotated2_tiled = pI830->rotated2_tiled;
|
||||
#endif
|
||||
|
||||
if (pI830->rotation == RR_Rotate_0) {
|
||||
sarea->front_offset = pI830->FrontBuffer.Start;
|
||||
/* Don't use FrontBuffer.Size here as it includes the pixmap cache area
|
||||
|
|
@ -1421,7 +1473,8 @@ I830UpdateDRIBuffers(ScrnInfoPtr pScrn, drmI830Sarea *sarea)
|
|||
|
||||
success = I830DRIMapScreenRegions(pScrn, sarea);
|
||||
|
||||
I830InitTextureHeap(pScrn, sarea);
|
||||
if (success)
|
||||
I830InitTextureHeap(pScrn, sarea);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#ifndef _I830_DRI_H
|
||||
#define _I830_DRI_H
|
||||
|
||||
#include "xf86dri.h"
|
||||
#include "xf86drm.h"
|
||||
#include "i830_common.h"
|
||||
|
||||
|
|
@ -18,21 +19,6 @@ typedef struct _I830DRIRec {
|
|||
drm_handle_t regs;
|
||||
drmSize regsSize;
|
||||
|
||||
drmSize backbufferSize;
|
||||
drm_handle_t backbuffer;
|
||||
|
||||
drmSize depthbufferSize;
|
||||
drm_handle_t depthbuffer;
|
||||
|
||||
drmSize rotatedSize;
|
||||
drm_handle_t rotatedbuffer;
|
||||
|
||||
drm_handle_t textures;
|
||||
int textureSize;
|
||||
|
||||
drm_handle_t agp_buffers;
|
||||
drmSize agp_buf_size;
|
||||
|
||||
int deviceID;
|
||||
int width;
|
||||
int height;
|
||||
|
|
@ -40,21 +26,6 @@ typedef struct _I830DRIRec {
|
|||
int cpp;
|
||||
int bitsPerPixel;
|
||||
|
||||
int fbOffset;
|
||||
int fbStride;
|
||||
|
||||
int backOffset;
|
||||
int backPitch;
|
||||
|
||||
int depthOffset;
|
||||
int depthPitch;
|
||||
|
||||
int rotatedOffset;
|
||||
int rotatedPitch;
|
||||
|
||||
int logTextureGranularity;
|
||||
int textureOffset;
|
||||
|
||||
int irq;
|
||||
int sarea_priv_offset;
|
||||
} I830DRIRec, *I830DRIPtr;
|
||||
|
|
|
|||
|
|
@ -150,6 +150,11 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
* 09/2005 Alan Hourihane
|
||||
* - Add Intel(R) 945GM support.
|
||||
*
|
||||
* 10/2005 Alan Hourihane, Keith Whitwell, Brian Paul
|
||||
* - Added Rotation support
|
||||
*
|
||||
* 12/2005 Alan Hourihane, Keith Whitwell
|
||||
* - Add Intel(R) 965G support.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
@ -186,6 +191,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "shadow.h"
|
||||
#include "i830.h"
|
||||
|
||||
#ifdef HAS_MTRR_SUPPORT
|
||||
#include <asm/mtrr.h>
|
||||
#endif
|
||||
|
||||
#ifdef XF86DRI
|
||||
#include "dri.h"
|
||||
#endif
|
||||
|
|
@ -205,6 +214,10 @@ static SymTabRec I830BIOSChipsets[] = {
|
|||
{PCI_CHIP_I915_GM, "915GM"},
|
||||
{PCI_CHIP_I945_G, "945G"},
|
||||
{PCI_CHIP_I945_GM, "945GM"},
|
||||
{PCI_CHIP_I965_G, "965G"},
|
||||
{PCI_CHIP_I965_G_1, "965G"},
|
||||
{PCI_CHIP_I965_Q, "965Q"},
|
||||
{PCI_CHIP_I946_GZ, "946GZ"},
|
||||
{-1, NULL}
|
||||
};
|
||||
|
||||
|
|
@ -218,6 +231,10 @@ static PciChipsets I830BIOSPciChipsets[] = {
|
|||
{PCI_CHIP_I915_GM, PCI_CHIP_I915_GM, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I945_G, PCI_CHIP_I945_G, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I945_GM, PCI_CHIP_I945_GM, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I965_G, PCI_CHIP_I965_G, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I965_G_1, PCI_CHIP_I965_G_1, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I965_Q, PCI_CHIP_I965_Q, RES_SHARED_VGA},
|
||||
{PCI_CHIP_I946_GZ, PCI_CHIP_I946_GZ, RES_SHARED_VGA},
|
||||
{-1, -1, RES_UNDEFINED}
|
||||
};
|
||||
|
||||
|
|
@ -2090,7 +2107,7 @@ GetNextDisplayDeviceList(ScrnInfoPtr pScrn, int toggle)
|
|||
CARD32 VODA = (CARD32)((CARD32*)pVbe->memory)[i];
|
||||
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Next ACPI _DGS [%d] 0x%lx\n",
|
||||
i, (unsigned long) VODA);
|
||||
i, VODA);
|
||||
|
||||
/* Check if it's a custom Video Output Device Attribute */
|
||||
if (!(VODA & 0x80000000))
|
||||
|
|
@ -2147,8 +2164,7 @@ GetAttachableDisplayDeviceList(ScrnInfoPtr pScrn)
|
|||
|
||||
for (i=0; i<(pVbe->pInt10->cx & 0xff); i++)
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Attachable device 0x%lx.\n",
|
||||
(unsigned long) ((CARD32*)pVbe->memory)[i]);
|
||||
"Attachable device 0x%lx.\n", ((CARD32*)pVbe->memory)[i]);
|
||||
|
||||
return pVbe->pInt10->cx & 0xffff;
|
||||
}
|
||||
|
|
@ -3063,8 +3079,11 @@ I830DetectMemory(ScrnInfoPtr pScrn)
|
|||
gmch_ctrl = pciReadWord(bridge, I830_GMCH_CTRL);
|
||||
|
||||
/* We need to reduce the stolen size, by the GTT and the popup.
|
||||
* The GTT varying according the the FbMapSize and the popup is 4KB */
|
||||
range = (pI830->FbMapSize / (1024*1024)) + 4;
|
||||
* The GTT varying according the the FbMapSize and the popup is 4KB. */
|
||||
if (IS_I965G(pI830))
|
||||
range = 512 + 4; /* Fixed 512KB size for i965 */
|
||||
else
|
||||
range = (pI830->FbMapSize / MB(1)) + 4;
|
||||
|
||||
if (IS_I85X(pI830) || IS_I865G(pI830) || IS_I9XX(pI830)) {
|
||||
switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
|
||||
|
|
@ -3110,6 +3129,12 @@ I830DetectMemory(ScrnInfoPtr pScrn)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* And 64KB page aligned */
|
||||
memsize &= ~0xFFFF;
|
||||
#endif
|
||||
|
||||
if (memsize > 0) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"detected %d kB stolen memory.\n", memsize / 1024);
|
||||
|
|
@ -3481,7 +3506,7 @@ I830LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
|
|||
unsigned char r, g, b;
|
||||
CARD32 val, temp;
|
||||
int palreg;
|
||||
int dspreg, dspbase;
|
||||
int dspreg, dspbase, dspsurf;
|
||||
|
||||
DPRINTF(PFX, "I830LoadPalette: numColors: %d\n", numColors);
|
||||
pI830 = I830PTR(pScrn);
|
||||
|
|
@ -3563,10 +3588,12 @@ I830LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
|
|||
palreg = PALETTE_A;
|
||||
dspreg = DSPACNTR;
|
||||
dspbase = DSPABASE;
|
||||
dspsurf = DSPASURF;
|
||||
} else {
|
||||
palreg = PALETTE_B;
|
||||
dspreg = DSPBCNTR;
|
||||
dspbase = DSPBBASE;
|
||||
dspsurf = DSPBSURF;
|
||||
}
|
||||
|
||||
/* To ensure gamma is enabled we need to turn off and on the plane */
|
||||
|
|
@ -3575,6 +3602,8 @@ I830LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
|
|||
OUTREG(dspbase, INREG(dspbase));
|
||||
OUTREG(dspreg, temp | DISPPLANE_GAMMA_ENABLE);
|
||||
OUTREG(dspbase, INREG(dspbase));
|
||||
if (IS_I965G(pI830))
|
||||
OUTREG(dspsurf, INREG(dspsurf));
|
||||
|
||||
/* It seems that an initial read is needed. */
|
||||
temp = INREG(palreg);
|
||||
|
|
@ -3983,6 +4012,16 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
|
|||
case PCI_CHIP_I945_GM:
|
||||
chipname = "945GM";
|
||||
break;
|
||||
case PCI_CHIP_I965_G:
|
||||
case PCI_CHIP_I965_G_1:
|
||||
chipname = "965G";
|
||||
break;
|
||||
case PCI_CHIP_I965_Q:
|
||||
chipname = "965Q";
|
||||
break;
|
||||
case PCI_CHIP_I946_GZ:
|
||||
chipname = "946GZ";
|
||||
break;
|
||||
default:
|
||||
chipname = "unknown chipset";
|
||||
break;
|
||||
|
|
@ -4689,7 +4728,7 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
|
|||
* or, at least it's meant to..... alas it doesn't seem to always work.
|
||||
*/
|
||||
if (pI830->devicePresence) {
|
||||
int req=0, att=0, enc=0;
|
||||
int req, att, enc;
|
||||
GetDevicePresence(pScrn, &req, &att, &enc);
|
||||
for (i = 0; i < NumDisplayTypes; i++) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
|
|
@ -4838,6 +4877,9 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
|
|||
else
|
||||
pI830->CursorNeedsPhysical = FALSE;
|
||||
|
||||
if (IS_I965G(pI830))
|
||||
pI830->CursorNeedsPhysical = FALSE;
|
||||
|
||||
/* Force ring buffer to be in low memory for all chipsets */
|
||||
pI830->NeedRingBufferLow = TRUE;
|
||||
|
||||
|
|
@ -5561,8 +5603,12 @@ CheckInheritedState(ScrnInfoPtr pScrn)
|
|||
}
|
||||
|
||||
#if 0
|
||||
if (errors)
|
||||
I830PrintErrorState(pScrn);
|
||||
if (errors) {
|
||||
if (IS_I965G(pI830))
|
||||
I965PrintErrorState(pScrn);
|
||||
else
|
||||
I830PrintErrorState(pScrn);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (fatal)
|
||||
|
|
@ -5592,8 +5638,15 @@ ResetState(ScrnInfoPtr pScrn, Bool flush)
|
|||
pI830->entityPrivate->RingRunning = 0;
|
||||
|
||||
/* Reset the fence registers to 0 */
|
||||
for (i = 0; i < 8; i++)
|
||||
OUTREG(FENCE + i * 4, 0);
|
||||
if (IS_I965G(pI830)) {
|
||||
for (i = 0; i < FENCE_NEW_NR; i++) {
|
||||
OUTREG(FENCE_NEW + i * 8, 0);
|
||||
OUTREG(FENCE_NEW + 4 + i * 8, 0);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < FENCE_NR; i++)
|
||||
OUTREG(FENCE + i * 4, 0);
|
||||
}
|
||||
|
||||
/* Flush the ring buffer (if enabled), then disable it. */
|
||||
if (pI830->AccelInfoRec != NULL && flush) {
|
||||
|
|
@ -5623,10 +5676,21 @@ SetFenceRegs(ScrnInfoPtr pScrn)
|
|||
|
||||
if (!I830IsPrimary(pScrn)) return;
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
OUTREG(FENCE + i * 4, pI830->ModeReg.Fence[i]);
|
||||
if (I810_DEBUG & DEBUG_VERBOSE_VGA)
|
||||
ErrorF("Fence Register : %x\n", pI830->ModeReg.Fence[i]);
|
||||
if (IS_I965G(pI830)) {
|
||||
for (i = 0; i < FENCE_NEW_NR; i++) {
|
||||
OUTREG(FENCE_NEW + i * 8, pI830->ModeReg.Fence[i]);
|
||||
OUTREG(FENCE_NEW + 4 + i * 8, pI830->ModeReg.Fence[i+FENCE_NEW_NR]);
|
||||
if (I810_DEBUG & DEBUG_VERBOSE_VGA) {
|
||||
ErrorF("Fence Start Register : %x\n", pI830->ModeReg.Fence[i]);
|
||||
ErrorF("Fence End Register : %x\n", pI830->ModeReg.Fence[i+FENCE_NEW_NR]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < FENCE_NR; i++) {
|
||||
OUTREG(FENCE + i * 4, pI830->ModeReg.Fence[i]);
|
||||
if (I810_DEBUG & DEBUG_VERBOSE_VGA)
|
||||
ErrorF("Fence Register : %x\n", pI830->ModeReg.Fence[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -5727,6 +5791,12 @@ SaveHWState(ScrnInfoPtr pScrn)
|
|||
vgaHWSave(pScrn, vgaReg, VGA_SR_FONTS);
|
||||
|
||||
pVesa = pI830->vesa;
|
||||
|
||||
if (IS_I965G(pI830)) {
|
||||
pI830->savedAsurf = INREG(DSPASURF);
|
||||
pI830->savedBsurf = INREG(DSPBSURF);
|
||||
}
|
||||
|
||||
/*
|
||||
* This save/restore method doesn't work for 845G BIOS, or for some
|
||||
* other platforms. Enable it in all cases.
|
||||
|
|
@ -5779,9 +5849,6 @@ RestoreHWState(ScrnInfoPtr pScrn)
|
|||
|
||||
DPRINTF(PFX, "RestoreHWState\n");
|
||||
|
||||
#ifdef XF86DRI
|
||||
I830DRISetVBlankInterrupt (pScrn, FALSE);
|
||||
#endif
|
||||
if (I830IsPrimary(pScrn) && pI830->pipe != pI830->origPipe)
|
||||
SetBIOSPipe(pScrn, pI830->origPipe);
|
||||
else
|
||||
|
|
@ -5840,6 +5907,11 @@ RestoreHWState(ScrnInfoPtr pScrn)
|
|||
|
||||
VBESetDisplayStart(pVbe, pVesa->x, pVesa->y, TRUE);
|
||||
|
||||
if (IS_I965G(pI830)) {
|
||||
OUTREG(DSPASURF, pI830->savedAsurf);
|
||||
OUTREG(DSPBSURF, pI830->savedBsurf);
|
||||
}
|
||||
|
||||
vgaHWRestore(pScrn, vgaReg, VGA_SR_FONTS);
|
||||
vgaHWLock(hwp);
|
||||
|
||||
|
|
@ -6109,6 +6181,25 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
{ /* I965G ENABLE TILING */
|
||||
planeA = INREG(DSPACNTR) | 1<<10;
|
||||
OUTREG(DSPACNTR, planeA);
|
||||
/* flush the change. */
|
||||
temp = INREG(DSPABASE);
|
||||
OUTREG(DSPABASE, temp);
|
||||
}
|
||||
#else
|
||||
{ /* I965G DISABLE TILING */
|
||||
planeA = INREG(DSPACNTR) & ~1<<10;
|
||||
OUTREG(DSPACNTR, planeA);
|
||||
/* flush the change. */
|
||||
temp = INREG(DSPABASE);
|
||||
OUTREG(DSPABASE, temp);
|
||||
OUTREG(DSPASURF, INREG(DSPASURF));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The BIOS may not set a scanline pitch that would require more video
|
||||
* memory than it's aware of. We check for this later, and set it
|
||||
|
|
@ -6168,6 +6259,10 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
/* flush the change. */
|
||||
temp = INREG(DSPABASE);
|
||||
OUTREG(DSPABASE, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(DSPASURF);
|
||||
OUTREG(DSPASURF, temp);
|
||||
}
|
||||
}
|
||||
if (pI830->planeEnabled[1]) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Enabling plane B.\n");
|
||||
|
|
@ -6178,6 +6273,10 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
/* flush the change. */
|
||||
temp = INREG(DSPBADDR);
|
||||
OUTREG(DSPBADDR, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(DSPBSURF);
|
||||
OUTREG(DSPBSURF, temp);
|
||||
}
|
||||
}
|
||||
|
||||
planeA = INREG(DSPACNTR);
|
||||
|
|
@ -6210,6 +6309,7 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
CARD32 stridereg = !pI830->pipe ? DSPASTRIDE : DSPBSTRIDE;
|
||||
CARD32 basereg = !pI830->pipe ? DSPABASE : DSPBBASE;
|
||||
CARD32 sizereg = !pI830->pipe ? DSPASIZE : DSPBSIZE;
|
||||
CARD32 surfreg = !pI830->pipe ? DSPASURF : DSPBSURF;
|
||||
I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
|
||||
|
||||
temp = INREG(stridereg);
|
||||
|
|
@ -6223,12 +6323,17 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
/* Trigger update */
|
||||
temp = INREG(basereg);
|
||||
OUTREG(basereg, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(surfreg);
|
||||
OUTREG(surfreg, temp);
|
||||
}
|
||||
|
||||
if (pI830->entityPrivate && pI830->entityPrivate->pScrn_2) {
|
||||
I830Ptr pI8302 = I830PTR(pI830->entityPrivate->pScrn_2);
|
||||
stridereg = pI830->pipe ? DSPASTRIDE : DSPBSTRIDE;
|
||||
basereg = pI830->pipe ? DSPABASE : DSPBBASE;
|
||||
sizereg = pI830->pipe ? DSPASIZE : DSPBSIZE;
|
||||
surfreg = pI830->pipe ? DSPASURF : DSPBSURF;
|
||||
|
||||
temp = INREG(stridereg);
|
||||
if (temp / pI8302->cpp != (CARD32)(pI8302->displayWidth)) {
|
||||
|
|
@ -6241,11 +6346,16 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
/* Trigger update */
|
||||
temp = INREG(basereg);
|
||||
OUTREG(basereg, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(surfreg);
|
||||
OUTREG(surfreg, temp);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CARD32 stridereg = pI830->pipe ? DSPASTRIDE : DSPBSTRIDE;
|
||||
CARD32 basereg = pI830->pipe ? DSPABASE : DSPBBASE;
|
||||
CARD32 sizereg = pI830->pipe ? DSPASIZE : DSPBSIZE;
|
||||
CARD32 surfreg = pI830->pipe ? DSPASURF : DSPBSURF;
|
||||
I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
|
||||
I830Ptr pI8302 = I830PTR(pI830->entityPrivate->pScrn_2);
|
||||
|
||||
|
|
@ -6260,10 +6370,15 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
/* Trigger update */
|
||||
temp = INREG(basereg);
|
||||
OUTREG(basereg, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(surfreg);
|
||||
OUTREG(surfreg, temp);
|
||||
}
|
||||
|
||||
stridereg = !pI830->pipe ? DSPASTRIDE : DSPBSTRIDE;
|
||||
basereg = !pI830->pipe ? DSPABASE : DSPBBASE;
|
||||
sizereg = !pI830->pipe ? DSPASIZE : DSPBSIZE;
|
||||
surfreg = !pI830->pipe ? DSPASURF : DSPBSURF;
|
||||
|
||||
temp = INREG(stridereg);
|
||||
if (temp / pI8302->cpp != ((CARD32)pI8302->displayWidth)) {
|
||||
|
|
@ -6276,12 +6391,17 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
/* Trigger update */
|
||||
temp = INREG(basereg);
|
||||
OUTREG(basereg, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(surfreg);
|
||||
OUTREG(surfreg, temp);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < pI830->availablePipes; i++) {
|
||||
CARD32 stridereg = i ? DSPBSTRIDE : DSPASTRIDE;
|
||||
CARD32 basereg = i ? DSPBBASE : DSPABASE;
|
||||
CARD32 sizereg = i ? DSPBSIZE : DSPASIZE;
|
||||
CARD32 surfreg = i ? DSPBSURF : DSPASURF;
|
||||
|
||||
if (!pI830->planeEnabled[i])
|
||||
continue;
|
||||
|
|
@ -6312,6 +6432,10 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
/* Trigger update */
|
||||
temp = INREG(basereg);
|
||||
OUTREG(basereg, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(surfreg);
|
||||
OUTREG(surfreg, temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6414,9 +6538,13 @@ I830VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
|
|||
SetHWOperatingState(pScrn);
|
||||
#endif
|
||||
|
||||
#ifdef XF86DRI
|
||||
I830DRISetVBlankInterrupt (pScrn, TRUE);
|
||||
#if 0
|
||||
if (IS_I965G(pI830))
|
||||
I965PrintErrorState(pScrn);
|
||||
else
|
||||
I830PrintErrorState(pScrn);
|
||||
#endif
|
||||
|
||||
#ifdef XF86DRI
|
||||
if (didLock)
|
||||
I830DRIUnlock(pScrn);
|
||||
|
|
@ -6470,6 +6598,59 @@ I830PrintErrorState(ScrnInfoPtr pScrn)
|
|||
INREG16(HWSTAM), INREG16(IER), INREG16(IMR), INREG16(IIR));
|
||||
}
|
||||
|
||||
void
|
||||
I965PrintErrorState(ScrnInfoPtr pScrn)
|
||||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
|
||||
ErrorF("pgetbl_ctl: 0x%lx pgetbl_err: 0x%lx\n",
|
||||
INREG(PGETBL_CTL), INREG(PGE_ERR));
|
||||
|
||||
ErrorF("ipeir: %lx iphdr: %lx\n", INREG(IPEIR_I965), INREG(IPEHR_I965));
|
||||
|
||||
ErrorF("LP ring tail: %lx head: %lx len: %lx start %lx\n",
|
||||
INREG(LP_RING + RING_TAIL),
|
||||
INREG(LP_RING + RING_HEAD) & HEAD_ADDR,
|
||||
INREG(LP_RING + RING_LEN), INREG(LP_RING + RING_START));
|
||||
|
||||
ErrorF("Err ID (eir): %x Err Status (esr): %x Err Mask (emr): %x\n",
|
||||
INREG(EIR), INREG(ESR), INREG(EMR));
|
||||
|
||||
ErrorF("instdone: %x instdone_1: %x\n", INREG(INST_DONE_I965), INREG(INST_DONE_1));
|
||||
ErrorF("instpm: %x\n", INREG(INST_PM));
|
||||
|
||||
ErrorF("memmode: %lx instps: %lx\n", INREG(MEMMODE), INREG(INST_PS_I965));
|
||||
|
||||
ErrorF("HW Status mask (hwstam): %x\nIRQ enable (ier): %x imr: %x iir: %x\n",
|
||||
INREG(HWSTAM), INREG(IER), INREG(IMR), INREG(IIR));
|
||||
|
||||
ErrorF("acthd: %lx dma_fadd_p: %lx\n", INREG(ACTHD), INREG(DMA_FADD_P));
|
||||
ErrorF("ecoskpd: %lx excc: %lx\n", INREG(ECOSKPD), INREG(EXCC));
|
||||
|
||||
ErrorF("cache_mode: %x/%x\n", INREG(CACHE_MODE_0), INREG(CACHE_MODE_1));
|
||||
ErrorF("mi_arb_state: %x\n", INREG(MI_ARB_STATE));
|
||||
|
||||
ErrorF("IA_VERTICES_COUNT_QW %x/%x\n", INREG(IA_VERTICES_COUNT_QW), INREG(IA_VERTICES_COUNT_QW+4));
|
||||
ErrorF("IA_PRIMITIVES_COUNT_QW %x/%x\n", INREG(IA_PRIMITIVES_COUNT_QW), INREG(IA_PRIMITIVES_COUNT_QW+4));
|
||||
|
||||
ErrorF("VS_INVOCATION_COUNT_QW %x/%x\n", INREG(VS_INVOCATION_COUNT_QW), INREG(VS_INVOCATION_COUNT_QW+4));
|
||||
|
||||
ErrorF("GS_INVOCATION_COUNT_QW %x/%x\n", INREG(GS_INVOCATION_COUNT_QW), INREG(GS_INVOCATION_COUNT_QW+4));
|
||||
ErrorF("GS_PRIMITIVES_COUNT_QW %x/%x\n", INREG(GS_PRIMITIVES_COUNT_QW), INREG(GS_PRIMITIVES_COUNT_QW+4));
|
||||
|
||||
ErrorF("CL_INVOCATION_COUNT_QW %x/%x\n", INREG(CL_INVOCATION_COUNT_QW), INREG(CL_INVOCATION_COUNT_QW+4));
|
||||
ErrorF("CL_PRIMITIVES_COUNT_QW %x/%x\n", INREG(CL_PRIMITIVES_COUNT_QW), INREG(CL_PRIMITIVES_COUNT_QW+4));
|
||||
|
||||
ErrorF("PS_INVOCATION_COUNT_QW %x/%x\n", INREG(PS_INVOCATION_COUNT_QW), INREG(PS_INVOCATION_COUNT_QW+4));
|
||||
ErrorF("PS_DEPTH_COUNT_QW %x/%x\n", INREG(PS_DEPTH_COUNT_QW), INREG(PS_DEPTH_COUNT_QW+4));
|
||||
|
||||
ErrorF("WIZ_CTL %x\n", INREG(WIZ_CTL));
|
||||
ErrorF("TS_CTL %x TS_DEBUG_DATA %x\n", INREG(TS_CTL), INREG(TS_DEBUG_DATA));
|
||||
ErrorF("TD_CTL %x / %x\n", INREG(TD_CTL), INREG(TD_CTL2));
|
||||
|
||||
|
||||
}
|
||||
|
||||
#ifdef I830DEBUG
|
||||
static void
|
||||
dump_DSPACNTR(ScrnInfoPtr pScrn)
|
||||
|
|
@ -6696,7 +6877,8 @@ I830CreateScreenResources (ScreenPtr pScreen)
|
|||
if (!(*pScreen->CreateScreenResources)(pScreen))
|
||||
return FALSE;
|
||||
|
||||
if (pI830->rotation != RR_Rotate_0) {
|
||||
if (xf86LoaderCheckSymbol("I830RandRSetConfig") && pI830->rotation != RR_Rotate_0) {
|
||||
Rotation (*I830RandRSetConfig)(ScreenPtr pScreen, Rotation rr, int rate, RRScreenSizePtr pSize) = NULL;
|
||||
RRScreenSize p;
|
||||
Rotation requestedRotation = pI830->rotation;
|
||||
|
||||
|
|
@ -6708,9 +6890,12 @@ I830CreateScreenResources (ScreenPtr pScreen)
|
|||
p.mmWidth = pScreen->mmWidth;
|
||||
p.mmHeight = pScreen->mmHeight;
|
||||
|
||||
pI830->starting = TRUE; /* abuse this for dual head & rotation */
|
||||
I830RandRSetConfig (pScreen, requestedRotation, 0, &p);
|
||||
pI830->starting = FALSE;
|
||||
I830RandRSetConfig = LoaderSymbol("I830RandRSetConfig");
|
||||
if (I830RandRSetConfig) {
|
||||
pI830->starting = TRUE; /* abuse this for dual head & rotation */
|
||||
(*I830RandRSetConfig) (pScreen, requestedRotation, 0, &p);
|
||||
pI830->starting = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -6763,6 +6948,9 @@ IntelEmitInvarientState(ScrnInfoPtr pScrn)
|
|||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
CARD32 ctx_addr;
|
||||
|
||||
if (pI830->noAccel)
|
||||
return;
|
||||
|
||||
ctx_addr = pI830->ContextMem.Start;
|
||||
/* Align to a 2k boundry */
|
||||
ctx_addr = ((ctx_addr + 2048 - 1) / 2048) * 2048;
|
||||
|
|
@ -6776,10 +6964,13 @@ IntelEmitInvarientState(ScrnInfoPtr pScrn)
|
|||
ADVANCE_LP_RING();
|
||||
}
|
||||
|
||||
if (IS_I9XX(pI830))
|
||||
I915EmitInvarientState(pScrn);
|
||||
else
|
||||
I830EmitInvarientState(pScrn);
|
||||
if (!IS_I965G(pI830))
|
||||
{
|
||||
if (IS_I9XX(pI830))
|
||||
I915EmitInvarientState(pScrn);
|
||||
else
|
||||
I830EmitInvarientState(pScrn);
|
||||
}
|
||||
}
|
||||
|
||||
static Bool
|
||||
|
|
@ -6809,6 +7000,47 @@ I830BIOSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
|||
pI830->RotatedMem2.Key = -1;
|
||||
}
|
||||
|
||||
#ifdef HAS_MTRR_SUPPORT
|
||||
{
|
||||
int fd;
|
||||
struct mtrr_gentry gentry;
|
||||
struct mtrr_sentry sentry;
|
||||
|
||||
if ( ( fd = open ("/proc/mtrr", O_RDONLY, 0) ) != -1 ) {
|
||||
for (gentry.regnum = 0; ioctl (fd, MTRRIOC_GET_ENTRY, &gentry) == 0;
|
||||
++gentry.regnum) {
|
||||
|
||||
if (gentry.size < 1) {
|
||||
/* DISABLED */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Check the MTRR range is one we like and if not - remove it.
|
||||
* The Xserver common layer will then setup the right range
|
||||
* for us.
|
||||
*/
|
||||
if (gentry.base == pI830->LinearAddr &&
|
||||
gentry.size < pI830->FbMapSize) {
|
||||
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Removing bad MTRR range (base 0x%lx, size 0x%x)\n",
|
||||
gentry.base, gentry.size);
|
||||
|
||||
sentry.base = gentry.base;
|
||||
sentry.size = gentry.size;
|
||||
sentry.type = gentry.type;
|
||||
|
||||
if (ioctl (fd, MTRRIOC_DEL_ENTRY, &sentry) == -1) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||
"Failed to remove bad MTRR range\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (xf86IsEntityShared(pScrn->entityList[0])) {
|
||||
/* PreInit failed on the second head, so make sure we turn it off */
|
||||
if (I830IsPrimary(pScrn) && !pI830->entityPrivate->pScrn_2) {
|
||||
|
|
@ -7183,7 +7415,11 @@ I830BIOSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
|||
xf86DisableRandR(); /* Disable built-in RandR extension */
|
||||
shadowSetup(pScreen);
|
||||
/* support all rotations */
|
||||
I830RandRInit(pScreen, RR_Rotate_0 | RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270);
|
||||
if (IS_I965G(pI830)) {
|
||||
I830RandRInit(pScreen, RR_Rotate_0); /* only 0 degrees for I965G */
|
||||
} else {
|
||||
I830RandRInit(pScreen, RR_Rotate_0 | RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270);
|
||||
}
|
||||
pI830->PointerMoved = pScrn->PointerMoved;
|
||||
pScrn->PointerMoved = I830PointerMoved;
|
||||
pI830->CreateScreenResources = pScreen->CreateScreenResources;
|
||||
|
|
@ -7200,6 +7436,20 @@ I830BIOSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
|||
I830_dump_registers(pScrn);
|
||||
#endif
|
||||
|
||||
if (IS_I965G(pI830)) {
|
||||
/* turn off clock gating */
|
||||
#if 0
|
||||
OUTREG(0x6204, 0x70804000);
|
||||
OUTREG(0x6208, 0x00000001);
|
||||
#else
|
||||
OUTREG(0x6204, 0x70000000);
|
||||
#endif
|
||||
/* Enable DAP stateless accesses.
|
||||
* Required for all i965 steppings.
|
||||
*/
|
||||
OUTREG(SVG_WORK_CTL, 0x00000010);
|
||||
}
|
||||
|
||||
pI830->starting = FALSE;
|
||||
pI830->closing = FALSE;
|
||||
pI830->suspended = FALSE;
|
||||
|
|
@ -7279,16 +7529,36 @@ I830AdjustFrame(int scrnIndex, int x, int y, int flags)
|
|||
|
||||
if (pI830->Clone) {
|
||||
if (!pI830->pipe == 0) {
|
||||
OUTREG(DSPABASE, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
if (!IS_I965G(pI830)) {
|
||||
OUTREG(DSPABASE, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
} else {
|
||||
OUTREG(DSPABASE, 0);
|
||||
OUTREG(DSPASURF, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
}
|
||||
} else {
|
||||
OUTREG(DSPBBASE, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
if (!IS_I965G(pI830)) {
|
||||
OUTREG(DSPBBASE, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
} else {
|
||||
OUTREG(DSPBBASE, 0);
|
||||
OUTREG(DSPBSURF, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pI830->pipe == 0) {
|
||||
OUTREG(DSPABASE, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
if (!IS_I965G(pI830)) {
|
||||
OUTREG(DSPABASE, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
} else {
|
||||
OUTREG(DSPABASE, 0);
|
||||
OUTREG(DSPASURF, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
}
|
||||
} else {
|
||||
OUTREG(DSPBBASE, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
if (!IS_I965G(pI830)) {
|
||||
OUTREG(DSPBBASE, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
} else {
|
||||
OUTREG(DSPBBASE, 0);
|
||||
OUTREG(DSPBSURF, Start + ((y * pScrn->displayWidth + x) * pI830->cpp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -7363,6 +7633,8 @@ I830BIOSLeaveVT(int scrnIndex, int flags)
|
|||
#ifdef XF86DRI
|
||||
if (pI830->directRenderingOpen) {
|
||||
DRILock(screenInfo.screens[pScrn->scrnIndex], 0);
|
||||
|
||||
I830DRISetVBlankInterrupt (pScrn, FALSE);
|
||||
|
||||
drmCtlUninstHandler(pI830->drmSubFD);
|
||||
}
|
||||
|
|
@ -7795,12 +8067,21 @@ I830BIOSEnterVT(int scrnIndex, int flags)
|
|||
#ifdef XF86DRI
|
||||
if (pI830->directRenderingEnabled) {
|
||||
if (!pI830->starting) {
|
||||
ScreenPtr pScreen = pScrn->pScreen;
|
||||
drmI830Sarea *sarea = (drmI830Sarea *) DRIGetSAREAPrivate(pScreen);
|
||||
int i;
|
||||
|
||||
I830DRIResume(screenInfo.screens[scrnIndex]);
|
||||
I830DRISetVBlankInterrupt (pScrn, TRUE);
|
||||
|
||||
I830RefreshRing(pScrn);
|
||||
I830Sync(pScrn);
|
||||
DO_RING_IDLE();
|
||||
|
||||
sarea->texAge++;
|
||||
for(i = 0; i < I830_NR_TEX_REGIONS+1 ; i++)
|
||||
sarea->texList[i].age = sarea->texAge;
|
||||
|
||||
DPRINTF(PFX, "calling dri unlock\n");
|
||||
DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
|
||||
}
|
||||
|
|
@ -7860,7 +8141,8 @@ I830BIOSSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
|
|||
* The extra WindowTable check detects a rotation at startup.
|
||||
*/
|
||||
if ( (!WindowTable[pScrn->scrnIndex] || pspix->devPrivate.ptr == NULL) &&
|
||||
!pI830->DGAactive && (pScrn->PointerMoved == I830PointerMoved) ) {
|
||||
!pI830->DGAactive && (pScrn->PointerMoved == I830PointerMoved) &&
|
||||
!IS_I965G(pI830)) {
|
||||
if (!I830Rotate(pScrn, mode))
|
||||
ret = FALSE;
|
||||
}
|
||||
|
|
@ -7903,7 +8185,7 @@ I830BIOSSaveScreen(ScreenPtr pScreen, int mode)
|
|||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
Bool on = xf86IsUnblank(mode);
|
||||
CARD32 temp, ctrl, base;
|
||||
CARD32 temp, ctrl, base, surf;
|
||||
|
||||
DPRINTF(PFX, "I830BIOSSaveScreen: %d, on is %s\n", mode, BOOLTOSTRING(on));
|
||||
|
||||
|
|
@ -7911,9 +8193,11 @@ I830BIOSSaveScreen(ScreenPtr pScreen, int mode)
|
|||
if (pI830->pipe == 0) {
|
||||
ctrl = DSPACNTR;
|
||||
base = DSPABASE;
|
||||
surf = DSPASURF;
|
||||
} else {
|
||||
ctrl = DSPBCNTR;
|
||||
base = DSPBADDR;
|
||||
surf = DSPBSURF;
|
||||
}
|
||||
if (pI830->planeEnabled[pI830->pipe]) {
|
||||
temp = INREG(ctrl);
|
||||
|
|
@ -7925,6 +8209,10 @@ I830BIOSSaveScreen(ScreenPtr pScreen, int mode)
|
|||
/* Flush changes */
|
||||
temp = INREG(base);
|
||||
OUTREG(base, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(surf);
|
||||
OUTREG(surf, temp);
|
||||
}
|
||||
}
|
||||
|
||||
if (pI830->CursorInfoRec && !pI830->SWCursor && pI830->cursorOn) {
|
||||
|
|
@ -8059,9 +8347,7 @@ I830BIOSCloseScreen(int scrnIndex, ScreenPtr pScreen)
|
|||
pI830->used3D = NULL;
|
||||
}
|
||||
|
||||
if (pI830->shadowReq.minorversion >= 1)
|
||||
pScrn->PointerMoved = pI830->PointerMoved;
|
||||
|
||||
pScrn->PointerMoved = pI830->PointerMoved;
|
||||
pScrn->vtSema = FALSE;
|
||||
pI830->closing = FALSE;
|
||||
pScreen->CloseScreen = pI830->CloseScreen;
|
||||
|
|
@ -8389,10 +8675,17 @@ I830CheckDevicesTimer(OsTimerPtr timer, CARD32 now, pointer arg)
|
|||
offset = pI8301->FrontBuffer2.Start + ((pScrn->frameY0 * pI830->displayWidth + pScrn->frameX0) * pI830->cpp);
|
||||
}
|
||||
|
||||
if (pI830->pipe == 0)
|
||||
adjust = INREG(DSPABASE);
|
||||
else
|
||||
adjust = INREG(DSPBBASE);
|
||||
if (IS_I965G(pI830)) {
|
||||
if (pI830->pipe == 0)
|
||||
adjust = INREG(DSPASURF);
|
||||
else
|
||||
adjust = INREG(DSPBSURF);
|
||||
} else {
|
||||
if (pI830->pipe == 0)
|
||||
adjust = INREG(DSPABASE);
|
||||
else
|
||||
adjust = INREG(DSPBBASE);
|
||||
}
|
||||
|
||||
if (adjust != offset) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
|
||||
|
|
|
|||
|
|
@ -213,7 +213,12 @@ AllocFromAGP(ScrnInfoPtr pScrn, I830MemRange *result, long size,
|
|||
result->Key = xf86AllocateGARTMemory(pScrn->scrnIndex, size, 2,
|
||||
&(result->Physical));
|
||||
} else {
|
||||
result->Key = xf86AllocateGARTMemory(pScrn->scrnIndex, size, 0, NULL);
|
||||
/* Due to a bug in agpgart in 2.6 kernels resulting in very poor
|
||||
* allocation performance we need to workaround it here...
|
||||
*/
|
||||
result->Key = xf86AllocateGARTMemory(pScrn->scrnIndex, size, 3, NULL);
|
||||
if (result->Key == -1)
|
||||
result->Key = xf86AllocateGARTMemory(pScrn->scrnIndex, size, 0, NULL);
|
||||
}
|
||||
if (result->Key == -1)
|
||||
return 0;
|
||||
|
|
@ -498,7 +503,7 @@ I830AllocateRotatedBuffer(ScrnInfoPtr pScrn, int flags)
|
|||
alloced = 0;
|
||||
if (tileable) {
|
||||
align = GetBestTileAlignment(size);
|
||||
for (align = GetBestTileAlignment(size); align >= KB(512); align >>= 1) {
|
||||
for (align = GetBestTileAlignment(size); align >= (IS_I9XX(pI830) ? MB(1) : KB(512)); align >>= 1) {
|
||||
alloced = I830AllocVidMem(pScrn, &(pI830->RotatedMem),
|
||||
&(pI830->StolenPool), size, align,
|
||||
flags | FROM_ANYWHERE | ALLOCATE_AT_TOP |
|
||||
|
|
@ -563,7 +568,7 @@ I830AllocateRotated2Buffer(ScrnInfoPtr pScrn, int flags)
|
|||
alloced = 0;
|
||||
if (tileable) {
|
||||
align = GetBestTileAlignment(size);
|
||||
for (align = GetBestTileAlignment(size); align >= KB(512); align >>= 1) {
|
||||
for (align = GetBestTileAlignment(size); align >= (IS_I9XX(pI830) ? MB(1) : KB(512)); align >>= 1) {
|
||||
alloced = I830AllocVidMem(pScrn, &(pI830->RotatedMem2),
|
||||
&(pI830->StolenPool), size, align,
|
||||
flags | FROM_ANYWHERE | ALLOCATE_AT_TOP |
|
||||
|
|
@ -673,6 +678,7 @@ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
|
|||
memset(&(pI830->FrontBuffer2), 0, sizeof(pI830->FrontBuffer2));
|
||||
pI830->FrontBuffer2.Key = -1;
|
||||
|
||||
#if 1 /* ROTATION */
|
||||
pI830->FbMemBox2.x1 = 0;
|
||||
pI830->FbMemBox2.x2 = pI830Ent->pScrn_2->displayWidth;
|
||||
pI830->FbMemBox2.y1 = 0;
|
||||
|
|
@ -680,6 +686,12 @@ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
|
|||
pI830->FbMemBox2.y2 = pI830Ent->pScrn_2->virtualX;
|
||||
else
|
||||
pI830->FbMemBox2.y2 = pI830Ent->pScrn_2->virtualY;
|
||||
#else
|
||||
pI830->FbMemBox2.x1 = 0;
|
||||
pI830->FbMemBox2.x2 = pI830Ent->pScrn_2->displayWidth;
|
||||
pI830->FbMemBox2.y1 = 0;
|
||||
pI830->FbMemBox2.y2 = pI830Ent->pScrn_2->virtualY;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Calculate how much framebuffer memory to allocate. For the
|
||||
|
|
@ -731,19 +743,26 @@ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
|
|||
tileable = !(flags & ALLOC_NO_TILING) && pI8302->allowPageFlip &&
|
||||
IsTileable(pI830Ent->pScrn_2->displayWidth * pI8302->cpp);
|
||||
if (tileable) {
|
||||
align = KB(512);
|
||||
if (IS_I9XX(pI830))
|
||||
align = MB(1);
|
||||
else
|
||||
align = KB(512);
|
||||
alignflags = ALIGN_BOTH_ENDS;
|
||||
} else {
|
||||
align = KB(64);
|
||||
alignflags = 0;
|
||||
}
|
||||
|
||||
#if 1 /* ROTATION */
|
||||
if (pI830Ent->pScrn_2->virtualX > pI830Ent->pScrn_2->virtualY)
|
||||
size = lineSize * (pI830Ent->pScrn_2->virtualX + cacheLines);
|
||||
else
|
||||
size = lineSize * (pI830Ent->pScrn_2->virtualY + cacheLines);
|
||||
size = ROUND_TO_PAGE(size);
|
||||
|
||||
#else
|
||||
size = lineSize * (pI830Ent->pScrn_2->virtualY + cacheLines);
|
||||
size = ROUND_TO_PAGE(size);
|
||||
#endif
|
||||
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, verbosity,
|
||||
"%sSecondary framebuffer allocation size: %ld kByte\n", s,
|
||||
size / 1024);
|
||||
|
|
@ -765,6 +784,7 @@ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
|
|||
memset(&(pI830->FrontBuffer), 0, sizeof(pI830->FrontBuffer));
|
||||
pI830->FrontBuffer.Key = -1;
|
||||
|
||||
#if 1 /* ROTATION */
|
||||
pI830->FbMemBox.x1 = 0;
|
||||
pI830->FbMemBox.x2 = pScrn->displayWidth;
|
||||
pI830->FbMemBox.y1 = 0;
|
||||
|
|
@ -772,6 +792,12 @@ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
|
|||
pI830->FbMemBox.y2 = pScrn->virtualX;
|
||||
else
|
||||
pI830->FbMemBox.y2 = pScrn->virtualY;
|
||||
#else
|
||||
pI830->FbMemBox.x1 = 0;
|
||||
pI830->FbMemBox.x2 = pScrn->displayWidth;
|
||||
pI830->FbMemBox.y1 = 0;
|
||||
pI830->FbMemBox.y2 = pScrn->virtualY;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Calculate how much framebuffer memory to allocate. For the
|
||||
|
|
@ -823,19 +849,26 @@ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
|
|||
tileable = !(flags & ALLOC_NO_TILING) && pI830->allowPageFlip &&
|
||||
IsTileable(pScrn->displayWidth * pI830->cpp);
|
||||
if (tileable) {
|
||||
align = KB(512);
|
||||
if (IS_I9XX(pI830))
|
||||
align = MB(1);
|
||||
else
|
||||
align = KB(512);
|
||||
alignflags = ALIGN_BOTH_ENDS;
|
||||
} else {
|
||||
align = KB(64);
|
||||
alignflags = 0;
|
||||
}
|
||||
|
||||
#if 1 /* ROTATION */
|
||||
if (pScrn->virtualX > pScrn->virtualY)
|
||||
size = lineSize * (pScrn->virtualX + cacheLines);
|
||||
else
|
||||
size = lineSize * (pScrn->virtualY + cacheLines);
|
||||
size = ROUND_TO_PAGE(size);
|
||||
|
||||
#else
|
||||
size = lineSize * (pScrn->virtualY + cacheLines);
|
||||
size = ROUND_TO_PAGE(size);
|
||||
#endif
|
||||
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, verbosity,
|
||||
"%sInitial framebuffer allocation size: %ld kByte\n", s,
|
||||
size / 1024);
|
||||
|
|
@ -909,7 +942,10 @@ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
|
|||
tileable = !(flags & ALLOC_NO_TILING) && pI830->allowPageFlip &&
|
||||
IsTileable(pScrn->displayWidth * pI830->cpp);
|
||||
if (tileable) {
|
||||
align = KB(512);
|
||||
if (IS_I9XX(pI830))
|
||||
align = MB(1);
|
||||
else
|
||||
align = KB(512);
|
||||
alignflags = ALIGN_BOTH_ENDS;
|
||||
} else {
|
||||
align = KB(64);
|
||||
|
|
@ -937,7 +973,13 @@ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
|
|||
*/
|
||||
if (!dryrun) {
|
||||
memset(&(pI830->Dummy), 0, sizeof(pI830->Dummy));
|
||||
pI830->Dummy.Key = xf86AllocateGARTMemory(pScrn->scrnIndex, size, 0, NULL);
|
||||
/* Due to a bug in agpgart in 2.6 kernels resulting in very poor
|
||||
* allocation performance we need to workaround it here...
|
||||
*/
|
||||
pI830->Dummy.Key =
|
||||
xf86AllocateGARTMemory(pScrn->scrnIndex, size, 3, NULL);
|
||||
if (pI830->Dummy.Key == -1)
|
||||
pI830->Dummy.Key = xf86AllocateGARTMemory(pScrn->scrnIndex, size, 0, NULL);
|
||||
pI830->Dummy.Offset = 0;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -1147,7 +1189,7 @@ I830AllocateBackBuffer(ScrnInfoPtr pScrn, const int flags)
|
|||
alloced = 0;
|
||||
if (tileable) {
|
||||
align = GetBestTileAlignment(size);
|
||||
for (align = GetBestTileAlignment(size); align >= KB(512); align >>= 1) {
|
||||
for (align = GetBestTileAlignment(size); align >= (IS_I9XX(pI830) ? MB(1) : KB(512)); align >>= 1) {
|
||||
alloced = I830AllocVidMem(pScrn, &(pI830->BackBuffer),
|
||||
&(pI830->StolenPool), size, align,
|
||||
flags | FROM_ANYWHERE | ALLOCATE_AT_TOP |
|
||||
|
|
@ -1210,7 +1252,7 @@ I830AllocateDepthBuffer(ScrnInfoPtr pScrn, const int flags)
|
|||
alloced = 0;
|
||||
if (tileable) {
|
||||
align = GetBestTileAlignment(size);
|
||||
for (align = GetBestTileAlignment(size); align >= KB(512); align >>= 1) {
|
||||
for (align = GetBestTileAlignment(size); align >= (IS_I9XX(pI830) ? MB(1) : KB(512)); align >>= 1) {
|
||||
alloced = I830AllocVidMem(pScrn, &(pI830->DepthBuffer),
|
||||
&(pI830->StolenPool), size, align,
|
||||
flags | FROM_ANYWHERE | ALLOCATE_AT_TOP |
|
||||
|
|
@ -1357,7 +1399,14 @@ I830DoPoolAllocation(ScrnInfoPtr pScrn, I830MemPool *pool)
|
|||
|
||||
if (pool->Total.Size > pool->Fixed.Size) {
|
||||
pool->Allocated.Size = pool->Total.Size - pool->Fixed.Size;
|
||||
pool->Allocated.Key = xf86AllocateGARTMemory(pScrn->scrnIndex,
|
||||
/* Due to a bug in agpgart in 2.6 kernels resulting in very poor
|
||||
* allocation performance we need to workaround it here...
|
||||
*/
|
||||
pool->Allocated.Key =
|
||||
xf86AllocateGARTMemory(pScrn->scrnIndex, pool->Allocated.Size,
|
||||
3, NULL);
|
||||
if (pool->Allocated.Key == -1)
|
||||
pool->Allocated.Key = xf86AllocateGARTMemory(pScrn->scrnIndex,
|
||||
pool->Allocated.Size, 0, NULL);
|
||||
if (pool->Allocated.Key == -1) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Pool allocation failed\n");
|
||||
|
|
@ -1644,7 +1693,7 @@ SetFence(ScrnInfoPtr pScrn, int nr, unsigned int start, unsigned int pitch,
|
|||
}
|
||||
|
||||
static Bool
|
||||
MakeTiles(ScrnInfoPtr pScrn, I830MemRange *pMem)
|
||||
MakeTiles(ScrnInfoPtr pScrn, I830MemRange *pMem, unsigned int fence)
|
||||
{
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
int pitch, ntiles, i;
|
||||
|
|
@ -1662,6 +1711,31 @@ MakeTiles(ScrnInfoPtr pScrn, I830MemRange *pMem)
|
|||
}
|
||||
|
||||
pitch = pScrn->displayWidth * pI830->cpp;
|
||||
|
||||
if (IS_I965G(pI830)) {
|
||||
I830RegPtr i830Reg = &pI830->ModeReg;
|
||||
|
||||
switch (fence) {
|
||||
case FENCE_XMAJOR:
|
||||
i830Reg->Fence[nextTile] = (((pitch / 128) - 1) << 2) | pMem->Start | 1;
|
||||
break;
|
||||
case FENCE_YMAJOR:
|
||||
/* YMajor can be 128B aligned but the current code dictates
|
||||
* otherwise. This isn't a problem apart from memory waste.
|
||||
* FIXME */
|
||||
i830Reg->Fence[nextTile] = (((pitch / 128) - 1) << 2) | pMem->Start | 1;
|
||||
i830Reg->Fence[nextTile] |= (1<<1);
|
||||
break;
|
||||
default:
|
||||
case FENCE_LINEAR:
|
||||
break;
|
||||
}
|
||||
|
||||
i830Reg->Fence[nextTile+FENCE_NEW_NR] = pMem->End;
|
||||
nextTile++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Simply try to break the region up into at most four pieces of size
|
||||
* equal to the alignment.
|
||||
|
|
@ -1703,20 +1777,27 @@ I830SetupMemoryTiling(ScrnInfoPtr pScrn)
|
|||
return;
|
||||
}
|
||||
|
||||
pI830->front_tiled = FENCE_LINEAR;
|
||||
pI830->back_tiled = FENCE_LINEAR;
|
||||
pI830->depth_tiled = FENCE_LINEAR;
|
||||
pI830->rotated_tiled = FENCE_LINEAR;
|
||||
pI830->rotated2_tiled = FENCE_LINEAR;
|
||||
|
||||
if (pI830->allowPageFlip) {
|
||||
if (pI830->allowPageFlip && pI830->FrontBuffer.Alignment >= KB(512)) {
|
||||
if (MakeTiles(pScrn, &(pI830->FrontBuffer))) {
|
||||
if (MakeTiles(pScrn, &(pI830->FrontBuffer), FENCE_XMAJOR)) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Activating tiled memory for the FRONT buffer\n");
|
||||
"Activating tiled memory for the front buffer\n");
|
||||
pI830->front_tiled = FENCE_XMAJOR;
|
||||
} else {
|
||||
pI830->allowPageFlip = FALSE;
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"MakeTiles failed for the FRONT buffer\n");
|
||||
"MakeTiles failed for the front buffer\n");
|
||||
}
|
||||
} else {
|
||||
pI830->allowPageFlip = FALSE;
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Alignment bad for the FRONT buffer\n");
|
||||
"Alignment bad for the front buffer\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1727,9 +1808,10 @@ I830SetupMemoryTiling(ScrnInfoPtr pScrn)
|
|||
* value.
|
||||
*/
|
||||
if (pI830->BackBuffer.Alignment >= KB(512)) {
|
||||
if (MakeTiles(pScrn, &(pI830->BackBuffer))) {
|
||||
if (MakeTiles(pScrn, &(pI830->BackBuffer), FENCE_XMAJOR)) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Activating tiled memory for the back buffer.\n");
|
||||
pI830->back_tiled = FENCE_XMAJOR;
|
||||
} else {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"MakeTiles failed for the back buffer.\n");
|
||||
|
|
@ -1738,9 +1820,10 @@ I830SetupMemoryTiling(ScrnInfoPtr pScrn)
|
|||
}
|
||||
|
||||
if (pI830->DepthBuffer.Alignment >= KB(512)) {
|
||||
if (MakeTiles(pScrn, &(pI830->DepthBuffer))) {
|
||||
if (MakeTiles(pScrn, &(pI830->DepthBuffer), FENCE_YMAJOR)) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Activating tiled memory for the depth buffer.\n");
|
||||
"Activating tiled memory for the depth buffer.\n");
|
||||
pI830->depth_tiled = FENCE_YMAJOR;
|
||||
} else {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"MakeTiles failed for the depth buffer.\n");
|
||||
|
|
@ -1748,9 +1831,10 @@ I830SetupMemoryTiling(ScrnInfoPtr pScrn)
|
|||
}
|
||||
|
||||
if (pI830->RotatedMem.Alignment >= KB(512)) {
|
||||
if (MakeTiles(pScrn, &(pI830->RotatedMem))) {
|
||||
if (MakeTiles(pScrn, &(pI830->RotatedMem), FENCE_XMAJOR)) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Activating tiled memory for the rotated buffer.\n");
|
||||
pI830->rotated_tiled = FENCE_XMAJOR;
|
||||
} else {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"MakeTiles failed for the rotated buffer.\n");
|
||||
|
|
@ -1759,9 +1843,10 @@ I830SetupMemoryTiling(ScrnInfoPtr pScrn)
|
|||
|
||||
#if 0
|
||||
if (pI830->RotatedMem2.Alignment >= KB(512)) {
|
||||
if (MakeTiles(pScrn, &(pI830->RotatedMem2))) {
|
||||
if (MakeTiles(pScrn, &(pI830->RotatedMem2), FENCE_XMAJOR)) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Activating tiled memory for the rotated2 buffer.\n");
|
||||
pI830->rotated2_tiled = FENCE_XMAJOR;
|
||||
} else {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"MakeTiles failed for the rotated buffer.\n");
|
||||
|
|
|
|||
|
|
@ -217,6 +217,7 @@ I915UpdateRotate (ScreenPtr pScreen,
|
|||
drm_context_t myContext = 0;
|
||||
#endif
|
||||
Bool didLock = FALSE;
|
||||
CARD32 format;
|
||||
|
||||
if (I830IsPrimary(pScrn)) {
|
||||
pI8301 = pI830;
|
||||
|
|
@ -404,7 +405,7 @@ I915UpdateRotate (ScreenPtr pScreen,
|
|||
if (pI830->disableTiling)
|
||||
use_fence = 0;
|
||||
else
|
||||
use_fence = 4;
|
||||
use_fence = MS3_USE_FENCE_REGS;
|
||||
|
||||
if (pI830->cpp == 1)
|
||||
use_fence |= MAPSURF_8BIT;
|
||||
|
|
@ -575,15 +576,15 @@ I830UpdateRotate (ScreenPtr pScreen,
|
|||
OUT_RING(MI_FLUSH | MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE);
|
||||
OUT_RING(0x00000000);
|
||||
/* draw rect */
|
||||
OUT_RING(0x7d800003);
|
||||
OUT_RING(0x00000000);
|
||||
OUT_RING(0x00000000);
|
||||
OUT_RING((pScrn->virtualX - 1) | (pScrn->virtualY - 1) << 16);
|
||||
OUT_RING(0x00000000);
|
||||
OUT_RING(0x00000000);
|
||||
OUT_RING(STATE3D_DRAWING_RECTANGLE);
|
||||
OUT_RING(0x00000000); /* flags */
|
||||
OUT_RING(0x00000000); /* ymin, xmin */
|
||||
OUT_RING((pScrn->virtualX - 1) | (pScrn->virtualY - 1) << 16); /* ymax, xmax */
|
||||
OUT_RING(0x00000000); /* yorigin, xorigin */
|
||||
OUT_RING(MI_NOOP);
|
||||
|
||||
/* front buffer */
|
||||
OUT_RING(0x7d8e0001);
|
||||
OUT_RING(STATE3D_BUFFER_INFO);
|
||||
OUT_RING(0x03800000 | (((pI830->displayWidth * pI830->cpp) / 4) << 2));
|
||||
if (I830IsPrimary(pScrn))
|
||||
OUT_RING(pI830->FrontBuffer.Start);
|
||||
|
|
@ -736,12 +737,12 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode)
|
|||
};
|
||||
|
||||
if (pI830->noAccel)
|
||||
func = LoaderSymbol("shadowUpdateRotatePacked");
|
||||
func = LoaderSymbol("shadowUpdateRotatePacked");
|
||||
else
|
||||
if (IS_I9XX(pI830))
|
||||
func = I915UpdateRotate;
|
||||
else
|
||||
func = I830UpdateRotate;
|
||||
if (IS_I9XX(pI830))
|
||||
func = I915UpdateRotate;
|
||||
else
|
||||
func = I830UpdateRotate;
|
||||
|
||||
if (I830IsPrimary(pScrn)) {
|
||||
pI8301 = pI830;
|
||||
|
|
@ -771,6 +772,7 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode)
|
|||
* We grab the DRI lock when reallocating buffers to avoid DRI clients
|
||||
* getting bogus information.
|
||||
*/
|
||||
|
||||
#ifdef XF86DRI
|
||||
if (pI8301->directRenderingEnabled && reAllocate) {
|
||||
didLock = I830DRILock(pScrn1);
|
||||
|
|
@ -789,6 +791,7 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
if (pI8301->TexMem.Key != -1)
|
||||
xf86UnbindGARTMemory(pScrn1->scrnIndex, pI8301->TexMem.Key);
|
||||
I830FreeVidMem(pScrn1, &(pI8301->TexMem));
|
||||
|
|
@ -891,7 +894,7 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode)
|
|||
|
||||
if (pI8301->rotation != RR_Rotate_0) {
|
||||
if (!I830AllocateRotatedBuffer(pScrn1,
|
||||
(pI8301->disableTiling ? ALLOC_NO_TILING : 0)))
|
||||
pI8301->disableTiling ? ALLOC_NO_TILING : 0))
|
||||
goto BAIL1;
|
||||
|
||||
I830FixOffset(pScrn1, &(pI8301->RotatedMem));
|
||||
|
|
@ -903,8 +906,8 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode)
|
|||
shadowRemove (pScrn->pScreen, NULL);
|
||||
if (pI830->rotation != RR_Rotate_0)
|
||||
shadowAdd (pScrn->pScreen,
|
||||
(*pScrn->pScreen->GetScreenPixmap) (pScrn->pScreen),
|
||||
func, I830WindowLinear, pI830->rotation, 0);
|
||||
(*pScrn->pScreen->GetScreenPixmap) (pScrn->pScreen),
|
||||
func, I830WindowLinear, pI830->rotation, 0);
|
||||
|
||||
if (I830IsPrimary(pScrn)) {
|
||||
if (pI830->rotation != RR_Rotate_0)
|
||||
|
|
@ -1100,7 +1103,7 @@ BAIL0:
|
|||
|
||||
if (pI8301->rotation != RR_Rotate_0) {
|
||||
if (!I830AllocateRotatedBuffer(pScrn1,
|
||||
(pI8301->disableTiling ? ALLOC_NO_TILING : 0)))
|
||||
pI8301->disableTiling ? ALLOC_NO_TILING : 0))
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"Oh dear, the rotated buffer failed - badness\n");
|
||||
|
||||
|
|
@ -1112,8 +1115,8 @@ BAIL0:
|
|||
shadowRemove (pScrn->pScreen, NULL);
|
||||
if (pI830->rotation != RR_Rotate_0)
|
||||
shadowAdd (pScrn->pScreen,
|
||||
(*pScrn->pScreen->GetScreenPixmap) (pScrn->pScreen),
|
||||
func, I830WindowLinear, pI830->rotation, 0);
|
||||
(*pScrn->pScreen->GetScreenPixmap) (pScrn->pScreen),
|
||||
func, I830WindowLinear, pI830->rotation, 0);
|
||||
|
||||
if (I830IsPrimary(pScrn)) {
|
||||
if (pI830->rotation != RR_Rotate_0)
|
||||
|
|
|
|||
1962
src/i830_video.c
1962
src/i830_video.c
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,166 @@
|
|||
/* wm_program */
|
||||
/* mov (1) g4<1>F g1.8<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x2080013d, 0x00000028, 0x00000000 },
|
||||
/* add (1) g4.4<1>F g1.8<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20840d3d, 0x00000028, 0x00000001 },
|
||||
/* mov (1) g4.8<1>F g1.8<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x2088013d, 0x00000028, 0x00000000 },
|
||||
/* add (1) g4.12<1>F g1.8<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x208c0d3d, 0x00000028, 0x00000001 },
|
||||
/* mov (1) g6<1>F g1.10<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20c0013d, 0x0000002a, 0x00000000 },
|
||||
/* mov (1) g6.4<1>F g1.10<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20c4013d, 0x0000002a, 0x00000000 },
|
||||
/* add (1) g6.8<1>F g1.10<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20c80d3d, 0x0000002a, 0x00000001 },
|
||||
/* add (1) g6.12<1>F g1.10<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20cc0d3d, 0x0000002a, 0x00000001 },
|
||||
/* mov (1) g4.16<1>F g1.12<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x2090013d, 0x0000002c, 0x00000000 },
|
||||
/* add (1) g4.20<1>F g1.12<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20940d3d, 0x0000002c, 0x00000001 },
|
||||
/* mov (1) g4.24<1>F g1.12<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x2098013d, 0x0000002c, 0x00000000 },
|
||||
/* add (1) g4.28<1>F g1.12<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x209c0d3d, 0x0000002c, 0x00000001 },
|
||||
/* mov (1) g6.16<1>F g1.14<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20d0013d, 0x0000002e, 0x00000000 },
|
||||
/* mov (1) g6.20<1>F g1.14<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20d4013d, 0x0000002e, 0x00000000 },
|
||||
/* add (1) g6.24<1>F g1.14<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20d80d3d, 0x0000002e, 0x00000001 },
|
||||
/* add (1) g6.28<1>F g1.14<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20dc0d3d, 0x0000002e, 0x00000001 },
|
||||
/* mov (1) g5<1>F g1.16<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20a0013d, 0x00000030, 0x00000000 },
|
||||
/* add (1) g5.4<1>F g1.16<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20a40d3d, 0x00000030, 0x00000001 },
|
||||
/* mov (1) g5.8<1>F g1.16<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20a8013d, 0x00000030, 0x00000000 },
|
||||
/* add (1) g5.12<1>F g1.16<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20ac0d3d, 0x00000030, 0x00000001 },
|
||||
/* mov (1) g7<1>F g1.18<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20e0013d, 0x00000032, 0x00000000 },
|
||||
/* mov (1) g7.4<1>F g1.18<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20e4013d, 0x00000032, 0x00000000 },
|
||||
/* add (1) g7.8<1>F g1.18<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20e80d3d, 0x00000032, 0x00000001 },
|
||||
/* add (1) g7.12<1>F g1.18<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20ec0d3d, 0x00000032, 0x00000001 },
|
||||
/* mov (1) g5.16<1>F g1.20<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20b0013d, 0x00000034, 0x00000000 },
|
||||
/* add (1) g5.20<1>F g1.20<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20b40d3d, 0x00000034, 0x00000001 },
|
||||
/* mov (1) g5.24<1>F g1.20<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20b8013d, 0x00000034, 0x00000000 },
|
||||
/* add (1) g5.28<1>F g1.20<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20bc0d3d, 0x00000034, 0x00000001 },
|
||||
/* mov (1) g7.16<1>F g1.22<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20f0013d, 0x00000036, 0x00000000 },
|
||||
/* mov (1) g7.20<1>F g1.22<0,1,0>UW { align1 + } */
|
||||
{ 0x00000001, 0x20f4013d, 0x00000036, 0x00000000 },
|
||||
/* add (1) g7.24<1>F g1.22<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20f80d3d, 0x00000036, 0x00000001 },
|
||||
/* add (1) g7.28<1>F g1.22<0,1,0>UW 1 { align1 + } */
|
||||
{ 0x00000040, 0x20fc0d3d, 0x00000036, 0x00000001 },
|
||||
/* add (8) g4<1>F g4<8,8,1>F g1<0,1,0>F { align1 + } */
|
||||
{ 0x00600040, 0x208077bd, 0x008d0080, 0x00004020 },
|
||||
/* add (8) g5<1>F g5<8,8,1>F g1<0,1,0>F { align1 + } */
|
||||
{ 0x00600040, 0x20a077bd, 0x008d00a0, 0x00004020 },
|
||||
/* mul (8) g4<1>F g4<8,8,1>F g3<0,1,0>F { align1 + } */
|
||||
{ 0x00600041, 0x208077bd, 0x008d0080, 0x00000060 },
|
||||
/* mul (8) g5<1>F g5<8,8,1>F g3<0,1,0>F { align1 + } */
|
||||
{ 0x00600041, 0x20a077bd, 0x008d00a0, 0x00000060 },
|
||||
/* add (8) g4<1>F g4<8,8,1>F g3.12<0,1,0>F { align1 + } */
|
||||
{ 0x00600040, 0x208077bd, 0x008d0080, 0x0000006c },
|
||||
/* add (8) g5<1>F g5<8,8,1>F g3.12<0,1,0>F { align1 + } */
|
||||
{ 0x00600040, 0x20a077bd, 0x008d00a0, 0x0000006c },
|
||||
/* add (8) g6<1>F g6<8,8,1>F g1.4<0,1,0>F { align1 + } */
|
||||
{ 0x00600040, 0x20c077bd, 0x008d00c0, 0x00004024 },
|
||||
/* add (8) g7<1>F g7<8,8,1>F g1.4<0,1,0>F { align1 + } */
|
||||
{ 0x00600040, 0x20e077bd, 0x008d00e0, 0x00004024 },
|
||||
/* mul (8) g6<1>F g6<8,8,1>F g3.20<0,1,0>F { align1 + } */
|
||||
{ 0x00600041, 0x20c077bd, 0x008d00c0, 0x00000074 },
|
||||
/* mul (8) g7<1>F g7<8,8,1>F g3.20<0,1,0>F { align1 + } */
|
||||
{ 0x00600041, 0x20e077bd, 0x008d00e0, 0x00000074 },
|
||||
/* add (8) g6<1>F g6<8,8,1>F g3.28<0,1,0>F { align1 + } */
|
||||
{ 0x00600040, 0x20c077bd, 0x008d00c0, 0x0000007c },
|
||||
/* add (8) g7<1>F g7<8,8,1>F g3.28<0,1,0>F { align1 + } */
|
||||
{ 0x00600040, 0x20e077bd, 0x008d00e0, 0x0000007c },
|
||||
/* mov (8) m1<1>F g4<8,8,1>F { align1 + } */
|
||||
{ 0x00600001, 0x202003be, 0x008d0080, 0x00000000 },
|
||||
/* mov (8) m2<1>F g5<8,8,1>F { align1 + } */
|
||||
{ 0x00600001, 0x204003be, 0x008d00a0, 0x00000000 },
|
||||
/* mov (8) m3<1>F g6<8,8,1>F { align1 + } */
|
||||
{ 0x00600001, 0x206003be, 0x008d00c0, 0x00000000 },
|
||||
/* mov (8) m4<1>F g7<8,8,1>F { align1 + } */
|
||||
{ 0x00600001, 0x208003be, 0x008d00e0, 0x00000000 },
|
||||
/* send 0 (16) g12<1>UW g0<8,8,1>UW sampler mlen 5 rlen 8 { align1 + } */
|
||||
{ 0x00800031, 0x21801d29, 0x008d0000, 0x02580001 },
|
||||
/* mov (8) g19<1>UW g19<8,8,1>UW { align1 + } */
|
||||
{ 0x00600001, 0x22600129, 0x008d0260, 0x00000000 },
|
||||
/* add (8) g14<1>F g14<8,8,1>F -0.0627451{ align1 + } */
|
||||
{ 0x00600040, 0x21c07fbd, 0x008d01c0, 0xbd808081 },
|
||||
/* add (8) g12<1>F g12<8,8,1>F -0.501961{ align1 + } */
|
||||
{ 0x00600040, 0x21807fbd, 0x008d0180, 0xbf008081 },
|
||||
/* add (8) g16<1>F g16<8,8,1>F -0.501961{ align1 + } */
|
||||
{ 0x00600040, 0x22007fbd, 0x008d0200, 0xbf008081 },
|
||||
/* mul (8) g14<1>F g14<8,8,1>F 1.164{ align1 + } */
|
||||
{ 0x00600041, 0x21c07fbd, 0x008d01c0, 0x3f94fdf4 },
|
||||
/* mul (8) a0<1>F g12<8,8,1>F 1.596{ align1 + } */
|
||||
{ 0x00600041, 0x20007fbc, 0x008d0180, 0x3fcc49ba },
|
||||
/* mac (8) m2<1>F g14<8,8,1>F 1{ align1 + Saturate } */
|
||||
{ 0x80600048, 0x20407fbe, 0x008d01c0, 0x3f800000 },
|
||||
/* mul (8) a0<1>F g12<8,8,1>F -0.813{ align1 + } */
|
||||
{ 0x00600041, 0x20007fbc, 0x008d0180, 0xbf5020c5 },
|
||||
/* mac (8) a0<1>F g16<8,8,1>F -0.392{ align1 + } */
|
||||
{ 0x00600048, 0x20007fbc, 0x008d0200, 0xbec8b439 },
|
||||
/* mac (8) m3<1>F g14<8,8,1>F 1{ align1 + Saturate } */
|
||||
{ 0x80600048, 0x20607fbe, 0x008d01c0, 0x3f800000 },
|
||||
/* mul (8) a0<1>F g16<8,8,1>F 2.017{ align1 + } */
|
||||
{ 0x00600041, 0x20007fbc, 0x008d0200, 0x40011687 },
|
||||
/* mac (8) m4<1>F g14<8,8,1>F 1{ align1 + Saturate } */
|
||||
{ 0x80600048, 0x20807fbe, 0x008d01c0, 0x3f800000 },
|
||||
/* add (8) g15<1>F g15<8,8,1>F -0.0627451{ align1 + } */
|
||||
{ 0x00600040, 0x21e07fbd, 0x008d01e0, 0xbd808081 },
|
||||
/* add (8) g13<1>F g13<8,8,1>F -0.501961{ align1 + } */
|
||||
{ 0x00600040, 0x21a07fbd, 0x008d01a0, 0xbf008081 },
|
||||
/* add (8) g17<1>F g17<8,8,1>F -0.501961{ align1 + } */
|
||||
{ 0x00600040, 0x22207fbd, 0x008d0220, 0xbf008081 },
|
||||
/* mul (8) g15<1>F g15<8,8,1>F 1.164{ align1 + } */
|
||||
{ 0x00600041, 0x21e07fbd, 0x008d01e0, 0x3f94fdf4 },
|
||||
/* mul (8) a0<1>F g13<8,8,1>F 1.596{ align1 + } */
|
||||
{ 0x00600041, 0x20007fbc, 0x008d01a0, 0x3fcc49ba },
|
||||
/* mac (8) m6<1>F g15<8,8,1>F 1{ align1 + Saturate } */
|
||||
{ 0x80600048, 0x20c07fbe, 0x008d01e0, 0x3f800000 },
|
||||
/* mul (8) a0<1>F g13<8,8,1>F -0.813{ align1 + } */
|
||||
{ 0x00600041, 0x20007fbc, 0x008d01a0, 0xbf5020c5 },
|
||||
/* mac (8) a0<1>F g17<8,8,1>F -0.392{ align1 + } */
|
||||
{ 0x00600048, 0x20007fbc, 0x008d0220, 0xbec8b439 },
|
||||
/* mac (8) m7<1>F g15<8,8,1>F 1{ align1 + Saturate } */
|
||||
{ 0x80600048, 0x20e07fbe, 0x008d01e0, 0x3f800000 },
|
||||
/* mul (8) a0<1>F g17<8,8,1>F 2.017{ align1 + } */
|
||||
{ 0x00600041, 0x20007fbc, 0x008d0220, 0x40011687 },
|
||||
/* mac (8) m8<1>F g15<8,8,1>F 1{ align1 + Saturate } */
|
||||
{ 0x80600048, 0x21007fbe, 0x008d01e0, 0x3f800000 },
|
||||
/* mov (8) m1<1>UD g1<8,8,1>UD { align1 mask_disable + } */
|
||||
{ 0x00600201, 0x20200022, 0x008d0020, 0x00000000 },
|
||||
/* send 0 (16) a0<1>UW g0<8,8,1>UW write mlen 10 rlen 0 EOT{ align1 + } */
|
||||
{ 0x00800031, 0x20001d28, 0x008d0000, 0x85a04800 },
|
||||
/* nop (4) g0<1>UD { align1 + } */
|
||||
{ 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
|
||||
/* nop (4) g0<1>UD { align1 + } */
|
||||
{ 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
|
||||
/* nop (4) g0<1>UD { align1 + } */
|
||||
{ 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
|
||||
/* nop (4) g0<1>UD { align1 + } */
|
||||
{ 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
|
||||
/* nop (4) g0<1>UD { align1 + } */
|
||||
{ 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
|
||||
/* nop (4) g0<1>UD { align1 + } */
|
||||
{ 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
|
||||
/* nop (4) g0<1>UD { align1 + } */
|
||||
{ 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
|
||||
/* nop (4) g0<1>UD { align1 + } */
|
||||
{ 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
|
||||
|
||||
Loading…
Reference in New Issue