<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 22/8/20 23:59, Luke Kenneth Casson
      Leighton wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAPweEDyCBfbm1J15=DRLsrh0MPv_H=fDT19Cq2Eh4g-TMtWGiA@mail.gmail.com">
      <pre class="moz-quote-pre" wrap="">On Sat, Aug 22, 2020 at 10:34 PM apinheiro <a class="moz-txt-link-rfc2396E" href="mailto:apinheiro@igalia.com"><apinheiro@igalia.com></a> wrote:

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">As Jason mentioned, to get a Vulkan driver started, you would need more
than just one method. If you want a reference:

<a class="moz-txt-link-freetext" href="https://gitlab.freedesktop.org/apinheiro/mesa/-/commit/07d01ebf6aae2f9ae71a8bea13a5d8acccb6280e">https://gitlab.freedesktop.org/apinheiro/mesa/-/commit/07d01ebf6aae2f9ae71a8bea13a5d8acccb6280e</a>

This commit added the basic skeleton for v3dv (broadcom mesa vulkan
driver).
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
fantastic this is extremely helpful and much appreciated, thank you.

some background: vivek has kindly agreed to start the NLNet-funded
LibreSOC MESA Vulkan driver.  given that the LibreSOC CPU is a hybrid
CPU/VPU/GPU with an augmented POWER9 ISA (rather than "a totally
separate custom GPU with a foreign ISA completely incompatible with
POWER9"), the first step is actually a general-purpose non-accelerated
*software* Vulkan Driver, very similar to SwiftShader in concept
except:

* utilising NIR in order to take advantage of the 3D shader passes and
the information it can hold
* retaining vector, predication and texturisation intrinsics right up
to the very last second when handing over to LLVM-IR
* relying on "general" LLVM-IR to perform translation for *native*
(host) execution - not a "totally separate custom GPU..."
* initially entirely targetting *host* (native) scalar instructions
[or, if general-purpose LLVM-IR happens to use NEON, SSE etc. that's
great but not our concern]

in other words it should be possible for the LibreSOC Vulkan driver to
run on native non-accelerated CPUs - x86, POWER9, ARM, MIPS and so on.

the second step will be to add custom 3D instructions *to POWER9*, at
which point whilst we hope to retain the ability to still run on
unaccelerated hardware, it is a secondary priority, albeit a very
important one.

as there may be questions "why not start from a different point, why
not use SwiftShader or gallium" and so on, that evaluation took place
here:
<a class="moz-txt-link-freetext" href="https://bugs.libre-soc.org/show_bug.cgi?id=251">https://bugs.libre-soc.org/show_bug.cgi?id=251</a>

constructive feedback on this approach greatly appreciated:
<a class="moz-txt-link-freetext" href="https://bugs.libre-soc.org/show_bug.cgi?id=251#c36">https://bugs.libre-soc.org/show_bug.cgi?id=251#c36</a></pre>
    </blockquote>
    <p><br>
    </p>
    <p>Quoting from there:</p>
    <p>>  it should just return some error code as VkResult.</p>
    <p>Not sure why it should return an error code. Even if initially is
      a no-op pipeline, if the method is able to create the object I
      think it is ok to return success, and let errors to be for real
      errors (out of memory, etc). But I guess that's ok if you prefer
      that until it starts to do something real.</p>
    <p class="bz_comment_text">> Test this setup with by forcing
      application to use this driver. Need to figure out way how to
      force it. May be through VK_ICD_FILENAMES.</p>
    <p class="bz_comment_text">Yes you can do that with the
      VK_ICD_FILENAMES envvar.</p>
    <p class="bz_comment_text"><br>
    </p>
    <p class="bz_comment_text">> Step3: Once we have above broken
      driver ready we can start enabling code required to process
      "COMPUTE" shaders.</p>
    <p class="bz_comment_text">Any specific reason to start with compute
      shaders? (mostly curiosity).</p>
    <p class="bz_comment_text">In any case, those steps look good
      enough, although I lack any context of the final target. The only
      thing that I miss is something like "writing the most basic vulkan
      program we can, and get it working with the driver". FWIW, when we
      did that for v3dv, we didn't even rendered anything, we just used
      clear/stores and confirmed that the output was correct. This
      allowed us starting with a basic driver that didn't even need a
      working backend compiler.<br>
    </p>
    <p class="bz_comment_text">BR<br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:CAPweEDyCBfbm1J15=DRLsrh0MPv_H=fDT19Cq2Eh4g-TMtWGiA@mail.gmail.com">
      <pre class="moz-quote-pre" wrap="">

with thanks and gratitude,

l.
_______________________________________________
mesa-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a>

</pre>
    </blockquote>
  </body>
</html>