rsScriptC_LibGL.cpp revision feede2aee6fe3e721ee71ffc35b277f1d9260e03
1536923df75eb53a2c27e889526b200e170e45492Jason Sams/* 2536923df75eb53a2c27e889526b200e170e45492Jason Sams * Copyright (C) 2009 The Android Open Source Project 3536923df75eb53a2c27e889526b200e170e45492Jason Sams * 4536923df75eb53a2c27e889526b200e170e45492Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5536923df75eb53a2c27e889526b200e170e45492Jason Sams * you may not use this file except in compliance with the License. 6536923df75eb53a2c27e889526b200e170e45492Jason Sams * You may obtain a copy of the License at 7536923df75eb53a2c27e889526b200e170e45492Jason Sams * 8536923df75eb53a2c27e889526b200e170e45492Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9536923df75eb53a2c27e889526b200e170e45492Jason Sams * 10536923df75eb53a2c27e889526b200e170e45492Jason Sams * Unless required by applicable law or agreed to in writing, software 11536923df75eb53a2c27e889526b200e170e45492Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12536923df75eb53a2c27e889526b200e170e45492Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13536923df75eb53a2c27e889526b200e170e45492Jason Sams * See the License for the specific language governing permissions and 14536923df75eb53a2c27e889526b200e170e45492Jason Sams * limitations under the License. 15536923df75eb53a2c27e889526b200e170e45492Jason Sams */ 16536923df75eb53a2c27e889526b200e170e45492Jason Sams 17536923df75eb53a2c27e889526b200e170e45492Jason Sams#include "rsContext.h" 18536923df75eb53a2c27e889526b200e170e45492Jason Sams#include "rsScriptC.h" 19536923df75eb53a2c27e889526b200e170e45492Jason Sams#include "rsMatrix.h" 20536923df75eb53a2c27e889526b200e170e45492Jason Sams 21536923df75eb53a2c27e889526b200e170e45492Jason Sams#include "utils/Timers.h" 22536923df75eb53a2c27e889526b200e170e45492Jason Sams 23536923df75eb53a2c27e889526b200e170e45492Jason Sams#define GL_GLEXT_PROTOTYPES 24536923df75eb53a2c27e889526b200e170e45492Jason Sams 25536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <GLES/gl.h> 26536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <GLES/glext.h> 27536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <GLES2/gl2.h> 28536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <GLES2/gl2ext.h> 29536923df75eb53a2c27e889526b200e170e45492Jason Sams 30536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <time.h> 31536923df75eb53a2c27e889526b200e170e45492Jason Sams 32536923df75eb53a2c27e889526b200e170e45492Jason Samsusing namespace android; 33536923df75eb53a2c27e889526b200e170e45492Jason Samsusing namespace android::renderscript; 34536923df75eb53a2c27e889526b200e170e45492Jason Sams 35536923df75eb53a2c27e889526b200e170e45492Jason Sams#define GET_TLS() Context::ScriptTLSStruct * tls = \ 36536923df75eb53a2c27e889526b200e170e45492Jason Sams (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \ 37536923df75eb53a2c27e889526b200e170e45492Jason Sams Context * rsc = tls->mContext; \ 38536923df75eb53a2c27e889526b200e170e45492Jason Sams ScriptC * sc = (ScriptC *) tls->mScript 39536923df75eb53a2c27e889526b200e170e45492Jason Sams 40536923df75eb53a2c27e889526b200e170e45492Jason Sams 41536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 42536923df75eb53a2c27e889526b200e170e45492Jason Sams// Context 43536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 44536923df75eb53a2c27e889526b200e170e45492Jason Sams 45536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va) 46536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 47f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ_OR_NULL(va); 48f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(vpf); 49536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 50536923df75eb53a2c27e889526b200e170e45492Jason Sams rsi_ProgramBindTexture(rsc, 51536923df75eb53a2c27e889526b200e170e45492Jason Sams static_cast<ProgramFragment *>(vpf), 52536923df75eb53a2c27e889526b200e170e45492Jason Sams slot, 53536923df75eb53a2c27e889526b200e170e45492Jason Sams static_cast<Allocation *>(va)); 54536923df75eb53a2c27e889526b200e170e45492Jason Sams 55536923df75eb53a2c27e889526b200e170e45492Jason Sams} 56536923df75eb53a2c27e889526b200e170e45492Jason Sams 57536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindSampler(RsProgramFragment vpf, uint32_t slot, RsSampler vs) 58536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 59f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ_OR_NULL(vs); 60f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(vpf); 61536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 62536923df75eb53a2c27e889526b200e170e45492Jason Sams rsi_ProgramBindSampler(rsc, 63536923df75eb53a2c27e889526b200e170e45492Jason Sams static_cast<ProgramFragment *>(vpf), 64536923df75eb53a2c27e889526b200e170e45492Jason Sams slot, 65536923df75eb53a2c27e889526b200e170e45492Jason Sams static_cast<Sampler *>(vs)); 66536923df75eb53a2c27e889526b200e170e45492Jason Sams 67536923df75eb53a2c27e889526b200e170e45492Jason Sams} 68536923df75eb53a2c27e889526b200e170e45492Jason Sams 69536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindProgramStore(RsProgramStore pfs) 70536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 71f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ_OR_NULL(pfs); 72536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 73536923df75eb53a2c27e889526b200e170e45492Jason Sams rsi_ContextBindProgramStore(rsc, pfs); 74536923df75eb53a2c27e889526b200e170e45492Jason Sams} 75536923df75eb53a2c27e889526b200e170e45492Jason Sams 76536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindProgramFragment(RsProgramFragment pf) 77536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 78f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ_OR_NULL(pf); 79536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 80536923df75eb53a2c27e889526b200e170e45492Jason Sams rsi_ContextBindProgramFragment(rsc, pf); 81536923df75eb53a2c27e889526b200e170e45492Jason Sams} 82536923df75eb53a2c27e889526b200e170e45492Jason Sams 83536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindProgramVertex(RsProgramVertex pv) 84536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 85f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ_OR_NULL(pv); 86536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 87536923df75eb53a2c27e889526b200e170e45492Jason Sams rsi_ContextBindProgramVertex(rsc, pv); 88536923df75eb53a2c27e889526b200e170e45492Jason Sams} 89536923df75eb53a2c27e889526b200e170e45492Jason Sams 90536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindProgramRaster(RsProgramRaster pv) 91536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 92f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ_OR_NULL(pv); 93536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 94536923df75eb53a2c27e889526b200e170e45492Jason Sams rsi_ContextBindProgramRaster(rsc, pv); 95536923df75eb53a2c27e889526b200e170e45492Jason Sams} 96536923df75eb53a2c27e889526b200e170e45492Jason Sams 97536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 98536923df75eb53a2c27e889526b200e170e45492Jason Sams// VP 99536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 100536923df75eb53a2c27e889526b200e170e45492Jason Sams 101d8e76204555e5739df495f92061cd3861ad83bb9Jim Millerstatic void SC_vpLoadProjectionMatrix(const rsc_Matrix *m) 102d8e76204555e5739df495f92061cd3861ad83bb9Jim Miller{ 103d8e76204555e5739df495f92061cd3861ad83bb9Jim Miller GET_TLS(); 104b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk rsc->getVertex()->setProjectionMatrix(rsc, m); 105d8e76204555e5739df495f92061cd3861ad83bb9Jim Miller} 106d8e76204555e5739df495f92061cd3861ad83bb9Jim Miller 107536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_vpLoadModelMatrix(const rsc_Matrix *m) 108536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 109536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 110b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk rsc->getVertex()->setModelviewMatrix(rsc, m); 111536923df75eb53a2c27e889526b200e170e45492Jason Sams} 112536923df75eb53a2c27e889526b200e170e45492Jason Sams 113536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_vpLoadTextureMatrix(const rsc_Matrix *m) 114536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 115536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 116b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk rsc->getVertex()->setTextureMatrix(rsc, m); 117536923df75eb53a2c27e889526b200e170e45492Jason Sams} 118536923df75eb53a2c27e889526b200e170e45492Jason Sams 119536923df75eb53a2c27e889526b200e170e45492Jason Sams 120442a647424e6537e94341654e3ae5d52efd84862Jason Samsstatic void SC_pfConstantColor(RsProgramFragment vpf, float r, float g, float b, float a) 121442a647424e6537e94341654e3ae5d52efd84862Jason Sams{ 122b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk GET_TLS(); 123f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(vpf); 124442a647424e6537e94341654e3ae5d52efd84862Jason Sams ProgramFragment *pf = static_cast<ProgramFragment *>(vpf); 125b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk pf->setConstantColor(rsc, r, g, b, a); 126442a647424e6537e94341654e3ae5d52efd84862Jason Sams} 127442a647424e6537e94341654e3ae5d52efd84862Jason Sams 128cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchoukstatic void SC_vpGetProjectionMatrix(rsc_Matrix *m) 129cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk{ 130cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk GET_TLS(); 131b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk rsc->getVertex()->getProjectionMatrix(rsc, m); 132cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk} 133cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk 134536923df75eb53a2c27e889526b200e170e45492Jason Sams 135536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 136536923df75eb53a2c27e889526b200e170e45492Jason Sams// Drawing 137536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 138536923df75eb53a2c27e889526b200e170e45492Jason Sams 139536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawQuadTexCoords(float x1, float y1, float z1, 140536923df75eb53a2c27e889526b200e170e45492Jason Sams float u1, float v1, 141536923df75eb53a2c27e889526b200e170e45492Jason Sams float x2, float y2, float z2, 142536923df75eb53a2c27e889526b200e170e45492Jason Sams float u2, float v2, 143536923df75eb53a2c27e889526b200e170e45492Jason Sams float x3, float y3, float z3, 144536923df75eb53a2c27e889526b200e170e45492Jason Sams float u3, float v3, 145536923df75eb53a2c27e889526b200e170e45492Jason Sams float x4, float y4, float z4, 146536923df75eb53a2c27e889526b200e170e45492Jason Sams float u4, float v4) 147536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 148536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 149536923df75eb53a2c27e889526b200e170e45492Jason Sams if (!rsc->setupCheck()) { 150536923df75eb53a2c27e889526b200e170e45492Jason Sams return; 151536923df75eb53a2c27e889526b200e170e45492Jason Sams } 152536923df75eb53a2c27e889526b200e170e45492Jason Sams 153536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("Quad"); 154536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1); 155536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2); 156536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3); 157536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4); 158536923df75eb53a2c27e889526b200e170e45492Jason Sams 159536923df75eb53a2c27e889526b200e170e45492Jason Sams float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4}; 160536923df75eb53a2c27e889526b200e170e45492Jason Sams const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4}; 161536923df75eb53a2c27e889526b200e170e45492Jason Sams 162536923df75eb53a2c27e889526b200e170e45492Jason Sams VertexArray va; 1634378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk va.add(GL_FLOAT, 3, 12, false, (uint32_t)vtx, "ATTRIB_position"); 1644378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk va.add(GL_FLOAT, 2, 8, false, (uint32_t)tex, "ATTRIB_texture0"); 1658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams va.setupGL2(rsc, &rsc->mStateVertexArray, &rsc->mShaderCache); 166536923df75eb53a2c27e889526b200e170e45492Jason Sams 167536923df75eb53a2c27e889526b200e170e45492Jason Sams glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 168536923df75eb53a2c27e889526b200e170e45492Jason Sams} 169536923df75eb53a2c27e889526b200e170e45492Jason Sams 170536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawQuad(float x1, float y1, float z1, 171536923df75eb53a2c27e889526b200e170e45492Jason Sams float x2, float y2, float z2, 172536923df75eb53a2c27e889526b200e170e45492Jason Sams float x3, float y3, float z3, 173536923df75eb53a2c27e889526b200e170e45492Jason Sams float x4, float y4, float z4) 174536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 175536923df75eb53a2c27e889526b200e170e45492Jason Sams SC_drawQuadTexCoords(x1, y1, z1, 0, 1, 176536923df75eb53a2c27e889526b200e170e45492Jason Sams x2, y2, z2, 1, 1, 177536923df75eb53a2c27e889526b200e170e45492Jason Sams x3, y3, z3, 1, 0, 178536923df75eb53a2c27e889526b200e170e45492Jason Sams x4, y4, z4, 0, 0); 179536923df75eb53a2c27e889526b200e170e45492Jason Sams} 180536923df75eb53a2c27e889526b200e170e45492Jason Sams 181536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawSpriteScreenspace(float x, float y, float z, float w, float h) 182536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 183536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 184536923df75eb53a2c27e889526b200e170e45492Jason Sams ObjectBaseRef<const ProgramVertex> tmp(rsc->getVertex()); 185536923df75eb53a2c27e889526b200e170e45492Jason Sams rsc->setVertex(rsc->getDefaultProgramVertex()); 186536923df75eb53a2c27e889526b200e170e45492Jason Sams //rsc->setupCheck(); 187536923df75eb53a2c27e889526b200e170e45492Jason Sams 188536923df75eb53a2c27e889526b200e170e45492Jason Sams //GLint crop[4] = {0, h, w, -h}; 189536923df75eb53a2c27e889526b200e170e45492Jason Sams 190536923df75eb53a2c27e889526b200e170e45492Jason Sams float sh = rsc->getHeight(); 191536923df75eb53a2c27e889526b200e170e45492Jason Sams 192536923df75eb53a2c27e889526b200e170e45492Jason Sams SC_drawQuad(x, sh - y, z, 193536923df75eb53a2c27e889526b200e170e45492Jason Sams x+w, sh - y, z, 194536923df75eb53a2c27e889526b200e170e45492Jason Sams x+w, sh - (y+h), z, 195536923df75eb53a2c27e889526b200e170e45492Jason Sams x, sh - (y+h), z); 196536923df75eb53a2c27e889526b200e170e45492Jason Sams rsc->setVertex((ProgramVertex *)tmp.get()); 197536923df75eb53a2c27e889526b200e170e45492Jason Sams} 1986d1cf4148cbaec21cbc7d200894f6c7923075ed0Jason Sams/* 199536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawSprite(float x, float y, float z, float w, float h) 200536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 201536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 202536923df75eb53a2c27e889526b200e170e45492Jason Sams float vin[3] = {x, y, z}; 203536923df75eb53a2c27e889526b200e170e45492Jason Sams float vout[4]; 204536923df75eb53a2c27e889526b200e170e45492Jason Sams 205536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("ds in %f %f %f", x, y, z); 206536923df75eb53a2c27e889526b200e170e45492Jason Sams rsc->getVertex()->transformToScreen(rsc, vout, vin); 207536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("ds out %f %f %f %f", vout[0], vout[1], vout[2], vout[3]); 208536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[0] /= vout[3]; 209536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[1] /= vout[3]; 210536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[2] /= vout[3]; 211536923df75eb53a2c27e889526b200e170e45492Jason Sams 212536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[0] *= rsc->getWidth() / 2; 213536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[1] *= rsc->getHeight() / 2; 214536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[0] += rsc->getWidth() / 2; 215536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[1] += rsc->getHeight() / 2; 216536923df75eb53a2c27e889526b200e170e45492Jason Sams 217536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[0] -= w/2; 218536923df75eb53a2c27e889526b200e170e45492Jason Sams vout[1] -= h/2; 219536923df75eb53a2c27e889526b200e170e45492Jason Sams 220536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("ds out2 %f %f %f", vout[0], vout[1], vout[2]); 221536923df75eb53a2c27e889526b200e170e45492Jason Sams 222536923df75eb53a2c27e889526b200e170e45492Jason Sams // U, V, W, H 223536923df75eb53a2c27e889526b200e170e45492Jason Sams SC_drawSpriteScreenspace(vout[0], vout[1], z, h, w); 224536923df75eb53a2c27e889526b200e170e45492Jason Sams //rsc->setupCheck(); 225536923df75eb53a2c27e889526b200e170e45492Jason Sams} 2266d1cf4148cbaec21cbc7d200894f6c7923075ed0Jason Sams*/ 227536923df75eb53a2c27e889526b200e170e45492Jason Sams 228536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawRect(float x1, float y1, 229536923df75eb53a2c27e889526b200e170e45492Jason Sams float x2, float y2, float z) 230536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 231536923df75eb53a2c27e889526b200e170e45492Jason Sams //LOGE("SC_drawRect %f,%f %f,%f %f", x1, y1, x2, y2, z); 232536923df75eb53a2c27e889526b200e170e45492Jason Sams SC_drawQuad(x1, y2, z, 233536923df75eb53a2c27e889526b200e170e45492Jason Sams x2, y2, z, 234536923df75eb53a2c27e889526b200e170e45492Jason Sams x2, y1, z, 235536923df75eb53a2c27e889526b200e170e45492Jason Sams x1, y1, z); 236536923df75eb53a2c27e889526b200e170e45492Jason Sams} 237536923df75eb53a2c27e889526b200e170e45492Jason Sams 238164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void SC_drawMesh(RsMesh vsm) 239164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{ 240f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(vsm); 241164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk GET_TLS(); 242164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 243536923df75eb53a2c27e889526b200e170e45492Jason Sams if (!rsc->setupCheck()) { 244536923df75eb53a2c27e889526b200e170e45492Jason Sams return; 245536923df75eb53a2c27e889526b200e170e45492Jason Sams } 246536923df75eb53a2c27e889526b200e170e45492Jason Sams sm->render(rsc); 247536923df75eb53a2c27e889526b200e170e45492Jason Sams} 248536923df75eb53a2c27e889526b200e170e45492Jason Sams 249164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void SC_drawMeshPrimitive(RsMesh vsm, uint32_t primIndex) 250536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 251f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(vsm); 252536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 253164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 254536923df75eb53a2c27e889526b200e170e45492Jason Sams if (!rsc->setupCheck()) { 255536923df75eb53a2c27e889526b200e170e45492Jason Sams return; 256536923df75eb53a2c27e889526b200e170e45492Jason Sams } 257164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk sm->renderPrimitive(rsc, primIndex); 258164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk} 259164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 260164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void SC_drawMeshPrimitiveRange(RsMesh vsm, uint32_t primIndex, uint32_t start, uint32_t len) 261164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{ 262f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(vsm); 263164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk GET_TLS(); 264164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 265164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk if (!rsc->setupCheck()) { 266164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk return; 267164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk } 268164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk sm->renderPrimitiveRange(rsc, primIndex, start, len); 269536923df75eb53a2c27e889526b200e170e45492Jason Sams} 270536923df75eb53a2c27e889526b200e170e45492Jason Sams 271a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchoukstatic void SC_meshComputeBoundingBox(RsMesh vsm, float *minX, float *minY, float *minZ, 272a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk float *maxX, float *maxY, float *maxZ) 273a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk{ 274f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(vsm); 275a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk GET_TLS(); 276a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 277a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk sm->computeBBox(); 278a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk *minX = sm->mBBoxMin[0]; 279a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk *minY = sm->mBBoxMin[1]; 280a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk *minZ = sm->mBBoxMin[2]; 281a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk *maxX = sm->mBBoxMax[0]; 282a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk *maxY = sm->mBBoxMax[1]; 283a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk *maxZ = sm->mBBoxMax[2]; 284a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk} 285a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk 286536923df75eb53a2c27e889526b200e170e45492Jason Sams 287536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 288536923df75eb53a2c27e889526b200e170e45492Jason Sams// 289536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 290536923df75eb53a2c27e889526b200e170e45492Jason Sams 291536923df75eb53a2c27e889526b200e170e45492Jason Sams 292536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_color(float r, float g, float b, float a) 293536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 294536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 295442a647424e6537e94341654e3ae5d52efd84862Jason Sams ProgramFragment *pf = (ProgramFragment *)rsc->getFragment(); 296b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk pf->setConstantColor(rsc, r, g, b, a); 297536923df75eb53a2c27e889526b200e170e45492Jason Sams} 298536923df75eb53a2c27e889526b200e170e45492Jason Sams 299d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsstatic void SC_uploadToTexture2(RsAllocation va, uint32_t baseMipLevel) 300536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 301f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(va); 302536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 303536923df75eb53a2c27e889526b200e170e45492Jason Sams rsi_AllocationUploadToTexture(rsc, va, false, baseMipLevel); 304536923df75eb53a2c27e889526b200e170e45492Jason Sams} 305d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsstatic void SC_uploadToTexture(RsAllocation va) 306d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams{ 307f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(va); 308d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams GET_TLS(); 309d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams rsi_AllocationUploadToTexture(rsc, va, false, 0); 310d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams} 311536923df75eb53a2c27e889526b200e170e45492Jason Sams 312536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_uploadToBufferObject(RsAllocation va) 313536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 314f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(va); 315536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 316536923df75eb53a2c27e889526b200e170e45492Jason Sams rsi_AllocationUploadToBufferObject(rsc, va); 317536923df75eb53a2c27e889526b200e170e45492Jason Sams} 318536923df75eb53a2c27e889526b200e170e45492Jason Sams 319d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsstatic void SC_ClearColor(float r, float g, float b, float a) 320536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 321536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 322feede2aee6fe3e721ee71ffc35b277f1d9260e03Alex Sakhartchouk rsc->setupProgramStore(); 323536923df75eb53a2c27e889526b200e170e45492Jason Sams 324d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams glClearColor(r, g, b, a); 325d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams glClear(GL_COLOR_BUFFER_BIT); 326536923df75eb53a2c27e889526b200e170e45492Jason Sams} 327536923df75eb53a2c27e889526b200e170e45492Jason Sams 328d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsstatic void SC_ClearDepth(float v) 329536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 330536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 331feede2aee6fe3e721ee71ffc35b277f1d9260e03Alex Sakhartchouk rsc->setupProgramStore(); 332d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 333d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams glClearDepthf(v); 334d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams glClear(GL_DEPTH_BUFFER_BIT); 335536923df75eb53a2c27e889526b200e170e45492Jason Sams} 336536923df75eb53a2c27e889526b200e170e45492Jason Sams 337536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic uint32_t SC_getWidth() 338536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 339536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 340536923df75eb53a2c27e889526b200e170e45492Jason Sams return rsc->getWidth(); 341536923df75eb53a2c27e889526b200e170e45492Jason Sams} 342536923df75eb53a2c27e889526b200e170e45492Jason Sams 343536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic uint32_t SC_getHeight() 344536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 345536923df75eb53a2c27e889526b200e170e45492Jason Sams GET_TLS(); 346536923df75eb53a2c27e889526b200e170e45492Jason Sams return rsc->getHeight(); 347536923df75eb53a2c27e889526b200e170e45492Jason Sams} 348536923df75eb53a2c27e889526b200e170e45492Jason Sams 3499b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic void SC_DrawTextAlloc(RsAllocation va, int x, int y) 3509b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 351f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(va); 3529b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk GET_TLS(); 3539b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk Allocation *alloc = static_cast<Allocation *>(va); 3549b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk rsc->mStateFont.renderText(alloc, x, y); 3559b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 3569b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 3579b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic void SC_DrawText(const char *text, int x, int y) 3589b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 3599b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk GET_TLS(); 3609b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk rsc->mStateFont.renderText(text, x, y); 3619b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 3629b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 3639b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic void SC_BindFont(RsFont font) 3649b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 365f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams CHECK_OBJ(font); 3669b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk GET_TLS(); 3679b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk rsi_ContextBindFont(rsc, font); 3689b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 369536923df75eb53a2c27e889526b200e170e45492Jason Sams 370fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic void SC_FontColor(float r, float g, float b, float a) 371fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{ 372fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk GET_TLS(); 373fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk rsc->mStateFont.setFontColor(r, g, b, a); 374fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk} 375fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk 376536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 377536923df75eb53a2c27e889526b200e170e45492Jason Sams// Class implementation 378536923df75eb53a2c27e889526b200e170e45492Jason Sams////////////////////////////////////////////////////////////////////////////// 379536923df75eb53a2c27e889526b200e170e45492Jason Sams 380536923df75eb53a2c27e889526b200e170e45492Jason Sams// llvm name mangling ref 381536923df75eb53a2c27e889526b200e170e45492Jason Sams// <builtin-type> ::= v # void 382536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= b # bool 383536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= c # char 384536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= a # signed char 385536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= h # unsigned char 386536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= s # short 387536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= t # unsigned short 388536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= i # int 389536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= j # unsigned int 390536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= l # long 391536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= m # unsigned long 392536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= x # long long, __int64 393536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= y # unsigned long long, __int64 394536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= f # float 395536923df75eb53a2c27e889526b200e170e45492Jason Sams// ::= d # double 396536923df75eb53a2c27e889526b200e170e45492Jason Sams 397536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic ScriptCState::SymbolTable_t gSyms[] = { 398f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_bindProgramFragment }, 399f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_bindProgramStore }, 400f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_bindProgramVertex }, 401f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_bindProgramRaster }, 402f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_bindSampler }, 403f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_bindTexture }, 404d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 405f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadProjectionMatrix }, 406f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix }, 407f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix }, 408d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 409cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_vpGetProjectionMatrix }, 410cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk 411442a647424e6537e94341654e3ae5d52efd84862Jason Sams { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_pfConstantColor }, 412442a647424e6537e94341654e3ae5d52efd84862Jason Sams 413f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z11rsgGetWidthv", (void *)&SC_getWidth }, 414f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z12rsgGetHeightv", (void *)&SC_getHeight }, 415d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 416f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z18rsgUploadToTexture13rs_allocationj", (void *)&SC_uploadToTexture2 }, 41796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams { "_Z18rsgUploadToTexture13rs_allocation", (void *)&SC_uploadToTexture }, 418f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z23rsgUploadToBufferObject13rs_allocation", (void *)&SC_uploadToBufferObject }, 419d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 420f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z11rsgDrawRectfffff", (void *)&SC_drawRect }, 421f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_drawQuad }, 422f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_drawQuadTexCoords }, 423f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_drawSpriteScreenspace }, 424d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 425164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_drawMesh }, 426f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_drawMeshPrimitive }, 427f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_drawMeshPrimitiveRange }, 428a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_meshComputeBoundingBox }, 429164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 430f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z13rsgClearColorffff", (void *)&SC_ClearColor }, 431f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth }, 432d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 4339b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText }, 4349b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc }, 4359b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 436f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont }, 437fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk { "_Z12rsgFontColorffff", (void *)&SC_FontColor }, 4389b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 439536923df75eb53a2c27e889526b200e170e45492Jason Sams // misc 440f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams { "_Z5colorffff", (void *)&SC_color }, 441536923df75eb53a2c27e889526b200e170e45492Jason Sams 442536923df75eb53a2c27e889526b200e170e45492Jason Sams { NULL, NULL } 443536923df75eb53a2c27e889526b200e170e45492Jason Sams}; 444536923df75eb53a2c27e889526b200e170e45492Jason Sams 445536923df75eb53a2c27e889526b200e170e45492Jason Samsconst ScriptCState::SymbolTable_t * ScriptCState::lookupSymbolGL(const char *sym) 446536923df75eb53a2c27e889526b200e170e45492Jason Sams{ 447536923df75eb53a2c27e889526b200e170e45492Jason Sams ScriptCState::SymbolTable_t *syms = gSyms; 448536923df75eb53a2c27e889526b200e170e45492Jason Sams 449536923df75eb53a2c27e889526b200e170e45492Jason Sams while (syms->mPtr) { 450536923df75eb53a2c27e889526b200e170e45492Jason Sams if (!strcmp(syms->mName, sym)) { 451536923df75eb53a2c27e889526b200e170e45492Jason Sams return syms; 452536923df75eb53a2c27e889526b200e170e45492Jason Sams } 453536923df75eb53a2c27e889526b200e170e45492Jason Sams syms++; 454536923df75eb53a2c27e889526b200e170e45492Jason Sams } 455536923df75eb53a2c27e889526b200e170e45492Jason Sams return NULL; 456536923df75eb53a2c27e889526b200e170e45492Jason Sams} 457536923df75eb53a2c27e889526b200e170e45492Jason Sams 458