mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:17:46 +00:00
LibSoftGPU: Implement shader processor for SoftGPU ISA
This adds a shader processor that executes our ISA when a fragment shader is currently bound to the device.
This commit is contained in:
parent
1e548a84d6
commit
b18bf702ea
5 changed files with 170 additions and 0 deletions
46
Userland/Libraries/LibSoftGPU/ShaderProcessor.h
Normal file
46
Userland/Libraries/LibSoftGPU/ShaderProcessor.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Array.h>
|
||||
#include <AK/SIMD.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <LibGPU/Config.h>
|
||||
#include <LibSoftGPU/PixelQuad.h>
|
||||
#include <LibSoftGPU/Sampler.h>
|
||||
|
||||
namespace SoftGPU {
|
||||
|
||||
class Shader;
|
||||
|
||||
class ShaderProcessor final {
|
||||
public:
|
||||
ShaderProcessor(Array<Sampler, GPU::NUM_TEXTURE_UNITS>& samplers)
|
||||
: m_samplers { samplers }
|
||||
{
|
||||
}
|
||||
|
||||
void execute(PixelQuad&, Shader const&);
|
||||
|
||||
ALWAYS_INLINE AK::SIMD::f32x4 get_register(u16 index) const { return m_registers[index]; }
|
||||
ALWAYS_INLINE void set_register(u16 index, AK::SIMD::f32x4 value) { m_registers[index] = value; }
|
||||
|
||||
private:
|
||||
void op_input(PixelQuad const&, Instruction::Arguments);
|
||||
void op_output(PixelQuad&, Instruction::Arguments);
|
||||
void op_sample2d(Instruction::Arguments);
|
||||
void op_swizzle(Instruction::Arguments);
|
||||
void op_add(Instruction::Arguments);
|
||||
void op_sub(Instruction::Arguments);
|
||||
void op_mul(Instruction::Arguments);
|
||||
void op_div(Instruction::Arguments);
|
||||
|
||||
Array<Sampler, GPU::NUM_TEXTURE_UNITS>& m_samplers;
|
||||
AK::SIMD::f32x4 m_registers[1024];
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue