mesa: fix a bug in merging light state parameters with unpacked uniforms

This code is not enabled yet.

Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8017>
This commit is contained in:
Marek Olšák 2021-01-01 14:00:13 -05:00 committed by Marge Bot
parent 4db8b171a5
commit 45acf9b49a
2 changed files with 9 additions and 3 deletions

View file

@ -1292,7 +1292,8 @@ _mesa_upload_state_parameters(struct gl_context *ctx,
* It's only meant to optimize _mesa_load/upload_state_parameters.
*/
void
_mesa_optimize_state_parameters(struct gl_program_parameter_list *list)
_mesa_optimize_state_parameters(struct gl_constants *consts,
struct gl_program_parameter_list *list)
{
for (int first_param = list->FirstStateVarIndex;
first_param < (int)list->NumParameters; first_param++) {
@ -1368,7 +1369,10 @@ _mesa_optimize_state_parameters(struct gl_program_parameter_list *list)
list->Parameters[i].StateIndexes[2] ==
list->Parameters[i - 1].StateIndexes[2] + 1) ||
/* Consecutive attributes between 2 lights: */
(list->Parameters[i].StateIndexes[1] ==
/* SPOT_CUTOFF should have only 1 component, which isn't true
* with unpacked uniform storage. */
(consts->PackedDriverUniformStorage &&
list->Parameters[i].StateIndexes[1] ==
list->Parameters[i - 1].StateIndexes[1] + 1 &&
list->Parameters[i].StateIndexes[2] == STATE_AMBIENT &&
list->Parameters[i - 1].StateIndexes[2] == STATE_SPOT_CUTOFF))) {

View file

@ -37,6 +37,7 @@ extern "C" {
struct gl_context;
struct gl_constants;
struct gl_program_parameter_list;
@ -169,7 +170,8 @@ _mesa_upload_state_parameters(struct gl_context *ctx,
uint32_t *dst);
extern void
_mesa_optimize_state_parameters(struct gl_program_parameter_list *list);
_mesa_optimize_state_parameters(struct gl_constants *consts,
struct gl_program_parameter_list *list);
extern unsigned
_mesa_program_state_value_size(const gl_state_index16 state[STATE_LENGTH]);