The rbug wire format defines the texture size parameters to be uint32_t sized
and uses memcpy to move the function parameters to the message structure.
This caused totally wrong transmitted texture sizes since the height and depth
paramterds have been changed to uint16_t in the gallium API. Fix this by doing
an explicit conversion to the correct representation before packing into the
wire message.
Fixes: e6428092f5e1 (gallium: decrease the size of pipe_resource - 64 -> 48 bytes)
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
uint32_t format,
uint32_t *width,
uint32_t width_len,
- uint16_t *height,
+ uint16_t *h16,
uint32_t height_len,
- uint16_t *depth,
+ uint16_t *d16,
uint32_t depth_len,
uint32_t blockw,
uint32_t blockh,
uint32_t __pos = 0;
uint8_t *__data = NULL;
int __ret = 0;
+ uint32_t *height = alloca(sizeof(uint32_t) * height_len);
+ uint32_t *depth = alloca(sizeof(uint32_t) * height_len);
LEN(8); /* header */
LEN(4); /* serial */
if (!__data)
return -ENOMEM;
+ for (int i = 0; i < height_len; i++)
+ height[i] = h16[i];
+ for (int i = 0; i < depth_len; i++)
+ depth[i] = d16[i];
+
WRITE(4, int32_t, ((int32_t)RBUG_OP_TEXTURE_INFO_REPLY));
WRITE(4, uint32_t, ((uint32_t)(__len / 4)));
WRITE(4, uint32_t, serial); /* serial */