static int llvmpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param) { switch(shader) { case PIPE_SHADER_FRAGMENT: switch (param) { default: return gallivm_get_shader_param(param); } case PIPE_SHADER_VERTEX: case PIPE_SHADER_GEOMETRY: switch (param) { case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: /* At this time, the draw module and llvmpipe driver only * support vertex shader texture lookups when LLVM is enabled in * the draw module. */ if (debug_get_bool_option("DRAW_USE_LLVM", TRUE)) return PIPE_MAX_SAMPLERS; else return 0; case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: if (debug_get_bool_option("DRAW_USE_LLVM", TRUE)) return PIPE_MAX_SHADER_SAMPLER_VIEWS; else return 0; default: return draw_get_shader_param(shader, param); } default: return 0; } }
static int swr_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param) { if (shader == PIPE_SHADER_VERTEX || shader == PIPE_SHADER_FRAGMENT) return gallivm_get_shader_param(param); // Todo: geometry, tesselation, compute return 0; }
/** * XXX: Results for PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS because there are two * different ways of setting textures, and drivers typically only support one. */ int draw_get_shader_param(unsigned shader, enum pipe_shader_cap param) { #ifdef HAVE_LLVM if (draw_get_option_use_llvm()) { switch(shader) { case PIPE_SHADER_VERTEX: case PIPE_SHADER_GEOMETRY: return gallivm_get_shader_param(param); default: return 0; } } #endif return draw_get_shader_param_no_llvm(shader, param); }