blob: 3eb8de10f9d0911ef27b6702095fc075af837866 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
// unit-test-ptr-layout.cpp
#include "slang-com-ptr.h"
#include "slang.h"
#include "unit-test/slang-unit-test.h"
#include <stdio.h>
#include <stdlib.h>
using namespace Slang;
SLANG_UNIT_TEST(pointerTypeLayout)
{
const char* testSource = "struct TestStruct {"
" int3 member0;"
" float member1;"
"};";
ComPtr<slang::IGlobalSession> globalSession;
SLANG_CHECK(slang_createGlobalSession(SLANG_API_VERSION, globalSession.writeRef()) == SLANG_OK);
slang::TargetDesc targetDesc = {};
targetDesc.format = SLANG_SPIRV;
targetDesc.profile = globalSession->findProfile("spirv_1_5");
slang::SessionDesc sessionDesc = {};
sessionDesc.targetCount = 1;
sessionDesc.targets = &targetDesc;
sessionDesc.compilerOptionEntryCount = 1;
slang::CompilerOptionEntry compilerOptionEntry = {};
compilerOptionEntry.name = slang::CompilerOptionName::EmitSpirvViaGLSL;
compilerOptionEntry.value.kind = slang::CompilerOptionValueKind::Int;
compilerOptionEntry.value.intValue0 = 1;
sessionDesc.compilerOptionEntries = &compilerOptionEntry;
ComPtr<slang::ISession> session;
SLANG_CHECK(globalSession->createSession(sessionDesc, session.writeRef()) == SLANG_OK);
ComPtr<slang::IBlob> diagnosticBlob;
auto module =
session->loadModuleFromSourceString("m", "m.slang", testSource, diagnosticBlob.writeRef());
SLANG_CHECK(module != nullptr);
auto testBody = [&]()
{
auto reflection = module->getLayout();
auto testStruct = reflection->findTypeByName("Ptr<TestStruct>");
auto ptrLayout = reflection->getTypeLayout(testStruct);
auto valueLayout = ptrLayout->getElementTypeLayout();
SLANG_CHECK_ABORT(valueLayout->getFieldCount() == 2);
SLANG_CHECK_ABORT(valueLayout->getFieldByIndex(1)->getOffset() == 12);
};
testBody();
}
|