mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 17:45:11 +02:00
60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "Common/CommonTypes.h"
|
|
#include "GPU/ge_constants.h"
|
|
|
|
struct DepthScreenVertex {
|
|
int x;
|
|
int y;
|
|
int z;
|
|
};
|
|
|
|
// X11.h, sigh.
|
|
#ifdef Always
|
|
#undef Always
|
|
#endif
|
|
|
|
// We only need to support these three modes.
|
|
enum class ZCompareMode : u8 {
|
|
Greater, // Most common
|
|
Less, // Less common
|
|
Always, // Mostly used for clears
|
|
};
|
|
|
|
struct DepthScissor {
|
|
u16 x1;
|
|
u16 y1;
|
|
u16 x2;
|
|
u16 y2;
|
|
|
|
DepthScissor Tile(int tile, int numTiles) const;
|
|
};
|
|
|
|
struct DepthDraw {
|
|
u32 depthAddr;
|
|
u16 depthStride;
|
|
u8 cullMode;
|
|
GEPrimitiveType prim;
|
|
ZCompareMode compareMode;
|
|
bool cullEnabled;
|
|
DepthScissor scissor;
|
|
int vertexOffset;
|
|
int indexOffset;
|
|
int vertexCount;
|
|
};
|
|
|
|
// Specialized, very limited depth-only rasterizer.
|
|
// Meant to run in parallel with hardware rendering, in games that read back the depth buffer
|
|
// for effects like lens flare.
|
|
// So, we can be quite inaccurate without any issues, and skip a lot of functionality.
|
|
|
|
class VertexDecoder;
|
|
struct TransformedVertex;
|
|
|
|
int DepthRasterClipIndexedTriangles(int *tx, int *ty, float *tz, const float *transformed, const uint16_t *indexBuffer, const DepthDraw &draw, const DepthScissor scissor);
|
|
int DepthRasterClipIndexedRectangles(int *tx, int *ty, float *tz, const float *transformed, const uint16_t *indexBuffer, const DepthDraw &draw, const DepthScissor scissor);
|
|
void DecodeAndTransformForDepthRaster(float *dest, const float *worldviewproj, const void *vertexData, int indexLowerBound, int indexUpperBound, const VertexDecoder *dec, u32 vertTypeID);
|
|
void TransformPredecodedForDepthRaster(float *dest, const float *worldviewproj, const void *decodedVertexData, const VertexDecoder *dec, int count);
|
|
void ConvertPredecodedThroughForDepthRaster(float *dest, const void *decodedVertexData, const VertexDecoder *dec, int count);
|
|
void DepthRasterScreenVerts(uint16_t *depth, int depthStride, const int *tx, const int *ty, const float *tz, int count, const DepthDraw &draw, const DepthScissor scissor, bool lowQ);
|