spirv: Add vtn_mode_uses_ssa_offset()

Just the mode is needed to decide whether SSA offsets are needed, so
make a function that takes that and reuse it for
vtn_pointer_uses_ssa_offset().

This will be used for constant null pointers, that won't have a
vtn_pointer handy.
Reviewed-by: Jason Ekstrand's avatarJason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Bas Nieuwenhuizen's avatarBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
parent f9336751
......@@ -473,8 +473,15 @@ struct vtn_pointer {
enum gl_access_qualifier access;
};
bool vtn_pointer_uses_ssa_offset(struct vtn_builder *b,
struct vtn_pointer *ptr);
bool vtn_mode_uses_ssa_offset(struct vtn_builder *b,
enum vtn_variable_mode mode);
static inline bool vtn_pointer_uses_ssa_offset(struct vtn_builder *b,
struct vtn_pointer *ptr)
{
return vtn_mode_uses_ssa_offset(b, ptr->mode);
}
struct vtn_variable {
enum vtn_variable_mode mode;
......
......@@ -45,14 +45,14 @@ vtn_access_chain_create(struct vtn_builder *b, unsigned length)
}
bool
vtn_pointer_uses_ssa_offset(struct vtn_builder *b,
struct vtn_pointer *ptr)
vtn_mode_uses_ssa_offset(struct vtn_builder *b,
enum vtn_variable_mode mode)
{
return ((ptr->mode == vtn_variable_mode_ubo ||
ptr->mode == vtn_variable_mode_ssbo) &&
return ((mode == vtn_variable_mode_ubo ||
mode == vtn_variable_mode_ssbo) &&
b->options->lower_ubo_ssbo_access_to_offsets) ||
ptr->mode == vtn_variable_mode_push_constant ||
(ptr->mode == vtn_variable_mode_workgroup &&
mode == vtn_variable_mode_push_constant ||
(mode == vtn_variable_mode_workgroup &&
b->options->lower_workgroup_access_to_offsets);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment