Mesa (master): r600/sfn: Lower tess-eval IO
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Nov 27 10:42:38 UTC 2020
Module: Mesa
Branch: master
Commit: eafa9bff805a2aa0cb956b31d57d09edc9a04dcc
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=eafa9bff805a2aa0cb956b31d57d09edc9a04dcc
Author: Gert Wollny <gert.wollny at collabora.com>
Date: Mon Nov 23 11:46:33 2020 +0100
r600/sfn: Lower tess-eval IO
Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7715>
---
src/gallium/drivers/r600/sfn/sfn_nir.cpp | 2 ++
src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.cpp | 10 ++++++++++
src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.h | 1 +
3 files changed, 13 insertions(+)
diff --git a/src/gallium/drivers/r600/sfn/sfn_nir.cpp b/src/gallium/drivers/r600/sfn/sfn_nir.cpp
index 4e8fd2bcab6..030a07a8db9 100644
--- a/src/gallium/drivers/r600/sfn/sfn_nir.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_nir.cpp
@@ -851,6 +851,8 @@ int r600_shader_from_nir(struct r600_context *rctx,
sel->nir->info.stage == MESA_SHADER_TESS_EVAL) {
NIR_PASS_V(sel->nir, nir_lower_io, nir_var_shader_in, r600_glsl_type_size,
nir_lower_io_lower_64bit_to_32);
+ NIR_PASS_V(sel->nir, nir_lower_io, nir_var_shader_out, r600_glsl_type_size,
+ nir_lower_io_lower_64bit_to_32);
}
if (sel->nir->info.stage == MESA_SHADER_TESS_CTRL ||
diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.cpp b/src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.cpp
index 9e5ce57b309..8ec3f289a79 100644
--- a/src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.cpp
@@ -60,12 +60,20 @@ bool TEvalShaderFromNir::scan_sysvalue_access(nir_instr *instr)
case nir_intrinsic_load_tcs_rel_patch_id_r600:
m_sv_values.set(es_rel_patch_id);
break;
+ case nir_intrinsic_store_output:
+ m_export_processor->scan_store_output(ir);
+ break;
default:
;
}
return true;
}
+void TEvalShaderFromNir::emit_shader_start()
+{
+ m_export_processor->emit_shader_start();
+}
+
bool TEvalShaderFromNir::do_allocate_reserved_registers()
{
if (m_sv_values.test(es_tess_coord)) {
@@ -120,6 +128,8 @@ bool TEvalShaderFromNir::emit_intrinsic_instruction_override(nir_intrinsic_instr
return load_preloaded_value(instr->dest, 0, m_primitive_id);
case nir_intrinsic_load_tcs_rel_patch_id_r600:
return load_preloaded_value(instr->dest, 0, m_rel_patch_id);
+ case nir_intrinsic_store_output:
+ return m_export_processor->store_output(instr);
default:
return false;
}
diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.h b/src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.h
index a33dbfa6f76..dedeccec2e1 100644
--- a/src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.h
+++ b/src/gallium/drivers/r600/sfn/sfn_shader_tess_eval.h
@@ -15,6 +15,7 @@ public:
bool scan_sysvalue_access(nir_instr *instr) override;
PValue primitive_id() override {return m_primitive_id;}
private:
+ void emit_shader_start() override;
bool do_allocate_reserved_registers() override;
bool emit_intrinsic_instruction_override(nir_intrinsic_instr* instr) override;
bool emit_load_tess_coord(nir_intrinsic_instr* instr);
More information about the mesa-commit
mailing list