On 24.08.2017 13:32, Marek Olšák wrote:


On Aug 24, 2017 1:21 PM, "Nicolai Hähnle" <nhaeh...@gmail.com <mailto:nhaeh...@gmail.com>> wrote:

    On 24.08.2017 12 <tel:24.08.2017%2012>:34, Marek Olšák wrote:



        On Aug 24, 2017 10:17 AM, "Nicolai Hähnle" <nhaeh...@gmail.com
        <mailto:nhaeh...@gmail.com> <mailto:nhaeh...@gmail.com
        <mailto:nhaeh...@gmail.com>>> wrote:

             On 23.08.2017 22:44, Marek Olšák wrote:

                 From: Marek Olšák <marek.ol...@amd.com
        <mailto:marek.ol...@amd.com> <mailto:marek.ol...@amd.com
        <mailto:marek.ol...@amd.com>>>


                 ---
                    src/gallium/drivers/radeonsi/si_shader.c | 17
        ++++++++++++++++-
                    1 file changed, 16 insertions(+), 1 deletion(-)

                 diff --git a/src/gallium/drivers/radeonsi/si_shader.c
                 b/src/gallium/drivers/radeonsi/si_shader.c
                 index f02fc9e..186a3dd 100644
                 --- a/src/gallium/drivers/radeonsi/si_shader.c
                 +++ b/src/gallium/drivers/radeonsi/si_shader.c
                 @@ -5029,21 +5029,36 @@ static void
        si_shader_dump_stats(struct
                 si_screen *sscreen,
                                                   struct
        pipe_debug_callback *debug,
                                                   unsigned processor,
                                                   FILE *file,
                                                   bool check_debug_option)
                    {
                          const struct si_shader_config *conf =
        &shader->config;
                          unsigned num_inputs = shader->selector ?
                 shader->selector->info.num_inputs : 0;
                          unsigned code_size =
        si_get_shader_binary_size(shader);
                          unsigned lds_increment = sscreen->b.chip_class
         >= CIK ?
                 512 : 256;
                          unsigned lds_per_wave = 0;
                 -       unsigned max_simd_waves = 10;
                 +       unsigned max_simd_waves;
                 +
                 +       switch (sscreen->b.family) {
                 +       /* SGPR initialization bug workaround on Tonga and
                 Iceland reduces
                 +        * the wave count to 8. */
                 +       case CHIP_TONGA:
                 +       case CHIP_ICELAND:
                 +       /* These always have 8 waves: */
                 +       case CHIP_POLARIS10:
                 +       case CHIP_POLARIS11:
                 +       case CHIP_POLARIS12:
                 +               max_simd_waves = 8;


             This should be implied by the num_sgprs set by LLVM, though.


        I have no idea what you mean or why it's relevant.


    There's this code later in the function:

             if (conf->num_sgprs) {
                     if (sscreen->b.chip_class >= VI)
                             max_simd_waves = MIN2(max_simd_waves, 800 /
    conf->num_sgprs);
                     else
                             max_simd_waves = MIN2(max_simd_waves, 512 /
    conf->num_sgprs);
             }


Yes, but that's alright. Why is it important? num_sgprs is always nonzero.

It means that the SGPR initialization bug part of the change is redundant. LLVM sets the num_sgprs in such a way that the calculation

  max_simd_waves = MIN2(max_simd_waves, 800 / conf->num_sgprs);

will set max_simd_waves to 8.

Cheers,
Nicolai


    Also, what do you mean by Polaris always having 8 waves?


The closed Vulkan driver source code says that.

Marek


    Cheers,
    Nicolai




        Marek


             Cheers,
             Nicolai



                 +               break;
                 +       default:
                 +               max_simd_waves = 10;
                 +       }
                          /* Compute LDS usage for PS. */
                          switch (processor) {
                          case PIPE_SHADER_FRAGMENT:
                                  /* The minimum usage per wave is
        (num_inputs *
                 48). The maximum
                                   * usage is (num_inputs * 48 * 16).
                                   * We can get anything in between and
        it varies
                 between waves.
                                   *
                                   * The 48 bytes per input for a single
                 primitive is equal to
                                   * 4 bytes/component * 4
        components/input * 3
                 points.



             --     Lerne, wie die Welt wirklich ist,
             Aber vergiss niemals, wie sie sein sollte.




-- Lerne, wie die Welt wirklich ist,
    Aber vergiss niemals, wie sie sein sollte.




--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to