mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-12 09:38:20 +02:00
mesa: initial support for uniform variable initializers.
This lets one specify initial values for uniforms in the code, avoiding
the need to call glUniform() in some cases.
(cherry picked from commit 379ff8c956)
This commit is contained in:
parent
c478a1baca
commit
de44547891
1 changed files with 22 additions and 5 deletions
|
|
@ -3705,11 +3705,6 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
|
|||
const GLint totalSize = array_size(size, var->array_len);
|
||||
const GLuint swizzle = _slang_var_swizzle(totalSize, 0);
|
||||
|
||||
if (var->initializer) {
|
||||
slang_info_log_error(A->log, "illegal initializer for uniform '%s'", varName);
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (prog) {
|
||||
/* user-defined uniform */
|
||||
if (datatype == GL_NONE) {
|
||||
|
|
@ -3734,6 +3729,12 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
|
|||
* "f.a" (GL_FLOAT_VEC3)
|
||||
* "f.b" (GL_FLOAT_VEC4)
|
||||
*/
|
||||
|
||||
if (var->initializer) {
|
||||
slang_info_log_error(A->log,
|
||||
"unsupported initializer for uniform '%s'", varName);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
slang_info_log_error(A->log,
|
||||
|
|
@ -3747,6 +3748,22 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
|
|||
totalSize, datatype);
|
||||
store = _slang_new_ir_storage_swz(PROGRAM_UNIFORM, uniformLoc,
|
||||
totalSize, swizzle);
|
||||
if (var->initializer) {
|
||||
_slang_simplify(var->initializer, &A->space, A->atoms);
|
||||
if (var->initializer->type == SLANG_OPER_LITERAL_FLOAT ||
|
||||
var->initializer->type == SLANG_OPER_LITERAL_INT) {
|
||||
/* simple float/vector initializer */
|
||||
GLfloat *uniformValue =
|
||||
prog->Parameters->ParameterValues[uniformLoc];
|
||||
COPY_4V(uniformValue, var->initializer->literal);
|
||||
}
|
||||
else {
|
||||
/* complex initializer */
|
||||
slang_info_log_error(A->log,
|
||||
"unsupported initializer for uniform '%s'", varName);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue