Merge pull request #464 from billhollings/master

CompilerMSL remove incorrect packing of non-interface type-aliased structs.
This commit is contained in:
Hans-Kristian Arntzen 2018-02-22 09:35:52 +01:00 коммит произвёл GitHub
Родитель 3925fe88e9 50ef6cd95f
Коммит 11bbccb54a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 76 добавлений и 5 удалений

Просмотреть файл

@ -0,0 +1,29 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct s1
{
int a;
};
struct s2
{
s1 b;
};
struct dstbuffer
{
s2 test[1];
};
constant s2 _31 = {};
kernel void main0(device dstbuffer& _19 [[buffer(0)]])
{
s2 _30 = _31;
_30.b.a = 0;
_19.test[0].b.a = _30.b.a;
}

Просмотреть файл

@ -0,0 +1,27 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct s1
{
int a;
};
struct s2
{
s1 b;
};
struct dstbuffer
{
s2 test[1];
};
kernel void main0(device dstbuffer& _19 [[buffer(0)]])
{
s2 testVal;
testVal.b.a = 0;
_19.test[0].b.a = testVal.b.a;
}

Просмотреть файл

@ -0,0 +1,20 @@
#version 450
struct s1
{
int a;
};
struct s2
{
s1 b;
};
layout(std430, binding = 1) buffer dstbuffer{ s2 test[]; };
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main()
{
s2 testVal;
testVal.b.a = 0;
test[0] = testVal;
}

Просмотреть файл

@ -438,11 +438,6 @@ void CompilerMSL::mark_as_packable(SPIRType &type)
uint32_t mbr_type_id = type.member_types[mbr_idx]; uint32_t mbr_type_id = type.member_types[mbr_idx];
auto &mbr_type = get<SPIRType>(mbr_type_id); auto &mbr_type = get<SPIRType>(mbr_type_id);
mark_as_packable(mbr_type); mark_as_packable(mbr_type);
if (mbr_type.type_alias)
{
auto &mbr_type_alias = get<SPIRType>(mbr_type.type_alias);
mark_as_packable(mbr_type_alias);
}
} }
} }
} }