Lines Matching refs:vars
241 reserve_stack_size(struct rt_variables *vars, uint32_t size)
243 for (uint32_t group_idx = 0; group_idx < vars->create_info->groupCount; group_idx++) {
244 const VkRayTracingShaderGroupCreateInfoKHR *group = vars->create_info->pGroups + group_idx;
246 if (vars->stage_idx == group->generalShader || vars->stage_idx == group->closestHitShader)
247 vars->stack_sizes[group_idx].recursive_size =
248 MAX2(vars->stack_sizes[group_idx].recursive_size, size);
250 if (vars->stage_idx == group->anyHitShader || vars->stage_idx == group->intersectionShader)
251 vars->stack_sizes[group_idx].non_recursive_size =
252 MAX2(vars->stack_sizes[group_idx].non_recursive_size, size);
260 struct rt_variables vars = {
263 vars.idx = nir_variable_create(shader, nir_var_shader_temp, glsl_uint_type(), "idx");
264 vars.arg = nir_variable_create(shader, nir_var_shader_temp, glsl_uint_type(), "arg");
265 vars.stack_ptr = nir_variable_create(shader, nir_var_shader_temp, glsl_uint_type(), "stack_ptr");
266 vars.shader_record_ptr =
270 vars.accel_struct =
272 vars.flags = nir_variable_create(shader, nir_var_shader_temp, glsl_uint_type(), "ray_flags");
273 vars.cull_mask = nir_variable_create(shader, nir_var_shader_temp, glsl_uint_type(), "cull_mask");
274 vars.sbt_offset =
276 vars.sbt_stride =
278 vars.miss_index =
280 vars.origin = nir_variable_create(shader, nir_var_shader_temp, vec3_type, "ray_origin");
281 vars.tmin = nir_variable_create(shader, nir_var_shader_temp, glsl_float_type(), "ray_tmin");
282 vars.direction = nir_variable_create(shader, nir_var_shader_temp, vec3_type, "ray_direction");
283 vars.tmax = nir_variable_create(shader, nir_var_shader_temp, glsl_float_type(), "ray_tmax");
285 vars.custom_instance_and_mask = nir_variable_create(
287 vars.primitive_id =
289 vars.geometry_id_and_flags =
291 vars.instance_id =
293 vars.instance_addr =
295 vars.hit_kind = nir_variable_create(shader, nir_var_shader_temp, glsl_uint_type(), "hit_kind");
296 vars.opaque = nir_variable_create(shader, nir_var_shader_temp, glsl_bool_type(), "opaque");
298 vars.main_loop_case_visited =
300 vars.ahit_accept =
302 vars.ahit_terminate =
305 vars.stack_sizes = stack_sizes;
306 return vars;
355 create_inner_vars(nir_builder *b, const struct rt_variables *vars)
357 struct rt_variables inner_vars = *vars;
385 insert_rt_return(nir_builder *b, const struct rt_variables *vars)
387 nir_store_var(b, vars->stack_ptr, nir_iadd_imm(b, nir_load_var(b, vars->stack_ptr), -16), 1);
388 nir_store_var(b, vars->idx,
389 nir_load_scratch(b, 1, 32, nir_load_var(b, vars->stack_ptr), .align_mul = 16), 1);
415 load_sbt_entry(nir_builder *b, const struct rt_variables *vars, nir_ssa_def *idx,
423 nir_store_var(b, vars->idx, v_idx, 1);
426 nir_store_var(b, vars->shader_record_ptr, record_addr, 1);
432 lower_rt_instructions(nir_shader *shader, struct rt_variables *vars, unsigned call_idx_base)
451 &b_shader, vars->stack_ptr,
452 nir_iadd_imm(&b_shader, nir_load_var(&b_shader, vars->stack_ptr), size), 1);
454 nir_load_var(&b_shader, vars->stack_ptr), .align_mul = 16);
456 nir_store_var(&b_shader, vars->stack_ptr,
457 nir_iadd_imm(&b_shader, nir_load_var(&b_shader, vars->stack_ptr), 16),
459 load_sbt_entry(&b_shader, vars, intr->src[0].ssa, SBT_CALLABLE, 0);
461 nir_store_var(&b_shader, vars->arg,
464 reserve_stack_size(vars, size + 16);
472 &b_shader, vars->stack_ptr,
473 nir_iadd_imm(&b_shader, nir_load_var(&b_shader, vars->stack_ptr), size), 1);
475 nir_load_var(&b_shader, vars->stack_ptr), .align_mul = 16);
477 nir_store_var(&b_shader, vars->stack_ptr,
478 nir_iadd_imm(&b_shader, nir_load_var(&b_shader, vars->stack_ptr), 16),
481 nir_store_var(&b_shader, vars->idx, nir_imm_int(&b_shader, 1), 1);
482 nir_store_var(&b_shader, vars->arg,
485 reserve_stack_size(vars, size + 16);
488 nir_store_var(&b_shader, vars->accel_struct, intr->src[0].ssa, 0x1);
489 nir_store_var(&b_shader, vars->flags, intr->src[1].ssa, 0x1);
490 nir_store_var(&b_shader, vars->cull_mask,
492 nir_store_var(&b_shader, vars->sbt_offset,
494 nir_store_var(&b_shader, vars->sbt_stride,
496 nir_store_var(&b_shader, vars->miss_index,
498 nir_store_var(&b_shader, vars->origin, intr->src[6].ssa, 0x7);
499 nir_store_var(&b_shader, vars->tmin, intr->src[7].ssa, 0x1);
500 nir_store_var(&b_shader, vars->direction, intr->src[8].ssa, 0x7);
501 nir_store_var(&b_shader, vars->tmax, intr->src[9].ssa, 0x1);
508 &b_shader, vars->stack_ptr,
509 nir_iadd_imm(&b_shader, nir_load_var(&b_shader, vars->stack_ptr), -size), 1);
514 nir_store_var(&b_shader, vars->idx, nir_imm_int(&b_shader, 0), 1);
517 insert_rt_return(&b_shader, vars);
523 nir_iadd(&b_shader, nir_load_var(&b_shader, vars->stack_ptr), intr->src[0].ssa));
529 nir_iadd(&b_shader, nir_load_var(&b_shader, vars->stack_ptr), intr->src[1].ssa));
533 ret = nir_load_var(&b_shader, vars->arg);
537 ret = nir_load_var(&b_shader, vars->shader_record_ptr);
562 ret = nir_load_var(&b_shader, vars->tmin);
566 ret = nir_load_var(&b_shader, vars->tmax);
570 ret = nir_load_var(&b_shader, vars->origin);
574 ret = nir_load_var(&b_shader, vars->direction);
578 ret = nir_load_var(&b_shader, vars->custom_instance_and_mask);
583 ret = nir_load_var(&b_shader, vars->primitive_id);
587 ret = nir_load_var(&b_shader, vars->geometry_id_and_flags);
592 ret = nir_load_var(&b_shader, vars->instance_id);
596 ret = nir_load_var(&b_shader, vars->flags);
600 ret = nir_load_var(&b_shader, vars->hit_kind);
605 nir_ssa_def *instance_node_addr = nir_load_var(&b_shader, vars->instance_addr);
621 nir_ssa_def *instance_node_addr = nir_load_var(&b_shader, vars->instance_addr);
638 nir_ssa_def *instance_node_addr = nir_load_var(&b_shader, vars->instance_addr);
650 &b_shader, nir_load_var(&b_shader, vars->origin), wto_matrix);
654 nir_ssa_def *instance_node_addr = nir_load_var(&b_shader, vars->instance_addr);
658 &b_shader, nir_load_var(&b_shader, vars->direction), wto_matrix, false);
662 ret = nir_load_var(&b_shader, vars->opaque);
666 ret = nir_load_var(&b_shader, vars->cull_mask);
670 nir_store_var(&b_shader, vars->ahit_accept, nir_imm_false(&b_shader), 0x1);
679 nir_store_var(&b_shader, vars->ahit_accept, nir_imm_true(&b_shader), 0x1);
680 nir_store_var(&b_shader, vars->ahit_terminate, nir_imm_true(&b_shader), 0x1);
693 nir_fge(&b_shader, nir_load_var(&b_shader, vars->tmax), intr->src[0].ssa),
694 nir_fge(&b_shader, intr->src[0].ssa, nir_load_var(&b_shader, vars->tmin))));
696 nir_store_var(&b_shader, vars->ahit_accept, nir_imm_true(&b_shader), 0x1);
697 nir_store_var(&b_shader, vars->tmax, intr->src[0].ssa, 1);
698 nir_store_var(&b_shader, vars->hit_kind, intr->src[1].ssa, 1);
730 insert_rt_case(nir_builder *b, nir_shader *shader, struct rt_variables *vars, nir_ssa_def *idx,
737 struct rt_variables src_vars = create_rt_variables(shader, vars->create_info, vars->stack_sizes);
738 map_rt_variables(var_remap, &src_vars, vars);
746 reserve_stack_size(vars, shader->scratch_size);
749 nir_store_var(b, vars->main_loop_case_visited, nir_imm_bool(b, true), 1);
1088 struct rt_variables *vars)
1090 nir_ssa_def *sbt_idx = nir_load_var(b, vars->idx);
1110 vars->stage_idx = shader_id;
1111 insert_rt_case(b, nir_stage, vars, sbt_idx, 0, i + 2);
1119 nir_ssa_def *result, const struct rt_variables *vars,
1132 nir_inot(b, nir_test_mask(b, nir_load_var(b, vars->flags), SpvRayFlagsSkipTrianglesKHRMask));
1135 nir_iand(b, nir_load_var(b, vars->flags),
1147 nir_iand(b, nir_flt(b, dist, nir_load_var(b, vars->tmax)),
1148 nir_flt(b, nir_load_var(b, vars->tmin), dist)),
1160 nir_load_var(b, vars->flags), geometry_id_and_flags);
1164 nir_iand(b, nir_load_var(b, vars->flags),
1172 nir_iadd(b, nir_load_var(b, vars->sbt_offset),
1174 nir_imul(b, nir_load_var(b, vars->sbt_stride), geometry_id));
1181 b, ij, nir_iadd_imm(b, nir_load_var(b, vars->stack_ptr), RADV_HIT_ATTRIB_OFFSET),
1184 nir_store_var(b, vars->ahit_accept, nir_imm_true(b), 0x1);
1185 nir_store_var(b, vars->ahit_terminate, nir_imm_false(b), 0x1);
1189 struct rt_variables inner_vars = create_inner_vars(b, vars);
1205 nir_push_if(b, nir_inot(b, nir_load_var(b, vars->ahit_accept)));
1213 nir_store_var(b, vars->primitive_id, primitive_id, 1);
1214 nir_store_var(b, vars->geometry_id_and_flags, geometry_id_and_flags, 1);
1215 nir_store_var(b, vars->tmax, dist, 0x1);
1216 nir_store_var(b, vars->instance_id, nir_load_var(b, trav_vars->instance_id), 0x1);
1217 nir_store_var(b, vars->instance_addr, nir_load_var(b, trav_vars->instance_addr), 0x1);
1218 nir_store_var(b, vars->hit_kind, hit_kind, 0x1);
1219 nir_store_var(b, vars->custom_instance_and_mask,
1222 nir_store_var(b, vars->idx, sbt_idx, 1);
1226 nir_test_mask(b, nir_load_var(b, vars->flags), SpvRayFlagsTerminateOnFirstHitKHRMask);
1227 nir_ssa_def *ray_terminated = nir_load_var(b, vars->ahit_terminate);
1242 const struct rt_variables *vars,
1251 nir_load_var(b, vars->flags), geometry_id_and_flags);
1254 nir_inot(b, nir_test_mask(b, nir_load_var(b, vars->flags), SpvRayFlagsSkipAABBsKHRMask));
1258 nir_iand(b, nir_load_var(b, vars->flags),
1266 nir_iadd(b, nir_load_var(b, vars->sbt_offset),
1268 nir_imul(b, nir_load_var(b, vars->sbt_stride), geometry_id));
1270 struct rt_variables inner_vars = create_inner_vars(b, vars);
1274 inner_vars.hit_kind = vars->hit_kind;
1278 nir_store_var(b, inner_vars.tmax, nir_load_var(b, vars->tmax), 0x1);
1287 nir_store_var(b, vars->ahit_accept, nir_imm_false(b), 0x1);
1288 nir_store_var(b, vars->ahit_terminate, nir_imm_false(b), 0x1);
1347 nir_push_if(b, nir_iand(b, nir_fge(b, nir_load_var(b, vars->tmax), t_min),
1348 nir_fge(b, t_max, nir_load_var(b, vars->tmin))));
1350 nir_store_var(b, vars->ahit_accept, nir_imm_true(b), 0x1);
1351 nir_store_var(b, vars->tmax, nir_fmax(b, t_min, nir_load_var(b, vars->tmin)), 1);
1357 nir_push_if(b, nir_load_var(b, vars->ahit_accept));
1359 nir_store_var(b, vars->primitive_id, primitive_id, 1);
1360 nir_store_var(b, vars->geometry_id_and_flags, geometry_id_and_flags, 1);
1361 nir_store_var(b, vars->tmax, nir_load_var(b, inner_vars.tmax), 0x1);
1362 nir_store_var(b, vars->instance_id, nir_load_var(b, trav_vars->instance_id), 0x1);
1363 nir_store_var(b, vars->instance_addr, nir_load_var(b, trav_vars->instance_addr), 0x1);
1364 nir_store_var(b, vars->custom_instance_and_mask,
1367 nir_store_var(b, vars->idx, sbt_idx, 1);
1371 nir_test_mask(b, nir_load_var(b, vars->flags), SpvRayFlagsTerminateOnFirstHitKHRMask);
1372 nir_ssa_def *ray_terminated = nir_load_var(b, vars->ahit_terminate);
1394 struct rt_variables vars = create_rt_variables(b.shader, pCreateInfo, dst_vars->stack_sizes);
1395 map_rt_variables(var_remap, &vars, dst_vars);
1407 nir_ssa_def *accel_struct = nir_load_var(&b, vars.accel_struct);
1423 nir_store_var(&b, trav_vars.origin, nir_load_var(&b, vars.origin), 7);
1424 nir_store_var(&b, trav_vars.dir, nir_load_var(&b, vars.direction), 7);
1445 build_addr_to_node(&b, nir_load_var(&b, vars.accel_struct)), 1);
1446 nir_store_var(&b, trav_vars.origin, nir_load_var(&b, vars.origin), 7);
1447 nir_store_var(&b, trav_vars.dir, nir_load_var(&b, vars.direction), 7);
1464 &b, 32, desc, nir_unpack_64_2x32(&b, bvh_node), nir_load_var(&b, vars.tmax),
1476 insert_traversal_aabb_case(device, pCreateInfo, &b, &vars, &trav_vars, bvh_node);
1498 nir_ieq_imm(&b, nir_iand(&b, instance_mask, nir_load_var(&b, vars.cull_mask)), 0));
1515 nir_build_vec3_mat_mult_pre(&b, nir_load_var(&b, vars.origin), wto_matrix), 7);
1518 nir_build_vec3_mat_mult(&b, nir_load_var(&b, vars.direction), wto_matrix, false),
1538 &b, bvh_node, nir_load_var(&b, vars.tmax), nir_load_var(&b, trav_vars.origin),
1564 &b, bvh_node, nir_load_var(&b, vars.tmax), nir_load_var(&b, trav_vars.origin),
1567 insert_traversal_triangle_case(device, pCreateInfo, &b, result, &vars, &trav_vars, bvh_node);
1578 /* vars.idx contains the SBT index at this point. */
1579 load_sbt_entry(&b, &vars, nir_load_var(&b, vars.idx), SBT_HIT, 0);
1582 nir_test_mask(&b, nir_load_var(&b, vars.flags),
1584 nir_ieq_imm(&b, nir_load_var(&b, vars.idx), 0));
1590 insert_rt_return(&b, &vars);
1598 load_sbt_entry(&b, &vars, nir_load_var(&b, vars.miss_index), SBT_MISS, 0);
1608 nir_builder *b, const struct rt_variables *vars)
1611 nir_shader *shader = build_traversal_shader(device, pCreateInfo, vars, var_remap);
1614 nir_push_if(b, nir_ieq_imm(b, nir_load_var(b, vars->idx), 1));
1615 nir_store_var(b, vars->main_loop_case_visited, nir_imm_bool(b, true), 1);
1750 struct rt_variables vars = create_rt_variables(b.shader, pCreateInfo, stack_sizes);
1751 load_sbt_entry(&b, &vars, nir_imm_int(&b, 0), SBT_RAYGEN, 0);
1752 nir_store_var(&b, vars.stack_ptr, nir_imm_int(&b, 0), 0x1);
1754 nir_store_var(&b, vars.main_loop_case_visited, nir_imm_bool(&b, true), 1);
1758 nir_push_if(&b, nir_ior(&b, nir_ieq_imm(&b, nir_load_var(&b, vars.idx), 0),
1759 nir_inot(&b, nir_load_var(&b, vars.main_loop_case_visited))));
1763 nir_store_var(&b, vars.main_loop_case_visited, nir_imm_bool(&b, false), 1);
1765 insert_traversal(device, pCreateInfo, &b, &vars);
1767 nir_ssa_def *idx = nir_load_var(&b, vars.idx);
1792 vars.stage_idx = i;
1793 insert_rt_case(&b, nir_stage, &vars, idx, call_idx_base, i + 2);
1795 insert_rt_case(&b, resume_shaders[j], &vars, idx, call_idx_base, call_idx_base + 1 + j);