case nir_intrinsic_load_sample_mask_in:
m_sv_values.set(es_sample_mask_in);
break;
+ case nir_intrinsic_load_sample_pos:
+ m_sv_values.set(es_sample_pos);
+ /* fallthrough */
case nir_intrinsic_load_sample_id:
m_sv_values.set(es_sample_id);
break;
return emit_interp_deref_at_offset(instr);
case nir_intrinsic_interp_deref_at_centroid:
return emit_interp_deref_at_centroid(instr);
+ case nir_intrinsic_load_sample_pos:
+ return emit_load_sample_pos(instr);
+
default:
return false;
}
emit_instruction(ir);
}
+bool FragmentShaderFromNir::emit_load_sample_pos(nir_intrinsic_instr* instr)
+{
+ GPRVector dest = vec_from_nir(instr->dest, nir_dest_num_components(instr->dest));
+ auto fetch = new FetchInstruction(vc_fetch,
+ no_index_offset,
+ fmt_32_32_32_32_float,
+ vtx_nf_scaled,
+ vtx_es_none,
+ m_sample_id_reg,
+ dest,
+ 0,
+ false,
+ 0xf,
+ R600_BUFFER_INFO_CONST_BUFFER,
+ 0,
+ bim_none,
+ false,
+ false,
+ 0,
+ 0,
+ 0,
+ PValue(),
+ {0,1,2,3});
+ fetch->set_flag(vtx_srf_mode);
+ emit_instruction(fetch);
+ return true;
+}
+
bool FragmentShaderFromNir::emit_interp_deref_at_sample(nir_intrinsic_instr* instr)
{
GPRVector slope = get_temp_vec4();
bool emit_load_front_face(nir_intrinsic_instr* instr);
bool emit_load_sample_mask_in(nir_intrinsic_instr* instr);
+ bool emit_load_sample_pos(nir_intrinsic_instr* instr);
bool emit_load_sample_id(nir_intrinsic_instr* instr);
bool emit_interp_deref_at_sample(nir_intrinsic_instr* instr);
bool emit_interp_deref_at_offset(nir_intrinsic_instr* instr);