[Mesa-dev] [PATCH 25/24] glsl: add std140 layout support for AoA
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Thu Sep 24 02:31:39 PDT 2015
On 24/09/15 02:16, Timothy Arceri wrote:
> On Wed, 2015-09-23 at 13:21 +0200, Samuel Iglesias Gonsálvez wrote:
>> On 22/09/15 15:30, Samuel Iglesias Gonsálvez wrote:
>>> Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
>>>
>>
>> Forgot to say that we need to implement a similar patch for
>> std430_size() function, right?
>
> Yeah I think so.
>
>>
>> I will write a follow-up patch adding std430 support for AoA.
>
> That would be great thanks.
>
> I assume there will also be other places in the SSBO series that might
> need updates for AoA?
>
As I am not very familiar with AoA, I will need to check how AoA affects
to SSBO-related code.
I plan to look at it soon and send follow-up patches (if needed). I
might ask you to review my patches as you have implemented AoA.
Thanks,
Sam
>
>>
>> Sam
>>
>>> On 20/09/15 14:07, Timothy Arceri wrote:
>>>> ---
>>>> I noticed this problem after adding AoA support [1] to Ian's
>>>> random UBO test
>>>> script [2].
>>>>
>>>> [1] http://patchwork.freedesktop.org/patch/59956/
>>>> [2] http://cgit.freedesktop.org/~idr/piglit/log/?h=ubo-lolz
>>>>
>>>> src/glsl/glsl_types.cpp | 13 +++++++------
>>>> 1 file changed, 7 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
>>>> index 86f0ea5..952bd0a 100644
>>>> --- a/src/glsl/glsl_types.cpp
>>>> +++ b/src/glsl/glsl_types.cpp
>>>> @@ -1310,8 +1310,8 @@ glsl_type::std140_size(bool row_major)
>>>> const
>>>> unsigned int array_len;
>>>>
>>>> if (this->is_array()) {
>>>> - element_type = this->fields.array;
>>>> - array_len = this->length;
>>>> + element_type = this->without_array();
>>>> + array_len = this->arrays_of_arrays_size();
>>>> } else {
>>>> element_type = this;
>>>> array_len = 1;
>>>> @@ -1344,12 +1344,13 @@ glsl_type::std140_size(bool row_major)
>>>> const
>>>> * the array are laid out in order, according to rule
>>>> (9).
>>>> */
>>>> if (this->is_array()) {
>>>> - if (this->fields.array->is_record()) {
>>>> - return this->length * this->fields.array
>>>> ->std140_size(row_major);
>>>> + if (this->without_array()->is_record()) {
>>>> + return this->arrays_of_arrays_size() *
>>>> + this->without_array()->std140_size(row_major);
>>>> } else {
>>>> unsigned element_base_align =
>>>> - this->fields.array
>>>> ->std140_base_alignment(row_major);
>>>> - return this->length * MAX2(element_base_align, 16);
>>>> + this->without_array()
>>>> ->std140_base_alignment(row_major);
>>>> + return this->arrays_of_arrays_size() *
>>>> MAX2(element_base_align, 16);
>>>> }
>>>> }
>>>>
>>>>
>
More information about the mesa-dev
mailing list