Skip to content

Commit

Permalink
+ Binding SpirvWriter
Browse files Browse the repository at this point in the history
+ Binding LangWriter
  • Loading branch information
REMqb committed Apr 27, 2024
1 parent 077908c commit 427ae4d
Show file tree
Hide file tree
Showing 17 changed files with 326 additions and 24 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ build
vs*
vsxmake*
*.user
.idea/
cmake*/
CMakeLists.txt

# Prerequisites
*.d
Expand Down
9 changes: 7 additions & 2 deletions include/CNZSL/CNZSL.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#include <CNZSL/Error.h>
#include <CNZSL/Parser.h>
#pragma once

#ifndef CNZSL_CNZSL_H
#define CNZSL_CNZSL_H

#include <CNZSL/Error.h>
#include <CNZSL/GlslWriter.h>
#include <CNZSL/Module.h>
#include <CNZSL/Parser.h>
#include <CNZSL/SpirvWriter.h>

#endif //CNZSL_CNZSL_H
8 changes: 6 additions & 2 deletions include/CNZSL/Config.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
// Copyright (C) 2024 REMqb (remqb at remqb dot fr)
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#pragma once

#ifndef CNZSL_CNZSL_H
#define CNZSL_CNZSL_H

Expand Down Expand Up @@ -98,6 +104,4 @@
#define NZSL_API
#endif

#include <cstdint>

#endif //CNZSL_CNZSL_H
2 changes: 2 additions & 0 deletions include/CNZSL/Error.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#pragma once

#ifndef CNZSL_ERROR_H
#define CNZSL_ERROR_H

Expand Down
6 changes: 4 additions & 2 deletions include/CNZSL/Error.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#include <string>
#include <CNZSL/Config.h>
#pragma once

#ifndef CNZSL_ERROR_HPP
#define CNZSL_ERROR_HPP

#include <string>
#include <CNZSL/Config.h>

namespace cnzsl {
void NZSL_API setError(std::string error);
}
Expand Down
8 changes: 4 additions & 4 deletions include/CNZSL/GlslWriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#pragma once

#ifndef CNZSL_GLSLWRITER_H
#define CNZSL_GLSLWRITER_H

Expand All @@ -25,16 +27,14 @@ typedef struct
int flipYPosition;
int remapZPosition;
int allowDrawParametersUniformsFallback;
} NZSLEnvironment;
} NZSLGlslWriterEnvironment;

