r600/sfn: Handle loading sample_pos
Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5085>
This commit is contained in:
@@ -121,6 +121,7 @@ protected:
|
||||
es_rel_patch_id,
|
||||
es_sample_mask_in,
|
||||
es_sample_id,
|
||||
es_sample_pos,
|
||||
es_tess_factor_base,
|
||||
es_vertexid,
|
||||
es_tess_coord,
|
||||
|
||||
@@ -120,6 +120,9 @@ bool FragmentShaderFromNir::scan_sysvalue_access(nir_instr *instr)
|
||||
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;
|
||||
@@ -346,6 +349,9 @@ bool FragmentShaderFromNir::emit_intrinsic_instruction_override(nir_intrinsic_in
|
||||
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;
|
||||
}
|
||||
@@ -363,6 +369,34 @@ void FragmentShaderFromNir::load_front_face()
|
||||
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();
|
||||
|
||||
@@ -70,6 +70,7 @@ private:
|
||||
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user