diff options
author | José Fonseca <[email protected]> | 2012-07-12 20:47:20 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2012-07-13 13:01:51 +0100 |
commit | 6dddd184803da5f67f69e7c243dbb596b4dd4b9d (patch) | |
tree | 30929d27e0fa88b8de2f079ac28fb0f7729e5744 /src/gallium/auxiliary/gallivm/lp_bld_limits.h | |
parent | 99728076ec1a8bd3feb0f23e41198d8d5e56d0c9 (diff) |
draw,gallivm: Fix draw_get_shader_param.
- Use LLVM limits when LLVM is being used, instead of TGSI limits
- Provide draw_get_shader_param_no_llvm for when llvm is never used (softpipe)
- Eliminate several of the hacks around draw shader caps in several drivers
Unfortunately the hack for PIPE_MAX_VERTEX_SAMPLERS is still necessary.
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/gallivm/lp_bld_limits.h')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_limits.h | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_limits.h b/src/gallium/auxiliary/gallivm/lp_bld_limits.h index 2dbb7cee29b..905070e7ae8 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_limits.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_limits.h @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright 2010 VMware, Inc. + * Copyright 2010-2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -29,6 +29,13 @@ #ifndef LP_BLD_LIMITS_H_ #define LP_BLD_LIMITS_H_ + +#include <limits.h> + +#include "pipe/p_state.h" +#include "pipe/p_defines.h" + + /* * TGSI translation limits. * @@ -57,4 +64,53 @@ */ #define LP_MAX_TGSI_LOOP_ITERATIONS 65535 + +/** + * Some of these limits are actually infinite (i.e., only limited by available + * memory), however advertising INT_MAX would cause some test problems to + * actually try to allocate the maximum and run out of memory and crash. So + * stick with something reasonable here. + */ +static INLINE int +gallivm_get_shader_param(enum pipe_shader_cap param) +{ + switch(param) { + case PIPE_SHADER_CAP_MAX_INSTRUCTIONS: + case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS: + case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS: + case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS: + return 1 * 1024 * 1024; + case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: + return LP_MAX_TGSI_NESTING; + case PIPE_SHADER_CAP_MAX_INPUTS: + return PIPE_MAX_SHADER_INPUTS; + case PIPE_SHADER_CAP_MAX_CONSTS: + return 16 * 2024; + case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: + return PIPE_MAX_CONSTANT_BUFFERS; + case PIPE_SHADER_CAP_MAX_TEMPS: + return LP_MAX_TGSI_TEMPS; + case PIPE_SHADER_CAP_MAX_ADDRS: + return LP_MAX_TGSI_ADDRS; + case PIPE_SHADER_CAP_MAX_PREDS: + return LP_MAX_TGSI_PREDS; + case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: + return 1; + case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR: + case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR: + case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: + case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: + return 1; + case PIPE_SHADER_CAP_SUBROUTINES: + return 1; + case PIPE_SHADER_CAP_INTEGERS: + return 1; + case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: + return PIPE_MAX_SAMPLERS; + default: + return 0; + } +} + + #endif /* LP_BLD_LIMITS_H_ */ |