[Mesa-dev] [PATCH 2/2] st/mesa: handle GL_UNSIGNED_INT64_ARB in st_pipe_vertex_format

Ilia Mirkin imirkin at alum.mit.edu
Mon May 28 19:21:17 UTC 2018


On Mon, May 28, 2018 at 3:12 PM, Marek Olšák <maraeo at gmail.com> wrote:
> On Mon, May 28, 2018 at 3:05 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>>
>> On Mon, May 28, 2018 at 2:48 PM, Marek Olšák <maraeo at gmail.com> wrote:
>> > On Mon, May 28, 2018 at 5:29 AM, Nicolai Hähnle <nhaehnle at gmail.com>
>> > wrote:
>> >>
>> >> On 25.05.2018 23:03, Marek Olšák wrote:
>> >>>
>> >>> From: Marek Olšák <marek.olsak at amd.com>
>> >>>
>> >>> Bindless texture handles can be passed via vertex attribs using this
>> >>> type.
>> >>> This fixes a bunch of bindless piglit tests on radeonsi.
>> >>>
>> >>> Cc: 18.0 18.1 <mesa-stable at lists.freedesktop.org>
>> >>> ---
>> >>>   src/mesa/state_tracker/st_atom_array.c | 3 +++
>> >>>   1 file changed, 3 insertions(+)
>> >>>
>> >>> diff --git a/src/mesa/state_tracker/st_atom_array.c
>> >>> b/src/mesa/state_tracker/st_atom_array.c
>> >>> index 9a0935e21a5..76dc81975c8 100644
>> >>> --- a/src/mesa/state_tracker/st_atom_array.c
>> >>> +++ b/src/mesa/state_tracker/st_atom_array.c
>> >>> @@ -292,20 +292,23 @@ st_pipe_vertex_format(const struct
>> >>> gl_array_attributes *attrib)
>> >>>         assert(size == 3 && !integer && format == GL_RGBA);
>> >>>         return PIPE_FORMAT_R11G11B10_FLOAT;
>> >>>        case GL_UNSIGNED_BYTE:
>> >>>         if (format == GL_BGRA) {
>> >>>            /* this is an odd-ball case */
>> >>>            assert(normalized);
>> >>>            return PIPE_FORMAT_B8G8R8A8_UNORM;
>> >>>         }
>> >>>         break;
>> >>> +
>> >>> +   case GL_UNSIGNED_INT64_ARB:
>> >>> +      return PIPE_FORMAT_R32G32_UINT;
>> >>
>> >>
>> >> Is it not possible to have vectors of uint64 as attributes?
>> >
>> >
>> > I don't think we support uint64 in shaders. We only support bindless
>> > samplers, which can't be vectors.
>>
>> While we do support them in theory [i64vecN attributes], in practice
>> they get lowered in init_velement_lowered (ideally attrib->Doubles is
>> set there). Given that the 64-bit bindless attributes have the same
>> counting issues, I think they should go through the same lowering
>> logic, even though in practice it won't matter (since it always fits
>> into a single attribute).
>>
>> I did do a bit of tracing, and it seemed like that should already work
>> with the current code, but clearly it doesn't for some reason.
>>
>> This patch seems like a workaround, although in practice, it will work
>> too.
>
>
> Vector uint64 vertex attributes are only supported with the NV extension.

Indeed you're right -- I thought ARB_gpu_shader_int64 would support
them, but I had misread it earlier. However the remainder of my
arguments applies, I think.

_mesa_VertexAttribLPointer sets doubles to true, so it should already work.

  -ilia


More information about the mesa-dev mailing list