|  |  |  |  |  |  | 
													
												
													
														|  |  | GLenum type, GLsizei count, GLint elems, |  |  | GLenum type, GLsizei count, GLint elems, | 
													
												
													
														|  |  | const void *values) |  |  | const void *values) | 
													
												
													
														|  |  | { |  |  | { | 
													
												
													
														|  |  | struct gl_program_parameter *param = |  |  |  | 
													
												
													
														|  |  |  |  |  | const struct gl_program_parameter *param = | 
													
												
													
														|  |  | &program->Parameters->Parameters[index]; |  |  | &program->Parameters->Parameters[index]; | 
													
												
													
														|  |  | const GLboolean isUniformBool = is_boolean_type(param->DataType); |  |  |  | 
													
												
													
														|  |  | const GLboolean areIntValues = is_integer_type(type); |  |  |  | 
													
												
													
														|  |  | 
 |  |  | 
 | 
													
												
													
														|  |  | assert(offset >= 0); |  |  | assert(offset >= 0); | 
													
												
													
														|  |  | assert(elems >= 1); |  |  | assert(elems >= 1); | 
													
												
											
												
													
														|  |  |  |  |  |  | 
													
												
													
														|  |  | /* This controls which texture unit which is used by a sampler */ |  |  | /* This controls which texture unit which is used by a sampler */ | 
													
												
													
														|  |  | GLint i; |  |  | GLint i; | 
													
												
													
														|  |  | 
 |  |  | 
 | 
													
												
													
														|  |  | /* data type for setting samplers must be int */ |  |  |  | 
													
												
													
														|  |  | if (type != GL_INT) { |  |  |  | 
													
												
													
														|  |  | _mesa_error(ctx, GL_INVALID_OPERATION, |  |  |  | 
													
												
													
														|  |  | "glUniform(only glUniform1i can be used " |  |  |  | 
													
												
													
														|  |  | "to set sampler uniforms)"); |  |  |  | 
													
												
													
														|  |  | return; |  |  |  | 
													
												
													
														|  |  | } |  |  |  | 
													
												
													
														|  |  |  |  |  | /* this should have been caught by the compatible_types() check */ | 
													
												
													
														|  |  |  |  |  | ASSERT(type == GL_INT); | 
													
												
													
														|  |  | 
 |  |  | 
 | 
													
												
													
														|  |  | /* XXX arrays of samplers haven't been tested much, but it's not a |  |  |  | 
													
												
													
														|  |  | * common thing... |  |  |  | 
													
												
													
														|  |  | */ |  |  |  | 
													
												
													
														|  |  |  |  |  | /* loop over number of samplers to change */ | 
													
												
													
														|  |  | for (i = 0; i < count; i++) { |  |  | for (i = 0; i < count; i++) { | 
													
												
													
														|  |  | GLuint sampler = |  |  | GLuint sampler = | 
													
												
													
														|  |  | (GLuint) program->Parameters->ParameterValues[index + offset + i][0]; |  |  | (GLuint) program->Parameters->ParameterValues[index + offset + i][0]; | 
													
												
											
												
													
														|  |  |  |  |  |  | 
													
												
													
														|  |  | } |  |  | } | 
													
												
													
														|  |  | else { |  |  | else { | 
													
												
													
														|  |  | /* ordinary uniform variable */ |  |  | /* ordinary uniform variable */ | 
													
												
													
														|  |  | GLsizei k, i; |  |  |  | 
													
												
													
														|  |  |  |  |  | const GLboolean isUniformBool = is_boolean_type(param->DataType); | 
													
												
													
														|  |  |  |  |  | const GLboolean areIntValues = is_integer_type(type); | 
													
												
													
														|  |  | const GLint slots = (param->Size + 3) / 4; |  |  | const GLint slots = (param->Size + 3) / 4; | 
													
												
													
														|  |  | const GLint typeSize = sizeof_glsl_type(param->DataType); |  |  | const GLint typeSize = sizeof_glsl_type(param->DataType); | 
													
												
													
														|  |  |  |  |  | GLsizei k, i; | 
													
												
													
														|  |  | 
 |  |  | 
 | 
													
												
													
														|  |  | if (param->Size > typeSize) { |  |  | if (param->Size > typeSize) { | 
													
												
													
														|  |  | /* an array */ |  |  | /* an array */ |