|
|
@@ -67,7 +67,7 @@ void st_init_limits(struct st_context *st) |
|
|
|
{ |
|
|
|
struct pipe_screen *screen = st->pipe->screen; |
|
|
|
struct gl_constants *c = &st->ctx->Const; |
|
|
|
unsigned i; |
|
|
|
gl_shader_type sh; |
|
|
|
|
|
|
|
c->MaxTextureLevels |
|
|
|
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS), |
|
|
@@ -137,11 +137,12 @@ void st_init_limits(struct st_context *st) |
|
|
|
/* Quads always follow GL provoking rules. */ |
|
|
|
c->QuadsFollowProvokingVertexConvention = GL_FALSE; |
|
|
|
|
|
|
|
for(i = 0; i < MESA_SHADER_TYPES; ++i) { |
|
|
|
struct gl_shader_compiler_options *options = &st->ctx->ShaderCompilerOptions[i]; |
|
|
|
for (sh = 0; sh < MESA_SHADER_TYPES; ++sh) { |
|
|
|
struct gl_shader_compiler_options *options = |
|
|
|
&st->ctx->ShaderCompilerOptions[sh]; |
|
|
|
struct gl_program_constants *pc; |
|
|
|
switch(i) |
|
|
|
{ |
|
|
|
|
|
|
|
switch (sh) { |
|
|
|
case PIPE_SHADER_FRAGMENT: |
|
|
|
pc = &c->FragmentProgram; |
|
|
|
break; |
|
|
@@ -156,37 +157,37 @@ void st_init_limits(struct st_context *st) |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
pc->MaxNativeInstructions = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS); |
|
|
|
pc->MaxNativeAluInstructions = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS); |
|
|
|
pc->MaxNativeTexInstructions = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS); |
|
|
|
pc->MaxNativeTexIndirections = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS); |
|
|
|
pc->MaxNativeAttribs = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INPUTS); |
|
|
|
pc->MaxNativeTemps = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_TEMPS); |
|
|
|
pc->MaxNativeAddressRegs = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_ADDRS); |
|
|
|
pc->MaxNativeParameters = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_CONSTS); |
|
|
|
pc->MaxNativeInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS); |
|
|
|
pc->MaxNativeAluInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS); |
|
|
|
pc->MaxNativeTexInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS); |
|
|
|
pc->MaxNativeTexIndirections = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS); |
|
|
|
pc->MaxNativeAttribs = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INPUTS); |
|
|
|
pc->MaxNativeTemps = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEMPS); |
|
|
|
pc->MaxNativeAddressRegs = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ADDRS); |
|
|
|
pc->MaxNativeParameters = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONSTS); |
|
|
|
pc->MaxUniformComponents = 4 * MIN2(pc->MaxNativeParameters, MAX_UNIFORMS); |
|
|
|
|
|
|
|
options->EmitNoNoise = TRUE; |
|
|
|
|
|
|
|
/* TODO: make these more fine-grained if anyone needs it */ |
|
|
|
options->EmitNoIfs = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH); |
|
|
|
options->EmitNoLoops = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH); |
|
|
|
options->EmitNoFunctions = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_SUBROUTINES); |
|
|
|
options->EmitNoMainReturn = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_SUBROUTINES); |
|
|
|
options->EmitNoIfs = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH); |
|
|
|
options->EmitNoLoops = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH); |
|
|
|
options->EmitNoFunctions = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES); |
|
|
|
options->EmitNoMainReturn = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES); |
|
|
|
|
|
|
|
options->EmitNoCont = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED); |
|
|
|
options->EmitNoCont = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED); |
|
|
|
|
|
|
|
options->EmitNoIndirectInput = !screen->get_shader_param(screen, i, |
|
|
|
options->EmitNoIndirectInput = !screen->get_shader_param(screen, sh, |
|
|
|
PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR); |
|
|
|
options->EmitNoIndirectOutput = !screen->get_shader_param(screen, i, |
|
|
|
options->EmitNoIndirectOutput = !screen->get_shader_param(screen, sh, |
|
|
|
PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR); |
|
|
|
options->EmitNoIndirectTemp = !screen->get_shader_param(screen, i, |
|
|
|
options->EmitNoIndirectTemp = !screen->get_shader_param(screen, sh, |
|
|
|
PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR); |
|
|
|
options->EmitNoIndirectUniform = !screen->get_shader_param(screen, i, |
|
|
|
options->EmitNoIndirectUniform = !screen->get_shader_param(screen, sh, |
|
|
|
PIPE_SHADER_CAP_INDIRECT_CONST_ADDR); |
|
|
|
|
|
|
|
if(options->EmitNoLoops) |
|
|
|
options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536); |
|
|
|
options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536); |
|
|
|
} |
|
|
|
|
|
|
|
/* PIPE_CAP_MAX_FS_INPUTS specifies the number of COLORn + GENERICn inputs |