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