- Timestamp:
- Aug 20, 2010 9:40:40 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 65002
- Location:
- trunk/src/VBox
- Files:
-
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/OpenGL/include/chromium.h
r27889 r31808 684 684 #define GL_REAL_RENDERER 0x8B25 685 685 #define GL_REAL_EXTENSIONS 0x8B26 686 687 /*Global resource ids sharing*/ 688 #define GL_SHARE_CONTEXT_RESOURCES_CR 0x8B27 686 689 #endif 687 690 -
trunk/src/VBox/GuestHost/OpenGL/include/cr_glstate.h
r29930 r31808 98 98 CRHashTable *textureTable; /* all texture objects */ 99 99 CRHashTable *dlistTable; /* all display lists */ 100 CRHashTable *buffersTable; /* vbo/pbo */ 101 CRHashTable *fbTable; /* frame buffers */ 102 CRHashTable *rbTable; /* render buffers */ 103 100 104 GLint refCount; 105 GLint id; /*unique shared state id, it's not always matching some existing context id!*/ 106 GLint saveCount; 101 107 } CRSharedState; 102 108 … … 196 202 #ifndef IN_GUEST 197 203 DECLEXPORT(int32_t) crStateSaveContext(CRContext *pContext, PSSMHANDLE pSSM); 198 DECLEXPORT(int32_t) crStateLoadContext(CRContext *pContext, PSSMHANDLE pSSM); 204 DECLEXPORT(int32_t) crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PSSMHANDLE pSSM); 205 DECLEXPORT(void) crStateFreeShared(CRSharedState *s); 199 206 #endif 200 207 … … 219 226 GLenum format, GLenum type, GLvoid *pixels ); 220 227 228 DECLEXPORT(void) STATE_APIENTRY crStateShareContext(GLboolean value); 221 229 #ifdef __cplusplus 222 230 } -
trunk/src/VBox/GuestHost/OpenGL/include/state/cr_bufferobject.h
r27091 r31808 10 10 #include "cr_hash.h" 11 11 #include "state/cr_statetypes.h" 12 #include "state/cr_statefuncs.h" 12 13 13 14 #ifdef __cplusplus … … 30 31 typedef struct { 31 32 GLuint refCount; 32 GLuint name; 33 GLuint id; 34 GLuint hwid; 33 35 GLenum usage; 34 36 GLenum access; … … 51 53 CRBufferObject *nullBuffer; /* name = 0 */ 52 54 53 CRHashTable *buffers;54 55 55 GLboolean bResyncNeeded; 56 56 } CRBufferObjectState; … … 59 59 DECLEXPORT(GLboolean) crStateIsBufferBound(GLenum target); 60 60 61 DECLEXPORT(GLuint) STATE_APIENTRY crStateBufferHWIDtoID(GLuint hwid); 62 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetBufferHWID(GLuint id); 63 61 64 #ifdef __cplusplus 62 65 } -
trunk/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h
r28800 r31808 62 62 CRFramebufferObject *readFB, *drawFB; 63 63 CRRenderbufferObject *renderbuffer; 64 CRHashTable *framebuffers;65 CRHashTable *renderbuffers;66 64 67 65 /* Indicates that we have to resend FBO data to GPU on first glMakeCurrent call with owning context */ -
trunk/src/VBox/GuestHost/OpenGL/include/state/cr_texture.h
r27091 r31808 61 61 typedef struct { 62 62 GLenum target; 63 GLuint name; 63 GLuint id; 64 GLuint hwid; 64 65 65 66 /* The mipmap levels */ … … 237 238 DECLEXPORT(void) crStateDeleteTextureObject(CRTextureObj *tobj); 238 239 240 DECLEXPORT(GLuint) STATE_APIENTRY crStateTextureHWIDtoID(GLuint hwid); 241 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetTextureHWID(GLuint id); 242 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetTextureObjHWID(CRTextureObj *tobj); 239 243 240 244 #ifdef __cplusplus -
trunk/src/VBox/GuestHost/OpenGL/packer/pack_client.c
r25541 r31808 662 662 CRBufferObject *elementsBuffer = crStateGetCurrent()->bufferobject.elementsBuffer; 663 663 packet_length += sizeof(GLint); 664 if (elementsBuffer && elementsBuffer-> name)664 if (elementsBuffer && elementsBuffer->id) 665 665 { 666 666 /*@todo not sure it's possible, and not sure what to do*/ … … 709 709 CRBufferObject *elementsBuffer = crStateGetCurrent()->bufferobject.elementsBuffer; 710 710 packet_length += sizeof(GLint); 711 if (elementsBuffer && elementsBuffer-> name)711 if (elementsBuffer && elementsBuffer->id) 712 712 { 713 713 /*@todo not sure it's possible, and not sure what to do*/ … … 1029 1029 if (cp->enabled) 1030 1030 { 1031 if (cp->buffer && cp->buffer-> name)1031 if (cp->buffer && cp->buffer->id) 1032 1032 { 1033 1033 crWarning("crPackLockClientPointer called when there's VBO enabled!"); -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state.h
r27889 r31808 41 41 42 42 void crStateBufferObjectDiff(CRBufferObjectBits *bb, CRbitvalue *bitID, 43 43 CRContext *fromCtx, CRContext *toCtx); 44 44 45 45 void crStateBufferObjectSwitch(CRBufferObjectBits *bb, CRbitvalue *bitID, 46 CRContext *fromCtx, CRContext *toCtx); 47 46 CRContext *fromCtx, CRContext *toCtx); 48 47 49 48 /* These would normally be in cr_client.h */ 50 49 51 50 void crStateClientDiff(CRClientBits *cb, CRbitvalue *bitID, CRContext *from, CRContext *to); 52 53 void crStateClientSwitch(CRClientBits *cb, CRbitvalue *bitID, 51 52 void crStateClientSwitch(CRClientBits *cb, CRbitvalue *bitID, CRContext *from, CRContext *to); 54 53 54 void crStateGetTextureObjectAndImage(CRContext *g, GLenum texTarget, GLint level, 55 CRTextureObj **obj, CRTextureLevel **img); 55 56 56 void 57 crStateGetTextureObjectAndImage(CRContext *g, GLenum texTarget, GLint level, 58 CRTextureObj **obj, CRTextureLevel **img); 59 57 void crStateFreeBufferObject(void *data); 58 void crStateFreeFBO(void *data); 59 void crStateFreeRBO(void *data); 60 60 #endif -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_attrib.c
r16223 r31808 83 83 84 84 static void 85 copy_texobj(CRTextureObj *dest, constCRTextureObj *src, GLboolean copyName)85 copy_texobj(CRTextureObj *dest, CRTextureObj *src, GLboolean copyName) 86 86 { 87 87 if (copyName) 88 dest->name = src->name; 88 { 89 dest->id = src->id; 90 dest->hwid = crStateGetTextureObjHWID(src); 91 } 92 89 93 dest->borderColor = src->borderColor; 90 94 dest->wrapS = src->wrapS; … … 1061 1065 copy_texunit(&g->texture.unit[i], &tState->unit[i]); 1062 1066 /* first, restore the bindings! */ 1063 g->texture.unit[i].currentTexture1D = crStateTextureGet(GL_TEXTURE_1D, tState->unit[i].Saved1D. name);1067 g->texture.unit[i].currentTexture1D = crStateTextureGet(GL_TEXTURE_1D, tState->unit[i].Saved1D.id); 1064 1068 copy_texobj(g->texture.unit[i].currentTexture1D, &tState->unit[i].Saved1D, GL_FALSE); 1065 g->texture.unit[i].currentTexture2D = crStateTextureGet(GL_TEXTURE_2D, tState->unit[i].Saved2D. name);1069 g->texture.unit[i].currentTexture2D = crStateTextureGet(GL_TEXTURE_2D, tState->unit[i].Saved2D.id); 1066 1070 copy_texobj(g->texture.unit[i].currentTexture2D, &tState->unit[i].Saved2D, GL_FALSE); 1067 1071 #ifdef CR_OPENGL_VERSION_1_2 1068 g->texture.unit[i].currentTexture3D = crStateTextureGet(GL_TEXTURE_3D, tState->unit[i].Saved3D. name);1072 g->texture.unit[i].currentTexture3D = crStateTextureGet(GL_TEXTURE_3D, tState->unit[i].Saved3D.id); 1069 1073 copy_texobj(g->texture.unit[i].currentTexture3D, &tState->unit[i].Saved3D, GL_FALSE); 1070 1074 #endif 1071 1075 #ifdef CR_ARB_texture_cube_map 1072 g->texture.unit[i].currentTextureCubeMap = crStateTextureGet(GL_TEXTURE_CUBE_MAP_ARB, tState->unit[i].SavedCubeMap. name);1076 g->texture.unit[i].currentTextureCubeMap = crStateTextureGet(GL_TEXTURE_CUBE_MAP_ARB, tState->unit[i].SavedCubeMap.id); 1073 1077 copy_texobj(g->texture.unit[i].currentTextureCubeMap, &tState->unit[i].SavedCubeMap, GL_FALSE); 1074 1078 #endif 1075 1079 #ifdef CR_NV_texture_rectangle 1076 g->texture.unit[i].currentTextureRect = crStateTextureGet(GL_TEXTURE_CUBE_MAP_ARB, tState->unit[i].SavedRect. name);1080 g->texture.unit[i].currentTextureRect = crStateTextureGet(GL_TEXTURE_CUBE_MAP_ARB, tState->unit[i].SavedRect.id); 1077 1081 copy_texobj(g->texture.unit[i].currentTextureRect, &tState->unit[i].SavedRect, GL_FALSE); 1078 1082 #endif -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_bufferobject.c
r30028 r31808 18 18 if (b) { 19 19 b->refCount = 1; 20 b->name = name; 20 b->id = name; 21 b->hwid = name; 21 22 b->usage = GL_STATIC_DRAW_ARB; 22 23 b->access = GL_READ_WRITE_ARB; … … 34 35 { 35 36 case GL_ARRAY_BUFFER_ARB: 36 return b->arrayBuffer-> name!=0;37 return b->arrayBuffer->id!=0; 37 38 case GL_ELEMENT_ARRAY_BUFFER_ARB: 38 return b->elementsBuffer-> name!=0;39 return b->elementsBuffer->id!=0; 39 40 #ifdef CR_ARB_pixel_buffer_object 40 41 case GL_PIXEL_PACK_BUFFER_ARB: 41 return b->packBuffer-> name!=0;42 return b->packBuffer->id!=0; 42 43 case GL_PIXEL_UNPACK_BUFFER_ARB: 43 return b->unpackBuffer-> name!=0;44 return b->unpackBuffer->id!=0; 44 45 #endif 45 46 default: … … 97 98 #endif 98 99 99 b->buffers = crAllocHashtable();100 101 100 b->bResyncNeeded = GL_FALSE; 102 101 } 103 102 104 105 static void crStateFreeBufferObject(void *data) 103 void crStateFreeBufferObject(void *data) 106 104 { 107 105 CRBufferObject *pObj = (CRBufferObject *)data; … … 111 109 if (diff_api.DeleteBuffersARB) 112 110 { 113 diff_api.DeleteBuffersARB(1, &pObj-> name);111 diff_api.DeleteBuffersARB(1, &pObj->hwid); 114 112 } 115 113 #endif … … 121 119 { 122 120 CRBufferObjectState *b = &ctx->bufferobject; 123 crFreeHashtable(b->buffers, crStateFreeBufferObject);124 121 crFree(b->nullBuffer); 122 } 123 124 static void crStateCheckBufferHWIDCB(unsigned long key, void *data1, void *data2) 125 { 126 CRBufferObject *pObj = (CRBufferObject *) data1; 127 crCheckIDHWID_t *pParms = (crCheckIDHWID_t*) data2; 128 (void) key; 129 130 if (pObj->hwid==pParms->hwid) 131 pParms->id = pObj->id; 132 } 133 134 DECLEXPORT(GLuint) STATE_APIENTRY crStateBufferHWIDtoID(GLuint hwid) 135 { 136 CRContext *g = GetCurrentContext(); 137 crCheckIDHWID_t parms; 138 139 parms.id = hwid; 140 parms.hwid = hwid; 141 142 crHashtableWalk(g->shared->buffersTable, crStateCheckBufferHWIDCB, &parms); 143 return parms.id; 144 } 145 146 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetBufferHWID(GLuint id) 147 { 148 CRContext *g = GetCurrentContext(); 149 CRBufferObject *pObj = (CRBufferObject *) crHashtableSearch(g->shared->buffersTable, id); 150 151 return pObj ? pObj->hwid : 0; 125 152 } 126 153 … … 153 180 } 154 181 else { 155 newObj = (CRBufferObject *) crHashtableSearch( b->buffers, buffer);182 newObj = (CRBufferObject *) crHashtableSearch(g->shared->buffersTable, buffer); 156 183 if (!newObj) { 157 184 newObj = AllocBufferObject(buffer); … … 160 187 return; 161 188 } 162 crHashtableAdd( b->buffers, buffer, newObj );189 crHashtableAdd( g->shared->buffersTable, buffer, newObj ); 163 190 } 164 191 } … … 199 226 /*we shouldn't reach this point*/ 200 227 CRASSERT(false); 201 crHashtableDelete( b->buffers, (unsigned long) oldObj->name, crStateFreeBufferObject);228 crHashtableDelete(g->shared->buffersTable, (unsigned long) oldObj->id, crStateFreeBufferObject); 202 229 } 203 230 … … 236 263 if (buffers[i]) { 237 264 CRBufferObject *obj = (CRBufferObject *) 238 crHashtableSearch( b->buffers, buffers[i]);265 crHashtableSearch(g->shared->buffersTable, buffers[i]); 239 266 if (obj) { 240 267 if (obj == b->arrayBuffer) … … 270 297 /* @todo check bindings with the vertex arrays */ 271 298 272 crHashtableDelete( b->buffers, buffers[i], crStateFreeBufferObject);299 crHashtableDelete(g->shared->buffersTable, buffers[i], crStateFreeBufferObject); 273 300 } 274 301 } … … 298 325 } 299 326 300 start = crHashtableAllocKeys( b->buffers, n);327 start = crHashtableAllocKeys(g->shared->buffersTable, n); 301 328 if (start) { 302 329 GLint i; … … 324 351 } 325 352 326 if (buffer && crHashtableSearch( b->buffers, buffer))353 if (buffer && crHashtableSearch(g->shared->buffersTable, buffer)) 327 354 return GL_TRUE; 328 355 else … … 379 406 } 380 407 381 if (obj-> name== 0) {408 if (obj->id == 0) { 382 409 crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glBufferDataARB"); 383 410 return; … … 441 468 } 442 469 443 if (obj-> name== 0) {470 if (obj->id == 0) { 444 471 crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, 445 472 "glBufferSubDataARB"); … … 495 522 } 496 523 497 if (obj-> name== 0) {524 if (obj->id == 0) { 498 525 crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, 499 526 "glGetBufferSubDataARB"); … … 541 568 } 542 569 543 if (obj-> name== 0) {570 if (obj->id == 0) { 544 571 crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glMapBufferARB"); 545 572 return GL_FALSE; … … 589 616 } 590 617 591 if (obj-> name== 0) {618 if (obj->id == 0) { 592 619 crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glUnmapBufferARB"); 593 620 return GL_FALSE; … … 735 762 if (from->arrayBuffer != to->arrayBuffer) 736 763 { 737 GLuint bufferID = to->arrayBuffer ? to->arrayBuffer-> name: 0;764 GLuint bufferID = to->arrayBuffer ? to->arrayBuffer->hwid : 0; 738 765 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, bufferID); 739 766 if (bSwitch) … … 778 805 if (from->elementsBuffer != to->elementsBuffer) 779 806 { 780 GLuint bufferID = to->elementsBuffer ? to->elementsBuffer-> name: 0;807 GLuint bufferID = to->elementsBuffer ? to->elementsBuffer->hwid : 0; 781 808 diff_api.BindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, bufferID); 782 809 if (bSwitch) … … 822 849 if (from->packBuffer != to->packBuffer) 823 850 { 824 GLuint bufferID = to->packBuffer ? to->packBuffer-> name: 0;851 GLuint bufferID = to->packBuffer ? to->packBuffer->hwid : 0; 825 852 diff_api.BindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, bufferID); 826 853 if (bSwitch) … … 865 892 if (from->unpackBuffer != to->unpackBuffer) 866 893 { 867 GLuint bufferID = to->unpackBuffer ? to->unpackBuffer-> name: 0;894 GLuint bufferID = to->unpackBuffer ? to->unpackBuffer->hwid : 0; 868 895 diff_api.BindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, bufferID); 869 896 if (bSwitch) … … 921 948 CRBufferObject *pBufferObj = (CRBufferObject *) data1; 922 949 CRBufferObjectState *pState = (CRBufferObjectState *) data2; 950 951 if (pBufferObj->id && !pBufferObj->hwid) 952 { 953 diff_api.GenBuffersARB(1, &pBufferObj->hwid); 954 CRASSERT(pBufferObj->hwid); 955 } 923 956 924 957 if (pBufferObj->data) … … 931 964 hurt performance." 932 965 */ 933 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, pBufferObj-> name);966 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, pBufferObj->hwid); 934 967 diff_api.BufferDataARB(GL_ARRAY_BUFFER_ARB, pBufferObj->size, pBufferObj->data, pBufferObj->usage); 935 968 … … 946 979 */ 947 980 void crStateBufferObjectSwitch(CRBufferObjectBits *bb, CRbitvalue *bitID, 948 981 CRContext *fromCtx, CRContext *toCtx) 949 982 { 950 983 const CRBufferObjectState *from = &(fromCtx->bufferobject); … … 960 993 GLboolean locked = toCtx->client.array.locked; 961 994 962 crHashtableWalk(to ->buffers, crStateBufferObjectSyncCB, to);995 crHashtableWalk(toCtx->shared->buffersTable, crStateBufferObjectSyncCB, to); 963 996 to->bResyncNeeded = GL_FALSE; 964 997 965 998 /*@todo, move to state_client.c*/ 966 999 cp = &toCtx->client.array.v; 967 if (cp->buffer-> name|| locked)968 { 969 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1000 if (cp->buffer->id || locked) 1001 { 1002 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 970 1003 diff_api.VertexPointer(cp->size, cp->type, cp->stride, cp->p); 971 1004 } 972 1005 973 1006 cp = &toCtx->client.array.c; 974 if (cp->buffer-> name|| locked)975 { 976 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1007 if (cp->buffer->id || locked) 1008 { 1009 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 977 1010 diff_api.ColorPointer(cp->size, cp->type, cp->stride, cp->p); 978 1011 } 979 1012 980 1013 cp = &toCtx->client.array.f; 981 if (cp->buffer-> name|| locked)982 { 983 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1014 if (cp->buffer->id || locked) 1015 { 1016 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 984 1017 diff_api.FogCoordPointerEXT(cp->type, cp->stride, cp->p); 985 1018 } 986 1019 987 1020 cp = &toCtx->client.array.s; 988 if (cp->buffer-> name|| locked)989 { 990 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1021 if (cp->buffer->id || locked) 1022 { 1023 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 991 1024 diff_api.SecondaryColorPointerEXT(cp->size, cp->type, cp->stride, cp->p); 992 1025 } 993 1026 994 1027 cp = &toCtx->client.array.e; 995 if (cp->buffer-> name|| locked)996 { 997 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1028 if (cp->buffer->id || locked) 1029 { 1030 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 998 1031 diff_api.EdgeFlagPointer(cp->stride, cp->p); 999 1032 } 1000 1033 1001 1034 cp = &toCtx->client.array.i; 1002 if (cp->buffer-> name|| locked)1003 { 1004 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1035 if (cp->buffer->id || locked) 1036 { 1037 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 1005 1038 diff_api.IndexPointer(cp->type, cp->stride, cp->p); 1006 1039 } 1007 1040 1008 1041 cp = &toCtx->client.array.n; 1009 if (cp->buffer-> name|| locked)1010 { 1011 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1042 if (cp->buffer->id || locked) 1043 { 1044 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 1012 1045 diff_api.NormalPointer(cp->type, cp->stride, cp->p); 1013 1046 } … … 1016 1049 { 1017 1050 cp = &toCtx->client.array.t[i]; 1018 if (cp->buffer-> name|| locked)1051 if (cp->buffer->id || locked) 1019 1052 { 1020 1053 if (diff_api.ActiveTextureARB) 1021 1054 diff_api.ActiveTextureARB(i+GL_TEXTURE0_ARB); 1022 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1055 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 1023 1056 diff_api.TexCoordPointer(cp->size, cp->type, cp->stride, cp->p); 1024 1057 } … … 1032 1065 { 1033 1066 cp = &toCtx->client.array.a[i]; 1034 if (cp->buffer-> name|| locked)1067 if (cp->buffer->id || locked) 1035 1068 { 1036 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer-> name);1069 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, cp->buffer->hwid); 1037 1070 diff_api.VertexAttribPointerARB(i, cp->size, cp->type, cp->normalized, cp->stride, cp->p); 1038 1071 } 1039 1072 } 1040 1073 #endif 1041 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, to->arrayBuffer-> name);1042 diff_api.BindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, to->elementsBuffer-> name);1074 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, to->arrayBuffer->hwid); 1075 diff_api.BindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, to->elementsBuffer->hwid); 1043 1076 #ifdef CR_ARB_pixel_buffer_object 1044 diff_api.BindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, to->packBuffer-> name);1045 diff_api.BindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, to->unpackBuffer-> name);1077 diff_api.BindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, to->packBuffer->hwid); 1078 diff_api.BindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, to->unpackBuffer->hwid); 1046 1079 #endif 1047 1080 } -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_client.c
r31486 r31808 1517 1517 1518 1518 /*Returns if the given clientpointer could be used on server side directly*/ 1519 #define CRSTATE_IS_SERVER_CP(cp) (!(cp).enabled || !(cp).p || ((cp).buffer && (cp).buffer-> name) || ((cp).locked))1519 #define CRSTATE_IS_SERVER_CP(cp) (!(cp).enabled || !(cp).p || ((cp).buffer && (cp).buffer->id) || ((cp).locked)) 1520 1520 1521 1521 static void crStateDumpClientPointer(CRClientPointer *cp, const char *name, int i) … … 1524 1524 { 1525 1525 crDebug("CP(%s): enabled:%d ptr:%p buffer:%p buffer.name:%i locked: %i %s", 1526 name, cp->enabled, cp->p, cp->buffer, cp->buffer? cp->buffer-> name:-1, (int)cp->locked,1526 name, cp->enabled, cp->p, cp->buffer, cp->buffer? cp->buffer->id:-1, (int)cp->locked, 1527 1527 CRSTATE_IS_SERVER_CP(*cp) ? "":"!FAIL!"); 1528 1528 } … … 1530 1530 { 1531 1531 crDebug("CP(%s%i): enabled:%d ptr:%p buffer:%p buffer.name:%i locked: %i %s", 1532 name, i, cp->enabled, cp->p, cp->buffer, cp->buffer? cp->buffer-> name:-1, (int)cp->locked,1532 name, i, cp->enabled, cp->p, cp->buffer, cp->buffer? cp->buffer->id:-1, (int)cp->locked, 1533 1533 CRSTATE_IS_SERVER_CP(*cp) ? "":"!FAIL!"); 1534 1534 } … … 1612 1612 CRContext *g = GetCurrentContext(); 1613 1613 if (g->bufferobject.elementsBuffer && 1614 g->bufferobject.elementsBuffer-> name> 0)1614 g->bufferobject.elementsBuffer->id > 0) 1615 1615 return GL_TRUE; 1616 1616 else -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_extensions_get.txt
r27091 r31808 56 56 57 57 GLboolean GL_TEXTURE_CUBE_MAP_ARB GL_ARB_texture_cube_map g->texture.unit[g->texture.curTextureUnit].enabledCubeMap 58 GLint GL_TEXTURE_BINDING_CUBE_MAP_ARB GL_ARB_texture_cube_map g->texture.unit[g->texture.curTextureUnit].currentTextureCubeMap-> name58 GLint GL_TEXTURE_BINDING_CUBE_MAP_ARB GL_ARB_texture_cube_map g->texture.unit[g->texture.curTextureUnit].currentTextureCubeMap->id 59 59 GLint GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB GL_ARB_texture_cube_map g->limits.maxCubeMapTextureSize 60 60 61 61 # GL_NV_texture_rectangle 62 62 GLboolean GL_TEXTURE_RECTANGLE_NV GL_NV_texture_rectangle g->texture.unit[g->texture.curTextureUnit].enabledRect 63 GLint GL_TEXTURE_BINDING_RECTANGLE_NV GL_NV_texture_rectangle g->texture.unit[g->texture.curTextureUnit].currentTextureRect-> name63 GLint GL_TEXTURE_BINDING_RECTANGLE_NV GL_NV_texture_rectangle g->texture.unit[g->texture.curTextureUnit].currentTextureRect->id 64 64 GLint GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_NV_texture_rectangle g->limits.maxRectTextureSize 65 65 … … 131 131 132 132 # GL_ARB_vertex_buffer_object 133 GLuint GL_ARRAY_BUFFER_BINDING_ARB GL_ARB_vertex_buffer_object g->bufferobject.arrayBuffer-> name134 GLuint GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_ARB_vertex_buffer_object g->bufferobject.elementsBuffer-> name133 GLuint GL_ARRAY_BUFFER_BINDING_ARB GL_ARB_vertex_buffer_object g->bufferobject.arrayBuffer->id 134 GLuint GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_ARB_vertex_buffer_object g->bufferobject.elementsBuffer->id 135 135 136 136 # GL_ARB_pixel_buffer_object 137 GLuint GL_PIXEL_PACK_BUFFER_BINDING_ARB GL_ARB_pixel_buffer_object g->bufferobject.packBuffer-> name138 GLuint GL_PIXEL_UNPACK_BUFFER_BINDING_ARB GL_ARB_pixel_buffer_object g->bufferobject.unpackBuffer-> name137 GLuint GL_PIXEL_PACK_BUFFER_BINDING_ARB GL_ARB_pixel_buffer_object g->bufferobject.packBuffer->id 138 GLuint GL_PIXEL_UNPACK_BUFFER_BINDING_ARB GL_ARB_pixel_buffer_object g->bufferobject.unpackBuffer->id -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c
r28800 r31808 37 37 fbo->drawFB = NULL; 38 38 fbo->renderbuffer = NULL; 39 fbo->framebuffers = crAllocHashtable();40 fbo->renderbuffers = crAllocHashtable();41 39 fbo->bResyncNeeded = GL_FALSE; 42 40 } 43 41 44 staticvoid crStateFreeFBO(void *data)42 void crStateFreeFBO(void *data) 45 43 { 46 44 CRFramebufferObject *pObj = (CRFramebufferObject *)data; … … 56 54 } 57 55 58 staticvoid crStateFreeRBO(void *data)56 void crStateFreeRBO(void *data) 59 57 { 60 58 CRRenderbufferObject *pObj = (CRRenderbufferObject *)data; … … 78 76 fbo->drawFB = NULL; 79 77 fbo->renderbuffer = NULL; 80 81 crFreeHashtable(fbo->framebuffers, crStateFreeFBO);82 crFreeHashtable(fbo->renderbuffers, crStateFreeRBO);83 78 } 84 79 … … 94 89 if (renderbuffer) 95 90 { 96 fbo->renderbuffer = (CRRenderbufferObject*) crHashtableSearch( fbo->renderbuffers, renderbuffer);91 fbo->renderbuffer = (CRRenderbufferObject*) crHashtableSearch(g->shared->rbTable, renderbuffer); 97 92 if (!fbo->renderbuffer) 98 93 { … … 102 97 fbo->renderbuffer->hwid = renderbuffer; 103 98 fbo->renderbuffer->internalformat = GL_RGBA; 104 crHashtableAdd( fbo->renderbuffers, renderbuffer, fbo->renderbuffer);99 crHashtableAdd(g->shared->rbTable, renderbuffer, fbo->renderbuffer); 105 100 } 106 101 } … … 161 156 { 162 157 CRRenderbufferObject *rbo; 163 rbo = (CRRenderbufferObject*) crHashtableSearch( fbo->renderbuffers, renderbuffers[i]);158 rbo = (CRRenderbufferObject*) crHashtableSearch(g->shared->rbTable, renderbuffers[i]); 164 159 if (rbo) 165 160 { … … 173 168 crStateCheckFBOAttachments(fbo->drawFB, renderbuffers[i], GL_DRAW_FRAMEBUFFER); 174 169 175 crHashtableDelete( fbo->renderbuffers, renderbuffers[i], crStateFreeRBO);170 crHashtableDelete(g->shared->rbTable, renderbuffers[i], crStateFreeRBO); 176 171 } 177 172 } … … 291 286 if (framebuffer) 292 287 { 293 pFBO = (CRFramebufferObject*) crHashtableSearch( fbo->framebuffers, framebuffer);288 pFBO = (CRFramebufferObject*) crHashtableSearch(g->shared->fbTable, framebuffer); 294 289 if (!pFBO) 295 290 { … … 299 294 pFBO->hwid = framebuffer; 300 295 crStateInitFrameBuffer(pFBO); 301 crHashtableAdd( fbo->framebuffers, framebuffer, pFBO);296 crHashtableAdd(g->shared->fbTable, framebuffer, pFBO); 302 297 } 303 298 } … … 338 333 { 339 334 CRFramebufferObject *fb; 340 fb = (CRFramebufferObject*) crHashtableSearch( fbo->framebuffers, framebuffers[i]);335 fb = (CRFramebufferObject*) crHashtableSearch(g->shared->fbTable, framebuffers[i]); 341 336 if (fb) 342 337 { … … 349 344 fbo->drawFB = NULL; 350 345 } 351 crHashtableDelete( fbo->framebuffers, framebuffers[i], crStateFreeFBO);346 crHashtableDelete(g->shared->fbTable, framebuffers[i], crStateFreeFBO); 352 347 } 353 348 } … … 555 550 } 556 551 557 rb = (CRRenderbufferObject*) crHashtableSearch( fbo->renderbuffers, renderbuffer);552 rb = (CRRenderbufferObject*) crHashtableSearch(g->shared->rbTable, renderbuffer); 558 553 CRSTATE_FBO_CHECKERR(!rb, GL_INVALID_OPERATION, "rb doesn't exist"); 559 554 … … 639 634 if (tobj) 640 635 { 636 CRASSERT(!tobj->id || tobj->hwid); 637 641 638 switch (tobj->target) 642 639 { 643 640 case GL_TEXTURE_1D: 644 diff_api.FramebufferTexture1DEXT(GL_FRAMEBUFFER_EXT, ap, tobj->target, pAP->name, pAP->level);641 diff_api.FramebufferTexture1DEXT(GL_FRAMEBUFFER_EXT, ap, tobj->target, crStateGetTextureObjHWID(tobj), pAP->level); 645 642 break; 646 643 case GL_TEXTURE_2D: 647 644 case GL_TEXTURE_RECTANGLE_ARB: 648 diff_api.FramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, ap, tobj->target, pAP->name, pAP->level);645 diff_api.FramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, ap, tobj->target, crStateGetTextureObjHWID(tobj), pAP->level); 649 646 break; 650 647 case GL_TEXTURE_CUBE_MAP_ARB: 651 diff_api.FramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, ap, pAP->face, pAP->name, pAP->level);648 diff_api.FramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, ap, pAP->face, crStateGetTextureObjHWID(tobj), pAP->level); 652 649 break; 653 650 case GL_TEXTURE_3D: 654 diff_api.FramebufferTexture3DEXT(GL_FRAMEBUFFER_EXT, ap, tobj->target, pAP->name, pAP->level, pAP->zoffset);651 diff_api.FramebufferTexture3DEXT(GL_FRAMEBUFFER_EXT, ap, tobj->target, crStateGetTextureObjHWID(tobj), pAP->level, pAP->zoffset); 655 652 break; 656 653 default: … … 664 661 break; 665 662 case GL_RENDERBUFFER_EXT: 666 pRBO = (CRRenderbufferObject*) crHashtableSearch(ctx-> framebufferobject.renderbuffers, pAP->name);663 pRBO = (CRRenderbufferObject*) crHashtableSearch(ctx->shared->rbTable, pAP->name); 667 664 diff_api.FramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, ap, GL_RENDERBUFFER_EXT, pRBO->hwid); 668 665 break; … … 700 697 to->framebufferobject.bResyncNeeded = GL_FALSE; 701 698 702 crHashtableWalk(to-> framebufferobject.renderbuffers, crStateSyncRenderbuffersCB, NULL);703 crHashtableWalk(to-> framebufferobject.framebuffers, crStateSyncFramebuffersCB, to);699 crHashtableWalk(to->shared->rbTable, crStateSyncRenderbuffersCB, NULL); 700 crHashtableWalk(to->shared->fbTable, crStateSyncFramebuffersCB, to); 704 701 705 702 if (to->framebufferobject.drawFB==to->framebufferobject.readFB) … … 751 748 { 752 749 CRContext *g = GetCurrentContext(); 753 CRFramebufferObject *pFBO = (CRFramebufferObject*) crHashtableSearch(g-> framebufferobject.framebuffers, id);750 CRFramebufferObject *pFBO = (CRFramebufferObject*) crHashtableSearch(g->shared->fbTable, id); 754 751 755 752 return pFBO ? pFBO->hwid : 0; … … 759 756 { 760 757 CRContext *g = GetCurrentContext(); 761 CRRenderbufferObject *pRBO = (CRRenderbufferObject*) crHashtableSearch(g-> framebufferobject.renderbuffers, id);758 CRRenderbufferObject *pRBO = (CRRenderbufferObject*) crHashtableSearch(g->shared->rbTable, id); 762 759 763 760 return pRBO ? pRBO->hwid : 0; … … 792 789 parms.hwid = hwid; 793 790 794 crHashtableWalk(g-> framebufferobject.framebuffers, crStateCheckFBOHWIDCB, &parms);791 crHashtableWalk(g->shared->fbTable, crStateCheckFBOHWIDCB, &parms); 795 792 return parms.id; 796 793 } … … 804 801 parms.hwid = hwid; 805 802 806 crHashtableWalk(g-> framebufferobject.renderbuffers, crStateCheckRBOHWIDCB, &parms);803 crHashtableWalk(g->shared->rbTable, crStateCheckRBOHWIDCB, &parms); 807 804 return parms.id; 808 805 } -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_get.txt
r23694 r31808 171 171 GLenum GL_PERSPECTIVE_CORRECTION_HINT g->hint.perspectiveCorrection 172 172 173 GLint GL_TEXTURE_BINDING_1D g->texture.unit[g->texture.curTextureUnit].currentTexture1D-> name174 GLint GL_TEXTURE_BINDING_2D g->texture.unit[g->texture.curTextureUnit].currentTexture2D-> name175 GLint GL_TEXTURE_BINDING_3D g->texture.unit[g->texture.curTextureUnit].currentTexture3D-> name173 GLint GL_TEXTURE_BINDING_1D g->texture.unit[g->texture.curTextureUnit].currentTexture1D->id 174 GLint GL_TEXTURE_BINDING_2D g->texture.unit[g->texture.curTextureUnit].currentTexture2D->id 175 GLint GL_TEXTURE_BINDING_3D g->texture.unit[g->texture.curTextureUnit].currentTexture3D->id 176 176 GLenum GL_TEXTURE_ENV_MODE g->texture.unit[g->texture.curTextureUnit].envMode 177 177 -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c
r30440 r31808 19 19 GLboolean g_availableContexts[CR_MAX_CONTEXTS]; 20 20 21 static CRSharedState *gSharedState=NULL; 22 21 23 static CRContext *defaultContext = NULL; 22 24 … … 34 36 s->textureTable = crAllocHashtable(); 35 37 s->dlistTable = crAllocHashtable(); 38 s->buffersTable = crAllocHashtable(); 39 s->fbTable = crAllocHashtable(); 40 s->rbTable = crAllocHashtable(); 36 41 s->refCount = 1; /* refcount is number of contexts using this state */ 42 s->saveCount = 0; 37 43 } 38 44 return s; … … 48 54 { 49 55 #ifndef IN_GUEST 50 diff_api.DeleteTextures(1, &((CRTextureObj *)texObj)-> name);56 diff_api.DeleteTextures(1, &((CRTextureObj *)texObj)->hwid); 51 57 #endif 52 58 crStateDeleteTextureObject((CRTextureObj *) texObj); 53 59 } 54 55 60 56 61 /** 57 62 * Decrement shared state's refcount and delete when it hits zero. 58 63 */ 59 static void 64 DECLEXPORT(void) 60 65 crStateFreeShared(CRSharedState *s) 61 66 { 62 67 s->refCount--; 63 68 if (s->refCount <= 0) { 69 if (s==gSharedState) 70 { 71 gSharedState = NULL; 72 } 64 73 crFreeHashtable(s->textureTable, DeleteTextureCallback); 65 74 crFreeHashtable(s->dlistTable, crFree); /* call crFree for each entry */ 75 crFreeHashtable(s->buffersTable, crStateFreeBufferObject); 76 crFreeHashtable(s->fbTable, crStateFreeFBO); 77 crFreeHashtable(s->rbTable, crStateFreeRBO); 66 78 crFree(s); 67 79 } 68 80 } 69 81 82 DECLEXPORT(void) STATE_APIENTRY 83 crStateShareContext(GLboolean value) 84 { 85 CRContext *pCtx = GetCurrentContext(); 86 CRASSERT(pCtx && pCtx->shared); 87 88 if (value) 89 { 90 if (pCtx->shared == gSharedState) 91 { 92 return; 93 } 94 95 crDebug("Context(%i) shared", pCtx->id); 96 97 if (!gSharedState) 98 { 99 gSharedState = pCtx->shared; 100 } 101 else 102 { 103 crStateFreeShared(pCtx->shared); 104 pCtx->shared = gSharedState; 105 gSharedState->refCount++; 106 } 107 } 108 else 109 { 110 if (pCtx->shared != gSharedState) 111 { 112 return; 113 } 114 115 crDebug("Context(%i) unshared", pCtx->id); 116 117 if (gSharedState->refCount==1) 118 { 119 gSharedState = NULL; 120 } 121 else 122 { 123 pCtx->shared = crStateAllocShared(); 124 pCtx->shared->id = pCtx->id; 125 crStateFreeShared(gSharedState); 126 } 127 } 128 } 70 129 71 130 /* … … 101 160 else { 102 161 ctx->shared = crStateAllocShared(); 162 ctx->shared->id = ctx->id; 103 163 } 104 164 … … 179 239 } 180 240 241 /* 242 if (ctx->id>0) 243 { 244 crStateShareContext(GL_TRUE); 245 } 246 */ 247 181 248 return ctx; 182 249 } -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_snapshot.c
r28800 r31808 69 69 CRASSERT(pTexture && pSSM); 70 70 71 crDebug("crStateSaveTextureObjData %u. START", pTexture-> name);71 crDebug("crStateSaveTextureObjData %u. START", pTexture->id); 72 72 73 73 for (face = 0; face < 6; face++) { … … 98 98 if (!bound) 99 99 { 100 diff_api.BindTexture(pTexture->target, pTexture-> name);100 diff_api.BindTexture(pTexture->target, pTexture->hwid); 101 101 bound = GL_TRUE; 102 102 } … … 164 164 } 165 165 166 crDebug("crStateSaveTextureObjData %u. END", pTexture-> name);166 crDebug("crStateSaveTextureObjData %u. END", pTexture->id); 167 167 168 168 return VINF_SUCCESS; … … 251 251 */ 252 252 if (pTexture) 253 return SSMR3PutU32(pSSM, pTexture-> name);253 return SSMR3PutU32(pSSM, pTexture->id); 254 254 else 255 255 return VINF_SUCCESS; … … 488 488 CRASSERT(rc == VINF_SUCCESS); 489 489 } 490 else if (pBufferObj-> name!=0 && pBufferObj->size>0)491 { 492 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, pBufferObj-> name);490 else if (pBufferObj->id!=0 && pBufferObj->size>0) 491 { 492 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, pBufferObj->hwid); 493 493 pBufferObj->pointer = diff_api.MapBufferARB(GL_ARRAY_BUFFER_ARB, GL_READ_ONLY_ARB); 494 494 rc = SSMR3PutMem(pSSM, &pBufferObj->pointer, sizeof(pBufferObj->pointer)); … … 856 856 cp = crStateGetClientPointerByIndex(index, pArrays); 857 857 858 rc = SSMR3PutU32(pSSM, cp->buffer-> name);858 rc = SSMR3PutU32(pSSM, cp->buffer->id); 859 859 AssertRCReturn(rc, rc); 860 860 … … 881 881 rc = SSMR3GetU32(pSSM, &ui); 882 882 AssertRCReturn(rc, rc); 883 cp->buffer = ui==0 ? pContext->bufferobject.nullBuffer : crHashtableSearch(pContext-> bufferobject.buffers, ui);883 cp->buffer = ui==0 ? pContext->bufferobject.nullBuffer : crHashtableSearch(pContext->shared->buffersTable, ui); 884 884 885 885 #ifdef CR_EXT_compiled_vertex_array … … 1011 1011 int32_t rc, i; 1012 1012 uint32_t ui32, j; 1013 GLboolean bSaveShared = GL_TRUE; 1013 1014 1014 1015 CRASSERT(pContext && pSSM); … … 1022 1023 if (crHashtableNumElements(pContext->program.programHash)>0) 1023 1024 crDebug("Saving state with %d programs", crHashtableNumElements(pContext->program.programHash)); 1025 1026 rc = SSMR3PutS32(pSSM, pContext->shared->id); 1027 if (pContext->shared->refCount>1) 1028 { 1029 bSaveShared = pContext->shared->saveCount==0; 1030 1031 ++pContext->shared->saveCount; 1032 if (pContext->shared->saveCount == pContext->shared->refCount) 1033 { 1034 pContext->shared->saveCount=0; 1035 } 1036 } 1024 1037 1025 1038 /* Save transform state */ … … 1071 1084 1072 1085 /* Save shared textures */ 1073 CRASSERT(pContext->shared && pContext->shared->textureTable); 1074 ui32 = crHashtableNumElements(pContext->shared->textureTable); 1075 rc = SSMR3PutU32(pSSM, ui32); 1076 AssertRCReturn(rc, rc); 1077 crHashtableWalk(pContext->shared->textureTable, crStateSaveSharedTextureCB, pSSM); 1086 if (bSaveShared) 1087 { 1088 CRASSERT(pContext->shared && pContext->shared->textureTable); 1089 ui32 = crHashtableNumElements(pContext->shared->textureTable); 1090 rc = SSMR3PutU32(pSSM, ui32); 1091 AssertRCReturn(rc, rc); 1092 crHashtableWalk(pContext->shared->textureTable, crStateSaveSharedTextureCB, pSSM); 1078 1093 1079 1094 #ifdef CR_STATE_NO_TEXTURE_IMAGE_STORE 1080 /* Restore previous texture bindings via diff_api */1081 if (ui32)1082 {1083 CRTextureUnit *pTexUnit;1084 1085 pTexUnit = &pContext->texture.unit[pContext->texture.curTextureUnit];1086 1087 diff_api.BindTexture(GL_TEXTURE_1D, pTexUnit->currentTexture1D->name);1088 diff_api.BindTexture(GL_TEXTURE_2D, pTexUnit->currentTexture2D->name);1089 diff_api.BindTexture(GL_TEXTURE_3D, pTexUnit->currentTexture3D->name);1095 /* Restore previous texture bindings via diff_api */ 1096 if (ui32) 1097 { 1098 CRTextureUnit *pTexUnit; 1099 1100 pTexUnit = &pContext->texture.unit[pContext->texture.curTextureUnit]; 1101 1102 diff_api.BindTexture(GL_TEXTURE_1D, pTexUnit->currentTexture1D->hwid); 1103 diff_api.BindTexture(GL_TEXTURE_2D, pTexUnit->currentTexture2D->hwid); 1104 diff_api.BindTexture(GL_TEXTURE_3D, pTexUnit->currentTexture3D->hwid); 1090 1105 #ifdef CR_ARB_texture_cube_map 1091 diff_api.BindTexture(GL_TEXTURE_CUBE_MAP_ARB, pTexUnit->currentTextureCubeMap->name);1106 diff_api.BindTexture(GL_TEXTURE_CUBE_MAP_ARB, pTexUnit->currentTextureCubeMap->hwid); 1092 1107 #endif 1093 1108 #ifdef CR_NV_texture_rectangle 1094 diff_api.BindTexture(GL_TEXTURE_RECTANGLE_NV, pTexUnit->currentTextureRect->name); 1095 #endif 1096 } 1097 #endif 1109 diff_api.BindTexture(GL_TEXTURE_RECTANGLE_NV, pTexUnit->currentTextureRect->hwid); 1110 #endif 1111 } 1112 #endif 1113 } 1098 1114 1099 1115 /* Save current texture pointers */ … … 1168 1184 #ifdef CR_ARB_vertex_buffer_object 1169 1185 /* Save buffer objects */ 1170 ui32 = crHashtableNumElements(pContext->bufferobject.buffers);1186 ui32 = bSaveShared? crHashtableNumElements(pContext->shared->buffersTable):0; 1171 1187 rc = SSMR3PutU32(pSSM, ui32); 1172 1188 AssertRCReturn(rc, rc); 1189 1173 1190 /* Save default one*/ 1174 1191 crStateSaveBufferObjectCB(0, pContext->bufferobject.nullBuffer, pSSM); 1175 /* Save all the rest */ 1176 crHashtableWalk(pContext->bufferobject.buffers, crStateSaveBufferObjectCB, pSSM); 1192 1193 if (bSaveShared) 1194 { 1195 /* Save all the rest */ 1196 crHashtableWalk(pContext->shared->buffersTable, crStateSaveBufferObjectCB, pSSM); 1197 } 1198 1177 1199 /* Restore binding */ 1178 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, pContext->bufferobject.arrayBuffer->name); 1200 diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, pContext->bufferobject.arrayBuffer->hwid); 1201 1179 1202 /* Save pointers */ 1180 rc = SSMR3PutU32(pSSM, pContext->bufferobject.arrayBuffer-> name);1181 AssertRCReturn(rc, rc); 1182 rc = SSMR3PutU32(pSSM, pContext->bufferobject.elementsBuffer-> name);1203 rc = SSMR3PutU32(pSSM, pContext->bufferobject.arrayBuffer->id); 1204 AssertRCReturn(rc, rc); 1205 rc = SSMR3PutU32(pSSM, pContext->bufferobject.elementsBuffer->id); 1183 1206 AssertRCReturn(rc, rc); 1184 1207 #ifdef CR_ARB_pixel_buffer_object 1185 rc = SSMR3PutU32(pSSM, pContext->bufferobject.packBuffer-> name);1186 AssertRCReturn(rc, rc); 1187 rc = SSMR3PutU32(pSSM, pContext->bufferobject.unpackBuffer-> name);1208 rc = SSMR3PutU32(pSSM, pContext->bufferobject.packBuffer->id); 1209 AssertRCReturn(rc, rc); 1210 rc = SSMR3PutU32(pSSM, pContext->bufferobject.unpackBuffer->id); 1188 1211 AssertRCReturn(rc, rc); 1189 1212 #endif … … 1226 1249 #ifdef CR_EXT_framebuffer_object 1227 1250 /* Save FBOs */ 1228 ui32 = crHashtableNumElements(pContext->framebufferobject.framebuffers); 1229 rc = SSMR3PutU32(pSSM, ui32); 1230 AssertRCReturn(rc, rc); 1231 crHashtableWalk(pContext->framebufferobject.framebuffers, crStateSaveFramebuffersCB, pSSM); 1232 ui32 = crHashtableNumElements(pContext->framebufferobject.renderbuffers); 1233 rc = SSMR3PutU32(pSSM, ui32); 1234 AssertRCReturn(rc, rc); 1235 crHashtableWalk(pContext->framebufferobject.renderbuffers, crStateSaveRenderbuffersCB, pSSM); 1251 if (bSaveShared) 1252 { 1253 ui32 = crHashtableNumElements(pContext->shared->fbTable); 1254 rc = SSMR3PutU32(pSSM, ui32); 1255 AssertRCReturn(rc, rc); 1256 crHashtableWalk(pContext->shared->fbTable, crStateSaveFramebuffersCB, pSSM); 1257 ui32 = crHashtableNumElements(pContext->shared->rbTable); 1258 rc = SSMR3PutU32(pSSM, ui32); 1259 AssertRCReturn(rc, rc); 1260 crHashtableWalk(pContext->shared->rbTable, crStateSaveRenderbuffersCB, pSSM); 1261 } 1236 1262 rc = SSMR3PutU32(pSSM, pContext->framebufferobject.drawFB?pContext->framebufferobject.drawFB->id:0); 1237 1263 AssertRCReturn(rc, rc); … … 1299 1325 } 1300 1326 1327 typedef struct _crFindSharedCtxParms { 1328 CRContext *pSrcCtx, *pDstCtx; 1329 } crFindSharedCtxParms_t; 1330 1331 static void crStateFindSharedCB(unsigned long key, void *data1, void *data2) 1332 { 1333 CRContext *pContext = (CRContext *) data1; 1334 crFindSharedCtxParms_t *pParms = (crFindSharedCtxParms_t *) data2; 1335 (void) key; 1336 1337 if (pContext!=pParms->pSrcCtx && pContext->shared->id==pParms->pSrcCtx->shared->id) 1338 { 1339 pParms->pDstCtx->shared = pContext->shared; 1340 } 1341 } 1342 1301 1343 #define SLC_COPYPTR(ptr) pTmpContext->ptr = pContext->ptr 1302 1344 #define SLC_ASSSERT_NULL_PTR(ptr) CRASSERT(!pContext->ptr) 1303 1345 1304 int32_t crStateLoadContext(CRContext *pContext, PSSMHANDLE pSSM)1346 int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PSSMHANDLE pSSM) 1305 1347 { 1306 1348 CRContext* pTmpContext; … … 1308 1350 uint32_t uiNumElems, ui, k; 1309 1351 unsigned long key; 1352 GLboolean bLoadShared = GL_TRUE; 1310 1353 1311 1354 CRASSERT(pContext && pSSM); … … 1319 1362 AssertRCReturn(rc, rc); 1320 1363 1321 SLC_COPYPTR(shared); 1364 /* Deal with shared state */ 1365 { 1366 crFindSharedCtxParms_t parms; 1367 1368 rc = SSMR3GetS32(pSSM, &pContext->shared->id); 1369 AssertRCReturn(rc, rc); 1370 1371 pTmpContext->shared = NULL; 1372 parms.pSrcCtx = pContext; 1373 parms.pDstCtx = pTmpContext; 1374 crHashtableWalk(pCtxTable, crStateFindSharedCB, &parms); 1375 1376 if (pTmpContext->shared) 1377 { 1378 CRASSERT(pContext->shared->refCount==1 && pTmpContext->shared->refCount>1); 1379 bLoadShared = GL_FALSE; 1380 crStateFreeShared(pContext->shared); 1381 pContext->shared = NULL; 1382 } 1383 else 1384 { 1385 SLC_COPYPTR(shared); 1386 } 1387 } 1388 1322 1389 SLC_COPYPTR(flush_func); 1323 1390 SLC_COPYPTR(flush_arg); … … 1341 1408 1342 1409 #ifdef CR_ARB_vertex_buffer_object 1343 SLC_COPYPTR(bufferobject.buffers);1344 1410 SLC_COPYPTR(bufferobject.nullBuffer); 1345 1411 #endif … … 1449 1515 } 1450 1516 1451 #ifdef CR_EXT_framebuffer_object1452 SLC_COPYPTR(framebufferobject.framebuffers);1453 SLC_COPYPTR(framebufferobject.renderbuffers);1454 #endif1455 1456 1517 #ifdef CR_OPENGL_VERSION_2_0 1457 1518 SLC_COPYPTR(glsl.shaders); … … 1516 1577 #endif 1517 1578 1518 /* Load shared textures */ 1519 CRASSERT(pContext->shared && pContext->shared->textureTable); 1520 rc = SSMR3GetU32(pSSM, &uiNumElems); 1521 AssertRCReturn(rc, rc); 1522 for (ui=0; ui<uiNumElems; ++ui) 1523 { 1524 CRTextureObj *pTexture; 1525 1526 rc = SSMR3GetMem(pSSM, &key, sizeof(key)); 1527 AssertRCReturn(rc, rc); 1528 1529 pTexture = (CRTextureObj *) crCalloc(sizeof(CRTextureObj)); 1530 if (!pTexture) return VERR_NO_MEMORY; 1531 1532 rc = SSMR3GetMem(pSSM, pTexture, sizeof(*pTexture)); 1533 AssertRCReturn(rc, rc); 1534 1535 /*allocate actual memory*/ 1536 for (i=0; i<6; ++i) { 1537 pTexture->level[i] = (CRTextureLevel *) crCalloc(sizeof(CRTextureLevel) * CR_MAX_MIPMAP_LEVELS); 1538 if (!pTexture->level[i]) return VERR_NO_MEMORY; 1539 } 1540 1541 rc = crStateLoadTextureObjData(pTexture, pSSM); 1542 AssertRCReturn(rc, rc); 1543 1544 crHashtableAdd(pContext->shared->textureTable, key, pTexture); 1579 if (bLoadShared) 1580 { 1581 /* Load shared textures */ 1582 CRASSERT(pContext->shared && pContext->shared->textureTable); 1583 rc = SSMR3GetU32(pSSM, &uiNumElems); 1584 AssertRCReturn(rc, rc); 1585 for (ui=0; ui<uiNumElems; ++ui) 1586 { 1587 CRTextureObj *pTexture; 1588 1589 rc = SSMR3GetMem(pSSM, &key, sizeof(key)); 1590 AssertRCReturn(rc, rc); 1591 1592 pTexture = (CRTextureObj *) crCalloc(sizeof(CRTextureObj)); 1593 if (!pTexture) return VERR_NO_MEMORY; 1594 1595 rc = SSMR3GetMem(pSSM, pTexture, sizeof(*pTexture)); 1596 AssertRCReturn(rc, rc); 1597 1598 pTexture->hwid = 0; 1599 1600 /*allocate actual memory*/ 1601 for (i=0; i<6; ++i) { 1602 pTexture->level[i] = (CRTextureLevel *) crCalloc(sizeof(CRTextureLevel) * CR_MAX_MIPMAP_LEVELS); 1603 if (!pTexture->level[i]) return VERR_NO_MEMORY; 1604 } 1605 1606 rc = crStateLoadTextureObjData(pTexture, pSSM); 1607 AssertRCReturn(rc, rc); 1608 1609 crHashtableAdd(pContext->shared->textureTable, key, pTexture); 1610 } 1545 1611 } 1546 1612 … … 1641 1707 AssertRCReturn(rc, rc); 1642 1708 1709 pBufferObj->hwid = 0; 1710 1643 1711 if (pBufferObj->data) 1644 1712 { … … 1648 1716 AssertRCReturn(rc, rc); 1649 1717 } 1650 else if (pBufferObj-> name!=0 && pBufferObj->size>0)1718 else if (pBufferObj->id!=0 && pBufferObj->size>0) 1651 1719 { 1652 1720 rc = SSMR3GetMem(pSSM, &pBufferObj->data, sizeof(pBufferObj->data)); … … 1663 1731 1664 1732 if (key!=0) 1665 crHashtableAdd(pContext-> bufferobject.buffers, key, pBufferObj);1733 crHashtableAdd(pContext->shared->buffersTable, key, pBufferObj); 1666 1734 } 1667 1735 /* Load pointers */ 1668 #define CRS_GET_BO(name) (((name)==0) ? (pContext->bufferobject.nullBuffer) : crHashtableSearch(pContext-> bufferobject.buffers, name))1736 #define CRS_GET_BO(name) (((name)==0) ? (pContext->bufferobject.nullBuffer) : crHashtableSearch(pContext->shared->buffersTable, name)) 1669 1737 rc = SSMR3GetU32(pSSM, &ui); 1670 1738 AssertRCReturn(rc, rc); … … 1735 1803 #ifdef CR_EXT_framebuffer_object 1736 1804 /* Load FBOs */ 1737 rc = SSMR3GetU32(pSSM, &uiNumElems); 1738 AssertRCReturn(rc, rc); 1739 for (ui=0; ui<uiNumElems; ++ui) 1740 { 1741 CRFramebufferObject *pFBO; 1742 pFBO = crAlloc(sizeof(*pFBO)); 1743 if (!pFBO) return VERR_NO_MEMORY; 1744 1745 rc = SSMR3GetMem(pSSM, &key, sizeof(key)); 1746 AssertRCReturn(rc, rc); 1747 1748 rc = SSMR3GetMem(pSSM, pFBO, sizeof(*pFBO)); 1749 AssertRCReturn(rc, rc); 1750 1751 crHashtableAdd(pContext->framebufferobject.framebuffers, key, pFBO); 1752 } 1753 1754 rc = SSMR3GetU32(pSSM, &uiNumElems); 1755 AssertRCReturn(rc, rc); 1756 for (ui=0; ui<uiNumElems; ++ui) 1757 { 1758 CRRenderbufferObject *pRBO; 1759 pRBO = crAlloc(sizeof(*pRBO)); 1760 if (!pRBO) return VERR_NO_MEMORY; 1761 1762 rc = SSMR3GetMem(pSSM, &key, sizeof(key)); 1763 AssertRCReturn(rc, rc); 1764 1765 rc = SSMR3GetMem(pSSM, pRBO, sizeof(*pRBO)); 1766 AssertRCReturn(rc, rc); 1767 1768 crHashtableAdd(pContext->framebufferobject.renderbuffers, key, pRBO); 1805 if (bLoadShared) 1806 { 1807 rc = SSMR3GetU32(pSSM, &uiNumElems); 1808 AssertRCReturn(rc, rc); 1809 for (ui=0; ui<uiNumElems; ++ui) 1810 { 1811 CRFramebufferObject *pFBO; 1812 pFBO = crAlloc(sizeof(*pFBO)); 1813 if (!pFBO) return VERR_NO_MEMORY; 1814 1815 rc = SSMR3GetMem(pSSM, &key, sizeof(key)); 1816 AssertRCReturn(rc, rc); 1817 1818 rc = SSMR3GetMem(pSSM, pFBO, sizeof(*pFBO)); 1819 AssertRCReturn(rc, rc); 1820 1821 crHashtableAdd(pContext->shared->fbTable, key, pFBO); 1822 } 1823 1824 rc = SSMR3GetU32(pSSM, &uiNumElems); 1825 AssertRCReturn(rc, rc); 1826 for (ui=0; ui<uiNumElems; ++ui) 1827 { 1828 CRRenderbufferObject *pRBO; 1829 pRBO = crAlloc(sizeof(*pRBO)); 1830 if (!pRBO) return VERR_NO_MEMORY; 1831 1832 rc = SSMR3GetMem(pSSM, &key, sizeof(key)); 1833 AssertRCReturn(rc, rc); 1834 1835 rc = SSMR3GetMem(pSSM, pRBO, sizeof(*pRBO)); 1836 AssertRCReturn(rc, rc); 1837 1838 crHashtableAdd(pContext->shared->rbTable, key, pRBO); 1839 } 1769 1840 } 1770 1841 … … 1772 1843 AssertRCReturn(rc, rc); 1773 1844 pContext->framebufferobject.drawFB = ui==0 ? NULL 1774 : crHashtableSearch(pContext-> framebufferobject.framebuffers, ui);1845 : crHashtableSearch(pContext->shared->fbTable, ui); 1775 1846 1776 1847 rc = SSMR3GetU32(pSSM, &ui); 1777 1848 AssertRCReturn(rc, rc); 1778 1849 pContext->framebufferobject.readFB = ui==0 ? NULL 1779 : crHashtableSearch(pContext-> framebufferobject.framebuffers, ui);1850 : crHashtableSearch(pContext->shared->fbTable, ui); 1780 1851 1781 1852 rc = SSMR3GetU32(pSSM, &ui); 1782 1853 AssertRCReturn(rc, rc); 1783 1854 pContext->framebufferobject.renderbuffer = ui==0 ? NULL 1784 : crHashtableSearch(pContext-> framebufferobject.renderbuffers, ui);1855 : crHashtableSearch(pContext->shared->rbTable, ui); 1785 1856 1786 1857 /* Mark FBOs/RBOs for resending to GPU */ -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texdiff.c
r16969 r31808 185 185 activeUnit = i; 186 186 } 187 if (from->unit[i].currentTexture1D-> name != to->unit[i].currentTexture1D->name)188 { 189 diff_api.BindTexture(GL_TEXTURE_1D, to->unit[i].currentTexture1D->name);187 if (from->unit[i].currentTexture1D->id != to->unit[i].currentTexture1D->id) 188 { 189 diff_api.BindTexture(GL_TEXTURE_1D, crStateGetTextureObjHWID(to->unit[i].currentTexture1D)); 190 190 FILLDIRTY(tb->current[i]); 191 191 FILLDIRTY(tb->dirty); 192 192 } 193 if (from->unit[i].currentTexture2D-> name != to->unit[i].currentTexture2D->name)194 { 195 diff_api.BindTexture(GL_TEXTURE_2D, to->unit[i].currentTexture2D->name);193 if (from->unit[i].currentTexture2D->id != to->unit[i].currentTexture2D->id) 194 { 195 diff_api.BindTexture(GL_TEXTURE_2D, crStateGetTextureObjHWID(to->unit[i].currentTexture2D)); 196 196 FILLDIRTY(tb->current[i]); 197 197 FILLDIRTY(tb->dirty); 198 198 } 199 199 #ifdef CR_OPENGL_VERSION_1_2 200 if (from->unit[i].currentTexture3D-> name != to->unit[i].currentTexture3D->name) {201 diff_api.BindTexture(GL_TEXTURE_3D, to->unit[i].currentTexture3D->name);200 if (from->unit[i].currentTexture3D->id != to->unit[i].currentTexture3D->id) { 201 diff_api.BindTexture(GL_TEXTURE_3D, crStateGetTextureObjHWID(to->unit[i].currentTexture3D)); 202 202 FILLDIRTY(tb->current[i]); 203 203 FILLDIRTY(tb->dirty); … … 206 206 #ifdef CR_ARB_texture_cube_map 207 207 if (fromCtx->extensions.ARB_texture_cube_map && 208 from->unit[i].currentTextureCubeMap-> name != to->unit[i].currentTextureCubeMap->name) {209 diff_api.BindTexture(GL_TEXTURE_CUBE_MAP_ARB, to->unit[i].currentTextureCubeMap->name);208 from->unit[i].currentTextureCubeMap->id != to->unit[i].currentTextureCubeMap->id) { 209 diff_api.BindTexture(GL_TEXTURE_CUBE_MAP_ARB, crStateGetTextureObjHWID(to->unit[i].currentTextureCubeMap)); 210 210 FILLDIRTY(tb->current[i]); 211 211 FILLDIRTY(tb->dirty); … … 214 214 #ifdef CR_NV_texture_rectangle 215 215 if (fromCtx->extensions.NV_texture_rectangle && 216 from->unit[i].currentTextureRect-> name != to->unit[i].currentTextureRect->name) {217 diff_api.BindTexture(GL_TEXTURE_RECTANGLE_NV, to->unit[i].currentTextureRect->name);216 from->unit[i].currentTextureRect->id != to->unit[i].currentTextureRect->id) { 217 diff_api.BindTexture(GL_TEXTURE_RECTANGLE_NV, crStateGetTextureObjHWID(to->unit[i].currentTextureRect)); 218 218 FILLDIRTY(tb->current[i]); 219 219 FILLDIRTY(tb->dirty); … … 616 616 #endif 617 617 618 diff_api.BindTexture( tobj->target, tobj->name);618 diff_api.BindTexture(tobj->target, crStateGetTextureObjHWID(tobj)); 619 619 620 620 if (alwaysDirty || CHECKDIRTY(tobj->paramsBit[u], bitID)) … … 1304 1304 if (*fromBinding != tobj) 1305 1305 { 1306 diff_api.BindTexture(tobj->target, tobj->name);1306 diff_api.BindTexture(tobj->target, crStateGetTextureObjHWID(tobj)); 1307 1307 *fromBinding = tobj; 1308 1308 } … … 1389 1389 /* save current texture bindings */ 1390 1390 origUnit = g->texture.curTextureUnit; 1391 orig1D = g->texture.unit[0].currentTexture1D->name;1392 orig2D = g->texture.unit[0].currentTexture2D->name;1393 orig3D = g->texture.unit[0].currentTexture3D->name;1391 orig1D = crStateGetTextureObjHWID(g->texture.unit[0].currentTexture1D); 1392 orig2D = crStateGetTextureObjHWID(g->texture.unit[0].currentTexture2D); 1393 orig3D = crStateGetTextureObjHWID(g->texture.unit[0].currentTexture3D); 1394 1394 #ifdef CR_ARB_texture_cube_map 1395 origCube = g->texture.unit[0].currentTextureCubeMap->name;1395 origCube = crStateGetTextureObjHWID(g->texture.unit[0].currentTextureCubeMap); 1396 1396 #endif 1397 1397 #ifdef CR_NV_texture_rectangle 1398 origRect = g->texture.unit[0].currentTextureRect->name;1398 origRect = crStateGetTextureObjHWID(g->texture.unit[0].currentTextureRect); 1399 1399 #endif 1400 1400 -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c
r31781 r31808 172 172 void 173 173 crStateTextureInitTextureObj(CRContext *ctx, CRTextureObj *tobj, 174 174 GLuint name, GLenum target) 175 175 { 176 176 const CRTextureState *t = &(ctx->texture); … … 194 194 #endif 195 195 tobj->target = target; 196 tobj->name = name; 196 tobj->id = name; 197 tobj->hwid = 0; 198 199 #ifndef IN_GUEST 200 crStateGetTextureObjHWID(tobj); 201 #endif 197 202 198 203 CRASSERT(t->maxLevel); … … 3147 3152 return tobj != NULL; 3148 3153 } 3154 3155 static void crStateCheckTextureHWIDCB(unsigned long key, void *data1, void *data2) 3156 { 3157 CRTextureObj *pTex = (CRTextureObj *) data1; 3158 crCheckIDHWID_t *pParms = (crCheckIDHWID_t*) data2; 3159 (void) key; 3160 3161 if (crStateGetTextureObjHWID(pTex)==pParms->hwid) 3162 pParms->id = pTex->id; 3163 } 3164 3165 DECLEXPORT(GLuint) STATE_APIENTRY crStateTextureHWIDtoID(GLuint hwid) 3166 { 3167 CRContext *g = GetCurrentContext(); 3168 crCheckIDHWID_t parms; 3169 3170 parms.id = hwid; 3171 parms.hwid = hwid; 3172 3173 crHashtableWalk(g->shared->textureTable, crStateCheckTextureHWIDCB, &parms); 3174 return parms.id; 3175 } 3176 3177 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetTextureHWID(GLuint id) 3178 { 3179 CRContext *g = GetCurrentContext(); 3180 CRTextureObj *tobj = GET_TOBJ(tobj, g, id); 3181 3182 return tobj ? crStateGetTextureObjHWID(tobj) : 0; 3183 } 3184 3185 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetTextureObjHWID(CRTextureObj *tobj) 3186 { 3187 CRASSERT(tobj); 3188 3189 #ifndef IN_GUEST 3190 if (tobj->id && !tobj->hwid) 3191 { 3192 CRASSERT(diff_api.GenTextures); 3193 diff_api.GenTextures(1, &tobj->hwid); 3194 CRASSERT(tobj->hwid); 3195 } 3196 #endif 3197 3198 return tobj->hwid; 3199 } -
trunk/src/VBox/GuestHost/OpenGL/util/hash.c
r21668 r31808 417 417 crUnlockMutex(&h->mutex); 418 418 #endif 419 for ( i = 0; i < range; i++)420 crHashtableAdd( h, i + res , NULL );421 419 return res; 422 420 } -
trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp
r31698 r31808 65 65 66 66 static const char* gszVBoxOGLSSMMagic = "***OpenGL state data***"; 67 #define SHCROGL_SSM_VERSION 1967 #define SHCROGL_SSM_VERSION 20 68 68 69 69 static DECLCALLBACK(int) svcUnload (void *) -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/get_components.py
r20916 r31808 104 104 'GL_BUFFER_ACCESS_ARB': (1, 'CR_ARB_vertex_buffer_object'), 105 105 'GL_BUFFER_MAPPED_ARB': (1, 'CR_ARB_vertex_buffer_object'), 106 'GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING ': (4, 'CR_ARB_vertex_buffer_object'),106 'GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB': (1, 'CR_ARB_vertex_buffer_object'), 107 107 'GL_QUERY_COUNTER_BITS_ARB': (1, 'CR_ARB_occlusion_query'), 108 108 'GL_QUERY_RESULT_AVAILABLE_ARB': (1, 'CR_ARB_occlusion_query'), -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h
r27889 r31808 87 87 GLint crServerSPUWindowID(GLint serverWindow); 88 88 89 GLuint crServerTranslateTextureID(GLuint id);90 89 GLuint crServerTranslateProgramID(GLuint id); 91 90 -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_bufferobject.c
r22155 r31808 59 59 } 60 60 } 61 62 void SERVER_DISPATCH_APIENTRY 63 crServerDispatchBindBufferARB(GLenum target, GLuint buffer) 64 { 65 crStateBindBufferARB(target, buffer); 66 cr_server.head_spu->dispatch_table.BindBufferARB(target, crStateGetBufferHWID(buffer)); 67 } 68 69 GLboolean SERVER_DISPATCH_APIENTRY 70 crServerDispatchIsBufferARB(GLuint buffer) 71 { 72 GLboolean retval; 73 retval = cr_server.head_spu->dispatch_table.IsBufferARB(crStateGetBufferHWID(buffer)); 74 crServerReturnValue( &retval, sizeof(retval) ); 75 return retval; /* WILL PROBABLY BE IGNORED */ 76 } -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_framebuffer.c
r28800 r31808 46 46 void SERVER_DISPATCH_APIENTRY crServerDispatchFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) 47 47 { 48 if (texture)49 {50 texture = crServerTranslateTextureID(texture);51 }52 53 48 crStateFramebufferTexture1DEXT(target, attachment, textarget, texture, level); 54 cr_server.head_spu->dispatch_table.FramebufferTexture1DEXT(target, attachment, textarget, texture, level);49 cr_server.head_spu->dispatch_table.FramebufferTexture1DEXT(target, attachment, textarget, crStateGetTextureHWID(texture), level); 55 50 } 56 51 57 52 void SERVER_DISPATCH_APIENTRY crServerDispatchFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) 58 53 { 59 if (texture)60 {61 texture = crServerTranslateTextureID(texture);62 }63 64 54 crStateFramebufferTexture2DEXT(target, attachment, textarget, texture, level); 65 cr_server.head_spu->dispatch_table.FramebufferTexture2DEXT(target, attachment, textarget, texture, level);55 cr_server.head_spu->dispatch_table.FramebufferTexture2DEXT(target, attachment, textarget, crStateGetTextureHWID(texture), level); 66 56 } 67 57 68 58 void SERVER_DISPATCH_APIENTRY crServerDispatchFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) 69 59 { 70 if (texture)71 {72 texture = crServerTranslateTextureID(texture);73 }74 75 60 crStateFramebufferTexture3DEXT(target, attachment, textarget, texture, level, zoffset); 76 cr_server.head_spu->dispatch_table.FramebufferTexture3DEXT(target, attachment, textarget, texture, level, zoffset);61 cr_server.head_spu->dispatch_table.FramebufferTexture3DEXT(target, attachment, textarget, crStateGetTextureHWID(texture), level, zoffset); 77 62 } 78 63 … … 121 106 crStateGetFramebufferAttachmentParameterivEXT(target, attachment, pname, local_params); 122 107 123 if (GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT==pname)124 {125 GLint type;126 crStateGetFramebufferAttachmentParameterivEXT(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT, &type);127 if (GL_TEXTURE==type)128 {129 /*todo, add reverse of crServerTranslateTextureID*/130 if (!cr_server.sharedTextureObjects && local_params[0])131 {132 int client = cr_server.curClient->number;133 local_params[0] = local_params[0] - client * 100000;134 }135 }136 }137 138 108 crServerReturnValue(&(local_params[0]), 1*sizeof(GLint)); 139 109 } 110 111 GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsFramebufferEXT( GLuint framebuffer ) 112 { 113 GLboolean retval; 114 retval = cr_server.head_spu->dispatch_table.IsFramebufferEXT(crStateGetFramebufferHWID(framebuffer)); 115 crServerReturnValue( &retval, sizeof(retval) ); 116 return retval; /* WILL PROBABLY BE IGNORED */ 117 } 118 119 GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsRenderbufferEXT( GLuint renderbuffer ) 120 { 121 GLboolean retval; 122 retval = cr_server.head_spu->dispatch_table.IsRenderbufferEXT(crStateGetRenderbufferHWID(renderbuffer)); 123 crServerReturnValue( &retval, sizeof(retval) ); 124 return retval; /* WILL PROBABLY BE IGNORED */ 125 } -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_gentextures.c
r25154 r31808 14 14 void SERVER_DISPATCH_APIENTRY crServerDispatchGenTextures( GLsizei n, GLuint *textures ) 15 15 { 16 GLsizei i; 17 GLuint *local_textures = (GLuint *) crAlloc( n*sizeof( *local_textures) ); 16 GLuint *local_textures = (GLuint *) crAlloc(n*sizeof(*local_textures)); 18 17 (void) textures; 19 cr_server.head_spu->dispatch_table.GenTextures( n, local_textures );20 18 21 /* This is somewhat hacky. 22 * We have to make sure we're going to generate unique texture IDs. 23 * That wasn't the case before snapshot loading, because we could just rely on host video drivers. 24 * Now we could have a set of loaded texture IDs which aren't already reserved in the host driver. 25 * Note: It seems, that it's easy to reserve ATI/NVidia IDs, by simply calling glGenTextures 26 * with n==number of loaded textures. But it's really implementation dependant. So can't rely that it'll not change. 27 */ 28 for (i=0; i<n; ++i) 29 { 30 /* translate the ID as it'd be done in glBindTexture call */ 31 GLuint tID = crServerTranslateTextureID(local_textures[i]); 32 /* check if we have a texture with same ID loaded from snapshot */ 33 while (crStateIsTexture(tID)) 34 { 35 /* request new ID */ 36 cr_server.head_spu->dispatch_table.GenTextures(1, &tID); 37 local_textures[i] = tID; 38 tID = crServerTranslateTextureID(tID); 39 } 40 } 19 crStateGenTextures(n, local_textures); 41 20 42 crServerReturnValue( local_textures, n*sizeof( *local_textures ));21 crServerReturnValue(local_textures, n*sizeof(*local_textures)); 43 22 crFree( local_textures ); 44 23 } 45 46 24 47 25 void SERVER_DISPATCH_APIENTRY crServerDispatchGenProgramsNV( GLsizei n, GLuint * ids ) -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_get.py
r22155 r31808 100 100 ]; 101 101 102 convert_bufferid = [ 103 'GetVertexAttribdvARB', 104 'GetVertexAttribdvNV', 105 'GetVertexAttribfvARB', 106 'GetVertexAttribfvNV', 107 'GetVertexAttribivARB', 108 'GetVertexAttribivNV' 109 ]; 110 102 111 from get_components import *; 103 112 … … 125 134 126 135 print '\tcr_server.head_spu->dispatch_table.%s( %s );' % ( func_name, apiutil.MakeCallString(params) ) 136 137 if func_name in convert_bufferid: 138 print '\tif (pname==GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB){' 139 print '\t\tlocal_params[0]=(%s)crStateBufferHWIDtoID((GLint)local_params[0]);' % (local_argtype); 140 print '\t}' 141 127 142 if func_name in no_pnames: 128 143 print '\tcrServerReturnValue( &(%s[0]), %d*sizeof(%s) );' % (local_argname, max_components[func_name], local_argtype ); -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c
r28800 r31808 104 104 } 105 105 106 GLint SERVER_DISPATCH_APIENTRY crServerDispatchGetAttribLocation( GLuint program, const char * name ) 107 { 108 GLint retval; 109 retval = cr_server.head_spu->dispatch_table.GetAttribLocation(crStateGetProgramHWID(program), name ); 110 crServerReturnValue( &retval, sizeof(retval) ); 111 return retval; /* WILL PROBABLY BE IGNORED */ 112 } 113 114 GLhandleARB SERVER_DISPATCH_APIENTRY crServerDispatchGetHandleARB( GLenum pname ) 115 { 116 GLhandleARB retval; 117 retval = cr_server.head_spu->dispatch_table.GetHandleARB(pname); 118 if (pname==GL_PROGRAM_OBJECT_ARB) 119 { 120 retval = crStateGLSLProgramHWIDtoID(retval); 121 } 122 crServerReturnValue( &retval, sizeof(retval) ); 123 return retval; /* WILL PROBABLY BE IGNORED */ 124 } 125 126 GLint SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformLocation(GLuint program, const char * name) 127 { 128 GLint retval; 129 retval = cr_server.head_spu->dispatch_table.GetUniformLocation(crStateGetProgramHWID(program), name); 130 crServerReturnValue( &retval, sizeof(retval) ); 131 return retval; /* WILL PROBABLY BE IGNORED */ 132 } 133 106 134 #endif /* #ifdef CR_OPENGL_VERSION_2_0 */ -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c
r27889 r31808 41 41 { 42 42 if (!cr_server.sharedDisplayLists) { 43 int client = cr_server.curClient->number;44 return id + client * 100000;45 }46 return id;47 }48 49 50 GLuint crServerTranslateTextureID( GLuint id )51 {52 if (!cr_server.sharedTextureObjects && id) {53 43 int client = cr_server.curClient->number; 54 44 return id + client * 100000; … … 248 238 void SERVER_DISPATCH_APIENTRY crServerDispatchBindTexture( GLenum target, GLuint texture ) 249 239 { 250 texture = crServerTranslateTextureID( texture );251 240 crStateBindTexture( target, texture ); 252 cr_server.head_spu->dispatch_table.BindTexture( target, texture ); 253 } 254 241 cr_server.head_spu->dispatch_table.BindTexture(target, crStateGetTextureHWID(texture)); 242 } 255 243 256 244 void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteTextures( GLsizei n, const GLuint *textures) 257 245 { 258 if (!cr_server.sharedTextureObjects) { 259 GLuint *newTextures = (GLuint *) crAlloc(n * sizeof(GLuint)); 260 GLint i; 261 if (!newTextures) { 262 crError("crServerDispatchDeleteTextures: out of memory"); 263 return; 264 } 265 for (i = 0; i < n; i++) { 266 newTextures[i] = crServerTranslateTextureID( textures[i] ); 267 } 268 crStateDeleteTextures( n, newTextures ); 269 cr_server.head_spu->dispatch_table.DeleteTextures( n, newTextures ); 270 crFree(newTextures); 271 } 272 else { 273 crStateDeleteTextures( n, textures ); 274 cr_server.head_spu->dispatch_table.DeleteTextures( n, textures ); 275 } 246 GLuint *newTextures = (GLuint *) crAlloc(n * sizeof(GLuint)); 247 GLint i; 248 249 if (!newTextures) 250 { 251 crError("crServerDispatchDeleteTextures: out of memory"); 252 return; 253 } 254 255 for (i = 0; i < n; i++) 256 { 257 newTextures[i] = crStateGetTextureHWID(textures[i]); 258 } 259 260 crStateDeleteTextures(n, textures); 261 cr_server.head_spu->dispatch_table.DeleteTextures(n, newTextures); 262 crFree(newTextures); 276 263 } 277 264 278 265 void SERVER_DISPATCH_APIENTRY crServerDispatchPrioritizeTextures( GLsizei n, const GLuint * textures, const GLclampf * priorities ) 279 266 { 280 if (!cr_server.sharedTextureObjects) 267 GLuint *newTextures = (GLuint *) crAlloc(n * sizeof(GLuint)); 268 GLint i; 269 270 if (!newTextures) 281 271 { 282 GLuint *newTextures = (GLuint *) crAlloc(n * sizeof(GLuint)); 283 GLint i; 284 if (!newTextures) { 285 crError("crServerDispatchDeleteTextures: out of memory"); 286 return; 287 } 288 for (i = 0; i < n; i++) { 289 newTextures[i] = crServerTranslateTextureID( textures[i] ); 290 } 291 crStatePrioritizeTextures(n, newTextures, priorities); 292 cr_server.head_spu->dispatch_table.PrioritizeTextures(n, newTextures, priorities); 293 crFree(newTextures); 294 } 295 else 272 crError("crServerDispatchDeleteTextures: out of memory"); 273 return; 274 } 275 276 for (i = 0; i < n; i++) 296 277 { 297 crStatePrioritizeTextures(n, textures, priorities); 298 cr_server.head_spu->dispatch_table.PrioritizeTextures(n, textures, priorities); 299 } 278 newTextures[i] = crStateGetTextureHWID(textures[i]); 279 } 280 281 crStatePrioritizeTextures(n, textures, priorities); 282 cr_server.head_spu->dispatch_table.PrioritizeTextures(n, newTextures, priorities); 283 crFree(newTextures); 300 284 } 301 285 … … 320 304 { 321 305 GLboolean retval; 322 texture = crServerTranslateTextureID( texture ); 323 retval = cr_server.head_spu->dispatch_table.IsTexture( texture ); 306 retval = cr_server.head_spu->dispatch_table.IsTexture(crStateGetTextureHWID(texture)); 324 307 crServerReturnValue( &retval, sizeof(retval) ); 325 308 return retval; /* WILL PROBABLY BE IGNORED */ … … 330 313 { 331 314 GLboolean retval; 332 program = crServerTranslate TextureID(program);315 program = crServerTranslateProgramID(program); 333 316 retval = cr_server.head_spu->dispatch_table.IsProgramARB( program ); 334 317 crServerReturnValue( &retval, sizeof(retval) ); … … 349 332 GLuint *textures2 = (GLuint *) crAlloc(n * sizeof(GLuint)); 350 333 for (i = 0; i < n; i++) 351 textures2[i] = crS erverTranslateTextureID(textures[i]);334 textures2[i] = crStateGetTextureHWID(textures[i]); 352 335 retval = cr_server.head_spu->dispatch_table.AreTexturesResident(n, textures2, res); 353 336 crFree(textures2); 354 }355 else {356 retval = cr_server.head_spu->dispatch_table.AreTexturesResident(n, textures, res);357 337 } 358 338 crServerReturnValue(res, n * sizeof(GLboolean)); -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
r30440 r31808 793 793 char psz[200]; 794 794 GLint ctxID; 795 CRContext* pContext; 795 796 796 797 rc = SSMR3GetMem(pSSM, &key, sizeof(key)); … … 808 809 ctxID = crServerDispatchCreateContextEx(createInfo.pszDpyName, createInfo.visualBits, 0, key, createInfo.internalID); 809 810 CRASSERT((int64_t)ctxID == (int64_t)key); 811 812 pContext = (CRContext*) crHashtableSearch(cr_server.contextTable, key); 813 CRASSERT(pContext); 814 pContext->shared->id=-1; 810 815 } 811 816 … … 821 826 CRASSERT(pContext); 822 827 823 rc = crStateLoadContext(pContext, pSSM);828 rc = crStateLoadContext(pContext, cr_server.contextTable, pSSM); 824 829 AssertRCReturn(rc, rc); 825 830 } -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c
r27889 r31808 216 216 { 217 217 switch (target) { 218 case GL_SHARE_CONTEXT_RESOURCES_CR: 219 crStateShareContext(value); 220 break; 218 221 case GL_SHARED_DISPLAY_LISTS_CR: 219 222 cr_server.sharedDisplayLists = value; -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.c
r28800 r31808 229 229 230 230 /*Restore gl state*/ 231 uid = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D-> name;231 uid = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->hwid; 232 232 cr_server.head_spu->dispatch_table.BindTexture(GL_TEXTURE_2D, uid); 233 233 … … 330 330 cr_server.head_spu->dispatch_table.BindTexture(GL_TEXTURE_2D, mural->idColorTex); 331 331 cr_server.head_spu->dispatch_table.GetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_BYTE, pixels); 332 uid = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D-> name;332 uid = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->hwid; 333 333 cr_server.head_spu->dispatch_table.BindTexture(GL_TEXTURE_2D, uid); 334 334 -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py
r27889 r31808 61 61 CRASSERT(tablesize/sizeof(%s)==1); 62 62 texid = (GLuint) *get_values; 63 if (texid) 64 { 65 *get_values = (%s) (texid - cr_server.curClient->number * 100000); 66 } 63 *get_values = (%s) crStateTextureHWIDtoID(texid); 67 64 } 68 65 else if (GL_CURRENT_PROGRAM==pname) … … 93 90 *get_values = (%s) crStateRBOHWIDtoID(rbid); 94 91 } 95 """ % (types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index]) 92 else if (GL_ARRAY_BUFFER_BINDING_ARB==pname 93 || GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB==pname 94 || GL_VERTEX_ARRAY_BUFFER_BINDING_ARB==pname 95 || GL_NORMAL_ARRAY_BUFFER_BINDING_ARB==pname 96 || GL_COLOR_ARRAY_BUFFER_BINDING_ARB==pname 97 || GL_INDEX_ARRAY_BUFFER_BINDING_ARB==pname 98 || GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB==pname 99 || GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB==pname 100 || GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB==pname 101 || GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB==pname 102 || GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB==pname) 103 { 104 GLuint bufid; 105 CRASSERT(tablesize/sizeof(%s)==1); 106 bufid = (GLuint) *get_values; 107 *get_values = (%s) crStateBufferHWIDtoID(bufid); 108 } 109 """ % (types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index]) 96 110 print '\tcrServerReturnValue( get_values, tablesize );' 97 111 print '\tcrFree(get_values);' -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_special
r29856 r31808 235 235 TexImage2D 236 236 TexImage3D 237 BindBufferARB 238 IsBufferARB 239 IsFramebufferEXT 240 IsRenderbufferEXT 241 GetAttribLocation 242 GetHandleARB 243 GetUniformLocation -
trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_arrays.c
r22284 r31808 230 230 offset += sizeof(int); 231 231 cp = crStateGetClientPointerByIndex(index, &c->array); 232 CRASSERT(cp && cp->enabled && (!cp->buffer || !cp->buffer-> name));232 CRASSERT(cp && cp->enabled && (!cp->buffer || !cp->buffer->id)); 233 233 data = crAlloc((first+count)*cp->bytesPerIndex); 234 234 crMemcpy(data+first*cp->bytesPerIndex, DATA_POINTER(offset, GLvoid), count*cp->bytesPerIndex);
Note:
See TracChangeset
for help on using the changeset viewer.