[Mesa-dev] [PATCH v3 18/19] st/mesa: implement limits for ARB_compute_shader
Samuel Pitoiset
samuel.pitoiset at gmail.com
Wed Feb 10 18:10:47 UTC 2016
According to the spec, this also increases the following minimum values:
- MAX_COMBINED_TEXTURE_IMAGE_UNITS 96 (6*16), was 80
- MAX_UNIFORM_BUFFER_BINDINGS 72 (6*12), was 60
ARB_compute_shader is not enabled by default because images support is
still not implemented yet. If you want to use it you need to set
MESA_EXTENSION_OVERRIDE=GL_ARB_compute_shader.
Changes from v2:
- make use of the new PIPE_CAP_SHADER_SUPPORTED_IRS cap instead of
enabling the extension when PIPE_CAP_COMPUTE is enabled.
- query for PIPE_CAP_COMPUTE first
- s/shader_supported_irs/compute_supported_irs/
- disable ARB_compute_shader and add a comment which explains why
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com> (v1)
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu> (v1)
---
src/mesa/state_tracker/st_extensions.c | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 6736ebc..bdfbded 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -276,7 +276,8 @@ void st_init_limits(struct pipe_screen *screen,
c->Program[MESA_SHADER_TESS_CTRL].MaxTextureImageUnits +
c->Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits +
c->Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits +
- c->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits,
+ c->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits +
+ c->Program[MESA_SHADER_COMPUTE].MaxTextureImageUnits,
MAX_COMBINED_TEXTURE_IMAGE_UNITS);
/* This depends on program constants. */
@@ -336,7 +337,8 @@ void st_init_limits(struct pipe_screen *screen,
c->Program[MESA_SHADER_TESS_CTRL].MaxUniformBlocks +
c->Program[MESA_SHADER_TESS_EVAL].MaxUniformBlocks +
c->Program[MESA_SHADER_GEOMETRY].MaxUniformBlocks +
- c->Program[MESA_SHADER_FRAGMENT].MaxUniformBlocks;
+ c->Program[MESA_SHADER_FRAGMENT].MaxUniformBlocks +
+ c->Program[MESA_SHADER_COMPUTE].MaxUniformBlocks;
assert(c->MaxCombinedUniformBlocks <= MAX_COMBINED_UNIFORM_BUFFERS);
}
@@ -1018,4 +1020,31 @@ void st_init_extensions(struct pipe_screen *screen,
if ((ST_DEBUG & DEBUG_GREMEDY) &&
screen->get_param(screen, PIPE_CAP_STRING_MARKER))
extensions->GREMEDY_string_marker = GL_TRUE;
+
+ if (screen->get_param(screen, PIPE_CAP_COMPUTE)) {
+ int compute_supported_irs =
+ screen->get_shader_param(screen, PIPE_SHADER_COMPUTE,
+ PIPE_SHADER_CAP_SUPPORTED_IRS);
+ if (compute_supported_irs & (1 << PIPE_SHADER_IR_TGSI)) {
+ uint64_t grid_size[3], block_size[3];
+
+ screen->get_compute_param(screen, PIPE_COMPUTE_CAP_MAX_GRID_SIZE,
+ grid_size);
+ screen->get_compute_param(screen, PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE,
+ block_size);
+ screen->get_compute_param(screen,
+ PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK,
+ &consts->MaxComputeWorkGroupInvocations);
+ screen->get_compute_param(screen, PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE,
+ &consts->MaxComputeSharedMemorySize);
+
+ for (i = 0; i < 3; i++) {
+ consts->MaxComputeWorkGroupCount[i] = grid_size[i];
+ consts->MaxComputeWorkGroupSize[i] = block_size[i];
+ }
+ /* XXX: ARB_compute_shader is not enabled by default because images
+ * support is still not implemented yet. */
+ /* extensions->ARB_compute_shader = true; */
+ }
+ }
}
--
2.6.4
More information about the mesa-dev
mailing list