diff options
author | Eric Anholt <eric@anholt.net> | 2016-07-02 12:17:10 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2016-07-15 15:19:50 -0700 |
commit | 6d45c81d229d71da54d374143e7d6abad4c0cf31 (patch) | |
tree | 13a537d8fc387d061cdf2d28f0b6599a80aa3237 /drivers/gpu/drm/vc4/vc4_drv.h | |
parent | 93aa9ae3e5523e49e4e5abacd4dbee0e4ab2d931 (diff) | |
download | lwn-6d45c81d229d71da54d374143e7d6abad4c0cf31.tar.gz lwn-6d45c81d229d71da54d374143e7d6abad4c0cf31.zip |
drm/vc4: Add support for branching in shader validation.
We're already checking that branch instructions are between the start
of the shader and the proper PROG_END sequence. The other thing we
need to make branching safe is to verify that the shader doesn't read
past the end of the uniforms stream.
To do that, we require that at any basic block reading uniforms have
the following instructions:
load_imm temp, <next offset within uniform stream>
add unif_addr, temp, unif
The instructions are generated by userspace, and the kernel verifies
that the load_imm is of the expected offset, and that the add adds it
to a uniform. We track which uniform in the stream that is, and at
draw call time fix up the uniform stream to have the address of the
start of the shader's uniforms at that location.
Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu/drm/vc4/vc4_drv.h')
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_drv.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h index 1b5dc6074244..0ced289d7696 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.h +++ b/drivers/gpu/drm/vc4/vc4_drv.h @@ -355,6 +355,9 @@ struct vc4_validated_shader_info { uint32_t uniforms_src_size; uint32_t num_texture_samples; struct vc4_texture_sample_info *texture_samples; + + uint32_t num_uniform_addr_offsets; + uint32_t *uniform_addr_offsets; }; /** |