Path: blob/21.2-virgl/src/gallium/auxiliary/gallivm/lp_bld_limits.h
4565 views
/**************************************************************************1*2* Copyright 2010-2012 VMware, Inc.3* All Rights Reserved.4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the7* "Software"), to deal in the Software without restriction, including8* without limitation the rights to use, copy, modify, merge, publish,9* distribute, sub license, and/or sell copies of the Software, and to10* permit persons to whom the Software is furnished to do so, subject to11* the following conditions:12*13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,15* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL16* THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,17* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR18* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE19* USE OR OTHER DEALINGS IN THE SOFTWARE.20*21* The above copyright notice and this permission notice (including the22* next paragraph) shall be included in all copies or substantial portions23* of the Software.24*25**************************************************************************/262728#ifndef LP_BLD_LIMITS_H_29#define LP_BLD_LIMITS_H_303132#include <limits.h>3334#include "pipe/p_state.h"35#include "pipe/p_defines.h"363738/*39* TGSI translation limits.40*41* Some are slightly above SM 3.0 requirements to give some wiggle room to42* the gallium frontends.43*/4445#define LP_MAX_TGSI_TEMPS 40964647#define LP_MAX_TGSI_ADDRS 164849#define LP_MAX_TGSI_IMMEDIATES 40965051#define LP_MAX_TGSI_CONSTS 40965253#define LP_MAX_TGSI_CONST_BUFFERS 165455#define LP_MAX_TGSI_CONST_BUFFER_SIZE (LP_MAX_TGSI_CONSTS * sizeof(float[4]))5657#define LP_MAX_TGSI_SHADER_BUFFERS 165859#define LP_MAX_TGSI_SHADER_BUFFER_SIZE (1 << 27)6061#define LP_MAX_TGSI_SHADER_IMAGES 166263/*64* For quick access we cache registers in statically65* allocated arrays. Here we define the maximum size66* for those arrays.67*/68#define LP_MAX_INLINED_TEMPS 2566970#define LP_MAX_INLINED_IMMEDIATES 2567172/**73* Maximum control flow nesting74*75* SM4.0 requires 64 (per subroutine actually, subroutine nesting itself is 32)76* SM3.0 requires 24 (most likely per subroutine too)77* add 2 more (some translation could add one more)78*/79#define LP_MAX_TGSI_NESTING 668081/**82* Maximum iterations before loop termination83* Shared between every loop in a TGSI shader84*/85#define LP_MAX_TGSI_LOOP_ITERATIONS 65535868788/**89* Some of these limits are actually infinite (i.e., only limited by available90* memory), however advertising INT_MAX would cause some test problems to91* actually try to allocate the maximum and run out of memory and crash. So92* stick with something reasonable here.93*/94static inline int95gallivm_get_shader_param(enum pipe_shader_cap param)96{97switch(param) {98case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:99case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:100case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:101case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:102return 1 * 1024 * 1024;103case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:104return LP_MAX_TGSI_NESTING;105case PIPE_SHADER_CAP_MAX_INPUTS:106return 32;107case PIPE_SHADER_CAP_MAX_OUTPUTS:108return 32;109case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE:110return LP_MAX_TGSI_CONST_BUFFER_SIZE;111case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:112return LP_MAX_TGSI_CONST_BUFFERS;113case PIPE_SHADER_CAP_MAX_TEMPS:114return LP_MAX_TGSI_TEMPS;115case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:116return 1;117case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:118case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:119case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:120case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:121return 1;122case PIPE_SHADER_CAP_SUBROUTINES:123return 1;124case PIPE_SHADER_CAP_INTEGERS:125return 1;126case PIPE_SHADER_CAP_INT64_ATOMICS:127case PIPE_SHADER_CAP_FP16:128case PIPE_SHADER_CAP_FP16_DERIVATIVES:129case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:130return 0;131case PIPE_SHADER_CAP_INT16:132case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:133return 1;134case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:135return PIPE_MAX_SAMPLERS;136case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS:137return PIPE_MAX_SHADER_SAMPLER_VIEWS;138case PIPE_SHADER_CAP_PREFERRED_IR:139return PIPE_SHADER_IR_TGSI;140case PIPE_SHADER_CAP_SUPPORTED_IRS:141return (1 << PIPE_SHADER_IR_TGSI) | (1 << PIPE_SHADER_IR_NIR);142case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:143case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:144return 1;145case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:146case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:147case PIPE_SHADER_CAP_TGSI_LDEXP_SUPPORTED:148case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:149case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD:150case PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS:151case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS:152case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS:153return 0;154case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:155return 32;156case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS:157return LP_MAX_TGSI_SHADER_BUFFERS;158case PIPE_SHADER_CAP_MAX_SHADER_IMAGES:159return LP_MAX_TGSI_SHADER_IMAGES;160}161/* if we get here, we missed a shader cap above (and should have seen162* a compiler warning.)163*/164return 0;165}166167168#endif /* LP_BLD_LIMITS_H_ */169170171