Changeset 55811 in vbox
- Timestamp:
- May 11, 2015 8:32:17 PM (10 years ago)
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
r55693 r55811 3086 3086 VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd)); 3087 3087 3088 rc = vmsvga3dShaderSet(pThis, pCmd->cid, pCmd->type, pCmd->shid);3088 rc = vmsvga3dShaderSet(pThis, NULL, pCmd->cid, pCmd->type, pCmd->shid); 3089 3089 break; 3090 3090 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
r55790 r55811 339 339 { /* likely */ } \ 340 340 else do { \ 341 VMSVGA3D_GET_GL_ERROR(a_pContext); \342 341 VMSVGA3D_GL_COMPLAIN(a_pState, a_pContext, a_LogRelDetails); \ 343 342 } while (0) … … 504 503 uint32_t id; 505 504 #ifdef VMSVGA3D_OGL_WITH_SHARED_CTX 506 uint32_t id AssociatedContextUnused;505 uint32_t idWeakContextAssociation; 507 506 #else 508 507 uint32_t idAssociatedContext; … … 536 535 SSMFIELD_ENTRY( VMSVGA3DSURFACE, id), 537 536 #ifdef VMSVGA3D_OGL_WITH_SHARED_CTX 538 SSMFIELD_ENTRY( VMSVGA3DSURFACE, id AssociatedContextUnused),537 SSMFIELD_ENTRY( VMSVGA3DSURFACE, idWeakContextAssociation), 539 538 #else 540 539 SSMFIELD_ENTRY( VMSVGA3DSURFACE, idAssociatedContext), … … 635 634 #define VMSVGA3D_UPDATE_MATERIAL RT_BIT(6) 636 635 637 typedef struct 636 typedef struct VMSVGA3DCONTEXT 638 637 { 639 638 uint32_t id; … … 2649 2648 pSurface->id = sid; 2650 2649 #ifdef VMSVGA3D_OGL_WITH_SHARED_CTX 2651 pSurface->id AssociatedContextUnused= SVGA3D_INVALID_ID;2650 pSurface->idWeakContextAssociation = SVGA3D_INVALID_ID; 2652 2651 #else 2653 2652 pSurface->idAssociatedContext = SVGA3D_INVALID_ID; … … 3896 3895 Log(("vmsvga3dCommandPresent: rectangle %d src=(%d,%d) (%d,%d)(%d,%d)\n", i, pRect[i].srcx, pRect[i].srcy, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h)); 3897 3896 3898 cid = SVGA3D_INVALID_ID;3899 3897 pContext = &pState->SharedCtx; 3898 # ifdef VMSVGA3D_OGL_WITH_SHARED_CTX_EXPERIMENT_1 3899 if ( pSurface->idWeakContextAssociation < pState->cContexts 3900 && pState->papContexts[pSurface->idWeakContextAssociation]->id == pSurface->idWeakContextAssociation) 3901 pContext = pState->papContexts[pSurface->idWeakContextAssociation]; 3902 # endif 3900 3903 VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext); 3904 cid = pContext->id; 3901 3905 #else 3902 3906 /* @todo stricter checks for associated context */ … … 3917 3921 VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext); 3918 3922 #endif 3923 VMSVGA3D_CLEAR_GL_ERRORS(); 3919 3924 3920 3925 /* Source surface different size? */ … … 3970 3975 #endif 3971 3976 3972 glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTextureId);3977 VMSVGA3D_ASSERT_GL_CALL(glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTextureId), pState, pContext); 3973 3978 3974 3979 oldVShader = pContext->state.shidVertex; 3975 3980 oldPShader = pContext->state.shidPixel; 3976 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, SVGA_ID_INVALID);3977 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, SVGA_ID_INVALID);3981 vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, SVGA_ID_INVALID); 3982 vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, SVGA_ID_INVALID); 3978 3983 3979 3984 /* Flush shader changes. */ … … 3982 3987 3983 3988 /* Activate the read and draw framebuffer objects. */ 3984 pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer); 3985 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext); 3986 pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0 /* back buffer */); 3987 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext); 3988 3989 pState->ext.glActiveTexture(GL_TEXTURE0); 3990 glEnable(GL_TEXTURE_2D); 3991 glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture); 3992 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext); 3993 3994 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 3995 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 3996 3997 // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 3998 // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 3989 VMSVGA3D_ASSERT_GL_CALL(pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer), pState, pContext); 3990 VMSVGA3D_ASSERT_GL_CALL(pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0 /* back buffer */), pState, pContext); 3991 3992 VMSVGA3D_ASSERT_GL_CALL(pState->ext.glActiveTexture(GL_TEXTURE0), pState, pContext); 3993 VMSVGA3D_ASSERT_GL_CALL(glEnable(GL_TEXTURE_2D), pState, pContext);; 3994 VMSVGA3D_ASSERT_GL_CALL(glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture), pState, pContext); 3995 3996 VMSVGA3D_ASSERT_GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR), pState, pContext); 3997 VMSVGA3D_ASSERT_GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR), pState, pContext);; 3998 3999 #if 0 4000 VMSVGA3D_ASSERT_GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP), pState, pContext);; 4001 VMSVGA3D_ASSERT_GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP), pState, pContext);; 4002 #endif 3999 4003 4000 4004 /* Reset the transformation matrices. */ 4001 glMatrixMode(GL_MODELVIEW);4002 glPushMatrix();4003 glLoadIdentity();4004 glMatrixMode(GL_PROJECTION);4005 glPushMatrix();4006 glLoadIdentity();4007 glScalef(1.0f, -1.0f, 1.0f);4008 glOrtho(0, pThis->svga.uWidth, pThis->svga.uHeight, 0, 0.0, -1.0);4005 VMSVGA3D_ASSERT_GL_CALL(glMatrixMode(GL_MODELVIEW), pState, pContext); 4006 VMSVGA3D_ASSERT_GL_CALL(glPushMatrix(), pState, pContext); 4007 VMSVGA3D_ASSERT_GL_CALL(glLoadIdentity(), pState, pContext); 4008 VMSVGA3D_ASSERT_GL_CALL(glMatrixMode(GL_PROJECTION), pState, pContext); 4009 VMSVGA3D_ASSERT_GL_CALL(glPushMatrix(), pState, pContext); 4010 VMSVGA3D_ASSERT_GL_CALL(glLoadIdentity(), pState, pContext); 4011 VMSVGA3D_ASSERT_GL_CALL(glScalef(1.0f, -1.0f, 1.0f), pState, pContext); 4012 VMSVGA3D_ASSERT_GL_CALL(glOrtho(0, pThis->svga.uWidth, pThis->svga.uHeight, 0, 0.0, -1.0), pState, pContext); 4009 4013 4010 4014 for (uint32_t i = 0; i < cRects; i++) … … 4049 4053 4050 4054 glBegin(GL_QUADS); 4055 4051 4056 /* bottom left */ 4052 4057 glTexCoord2f(left, bottom); … … 4065 4070 glVertex2i(vertexRight, vertexBottom); 4066 4071 4067 glEnd(); 4068 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext); 4072 VMSVGA3D_ASSERT_GL_CALL(glEnd(), pState, pContext); 4069 4073 } 4070 4074 4071 4075 /* Restore old settings. */ 4072 glMatrixMode(GL_PROJECTION);4073 glPopMatrix();4074 glMatrixMode(GL_MODELVIEW);4075 glPopMatrix();4076 4077 // glPopAttrib();4078 4079 glBindTexture(GL_TEXTURE_2D, oldTextureId);4080 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, oldVShader);4081 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, oldPShader);4076 VMSVGA3D_ASSERT_GL_CALL(glMatrixMode(GL_PROJECTION), pState, pContext); 4077 VMSVGA3D_ASSERT_GL_CALL(glPopMatrix(), pState, pContext); 4078 VMSVGA3D_ASSERT_GL_CALL(glMatrixMode(GL_MODELVIEW), pState, pContext); 4079 VMSVGA3D_ASSERT_GL_CALL(glPopMatrix(), pState, pContext); 4080 4081 //VMSVGA3D_ASSERT_GL_CALL(glPopAttrib(), pState, pContext); 4082 4083 VMSVGA3D_ASSERT_GL_CALL(glBindTexture(GL_TEXTURE_2D, oldTextureId), pState, pContext); 4084 vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, oldVShader); 4085 vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, oldPShader); 4082 4086 4083 4087 /* Reset the frame buffer association */ 4084 pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer); 4085 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext); 4088 VMSVGA3D_ASSERT_GL_CALL(pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer), pState, pContext); 4086 4089 4087 4090 #else … … 5841 5844 pContext = pState->papContexts[cid]; 5842 5845 VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext); 5846 # ifdef VMSVGA3D_OGL_WITH_SHARED_CTX_EXPERIMENT_1 5847 pRenderTarget->idWeakContextAssociation = cid; 5848 # endif 5843 5849 #else 5844 5850 LogFlow(("vmsvga3dSetRenderTarget: sid=%x idAssociatedContext %#x -> %#x\n", pRenderTarget->id, pRenderTarget->idAssociatedContext, cid)); … … 7570 7576 } 7571 7577 7572 int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid) 7573 { 7574 PVMSVGA3DCONTEXT pContext; 7578 int vmsvga3dShaderSet(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid) 7579 { 7575 7580 PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState; 7576 7581 AssertReturn(pState, VERR_NO_MEMORY); … … 7579 7584 Log(("vmsvga3dShaderSet cid=%x type=%s shid=%d\n", cid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", shid)); 7580 7585 7581 if ( cid >= pState->cContexts 7582 || pState->papContexts[cid]->id != cid) 7586 if ( !pContext 7587 && cid < pState->cContexts 7588 && pState->papContexts[cid]->id == cid) 7589 pContext = pState->papContexts[cid]; 7590 else 7583 7591 { 7584 7592 Log(("vmsvga3dShaderSet invalid context id!\n")); 7585 7593 return VERR_INVALID_PARAMETER; 7586 7594 } 7587 pContext = pState->papContexts[cid];7588 7595 VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext); 7589 7596 -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.h
r55401 r55811 337 337 vmsvga3dSetViewPort(pThis, cid, &pContext->state.RectViewPort); 338 338 if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VERTEXSHADER) 339 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);339 vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex); 340 340 if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_PIXELSHADER) 341 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);341 vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel); 342 342 } 343 343 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
r55684 r55811 249 249 #define VMSVGA3D_UPDATE_MATERIAL RT_BIT(6) 250 250 251 typedef struct 251 typedef struct VMSVGA3DCONTEXT 252 252 { 253 253 uint32_t id; … … 3420 3420 vmsvga3dSetViewPort(pThis, cid, &pContext->state.RectViewPort); 3421 3421 if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VERTEXSHADER) 3422 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);3422 vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex); 3423 3423 if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_PIXELSHADER) 3424 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);3424 vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel); 3425 3425 /** @todo restore more state data */ 3426 3426 #endif /* #ifdef VMSVGA3D_DIRECT3D9_RESET */ … … 5874 5874 } 5875 5875 5876 int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid) 5877 { 5878 PVMSVGA3DCONTEXT pContext; 5876 int vmsvga3dShaderSet(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid) 5877 { 5879 5878 PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState; 5880 5879 AssertReturn(pState, VERR_NO_MEMORY); … … 5883 5882 Log(("vmsvga3dShaderSet %x type=%s shid=%d\n", cid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", shid)); 5884 5883 5884 NOREF(pContext); 5885 5885 if ( cid >= pState->cContexts 5886 5886 || pState->papContexts[cid]->id != cid) -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
r54782 r55811 86 86 int vmsvga3dShaderDefine(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData); 87 87 int vmsvga3dShaderDestroy(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type); 88 int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid);88 int vmsvga3dShaderSet(PVGASTATE pThis, struct VMSVGA3DCONTEXT *pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid); 89 89 int vmsvga3dShaderSetConst(PVGASTATE pThis, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues); 90 90
Note:
See TracChangeset
for help on using the changeset viewer.