Skip to content

Commit

Permalink
Merge pull request #16080 from unknownbrackets/softgpu-spline
Browse files Browse the repository at this point in the history
softgpu: Avoid unnecessary flushing for curves
  • Loading branch information
hrydgard authored Sep 22, 2022
2 parents 9cf35f0 + fc39f04 commit e9bcefb
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 3 deletions.
2 changes: 2 additions & 0 deletions GPU/Common/DrawEngineCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,8 @@ class DrawEngineCommon {

bool useHWTransform_ = false;
bool useHWTessellation_ = false;
// Used to prevent unnecessary flushing in softgpu.
bool flushOnParams_ = true;

// Vertex collector buffers
u8 *decoded = nullptr;
Expand Down
3 changes: 2 additions & 1 deletion GPU/Common/SplineCommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,8 @@ void DrawEngineCommon::SubmitCurve(const void *control_points, const void *indic
if (output.count)
DispatchSubmitPrim(output.vertices, output.indices, PatchPrimToPrim(surface.primType), output.count, vertTypeID, gstate.getCullMode(), &generatedBytesRead);

DispatchFlush();
if (flushOnParams_)
DispatchFlush();

if (origVertType & GE_VTYPE_TC_MASK) {
gstate_c.uv = prevUVScale;
Expand Down
6 changes: 4 additions & 2 deletions GPU/GPUCommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1942,7 +1942,8 @@ void GPUCommon::Execute_Bezier(u32 op, u32 diff) {
}

// Can't flush after setting gstate_c.submitType below since it'll be a mess - it must be done already.
drawEngineCommon_->DispatchFlush();
if (flushOnParams_)
drawEngineCommon_->DispatchFlush();

Spline::BezierSurface surface;
surface.tess_u = gstate.getPatchDivisionU();
Expand Down Expand Up @@ -2014,7 +2015,8 @@ void GPUCommon::Execute_Spline(u32 op, u32 diff) {
}

// Can't flush after setting gstate_c.submitType below since it'll be a mess - it must be done already.
drawEngineCommon_->DispatchFlush();
if (flushOnParams_)
drawEngineCommon_->DispatchFlush();

Spline::SplineSurface surface;
surface.tess_u = gstate.getPatchDivisionU();
Expand Down
1 change: 1 addition & 0 deletions GPU/Software/TransformUnit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ SoftwareDrawEngine::SoftwareDrawEngine() {
// All this is a LOT of memory, need to see if we can cut down somehow. Used for splines.
decoded = (u8 *)AllocateMemoryPages(DECODED_VERTEX_BUFFER_SIZE, MEM_PROT_READ | MEM_PROT_WRITE);
decIndex = (u16 *)AllocateMemoryPages(DECODED_INDEX_BUFFER_SIZE, MEM_PROT_READ | MEM_PROT_WRITE);
flushOnParams_ = false;
}

SoftwareDrawEngine::~SoftwareDrawEngine() {
Expand Down

0 comments on commit e9bcefb

Please sign in to comment.