⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slang_label.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
字号:
/** * Functions for managing instruction labels. * Basically, this is used to manage the problem of forward branches where * we have a branch instruciton but don't know the target address yet. */#include "slang_label.h"#include "slang_mem.h"slang_label *_slang_label_new(const char *name){   slang_label *l = (slang_label *) _slang_alloc(sizeof(slang_label));   if (l) {      l->Name = _slang_strdup(name);      l->Location = -1;   }   return l;}/** * As above, but suffix the name with a unique number. */slang_label *_slang_label_new_unique(const char *name){   static int id = 1;   slang_label *l = (slang_label *) _slang_alloc(sizeof(slang_label));   if (l) {      l->Name = (char *) _slang_alloc(_mesa_strlen(name) + 10);      if (!l->Name) {         _mesa_free(l);         return NULL;      }      _mesa_sprintf(l->Name, "%s_%d", name, id);      id++;      l->Location = -1;   }   return l;}void_slang_label_delete(slang_label *l){   if (l->Name) {      _slang_free(l->Name);      l->Name = NULL;   }   if (l->References) {      _slang_free(l->References);      l->References = NULL;   }   _slang_free(l);}void_slang_label_add_reference(slang_label *l, GLuint inst){   const GLuint oldSize = l->NumReferences * sizeof(GLuint);   assert(l->Location < 0);   l->References = _slang_realloc(l->References,                                  oldSize, oldSize + sizeof(GLuint));   if (l->References) {      l->References[l->NumReferences] = inst;      l->NumReferences++;   }}GLint_slang_label_get_location(const slang_label *l){   return l->Location;}void_slang_label_set_location(slang_label *l, GLint location,                          struct gl_program *prog){   GLuint i;   assert(l->Location < 0);   assert(location >= 0);   l->Location = location;   /* for the instructions that were waiting to learn the label's location: */   for (i = 0; i < l->NumReferences; i++) {      const GLuint j = l->References[i];      prog->Instructions[j].BranchTarget = location;   }   if (l->References) {      _slang_free(l->References);      l->References = NULL;   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -