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