int ss = context->getSuperSampleCount();
int ms = context->getMultiSampleCount();
+ bool targetRequiresSync = false;
for(int q = 0; q < ss; q++)
{
if(draw->renderTarget[index])
{
unsigned int layer = context->renderTargetLayer[index];
+ targetRequiresSync |= context->renderTarget[index]->targetRequiresSync();
data->colorBuffer[index] = (unsigned int*)context->renderTarget[index]->lockInternal(0, 0, layer, LOCK_READWRITE, MANAGED);
data->colorBuffer[index] += q * ms * context->renderTarget[index]->getSliceB(true);
data->colorPitchB[index] = context->renderTarget[index]->getInternalPitchB();
if(draw->depthBuffer)
{
unsigned int layer = context->depthBufferLayer;
+ targetRequiresSync |= context->depthBuffer->targetRequiresSync();
data->depthBuffer = (float*)context->depthBuffer->lockInternal(0, 0, layer, LOCK_READWRITE, MANAGED);
data->depthBuffer += q * ms * context->depthBuffer->getSliceB(true);
data->depthPitchB = context->depthBuffer->getInternalPitchB();
if(draw->stencilBuffer)
{
unsigned int layer = context->stencilBufferLayer;
+ targetRequiresSync |= context->stencilBuffer->targetRequiresSync();
data->stencilBuffer = (unsigned char*)context->stencilBuffer->lockStencil(0, 0, layer, MANAGED);
data->stencilBuffer += q * ms * context->stencilBuffer->getSliceB(true);
data->stencilPitchB = context->stencilBuffer->getStencilPitchB();
}
}
}
+
+ // TODO(sugoi): This is a temporary brute-force workaround to ensure IOSurface synchronization.
+ if(targetRequiresSync)
+ {
+ synchronize();
+ }
}
void Renderer::clear(void *value, Format format, Surface *dest, const Rect &clearRect, unsigned int rgbaMask)