mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +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_optimizer.h"
|
||||
#include "sfn_ra.h"
|
||||
#include "sfn_shader_tess.h"
|
||||
#include "sfn_scheduler.h"
|
||||
#include "sfn_shader.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));
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
if (sh->info.stage == MESA_SHADER_TESS_EVAL) {
|
||||
NIR_PASS(_,
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
#include "sfn_instr_export.h"
|
||||
#include "sfn_shader_vs.h"
|
||||
#include "sfn_nir.h"
|
||||
#include "nir.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
|
|
@ -245,4 +247,41 @@ TESShader::do_print_properties(std::ostream& os) const
|
|||
(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
|
||||
|
||||
int r600_lower_tess_level_default_to_ubo(nir_shader *sh)
|
||||
{
|
||||
return r600::LowerTessLevelDefault().run(sh);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,4 +83,6 @@ private:
|
|||
|
||||
} // namespace r600
|
||||
|
||||
int r600_lower_tess_level_default_to_ubo(nir_shader *sh);
|
||||
|
||||
#endif // TCS_H
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue