mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
r600/sfn: Add lowering of tess inner and outer default intrinsics
These are UBO loads and so we do the lowering in nir. Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
This commit is contained in:
parent
642bed9eba
commit
04f15cc710
3 changed files with 46 additions and 1 deletions
|
|
@ -22,6 +22,7 @@
|
||||||
#include "sfn_nir_lower_tex.h"
|
#include "sfn_nir_lower_tex.h"
|
||||||
#include "sfn_optimizer.h"
|
#include "sfn_optimizer.h"
|
||||||
#include "sfn_ra.h"
|
#include "sfn_ra.h"
|
||||||
|
#include "sfn_shader_tess.h"
|
||||||
#include "sfn_scheduler.h"
|
#include "sfn_scheduler.h"
|
||||||
#include "sfn_shader.h"
|
#include "sfn_shader.h"
|
||||||
#include "sfn_split_address_loads.h"
|
#include "sfn_split_address_loads.h"
|
||||||
|
|
@ -869,8 +870,11 @@ r600_lower_and_optimize_nir(nir_shader *sh,
|
||||||
NIR_PASS(_, sh, r600_lower_tess_io, static_cast<mesa_prim>(prim_type));
|
NIR_PASS(_, sh, r600_lower_tess_io, static_cast<mesa_prim>(prim_type));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sh->info.stage == MESA_SHADER_TESS_CTRL)
|
if (sh->info.stage == MESA_SHADER_TESS_CTRL) {
|
||||||
|
NIR_PASS(_, sh, nir_lower_system_values);
|
||||||
|
NIR_PASS(_, sh, r600_lower_tess_level_default_to_ubo);
|
||||||
NIR_PASS(_, sh, r600_append_tcs_TF_emission, (mesa_prim)key->tcs.prim_mode);
|
NIR_PASS(_, sh, r600_append_tcs_TF_emission, (mesa_prim)key->tcs.prim_mode);
|
||||||
|
}
|
||||||
|
|
||||||
if (sh->info.stage == MESA_SHADER_TESS_EVAL) {
|
if (sh->info.stage == MESA_SHADER_TESS_EVAL) {
|
||||||
NIR_PASS(_,
|
NIR_PASS(_,
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#include "sfn_instr_export.h"
|
#include "sfn_instr_export.h"
|
||||||
#include "sfn_shader_vs.h"
|
#include "sfn_shader_vs.h"
|
||||||
|
#include "sfn_nir.h"
|
||||||
|
#include "nir.h"
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
|
@ -245,4 +247,41 @@ TESShader::do_print_properties(std::ostream& os) const
|
||||||
(void)os;
|
(void)os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class LowerTessLevelDefault : public NirLowerInstruction {
|
||||||
|
bool filter(const nir_instr *instr) const override
|
||||||
|
{
|
||||||
|
if (instr->type != nir_instr_type_intrinsic)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto intr = nir_instr_as_intrinsic(instr);
|
||||||
|
return intr->intrinsic == nir_intrinsic_load_tess_level_inner_default ||
|
||||||
|
intr->intrinsic == nir_intrinsic_load_tess_level_outer_default;
|
||||||
|
}
|
||||||
|
|
||||||
|
nir_def *lower(nir_instr *instr) override
|
||||||
|
{
|
||||||
|
auto intr = nir_instr_as_intrinsic(instr);
|
||||||
|
|
||||||
|
auto info_buffer = nir_imm_int(b, R600_BUFFER_INFO_CONST_BUFFER);
|
||||||
|
|
||||||
|
switch (intr->intrinsic) {
|
||||||
|
case nir_intrinsic_load_tess_level_inner_default:
|
||||||
|
return nir_load_ubo(b, 2, 32, info_buffer, nir_imm_int(b, 16),
|
||||||
|
.range_base = 16, .range = 8);
|
||||||
|
case nir_intrinsic_load_tess_level_outer_default:
|
||||||
|
return nir_load_ubo(b, 4, 32, info_buffer, nir_imm_int(b, 0),
|
||||||
|
.range_base = 0, .range = 16);
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace r600
|
} // namespace r600
|
||||||
|
|
||||||
|
int r600_lower_tess_level_default_to_ubo(nir_shader *sh)
|
||||||
|
{
|
||||||
|
return r600::LowerTessLevelDefault().run(sh);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -83,4 +83,6 @@ private:
|
||||||
|
|
||||||
} // namespace r600
|
} // namespace r600
|
||||||
|
|
||||||
|
int r600_lower_tess_level_default_to_ubo(nir_shader *sh);
|
||||||
|
|
||||||
#endif // TCS_H
|
#endif // TCS_H
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue