glx: __glXDisp_RenderMode(): use x_rpcbuf_t

Use x_rpcbuf_t for payload assembly and X_SEND_REPLY_WITH_RPCBUF()
for sending it all out.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult
2025-09-02 17:59:36 +02:00
committed by Enrico Weigelt
parent 8d4c9270ea
commit 025227a113

View File

@@ -34,6 +34,9 @@
#include <stdio.h>
#include <stdlib.h>
#include "dix/dix_priv.h"
#include "dix/rpcbuf_priv.h"
#include "glxserver.h"
#include "glxutil.h"
#include "glxext.h"
@@ -107,8 +110,7 @@ __glXDisp_RenderMode(__GLXclientState * cl, GLbyte * pc)
{
ClientPtr client = cl->client;
__GLXcontext *cx;
GLint nitems = 0, retBytes = 0, retval, newModeCheck;
GLubyte *retBuffer = NULL;
GLint nitems = 0, retval, newModeCheck;
GLenum newMode;
int error;
@@ -123,6 +125,8 @@ __glXDisp_RenderMode(__GLXclientState * cl, GLbyte * pc)
newMode = *(GLenum *) pc;
retval = glRenderMode(newMode);
x_rpcbuf_t rpcbuf = { .swapped = client->swapped, .err_clear = TRUE };
/* Check that render mode worked */
glGetIntegerv(GL_RENDER_MODE, &newModeCheck);
if (newModeCheck != newMode) {
@@ -149,8 +153,7 @@ __glXDisp_RenderMode(__GLXclientState * cl, GLbyte * pc)
else {
nitems = retval;
}
retBytes = nitems * __GLX_SIZE_FLOAT32;
retBuffer = (GLubyte *) cx->feedbackBuf;
x_rpcbuf_write_CARD8s(&rpcbuf, (CARD8*)cx->feedbackBuf, nitems * __GLX_SIZE_FLOAT32);
cx->renderMode = newMode;
break;
case GL_SELECT:
@@ -179,8 +182,8 @@ __glXDisp_RenderMode(__GLXclientState * cl, GLbyte * pc)
}
nitems = bp - cx->selectBuf;
}
retBytes = nitems * __GLX_SIZE_CARD32;
retBuffer = (GLubyte *) cx->selectBuf;
x_rpcbuf_write_CARD8s(&rpcbuf, (CARD8*)cx->selectBuf, nitems * __GLX_SIZE_CARD32);
cx->renderMode = newMode;
break;
}
@@ -191,18 +194,12 @@ __glXDisp_RenderMode(__GLXclientState * cl, GLbyte * pc)
*/
noChangeAllowed:;
xGLXRenderModeReply reply = {
.type = X_Reply,
.sequenceNumber = client->sequence,
.length = nitems,
.retval = retval,
.size = nitems,
.newMode = newMode
};
WriteToClient(client, sizeof(xGLXRenderModeReply), &reply);
if (retBytes) {
WriteToClient(client, retBytes, retBuffer);
}
return Success;
return X_SEND_REPLY_WITH_RPCBUF(client, reply, rpcbuf);
}
int