Mesa (main): v3d: add support for no buffer object bound

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Dec 3 16:10:51 UTC 2021


Module: Mesa
Branch: main
Commit: bb8285c25859b35d06ccd283d7fdf1bab07dc059
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bb8285c25859b35d06ccd283d7fdf1bab07dc059

Author: Alejandro Piñeiro <apinheiro at igalia.com>
Date:   Thu Aug 26 02:01:28 2021 +0200

v3d: add support for no buffer object bound

>From the GL_OES_texture_buffer spec:

      "If no buffer object is bound to the buffer texture, the results
       of the texel access are undefined."

this can be interpreted as allowing any result to come back, but not
terminate the program.

The current solution is not entirely complete, as it could still try to
get a wrong address for the shader state address.

This can be checked with piglit test
arb_texture_buffer_object-render-no-bo; the test is skip because it
requires OpenGL 3.1, but if overriding the version then it will crash.

Signed-off-by: Alejandro Piñeiro <apinheiro at igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13409>

---

 src/gallium/drivers/v3d/v3d_uniforms.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/gallium/drivers/v3d/v3d_uniforms.c b/src/gallium/drivers/v3d/v3d_uniforms.c
index 4bcf92cd149..d316195dd53 100644
--- a/src/gallium/drivers/v3d/v3d_uniforms.c
+++ b/src/gallium/drivers/v3d/v3d_uniforms.c
@@ -172,6 +172,20 @@ write_tmu_p0(struct v3d_job *job,
         int unit = v3d_unit_data_get_unit(data);
         struct pipe_sampler_view *psview = texstate->textures[unit];
         struct v3d_sampler_view *sview = v3d_sampler_view(psview);
+        /* GL_OES_texture_buffer spec:
+         *     "If no buffer object is bound to the buffer texture, the
+         *      results of the texel access are undefined."
+         *
+         * This can be interpreted as allowing any result to come back, but
+         * not terminate the program (and some tests interpret that).
+         *
+         * FIXME: just return is not a full valid solution, as it could still
+         * try to get a wrong address for the shader state address. Perhaps we
+         * would need to set up a BO with a "default texture state"
+         */
+        if (sview == NULL)
+                return;
+
         struct v3d_resource *rsc = v3d_resource(sview->texture);
 
         cl_aligned_reloc(&job->indirect, uniforms, sview->bo,



More information about the mesa-commit mailing list