--- src/mapi/glapi/gen/ARB_compute_shader.xml | 40 +++++++++++++++++++++++ src/mapi/glapi/gen/Makefile.am | 1 + src/mapi/glapi/gen/gl_API.xml | 4 ++- src/mapi/glapi/gen/gl_genexec.py | 1 + src/mesa/Makefile.sources | 1 + src/mesa/SConscript | 1 + src/mesa/main/compute.c | 54 +++++++++++++++++++++++++++++++ src/mesa/main/compute.h | 38 ++++++++++++++++++++++ src/mesa/main/tests/dispatch_sanity.cpp | 4 +-- 9 files changed, 141 insertions(+), 3 deletions(-) create mode 100644 src/mapi/glapi/gen/ARB_compute_shader.xml create mode 100644 src/mesa/main/compute.c create mode 100644 src/mesa/main/compute.h
diff --git a/src/mapi/glapi/gen/ARB_compute_shader.xml b/src/mapi/glapi/gen/ARB_compute_shader.xml new file mode 100644 index 0000000..1db373e --- /dev/null +++ b/src/mapi/glapi/gen/ARB_compute_shader.xml @@ -0,0 +1,40 @@ +<?xml version="1.0"?> +<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd"> + +<!-- Note: no GLX protocol info yet. --> + + +<OpenGLAPI> + +<category name="GL_ARB_compute_shader" number="122"> + <enum name="COMPUTE_SHADER" value="0x91B9"/> + <enum name="MAX_COMPUTE_UNIFORM_BLOCKS" value="0x91BB"/> + <enum name="MAX_COMPUTE_TEXTURE_IMAGE_UNITS" value="0x91BC"/> + <enum name="MAX_COMPUTE_IMAGE_UNIFORMS" value="0x91BD"/> + <enum name="MAX_COMPUTE_SHARED_MEMORY_SIZE" value="0x8262"/> + <enum name="MAX_COMPUTE_UNIFORM_COMPONENTS" value="0x8263"/> + <enum name="MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS" value="0x8264"/> + <enum name="MAX_COMPUTE_ATOMIC_COUNTERS" value="0x8265"/> + <enum name="MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS" value="0x8266"/> + <enum name="MAX_COMPUTE_WORK_GROUP_INVOCATIONS" value="0x90EB"/> + <enum name="MAX_COMPUTE_WORK_GROUP_COUNT" value="0x91BE"/> + <enum name="MAX_COMPUTE_WORK_GROUP_SIZE" value="0x91BF"/> + <enum name="COMPUTE_WORK_GROUP_SIZE" value="0x8267"/> + <enum name="UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER" value="0x90EC"/> + <enum name="ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER" value="0x90ED"/> + <enum name="DISPATCH_INDIRECT_BUFFER" value="0x90EE"/> + <enum name="DISPATCH_INDIRECT_BUFFER_BINDING" value="0x90EF"/> + <enum name="COMPUTE_SHADER_BIT" value="0x00000020"/> + + <function name="DispatchCompute" offset="assign"> + <param name="num_groups_x" type="GLuint"/> + <param name="num_groups_y" type="GLuint"/> + <param name="num_groups_z" type="GLuint"/> + </function> + + <function name="DispatchComputeIndirect" offset="assign"> + <param name="indirect" type="GLintptr"/> + </function> +</category> + +</OpenGLAPI> diff --git a/src/mapi/glapi/gen/Makefile.am b/src/mapi/glapi/gen/Makefile.am index 65bd913..a9cf2a31 100644 --- a/src/mapi/glapi/gen/Makefile.am +++ b/src/mapi/glapi/gen/Makefile.am @@ -91,6 +91,7 @@ API_XML = \ ARB_base_instance.xml \ ARB_blend_func_extended.xml \ ARB_color_buffer_float.xml \ + ARB_compute_shader.xml \ ARB_copy_buffer.xml \ ARB_debug_output.xml \ ARB_depth_buffer_float.xml \ diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index 697b2ec..d6cd1f5 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -8464,7 +8464,9 @@ <xi:include href="ARB_clear_buffer_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> -<!-- ARB extensions #122...#123 --> +<xi:include href="ARB_compute_shader.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> + +<!-- ARB extension #123 --> <xi:include href="ARB_texture_view.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> diff --git a/src/mapi/glapi/gen/gl_genexec.py b/src/mapi/glapi/gen/gl_genexec.py index b557b3b..e376da3 100644 --- a/src/mapi/glapi/gen/gl_genexec.py +++ b/src/mapi/glapi/gen/gl_genexec.py @@ -57,6 +57,7 @@ header = """/** #include "main/clear.h" #include "main/clip.h" #include "main/colortab.h" +#include "main/compute.h" #include "main/condrender.h" #include "main/context.h" #include "main/convolve.h" diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources index 39525bc..2fdc2b6 100644 --- a/src/mesa/Makefile.sources +++ b/src/mesa/Makefile.sources @@ -23,6 +23,7 @@ MAIN_FILES = \ $(SRCDIR)main/clear.c \ $(SRCDIR)main/clip.c \ $(SRCDIR)main/colortab.c \ + $(SRCDIR)main/compute.c \ $(SRCDIR)main/condrender.c \ $(SRCDIR)main/context.c \ $(SRCDIR)main/convolve.c \ diff --git a/src/mesa/SConscript b/src/mesa/SConscript index bb9b304..24264c8 100644 --- a/src/mesa/SConscript +++ b/src/mesa/SConscript @@ -51,6 +51,7 @@ main_sources = [ 'main/clear.c', 'main/clip.c', 'main/colortab.c', + 'main/compute.c', 'main/condrender.c', 'main/context.c', 'main/convolve.c', diff --git a/src/mesa/main/compute.c b/src/mesa/main/compute.c new file mode 100644 index 0000000..5756666 --- /dev/null +++ b/src/mesa/main/compute.c @@ -0,0 +1,54 @@ +/* + * Copyright © 2014 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 "glheader.h" +#include "compute.h" +#include "context.h" + +void GLAPIENTRY +_mesa_DispatchCompute(GLuint num_groups_x, + GLuint num_groups_y, + GLuint num_groups_z) +{ + GET_CURRENT_CONTEXT(ctx); + + if (ctx->Extensions.ARB_compute_shader) { + assert(!"TODO"); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "unsupported function (glDispatchCompute) called"); + } +} + +extern void GLAPIENTRY +_mesa_DispatchComputeIndirect(GLintptr indirect) +{ + GET_CURRENT_CONTEXT(ctx); + + if (ctx->Extensions.ARB_compute_shader) { + assert(!"TODO"); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "unsupported function (glDispatchComputeIndirect) called"); + } +} diff --git a/src/mesa/main/compute.h b/src/mesa/main/compute.h new file mode 100644 index 0000000..0cc034f --- /dev/null +++ b/src/mesa/main/compute.h @@ -0,0 +1,38 @@ +/* + * Copyright © 2014 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. + */ + +#ifndef COMPUTE_H +#define COMPUTE_H + + +#include "glheader.h" + +extern void GLAPIENTRY +_mesa_DispatchCompute(GLuint num_groups_x, + GLuint num_groups_y, + GLuint num_groups_z); + +extern void GLAPIENTRY +_mesa_DispatchComputeIndirect(GLintptr indirect); + +#endif diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 227a4fd..7d4ed23 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -850,8 +850,8 @@ const struct function gl_core_functions_possible[] = { { "glClearBufferSubData", 43, -1 }, // { "glClearNamedBufferDataEXT", 43, -1 }, // XXX: Add to xml // { "glClearNamedBufferSubDataEXT", 43, -1 }, // XXX: Add to xml -// { "glDispatchCompute", 43, -1 }, // XXX: Add to xml -// { "glDispatchComputeIndirect", 43, -1 }, // XXX: Add to xml + { "glDispatchCompute", 43, -1 }, + { "glDispatchComputeIndirect", 43, -1 }, // { "glCopyImageSubData", 43, -1 }, // XXX: Add to xml { "glTextureView", 43, -1 }, { "glBindVertexBuffer", 43, -1 }, -- 1.8.5.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev