16c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca/************************************************************************** 26c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * 36dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca * Copyright 2010-2012 VMware, Inc. 46c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * All Rights Reserved. 56c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * 66c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 76c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * copy of this software and associated documentation files (the 86c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * "Software"), to deal in the Software without restriction, including 96c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 106c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 116c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * permit persons to whom the Software is furnished to do so, subject to 126c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * the following conditions: 136c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * 146c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 156c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 166c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 176c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 186c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 196c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 206c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * USE OR OTHER DEALINGS IN THE SOFTWARE. 216c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * 226c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * The above copyright notice and this permission notice (including the 236c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * next paragraph) shall be included in all copies or substantial portions 246c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * of the Software. 256c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * 266c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca **************************************************************************/ 276c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 286c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 296c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca#ifndef LP_BLD_LIMITS_H_ 306c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca#define LP_BLD_LIMITS_H_ 316c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 326dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca 336dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca#include <limits.h> 346dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca 356dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca#include "pipe/p_state.h" 366dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca#include "pipe/p_defines.h" 376dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca 386dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca 396c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca/* 406c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * TGSI translation limits. 416c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * 426c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * Some are slightly above SM 3.0 requirements to give some wiggle room to 436c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * the state trackers. 446c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca */ 456c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 466c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca#define LP_MAX_TGSI_TEMPS 256 476c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 486c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca#define LP_MAX_TGSI_ADDRS 16 496c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 506c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca#define LP_MAX_TGSI_IMMEDIATES 256 516c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 52ff6c78f44f2f741f4825b07dbc15b3a951fe9b2cJosé Fonseca#define LP_MAX_TGSI_PREDS 16 53ff6c78f44f2f741f4825b07dbc15b3a951fe9b2cJosé Fonseca 546c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca/** 556c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * Maximum control flow nesting 566c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * 576c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca * SM3.0 requires 24 586c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca */ 596c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca#define LP_MAX_TGSI_NESTING 32 606c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 615db9d76a6a498c029133a8c2544c4c7c25eebf80James Benton/** 625db9d76a6a498c029133a8c2544c4c7c25eebf80James Benton * Maximum iterations before loop termination 635db9d76a6a498c029133a8c2544c4c7c25eebf80James Benton * Shared between every loop in a TGSI shader 645db9d76a6a498c029133a8c2544c4c7c25eebf80James Benton */ 655db9d76a6a498c029133a8c2544c4c7c25eebf80James Benton#define LP_MAX_TGSI_LOOP_ITERATIONS 65535 666c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca 676dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca 686dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca/** 696dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca * Some of these limits are actually infinite (i.e., only limited by available 706dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca * memory), however advertising INT_MAX would cause some test problems to 716dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca * actually try to allocate the maximum and run out of memory and crash. So 726dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca * stick with something reasonable here. 736dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca */ 746dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonsecastatic INLINE int 756dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonsecagallivm_get_shader_param(enum pipe_shader_cap param) 766dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca{ 776dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca switch(param) { 786dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_INSTRUCTIONS: 796dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS: 806dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS: 816dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS: 826dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return 1 * 1024 * 1024; 836dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: 846dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return LP_MAX_TGSI_NESTING; 856dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_INPUTS: 866dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return PIPE_MAX_SHADER_INPUTS; 876dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_CONSTS: 886dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return 16 * 2024; 896dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: 906dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return PIPE_MAX_CONSTANT_BUFFERS; 916dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_TEMPS: 926dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return LP_MAX_TGSI_TEMPS; 936dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_ADDRS: 946dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return LP_MAX_TGSI_ADDRS; 956dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_PREDS: 966dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return LP_MAX_TGSI_PREDS; 976dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: 986dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return 1; 996dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR: 1006dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR: 1016dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: 1026dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: 1036dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return 1; 1046dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_SUBROUTINES: 1056dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return 1; 1066dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_INTEGERS: 1076dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return 1; 1086dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: 1096dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return PIPE_MAX_SAMPLERS; 1106dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca default: 1116dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca return 0; 1126dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca } 1136dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca} 1146dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca 1156dddd184803da5f67f69e7c243dbb596b4dd4b9dJosé Fonseca 1166c8c88f02f0dc9cf39ce51d068525a94fccd5dc7José Fonseca#endif /* LP_BLD_LIMITS_H_ */ 117