Mesa (master): llvmpipe/draw: handle UBOs that are < 16 bytes.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Oct 10 21:52:56 UTC 2019
Module: Mesa
Branch: master
Commit: 1b221f4e7bdae9c6ae2961b31a7fc0e917711eb6
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b221f4e7bdae9c6ae2961b31a7fc0e917711eb6
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Oct 9 15:11:14 2019 +1000
llvmpipe/draw: handle UBOs that are < 16 bytes.
Not sure if this is a bug in the user or not, but some CTS
tests fail due to using an 8 byte constant buffer.
Fixes: KHR-GLES31.core.layout_binding.block_layout_binding_block_VertexShader
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
---
src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c | 9 +++++++--
src/gallium/drivers/llvmpipe/lp_setup.c | 2 +-
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
index b96a5c99315..0eeaf780af0 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
@@ -289,8 +289,13 @@ llvm_middle_end_bind_parameters(struct draw_pt_middle_end *middle)
unsigned i;
for (i = 0; i < ARRAY_SIZE(llvm->jit_context.vs_constants); ++i) {
+ /*
+ * There could be a potential issue with rounding this up, as the
+ * shader expects 16-byte allocations, the fix is likely to move
+ * to LOAD intrinsic in the future and remove the vec4 constraint.
+ */
int num_consts =
- draw->pt.user.vs_constants_size[i] / (sizeof(float) * 4);
+ DIV_ROUND_UP(draw->pt.user.vs_constants_size[i], (sizeof(float) * 4));
llvm->jit_context.vs_constants[i] = draw->pt.user.vs_constants[i];
llvm->jit_context.num_vs_constants[i] = num_consts;
if (num_consts == 0) {
@@ -308,7 +313,7 @@ llvm_middle_end_bind_parameters(struct draw_pt_middle_end *middle)
for (i = 0; i < ARRAY_SIZE(llvm->gs_jit_context.constants); ++i) {
int num_consts =
- draw->pt.user.gs_constants_size[i] / (sizeof(float) * 4);
+ DIV_ROUND_UP(draw->pt.user.gs_constants_size[i], (sizeof(float) * 4));
llvm->gs_jit_context.constants[i] = draw->pt.user.gs_constants[i];
llvm->gs_jit_context.num_constants[i] = num_consts;
if (num_consts == 0) {
diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c
index e6fa082f4f0..002c8b8a25b 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup.c
+++ b/src/gallium/drivers/llvmpipe/lp_setup.c
@@ -1230,7 +1230,7 @@ try_update_scene_state( struct lp_setup_context *setup )
}
num_constants =
- setup->constants[i].stored_size / (sizeof(float) * 4);
+ DIV_ROUND_UP(setup->constants[i].stored_size, (sizeof(float) * 4));
setup->fs.current.jit_context.num_constants[i] = num_constants;
setup->dirty |= LP_SETUP_NEW_FS;
}
More information about the mesa-commit
mailing list