From: Marek Olšák Date: Thu, 2 May 2013 00:41:11 +0000 (+0200) Subject: st/mesa: consolidate setting MaxTextureImageUnits X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b6d3373442503d95fbba4d376dd721f5b7a8ea61;p=mesa.git st/mesa: consolidate setting MaxTextureImageUnits Reviewed-by: Brian Paul --- diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index d32f50a416c..0aac086cf43 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -89,25 +89,10 @@ void st_init_limits(struct st_context *st) c->MaxArrayTextureLayers = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS); - c->FragmentProgram.MaxTextureImageUnits - = _min(screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, - PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS), - MAX_TEXTURE_IMAGE_UNITS); - - c->VertexProgram.MaxTextureImageUnits - = _min(screen->get_shader_param(screen, PIPE_SHADER_VERTEX, - PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS), - MAX_TEXTURE_IMAGE_UNITS); - c->MaxCombinedTextureImageUnits = _min(screen->get_param(screen, PIPE_CAP_MAX_COMBINED_SAMPLERS), MAX_COMBINED_TEXTURE_IMAGE_UNITS); - c->MaxTextureCoordUnits - = _min(c->FragmentProgram.MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS); - - c->MaxTextureUnits = _min(c->FragmentProgram.MaxTextureImageUnits, c->MaxTextureCoordUnits); - /* Define max viewport size and max renderbuffer size in terms of * max texture size (note: max tex RECT size = max tex 2D size). * If this isn't true for some hardware we'll need new PIPE_CAP_ queries. @@ -188,6 +173,11 @@ void st_init_limits(struct st_context *st) continue; } + pc->MaxTextureImageUnits = + _min(screen->get_shader_param(screen, sh, + PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS), + MAX_TEXTURE_IMAGE_UNITS); + pc->MaxInstructions = pc->MaxNativeInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS); pc->MaxAluInstructions = pc->MaxNativeAluInstructions = @@ -253,6 +243,12 @@ void st_init_limits(struct st_context *st) options->LowerClipDistance = true; } + /* This depends on program constants. */ + c->MaxTextureCoordUnits + = _min(c->FragmentProgram.MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS); + + c->MaxTextureUnits = _min(c->FragmentProgram.MaxTextureImageUnits, c->MaxTextureCoordUnits); + c->VertexProgram.MaxAttribs = MIN2(c->VertexProgram.MaxAttribs, 16); /* PIPE_SHADER_CAP_MAX_INPUTS for the FS specifies the maximum number