diff --git a/src/freedreno/ir3/ir3_nir_lower_driver_params_to_ubo.c b/src/freedreno/ir3/ir3_nir_lower_driver_params_to_ubo.c index cf0271eae80..e27ce307ffa 100644 --- a/src/freedreno/ir3/ir3_nir_lower_driver_params_to_ubo.c +++ b/src/freedreno/ir3/ir3_nir_lower_driver_params_to_ubo.c @@ -9,11 +9,37 @@ #include "ir3_compiler.h" #include "ir3_nir.h" +static nir_def * +load_primitive_map_ubo(nir_builder *b, struct ir3_shader_variant *v, + unsigned components, unsigned offset) +{ + struct ir3_const_state *const_state = ir3_const_state_mut(v); + return ir3_load_driver_ubo(b, components, &const_state->primitive_map_ubo, + offset); +} + +static nir_def * +load_primitive_param_ubo(nir_builder *b, struct ir3_shader_variant *v, + unsigned components, unsigned offset) +{ + struct ir3_const_state *const_state = ir3_const_state_mut(v); + return ir3_load_driver_ubo(b, components, &const_state->primitive_param_ubo, + offset); +} + +static nir_def * +load_driver_params_ubo(nir_builder *b, struct ir3_shader_variant *v, + unsigned components, unsigned offset) +{ + struct ir3_const_state *const_state = ir3_const_state_mut(v); + return ir3_load_driver_ubo(b, components, &const_state->driver_params_ubo, + offset); +} + static bool lower_driver_param_to_ubo(nir_builder *b, nir_intrinsic_instr *intr, void *in) { struct ir3_shader_variant *v = in; - struct ir3_const_state *const_state = ir3_const_state_mut(v); unsigned components = nir_intrinsic_dest_components(intr); @@ -22,33 +48,26 @@ lower_driver_param_to_ubo(nir_builder *b, nir_intrinsic_instr *intr, void *in) nir_def *result; switch (intr->intrinsic) { case nir_intrinsic_load_primitive_location_ir3: - result = ir3_load_driver_ubo(b, components, - &const_state->primitive_map_ubo, - nir_intrinsic_driver_location(intr)); + result = load_primitive_map_ubo(b, v, components, + nir_intrinsic_driver_location(intr)); break; case nir_intrinsic_load_vs_primitive_stride_ir3: - result = ir3_load_driver_ubo(b, components, - &const_state->primitive_param_ubo, 0); + result = load_primitive_param_ubo(b, v, components, 0); break; case nir_intrinsic_load_vs_vertex_stride_ir3: - result = ir3_load_driver_ubo(b, components, - &const_state->primitive_param_ubo, 1); + result = load_primitive_param_ubo(b, v, components, 1); break; case nir_intrinsic_load_hs_patch_stride_ir3: - result = ir3_load_driver_ubo(b, components, - &const_state->primitive_param_ubo, 2); + result = load_primitive_param_ubo(b, v, components, 2); break; case nir_intrinsic_load_patch_vertices_in: - result = ir3_load_driver_ubo(b, components, - &const_state->primitive_param_ubo, 3); + result = load_primitive_param_ubo(b, v, components, 3); break; case nir_intrinsic_load_tess_param_base_ir3: - result = ir3_load_driver_ubo(b, components, - &const_state->primitive_param_ubo, 4); + result = load_primitive_param_ubo(b, v, components, 4); break; case nir_intrinsic_load_tess_factor_base_ir3: - result = ir3_load_driver_ubo(b, components, - &const_state->primitive_param_ubo, 6); + result = load_primitive_param_ubo(b, v, components, 6); break; /* These are still loaded using CP_LOAD_STATE for compatibility with indirect * draws where the CP does a CP_LOAD_STATE for us internally: @@ -63,9 +82,7 @@ lower_driver_param_to_ubo(nir_builder *b, nir_intrinsic_instr *intr, void *in) if (!ir3_get_driver_param_info(b->shader, intr, ¶m_info)) return false; - result = ir3_load_driver_ubo(b, components, - &const_state->driver_params_ubo, - param_info.offset); + result = load_driver_params_ubo(b, v, components, param_info.offset); } }