Rewrote the LLVM triangle drawer to use the data from the triangle setup function
This commit is contained in:
parent
145c0a6d9e
commit
c643238b86
7 changed files with 1179 additions and 724 deletions
|
|
@ -30,6 +30,91 @@ struct SSATriVertex
|
|||
SSAFloat varying[TriVertex::NumVarying];
|
||||
};
|
||||
|
||||
struct SSAStepVariables
|
||||
{
|
||||
SSAFloat W;
|
||||
SSAFloat Varying[TriVertex::NumVarying];
|
||||
};
|
||||
|
||||
class DrawTriangleCodegen : public DrawerCodegen
|
||||
{
|
||||
public:
|
||||
void Generate(TriDrawVariant variant, TriBlendMode blendmode, bool truecolor, SSAValue args, SSAValue thread_data);
|
||||
|
||||
private:
|
||||
void LoadArgs(SSAValue args, SSAValue thread_data);
|
||||
SSATriVertex LoadTriVertex(SSAValue v);
|
||||
void LoadUniforms(SSAValue uniforms);
|
||||
void CalculateGradients();
|
||||
SSAFloat FindGradientX(SSAFloat x0, SSAFloat y0, SSAFloat x1, SSAFloat y1, SSAFloat x2, SSAFloat y2, SSAFloat c0, SSAFloat c1, SSAFloat c2);
|
||||
SSAFloat FindGradientY(SSAFloat x0, SSAFloat y0, SSAFloat x1, SSAFloat y1, SSAFloat x2, SSAFloat y2, SSAFloat c0, SSAFloat c1, SSAFloat c2);
|
||||
void DrawFullSpans();
|
||||
void DrawPartialBlocks();
|
||||
|
||||
SSAVec4i ProcessPixel32(SSAVec4i bg, SSAInt *varying);
|
||||
SSAInt ProcessPixel8(SSAInt bg, SSAInt *varying);
|
||||
SSAVec4i TranslateSample32(SSAInt *varying);
|
||||
SSAInt TranslateSample8(SSAInt *varying);
|
||||
SSAVec4i Sample32(SSAInt *varying);
|
||||
SSAInt Sample8(SSAInt *varying);
|
||||
SSAInt Shade8(SSAInt c);
|
||||
SSAVec4i ToBgra(SSAInt index);
|
||||
SSAInt ToPal8(SSAVec4i c);
|
||||
SSAVec4i FadeOut(SSAInt frac, SSAVec4i color);
|
||||
|
||||
SSAStack<SSAInt> stack_i, stack_y, stack_x;
|
||||
SSAStack<SSAFloat> stack_posYW, stack_posXW;
|
||||
SSAStack<SSAFloat> stack_posYVarying[TriVertex::NumVarying];
|
||||
SSAStack<SSAFloat> stack_posXVarying[TriVertex::NumVarying];
|
||||
SSAStack<SSAInt> stack_varyingPos[TriVertex::NumVarying];
|
||||
SSAStack<SSAInt> stack_lightpos;
|
||||
SSAStack<SSAUBytePtr> stack_dest;
|
||||
SSAStack<SSAIntPtr> stack_subsector;
|
||||
|
||||
SSAStepVariables gradientX, gradientY, start;
|
||||
SSAFloat shade, globVis;
|
||||
|
||||
SSAInt currentlight;
|
||||
SSAUBytePtr currentcolormap;
|
||||
|
||||
SSAUBytePtr destOrg;
|
||||
SSAIntPtr subsectorGBuffer;
|
||||
SSAInt pitch;
|
||||
SSATriVertex v1;
|
||||
SSATriVertex v2;
|
||||
SSATriVertex v3;
|
||||
SSAUBytePtr texturePixels;
|
||||
SSAInt textureWidth;
|
||||
SSAInt textureHeight;
|
||||
SSAUBytePtr translation;
|
||||
SSAInt color, srcalpha, destalpha;
|
||||
|
||||
SSAInt light;
|
||||
SSAInt subsectorDepth;
|
||||
SSAShadeConstants shade_constants;
|
||||
SSABool is_simple_shade;
|
||||
SSABool is_nearest_filter;
|
||||
SSABool is_fixed_light;
|
||||
|
||||
SSAUBytePtr Colormaps;
|
||||
SSAUBytePtr RGB32k;
|
||||
SSAUBytePtr BaseColors;
|
||||
|
||||
SSAInt numSpans;
|
||||
SSAInt numBlocks;
|
||||
SSAInt startX;
|
||||
SSAInt startY;
|
||||
SSAValue fullSpans; // TriFullSpan[]
|
||||
SSAValue partialBlocks; // TriPartialBlock[]
|
||||
|
||||
TriDrawVariant variant;
|
||||
TriBlendMode blendmode;
|
||||
bool truecolor;
|
||||
int pixelsize;
|
||||
};
|
||||
|
||||
#if 0
|
||||
|
||||
class DrawTriangleCodegen : public DrawerCodegen
|
||||
{
|
||||
public:
|
||||
|
|
@ -154,3 +239,5 @@ private:
|
|||
SSAUBytePtr StencilBlock;
|
||||
SSAIntPtr StencilBlockMask;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue