2 * Copyright © 2015 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24 #include "brw_shader.h"
28 brw_nir_setup_arb_uniforms(nir_shader
*shader
, struct gl_program
*prog
,
29 struct brw_stage_prog_data
*stage_prog_data
)
31 struct gl_program_parameter_list
*plist
= prog
->Parameters
;
34 if (!shader
->uniforms
.is_empty()) {
35 /* For ARB programs, only a single "parameters" variable is generated to
36 * support uniform data.
38 assert(shader
->uniforms
.length() == 1);
39 nir_variable
*var
= (nir_variable
*) shader
->uniforms
.get_head();
40 assert(strcmp(var
->name
, "parameters") == 0);
41 assert(var
->type
->array_size() == (int)plist
->NumParameters
);
45 for (unsigned p
= 0; p
< plist
->NumParameters
; p
++) {
46 /* Parameters should be either vec4 uniforms or single component
47 * constants; matrices and other larger types should have been broken
50 assert(plist
->Parameters
[p
].Size
<= 4);
53 for (i
= 0; i
< plist
->Parameters
[p
].Size
; i
++) {
54 stage_prog_data
->param
[4 * p
+ i
] = &plist
->ParameterValues
[p
][i
];
57 static const gl_constant_value zero
= { 0.0 };
58 stage_prog_data
->param
[4 * p
+ i
] = &zero
;