mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Pass the limit on the number of indices to generate to BuildDrawingParams.
This commit is contained in:
parent
cf5d76faf5
commit
db94b0b696
8 changed files with 24 additions and 19 deletions
|
@ -241,7 +241,9 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ComputeDrawcallsHash() const;
|
inline int RemainingIndices(const uint16_t *inds) const {
|
||||||
|
return DECODED_INDEX_BUFFER_SIZE / sizeof(uint16_t) - (inds - decIndex_);
|
||||||
|
}
|
||||||
|
|
||||||
bool useHWTransform_ = false;
|
bool useHWTransform_ = false;
|
||||||
bool useHWTessellation_ = false;
|
bool useHWTessellation_ = false;
|
||||||
|
|
|
@ -17,10 +17,10 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#include "Common/CPUDetect.h"
|
#include "Common/CPUDetect.h"
|
||||||
#include "Common/Math/math_util.h"
|
#include "Common/Math/math_util.h"
|
||||||
#include "Common/GPU/OpenGL/GLFeatures.h"
|
#include "Common/GPU/OpenGL/GLFeatures.h"
|
||||||
|
|
||||||
#include "Core/Config.h"
|
#include "Core/Config.h"
|
||||||
#include "GPU/GPUState.h"
|
#include "GPU/GPUState.h"
|
||||||
#include "GPU/Math3D.h"
|
#include "GPU/Math3D.h"
|
||||||
|
@ -483,8 +483,7 @@ void SoftwareTransform::Transform(int prim, u32 vertType, const DecVtxFormat &de
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: The viewport must be up to date!
|
void SoftwareTransform::BuildDrawingParams(int prim, int vertexCount, u32 vertType, u16 *&inds, int indsSize, int &numDecodedVerts, SoftwareTransformResult *result) {
|
||||||
void SoftwareTransform::BuildDrawingParams(int prim, int vertexCount, u32 vertType, u16 *&inds, int &numDecodedVerts, SoftwareTransformResult *result) {
|
|
||||||
TransformedVertex *transformed = params_.transformed;
|
TransformedVertex *transformed = params_.transformed;
|
||||||
TransformedVertex *transformedExpanded = params_.transformedExpanded;
|
TransformedVertex *transformedExpanded = params_.transformedExpanded;
|
||||||
bool throughmode = (vertType & GE_VTYPE_THROUGH_MASK) != 0;
|
bool throughmode = (vertType & GE_VTYPE_THROUGH_MASK) != 0;
|
||||||
|
@ -497,7 +496,7 @@ void SoftwareTransform::BuildDrawingParams(int prim, int vertexCount, u32 vertTy
|
||||||
bool useBufferedRendering = fbman->UseBufferedRendering();
|
bool useBufferedRendering = fbman->UseBufferedRendering();
|
||||||
|
|
||||||
if (prim == GE_PRIM_RECTANGLES) {
|
if (prim == GE_PRIM_RECTANGLES) {
|
||||||
ExpandRectangles(vertexCount, numDecodedVerts, inds, transformed, transformedExpanded, numTrans, throughmode, &result->pixelMapped);
|
ExpandRectangles(vertexCount, numDecodedVerts, inds, indsSize, transformed, transformedExpanded, numTrans, throughmode, &result->pixelMapped);
|
||||||
result->drawBuffer = transformedExpanded;
|
result->drawBuffer = transformedExpanded;
|
||||||
result->drawIndexed = true;
|
result->drawIndexed = true;
|
||||||
|
|
||||||
|
@ -515,12 +514,12 @@ void SoftwareTransform::BuildDrawingParams(int prim, int vertexCount, u32 vertTy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (prim == GE_PRIM_POINTS) {
|
} else if (prim == GE_PRIM_POINTS) {
|
||||||
ExpandPoints(vertexCount, numDecodedVerts, inds, transformed, transformedExpanded, numTrans, throughmode);
|
ExpandPoints(vertexCount, numDecodedVerts, inds, indsSize, transformed, transformedExpanded, numTrans, throughmode);
|
||||||
result->drawBuffer = transformedExpanded;
|
result->drawBuffer = transformedExpanded;
|
||||||
result->drawIndexed = true;
|
result->drawIndexed = true;
|
||||||
result->pixelMapped = false;
|
result->pixelMapped = false;
|
||||||
} else if (prim == GE_PRIM_LINES) {
|
} else if (prim == GE_PRIM_LINES) {
|
||||||
ExpandLines(vertexCount, numDecodedVerts, inds, transformed, transformedExpanded, numTrans, throughmode);
|
ExpandLines(vertexCount, numDecodedVerts, inds, indsSize, transformed, transformedExpanded, numTrans, throughmode);
|
||||||
result->drawBuffer = transformedExpanded;
|
result->drawBuffer = transformedExpanded;
|
||||||
result->drawIndexed = true;
|
result->drawIndexed = true;
|
||||||
result->pixelMapped = false;
|
result->pixelMapped = false;
|
||||||
|
@ -645,7 +644,7 @@ void SoftwareTransform::CalcCullParams(float &minZValue, float &maxZValue) {
|
||||||
std::swap(minZValue, maxZValue);
|
std::swap(minZValue, maxZValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoftwareTransform::ExpandRectangles(int vertexCount, int &numDecodedVerts, u16 *&inds, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode, bool *pixelMappedExactly) {
|
void SoftwareTransform::ExpandRectangles(int vertexCount, int &numDecodedVerts, u16 *&inds, int indsSize, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode, bool *pixelMappedExactly) {
|
||||||
// Rectangles always need 2 vertices, disregard the last one if there's an odd number.
|
// Rectangles always need 2 vertices, disregard the last one if there's an odd number.
|
||||||
vertexCount = vertexCount & ~1;
|
vertexCount = vertexCount & ~1;
|
||||||
numTrans = 0;
|
numTrans = 0;
|
||||||
|
@ -735,7 +734,7 @@ void SoftwareTransform::ExpandRectangles(int vertexCount, int &numDecodedVerts,
|
||||||
*pixelMappedExactly = pixelMapped;
|
*pixelMappedExactly = pixelMapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoftwareTransform::ExpandLines(int vertexCount, int &numDecodedVerts, u16 *&inds, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode) {
|
void SoftwareTransform::ExpandLines(int vertexCount, int &numDecodedVerts, u16 *&inds, int indsSize, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode) {
|
||||||
// Lines always need 2 vertices, disregard the last one if there's an odd number.
|
// Lines always need 2 vertices, disregard the last one if there's an odd number.
|
||||||
vertexCount = vertexCount & ~1;
|
vertexCount = vertexCount & ~1;
|
||||||
numTrans = 0;
|
numTrans = 0;
|
||||||
|
@ -860,7 +859,7 @@ void SoftwareTransform::ExpandLines(int vertexCount, int &numDecodedVerts, u16 *
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SoftwareTransform::ExpandPoints(int vertexCount, int &maxIndex, u16 *&inds, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode) {
|
void SoftwareTransform::ExpandPoints(int vertexCount, int &maxIndex, u16 *&inds, int indsSize, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode) {
|
||||||
numTrans = 0;
|
numTrans = 0;
|
||||||
TransformedVertex *trans = &transformedExpanded[0];
|
TransformedVertex *trans = &transformedExpanded[0];
|
||||||
|
|
||||||
|
|
|
@ -68,13 +68,16 @@ public:
|
||||||
|
|
||||||
void SetProjMatrix(const float mtx[14], bool invertedX, bool invertedY, const Lin::Vec3 &trans, const Lin::Vec3 &scale);
|
void SetProjMatrix(const float mtx[14], bool invertedX, bool invertedY, const Lin::Vec3 &trans, const Lin::Vec3 &scale);
|
||||||
void Transform(int prim, u32 vertexType, const DecVtxFormat &decVtxFormat, int numDecodedVerts, SoftwareTransformResult *result);
|
void Transform(int prim, u32 vertexType, const DecVtxFormat &decVtxFormat, int numDecodedVerts, SoftwareTransformResult *result);
|
||||||
void BuildDrawingParams(int prim, int vertexCount, u32 vertType, u16 *&inds, int &numDecodedVerts, SoftwareTransformResult *result);
|
|
||||||
|
// NOTE: The viewport must be up to date!
|
||||||
|
// indsSize is in indices, not bytes.
|
||||||
|
void BuildDrawingParams(int prim, int vertexCount, u32 vertType, u16 *&inds, int indsSize, int &numDecodedVerts, SoftwareTransformResult *result);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void CalcCullParams(float &minZValue, float &maxZValue);
|
void CalcCullParams(float &minZValue, float &maxZValue);
|
||||||
void ExpandRectangles(int vertexCount, int &numDecodedVerts, u16 *&inds, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode, bool *pixelMappedExactly);
|
void ExpandRectangles(int vertexCount, int &numDecodedVerts, u16 *&inds, int indsSize, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode, bool *pixelMappedExactly);
|
||||||
void ExpandLines(int vertexCount, int &numDecodedVerts, u16 *&inds, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode);
|
void ExpandLines(int vertexCount, int &numDecodedVerts, u16 *&inds, int indsSize, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode);
|
||||||
void ExpandPoints(int vertexCount, int &numDecodedVerts, u16 *&inds, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode);
|
void ExpandPoints(int vertexCount, int &numDecodedVerts, u16 *&inds, int indsSize, const TransformedVertex *transformed, TransformedVertex *transformedExpanded, int &numTrans, bool throughmode);
|
||||||
|
|
||||||
const SoftwareTransformParams ¶ms_;
|
const SoftwareTransformParams ¶ms_;
|
||||||
Lin::Matrix4x4 projMatrix_;
|
Lin::Matrix4x4 projMatrix_;
|
||||||
|
|
|
@ -418,7 +418,7 @@ void DrawEngineD3D11::DoFlush() {
|
||||||
ApplyDrawState(prim);
|
ApplyDrawState(prim);
|
||||||
|
|
||||||
if (result.action == SW_NOT_READY)
|
if (result.action == SW_NOT_READY)
|
||||||
swTransform.BuildDrawingParams(prim, vertexCount, dec_->VertexType(), inds, numDecodedVerts_, &result);
|
swTransform.BuildDrawingParams(prim, vertexCount, dec_->VertexType(), inds, RemainingIndices(inds), numDecodedVerts_, &result);
|
||||||
if (result.setSafeSize)
|
if (result.setSafeSize)
|
||||||
framebufferManager_->SetSafeSize(result.safeWidth, result.safeHeight);
|
framebufferManager_->SetSafeSize(result.safeWidth, result.safeHeight);
|
||||||
|
|
||||||
|
|
|
@ -374,7 +374,7 @@ void DrawEngineDX9::DoFlush() {
|
||||||
ApplyDrawState(prim);
|
ApplyDrawState(prim);
|
||||||
|
|
||||||
if (result.action == SW_NOT_READY)
|
if (result.action == SW_NOT_READY)
|
||||||
swTransform.BuildDrawingParams(prim, vertexCount, dec_->VertexType(), inds, numDecodedVerts_, &result);
|
swTransform.BuildDrawingParams(prim, vertexCount, dec_->VertexType(), inds, RemainingIndices(inds), numDecodedVerts_, &result);
|
||||||
if (result.setSafeSize)
|
if (result.setSafeSize)
|
||||||
framebufferManager_->SetSafeSize(result.safeWidth, result.safeHeight);
|
framebufferManager_->SetSafeSize(result.safeWidth, result.safeHeight);
|
||||||
|
|
||||||
|
|
|
@ -403,7 +403,7 @@ void DrawEngineGLES::DoFlush() {
|
||||||
ApplyDrawState(prim);
|
ApplyDrawState(prim);
|
||||||
|
|
||||||
if (result.action == SW_NOT_READY)
|
if (result.action == SW_NOT_READY)
|
||||||
swTransform.BuildDrawingParams(prim, vertexCount, dec_->VertexType(), inds, numDecodedVerts_, &result);
|
swTransform.BuildDrawingParams(prim, vertexCount, dec_->VertexType(), inds, RemainingIndices(inds), numDecodedVerts_, &result);
|
||||||
if (result.setSafeSize)
|
if (result.setSafeSize)
|
||||||
framebufferManager_->SetSafeSize(result.safeWidth, result.safeHeight);
|
framebufferManager_->SetSafeSize(result.safeWidth, result.safeHeight);
|
||||||
|
|
||||||
|
|
|
@ -499,7 +499,7 @@ public:
|
||||||
// If we're only using a subset of verts, it's better to decode with random access (usually.)
|
// If we're only using a subset of verts, it's better to decode with random access (usually.)
|
||||||
// However, if we're reusing a lot of verts, we should read and cache them.
|
// However, if we're reusing a lot of verts, we should read and cache them.
|
||||||
useCache_ = useIndices_ && vertex_count > (upperBound_ - lowerBound_ + 1);
|
useCache_ = useIndices_ && vertex_count > (upperBound_ - lowerBound_ + 1);
|
||||||
if (useCache_ && cached_.size() < upperBound_ - lowerBound_ + 1)
|
if (useCache_ && (int)cached_.size() < upperBound_ - lowerBound_ + 1)
|
||||||
cached_.resize(std::max(128, upperBound_ - lowerBound_ + 1));
|
cached_.resize(std::max(128, upperBound_ - lowerBound_ + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -430,7 +430,8 @@ void DrawEngineVulkan::DoFlush() {
|
||||||
result.action = SW_NOT_READY;
|
result.action = SW_NOT_READY;
|
||||||
|
|
||||||
if (result.action == SW_NOT_READY) {
|
if (result.action == SW_NOT_READY) {
|
||||||
swTransform.BuildDrawingParams(prim, vertexCount, dec_->VertexType(), inds, numDecodedVerts_, &result);
|
// decIndex_ here is always equal to inds currently, but it may not be in the future.
|
||||||
|
swTransform.BuildDrawingParams(prim, vertexCount, dec_->VertexType(), inds, RemainingIndices(inds), numDecodedVerts_, &result);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.setSafeSize)
|
if (result.setSafeSize)
|
||||||
|
|
Loading…
Add table
Reference in a new issue