intel/rt: Use reloc constants for the resume SBT
It's going to be attached to the end of the shader binary, not an arbitrary table somewhere in memory. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8637>
This commit is contained in:

committed by
Marge Bot

parent
705395344d
commit
c92fd35848
@@ -679,6 +679,8 @@ enum brw_shader_reloc_id {
|
|||||||
BRW_SHADER_RELOC_CONST_DATA_ADDR_LOW,
|
BRW_SHADER_RELOC_CONST_DATA_ADDR_LOW,
|
||||||
BRW_SHADER_RELOC_CONST_DATA_ADDR_HIGH,
|
BRW_SHADER_RELOC_CONST_DATA_ADDR_HIGH,
|
||||||
BRW_SHADER_RELOC_SHADER_START_OFFSET,
|
BRW_SHADER_RELOC_SHADER_START_OFFSET,
|
||||||
|
BRW_SHADER_RELOC_RESUME_SBT_ADDR_LOW,
|
||||||
|
BRW_SHADER_RELOC_RESUME_SBT_ADDR_HIGH,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum brw_shader_reloc_type {
|
enum brw_shader_reloc_type {
|
||||||
|
@@ -337,8 +337,9 @@ lower_rt_intrinsics_impl(nir_function_impl *impl,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case nir_intrinsic_load_btd_resume_sbt_addr_intel:
|
case nir_intrinsic_load_btd_resume_sbt_addr_intel:
|
||||||
/* The call stack handler is just the first in our resume SBT */
|
sysval = nir_pack_64_2x32_split(b,
|
||||||
sysval = globals.resume_sbt_addr;
|
nir_load_reloc_const_intel(b, BRW_SHADER_RELOC_RESUME_SBT_ADDR_LOW),
|
||||||
|
nir_load_reloc_const_intel(b, BRW_SHADER_RELOC_RESUME_SBT_ADDR_HIGH));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nir_intrinsic_load_leaf_procedural_intel:
|
case nir_intrinsic_load_leaf_procedural_intel:
|
||||||
|
@@ -330,8 +330,7 @@ rewrite_instr_src_from_phi_builder(nir_src *src, void *_pbv_arr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
spill_ssa_defs_and_lower_shader_calls(nir_shader *shader, uint32_t num_calls,
|
spill_ssa_defs_and_lower_shader_calls(nir_shader *shader, uint32_t num_calls)
|
||||||
uint32_t first_resume_sbt_idx)
|
|
||||||
{
|
{
|
||||||
/* TODO: If a SSA def is filled more than once, we probably want to just
|
/* TODO: If a SSA def is filled more than once, we probably want to just
|
||||||
* spill it at the LCM of the fill sites so we avoid unnecessary
|
* spill it at the LCM of the fill sites so we avoid unnecessary
|
||||||
@@ -508,8 +507,7 @@ spill_ssa_defs_and_lower_shader_calls(nir_shader *shader, uint32_t num_calls,
|
|||||||
nir_intrinsic_instr *call = nir_instr_as_intrinsic(instr);
|
nir_intrinsic_instr *call = nir_instr_as_intrinsic(instr);
|
||||||
nir_ssa_def *resume_record_addr =
|
nir_ssa_def *resume_record_addr =
|
||||||
nir_iadd_imm(b, nir_load_btd_resume_sbt_addr_intel(b),
|
nir_iadd_imm(b, nir_load_btd_resume_sbt_addr_intel(b),
|
||||||
(first_resume_sbt_idx + call_idx) *
|
call_idx * BRW_BTD_RESUME_SBT_STRIDE);
|
||||||
BRW_BTD_RESUME_SBT_STRIDE);
|
|
||||||
/* By the time we get here, any remaining shader/function memory
|
/* By the time we get here, any remaining shader/function memory
|
||||||
* pointers have been lowered to SSA values.
|
* pointers have been lowered to SSA values.
|
||||||
*/
|
*/
|
||||||
@@ -1206,7 +1204,6 @@ replace_resume_with_halt(nir_shader *shader, nir_instr *keep)
|
|||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
brw_nir_lower_shader_calls(nir_shader *shader,
|
brw_nir_lower_shader_calls(nir_shader *shader,
|
||||||
uint32_t first_resume_sbt_idx,
|
|
||||||
nir_shader ***resume_shaders_out,
|
nir_shader ***resume_shaders_out,
|
||||||
uint32_t *num_resume_shaders_out,
|
uint32_t *num_resume_shaders_out,
|
||||||
void *mem_ctx)
|
void *mem_ctx)
|
||||||
@@ -1241,8 +1238,7 @@ brw_nir_lower_shader_calls(nir_shader *shader,
|
|||||||
NIR_PASS(progress, shader, nir_opt_cse);
|
NIR_PASS(progress, shader, nir_opt_cse);
|
||||||
}
|
}
|
||||||
|
|
||||||
NIR_PASS_V(shader, spill_ssa_defs_and_lower_shader_calls,
|
NIR_PASS_V(shader, spill_ssa_defs_and_lower_shader_calls, num_calls);
|
||||||
num_calls, first_resume_sbt_idx);
|
|
||||||
|
|
||||||
/* Make N copies of our shader */
|
/* Make N copies of our shader */
|
||||||
nir_shader **resume_shaders = ralloc_array(mem_ctx, nir_shader *, num_calls);
|
nir_shader **resume_shaders = ralloc_array(mem_ctx, nir_shader *, num_calls);
|
||||||
|
@@ -52,7 +52,6 @@ void brw_nir_lower_combined_intersection_any_hit(nir_shader *intersection,
|
|||||||
void brw_nir_lower_shader_returns(nir_shader *shader);
|
void brw_nir_lower_shader_returns(nir_shader *shader);
|
||||||
|
|
||||||
bool brw_nir_lower_shader_calls(nir_shader *shader,
|
bool brw_nir_lower_shader_calls(nir_shader *shader,
|
||||||
uint32_t first_resume_sbt_idx,
|
|
||||||
nir_shader ***resume_shaders_out,
|
nir_shader ***resume_shaders_out,
|
||||||
uint32_t *num_resume_shaders_out,
|
uint32_t *num_resume_shaders_out,
|
||||||
void *mem_ctx);
|
void *mem_ctx);
|
||||||
|
Reference in New Issue
Block a user