Implement Geometry shaders (#280)
* Implement Geometry shaders * Add EmitVertex() and EndPrimitive() * Read output geometry data from header * Stub Vmad * Add Iadd_I32 * Stub Mov_S (S2R) * Stub Isberd * Change vertex index to gpr39 in Abuf * Add stub messages for consistency * Do not print input block when there is no attributes * Use GL_ARB_enhanced_layouts * Skip geometry shaders when there's no GL_ARB_enhanced_layouts * Address feedback * Address feedback
This commit is contained in:
parent
bdb6cbb435
commit
cd203e98f2
15 changed files with 426 additions and 48 deletions
|
@ -118,20 +118,20 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
|||
|
||||
if (IsDualVp)
|
||||
{
|
||||
ShaderDumper.Dump(Memory, Position + 0x50, Type, "a");
|
||||
ShaderDumper.Dump(Memory, PositionB + 0x50, Type, "b");
|
||||
ShaderDumper.Dump(Memory, Position, Type, "a");
|
||||
ShaderDumper.Dump(Memory, PositionB, Type, "b");
|
||||
|
||||
Program = Decompiler.Decompile(
|
||||
Memory,
|
||||
Position + 0x50,
|
||||
PositionB + 0x50,
|
||||
Position,
|
||||
PositionB,
|
||||
Type);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShaderDumper.Dump(Memory, Position + 0x50, Type);
|
||||
ShaderDumper.Dump(Memory, Position, Type);
|
||||
|
||||
Program = Decompiler.Decompile(Memory, Position + 0x50, Type);
|
||||
Program = Decompiler.Decompile(Memory, Position, Type);
|
||||
}
|
||||
|
||||
return new ShaderStage(
|
||||
|
@ -198,6 +198,16 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
|||
|
||||
private void Bind(ShaderStage Stage)
|
||||
{
|
||||
if (Stage.Type == GalShaderType.Geometry)
|
||||
{
|
||||
//Enhanced layouts are required for Geometry shaders
|
||||
//skip this stage if current driver has no ARB_enhanced_layouts
|
||||
if (!OGLExtension.HasEnhancedLayouts())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch (Stage.Type)
|
||||
{
|
||||
case GalShaderType.Vertex: Current.Vertex = Stage; break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue