diff options
author | José Fonseca <[email protected]> | 2010-05-12 14:09:14 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2010-05-12 14:11:28 +0100 |
commit | 6ac93e469a7ffa2ddc23de029221d536f45b7143 (patch) | |
tree | 907d1b563d776d8e29e943ee733d108f70373c6b | |
parent | bfc702d1e7470d611600dad18e0f829d08281eed (diff) |
mesa/st: Expose pipe driver's shader limits.
-rw-r--r-- | src/mesa/state_tracker/st_extensions.c | 108 |
1 files changed, 19 insertions, 89 deletions
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 5b2e49c3b37..0cd80fa59f7 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -142,95 +142,25 @@ void st_init_limits(struct st_context *st) /* Quads always follow GL provoking rules. */ c->QuadsFollowProvokingVertexConvention = GL_FALSE; - if (screen->get_param(screen, PIPE_CAP_GLSL)) { - /* - * In the lack of more fine grained capabilities, if the pipe driver supports - * GLSL then assume native limits match Mesa software limits. - */ - - pc = &c->FragmentProgram; - pc->MaxNativeInstructions = pc->MaxInstructions; - pc->MaxNativeAluInstructions = pc->MaxAluInstructions; - pc->MaxNativeTexInstructions = pc->MaxTexInstructions; - pc->MaxNativeTexIndirections = pc->MaxTexIndirections; - pc->MaxNativeAttribs = pc->MaxAttribs; - pc->MaxNativeTemps = pc->MaxTemps; - pc->MaxNativeAddressRegs = pc->MaxAddressRegs; - pc->MaxNativeParameters = pc->MaxParameters; - - pc = &c->VertexProgram; - pc->MaxNativeInstructions = pc->MaxInstructions; - pc->MaxNativeAluInstructions = pc->MaxAluInstructions; - pc->MaxNativeTexInstructions = pc->MaxTexInstructions; - pc->MaxNativeTexIndirections = pc->MaxTexIndirections; - pc->MaxNativeAttribs = pc->MaxAttribs; - pc->MaxNativeTemps = pc->MaxTemps; - pc->MaxNativeAddressRegs = pc->MaxAddressRegs; - pc->MaxNativeParameters = pc->MaxParameters; - } else if (screen->get_param(screen, PIPE_CAP_SM3)) { - /* - * Assume the hardware meets the minimum requirements - * for Shader Model 3. - * - * See also: - * - http://msdn.microsoft.com/en-us/library/bb172920(VS.85).aspx - * - http://msdn.microsoft.com/en-us/library/bb172963(VS.85).aspx - */ - - pc = &c->FragmentProgram; - pc->MaxNativeInstructions = 512; /* D3DMIN30SHADERINSTRUCTIONS */ - pc->MaxNativeAluInstructions = pc->MaxNativeInstructions; - pc->MaxNativeTexInstructions = pc->MaxNativeInstructions; - pc->MaxNativeTexIndirections = pc->MaxNativeTexInstructions; - pc->MaxNativeAttribs = 10; - pc->MaxNativeTemps = 32; - pc->MaxNativeAddressRegs = 1; /* aL */ - pc->MaxNativeParameters = 224; - - pc = &c->VertexProgram; - pc->MaxNativeInstructions = 512; /* D3DMIN30SHADERINSTRUCTIONS */ - pc->MaxNativeAluInstructions = pc->MaxNativeInstructions; - pc->MaxNativeTexInstructions = pc->MaxNativeInstructions; - pc->MaxNativeTexIndirections = pc->MaxNativeTexInstructions; - pc->MaxNativeAttribs = 16; - pc->MaxNativeTemps = 32; - pc->MaxNativeAddressRegs = 2; /* a0 and aL */ - pc->MaxNativeParameters = 256; - } else { - /* - * Assume the hardware meets the minimum requirements - * for Shader Model 2. - * - * See also: - * - http://msdn.microsoft.com/en-us/library/bb172918(VS.85).aspx - * - http://msdn.microsoft.com/en-us/library/bb172961(VS.85).aspx - */ - - pc = &c->FragmentProgram; - pc->MaxNativeInstructions = 96; /* D3DPS20_MIN_NUMINSTRUCTIONSLOTS */ - pc->MaxNativeAluInstructions = 64; - pc->MaxNativeTexInstructions = 32; - pc->MaxNativeTexIndirections = pc->MaxNativeTexInstructions; - pc->MaxNativeAttribs = 10; /* 2 color + 8 texture coord */ - pc->MaxNativeTemps = 12; /* D3DPS20_MIN_NUMTEMPS */ - pc->MaxNativeAddressRegs = 0; - pc->MaxNativeParameters = 16; - - pc = &c->VertexProgram; - pc->MaxNativeInstructions = 256; - pc->MaxNativeAluInstructions = 256; - pc->MaxNativeTexInstructions = 0; - pc->MaxNativeTexIndirections = 0; - pc->MaxNativeAttribs = 16; - pc->MaxNativeTemps = 12; /* D3DVS20_MIN_NUMTEMPS */ - pc->MaxNativeAddressRegs = 2; /* a0 and aL */ - pc->MaxNativeParameters = 256; - } - - if (!screen->get_param(screen, PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS)) { - c->VertexProgram.MaxNativeTexInstructions = 0; - c->VertexProgram.MaxNativeTexIndirections = 0; - } + pc = &c->FragmentProgram; + pc->MaxNativeInstructions = screen->get_param(screen, PIPE_CAP_MAX_FS_INSTRUCTIONS); + pc->MaxNativeAluInstructions = screen->get_param(screen, PIPE_CAP_MAX_FS_ALU_INSTRUCTIONS); + pc->MaxNativeTexInstructions = screen->get_param(screen, PIPE_CAP_MAX_FS_TEX_INSTRUCTIONS); + pc->MaxNativeTexIndirections = screen->get_param(screen, PIPE_CAP_MAX_FS_TEX_INDIRECTIONS); + pc->MaxNativeAttribs = screen->get_param(screen, PIPE_CAP_MAX_FS_INPUTS); + pc->MaxNativeTemps = screen->get_param(screen, PIPE_CAP_MAX_FS_TEMPS); + pc->MaxNativeAddressRegs = screen->get_param(screen, PIPE_CAP_MAX_FS_ADDRS); + pc->MaxNativeParameters = screen->get_param(screen, PIPE_CAP_MAX_FS_CONSTS); + + pc = &c->VertexProgram; + pc->MaxNativeInstructions = screen->get_param(screen, PIPE_CAP_MAX_VS_INSTRUCTIONS); + pc->MaxNativeAluInstructions = screen->get_param(screen, PIPE_CAP_MAX_VS_ALU_INSTRUCTIONS); + pc->MaxNativeTexInstructions = screen->get_param(screen, PIPE_CAP_MAX_VS_TEX_INSTRUCTIONS); + pc->MaxNativeTexIndirections = screen->get_param(screen, PIPE_CAP_MAX_VS_TEX_INDIRECTIONS); + pc->MaxNativeAttribs = screen->get_param(screen, PIPE_CAP_MAX_VS_INPUTS); + pc->MaxNativeTemps = screen->get_param(screen, PIPE_CAP_MAX_VS_TEMPS); + pc->MaxNativeAddressRegs = screen->get_param(screen, PIPE_CAP_MAX_VS_ADDRS); + pc->MaxNativeParameters = screen->get_param(screen, PIPE_CAP_MAX_VS_CONSTS); } |