179d8e78442c08082083261d517cdf260e0bd309fBrian/************************************************************************** 279d8e78442c08082083261d517cdf260e0bd309fBrian * 3e2da7edd642198d7c515dbc0b9ba77d4286c3262Michal Krol * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. 479d8e78442c08082083261d517cdf260e0bd309fBrian * All Rights Reserved. 54bfe1c955fe679547c8a03119d1681e33593c768Michal Krol * Copyright 2009-2010 VMware, Inc. All rights Reserved. 679d8e78442c08082083261d517cdf260e0bd309fBrian * 779d8e78442c08082083261d517cdf260e0bd309fBrian * Permission is hereby granted, free of charge, to any person obtaining a 879d8e78442c08082083261d517cdf260e0bd309fBrian * copy of this software and associated documentation files (the 979d8e78442c08082083261d517cdf260e0bd309fBrian * "Software"), to deal in the Software without restriction, including 1079d8e78442c08082083261d517cdf260e0bd309fBrian * without limitation the rights to use, copy, modify, merge, publish, 1179d8e78442c08082083261d517cdf260e0bd309fBrian * distribute, sub license, and/or sell copies of the Software, and to 1279d8e78442c08082083261d517cdf260e0bd309fBrian * permit persons to whom the Software is furnished to do so, subject to 1379d8e78442c08082083261d517cdf260e0bd309fBrian * the following conditions: 1479d8e78442c08082083261d517cdf260e0bd309fBrian * 1579d8e78442c08082083261d517cdf260e0bd309fBrian * The above copyright notice and this permission notice (including the 1679d8e78442c08082083261d517cdf260e0bd309fBrian * next paragraph) shall be included in all copies or substantial portions 1779d8e78442c08082083261d517cdf260e0bd309fBrian * of the Software. 1879d8e78442c08082083261d517cdf260e0bd309fBrian * 1979d8e78442c08082083261d517cdf260e0bd309fBrian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 2079d8e78442c08082083261d517cdf260e0bd309fBrian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2179d8e78442c08082083261d517cdf260e0bd309fBrian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2279d8e78442c08082083261d517cdf260e0bd309fBrian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2379d8e78442c08082083261d517cdf260e0bd309fBrian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2479d8e78442c08082083261d517cdf260e0bd309fBrian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2579d8e78442c08082083261d517cdf260e0bd309fBrian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2679d8e78442c08082083261d517cdf260e0bd309fBrian * 2779d8e78442c08082083261d517cdf260e0bd309fBrian **************************************************************************/ 2879d8e78442c08082083261d517cdf260e0bd309fBrian 29e2da7edd642198d7c515dbc0b9ba77d4286c3262Michal Krol#ifndef TGSI_EXEC_H 30ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_H 31ffe58739da9eee2e99682747cc8f26e412c87430michal 3270af238b494ed1b6da4841c2065c33ee0f0f37c9Keith Whitwell#include "pipe/p_compiler.h" 33c202fe187cf7a08d60e23ce617a5820a8bc510fdKeith Whitwell#include "pipe/p_state.h" 34859f45a92197f310186924c47ef7b7d1c2bd7ec8Brian Paul#include "pipe/p_shader_tokens.h" 3570af238b494ed1b6da4841c2065c33ee0f0f37c9Keith Whitwell 36ffe58739da9eee2e99682747cc8f26e412c87430michal#if defined __cplusplus 37ffe58739da9eee2e99682747cc8f26e412c87430michalextern "C" { 3879d8e78442c08082083261d517cdf260e0bd309fBrian#endif 39ffe58739da9eee2e99682747cc8f26e412c87430michal 409ee1bcf7a5442ccb517a5cfbaf024755bd4d2738Tom Stellard#define TGSI_CHAN_X 0 419ee1bcf7a5442ccb517a5cfbaf024755bd4d2738Tom Stellard#define TGSI_CHAN_Y 1 429ee1bcf7a5442ccb517a5cfbaf024755bd4d2738Tom Stellard#define TGSI_CHAN_Z 2 439ee1bcf7a5442ccb517a5cfbaf024755bd4d2738Tom Stellard#define TGSI_CHAN_W 3 444bfe1c955fe679547c8a03119d1681e33593c768Michal Krol 456b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard#define TGSI_NUM_CHANNELS 4 /* R,G,B,A */ 466b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard#define TGSI_QUAD_SIZE 4 /* 4 pixel/quad */ 47058b978a5ae2a56e09fed6335b686c654444f4acmichal 4882b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard#define TGSI_FOR_EACH_CHANNEL( CHAN )\ 4982b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard for (CHAN = 0; CHAN < TGSI_NUM_CHANNELS; CHAN++) 5082b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard 5182b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard#define TGSI_IS_DST0_CHANNEL_ENABLED( INST, CHAN )\ 5282b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard ((INST)->Dst[0].Register.WriteMask & (1 << (CHAN))) 5382b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard 5482b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard#define TGSI_IF_IS_DST0_CHANNEL_ENABLED( INST, CHAN )\ 5582b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard if (TGSI_IS_DST0_CHANNEL_ENABLED( INST, CHAN )) 5682b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard 5782b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard#define TGSI_FOR_EACH_DST0_ENABLED_CHANNEL( INST, CHAN )\ 5882b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard TGSI_FOR_EACH_CHANNEL( CHAN )\ 5982b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard TGSI_IF_IS_DST0_CHANNEL_ENABLED( INST, CHAN ) 6082b71db03ddaf0eed504412c9169db37cf9bdadcTom Stellard 614bfe1c955fe679547c8a03119d1681e33593c768Michal Krol 6279d8e78442c08082083261d517cdf260e0bd309fBrian/** 6379d8e78442c08082083261d517cdf260e0bd309fBrian * Registers may be treated as float, signed int or unsigned int. 6479d8e78442c08082083261d517cdf260e0bd309fBrian */ 65ffe58739da9eee2e99682747cc8f26e412c87430michalunion tgsi_exec_channel 66ffe58739da9eee2e99682747cc8f26e412c87430michal{ 676b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard float f[TGSI_QUAD_SIZE]; 686b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard int i[TGSI_QUAD_SIZE]; 696b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard unsigned u[TGSI_QUAD_SIZE]; 70ffe58739da9eee2e99682747cc8f26e412c87430michal}; 71ffe58739da9eee2e99682747cc8f26e412c87430michal 7279d8e78442c08082083261d517cdf260e0bd309fBrian/** 7379d8e78442c08082083261d517cdf260e0bd309fBrian * A vector[RGBA] of channels[4 pixels] 7479d8e78442c08082083261d517cdf260e0bd309fBrian */ 75ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_exec_vector 76ffe58739da9eee2e99682747cc8f26e412c87430michal{ 776b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard union tgsi_exec_channel xyzw[TGSI_NUM_CHANNELS]; 78ffe58739da9eee2e99682747cc8f26e412c87430michal}; 79ffe58739da9eee2e99682747cc8f26e412c87430michal 8079d8e78442c08082083261d517cdf260e0bd309fBrian/** 8179d8e78442c08082083261d517cdf260e0bd309fBrian * For fragment programs, information for computing fragment input 8279d8e78442c08082083261d517cdf260e0bd309fBrian * values from plane equation of the triangle/line. 8379d8e78442c08082083261d517cdf260e0bd309fBrian */ 84058b978a5ae2a56e09fed6335b686c654444f4acmichalstruct tgsi_interp_coef 85058b978a5ae2a56e09fed6335b686c654444f4acmichal{ 866b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard float a0[TGSI_NUM_CHANNELS]; /* in an xyzw layout */ 876b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard float dadx[TGSI_NUM_CHANNELS]; 886b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard float dady[TGSI_NUM_CHANNELS]; 89058b978a5ae2a56e09fed6335b686c654444f4acmichal}; 90b4480285ed5098f1c862690ee105dd46f5e6cd1eBrian 914440428faa82f01b4dfb4be89618be2aaf153abdMichal Krolenum tgsi_sampler_control { 924440428faa82f01b4dfb4be89618be2aaf153abdMichal Krol tgsi_sampler_lod_bias, 934440428faa82f01b4dfb4be89618be2aaf153abdMichal Krol tgsi_sampler_lod_explicit 944440428faa82f01b4dfb4be89618be2aaf153abdMichal Krol}; 954440428faa82f01b4dfb4be89618be2aaf153abdMichal Krol 9679d8e78442c08082083261d517cdf260e0bd309fBrian/** 9779d8e78442c08082083261d517cdf260e0bd309fBrian * Information for sampling textures, which must be implemented 9879d8e78442c08082083261d517cdf260e0bd309fBrian * by code outside the TGSI executor. 9979d8e78442c08082083261d517cdf260e0bd309fBrian */ 100ddd30d8160dc7db5f24a5ac823fd1c64c43b50beBrianstruct tgsi_sampler 101ffe58739da9eee2e99682747cc8f26e412c87430michal{ 102b4480285ed5098f1c862690ee105dd46f5e6cd1eBrian /** Get samples for four fragments in a quad */ 103b4480285ed5098f1c862690ee105dd46f5e6cd1eBrian void (*get_samples)(struct tgsi_sampler *sampler, 1046b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard const float s[TGSI_QUAD_SIZE], 1056b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard const float t[TGSI_QUAD_SIZE], 1066b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard const float p[TGSI_QUAD_SIZE], 1076b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard const float c0[TGSI_QUAD_SIZE], 1084440428faa82f01b4dfb4be89618be2aaf153abdMichal Krol enum tgsi_sampler_control control, 1096b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE]); 1107f1b9ddd12e97ac57c4818646c17521bb0c2c358Dave Airlie void (*get_dims)(struct tgsi_sampler *sampler, int level, 1117f1b9ddd12e97ac57c4818646c17521bb0c2c358Dave Airlie int dims[4]); 1126b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard void (*get_texel)(struct tgsi_sampler *sampler, const int i[TGSI_QUAD_SIZE], 1136b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard const int j[TGSI_QUAD_SIZE], const int k[TGSI_QUAD_SIZE], 1146b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard const int lod[TGSI_QUAD_SIZE], const int8_t offset[3], 1156b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE]); 116ffe58739da9eee2e99682747cc8f26e412c87430michal}; 117ffe58739da9eee2e99682747cc8f26e412c87430michal 118f7be39ea105aa951d0f6e1d8ffbea63412e30801Brian Paul#define TGSI_EXEC_NUM_TEMPS 128 119f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_NUM_IMMEDIATES 256 120101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin#define TGSI_EXEC_NUM_TEMP_ARRAYS 8 121f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul 122aaac436c6c06232e383d5cee3c6dfc69eb820c83Brian/* 123aaac436c6c06232e383d5cee3c6dfc69eb820c83Brian * Locations of various utility registers (_I = Index, _C = Channel) 124aaac436c6c06232e383d5cee3c6dfc69eb820c83Brian */ 125f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_00000000_I (TGSI_EXEC_NUM_TEMPS + 0) 126ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_00000000_C 0 127ffe58739da9eee2e99682747cc8f26e412c87430michal 128f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_7FFFFFFF_I (TGSI_EXEC_NUM_TEMPS + 0) 129ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_7FFFFFFF_C 1 130ffe58739da9eee2e99682747cc8f26e412c87430michal 131f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_80000000_I (TGSI_EXEC_NUM_TEMPS + 0) 132ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_80000000_C 2 133ffe58739da9eee2e99682747cc8f26e412c87430michal 134f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_FFFFFFFF_I (TGSI_EXEC_NUM_TEMPS + 0) 135ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_FFFFFFFF_C 3 136ffe58739da9eee2e99682747cc8f26e412c87430michal 137f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_ONE_I (TGSI_EXEC_NUM_TEMPS + 1) 138ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_ONE_C 0 139ffe58739da9eee2e99682747cc8f26e412c87430michal 140f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_TWO_I (TGSI_EXEC_NUM_TEMPS + 1) 141ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_TWO_C 1 142ffe58739da9eee2e99682747cc8f26e412c87430michal 143f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_128_I (TGSI_EXEC_NUM_TEMPS + 1) 144ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_128_C 2 145ffe58739da9eee2e99682747cc8f26e412c87430michal 146f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_MINUS_128_I (TGSI_EXEC_NUM_TEMPS + 1) 147ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_MINUS_128_C 3 148ffe58739da9eee2e99682747cc8f26e412c87430michal 149f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_KILMASK_I (TGSI_EXEC_NUM_TEMPS + 2) 150ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_KILMASK_C 0 151ffe58739da9eee2e99682747cc8f26e412c87430michal 152f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_OUTPUT_I (TGSI_EXEC_NUM_TEMPS + 2) 153ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_OUTPUT_C 1 154ffe58739da9eee2e99682747cc8f26e412c87430michal 155f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_PRIMITIVE_I (TGSI_EXEC_NUM_TEMPS + 2) 156ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_EXEC_TEMP_PRIMITIVE_C 2 157ffe58739da9eee2e99682747cc8f26e412c87430michal 158f93d6f929f2439f87950df2c30c6c48b6dcac395Michal Krol#define TGSI_EXEC_TEMP_THREE_I (TGSI_EXEC_NUM_TEMPS + 2) 159f93d6f929f2439f87950df2c30c6c48b6dcac395Michal Krol#define TGSI_EXEC_TEMP_THREE_C 3 160ffe58739da9eee2e99682747cc8f26e412c87430michal 161f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_HALF_I (TGSI_EXEC_NUM_TEMPS + 3) 162f93d6f929f2439f87950df2c30c6c48b6dcac395Michal Krol#define TGSI_EXEC_TEMP_HALF_C 0 16317058e07469f2dc5b47b4f820bd5a31b7ed9177cKeith Whitwell 16403c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul/* execution mask, each value is either 0 or ~0 */ 16503c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul#define TGSI_EXEC_MASK_I (TGSI_EXEC_NUM_TEMPS + 3) 166f93d6f929f2439f87950df2c30c6c48b6dcac395Michal Krol#define TGSI_EXEC_MASK_C 1 16703c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul 1687fb702705a77df46074b9e09e9c5e5903036c732Keith Whitwell/* 4 register buffer for various purposes */ 169f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul#define TGSI_EXEC_TEMP_R0 (TGSI_EXEC_NUM_TEMPS + 4) 1707fb702705a77df46074b9e09e9c5e5903036c732Keith Whitwell#define TGSI_EXEC_NUM_TEMP_R 4 1717fb702705a77df46074b9e09e9c5e5903036c732Keith Whitwell 1727fb702705a77df46074b9e09e9c5e5903036c732Keith Whitwell#define TGSI_EXEC_TEMP_ADDR (TGSI_EXEC_NUM_TEMPS + 8) 1737fb702705a77df46074b9e09e9c5e5903036c732Keith Whitwell#define TGSI_EXEC_NUM_ADDRS 1 174aa2b2e5d7d53ddd08425536edddec509a8834bfcMichal Krol 175aa2b2e5d7d53ddd08425536edddec509a8834bfcMichal Krol/* predicate register */ 176aa2b2e5d7d53ddd08425536edddec509a8834bfcMichal Krol#define TGSI_EXEC_TEMP_P0 (TGSI_EXEC_NUM_TEMPS + 9) 177aa2b2e5d7d53ddd08425536edddec509a8834bfcMichal Krol#define TGSI_EXEC_NUM_PREDS 1 178aa2b2e5d7d53ddd08425536edddec509a8834bfcMichal Krol 179aa2b2e5d7d53ddd08425536edddec509a8834bfcMichal Krol#define TGSI_EXEC_NUM_TEMP_EXTRAS 10 180f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul 18117058e07469f2dc5b47b4f820bd5a31b7ed9177cKeith Whitwell 182ffe58739da9eee2e99682747cc8f26e412c87430michal 1837b5931b313b8a38fd564435e69e644320fb3de5eJosé Fonseca#define TGSI_EXEC_MAX_NESTING 32 1847b5931b313b8a38fd564435e69e644320fb3de5eJosé Fonseca#define TGSI_EXEC_MAX_COND_NESTING TGSI_EXEC_MAX_NESTING 1857b5931b313b8a38fd564435e69e644320fb3de5eJosé Fonseca#define TGSI_EXEC_MAX_LOOP_NESTING TGSI_EXEC_MAX_NESTING 1867b5931b313b8a38fd564435e69e644320fb3de5eJosé Fonseca#define TGSI_EXEC_MAX_SWITCH_NESTING TGSI_EXEC_MAX_NESTING 1877b5931b313b8a38fd564435e69e644320fb3de5eJosé Fonseca#define TGSI_EXEC_MAX_CALL_NESTING TGSI_EXEC_MAX_NESTING 188fc38c827716d333c92017348add1e80ea78af948Brian 18926c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol/* The maximum number of input attributes per vertex. For 2D 19026c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol * input register files, this is the stride between two 1D 19126c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol * arrays. 19226c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol */ 19326c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol#define TGSI_EXEC_MAX_INPUT_ATTRIBS 17 19426c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol 19526c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol/* The maximum number of constant vectors per constant buffer. 19626c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol */ 19726c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol#define TGSI_EXEC_MAX_CONST_BUFFER 4096 19826c8593093bd9e42d06a54ed8cfdedce2fb44332Michal Krol 19989d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin/* The maximum number of vertices per primitive */ 20089d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin#define TGSI_MAX_PRIM_VERTICES 6 20189d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin 20289d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin/* The maximum number of primitives to be generated */ 20389d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin#define TGSI_MAX_PRIMITIVES 64 20489d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin 20589d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin/* The maximum total number of vertices */ 20689d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin#define TGSI_MAX_TOTAL_VERTICES (TGSI_MAX_PRIM_VERTICES * TGSI_MAX_PRIMITIVES * PIPE_MAX_ATTRIBS) 207d78a19612173eda51b93818a16a947201a785f3fBrian Paul 208859f45a92197f310186924c47ef7b7d1c2bd7ec8Brian Paul#define TGSI_MAX_MISC_INPUTS 8 209859f45a92197f310186924c47ef7b7d1c2bd7ec8Brian Paul 210d78a19612173eda51b93818a16a947201a785f3fBrian Paul/** function call/activation record */ 211d78a19612173eda51b93818a16a947201a785f3fBrian Paulstruct tgsi_call_record 212d78a19612173eda51b93818a16a947201a785f3fBrian Paul{ 213d78a19612173eda51b93818a16a947201a785f3fBrian Paul uint CondStackTop; 214d78a19612173eda51b93818a16a947201a785f3fBrian Paul uint LoopStackTop; 215d78a19612173eda51b93818a16a947201a785f3fBrian Paul uint ContStackTop; 216062aab96e015021f3b83067848495a8ce2d92456Michal Krol int SwitchStackTop; 217062aab96e015021f3b83067848495a8ce2d92456Michal Krol int BreakStackTop; 218d78a19612173eda51b93818a16a947201a785f3fBrian Paul uint ReturnAddr; 219d78a19612173eda51b93818a16a947201a785f3fBrian Paul}; 220d78a19612173eda51b93818a16a947201a785f3fBrian Paul 221062aab96e015021f3b83067848495a8ce2d92456Michal Krol 222062aab96e015021f3b83067848495a8ce2d92456Michal Krol/* Switch-case block state. */ 223062aab96e015021f3b83067848495a8ce2d92456Michal Krolstruct tgsi_switch_record { 224062aab96e015021f3b83067848495a8ce2d92456Michal Krol uint mask; /**< execution mask */ 225062aab96e015021f3b83067848495a8ce2d92456Michal Krol union tgsi_exec_channel selector; /**< a value case statements are compared to */ 226062aab96e015021f3b83067848495a8ce2d92456Michal Krol uint defaultMask; /**< non-execute mask for default case */ 227062aab96e015021f3b83067848495a8ce2d92456Michal Krol}; 228062aab96e015021f3b83067848495a8ce2d92456Michal Krol 229062aab96e015021f3b83067848495a8ce2d92456Michal Krol 230062aab96e015021f3b83067848495a8ce2d92456Michal Krolenum tgsi_break_type { 231062aab96e015021f3b83067848495a8ce2d92456Michal Krol TGSI_EXEC_BREAK_INSIDE_LOOP, 232062aab96e015021f3b83067848495a8ce2d92456Michal Krol TGSI_EXEC_BREAK_INSIDE_SWITCH 233062aab96e015021f3b83067848495a8ce2d92456Michal Krol}; 234062aab96e015021f3b83067848495a8ce2d92456Michal Krol 235062aab96e015021f3b83067848495a8ce2d92456Michal Krol 236062aab96e015021f3b83067848495a8ce2d92456Michal Krol#define TGSI_EXEC_MAX_BREAK_STACK (TGSI_EXEC_MAX_LOOP_NESTING + TGSI_EXEC_MAX_SWITCH_NESTING) 237062aab96e015021f3b83067848495a8ce2d92456Michal Krol 238062aab96e015021f3b83067848495a8ce2d92456Michal Krol 23978f3cd1e08d68111a2db308c000b94cc580b3cadBrian/** 24078f3cd1e08d68111a2db308c000b94cc580b3cadBrian * Run-time virtual machine state for executing TGSI shader. 24178f3cd1e08d68111a2db308c000b94cc580b3cadBrian */ 242ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_exec_machine 243ffe58739da9eee2e99682747cc8f26e412c87430michal{ 244f042d662e2cec4315ddaae1ee536f593139f703dBrian Paul /* Total = program temporaries + internal temporaries 245ffe58739da9eee2e99682747cc8f26e412c87430michal */ 2466175653d0bceedba1f599d27111bab14f312f134Keith Whitwell struct tgsi_exec_vector Temps[TGSI_EXEC_NUM_TEMPS + 2476175653d0bceedba1f599d27111bab14f312f134Keith Whitwell TGSI_EXEC_NUM_TEMP_EXTRAS]; 248101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin struct tgsi_exec_vector TempArray[TGSI_EXEC_NUM_TEMP_ARRAYS][TGSI_EXEC_NUM_TEMPS]; 2496175653d0bceedba1f599d27111bab14f312f134Keith Whitwell 2506175653d0bceedba1f599d27111bab14f312f134Keith Whitwell float Imms[TGSI_EXEC_NUM_IMMEDIATES][4]; 251ffe58739da9eee2e99682747cc8f26e412c87430michal 2522b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin float ImmArray[TGSI_EXEC_NUM_IMMEDIATES][4]; 2532b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 254ff2a0faba068ac8bc891f4a6427ad3e241c5f09fZack Rusin struct tgsi_exec_vector *Inputs; 255ff2a0faba068ac8bc891f4a6427ad3e241c5f09fZack Rusin struct tgsi_exec_vector *Outputs; 2564e3002b50fcedf3a6db1ac7394077bc3337ccda1Keith Whitwell 257859f45a92197f310186924c47ef7b7d1c2bd7ec8Brian Paul /* System values */ 258859f45a92197f310186924c47ef7b7d1c2bd7ec8Brian Paul unsigned SysSemanticToIndex[TGSI_SEMANTIC_COUNT]; 25934a78b7ef6b0edf217acf221eab4b63542be5552Dave Airlie union tgsi_exec_channel SystemValue[TGSI_MAX_MISC_INPUTS]; 260859f45a92197f310186924c47ef7b7d1c2bd7ec8Brian Paul 261ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_exec_vector *Addrs; 2620c54d76f3783091267cb18e6bd23697d024c95b2Michal Krol struct tgsi_exec_vector *Predicates; 263ffe58739da9eee2e99682747cc8f26e412c87430michal 2640b9e96fae9493d5d58f046e01c983a3c4267090eBrian struct tgsi_sampler **Samplers; 265ffe58739da9eee2e99682747cc8f26e412c87430michal 266058b978a5ae2a56e09fed6335b686c654444f4acmichal unsigned ImmLimit; 267ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paul 2687c5f255201f42303188137f56ea8acc030444f0eMichal Krol const void *Consts[PIPE_MAX_CONSTANT_BUFFERS]; 269ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paul unsigned ConstsSize[PIPE_MAX_CONSTANT_BUFFERS]; 270ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paul 2710f82aa5f15479aea692613fb56643bf3b769cf37Brian Paul const struct tgsi_token *Tokens; /**< Declarations, instructions */ 2720f82aa5f15479aea692613fb56643bf3b769cf37Brian Paul unsigned Processor; /**< TGSI_PROCESSOR_x */ 273058b978a5ae2a56e09fed6335b686c654444f4acmichal 274058b978a5ae2a56e09fed6335b686c654444f4acmichal /* GEOMETRY processor only. */ 275058b978a5ae2a56e09fed6335b686c654444f4acmichal unsigned *Primitives; 27689d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin unsigned NumOutputs; 27789d8577fb3036547ef0b47498cc8dc5c77f886e0Zack Rusin unsigned MaxGeometryShaderOutputs; 278ffe58739da9eee2e99682747cc8f26e412c87430michal 279058b978a5ae2a56e09fed6335b686c654444f4acmichal /* FRAGMENT processor only. */ 280058b978a5ae2a56e09fed6335b686c654444f4acmichal const struct tgsi_interp_coef *InterpCoefs; 281e785f190f0d49f0367f7468c22b77962d0f14ea0Brian struct tgsi_exec_vector QuadPos; 282cc35a454da08e7303c76a51972bcccf7d67b7704Michal Krol float Face; /**< +1 if front facing, -1 if back facing */ 28367e3cbf1632e361220234013147331e4618b70cbDave Airlie bool flatshade_color; 28478f3cd1e08d68111a2db308c000b94cc580b3cadBrian /* Conditional execution masks */ 28553a6a55c7c56c6811a9e627c8624c05e83d4e04bBrian uint CondMask; /**< For IF/ELSE/ENDIF */ 28653a6a55c7c56c6811a9e627c8624c05e83d4e04bBrian uint LoopMask; /**< For BGNLOOP/ENDLOOP */ 28753a6a55c7c56c6811a9e627c8624c05e83d4e04bBrian uint ContMask; /**< For loop CONT statements */ 288aec1f8e4f8315df23dc51a0b5a5fad90a03be851Brian uint FuncMask; /**< For function calls */ 28978f3cd1e08d68111a2db308c000b94cc580b3cadBrian uint ExecMask; /**< = CondMask & LoopMask */ 290fc38c827716d333c92017348add1e80ea78af948Brian 291062aab96e015021f3b83067848495a8ce2d92456Michal Krol /* Current switch-case state. */ 292062aab96e015021f3b83067848495a8ce2d92456Michal Krol struct tgsi_switch_record Switch; 293062aab96e015021f3b83067848495a8ce2d92456Michal Krol 294062aab96e015021f3b83067848495a8ce2d92456Michal Krol /* Current break type. */ 295062aab96e015021f3b83067848495a8ce2d92456Michal Krol enum tgsi_break_type BreakType; 296062aab96e015021f3b83067848495a8ce2d92456Michal Krol 29778f3cd1e08d68111a2db308c000b94cc580b3cadBrian /** Condition mask stack (for nested conditionals) */ 29878f3cd1e08d68111a2db308c000b94cc580b3cadBrian uint CondStack[TGSI_EXEC_MAX_COND_NESTING]; 299fc38c827716d333c92017348add1e80ea78af948Brian int CondStackTop; 30078f3cd1e08d68111a2db308c000b94cc580b3cadBrian 30178f3cd1e08d68111a2db308c000b94cc580b3cadBrian /** Loop mask stack (for nested loops) */ 30278f3cd1e08d68111a2db308c000b94cc580b3cadBrian uint LoopStack[TGSI_EXEC_MAX_LOOP_NESTING]; 30378f3cd1e08d68111a2db308c000b94cc580b3cadBrian int LoopStackTop; 30457d3770f35730bef17e5d93bd424a59eb6daec4cBrian 305848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell /** Loop label stack */ 306848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell uint LoopLabelStack[TGSI_EXEC_MAX_LOOP_NESTING]; 307848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell int LoopLabelStackTop; 308848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 30953a6a55c7c56c6811a9e627c8624c05e83d4e04bBrian /** Loop continue mask stack (see comments in tgsi_exec.c) */ 31053a6a55c7c56c6811a9e627c8624c05e83d4e04bBrian uint ContStack[TGSI_EXEC_MAX_LOOP_NESTING]; 31153a6a55c7c56c6811a9e627c8624c05e83d4e04bBrian int ContStackTop; 31253a6a55c7c56c6811a9e627c8624c05e83d4e04bBrian 313062aab96e015021f3b83067848495a8ce2d92456Michal Krol /** Switch case stack */ 314062aab96e015021f3b83067848495a8ce2d92456Michal Krol struct tgsi_switch_record SwitchStack[TGSI_EXEC_MAX_SWITCH_NESTING]; 315062aab96e015021f3b83067848495a8ce2d92456Michal Krol int SwitchStackTop; 316062aab96e015021f3b83067848495a8ce2d92456Michal Krol 317062aab96e015021f3b83067848495a8ce2d92456Michal Krol enum tgsi_break_type BreakStack[TGSI_EXEC_MAX_BREAK_STACK]; 318062aab96e015021f3b83067848495a8ce2d92456Michal Krol int BreakStackTop; 319062aab96e015021f3b83067848495a8ce2d92456Michal Krol 320aec1f8e4f8315df23dc51a0b5a5fad90a03be851Brian /** Function execution mask stack (for executing subroutine code) */ 321aec1f8e4f8315df23dc51a0b5a5fad90a03be851Brian uint FuncStack[TGSI_EXEC_MAX_CALL_NESTING]; 322aec1f8e4f8315df23dc51a0b5a5fad90a03be851Brian int FuncStackTop; 323aec1f8e4f8315df23dc51a0b5a5fad90a03be851Brian 324aec1f8e4f8315df23dc51a0b5a5fad90a03be851Brian /** Function call stack for saving/restoring the program counter */ 325d78a19612173eda51b93818a16a947201a785f3fBrian Paul struct tgsi_call_record CallStack[TGSI_EXEC_MAX_CALL_NESTING]; 3264ad80ad5cfdb9bc23eee15938645a334d227cd72Brian int CallStackTop; 3274ad80ad5cfdb9bc23eee15938645a334d227cd72Brian 32857d3770f35730bef17e5d93bd424a59eb6daec4cBrian struct tgsi_full_instruction *Instructions; 32957d3770f35730bef17e5d93bd424a59eb6daec4cBrian uint NumInstructions; 33057d3770f35730bef17e5d93bd424a59eb6daec4cBrian 33157d3770f35730bef17e5d93bd424a59eb6daec4cBrian struct tgsi_full_declaration *Declarations; 33257d3770f35730bef17e5d93bd424a59eb6daec4cBrian uint NumDeclarations; 3330d13ade0cdd38759936a74824efbd6ac8b563aedBrian 334a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez struct tgsi_declaration_sampler_view 335a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez SamplerViews[PIPE_MAX_SHADER_SAMPLER_VIEWS]; 336ff2a0faba068ac8bc891f4a6427ad3e241c5f09fZack Rusin 337ff2a0faba068ac8bc891f4a6427ad3e241c5f09fZack Rusin boolean UsedGeometryShader; 338ffe58739da9eee2e99682747cc8f26e412c87430michal}; 339ffe58739da9eee2e99682747cc8f26e412c87430michal 3406175653d0bceedba1f599d27111bab14f312f134Keith Whitwellstruct tgsi_exec_machine * 3416175653d0bceedba1f599d27111bab14f312f134Keith Whitwelltgsi_exec_machine_create( void ); 3426175653d0bceedba1f599d27111bab14f312f134Keith Whitwell 343ffe58739da9eee2e99682747cc8f26e412c87430michalvoid 3446175653d0bceedba1f599d27111bab14f312f134Keith Whitwelltgsi_exec_machine_destroy(struct tgsi_exec_machine *mach); 345c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell 346c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell 347c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwellvoid 348c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwelltgsi_exec_machine_bind_shader( 349ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_exec_machine *mach, 350058b978a5ae2a56e09fed6335b686c654444f4acmichal const struct tgsi_token *tokens, 351c04a7f8929d674971a472ffa4d3a31200c22aa5aKeith Whitwell uint numSamplers, 3520b9e96fae9493d5d58f046e01c983a3c4267090eBrian struct tgsi_sampler **samplers); 353ffe58739da9eee2e99682747cc8f26e412c87430michal 354355f8f7eedf9ddfac7edd2244f09c5a47fd8af86Brianuint 355ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_exec_machine_run( 356ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_exec_machine *mach ); 357ffe58739da9eee2e99682747cc8f26e412c87430michal 358eba2e044a04da99fea2214ba10ca5981f596702eBrian 359013bd4da1a4c112334c0b658f2506446df3666a6Brian Paulvoid 360013bd4da1a4c112334c0b658f2506446df3666a6Brian Paultgsi_exec_machine_free_data(struct tgsi_exec_machine *mach); 361013bd4da1a4c112334c0b658f2506446df3666a6Brian Paul 362013bd4da1a4c112334c0b658f2506446df3666a6Brian Paul 363013bd4da1a4c112334c0b658f2506446df3666a6Brian Paulboolean 364013bd4da1a4c112334c0b658f2506446df3666a6Brian Paultgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst); 365013bd4da1a4c112334c0b658f2506446df3666a6Brian Paul 366013bd4da1a4c112334c0b658f2506446df3666a6Brian Paul 36703c0ce4c61fd970509d605fe78166e828fc1df57Brian Paulstatic INLINE void 36803c0ce4c61fd970509d605fe78166e828fc1df57Brian Paultgsi_set_kill_mask(struct tgsi_exec_machine *mach, unsigned mask) 36903c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul{ 37003c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul mach->Temps[TGSI_EXEC_TEMP_KILMASK_I].xyzw[TGSI_EXEC_TEMP_KILMASK_C].u[0] = 37103c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul mask; 37203c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul} 37303c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul 37403c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul 37503c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul/** Set execution mask values prior to executing the shader */ 37603c0ce4c61fd970509d605fe78166e828fc1df57Brian Paulstatic INLINE void 37703c0ce4c61fd970509d605fe78166e828fc1df57Brian Paultgsi_set_exec_mask(struct tgsi_exec_machine *mach, 37803c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul boolean ch0, boolean ch1, boolean ch2, boolean ch3) 37903c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul{ 38003c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul int *mask = mach->Temps[TGSI_EXEC_MASK_I].xyzw[TGSI_EXEC_MASK_C].i; 38103c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul mask[0] = ch0 ? ~0 : 0; 38203c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul mask[1] = ch1 ? ~0 : 0; 38303c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul mask[2] = ch2 ? ~0 : 0; 38403c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul mask[3] = ch3 ? ~0 : 0; 38503c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul} 38603c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul 38703c0ce4c61fd970509d605fe78166e828fc1df57Brian Paul 388ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paulextern void 389ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paultgsi_exec_set_constant_buffers(struct tgsi_exec_machine *mach, 390ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paul unsigned num_bufs, 391ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paul const void **bufs, 392ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paul const unsigned *buf_sizes); 393ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paul 394ba2cc3b8e6ad161181b67fd2575c6bc768584d23Brian Paul 395a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieristatic INLINE int 396a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieritgsi_exec_get_shader_param(enum pipe_shader_cap param) 397a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri{ 398a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri switch(param) { 399a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_INSTRUCTIONS: 400a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS: 401a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS: 402a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS: 403a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return INT_MAX; 404a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: 405a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return TGSI_EXEC_MAX_NESTING; 406a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_INPUTS: 407a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return TGSI_EXEC_MAX_INPUT_ATTRIBS; 408a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONSTS: 409a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return TGSI_EXEC_MAX_CONST_BUFFER; 410a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: 411a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return PIPE_MAX_CONSTANT_BUFFERS; 412a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEMPS: 413a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return TGSI_EXEC_NUM_TEMPS; 414a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_ADDRS: 415a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return TGSI_EXEC_NUM_ADDRS; 416a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_PREDS: 417a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return TGSI_EXEC_NUM_PREDS; 418a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: 419a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 1; 42053b7ec91caa99c1ddd51262b4c311d93995726baMarek Olšák case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR: 42153b7ec91caa99c1ddd51262b4c311d93995726baMarek Olšák case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR: 42253b7ec91caa99c1ddd51262b4c311d93995726baMarek Olšák case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: 42353b7ec91caa99c1ddd51262b4c311d93995726baMarek Olšák case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: 42453b7ec91caa99c1ddd51262b4c311d93995726baMarek Olšák return 1; 4259aa089eac05ebefafb6610b4a7e209b2fd1e93f6Marek Olšák case PIPE_SHADER_CAP_SUBROUTINES: 4269aa089eac05ebefafb6610b4a7e209b2fd1e93f6Marek Olšák return 1; 42717b695e6e7dd730497fb60a8e161935b23fa0e9cBryan Cain case PIPE_SHADER_CAP_INTEGERS: 42817b695e6e7dd730497fb60a8e161935b23fa0e9cBryan Cain return 1; 429f5bfe54a34d9c8cd5de2b096d0e8486fe0d990a7Marek Olšák case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: 430f5bfe54a34d9c8cd5de2b096d0e8486fe0d990a7Marek Olšák return PIPE_MAX_SAMPLERS; 431a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri default: 432a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 433a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 434a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri} 435a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 436ffe58739da9eee2e99682747cc8f26e412c87430michal#if defined __cplusplus 43779d8e78442c08082083261d517cdf260e0bd309fBrian} /* extern "C" */ 43879d8e78442c08082083261d517cdf260e0bd309fBrian#endif 439ffe58739da9eee2e99682747cc8f26e412c87430michal 44079d8e78442c08082083261d517cdf260e0bd309fBrian#endif /* TGSI_EXEC_H */ 441