1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2009 Nicolai Haehnle. 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sublicense, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * portions of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef RADEON_OPCODES_H 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RADEON_OPCODES_H 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <assert.h> 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Opcodes understood by the Radeon compiler. 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum { 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_NOP = 0, 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_ILLEGAL_OPCODE, 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = abs(src0.c); */ 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_ABS, 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c + src1.c; */ 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_ADD, 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction: load address register 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * dst.x = floor(src.x), where dst must be an address register */ 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_ARL, 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = ceil(src0.c) */ 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_CEIL, 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = clamp(src0.c, src1.c, src2.c) */ 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_CLAMP, 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c < 0.0 ? src1.c : src2.c */ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_CMP, 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src2.c > 0.5 ? src0.c : src1.c */ 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_CND, 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = cos(src0.x) */ 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_COS, 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction: take vec4 partial derivative in X direction 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * dst.c = d src0.c / dx */ 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_DDX, 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction: take vec4 partial derivative in Y direction 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * dst.c = d src0.c / dy */ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_DDY, 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = src0.x*src1.x + src0.y*src1.y */ 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_DP2, 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = src0.x*src1.x + src0.y*src1.y + src0.z*src1.z */ 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_DP3, 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = src0.x*src1.x + src0.y*src1.y + src0.z*src1.z + src0.w*src1.w */ 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_DP4, 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = src0.x*src1.x + src0.y*src1.y + src0.z*src1.z + src1.w */ 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_DPH, 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction, see ARB_fragment_program */ 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_DST, 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = 2**src0.x */ 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_EX2, 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction, see ARB_vertex_program */ 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_EXP, 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = floor(src0.c) */ 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_FLR, 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c - floor(src0.c) */ 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_FRC, 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction: stop execution if any component of src0 is negative */ 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_KIL, 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = log_2(src0.x) */ 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_LG2, 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction, see ARB_vertex_program */ 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_LIT, 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction, see ARB_vertex_program */ 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_LOG, 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c*src1.c + (1 - src0.c)*src2.c */ 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_LRP, 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c*src1.c + src2.c */ 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_MAD, 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = max(src0.c, src1.c) */ 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_MAX, 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = min(src0.c, src1.c) */ 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_MIN, 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c */ 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_MOV, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c*src1.c */ 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_MUL, 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = src0.x ** src1.x */ 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_POW, 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = 1 / src0.x */ 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_RCP, 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = floor(src0.c + 0.5) */ 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_ROUND, 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = 1 / sqrt(src0.x) */ 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_RSQ, 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction, see ARB_fragment_program */ 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SCS, 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = (src0.c == src1.c) ? 1.0 : 0.0 */ 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SEQ, 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = 0.0 */ 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SFL, 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = (src0.c >= src1.c) ? 1.0 : 0.0 */ 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SGE, 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = (src0.c > src1.c) ? 1.0 : 0.0 */ 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SGT, 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** scalar instruction: dst = sin(src0.x) */ 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SIN, 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = (src0.c <= src1.c) ? 1.0 : 0.0 */ 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SLE, 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = (src0.c < src1.c) ? 1.0 : 0.0 */ 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SLT, 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = (src0.c != src1.c) ? 1.0 : 0.0 */ 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SNE, 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = (src0.c < 0 ?) -1 : ((src0.c > 0) : 1 : 0) */ 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SSG, 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c - src1.c */ 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SUB, 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = src0.c */ 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_SWZ, 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vec4 instruction: dst.c = (abs(src0.c) - fract(abs(src0.c))) * sgn(src0.c) */ 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_TRUNC, 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction, see ARB_fragment_program */ 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_XPD, 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_TEX, 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_TXB, 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_TXD, 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_TXL, 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_TXP, 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** branch instruction: 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If src0.x != 0.0, continue with the next instruction; 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * otherwise, jump to matching RC_OPCODE_ELSE or RC_OPCODE_ENDIF. 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_IF, 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** branch instruction: jump to matching RC_OPCODE_ENDIF */ 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_ELSE, 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** branch instruction: has no effect */ 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_ENDIF, 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_BGNLOOP, 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_BRK, 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_ENDLOOP, 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_CONT, 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction, used in R300-R500 fragment program pair instructions 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * indicates that the result of the alpha operation shall be replicated 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * across all other channels */ 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_REPL_ALPHA, 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** special instruction, used in R300-R500 fragment programs 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to indicate the start of a block of texture instructions that 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * can run simultaneously. */ 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_BEGIN_TEX, 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Stop execution of the shader (GLSL discard) */ 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_OPCODE_KILP, 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Vertex shader CF Instructions */ 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_ME_PRED_SEQ, 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_ME_PRED_SGT, 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_ME_PRED_SGE, 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_ME_PRED_SNEQ, 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_ME_PRED_SET_CLR, 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_ME_PRED_SET_INV, 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_ME_PRED_SET_POP, 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_ME_PRED_SET_RESTORE, 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_VE_PRED_SEQ_PUSH, 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_VE_PRED_SGT_PUSH, 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_VE_PRED_SGE_PUSH, 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RC_VE_PRED_SNEQ_PUSH, 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAX_RC_OPCODE 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} rc_opcode; 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct rc_opcode_info { 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rc_opcode Opcode; 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char * Name; 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** true if the instruction reads from a texture. 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \note This is false for the KIL instruction, even though KIL is 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a texture instruction from a hardware point of view. */ 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int HasTexture:1; 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int NumSrcRegs:2; 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int HasDstReg:1; 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** true if this instruction affects control flow */ 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int IsFlowControl:1; 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** true if this is a vector instruction that operates on components in parallel 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without any cross-component interaction */ 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int IsComponentwise:1; 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** true if this instruction sources only its operands X components 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to compute one result which is smeared across all output channels */ 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int IsStandardScalar:1; 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct rc_opcode_info rc_opcodes[MAX_RC_OPCODE]; 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline const struct rc_opcode_info * rc_get_opcode_info(rc_opcode opcode) 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert((unsigned int)opcode < MAX_RC_OPCODE); 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(rc_opcodes[opcode].Opcode == opcode); 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &rc_opcodes[opcode]; 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct rc_instruction; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid rc_compute_sources_for_writemask( 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct rc_instruction *inst, 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int writemask, 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int *srcmasks); 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* RADEON_OPCODES_H */ 285