Driver which do not support native integers should use a lowering pass to go from integers to floats. Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>tags/19.2-branchpoint
| @@ -2380,7 +2380,6 @@ const nir_shader_compiler_options v3d_nir_options = { | |||
| .lower_ldexp = true, | |||
| .lower_mul_high = true, | |||
| .lower_wpos_pntc = true, | |||
| .native_integers = true, | |||
| }; | |||
| /** | |||
| @@ -263,7 +263,7 @@ glsl_to_nir(struct gl_context *ctx, | |||
| nir_visitor::nir_visitor(gl_context *ctx, nir_shader *shader) | |||
| { | |||
| this->supports_ints = shader->options->native_integers; | |||
| this->supports_ints = true; | |||
| this->supports_std430 = ctx->Const.UseSTD430AsDefaultPacking; | |||
| this->shader = shader; | |||
| this->is_global = true; | |||
| @@ -2300,12 +2300,6 @@ typedef struct nir_shader_compiler_options { | |||
| bool lower_all_io_to_temps; | |||
| bool lower_all_io_to_elements; | |||
| /** | |||
| * Does the driver support real 32-bit integers? (Otherwise, integers | |||
| * are simulated by floats.) | |||
| */ | |||
| bool native_integers; | |||
| /* Indicates that the driver only has zero-based vertex id */ | |||
| bool vertex_id_zero_based; | |||
| @@ -45,7 +45,6 @@ static const nir_shader_compiler_options options = { | |||
| .lower_uadd_carry = true, | |||
| .lower_mul_high = true, | |||
| .fuse_ffma = true, | |||
| .native_integers = true, | |||
| .vertex_id_zero_based = true, | |||
| .lower_extract_byte = true, | |||
| .lower_extract_word = true, | |||
| @@ -72,7 +71,6 @@ static const nir_shader_compiler_options options_a6xx = { | |||
| .lower_uadd_carry = true, | |||
| .lower_mul_high = true, | |||
| .fuse_ffma = true, | |||
| .native_integers = true, | |||
| .vertex_id_zero_based = false, | |||
| .lower_extract_byte = true, | |||
| .lower_extract_word = true, | |||
| @@ -50,7 +50,6 @@ static const nir_shader_compiler_options vs_nir_options = { | |||
| .lower_ftrunc = true, | |||
| /* could be implemented by clamp */ | |||
| .lower_fsat = true, | |||
| .native_integers = true, | |||
| }; | |||
| static const nir_shader_compiler_options fs_nir_options = { | |||
| @@ -60,7 +59,6 @@ static const nir_shader_compiler_options fs_nir_options = { | |||
| .lower_flrp32 = true, | |||
| .lower_flrp64 = true, | |||
| .lower_fsign = true, | |||
| .native_integers = true, | |||
| }; | |||
| const void * | |||
| @@ -899,7 +899,6 @@ static const nir_shader_compiler_options nir_options = { | |||
| .lower_extract_byte = true, | |||
| .lower_extract_word = true, | |||
| .lower_all_io_to_temps = false, | |||
| .native_integers = true, | |||
| .lower_cs_local_index_from_id = true, | |||
| .use_interpolated_input_intrinsics = true, | |||
| .max_unroll_iterations = 32, | |||
| @@ -941,7 +941,6 @@ static const nir_shader_compiler_options nir_options = { | |||
| .lower_extract_byte = true, | |||
| .lower_extract_word = true, | |||
| .lower_all_io_to_temps = false, | |||
| .native_integers = true, | |||
| .vertex_id_zero_based = false, | |||
| .lower_base_vertex = false, | |||
| .lower_helper_invocation = false, | |||
| @@ -106,8 +106,6 @@ static const nir_shader_compiler_options midgard_nir_options = { | |||
| .vertex_id_zero_based = true, | |||
| .lower_extract_byte = true, | |||
| .lower_extract_word = true, | |||
| .native_integers = true | |||
| }; | |||
| #endif | |||
| @@ -498,7 +498,6 @@ static const struct nir_shader_compiler_options nir_options = { | |||
| .lower_extract_word = true, | |||
| .optimize_sample_mask_in = true, | |||
| .max_unroll_iterations = 32, | |||
| .native_integers = true, | |||
| }; | |||
| static const void * | |||
| @@ -2173,7 +2173,6 @@ static const nir_shader_compiler_options nir_options = { | |||
| .lower_fsqrt = true, | |||
| .lower_ldexp = true, | |||
| .lower_negate = true, | |||
| .native_integers = true, | |||
| .max_unroll_iterations = 32, | |||
| }; | |||
| @@ -46,7 +46,6 @@ | |||
| .lower_isign = true, \ | |||
| .lower_ldexp = true, \ | |||
| .lower_device_index_to_zero = true, \ | |||
| .native_integers = true, \ | |||
| .use_interpolated_input_intrinsics = true, \ | |||
| .vertex_id_zero_based = true, \ | |||
| .lower_base_vertex = true | |||
| @@ -362,18 +362,10 @@ ptn_lit(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src) | |||
| nir_ssa_def *pow = nir_fpow(b, nir_fmax(b, src0_y, nir_imm_float(b, 0.0)), | |||
| wclamp); | |||
| nir_ssa_def *z; | |||
| if (b->shader->options->native_integers) { | |||
| z = nir_bcsel(b, | |||
| nir_fge(b, nir_imm_float(b, 0.0), ptn_channel(b, src[0], X)), | |||
| nir_imm_float(b, 0.0), | |||
| pow); | |||
| } else { | |||
| z = nir_fcsel(b, | |||
| nir_sge(b, nir_imm_float(b, 0.0), ptn_channel(b, src[0], X)), | |||
| nir_imm_float(b, 0.0), | |||
| pow); | |||
| } | |||
| nir_ssa_def *z = nir_bcsel(b, | |||
| nir_fge(b, nir_imm_float(b, 0.0), ptn_channel(b, src[0], X)), | |||
| nir_imm_float(b, 0.0), | |||
| pow); | |||
| ptn_move_dest_masked(b, dest, z, WRITEMASK_Z); | |||
| } | |||
| @@ -402,11 +394,7 @@ ptn_scs(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src) | |||
| static void | |||
| ptn_slt(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src) | |||
| { | |||
| if (b->shader->options->native_integers) { | |||
| ptn_move_dest(b, dest, nir_b2f32(b, nir_flt(b, src[0], src[1]))); | |||
| } else { | |||
| ptn_move_dest(b, dest, nir_slt(b, src[0], src[1])); | |||
| } | |||
| ptn_move_dest(b, dest, nir_b2f32(b, nir_flt(b, src[0], src[1]))); | |||
| } | |||
| /** | |||
| @@ -415,11 +403,7 @@ ptn_slt(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src) | |||
| static void | |||
| ptn_sge(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src) | |||
| { | |||
| if (b->shader->options->native_integers) { | |||
| ptn_move_dest(b, dest, nir_b2f32(b, nir_fge(b, src[0], src[1]))); | |||
| } else { | |||
| ptn_move_dest(b, dest, nir_sge(b, src[0], src[1])); | |||
| } | |||
| ptn_move_dest(b, dest, nir_b2f32(b, nir_fge(b, src[0], src[1]))); | |||
| } | |||
| static void | |||
| @@ -464,15 +448,9 @@ ptn_dph(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src) | |||
| static void | |||
| ptn_cmp(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src) | |||
| { | |||
| if (b->shader->options->native_integers) { | |||
| ptn_move_dest(b, dest, nir_bcsel(b, | |||
| nir_flt(b, src[0], nir_imm_float(b, 0.0)), | |||
| src[1], src[2])); | |||
| } else { | |||
| ptn_move_dest(b, dest, nir_fcsel(b, | |||
| nir_slt(b, src[0], nir_imm_float(b, 0.0)), | |||
| src[1], src[2])); | |||
| } | |||
| ptn_move_dest(b, dest, nir_bcsel(b, | |||
| nir_flt(b, src[0], nir_imm_float(b, 0.0)), | |||
| src[1], src[2])); | |||
| } | |||
| static void | |||
| @@ -484,9 +462,7 @@ ptn_lrp(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src) | |||
| static void | |||
| ptn_kil(nir_builder *b, nir_ssa_def **src) | |||
| { | |||
| nir_ssa_def *cmp = b->shader->options->native_integers ? | |||
| nir_bany(b, nir_flt(b, src[0], nir_imm_float(b, 0.0))) : | |||
| nir_fany_nequal4(b, nir_slt(b, src[0], nir_imm_float(b, 0.0)), nir_imm_float(b, 0.0)); | |||
| nir_ssa_def *cmp = nir_bany(b, nir_flt(b, src[0], nir_imm_float(b, 0.0))); | |||
| nir_intrinsic_instr *discard = | |||
| nir_intrinsic_instr_create(b->shader, nir_intrinsic_discard_if); | |||