This adds a new library, LibGLSL for parsing and compiling GLSL programs to LibGPU IR. Currently the compiler consists only of stubs.
@@ -347,6 +347,7 @@ if (BUILD_LAGOM)
Gemini
Gfx
GL
+ GLSL
GPU
HTTP
IMAP
@@ -23,6 +23,7 @@ add_subdirectory(LibFileSystemAccessClient)
add_subdirectory(LibGemini)
add_subdirectory(LibGfx)
add_subdirectory(LibGL)
+add_subdirectory(LibGLSL)
add_subdirectory(LibGPU)
add_subdirectory(LibGUI)
add_subdirectory(LibHTTP)
@@ -20,4 +20,4 @@ set(SOURCES
)
serenity_lib(LibGL gl)
-target_link_libraries(LibGL PRIVATE LibCore LibGfx LibGPU)
+target_link_libraries(LibGL PRIVATE LibCore LibGfx LibGLSL LibGPU)
@@ -0,0 +1,7 @@
+set(SOURCES
+ Compiler.cpp
+ Linker.cpp
+)
+
+serenity_lib(LibGLSL glsl)
+target_link_libraries(LibGLSL PRIVATE LibGPU)
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+#include <LibGLSL/Compiler.h>
+namespace GLSL {
+ErrorOr<NonnullOwnPtr<ObjectFile>> Compiler::compile(Vector<String> const&)
+{
+ // FIXME: implement this function
+ m_messages = TRY(String::from_utf8(""sv));
+ return adopt_own(*new ObjectFile());
+}
@@ -0,0 +1,27 @@
+#pragma once
+#include <AK/Error.h>
+#include <AK/NonnullOwnPtr.h>
+#include <AK/String.h>
+#include <AK/Vector.h>
+#include <LibGLSL/ObjectFile.h>
+class Compiler final {
+public:
+ ErrorOr<NonnullOwnPtr<ObjectFile>> compile(Vector<String> const& sources);
+ String messages() const { return m_messages; }
+private:
+ String m_messages;
+};
@@ -0,0 +1,22 @@
+// FIXME: Implement this class
+class LinkedShader final {
+#include <LibGLSL/Linker.h>
+ErrorOr<NonnullOwnPtr<LinkedShader>> Linker::link(Vector<ObjectFile const*> const&)
+ return adopt_own(*new LinkedShader());
@@ -0,0 +1,28 @@
+#include <LibGLSL/LinkedShader.h>
+class Linker final {
+ ErrorOr<NonnullOwnPtr<LinkedShader>> link(Vector<ObjectFile const*> const&);
@@ -0,0 +1,16 @@
+class ObjectFile final {