On 17.02.2017 09:31, Ernst Sjöstrand wrote:
Also, what if the user switches between say AMDGPU-PRO and RadeonSI?

I'd expect radeonsi to use the single Mesa enum, while AMDGPU-PRO obviously uses an AMD-assigned enum.

Cheers,
Nicolai


Regards
//Ernst

2017-02-17 1:33 GMT+01:00 Timothy Arceri <tarc...@itsqueeze.com
<mailto:tarc...@itsqueeze.com>>:



    On 17/02/17 10:44, Ian Romanick wrote:

        On 02/15/2017 11:58 PM, Timothy Arceri wrote:



            On 16/02/17 17:55, Tapani Pälli wrote:


                On 02/16/2017 04:52 AM, Timothy Arceri wrote:

                    In order add functionality to ARB_get_program_binary
                    we need
                    binary format enums.


                I've understood that this is a driver internal
                enumeration. When
                application gets the binary it also receives enum
                (integer value) what
                format we gave. Then when loading application needs to
                query what
                formats are supported by the implementation and load the
                correct binary.
                We just need to internally make agreement on format list
                and return
                correct one matching the current driver in use?


            Not that it's actually likely to happen but if we were to
            only have a
            single MESA enum an application could only distribute a
            single binary.


        Applications really, really, *REALLY* should not distribute binaries
        retrieved from the driver.  The intention of this extension is for
        applications to implement their own shader cache, for example, at
        application installation.  The driver can reject the binary at
        any time
        for any reason.  Driver changes, hardware changes, OS changes,
        phase of
        the moon, etc.

        Looking at the GLES extension registry, it appears that the other
        vendors have just a single binary for all the hardware they
        make.  Based
        on that, having a single Mesa enum isn't an insane idea.  We
        would just
        need to agree on the format of the header so that the driver
        receiving
        the blob could determine which driver generated the blob.


    The only other thing to consider with a single enum is that it will
    require a laptop with an Intel cpu and Nvidia gpu for example to
    recompile the binary if the user were to switch between using the
    Intel and Nvidia gpus. This might happen depending on if the laptop
    is plugged into a power source or not.

    If we don't care about this than one enum is fine.



            e.g either for AMD, INTEL or NVIDIA but not one for each.
            That is unless
            we were to compile and pack all gpu vendor binarys at the
            same time
            which seems overly complicated and expensive.

            I could see an intenal id being used for gpu generations
            from hardware
            vendors.

                    ---

                    Techland games such as Dead Island and Dying Light
                    make use of
                    GetProgramBinary(). My current guess is the Dead
                    Island crash
                    https://bugs.freedesktop.org/show_bug.cgi?id=85564
                    <https://bugs.freedesktop.org/show_bug.cgi?id=85564>
                    is caused
                    due to buggy handling of this feature not being
                    available.

                    Anyway I'm not sure how we go about getting Khronos
                    to assign
                    enums for the binary formats but thought I'd send
                    this to the
                    list for discussion.


        There's a two step process:

        1. Vendors request a block of values via the Khronos internal
        bugzilla.

        2. When the spec is ready, another bug is submitted requesting
        the spec
        be published.

        Mesa might still have some available enums assigned to it.  I'll
        have to
        check...

                     docs/specs/MESA_program_binary.txt | 78
                    ++++++++++++++++++++++++++++++++++++++
                     1 file changed, 78 insertions(+)
                     create mode 100644 docs/specs/MESA_program_binary.txt

                    diff --git a/docs/specs/MESA_program_binary.txt
                    b/docs/specs/MESA_program_binary.txt
                    new file mode 100644
                    index 0000000..b34e42e
                    --- /dev/null
                    +++ b/docs/specs/MESA_program_binary.txt
                    @@ -0,0 +1,78 @@
                    +Name
                    +
                    +    MESA_program_binary
                    +
                    +Name Strings
                    +
                    +    GL_MESA_program_binary
                    +
                    +Contact
                    +
                    +    Timothy Arceri (tarceri 'at' itsqueeze.com
                    <http://itsqueeze.com>)
                    +
                    +Status
                    +
                    +    Complete.
                    +
                    +Version
                    +
                    +    Last Modified Date: February 16, 2017
                    +    Revision: #1
                    +
                    +Number
                    +
                    +    ???
                    +
                    +Dependencies
                    +
                    +    OpenGL ES 2.0 is required.
                    +
                    +    Written based on the wording of the OpenGL ES
                    2.0 specification.
                    +
                    +    This extension interacts with
                    OES_get_program_binary.
                    +
                    +Overview
                    +
                    +    MESA provides drivers for multiple hardware
                    vendors. This extension
                    +    provides binary formats in order to avoid
                    conflicts between
                    drivers when
                    +    loading precompiled binaries.
                    +
                    +New Procedures and Functions
                    +
                    +    None.
                    +
                    +New Tokens
                    +
                    +    Accepted by the <binaryFormat> parameter of
                    ShaderBinary:
                    +
                    +        MESA_PROGRAM_BINARY_AMD                    ????
                    +        MESA_PROGRAM_BINARY_NV                     ????
                    +        MESA_PROGRAM_BINARY_INTEL                  ????
                    +        MESA_PROGRAM_BINARY_BCOM                   ????
                    +        MESA_PROGRAM_BINARY_QCOM                   ????
                    +
                    +Additions to Chapter 2 of the OpenGL ES 2.0
                    Specification (OpenGL
                    Operation)
                    +
                    +    Add the following paragraph to the end of
                    section 2.10.2:
                    +
                    +    "Depending on the hardware in use the
                    apropriate <binaryFormat> is
                    +    returned when querying the list of
                    SHADER_BINARY_FORMATS.
                    +
                    +    Pre-compiled shader binaries in this format may
                    be loaded via
                    ShaderBinary.
                    +
                    +    When a binary fails to load, an INVALID_VALUE
                    error is generated
                    and a
                    +    more detailed error message is appended to the
                    shader's info log."
                    +
                    +Errors
                    +
                    +    INVALID_VALUE is generated if the <binary>
                    parameter to
                    ShaderBinary was
                    +    produced with an incompatible version of the
                    MESA shader compiler.
                    +
                    +New State
                    +
                    +    None.
                    +
                    +Revision History
                    +
                    +    #01    02/16/2010    Timothy Arceri       First
                    draft.
                    +

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


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




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


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

Reply via email to