e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchSelectBuffer( GLsizei size, GLuint *buffer )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crError( "Unsupported network glSelectBuffer call." );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchGetChromiumParametervCR(GLenum target, GLuint index, GLenum type, GLsizei count, GLvoid *values)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crError("Bad type in crServerDispatchGetChromiumParametervCR");
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync GLuint *puRc = (GLuint *)(bytes >=4 ? local_storage : NULL);
118ffced88fed3e5b6f6e1b4728010ace6336bd4vboxsync WARN(("Recieved GL_HH_SET_DEFAULT_SHARED_CTX from guest, ignoring"));
118ffced88fed3e5b6f6e1b4728010ace6336bd4vboxsync WARN(("Recieved GL_HH_SET_CLIENT_CALLOUT from guest, ignoring"));
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync cr_server.head_spu->dispatch_table.GetChromiumParametervCR( target, index, type, count, local_storage );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchChromiumParametervCR(GLenum target, GLenum type, GLsizei count, const GLvoid *values)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMuralInfo *mural = cr_server.curClient->currentMural;
a804628e06a5bd14e9af77943922ffd9649c221cvboxsync WARN(("GL_SHARE_LISTS_CR invalid cound %d", count));
a804628e06a5bd14e9af77943922ffd9649c221cvboxsync for (i = 0; i < 2; ++i)
a804628e06a5bd14e9af77943922ffd9649c221cvboxsync WARN(("GL_SHARE_LISTS_CR invalid value[%d] %d", i, val));
a804628e06a5bd14e9af77943922ffd9649c221cvboxsync pCtx[i] = (CRContextInfo *) crHashtableSearch(cr_server.contextTable, val);
a804628e06a5bd14e9af77943922ffd9649c221cvboxsync WARN(("GL_SHARE_LISTS_CR invalid pCtx1 for value[%d] %d", i, val));
a804628e06a5bd14e9af77943922ffd9649c221cvboxsync WARN(("GL_SHARE_LISTS_CR invalid pCtx1 pContext for value[%d] %d", i, val));
a804628e06a5bd14e9af77943922ffd9649c221cvboxsync crStateShareLists(pCtx[0]->pContext, pCtx[1]->pContext);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* message from tilesort SPU to set new tile bounds */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint numTiles, muralWidth, muralHeight, server, tiles;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRASSERT((count - 4) % 4 == 0); /* must be multiple of four */
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync /*crServerNewMuralTiling(mural, muralWidth, muralHeight, numTiles, tileBounds);
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync mural->viewportValidated = GL_FALSE;*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (cr_server.only_swap_once && cr_server.curClient != cr_server.clients[0])
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cr_server.head_spu->dispatch_table.ChromiumParametervCR( target, type, count, values );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * We want the last connect to go through,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * otherwise we might deadlock in CheckWindowSize()
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * in the readback spu
2a094c4564ffa0ff64ea6dc7a8cdaafbac40580evboxsync if (cr_server.only_swap_once && (gather_connect_count != cr_server.numClients))
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cr_server.head_spu->dispatch_table.ChromiumParametervCR( target, type, count, values );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Set this server's view matrix which will get premultiplied onto the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * modelview matrix. For non-planar tilesort and stereo.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* values[0] is the server index. Ignored here but used in tilesort SPU */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* values[1] is the left/right eye index (0 or 1) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crMatrixInitFromFloats(&cr_server.viewMatrix[eye], v + 2);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync " %f %f %f %f\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync " %f %f %f %f\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync " %f %f %f %f\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync " %f %f %f %f",
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Set this server's projection matrix which will get replace the user's
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * projection matrix. For non-planar tilesort and stereo.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* values[0] is the server index. Ignored here but used in tilesort SPU */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* values[1] is the left/right eye index (0 or 1) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crMatrixInitFromFloats(&cr_server.projectionMatrix[eye], v + 2);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync " %f %f %f %f\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync " %f %f %f %f\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync " %f %f %f %f\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync " %f %f %f %f",
2a094c4564ffa0ff64ea6dc7a8cdaafbac40580evboxsync crDebug("Frustum: left, right, bottom, top, near, far: %f, %f, %f, %f, %f, %f", left, right, bottom, top, znear, zfar);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Todo: Add debug output for orthographic projection*/
0c9c9bbd8b03d653b91df6aff642b2501ae8d76bvboxsync /*we should not receive it from the guest! */
118ffced88fed3e5b6f6e1b4728010ace6336bd4vboxsync WARN(("Recieved GL_HH_SET_CLIENT_CALLOUT from guest, ignoring"));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Pass the parameter info to the head SPU */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cr_server.head_spu->dispatch_table.ChromiumParametervCR( target, type, count, values );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchChromiumParameteriCR(GLenum target, GLint value)
118ffced88fed3e5b6f6e1b4728010ace6336bd4vboxsync WARN(("Recieved GL_HH_SET_DEFAULT_SHARED_CTX from guest, ignoring"));
118ffced88fed3e5b6f6e1b4728010ace6336bd4vboxsync WARN(("Recieved GL_HH_RENDERTHREAD_INFORM from guest, ignoring"));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Pass the parameter info to the head SPU */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cr_server.head_spu->dispatch_table.ChromiumParameteriCR( target, value );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchChromiumParameterfCR(GLenum target, GLfloat value)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Pass the parameter info to the head SPU */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cr_server.head_spu->dispatch_table.ChromiumParameterfCR( target, value );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return (*pCounter)++;
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync/*#define CR_DUMP_BLITS*/
a076b35761e36233a2a3ba16f77c77d7849170cavboxsync//# define CR_CHECK_BLITS
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync# undef CRASSERT /* iprt assert's int3 are inlined that is why are more convenient to use since they can be easily disabled individually */
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsynccrServerDispatchCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync /*@todo pbo/fbo disabled for now as it's slower, check on other gpus*/
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync cr_server.head_spu->dispatch_table.CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_BYTE, img);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync sprintf(fname, "copy_blit%i_copy_%i.tga", blitnum, copynum);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync else /* negative height, means we have to Yinvert the source pixels while copying */
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
a91869e545af1b242b7c5f6f0aa12164f74225f4vboxsync const char *ext = (const char*)gl->GetString(GL_EXTENSIONS);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync siHavePBO = crStrstr(ext, "GL_ARB_pixel_buffer_object") ? 1:0;
a91869e545af1b242b7c5f6f0aa12164f74225f4vboxsync const char *ext = (const char*)gl->GetString(GL_EXTENSIONS);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync siHaveFBO = crStrstr(ext, "GL_EXT_framebuffer_object") ? 1:0;
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync for (dRow=yoffset, sRow=y-height-1; dRow<yoffset-height; dRow++, sRow--)
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->CopyTexSubImage2D(target, level, xoffset, dRow, x, sRow, width, 1);
c113f3435253eb5c01a17f6b599c280d505663f7vboxsync w = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->level[0][level].width;
c113f3435253eb5c01a17f6b599c280d505663f7vboxsync h = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->level[0][level].height;
c113f3435253eb5c01a17f6b599c280d505663f7vboxsync gl->CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, -height);
c113f3435253eb5c01a17f6b599c280d505663f7vboxsync gl->GetTexImage(target, level, GL_RGBA, GL_UNSIGNED_BYTE, img1);
c113f3435253eb5c01a17f6b599c280d505663f7vboxsync for (i=0; i<-height; ++i)
c113f3435253eb5c01a17f6b599c280d505663f7vboxsync gl->TexSubImage2D(target, level, xoffset, yoffset, width, -height, GL_RGBA, GL_UNSIGNED_BYTE, img2);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync else if (siHaveFBO==1) /*@todo more states to set and restore here*/
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->CopyTexImage2D(target, level, GL_RGBA, x, y, width, -height, 0);
2a094c4564ffa0ff64ea6dc7a8cdaafbac40580evboxsync gl->FramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, target,
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->hwid, level);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync status = gl->CheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->FramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, target, 0, level);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BindFramebufferEXT(GL_FRAMEBUFFER_EXT, ctx->framebufferobject.drawFB ? ctx->framebufferobject.drawFB->hwid:0);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BindTexture(target, ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->hwid);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync w = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->level[0][level].width;
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync h = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->level[0][level].height;
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->GetTexImage(target, level, GL_BGRA, GL_UNSIGNED_BYTE, img1);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync for (dRow=yoffset, sRow=y-height-1; dRow<yoffset-height; dRow++, sRow--)
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->CopyTexSubImage2D(target, level, xoffset, dRow, x, sRow, width, 1);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->GetTexImage(target, level, GL_BGRA, GL_UNSIGNED_BYTE, img2);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync crDebug("MISMATCH! (%x, %i, ->%i,%i <-%i, %i [%ix%i])", target, level, xoffset, yoffset, x, y, width, height);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pboId);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, -width*height*4, 0, GL_STATIC_COPY_ARB);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->ReadPixels(x, y, width, -height, GL_RGBA, GL_UNSIGNED_BYTE, 0);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, ctx->bufferobject.packBuffer->hwid);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboId);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync for (dRow=yoffset, sRow=-height-1; dRow<yoffset-height; dRow++, sRow--)
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->TexSubImage2D(target, level, xoffset, dRow, width, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)((uintptr_t)sRow*width*4));
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync#else /*few times slower again*/
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync for (dRow=0, sRow=y-height-1; dRow<-height; dRow++, sRow--)
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->ReadPixels(x, sRow, width, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)((uintptr_t)dRow*width*4));
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, ctx->bufferobject.packBuffer->hwid);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboId);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->TexSubImage2D(target, level, xoffset, yoffset, width, -height, GL_RGBA, GL_UNSIGNED_BYTE, 0);
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync gl->BindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, ctx->bufferobject.unpackBuffer->hwid);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsyncvoid crDbgGetTexImage2D(GLint texTarget, GLint texName, GLvoid **ppvImage, GLint *pw, GLint *ph)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetIntegerv(GL_READ_FRAMEBUFFER_BINDING_EXT, &rfb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING_EXT, &dfb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->BindFramebufferEXT(GL_READ_FRAMEBUFFER_BINDING_EXT, 0);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_BINDING_EXT, 0);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetIntegerv(GL_PIXEL_PACK_BUFFER_BINDING, &ppb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING, &pub);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetTexLevelParameteriv(texTarget, 0, GL_TEXTURE_WIDTH, &dstw);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetTexLevelParameteriv(texTarget, 0, GL_TEXTURE_HEIGHT, &dsth);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetTexImage(texTarget, 0, GL_BGRA, GL_UNSIGNED_BYTE, pvImage);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->BindFramebufferEXT(GL_READ_FRAMEBUFFER_BINDING_EXT, rfb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_BINDING_EXT, dfb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsyncDECLEXPORT(void) crDbgPrint(const char *format, ... )
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsyncvoid crDbgDumpImage2D(const char* pszDesc, const void *pvData, uint32_t width, uint32_t height, uint32_t bpp, uint32_t pitch)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync crDbgPrint("<?dml?><exec cmd=\"!vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d\">%s</exec>, ( !vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d )\n",
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsyncvoid crDbgDumpTexImage2D(const char* pszDesc, GLint texTarget, GLint texName, GLboolean fBreak)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync crDbgGetTexImage2D(texTarget, texName, &pvImage, &w, &h);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync crDbgPrint("%s target(%d), name(%d), width(%d), height(%d)", pszDesc, texTarget, texName, w, h);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync crDbgDumpImage2D("texture data", pvImage, w, h, 32, (32 * w)/8);
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync Ctx.Base.id = cr_server.MainContextInfo.SpuContext;
ed477c7dac5921fb5d44a9d3824fd5f508eed93bvboxsync Ctx.Base.visualBits = cr_server.MainContextInfo.CreateInfo.realVisualBits;
0c9c9bbd8b03d653b91df6aff642b2501ae8d76bvboxsync rc = CrBltInit(&cr_server.Blitter, &Ctx, true, true, NULL, &cr_server.TmpCtxDispatch);
0c9c9bbd8b03d653b91df6aff642b2501ae8d76bvboxsync if (!CrBltMuralGetCurrentInfo(&cr_server.Blitter)->Base.id)
ed477c7dac5921fb5d44a9d3824fd5f508eed93bvboxsync CRMuralInfo *dummy = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.realVisualBits);
0c9c9bbd8b03d653b91df6aff642b2501ae8d76bvboxsync CrBltMuralSetCurrentInfo(&cr_server.Blitter, &DummyInfo);
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsyncint crServerVBoxBlitterTexInit(CRContext *ctx, CRMuralInfo *mural, PVBOXVR_TEXTURE pTex, GLboolean fDraw)
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync CRFramebufferObjectState *pBuf = &ctx->framebufferobject;
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync CRFramebufferObject *pFBO = fDraw ? pBuf->drawFB : pBuf->readFB;
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync enmBuf = fDraw ? ctx->buffer.drawBuffer : ctx->buffer.readBuffer;
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync hwid = mural->aidColorTexs[CR_SERVER_FBO_BB_IDX(mural)];
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync hwid = mural->aidColorTexs[CR_SERVER_FBO_FB_IDX(mural)];
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync enmBuf = fDraw ? pFBO->drawbuffer[0] : pFBO->readbuffer;
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync tobj = (CRTextureObj*)crHashtableSearch(ctx->shared->textureTable, pAp->name);
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync crWarning("no texture object found for name %d", pAp->name);
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync if (tobj->target != GL_TEXTURE_2D && tobj->target != GL_TEXTURE_RECTANGLE_NV)
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsyncint crServerVBoxBlitterBlitCurrentCtx(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync rc = crServerVBoxBlitterTexInit(ctx, mural, &DrawTex, GL_TRUE);
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync crWarning("crServerVBoxBlitterTexInit failed for draw");
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync rc = crServerVBoxBlitterTexInit(ctx, mural, &ReadTex, GL_FALSE);
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync// crWarning("crServerVBoxBlitterTexInit failed for read");
f0b06b8e4de2a0d9ddb10ac0a30d68fafd73d8c1vboxsync crServerVBoxBlitterCtxInit(&Ctx, cr_server.curClient->currentCtxInfo);
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync idDrawFBO = CR_SERVER_FBO_FOR_IDX(mural, mural->iCurDrawBuffer);
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync idReadFBO = CR_SERVER_FBO_FOR_IDX(mural, mural->iCurReadBuffer);
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync crStateSwitchPrepare(NULL, ctx, idDrawFBO, idReadFBO);
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync CrBltBlitTexTex(pBlitter, pReadTex, &ReadRect, pDrawTex, &DrawRect, 1, CRBLT_FLAGS_FROM_FILTER(filter));
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync crStateSwitchPostprocess(ctx, NULL, idDrawFBO, idReadFBO);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsynccrServerDispatchBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
2a094c4564ffa0ff64ea6dc7a8cdaafbac40580evboxsync GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync GLint rfb=0, dfb=0, dtex=0, dlev=-1, rtex=0, rlev=-1, rb=0, db=0, ppb=0, pub=0, vp[4], otex, dstw, dsth;
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync GLint id, tuId, pbufId, pbufIdHw, ubufId, ubufIdHw, width, height, depth;
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync crDebug("Current TU: %i", ctx->texture.curTextureUnit);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync tobj = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D;
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync crDebug("Texture %i(hw %i), w=%i, h=%i", tobj->id, tobj->hwid, tl->width, tl->height, tl->depth);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB))
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync if (crStateIsBufferBound(GL_PIXEL_UNPACK_BUFFER_ARB))
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.GetIntegerv(GL_ACTIVE_TEXTURE, &tuId);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync CRASSERT(tuId - GL_TEXTURE0_ARB == ctx->texture.curTextureUnit);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.GetIntegerv(GL_TEXTURE_BINDING_2D, &id);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_DEPTH, &depth);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync crDebug("Texture: %i, w=%i, h=%i, d=%i", id, width, height, depth);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.GetIntegerv(GL_PIXEL_PACK_BUFFER_BINDING, &pbufIdHw);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.GetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING, &ubufIdHw);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetIntegerv(GL_READ_FRAMEBUFFER_BINDING_EXT, &rfb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING_EXT, &dfb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetIntegerv(GL_PIXEL_PACK_BUFFER_BINDING, &ppb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING, &pub);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetFramebufferAttachmentParameterivEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, &dtex);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetFramebufferAttachmentParameterivEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT, &dlev);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync dStatus = gl->CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetFramebufferAttachmentParameterivEXT(GL_READ_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, &rtex);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync gl->GetFramebufferAttachmentParameterivEXT(GL_READ_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT, &rlev);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync rStatus = gl->CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER_EXT);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync CRASSERT(ctx->framebufferobject.drawFB->hwid == dfb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync CRASSERT(ctx->framebufferobject.drawFB->drawbuffer[0] == db);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync CRASSERT(ctx->framebufferobject.drawFB->color[0].type == GL_TEXTURE);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync CRASSERT(ctx->framebufferobject.drawFB->color[0].level == 0);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync sdtex = ctx->framebufferobject.drawFB->color[0].name;
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync CRASSERT(ctx->framebufferobject.readFB->hwid == rfb);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync CRASSERT(ctx->framebufferobject.readFB->color[0].type == GL_TEXTURE);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync CRASSERT(ctx->framebufferobject.readFB->color[0].level == 0);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync srtex = ctx->framebufferobject.readFB->color[0].name;
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync// crDbgDumpTexImage2D("==> src tex:", GL_TEXTURE_2D, rtex, true);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync// crDbgDumpTexImage2D("==> dst tex:", GL_TEXTURE_2D, dtex, true);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync GLint rfb=0, dfb=0, dtex=0, dlev=-1, rb=0, db=0, ppb=0, pub=0, vp[4], otex, dstw, dsth;
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync crDebug("[%i]BlitFramebufferEXT(%i, %i, %i, %i, %i, %i, %i, %i, %x, %x)", blitnum, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync crDebug("%i, %i <-> %i, %i", srcX1-srcX0, srcY1-srcY0, dstX1-dstX0, dstY1-dstY0);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetIntegerv(GL_READ_FRAMEBUFFER_BINDING_EXT, &rfb);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING_EXT, &dfb);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetIntegerv(GL_PIXEL_PACK_BUFFER_BINDING, &ppb);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING, &pub);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetFramebufferAttachmentParameterivEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, &dtex);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetFramebufferAttachmentParameterivEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT, &dlev);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync status = gl->CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync crDebug("Src[rb 0x%x, fbo %i] Dst[db 0x%x, fbo %i(0x%x), tex %i.%i]", rb, rfb, db, dfb, status, dtex, dlev);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync crDebug("Viewport [%i, %i, %i, %i]", vp[0], vp[1], vp[2], vp[3]);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetTexLevelParameteriv(GL_TEXTURE_2D, dlev, GL_TEXTURE_WIDTH, &dstw);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetTexLevelParameteriv(GL_TEXTURE_2D, dlev, GL_TEXTURE_HEIGHT, &dsth);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->ReadPixels(0, 0, vp[2], vp[3], GL_BGRA, GL_UNSIGNED_BYTE, img);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetTexImage(GL_TEXTURE_2D, dlev, GL_BGRA, GL_UNSIGNED_BYTE, img);
819fb2627ce7d9246fcd2bfcf9d336b2175cab57vboxsync /* work around Intel driver bug on Linux host */
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync /* use srcY1 < srcY2 && dstY1 < dstY2 whenever possible to avoid GPU driver bugs */
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync /* use srcX1 < srcX2 && dstX1 < dstX2 whenever possible to avoid GPU driver bugs */
f67af59f039fe962080af93e1f7dd5065250b2cfvboxsync int rc = crServerVBoxBlitterBlitCurrentCtx(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
3379a3053bdf96e4a7c84cb099580a29c6d4547bvboxsync cr_server.head_spu->dispatch_table.Disable(GL_SCISSOR_TEST);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync cr_server.head_spu->dispatch_table.BlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1,
3379a3053bdf96e4a7c84cb099580a29c6d4547bvboxsync cr_server.head_spu->dispatch_table.Enable(GL_SCISSOR_TEST);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync//#ifdef CR_CHECK_BLITS
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync// crDbgDumpTexImage2D("<== src tex:", GL_TEXTURE_2D, rtex, true);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync// crDbgDumpTexImage2D("<== dst tex:", GL_TEXTURE_2D, dtex, true);
d7b582240fd84655df03ad70cf59ac764bf7cce7vboxsync gl->GetTexImage(GL_TEXTURE_2D, dlev, GL_BGRA, GL_UNSIGNED_BYTE, img);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchDrawBuffer( GLenum mode )
eb31f787aa8be90af240e2bed7680be92d625ba8vboxsync if (!crStateGetCurrent()->framebufferobject.drawFB)
a076b35761e36233a2a3ba16f77c77d7849170cavboxsync if (mode == GL_FRONT || mode == GL_FRONT_LEFT || mode == GL_FRONT_RIGHT)
eb31f787aa8be90af240e2bed7680be92d625ba8vboxsync cr_server.curClient->currentMural->bFbDraw = GL_TRUE;
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync CRMuralInfo *mural = cr_server.curClient->currentMural;
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync crWarning("DrawBuffer: GL_LEFT not supported properly");
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync crWarning("DrawBuffer: GL_RIGHT not supported properly");
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync crWarning("DrawBuffer: GL_FRONT_AND_BACK not supported properly");
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync crWarning("DrawBuffer: unexpected mode! 0x%x", mode);
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync cr_server.head_spu->dispatch_table.BindFramebufferEXT(GL_DRAW_FRAMEBUFFER, CR_SERVER_FBO_FOR_IDX(mural, iBufferNeeded));
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.DrawBuffer( mode );
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchReadBuffer( GLenum mode )
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync CRMuralInfo *mural = cr_server.curClient->currentMural;
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync crWarning("ReadBuffer: GL_LEFT not supported properly");
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync crWarning("ReadBuffer: GL_RIGHT not supported properly");
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync crWarning("ReadBuffer: GL_FRONT_AND_BACK not supported properly");
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync crWarning("ReadBuffer: unexpected mode! 0x%x", mode);
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync Assert(CR_SERVER_FBO_FOR_IDX(mural, mural->iCurReadBuffer));
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync cr_server.head_spu->dispatch_table.BindFramebufferEXT(GL_READ_FRAMEBUFFER, CR_SERVER_FBO_FOR_IDX(mural, iBufferNeeded));
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync cr_server.head_spu->dispatch_table.ReadBuffer( mode );
4e9f070a55a9ab37758f11adff5ca15d0498bcffvboxsyncGLenum SERVER_DISPATCH_APIENTRY crServerDispatchGetError( void )
4e9f070a55a9ab37758f11adff5ca15d0498bcffvboxsync err = cr_server.head_spu->dispatch_table.GetError();
4e9f070a55a9ab37758f11adff5ca15d0498bcffvboxsync /* our impl has a single error flag, so we just loop here to reset all error flags to no_error */
4e9f070a55a9ab37758f11adff5ca15d0498bcffvboxsync err = cr_server.head_spu->dispatch_table.GetError();
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsynccrServerMakeTmpCtxCurrent( GLint window, GLint nativeWindow, GLint context )
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync CRMuralInfo *pCurrentMural = cr_server.currentMural;
0c9c9bbd8b03d653b91df6aff642b2501ae8d76bvboxsync pCurCtx = cr_server.currentCtxInfo ? cr_server.currentCtxInfo->pContext : cr_server.MainContextInfo.pContext;
0c9c9bbd8b03d653b91df6aff642b2501ae8d76bvboxsync context = cr_server.currentCtxInfo->SpuContext > 0 ? cr_server.currentCtxInfo->SpuContext : cr_server.MainContextInfo.SpuContext;
ed477c7dac5921fb5d44a9d3824fd5f508eed93bvboxsync pDummy = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.realVisualBits);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync idDrawFBO = CR_SERVER_FBO_FOR_IDX(pCurrentMural, pCurrentMural->iCurDrawBuffer);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync idReadFBO = CR_SERVER_FBO_FOR_IDX(pCurrentMural, pCurrentMural->iCurReadBuffer);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync /* this is a GUI thread, so no need to do anything here */
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync crStateSwitchPrepare(NULL, pCurCtx, idDrawFBO, idReadFBO);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync cr_server.head_spu->dispatch_table.MakeCurrent( window, nativeWindow, context);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync crStateSwitchPostprocess(pCurCtx, NULL, idDrawFBO, idReadFBO);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync crSPUCopyDispatchTable(&cr_server.TmpCtxDispatch, &cr_server.head_spu->dispatch_table);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync cr_server.TmpCtxDispatch.MakeCurrent = crServerMakeTmpCtxCurrent;
0c9c9bbd8b03d653b91df6aff642b2501ae8d76bvboxsync cr_server.head_spu->dispatch_table.ChromiumParametervCR(GL_HH_SET_TMPCTX_MAKE_CURRENT, GL_BYTE, sizeof (void*), &pfnMakeCurrent);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync/* dump stuff */
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync/* first four bits are buffer dump config
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync * second four bits are texture dump config
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync * config flags:
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync * 1 - blit on enter
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync * 2 - blit on exit
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync * 0x03 - dump buffer on enter and exit
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync * 0x22 - dump texture and buffer on exit */
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsyncunsigned long g_CrDbgDumpDrawFramesSettings = CR_SERVER_DUMP_F_DRAW_BUFF_ENTER
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsyncunsigned long g_CrDbgDumpDrawFramesAppliedSettings = 0;
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsyncunsigned long g_CrDbgDumpDrawFramesSavedInitSettings = 0;
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncuint32_t g_CrDbgDumpDrawFlags = CR_SERVER_DUMP_F_COMPILE_SHADER
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync if (!CrBltIsInitialized(&cr_server.RecorderBlitter))
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (!CrBltIsInitialized(&cr_server.RecorderBlitter))
ed477c7dac5921fb5d44a9d3824fd5f508eed93bvboxsync pBlitterMural = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.realVisualBits);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync crServerVBoxBlitterWinInit(&BltWin, pBlitterMural);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync crServerVBoxBlitterCtxInit(&BltCtx, &cr_server.MainContextInfo);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync rc = CrBltInit(&cr_server.RecorderBlitter, &BltCtx, true, true, NULL, &cr_server.TmpCtxDispatch);
01df41f7a4e5f7de195a059541d1c89676da9673vboxsync rc = CrBltMuralSetCurrentInfo(&cr_server.RecorderBlitter, &BltWin);
01df41f7a4e5f7de195a059541d1c89676da9673vboxsync crWarning("CrBltMuralSetCurrentInfo failed rc %d", rc);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync cr_server.pDumper = &cr_server.DbgPrintDumper.Base;
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync// crDmpHtmlInit(&cr_server.HtmlDumper, "S:\\projects\\virtualbox\\3d\\dumps\\1", "index.html");
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync crDmpHtmlInitF(&cr_server.HtmlDumper, "/Users/oracle-mac/vbox/dump/1", "index%d.html", cCounter);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync crRecInit(&cr_server.Recorder, &cr_server.RecorderBlitter, &cr_server.TmpCtxDispatch, cr_server.pDumper);
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crDmpStrF(cr_server.Recorder.pDumper, "==Dump(1)==");
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crDmpStrF(cr_server.Recorder.pDumper, "Done Dump(1)");
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crDmpStrF(cr_server.Recorder.pDumper, "Done Dump(2)");
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crRecRecompileCurrentProgram(&cr_server.Recorder, ctx);
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crDmpStrF(cr_server.Recorder.pDumper, "==Uniforms==");
81578c6df6541d965dcfe32dd0e0decb64a42284vboxsync crRecDumpCurrentProgramUniforms(&cr_server.Recorder, ctx);
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crDmpStrF(cr_server.Recorder.pDumper, "==Done Uniforms==");
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crDmpStrF(cr_server.Recorder.pDumper, "==Attribs==");
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crRecDumpCurrentProgramAttribs(&cr_server.Recorder, ctx);
e20b6c04833c7afc840681167235afc1e1376f34vboxsync crDmpStrF(cr_server.Recorder.pDumper, "==Done Attribs==");
ce2cc4412def73d9a9c4663225431dd415b208e8vboxsync crRecDumpVertAttrV(&cr_server.Recorder, ctx, pszFormat, pArgList);
ce2cc4412def73d9a9c4663225431dd415b208e8vboxsyncvoid crServerDumpDrawelv(GLuint idx, const char*pszElFormat, uint32_t cbEl, const void *pvVal, uint32_t cVal)
ce2cc4412def73d9a9c4663225431dd415b208e8vboxsync crRecDumpVertAttrv(&cr_server.Recorder, ctx, idx, pszElFormat, cbEl, pvVal, cVal);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync CRContextInfo *pCtxInfo = cr_server.currentCtxInfo;
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync idx = idx >= 0 ? idx : crServerMuralFBOIdxFromBufferName(cr_server.currentMural, pCtxInfo->pContext->buffer.drawBuffer);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync crWarning("crServerDumpCheckInit failed, rc %d", rc);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync idFBO = CR_SERVER_FBO_FOR_IDX(cr_server.currentMural, idx);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync idTex = CR_SERVER_FBO_TEX_FOR_IDX(cr_server.currentMural, idx);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync RedirTex.height = cr_server.currentMural->fboHeight;
d9677fea1378fca6695c8f8fd3dbb21ac4607280vboxsync crRecDumpBuffer(&cr_server.Recorder, ctx, idFBO, idTex ? &RedirTex : NULL);
32b624becaf56a356992d660b1618bd9be0c5b09vboxsyncvoid crServerDumpTexture(const VBOXVR_TEXTURE *pTex)
32b624becaf56a356992d660b1618bd9be0c5b09vboxsync CRContextInfo *pCtxInfo = cr_server.currentCtxInfo;
32b624becaf56a356992d660b1618bd9be0c5b09vboxsync crWarning("crServerDumpCheckInit failed, rc %d", rc);
32b624becaf56a356992d660b1618bd9be0c5b09vboxsync crServerVBoxBlitterWinInit(&BltWin, cr_server.currentMural);
32b624becaf56a356992d660b1618bd9be0c5b09vboxsync crRecDumpTextureF(&cr_server.Recorder, pTex, &BltCtx, &BltWin, "Tex (%d x %d), hwid (%d) target %#x", pTex->width, pTex->height, pTex->hwid, pTex->target);
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync CRContextInfo *pCtxInfo = cr_server.currentCtxInfo;
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync crWarning("crServerDumpCheckInit failed, rc %d", rc);
2a094c4564ffa0ff64ea6dc7a8cdaafbac40580evboxsyncvoid crServerDumpFilterOpLeave(unsigned long event, CR_DUMPER *pDumper)
2a094c4564ffa0ff64ea6dc7a8cdaafbac40580evboxsyncbool crServerDumpFilterOpEnter(unsigned long event, CR_DUMPER *pDumper)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (cr_server.pDumper == &cr_server.HtmlDumper.Base)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (g_CrDbgDumpDumpOnCount == g_CrDbgDumpDrawCount)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync return true;
81578c6df6541d965dcfe32dd0e0decb64a42284vboxsyncbool crServerDumpFilterDmp(unsigned long event, CR_DUMPER *pDumper)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync return true;
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync crWarning("g_CrDbgDumpDrawFramesSettings is NULL, bump will not be started");
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync g_CrDbgDumpDrawFramesSavedInitSettings = g_CrDbgDumpDraw;
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync g_CrDbgDumpDrawFramesAppliedSettings = g_CrDbgDumpDrawFramesSettings;
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync crDmpStrF(cr_server.Recorder.pDumper, "***Starting draw dump for %d frames, settings(0x%x)", g_CrDbgDumpDrawFramesCount, g_CrDbgDumpDraw);
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync crDmpStrF(cr_server.Recorder.pDumper, "***Stop draw dump");
2881ae582c193ac8e4dabe678ac5593c55ad7bd9vboxsync g_CrDbgDumpDraw = g_CrDbgDumpDrawFramesSavedInitSettings;
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncGLvoid crServerSpriteCoordReplEnable(GLboolean fEnable)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync cr_server.head_spu->dispatch_table.ActiveTextureARB( i + GL_TEXTURE0_ARB );
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync cr_server.head_spu->dispatch_table.TexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, (GLint)fEnable);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync cr_server.head_spu->dispatch_table.ActiveTextureARB( curTextureUnitRestore + GL_TEXTURE0_ARB );
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncGLvoid SERVER_DISPATCH_APIENTRY crServerDispatchDrawArrays(GLenum mode, GLint first, GLsizei count)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync GLenum status = cr_server.head_spu->dispatch_table.CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.DrawArrays(mode, first, count););
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncGLvoid SERVER_DISPATCH_APIENTRY crServerDispatchDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync GLenum status = cr_server.head_spu->dispatch_table.CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.DrawElements(mode, count, type, indices););
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchEnd( void )
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchBegin(GLenum mode)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (ctx->program.currentVertexProgram->isARBprogram)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync gl->GetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_BINDING_ARB, &pid);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync crWarning("pid(%d) != ctx->program.currentVertexProgram->id(%d)", pid, ctx->program.currentVertexProgram->id);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync AssertRelease(pid == ctx->program.currentVertexProgram->id);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync gl->GetIntegerv(GL_VERTEX_PROGRAM_BINDING_NV, &pid);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync crWarning("pid(%d) != ctx->program.currentVertexProgram->id(%d)", pid, ctx->program.currentVertexProgram->id);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync AssertRelease(pid == ctx->program.currentVertexProgram->id);
e9a504e217664530ddff7987a6196cb55fb32274vboxsync //crDebug("pid %i, state: id %i, hwid %i", pid, ctx->glsl.activeProgram->id, ctx->glsl.activeProgram->hwid);
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync crWarning("pid(%d) != ctx->glsl.activeProgram->hwid(%d)", pid, ctx->glsl.activeProgram->hwid);