gallium: add CAPs for indirect addressing and lower it in st/mesa when needed
Required because ATI and NVIDIA DX9 GPUs do not support indirect addressing of temps, inputs, outputs, and consts (FS-only) or the hw support is so limited that we cannot use it. This should make r300g and possibly nvfx more feature complete. Signed-off-by: Marek Olšák <maraeo@gmail.com>
This commit is contained in:
@@ -483,7 +483,12 @@ enum pipe_shader_cap
|
|||||||
PIPE_SHADER_CAP_MAX_TEMPS,
|
PIPE_SHADER_CAP_MAX_TEMPS,
|
||||||
PIPE_SHADER_CAP_MAX_ADDRS,
|
PIPE_SHADER_CAP_MAX_ADDRS,
|
||||||
PIPE_SHADER_CAP_MAX_PREDS,
|
PIPE_SHADER_CAP_MAX_PREDS,
|
||||||
|
/* boolean caps */
|
||||||
PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED,
|
PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED,
|
||||||
|
PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR,
|
||||||
|
PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR,
|
||||||
|
PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR,
|
||||||
|
PIPE_SHADER_CAP_INDIRECT_CONST_ADDR,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -175,6 +175,15 @@ void st_init_limits(struct st_context *st)
|
|||||||
|
|
||||||
options->EmitNoCont = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED);
|
options->EmitNoCont = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED);
|
||||||
|
|
||||||
|
options->EmitNoIndirectInput = !screen->get_shader_param(screen, i,
|
||||||
|
PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR);
|
||||||
|
options->EmitNoIndirectOutput = !screen->get_shader_param(screen, i,
|
||||||
|
PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR);
|
||||||
|
options->EmitNoIndirectTemp = !screen->get_shader_param(screen, i,
|
||||||
|
PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR);
|
||||||
|
options->EmitNoIndirectUniform = !screen->get_shader_param(screen, i,
|
||||||
|
PIPE_SHADER_CAP_INDIRECT_CONST_ADDR);
|
||||||
|
|
||||||
if(options->EmitNoLoops)
|
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, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user