typedef struct NZSLGlslWriterOutputInternal_s *NZSLGlslWriterOutputInternal;
typedef struct
{
NZSLGlslWriterOutputInternal internal;
const char* code;
size_t codeLen;
//std::unordered_map<std::string, unsigned int> explicitTextureBinding;
//std::unordered_map<std::string, unsigned int> explicitUniformBlockBinding;
int usesDrawParameterBaseInstanceUniform;
int usesDrawParameterBaseVertexUniform;
int usesDrawParameterDrawIndexUniform;
Expand All @@ -43,7 +43,7 @@ typedef NZSLGlslWriterOutput_s *NZSLGlslWriterOutput;

NZSLGlslWriter NZSL_API nzslGlslWriterCreate(void);

int NZSL_API nzslGlslWriterSetEnv(NZSLGlslWriter writer, NZSLEnvironment env);
int NZSL_API nzslGlslWriterSetEnv(NZSLGlslWriter writer, NZSLGlslWriterEnvironment env);

NZSLGlslWriterOutput NZSL_API nzslGlslWriterGenerate(NZSLGlslWriter writer, NZSLModule module);

Expand Down
42 changes: 42 additions & 0 deletions include/CNZSL/LangWriter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright (C) 2024 REMqb (remqb at remqb dot fr)
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#pragma once

#ifndef CNZSL_LANGWRITER_H
#define CNZSL_LANGWRITER_H

#include <CNZSL/Config.h>
#include <CNZSL/Module.h>

#ifdef __cplusplus
extern "C" {
#else
#endif


/// Opaque pointer on nzsl::LangWriter
typedef struct NZSLLangWriter_s *NZSLLangWriter;

typedef struct NZSLLangWriterOutputInternal_s *NZSLLangWriterOutputInternal;
typedef struct
{
NZSLLangWriterOutputInternal internal;
const char* code;
size_t codeLen;
} NZSLLangWriterOutput_s;
typedef NZSLLangWriterOutput_s *NZSLLangWriterOutput;

NZSLLangWriter NZSL_API nzslLangWriterCreate(void);

NZSLLangWriterOutput NZSL_API nzslLangWriterGenerate(NZSLLangWriter writer, NZSLModule module);

void NZSL_API nzslLangWriterDestroy(NZSLLangWriter writer);

#ifdef __cplusplus
}
#endif


#endif //CNZSL_LANGWRITER_H
2 changes: 2 additions & 0 deletions include/CNZSL/Module.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#pragma once

#ifndef CNZSL_MODULE_H
#define CNZSL_MODULE_H

Expand Down
2 changes: 2 additions & 0 deletions include/CNZSL/Parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#pragma once

#ifndef CNZSL_PARSER_H
#define CNZSL_PARSER_H

Expand Down
52 changes: 52 additions & 0 deletions include/CNZSL/SpirvWriter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright (C) 2024 REMqb (remqb at remqb dot fr)
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#pragma once

#ifndef CNZSL_SPIRVWRITER_H
#define CNZSL_SPIRVWRITER_H

#include <CNZSL/Config.h>
#include <CNZSL/Module.h>

#ifdef __cplusplus
#include <cstddef>
extern "C" {
#else
#includ <stddef.h>
#endif


/// Opaque pointer on nzsl::SpirvWriter
typedef struct NZSLSpirvWriter_s *NZSLSpirvWriter;

typedef struct
{
uint32_t spvMajorVersion;
uint32_t spvMinorVersion;
} NZSLSpirvWriterEnvironment;

typedef struct NZSLSpirvWriterOutputInternal_s *NZSLSpirvWriterOutputInternal;
typedef struct
{
NZSLSpirvWriterOutputInternal internal;
const uint32_t* spirv;
size_t spirvLen;
} NZSLSpirvWriterOutput_s;
typedef NZSLSpirvWriterOutput_s *NZSLSpirvWriterOutput;

NZSLSpirvWriter NZSL_API nzslSpirvWriterCreate(void);

int NZSL_API nzslSpirvWriterSetEnv(NZSLSpirvWriter writer, NZSLSpirvWriterEnvironment env);

NZSLSpirvWriterOutput NZSL_API nzslSpirvWriterGenerate(NZSLSpirvWriter writer, NZSLModule module);

void NZSL_API nzslSpirvWriterDestroy(NZSLSpirvWriter writer);

#ifdef __cplusplus
}
#endif


#endif //CNZSL_SPIRVWRITER_H
4 changes: 4 additions & 0 deletions src/CNZSL/Error.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (C) 2024 REMqb (remqb at remqb dot fr)
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#include <CNZSL/Error.h>
#include <CNZSL/Error.hpp>
#include <string>
Expand Down
35 changes: 22 additions & 13 deletions src/CNZSL/GlslWriter.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (C) 2024 REMqb (remqb at remqb dot fr)
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#include <NZSL/GlslWriter.hpp>
#include <string>

Expand All @@ -23,7 +27,7 @@ NZSLGlslWriter NZSL_API nzslGlslWriterCreate(void) {
return reinterpret_cast<NZSLGlslWriter>(writer);
}

int NZSL_API nzslGlslWriterSetEnv(NZSLGlslWriter writer, NZSLEnvironment env) {
int NZSL_API nzslGlslWriterSetEnv(NZSLGlslWriter writer, NZSLGlslWriterEnvironment env) {
auto writerPtr = reinterpret_cast<nzsl::GlslWriter*>(writer);

try {
Expand Down Expand Up @@ -56,18 +60,23 @@ NZSLGlslWriterOutput NZSL_API nzslGlslWriterGenerate(NZSLGlslWriter writer, NZSL
NZSLGlslWriterOutput output = nullptr;

try {
auto generated = std::make_unique<nzsl::GlslWriter::Output>(writerPtr->Generate(**modulePtr));

output = new NZSLGlslWriterOutput_s{
.internal = nullptr,
.code = generated->code.c_str(),
.codeLen = generated->code.size(),
.usesDrawParameterBaseInstanceUniform = generated->usesDrawParameterBaseInstanceUniform ? 1 : 0,
.usesDrawParameterBaseVertexUniform = generated->usesDrawParameterBaseVertexUniform ? 1 : 0,
.usesDrawParameterDrawIndexUniform = generated->usesDrawParameterDrawIndexUniform ? 1 : 0
};

output->internal = reinterpret_cast<NZSLGlslWriterOutputInternal>(generated.release());
auto generated = new nzsl::GlslWriter::Output(writerPtr->Generate(**modulePtr));

try
{
output = new NZSLGlslWriterOutput_s{
.internal = reinterpret_cast<NZSLGlslWriterOutputInternal>(generated),
.code = generated->code.c_str(),
.codeLen = generated->code.size(),
.usesDrawParameterBaseInstanceUniform = generated->usesDrawParameterBaseInstanceUniform ? 1 : 0,
.usesDrawParameterBaseVertexUniform = generated->usesDrawParameterBaseVertexUniform ? 1 : 0,
.usesDrawParameterDrawIndexUniform = generated->usesDrawParameterDrawIndexUniform ? 1 : 0
};
} catch(...) {
delete generated;

throw;
}
} catch (std::exception& e) {
cnzsl::setError("nzslGlslWriterGenerate failed: "s + e.what());
} catch (...) {
Expand Down
73 changes: 73 additions & 0 deletions src/CNZSL/LangWriter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// Copyright (C) 2024 REMqb (remqb at remqb dot fr)
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#include <NZSL/LangWriter.hpp>
#include <string>

#include <CNZSL/LangWriter.h>
#include <CNZSL/Error.hpp>

using namespace std::literals;

extern "C" {


NZSLLangWriter NZSL_API nzslLangWriterCreate(void) {
nzsl::LangWriter* writer = nullptr;

try {
writer = new nzsl::LangWriter;
} catch (std::exception& e) {
cnzsl::setError("nzslLangWriterCreate failed: "s + e.what());
} catch (...) {
cnzsl::setError("nzslLangWriterCreate failed with unknown error");
}

return reinterpret_cast<NZSLLangWriter>(writer);
}

NZSLLangWriterOutput NZSL_API nzslLangWriterGenerate(NZSLLangWriter writer, NZSLModule module) {
auto writerPtr = reinterpret_cast<nzsl::LangWriter*>(writer);
auto modulePtr = reinterpret_cast<nzsl::Ast::ModulePtr *>(module);

NZSLLangWriterOutput output = nullptr;

try {
auto generated = new std::string{writerPtr->Generate(**modulePtr)};

try
{
output = new NZSLLangWriterOutput_s{
.internal = reinterpret_cast<NZSLLangWriterOutputInternal>(generated),
.code = generated->data(),
.codeLen = generated->size()
};
} catch(...) {
delete generated;

throw;
}
} catch (std::exception& e) {
cnzsl::setError("nzslLangWriterGenerate failed: "s + e.what());
} catch (...) {
cnzsl::setError("nzslLangWriterGenerate failed with unknown error");
}

return output;
}

void NZSL_API nzslLangWriterOutputDestroy(NZSLLangWriterOutput output) {
auto outputPtr = reinterpret_cast<std::string*>(output->internal);

delete outputPtr;
delete output;
}

void NZSL_API nzslLangWriterDestroy(NZSLLangWriter writer) {
auto writerPtr = reinterpret_cast<nzsl::LangWriter*>(writer);

delete writerPtr;
}

}
4 changes: 4 additions & 0 deletions src/CNZSL/Module.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (C) 2024 REMqb (remqb at remqb dot fr)
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#include <CNZSL/Module.h>
#include <NZSL/Ast/Module.hpp>

Expand Down
4 changes: 4 additions & 0 deletions src/CNZSL/Parser.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (C) 2024 REMqb (remqb at remqb dot fr)
// This file is part of the "Nazara Shading Language" project
// For conditions of distribution and use, see copyright notice in Config.hpp

#include <NZSL/Parser.hpp>
#include <string>

Expand Down
Loading

0 comments on commit 427ae4d

Please sign in to comment.