From: <m97...@us...> - 2008-01-21 20:37:46
|
Revision: 7566 http://openmsx.svn.sourceforge.net/openmsx/?rev=7566&view=rev Author: m9710797 Date: 2008-01-21 12:37:46 -0800 (Mon, 21 Jan 2008) Log Message: ----------- oved calls to OutputSurface::lock() / unlock() to a lower level Modified Paths: -------------- openmsx/trunk/ChangeLog openmsx/trunk/src/console/SDLFont.cc openmsx/trunk/src/video/FBPostProcessor.cc openmsx/trunk/src/video/HQCommon.hh openmsx/trunk/src/video/LowScaler.cc openmsx/trunk/src/video/RGBTriplet3xScaler.cc openmsx/trunk/src/video/SDLImage.cc openmsx/trunk/src/video/SDLSnow.cc openmsx/trunk/src/video/SDLVisibleSurface.cc openmsx/trunk/src/video/SaI2xScaler.cc openmsx/trunk/src/video/SaI3xScaler.cc openmsx/trunk/src/video/Scale2xScaler.cc openmsx/trunk/src/video/Scale3xScaler.cc openmsx/trunk/src/video/Scaler2.cc openmsx/trunk/src/video/Scaler3.cc openmsx/trunk/src/video/Simple3xScaler.cc openmsx/trunk/src/video/SimpleScaler.cc Modified: openmsx/trunk/ChangeLog =================================================================== --- openmsx/trunk/ChangeLog 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/ChangeLog 2008-01-21 20:37:46 UTC (rev 7566) @@ -21,9 +21,15 @@ SDL_LockSurface() and SDL_UnlockSurface() functions. It for example allows to check that getLinePtrDirect() is only called on a locked surface. - The first two changes allow for easier refactorings. The last change - is a step towards enabling the use of HW accelerated SDL-blit - functions on the GP2X port. + The first two changes allow for easier refactorings. The last change + is a step towards enabling the use of HW accelerated SDL-blit + functions on the GP2X port. + * Move calls to OutputSurface::lock() / unlock() to a lower level: + Every function that wants to access pixels directly should now make + sure the surface is locked. Similarly a function that wants to use + blit operations must unlock the surface. This allows for the + minimal amount of locked<->unlocked transitions. (Locking while + already locked or unlocking while already unlocked is very fast.) 2008-01-16 Alex Wulms * Added German keyboard map (unicodemap.de): Modified: openmsx/trunk/src/console/SDLFont.cc =================================================================== --- openmsx/trunk/src/console/SDLFont.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/console/SDLFont.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -92,7 +92,6 @@ } destRect.x += charWidth; } - output.lock(); } } // namespace openmsx Modified: openmsx/trunk/src/video/FBPostProcessor.cc =================================================================== --- openmsx/trunk/src/video/FBPostProcessor.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/FBPostProcessor.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -230,6 +230,7 @@ unsigned height = screen.getHeight(); unsigned width = screen.getWidth(); + screen.lock(); for (unsigned y = 0; y < height; ++y) { Pixel* buf = screen.getLinePtrDirect<Pixel>(y); drawNoiseLine(buf, buf, &noiseBuf[noiseShift[y]], width); Modified: openmsx/trunk/src/video/HQCommon.hh =================================================================== --- openmsx/trunk/src/video/HQCommon.hh 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/HQCommon.hh 2008-01-21 20:37:46 UTC (rev 7566) @@ -234,6 +234,7 @@ typename HQScale::EdgeOp edgeOp; calcInitialEdges(srcPrev, srcCurr, srcWidth, edgeBuf, edgeOp); + dst.lock(); for (unsigned dstY = dstStartY; dstY < dstEndY; srcY += 1, dstY += 2) { Pixel buf0[2 * 1024], buf1[2 * 1024]; const Pixel* srcNext = src.getLinePtr<Pixel>(srcY + 1, srcWidth); @@ -268,6 +269,7 @@ typename HQScale::EdgeOp edgeOp; calcInitialEdges(srcPrev, srcCurr, srcWidth, edgeBuf, edgeOp); + dst.lock(); for (unsigned dstY = dstStartY; dstY < dstEndY; srcY += 1, dstY += 3) { Pixel buf0[3 * 1024], buf1[3 * 1024], buf2[3 * 1024]; const Pixel* srcNext = src.getLinePtr<Pixel>(srcY + 1, srcWidth); Modified: openmsx/trunk/src/video/LowScaler.cc =================================================================== --- openmsx/trunk/src/video/LowScaler.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/LowScaler.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -33,6 +33,7 @@ FrameSource& src, unsigned srcStartY, unsigned /*srcEndY*/, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); MemoryOps::MemSet<Pixel, MemoryOps::STREAMING> memset; for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 1, dstY += 1) { @@ -47,6 +48,7 @@ FrameSource& src, unsigned srcStartY, unsigned /*srcEndY*/, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); MemoryOps::MemSet<Pixel, MemoryOps::STREAMING> memset; for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 2, dstY += 1) { @@ -64,6 +66,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp scale) { + dst.lock(); for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; ++srcY, ++dstY) { const Pixel* srcLine = src.getLinePtr<Pixel>(srcY, srcWidth); @@ -78,6 +81,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, PixelOperations<Pixel> ops, ScaleOp scale) { + dst.lock(); BlendLines<Pixel> blend(ops); for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 2, dstY += 1) { @@ -127,6 +131,7 @@ // No need to scale to local buffer first, like doScaleDV does. // TODO: Even so, this scale mode is so rare, is it really worth having // optimized code for? + dst.lock(); BlendLines<Pixel> blend(pixelOps); while (dstStartY < dstEndY) { const Pixel* srcLine0 = src.getLinePtr<Pixel>(srcStartY++, srcWidth); Modified: openmsx/trunk/src/video/RGBTriplet3xScaler.cc =================================================================== --- openmsx/trunk/src/video/RGBTriplet3xScaler.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/RGBTriplet3xScaler.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -93,6 +93,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp scale) { + dst.lock(); recalcBlur(); unsigned tmpWidth = dst.getWidth() / 3; @@ -136,6 +137,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp scale) { + dst.lock(); recalcBlur(); unsigned tmpWidth = dst.getWidth() / 3; @@ -285,6 +287,7 @@ FrameSource& src, unsigned srcStartY, unsigned srcEndY, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); recalcBlur(); int scanlineFactor = settings.getScanlineFactor(); @@ -325,6 +328,7 @@ FrameSource& src, unsigned srcStartY, unsigned /*srcEndY*/, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); recalcBlur(); int scanlineFactor = settings.getScanlineFactor(); for (unsigned srcY = srcStartY, dstY = dstStartY; Modified: openmsx/trunk/src/video/SDLImage.cc =================================================================== --- openmsx/trunk/src/video/SDLImage.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/SDLImage.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -88,7 +88,6 @@ SDL_SetAlpha(workImage, SDL_SRCALPHA, alpha); SDL_BlitSurface(workImage, NULL, outputSurface, &rect); } - output.lock(); } Modified: openmsx/trunk/src/video/SDLSnow.cc =================================================================== --- openmsx/trunk/src/video/SDLSnow.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/SDLSnow.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -41,9 +41,8 @@ const unsigned width = output.getWidth(); const unsigned height = output.getHeight(); for (unsigned y = 0; y < height; y += 2) { - Pixel* dummy = 0; - Pixel* p0 = output.getLinePtrDirect(y + 0, dummy); - Pixel* p1 = output.getLinePtrDirect(y + 1, dummy); + Pixel* p0 = output.getLinePtrDirect<Pixel>(y + 0); + Pixel* p1 = output.getLinePtrDirect<Pixel>(y + 1); for (unsigned x = 0; x < width; x += 2) { byte a = byte(random()); p0[x + 0] = p0[x + 1] = gray[a]; Modified: openmsx/trunk/src/video/SDLVisibleSurface.cc =================================================================== --- openmsx/trunk/src/video/SDLVisibleSurface.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/SDLVisibleSurface.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -24,7 +24,7 @@ void SDLVisibleSurface::init() { - lock(); + // nothing } void SDLVisibleSurface::drawFrameBuffer() @@ -43,9 +43,7 @@ lock(); try { ScreenShotSaver::save(getSDLSurface(), filename); - unlock(); } catch (CommandException& e) { - unlock(); throw; } } Modified: openmsx/trunk/src/video/SaI2xScaler.cc =================================================================== --- openmsx/trunk/src/video/SaI2xScaler.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/SaI2xScaler.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -27,6 +27,7 @@ FrameSource& src, unsigned srcStartY, unsigned srcEndY, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); unsigned stopDstY = (dstEndY == dst.getHeight()) ? dstEndY : dstEndY - 2; unsigned srcY = srcStartY, dstY = dstStartY; @@ -275,6 +276,7 @@ { assert(dst.getWidth() == srcWidth * 2); + dst.lock(); int srcY = srcStartY; const Pixel* srcLine0 = src.getLinePtr<Pixel>(srcY - 1, srcWidth); const Pixel* srcLine1 = src.getLinePtr<Pixel>(srcY + 0, srcWidth); @@ -298,6 +300,7 @@ { assert(dst.getWidth() == srcWidth); + dst.lock(); int srcY = srcStartY; const Pixel* srcLine0 = src.getLinePtr<Pixel>(srcY - 1, srcWidth); const Pixel* srcLine1 = src.getLinePtr<Pixel>(srcY + 0, srcWidth); Modified: openmsx/trunk/src/video/SaI3xScaler.cc =================================================================== --- openmsx/trunk/src/video/SaI3xScaler.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/SaI3xScaler.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -27,6 +27,7 @@ FrameSource& src, unsigned srcStartY, unsigned srcEndY, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); unsigned stopDstY = (dstEndY == dst.getHeight()) ? dstEndY : dstEndY - 3; unsigned srcY = srcStartY, dstY = dstStartY; @@ -393,6 +394,7 @@ assert(dst.getWidth() == srcWidth * NX); assert(dst.getHeight() == src.getHeight() * NY); + dst.lock(); int srcY = srcStartY; const Pixel* src0 = src.getLinePtr<Pixel>(srcY - 1, srcWidth); const Pixel* src1 = src.getLinePtr<Pixel>(srcY + 0, srcWidth); @@ -412,6 +414,8 @@ unsigned srcStartY, unsigned /*srcEndY*/, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); + // Calculate fixed point end coordinates and deltas. const unsigned wfinish = (srcWidth - 1) << 16; const unsigned dw = wfinish / (dst.getWidth() - 1); Modified: openmsx/trunk/src/video/Scale2xScaler.cc =================================================================== --- openmsx/trunk/src/video/Scale2xScaler.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/Scale2xScaler.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -1079,6 +1079,7 @@ unsigned srcStartY, unsigned /*srcEndY*/, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); int srcY = srcStartY; const Pixel* srcPrev = src.getLinePtr<Pixel>(srcY - 1, srcWidth); const Pixel* srcCurr = src.getLinePtr<Pixel>(srcY + 0, srcWidth); @@ -1098,6 +1099,7 @@ unsigned srcStartY, unsigned /*srcEndY*/, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); int srcY = srcStartY; const Pixel* srcPrev = src.getLinePtr<Pixel>(srcY - 1, srcWidth); const Pixel* srcCurr = src.getLinePtr<Pixel>(srcY + 0, srcWidth); Modified: openmsx/trunk/src/video/Scale3xScaler.cc =================================================================== --- openmsx/trunk/src/video/Scale3xScaler.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/Scale3xScaler.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -152,6 +152,7 @@ unsigned srcStartY, unsigned /*srcEndY*/, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); int srcY = srcStartY; const Pixel* srcPrev = src.getLinePtr<Pixel>(srcY - 1, srcWidth); const Pixel* srcCurr = src.getLinePtr<Pixel>(srcY + 0, srcWidth); Modified: openmsx/trunk/src/video/Scaler2.cc =================================================================== --- openmsx/trunk/src/video/Scaler2.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/Scaler2.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -21,6 +21,7 @@ FrameSource& src, unsigned srcStartY, unsigned /*srcEndY*/, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); MemoryOps::MemSet<Pixel, MemoryOps::STREAMING> memset; for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 1, dstY += 2) { @@ -37,6 +38,7 @@ FrameSource& src, unsigned srcStartY, unsigned /*srcEndY*/, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); MemoryOps::MemSet<Pixel, MemoryOps::STREAMING> memset; for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 1, dstY += 1) { @@ -52,6 +54,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp scale) { + dst.lock(); Scale_1on1<Pixel> copy; for (unsigned y = dstStartY; y < dstEndY; y += 2, ++srcStartY) { const Pixel* srcLine = src.getLinePtr<Pixel>(srcStartY, srcWidth); @@ -72,6 +75,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp scale) { + dst.lock(); for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; ++dstY, ++srcY) { const Pixel* srcLine = src.getLinePtr<Pixel>(srcY, srcWidth); Modified: openmsx/trunk/src/video/Scaler3.cc =================================================================== --- openmsx/trunk/src/video/Scaler3.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/Scaler3.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -20,6 +20,7 @@ FrameSource& src, unsigned srcStartY, unsigned /*srcEndY*/, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); MemoryOps::MemSet<Pixel, MemoryOps::STREAMING> memset; for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 1, dstY += 3) { @@ -38,6 +39,7 @@ FrameSource& src, unsigned srcStartY, unsigned /*srcEndY*/, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); MemoryOps::MemSet<Pixel, MemoryOps::STREAMING> memset; for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 2, dstY += 3) { @@ -59,6 +61,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp scale) { + dst.lock(); Scale_1on1<Pixel> copy; for (unsigned dstY = dstStartY; dstY < dstEndY; dstY += 3, ++srcStartY) { const Pixel* srcLine = src.getLinePtr<Pixel>(srcStartY, srcWidth); @@ -87,6 +90,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, PixelOperations<Pixel> ops, ScaleOp scale) { + dst.lock(); BlendLines<Pixel> blend(ops); for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 2, dstY += 3) { Modified: openmsx/trunk/src/video/Simple3xScaler.cc =================================================================== --- openmsx/trunk/src/video/Simple3xScaler.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/Simple3xScaler.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -45,6 +45,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp& scale) { + dst.lock(); int scanlineFactor = settings.getScanlineFactor(); unsigned y = dstStartY; const Pixel* srcLine = src.getLinePtr<Pixel>(srcStartY++, srcWidth); @@ -85,6 +86,7 @@ OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp& scale) { + dst.lock(); int scanlineFactor = settings.getScanlineFactor(); for (unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY; srcY += 2, dstY += 3) { @@ -221,6 +223,7 @@ FrameSource& src, unsigned srcStartY, unsigned srcEndY, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); int scanlineFactor = settings.getScanlineFactor(); unsigned stopDstY = (dstEndY == dst.getHeight()) @@ -251,6 +254,7 @@ FrameSource& src, unsigned srcStartY, unsigned /*srcEndY*/, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); int scanlineFactor = settings.getScanlineFactor(); MemoryOps::MemSet<Pixel, MemoryOps::STREAMING> memset; for (unsigned srcY = srcStartY, dstY = dstStartY; Modified: openmsx/trunk/src/video/SimpleScaler.cc =================================================================== --- openmsx/trunk/src/video/SimpleScaler.cc 2008-01-21 20:36:57 UTC (rev 7565) +++ openmsx/trunk/src/video/SimpleScaler.cc 2008-01-21 20:37:46 UTC (rev 7566) @@ -32,6 +32,7 @@ FrameSource& src, unsigned srcStartY, unsigned srcEndY, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); int scanlineFactor = settings.getScanlineFactor(); unsigned stopDstY = (dstEndY == dst.getHeight()) @@ -399,6 +400,7 @@ unsigned srcStartY, unsigned /*srcEndY*/, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); int blur = settings.getBlurFactor(); int scanlineFactor = settings.getScanlineFactor(); @@ -433,6 +435,7 @@ unsigned srcStartY, unsigned /*srcEndY*/, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY) { + dst.lock(); int blur = settings.getBlurFactor(); int scanlineFactor = settings.getScanlineFactor(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |