summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/linker_util.cpp
diff options
context:
space:
mode:
authorAlejandro Piñeiro <[email protected]>2018-05-12 09:59:32 +0200
committerAlejandro Piñeiro <[email protected]>2018-06-21 14:25:05 +0200
commit215c9359ed1e71757b677787fb79aa4009c43605 (patch)
treebdc3f0697fa202a8c2962437f5371ea2fade3bd8 /src/compiler/glsl/linker_util.cpp
parent2bf91733fcb5ff8f74d71de03feeb5f3d664d199 (diff)
compiler/link: move add_program_resource to linker_util
So it could be used by the GLSL and NIR linker. v2: (Timothy Arceri) * Moved from compiler to compiler/glsl * Method renamed to link_util_add_program_resource Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/compiler/glsl/linker_util.cpp')
-rw-r--r--src/compiler/glsl/linker_util.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/compiler/glsl/linker_util.cpp b/src/compiler/glsl/linker_util.cpp
new file mode 100644
index 00000000000..0e6f4166d64
--- /dev/null
+++ b/src/compiler/glsl/linker_util.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright © 2018 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+#include "main/mtypes.h"
+#include "linker_util.h"
+#include "util/set.h"
+
+/* Utility methods shared between the GLSL IR and the NIR */
+
+bool
+link_util_add_program_resource(struct gl_shader_program *prog,
+ struct set *resource_set,
+ GLenum type, const void *data, uint8_t stages)
+{
+ assert(data);
+
+ /* If resource already exists, do not add it again. */
+ if (_mesa_set_search(resource_set, data))
+ return true;
+
+ prog->data->ProgramResourceList =
+ reralloc(prog->data,
+ prog->data->ProgramResourceList,
+ gl_program_resource,
+ prog->data->NumProgramResourceList + 1);
+
+ if (!prog->data->ProgramResourceList) {
+ linker_error(prog, "Out of memory during linking.\n");
+ return false;
+ }
+
+ struct gl_program_resource *res =
+ &prog->data->ProgramResourceList[prog->data->NumProgramResourceList];
+
+ res->Type = type;
+ res->Data = data;
+ res->StageReferences = stages;
+
+ prog->data->NumProgramResourceList++;
+
+ _mesa_set_add(resource_set, data);
+
+ return true;
+}