summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibGL
diff options
context:
space:
mode:
authorStephan Unverwerth <s.unverwerth@serenityos.org>2022-09-14 23:48:10 +0200
committerAndrew Kaster <andrewdkaster@gmail.com>2022-12-17 22:39:09 -0700
commit93ab2db80fed38b6e621085b5e060ae726d77a88 (patch)
tree5e0f4fd00f777dd60b932af8c3c52833e9752ee0 /Userland/Libraries/LibGL
parent4ad41e6680bad5397ab9f16110514268673c3ab2 (diff)
downloadserenity-93ab2db80fed38b6e621085b5e060ae726d77a88.zip
LibGL+LibSoftGPU: Add GPU side shader infrastructure
This adds a shader class to LibSoftGPU and makes use of it when linking GLSL program in LibGL. Also adds actual rendering code to the shader tests.
Diffstat (limited to 'Userland/Libraries/LibGL')
-rw-r--r--Userland/Libraries/LibGL/Shader.cpp2
-rw-r--r--Userland/Libraries/LibGL/Shaders/Program.cpp5
-rw-r--r--Userland/Libraries/LibGL/Shaders/Program.h6
3 files changed, 10 insertions, 3 deletions
diff --git a/Userland/Libraries/LibGL/Shader.cpp b/Userland/Libraries/LibGL/Shader.cpp
index 8742c1e8cb..904bedce43 100644
--- a/Userland/Libraries/LibGL/Shader.cpp
+++ b/Userland/Libraries/LibGL/Shader.cpp
@@ -157,7 +157,7 @@ void GLContext::gl_link_program(GLuint program)
// FIXME: implement check "GL_INVALID_OPERATION is generated if program is the currently active program object and transform feedback mode is active."
// NOTE: We are ignoring the link result since this is tracked inside the program object
- (void)program_it->value->link();
+ (void)program_it->value->link(*m_rasterizer);
}
void GLContext::gl_use_program(GLuint program)
diff --git a/Userland/Libraries/LibGL/Shaders/Program.cpp b/Userland/Libraries/LibGL/Shaders/Program.cpp
index 8a76a258fd..27d77d0b5f 100644
--- a/Userland/Libraries/LibGL/Shaders/Program.cpp
+++ b/Userland/Libraries/LibGL/Shaders/Program.cpp
@@ -48,7 +48,7 @@ ErrorOr<void> Program::attach_shader(Shader& shader)
return {};
}
-ErrorOr<void> Program::link()
+ErrorOr<void> Program::link(GPU::Device& device)
{
m_info_log = TRY(String::from_utf8(""sv));
@@ -86,6 +86,9 @@ ErrorOr<void> Program::link()
m_linked_fragment_shader = linked_fragment_shader_or_error.release_value();
+ m_gpu_vertex_shader = TRY(device.create_shader({}));
+ m_gpu_fragment_shader = TRY(device.create_shader({}));
+
m_link_status = true;
return {};
}
diff --git a/Userland/Libraries/LibGL/Shaders/Program.h b/Userland/Libraries/LibGL/Shaders/Program.h
index 9c3b217add..5ee44e51a4 100644
--- a/Userland/Libraries/LibGL/Shaders/Program.h
+++ b/Userland/Libraries/LibGL/Shaders/Program.h
@@ -15,6 +15,8 @@
#include <AK/Vector.h>
#include <LibGL/Shaders/Shader.h>
#include <LibGLSL/LinkedShader.h>
+#include <LibGPU/Device.h>
+#include <LibGPU/Shader.h>
namespace GL {
@@ -24,7 +26,7 @@ public:
bool is_shader_attached(Shader const&) const;
ErrorOr<void> attach_shader(Shader&);
- ErrorOr<void> link();
+ ErrorOr<void> link(GPU::Device&);
bool link_status() const { return m_link_status; }
size_t info_log_length() const;
@@ -35,6 +37,8 @@ private:
Optional<String> m_info_log;
OwnPtr<GLSL::LinkedShader> m_linked_vertex_shader;
OwnPtr<GLSL::LinkedShader> m_linked_fragment_shader;
+ RefPtr<GPU::Shader> m_gpu_vertex_shader;
+ RefPtr<GPU::Shader> m_gpu_fragment_shader;
};
}