mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
nir: Add native_integers to nir_shader_compiler_options.
glsl_to_nir, tgsi_to_nir, and prog_to_nir all want to know whether the driver supports native integers. Presumably other passes may as well. Adding this to nir_shader_compiler_options is an easy way to provide that information, as it's accessible via nir_shader::options. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
a55da73be4
commit
b200cbb0a4
5 changed files with 16 additions and 9 deletions
|
|
@ -43,7 +43,7 @@ namespace {
|
|||
class nir_visitor : public ir_visitor
|
||||
{
|
||||
public:
|
||||
nir_visitor(nir_shader *shader, bool supports_ints);
|
||||
nir_visitor(nir_shader *shader);
|
||||
~nir_visitor();
|
||||
|
||||
virtual void visit(ir_variable *);
|
||||
|
|
@ -125,12 +125,11 @@ private:
|
|||
}; /* end of anonymous namespace */
|
||||
|
||||
nir_shader *
|
||||
glsl_to_nir(exec_list *ir, bool native_integers,
|
||||
const nir_shader_compiler_options *options)
|
||||
glsl_to_nir(exec_list *ir, const nir_shader_compiler_options *options)
|
||||
{
|
||||
nir_shader *shader = nir_shader_create(NULL, options);
|
||||
|
||||
nir_visitor v1(shader, native_integers);
|
||||
nir_visitor v1(shader);
|
||||
nir_function_visitor v2(&v1);
|
||||
v2.run(ir);
|
||||
visit_exec_list(ir, &v1);
|
||||
|
|
@ -138,9 +137,9 @@ glsl_to_nir(exec_list *ir, bool native_integers,
|
|||
return shader;
|
||||
}
|
||||
|
||||
nir_visitor::nir_visitor(nir_shader *shader, bool supports_ints)
|
||||
nir_visitor::nir_visitor(nir_shader *shader)
|
||||
{
|
||||
this->supports_ints = supports_ints;
|
||||
this->supports_ints = shader->options->native_integers;
|
||||
this->shader = shader;
|
||||
this->is_global = true;
|
||||
this->var_table = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
nir_shader *glsl_to_nir(exec_list *ir, bool native_integers,
|
||||
nir_shader *glsl_to_nir(exec_list *ir,
|
||||
const nir_shader_compiler_options *options);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -1370,6 +1370,12 @@ typedef struct nir_shader_compiler_options {
|
|||
bool lower_fsqrt;
|
||||
/** lowers fneg and ineg to fsub and isub. */
|
||||
bool lower_negate;
|
||||
|
||||
/**
|
||||
* Does the driver support real 32-bit integers? (Otherwise, integers
|
||||
* are simulated by floats.)
|
||||
*/
|
||||
bool native_integers;
|
||||
} nir_shader_compiler_options;
|
||||
|
||||
typedef struct nir_shader {
|
||||
|
|
|
|||
|
|
@ -551,7 +551,9 @@ brw_initialize_context_constants(struct brw_context *brw)
|
|||
ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 128;
|
||||
}
|
||||
|
||||
static const nir_shader_compiler_options nir_options = {};
|
||||
static const nir_shader_compiler_options nir_options = {
|
||||
.native_integers = true,
|
||||
};
|
||||
|
||||
/* We want the GLSL compiler to emit code that uses condition codes */
|
||||
for (int i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ fs_visitor::emit_nir_code()
|
|||
|
||||
/* first, lower the GLSL IR shader to NIR */
|
||||
lower_output_reads(shader->base.ir);
|
||||
nir_shader *nir = glsl_to_nir(shader->base.ir, true, options);
|
||||
nir_shader *nir = glsl_to_nir(shader->base.ir, options);
|
||||
nir_validate_shader(nir);
|
||||
|
||||
nir_lower_global_vars_to_local(nir);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue