1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2009 Nicolai Hähnle <nhaehnle@gmail.com> 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * on the rights to use, copy, modify, merge, publish, distribute, sub 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * license, and/or sell copies of the Software, and to permit persons to whom 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the Software is furnished to do so, subject to the following conditions: 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the next 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * paragraph) shall be included in all copies or substantial portions of the 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software. 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * USE OR OTHER DEALINGS IN THE SOFTWARE. */ 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef RADEON_CODE_H 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RADEON_CODE_H 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdint.h> 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_PFS_MAX_ALU_INST 64 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_PFS_MAX_TEX_INST 32 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_PFS_MAX_TEX_INDIRECT 4 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_PFS_NUM_TEMP_REGS 32 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_PFS_NUM_CONST_REGS 32 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R400_PFS_MAX_ALU_INST 512 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R400_PFS_MAX_TEX_INST 512 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R500_PFS_MAX_INST 512 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R500_PFS_NUM_TEMP_REGS 128 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R500_PFS_NUM_CONST_REGS 256 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R500_PFS_MAX_BRANCH_DEPTH_FULL 32 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R500_PFS_MAX_BRANCH_DEPTH_PARTIAL 4 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* The r500 maximum depth is not just for loops, but any combination of loops 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and subroutine jumps. */ 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R500_PVS_MAX_LOOP_DEPTH 8 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define STATE_R300_WINDOW_DIMENSION (STATE_INTERNAL_DRIVER+0) 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum { 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * External constants are constants whose meaning is unknown to this 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * compiler. For example, a Mesa gl_program's constants are turned 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * into external constants. 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_CONSTANT_EXTERNAL = 0, 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_CONSTANT_IMMEDIATE, 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Constant referring to state that is known by this compiler, 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * see RC_STATE_xxx, i.e. *not* arbitrary Mesa (or other) state. 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_CONSTANT_STATE 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum { 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_STATE_SHADOW_AMBIENT = 0, 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_STATE_R300_WINDOW_DIMENSION, 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_STATE_R300_TEXRECT_FACTOR, 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_STATE_R300_TEXSCALE_FACTOR, 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_STATE_R300_VIEWPORT_SCALE, 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_STATE_R300_VIEWPORT_OFFSET 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct rc_constant { 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Type:2; /**< RC_CONSTANT_xxx */ 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Size:3; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union { 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned External; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float Immediate[4]; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned State[2]; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } u; 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct rc_constant_list { 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rc_constant * Constants; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Count; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned _Reserved; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid rc_constants_init(struct rc_constant_list * c); 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid rc_constants_copy(struct rc_constant_list * dst, struct rc_constant_list * src); 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid rc_constants_destroy(struct rc_constant_list * c); 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned rc_constants_add(struct rc_constant_list * c, struct rc_constant * constant); 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned rc_constants_add_state(struct rc_constant_list * c, unsigned state1, unsigned state2); 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned rc_constants_add_immediate_vec4(struct rc_constant_list * c, const float * data); 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned rc_constants_add_immediate_scalar(struct rc_constant_list * c, float data, unsigned * swizzle); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid rc_constants_print(struct rc_constant_list * c); 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Compare functions. 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \note By design, RC_COMPARE_FUNC_xxx + GL_NEVER gives you 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the correct GL compare function. 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum { 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_COMPARE_FUNC_NEVER = 0, 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_COMPARE_FUNC_LESS, 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_COMPARE_FUNC_EQUAL, 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_COMPARE_FUNC_LEQUAL, 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_COMPARE_FUNC_GREATER, 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_COMPARE_FUNC_NOTEQUAL, 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_COMPARE_FUNC_GEQUAL, 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_COMPARE_FUNC_ALWAYS 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} rc_compare_func; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Coordinate wrapping modes. 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These are not quite the same as their GL counterparts yet. 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum { 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_WRAP_NONE = 0, 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_WRAP_REPEAT, 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_WRAP_MIRRORED_REPEAT, 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_WRAP_MIRRORED_CLAMP 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} rc_wrap_mode; 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Stores state that influences the compilation of a fragment program. 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r300_fragment_program_external_state { 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This field contains swizzle for some lowering passes 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (shadow comparison, unorm->snorm conversion) 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned texture_swizzle:12; 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If the sampler is used as a shadow sampler, 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this field specifies the compare function. 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Otherwise, this field is \ref RC_COMPARE_FUNC_NEVER (aka 0). 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \sa rc_compare_func 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned texture_compare_func : 3; 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * No matter what the sampler type is, 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this field turns it into a shadow sampler. 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned compare_mode_enabled : 1; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If the sampler will receive non-normalized coords, 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this field is set. The scaling factor is given by 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * RC_STATE_R300_TEXRECT_FACTOR. 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned non_normalized_coords : 1; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This field specifies wrapping modes for the sampler. 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If this field is \ref RC_WRAP_NONE (aka 0), no wrapping maths 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * will be performed on the coordinates. 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned wrap_mode : 3; 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The coords are scaled after applying the wrap mode emulation 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and right before texture fetch. The scaling factor is given by 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * RC_STATE_R300_TEXSCALE_FACTOR. */ 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned clamp_and_scale_before_fetch : 1; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fetch RGTC1_SNORM or LATC1_SNORM as UNORM and convert UNORM -> SNORM 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in the shader. 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned convert_unorm_to_snorm:1; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } unit[16]; 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r300_fragment_program_node { 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int tex_offset; /**< first tex instruction */ 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int tex_end; /**< last tex instruction, relative to tex_offset */ 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int alu_offset; /**< first ALU instruction */ 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int alu_end; /**< last ALU instruction, relative to alu_offset */ 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int flags; 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Stores an R300 fragment program in its compiled-to-hardware form. 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r300_fragment_program_code { 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int length; /**< total # of texture instructions used */ 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t inst[R400_PFS_MAX_TEX_INST]; 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } tex; 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int length; /**< total # of ALU instructions used */ 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t rgb_inst; 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t rgb_addr; 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t alpha_inst; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t alpha_addr; 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t r400_ext_addr; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } inst[R400_PFS_MAX_ALU_INST]; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } alu; 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t config; /* US_CONFIG */ 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t pixsize; /* US_PIXSIZE */ 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t code_offset; /* US_CODE_OFFSET */ 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t r400_code_offset_ext; /* US_CODE_EXT */ 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t code_addr[4]; /* US_CODE_ADDR */ 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*US_CODE_BANK.R390_MODE: Enables 512 instructions and 64 temporaries 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for r400 cards */ 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int r390_mode:1; 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r500_fragment_program_code { 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t inst0; 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t inst1; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t inst2; 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t inst3; 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t inst4; 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t inst5; 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } inst[R500_PFS_MAX_INST]; 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int inst_end; /* Number of instructions - 1; also, last instruction to be executed */ 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int max_temp_idx; 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t us_fc_ctrl; 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t int_constants[32]; 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t int_constant_count; 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct rX00_fragment_program_code { 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union { 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct r300_fragment_program_code r300; 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct r500_fragment_program_code r500; 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } code; 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned writes_depth:1; 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rc_constant_list constants; 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *constants_remap_table; 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_VS_MAX_ALU 256 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_VS_MAX_ALU_DWORDS (R300_VS_MAX_ALU * 4) 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R500_VS_MAX_ALU 1024 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R500_VS_MAX_ALU_DWORDS (R500_VS_MAX_ALU * 4) 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_VS_MAX_TEMPS 32 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* This is the max for all chipsets (r300-r500) */ 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_VS_MAX_FC_OPS 16 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R300_VS_MAX_LOOP_DEPTH 1 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VSF_MAX_INPUTS 32 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VSF_MAX_OUTPUTS 32 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r300_vertex_program_code { 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int length; 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union { 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t d[R500_VS_MAX_ALU_DWORDS]; 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float f[R500_VS_MAX_ALU_DWORDS]; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } body; 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int pos_end; 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int num_temporaries; /* Number of temp vars used by program */ 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int inputs[VSF_MAX_INPUTS]; 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int outputs[VSF_MAX_OUTPUTS]; 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rc_constant_list constants; 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *constants_remap_table; 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t InputsRead; 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t OutputsWritten; 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int num_fc_ops; 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t fc_ops; 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union { 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t r300[R300_VS_MAX_FC_OPS]; 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t lw; 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t uw; 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } r500[R300_VS_MAX_FC_OPS]; 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } fc_op_addrs; 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int32_t fc_loop_index[R300_VS_MAX_FC_OPS]; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* RADEON_CODE_H */ 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 305