summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanylo Piliaiev <[email protected]>2020-01-15 18:56:42 +0200
committerDanylo Piliaiev <[email protected]>2020-01-21 09:52:40 +0000
commit3f9a6011a68830ee6755397692cf0a51c4c913a7 (patch)
treeb7224e9c3ad7bea62b0cb143246b1810565a5f52
parente470116aac3e035bbfb287cf7634c35f94b3dcce (diff)
iris: Fix value of out-of-bounds accesses for vertex attributes
Having VERTEX_BUFFER_STATE.BufferSize greater than the size of a bound vertex buffer allows shader to read uninitialized vertex attributes from BO, instead of allowing hardware to return zeroes on out-of-bounds access. OpenGL spec "6.4 Effects of Accessing Outside Buffer Bounds" says: "Robust buffer access can be enabled by creating a context with robust access enabled through the window system binding APIs. When enabled, any command unable to generate a GL error as described above, such as buffer object accesses from the active program, will not read or modify memory outside of the data store of the buffer object and will not result in GL interruption or termination. Out-of-bounds reads may return values from within the buffer object or zero values." Fixes three webgl tests: conformance/rendering/out-of-bounds-array-buffers.html conformance2/rendering/out-of-bounds-index-buffers-after-copying.html conformance2/rendering/element-index-uint.html See #1996 Signed-off-by: Chris Wilson <[email protected]> Signed-off-by: Danylo Piliaiev <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3427> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3427>
-rw-r--r--src/gallium/drivers/iris/iris_state.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c
index f57bcd52353..50d98a7832f 100644
--- a/src/gallium/drivers/iris/iris_state.c
+++ b/src/gallium/drivers/iris/iris_state.c
@@ -3354,7 +3354,7 @@ iris_set_vertex_buffers(struct pipe_context *ctx,
vb.AddressModifyEnable = true;
vb.BufferPitch = buffer->stride;
if (res) {
- vb.BufferSize = res->bo->size - (int) buffer->buffer_offset;
+ vb.BufferSize = res->base.width0 - (int) buffer->buffer_offset;
vb.BufferStartingAddress =
ro_bo(NULL, res->bo->gtt_offset + (int) buffer->buffer_offset);
vb.MOCS = mocs(res->bo, &screen->isl_dev);