1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 21:57:35 +00:00

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.
This commit is contained in:
Stephan Unverwerth 2022-09-14 23:48:10 +02:00 committed by Andrew Kaster
parent 4ad41e6680
commit 93ab2db80f
11 changed files with 96 additions and 3 deletions

View file

@ -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)

View file

@ -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 {};
}

View file

@ -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;
};
}