1dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz/* 2dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Copyright 2009 VMware, Inc. 3dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * All Rights Reserved. 4dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * 5dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Permission is hereby granted, free of charge, to any person obtaining a 6dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * copy of this software and associated documentation files (the "Software"), 7dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * to deal in the Software without restriction, including without limitation 8dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * on the rights to use, copy, modify, merge, publish, distribute, sub 9dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * license, and/or sell copies of the Software, and to permit persons to whom 10dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * the Software is furnished to do so, subject to the following conditions: 11dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * 12dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * The above copyright notice and this permission notice (including the next 13dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * paragraph) shall be included in all copies or substantial portions of the 14dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Software. 15dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * 16dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 19dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * VMWARE AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 20dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 21dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 22dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * USE OR OTHER DEALINGS IN THE SOFTWARE. 23dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz */ 24dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 25dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz/* 26dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * This file holds the function implementation for one of the rbug extensions. 27dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Prototypes and declerations of functions and structs is in the same folder 28dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * in the header file matching this file's name. 29dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * 30dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * The functions starting rbug_send_* encodes a call to the write format and 31dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * sends that to the supplied connection, while functions starting with 32dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * rbug_demarshal_* demarshal data in the wire protocol. 33dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * 34dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Functions ending with _reply are replies to requests. 35dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz */ 36dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 37dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz#include "rbug_internal.h" 38fc3bac8a407dc2a2804236e1e2b813a3991fa84fAaron Watry#include "rbug_shader.h" 39dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 40dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_shader_list(struct rbug_connection *__con, 41dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_context_t context, 42dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 43dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 44dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 45dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 46dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 47dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 48dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 49dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 50dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* context */ 51dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 52dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 53dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 54dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 55dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 56dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 57dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 58dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 59dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_SHADER_LIST)); 60dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 61dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 62dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 63dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 64dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 65dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 66dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 67dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 68dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 69dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_SHADER_LIST, __len); 70dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 71dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 72dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 73dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 74dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 75dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 76dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 77dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 78dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_shader_info(struct rbug_connection *__con, 79dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_context_t context, 80dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_shader_t shader, 81dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 82dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 83dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 84dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 85dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 86dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 87dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 88dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 89dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* context */ 90dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* shader */ 91dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 92dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 93dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 94dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 95dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 96dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 97dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 98dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 99dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_SHADER_INFO)); 100dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 101dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 102dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_shader_t, shader); /* shader */ 103dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 104dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 105dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 106dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 107dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 108dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 109dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 110dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_SHADER_INFO, __len); 111dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 112dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 113dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 114dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 115dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 116dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 117dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 118dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 119dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_shader_disable(struct rbug_connection *__con, 120dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_context_t context, 121dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_shader_t shader, 122dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t disable, 123dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 124dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 125dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 126dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 127dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 128dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 129dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 130dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 131dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* context */ 132dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* shader */ 133dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(1); /* disable */ 134dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 135dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 136dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 137dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 138dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 139dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 140dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 141dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 142dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_SHADER_DISABLE)); 143dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 144dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 145dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_shader_t, shader); /* shader */ 146dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(1, uint8_t, disable); /* disable */ 147dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 148dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 149dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 150dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 151dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 152dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 153dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 154dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_SHADER_DISABLE, __len); 155dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 156dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 157dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 158dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 159dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 160dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 161dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 162dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 163dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_shader_replace(struct rbug_connection *__con, 164dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_context_t context, 165dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_shader_t shader, 166dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *tokens, 167dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t tokens_len, 168dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 169dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 170dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 171dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 172dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 173dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 174dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 175dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 176dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* context */ 177dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* shader */ 178dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN_ARRAY(4, tokens); /* tokens */ 179dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 180dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 181dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 182dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 183dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 184dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 185dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 186dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 187dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_SHADER_REPLACE)); 188dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 189dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 190dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_shader_t, shader); /* shader */ 191dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE_ARRAY(4, uint32_t, tokens); /* tokens */ 192dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 193dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 194dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 195dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 196dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 197dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 198dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 199dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_SHADER_REPLACE, __len); 200dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 201dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 202dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 203dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 204dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 205dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 206dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 207dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 208dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_shader_list_reply(struct rbug_connection *__con, 209dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t serial, 210dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_shader_t *shaders, 211dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t shaders_len, 212dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 213dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 214dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 215dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 216dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 217dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 218dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 219dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 220dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(4); /* serial */ 221dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN_ARRAY(8, shaders); /* shaders */ 222dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 223dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 224dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 225dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 226dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 227dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 228dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 229dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 230dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_SHADER_LIST_REPLY)); 231dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 232dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, serial); /* serial */ 233dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE_ARRAY(8, rbug_shader_t, shaders); /* shaders */ 234dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 235dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 236dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 237dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 238dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 239dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 240dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 241dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_SHADER_LIST_REPLY, __len); 242dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 243dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 244dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 245dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 246dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 247dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 248dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 249dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 250dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_shader_info_reply(struct rbug_connection *__con, 251dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t serial, 252dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *original, 253dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t original_len, 254dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *replaced, 255dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t replaced_len, 256dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t disabled, 257dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 258dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 259dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 260dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 261dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 262dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 263dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 264dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 265dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(4); /* serial */ 266dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN_ARRAY(4, original); /* original */ 267dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN_ARRAY(4, replaced); /* replaced */ 268dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(1); /* disabled */ 269dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 270dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 271dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 272dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 273dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 274dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 275dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 276dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 277dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_SHADER_INFO_REPLY)); 278dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 279dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, serial); /* serial */ 280dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE_ARRAY(4, uint32_t, original); /* original */ 281dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE_ARRAY(4, uint32_t, replaced); /* replaced */ 282dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(1, uint8_t, disabled); /* disabled */ 283dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 284dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 285dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 286dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 287dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 288dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 289dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 290dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_SHADER_INFO_REPLY, __len); 291dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 292dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 293dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 294dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 295dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 296dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 297dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 298dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 299dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_shader_list * rbug_demarshal_shader_list(struct rbug_proto_header *header) 300dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 301dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 302dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 303dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 304dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_shader_list *ret; 305dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 306dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 307dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 3087faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_SHADER_LIST) 309dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 310dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 311dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 312dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 313dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 314dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 315dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 316dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 317dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 318dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 319dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 320dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 321dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 322dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 323dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 324dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 325dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 326dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_shader_info * rbug_demarshal_shader_info(struct rbug_proto_header *header) 327dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 328dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 329dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 330dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 331dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_shader_info *ret; 332dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 333dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 334dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 3357faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_SHADER_INFO) 336dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 337dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 338dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 339dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 340dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 341dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 342dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 343dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 344dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 345dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 346dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 347dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 348dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 349dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_shader_t, shader); /* shader */ 350dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 351dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 352dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 353dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 354dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_shader_disable * rbug_demarshal_shader_disable(struct rbug_proto_header *header) 355dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 356dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 357dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 358dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 359dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_shader_disable *ret; 360dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 361dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 362dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 3637faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_SHADER_DISABLE) 364dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 365dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 366dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 367dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 368dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 369dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 370dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 371dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 372dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 373dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 374dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 375dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 376dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 377dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_shader_t, shader); /* shader */ 378dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(1, uint8_t, disable); /* disable */ 379dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 380dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 381dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 382dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 383dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_shader_replace * rbug_demarshal_shader_replace(struct rbug_proto_header *header) 384dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 385dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 386dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 387dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 388dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_shader_replace *ret; 389dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 390dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 391dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 3927faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_SHADER_REPLACE) 393dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 394dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 395dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 396dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 397dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 398dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 399dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 400dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 401dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 402dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 403dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 404dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 405dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 406dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_shader_t, shader); /* shader */ 407dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ_ARRAY(4, uint32_t, tokens); /* tokens */ 408dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 409dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 410dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 411dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 412dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_shader_list_reply * rbug_demarshal_shader_list_reply(struct rbug_proto_header *header) 413dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 414dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 415dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 416dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 417dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_shader_list_reply *ret; 418dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 419dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 420dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 4217faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_SHADER_LIST_REPLY) 422dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 423dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 424dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 425dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 426dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 427dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 428dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 429dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 430dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 431dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 432dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 433dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 434dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(4, uint32_t, serial); /* serial */ 435dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ_ARRAY(8, rbug_shader_t, shaders); /* shaders */ 436dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 437dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 438dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 439dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 440dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_shader_info_reply * rbug_demarshal_shader_info_reply(struct rbug_proto_header *header) 441dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 442dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 443dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 444dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 445dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_shader_info_reply *ret; 446dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 447dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 448dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 4497faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_SHADER_INFO_REPLY) 450dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 451dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 452dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 453dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 454dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 455dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 456dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 457dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 458dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 459dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 460dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 461dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 462dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(4, uint32_t, serial); /* serial */ 463dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ_ARRAY(4, uint32_t, original); /* original */ 464dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ_ARRAY(4, uint32_t, replaced); /* replaced */ 465dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(1, uint8_t, disabled); /* disabled */ 466dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 467dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 468dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 469