static int ephyrGLXGetVisualConfigsReal (__GLXclientState *a_cl, GLbyte *a_pc, Bool a_do_swap) { xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) a_pc; ClientPtr client = a_cl->client; xGLXGetVisualConfigsReply reply; int32_t *props_buf=NULL, num_visuals=0, num_props=0, res=BadImplementation, i=0, props_per_visual_size=0, props_buf_size=0; __GLX_DECLARE_SWAP_VARIABLES; __GLX_DECLARE_SWAP_ARRAY_VARIABLES; EPHYR_LOG ("enter\n") ; if (!ephyrHostGLXGetVisualConfigs (req->screen, &num_visuals, &num_props, &props_buf_size, &props_buf)) { EPHYR_LOG_ERROR ("ephyrHostGLXGetVisualConfigs() failed\n") ; goto out ; } EPHYR_LOG ("num_visuals:%d, num_props:%d\n", num_visuals, num_props) ; reply.numVisuals = num_visuals; reply.numProps = num_props; reply.length = (num_visuals *__GLX_SIZE_CARD32 * num_props) >> 2; reply.type = X_Reply; reply.sequenceNumber = client->sequence; if (a_do_swap) { __GLX_SWAP_SHORT(&reply.sequenceNumber); __GLX_SWAP_INT(&reply.length); __GLX_SWAP_INT(&reply.numVisuals); __GLX_SWAP_INT(&reply.numProps); __GLX_SWAP_INT_ARRAY (props_buf, num_props) ; } WriteToClient(client, sz_xGLXGetVisualConfigsReply, (char*)&reply); props_per_visual_size = props_buf_size/num_visuals ; for (i=0; i < num_visuals; i++) { WriteToClient (client, props_per_visual_size, (char*)props_buf +i*props_per_visual_size); } res = Success ; out: EPHYR_LOG ("leave\n") ; free(props_buf) ; props_buf = NULL ; return res ; }
static int ephyrGLXGetVisualConfigsReal(__GLXclientState * a_cl, GLbyte * a_pc, Bool a_do_swap) { xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) a_pc; ClientPtr client = a_cl->client; xGLXGetVisualConfigsReply reply; int32_t *props_buf = NULL, num_visuals = 0, num_props = 0, res = BadImplementation, i = 0, props_per_visual_size = 0, props_buf_size = 0; __GLX_DECLARE_SWAP_VARIABLES; __GLX_DECLARE_SWAP_ARRAY_VARIABLES; EPHYR_LOG("enter\n"); if (!ephyrHostGLXGetVisualConfigs(req->screen, &num_visuals, &num_props, &props_buf_size, &props_buf)) { EPHYR_LOG_ERROR("ephyrHostGLXGetVisualConfigs() failed\n"); goto out; } EPHYR_LOG("num_visuals:%d, num_props:%d\n", num_visuals, num_props); reply = (xGLXGetVisualConfigsReply) { .type = X_Reply, .sequenceNumber = client->sequence, .length = (num_visuals * __GLX_SIZE_CARD32 * num_props) >> 2, .numVisuals = num_visuals, .numProps = num_props }; if (a_do_swap) { __GLX_SWAP_SHORT(&reply.sequenceNumber); __GLX_SWAP_INT(&reply.length); __GLX_SWAP_INT(&reply.numVisuals); __GLX_SWAP_INT(&reply.numProps); __GLX_SWAP_INT_ARRAY(props_buf, num_props); } WriteToClient(client, sz_xGLXGetVisualConfigsReply, &reply); props_per_visual_size = props_buf_size / num_visuals; for (i = 0; i < num_visuals; i++) { WriteToClient(client, props_per_visual_size, (char *) props_buf + i * props_per_visual_size); } res = Success; out: EPHYR_LOG("leave\n"); free(props_buf); props_buf = NULL; return res; } static int ephyrGLXGetFBConfigsSGIXReal(__GLXclientState * a_cl, GLbyte * a_pc, Bool a_do_swap) { xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *) a_pc; ClientPtr client = a_cl->client; xGLXGetVisualConfigsReply reply; int32_t *props_buf = NULL, num_visuals = 0, num_props = 0, res = BadImplementation, i = 0, props_per_visual_size = 0, props_buf_size = 0; __GLX_DECLARE_SWAP_VARIABLES; __GLX_DECLARE_SWAP_ARRAY_VARIABLES; EPHYR_LOG("enter\n"); if (!ephyrHostGLXVendorPrivGetFBConfigsSGIX(req->screen, &num_visuals, &num_props, &props_buf_size, &props_buf)) { EPHYR_LOG_ERROR("ephyrHostGLXGetVisualConfigs() failed\n"); goto out; } EPHYR_LOG("num_visuals:%d, num_props:%d\n", num_visuals, num_props); reply = (xGLXGetVisualConfigsReply) { .type = X_Reply, .sequenceNumber = client->sequence, .length = props_buf_size >> 2, .numVisuals = num_visuals, .numProps = num_props }; if (a_do_swap) { __GLX_SWAP_SHORT(&reply.sequenceNumber); __GLX_SWAP_INT(&reply.length); __GLX_SWAP_INT(&reply.numVisuals); __GLX_SWAP_INT(&reply.numProps); __GLX_SWAP_INT_ARRAY(props_buf, num_props); } WriteToClient(client, sz_xGLXGetVisualConfigsReply, &reply); props_per_visual_size = props_buf_size / num_visuals; for (i = 0; i < num_visuals; i++) { WriteToClient(client, props_per_visual_size, &((char *) props_buf)[i * props_per_visual_size]); } res = Success; out: EPHYR_LOG("leave\n"); free(props_buf); props_buf = NULL; return res; } int ephyrGLXGetVisualConfigs(__GLXclientState * a_cl, GLbyte * a_pc) { return ephyrGLXGetVisualConfigsReal(a_cl, a_pc, FALSE); } int ephyrGLXGetVisualConfigsSwap(__GLXclientState * a_cl, GLbyte * a_pc) { return ephyrGLXGetVisualConfigsReal(a_cl, a_pc, TRUE); } int ephyrGLXClientInfo(__GLXclientState * a_cl, GLbyte * a_pc) { int res = BadImplementation; xGLXClientInfoReq *req = (xGLXClientInfoReq *) a_pc; EPHYR_LOG("enter\n"); if (!ephyrHostGLXSendClientInfo(req->major, req->minor, (char *) req + 1)) { EPHYR_LOG_ERROR("failed to send client info to host\n"); goto out; } res = Success; out: EPHYR_LOG("leave\n"); return res; }