Commit 0554986f authored by Jason Ekstrand's avatar Jason Ekstrand Committed by Erik Faye-Lund
Browse files

compiler/types: Make booleans 32-bit for cl_size/align



OpenCL doesn't mandate a size and this is consistent with the rest of
the glsl_type system.  While we're here, we also clean ::cl_size() up a
bit and use a new explicit_type_scalar_byte_size() helper.
Reviewed-by: Karol Herbst's avatarKarol Herbst <kherbst@redhat.com>
Part-of: <mesa/mesa!6472>
parent ef9c9cee
......@@ -2405,6 +2405,15 @@ glsl_type::get_explicit_interface_type(bool supports_std430) const
}
}
static unsigned
explicit_type_scalar_byte_size(const glsl_type *type)
{
if (type->base_type == GLSL_TYPE_BOOL)
return 4;
else
return glsl_base_type_get_bit_size(type->base_type) / 8;
}
/* This differs from get_explicit_std430_type() in that it:
* - can size arrays slightly smaller ("stride * (len - 1) + elem_size" instead
* of "stride * len")
......@@ -2931,12 +2940,9 @@ glsl_type::cl_alignment() const
unsigned
glsl_type::cl_size() const
{
if (this->is_scalar()) {
/* For bools, round up their size to a byte */
return DIV_ROUND_UP(glsl_base_type_get_bit_size(this->base_type), 8);
} else if (this->is_vector()) {
unsigned vec_elemns = this->vector_elements == 3 ? 4 : this->vector_elements;
return DIV_ROUND_UP(vec_elemns * glsl_base_type_get_bit_size(this->base_type), 8);
if (this->is_scalar() || this->is_vector()) {
return util_next_power_of_two(this->vector_elements) *
explicit_type_scalar_byte_size(this);
} else if (this->is_array()) {
unsigned size = this->without_array()->cl_size();
return size * this->length;
......
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