On 12.09.2016 17:43, Samuel Pitoiset wrote:


On 09/12/2016 05:26 PM, Nicolai Hähnle wrote:


On 11.09.2016 20:45, Samuel Pitoiset wrote:
This extension is only exposed if the underlying driver supports
ARB_compute_shader and if PIPE_COMPUTE_MAX_VARIABLE_THREADS_PER_BLOCK
is set.

v2: - expose the ext based on that new cap

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
 src/mesa/state_tracker/st_extensions.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/mesa/state_tracker/st_extensions.c
b/src/mesa/state_tracker/st_extensions.c
index 807fbfb..ad7c637 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -1196,6 +1196,28 @@ void st_init_extensions(struct pipe_screen
*screen,
          extensions->ARB_compute_shader =

extensions->ARB_shader_image_load_store &&

extensions->ARB_shader_atomic_counters;
+
+         if (extensions->ARB_compute_shader) {
+            uint64_t max_variable_threads_per_block;
+
+            screen->get_compute_param(screen, PIPE_SHADER_IR_TGSI,
+
PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK,
+                                      &max_variable_threads_per_block);

I think this should check the return value. Or, in the earlier patch,
the handling in sp_screen.c needs to be changed. Not sure what the
convention should be, but as-is, using this with softpipe will not
initialize max_variable_threads_per_block.

I think we never check the return value of get_compute_param(). But
initializing max_variable_threads_per_block to 0 should actualy help,
what do you think?

Yes, that should work as well. Fine with me.

Cheers,
Nicolai



Nicolai

+
+            for (i = 0; i < 3; i++) {
+               /* Clamp the values to avoid having a local work group
size
+                * greater than the maximum number of invocations.
+                */
+               consts->MaxComputeVariableGroupSize[i] =
+                  MIN2(consts->MaxComputeWorkGroupSize[i],
+                       max_variable_threads_per_block);
+            }
+            consts->MaxComputeVariableGroupInvocations =
+               max_variable_threads_per_block;
+
+            extensions->ARB_compute_variable_group_size =
+               max_variable_threads_per_block > 0;
+         }
       }
    }



_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to