1b45052b3f761deb980bcca405f25e543892a93eeIan Romanick/*
2b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * Copyright © 2012 Intel Corporation
3b45052b3f761deb980bcca405f25e543892a93eeIan Romanick *
4b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * Permission is hereby granted, free of charge, to any person obtaining a
5b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * copy of this software and associated documentation files (the "Software"),
6b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * to deal in the Software without restriction, including without limitation
7b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * and/or sell copies of the Software, and to permit persons to whom the
9b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * Software is furnished to do so, subject to the following conditions:
10b45052b3f761deb980bcca405f25e543892a93eeIan Romanick *
11b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * The above copyright notice and this permission notice (including the next
12b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * paragraph) shall be included in all copies or substantial portions of the
13b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * Software.
14b45052b3f761deb980bcca405f25e543892a93eeIan Romanick *
15b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * DEALINGS IN THE SOFTWARE.
22b45052b3f761deb980bcca405f25e543892a93eeIan Romanick */
23b45052b3f761deb980bcca405f25e543892a93eeIan Romanick#include <gtest/gtest.h>
24b45052b3f761deb980bcca405f25e543892a93eeIan Romanick#include "main/compiler.h"
25b45052b3f761deb980bcca405f25e543892a93eeIan Romanick#include "main/mtypes.h"
26b45052b3f761deb980bcca405f25e543892a93eeIan Romanick#include "main/macros.h"
27b45052b3f761deb980bcca405f25e543892a93eeIan Romanick#include "ralloc.h"
28b45052b3f761deb980bcca405f25e543892a93eeIan Romanick#include "uniform_initializer_utils.h"
29b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
30b45052b3f761deb980bcca405f25e543892a93eeIan Romanicknamespace linker {
31b45052b3f761deb980bcca405f25e543892a93eeIan Romanickextern void
32b45052b3f761deb980bcca405f25e543892a93eeIan Romanickset_uniform_initializer(void *mem_ctx, gl_shader_program *prog,
33b45052b3f761deb980bcca405f25e543892a93eeIan Romanick			const char *name, const glsl_type *type,
34b45052b3f761deb980bcca405f25e543892a93eeIan Romanick			ir_constant *val);
35b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
36b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
37b45052b3f761deb980bcca405f25e543892a93eeIan Romanickclass set_uniform_initializer : public ::testing::Test {
38b45052b3f761deb980bcca405f25e543892a93eeIan Romanickpublic:
39b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   virtual void SetUp();
40b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   virtual void TearDown();
41b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
42b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   /**
43b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * Index of the uniform to be tested.
44b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    *
45b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * All of the \c set_uniform_initializer tests create several slots for
46b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * unifroms.  All but one of the slots is fake.  This field holds the index
47b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * of the slot for the uniform being tested.
48b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    */
49b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   unsigned actual_index;
50b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
51b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   /**
52b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * Name of the uniform to be tested.
53b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    */
54b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   const char *name;
55b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
56b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   /**
57b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * Shader program used in the test.
58b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    */
59b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   struct gl_shader_program *prog;
60b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
61b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   /**
62b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * Ralloc memory context used for all temporary allocations.
63b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    */
64b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   void *mem_ctx;
65b45052b3f761deb980bcca405f25e543892a93eeIan Romanick};
66b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
67b45052b3f761deb980bcca405f25e543892a93eeIan Romanickvoid
68b45052b3f761deb980bcca405f25e543892a93eeIan Romanickset_uniform_initializer::SetUp()
69b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
70b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   this->mem_ctx = ralloc_context(NULL);
71b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   this->prog = rzalloc(NULL, struct gl_shader_program);
72b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
73b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   /* Set default values used by the test cases.
74b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    */
75b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   this->actual_index = 1;
76b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   this->name = "i";
77b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
78b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
79b45052b3f761deb980bcca405f25e543892a93eeIan Romanickvoid
80b45052b3f761deb980bcca405f25e543892a93eeIan Romanickset_uniform_initializer::TearDown()
81b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
82b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   ralloc_free(this->mem_ctx);
83b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   this->mem_ctx = NULL;
84b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
85b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   ralloc_free(this->prog);
86b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   this->prog = NULL;
87b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
88b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
89b45052b3f761deb980bcca405f25e543892a93eeIan Romanick/**
90b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * Create some uniform storage for a program.
91b45052b3f761deb980bcca405f25e543892a93eeIan Romanick *
92b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * \param prog          Program to get some storage
93b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * \param num_storage   Total number of storage slots
94b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * \param index_to_set  Storage slot that will actually get a value
95b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * \param name          Name for the actual storage slot
96b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * \param type          Type for the elements of the actual storage slot
97b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * \param array_size    Size for the array of the actual storage slot.  This
98b45052b3f761deb980bcca405f25e543892a93eeIan Romanick *                      should be zero for non-arrays.
99b45052b3f761deb980bcca405f25e543892a93eeIan Romanick */
100b45052b3f761deb980bcca405f25e543892a93eeIan Romanickstatic unsigned
101b45052b3f761deb980bcca405f25e543892a93eeIan Romanickestablish_uniform_storage(struct gl_shader_program *prog, unsigned num_storage,
102b45052b3f761deb980bcca405f25e543892a93eeIan Romanick			  unsigned index_to_set, const char *name,
103b45052b3f761deb980bcca405f25e543892a93eeIan Romanick			  const glsl_type *type, unsigned array_size)
104b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
105b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   const unsigned elements = MAX2(1, array_size);
106b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   const unsigned data_components = elements * type->components();
107b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   const unsigned total_components = MAX2(17, (data_components
108b45052b3f761deb980bcca405f25e543892a93eeIan Romanick					       + type->components()));
109b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   const unsigned red_zone_components = total_components - data_components;
110b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
111b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage = rzalloc_array(prog, struct gl_uniform_storage,
112b45052b3f761deb980bcca405f25e543892a93eeIan Romanick					num_storage);
113b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->NumUserUniformStorage = num_storage;
114b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
115b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage[index_to_set].name = (char *) name;
116b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage[index_to_set].type = type;
117b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage[index_to_set].array_elements = array_size;
118b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage[index_to_set].initialized = false;
119b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage[index_to_set].sampler = ~0;
120b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage[index_to_set].num_driver_storage = 0;
121b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage[index_to_set].driver_storage = NULL;
122b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   prog->UniformStorage[index_to_set].storage =
123b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      rzalloc_array(prog, union gl_constant_value, total_components);
124b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
125b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   fill_storage_array_with_sentinels(prog->UniformStorage[index_to_set].storage,
126b45052b3f761deb980bcca405f25e543892a93eeIan Romanick				     data_components,
127b45052b3f761deb980bcca405f25e543892a93eeIan Romanick				     red_zone_components);
128b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
129b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   for (unsigned i = 0; i < num_storage; i++) {
130b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      if (i == index_to_set)
131b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	 continue;
132b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
133b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      prog->UniformStorage[i].name = (char *) "invalid slot";
134b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      prog->UniformStorage[i].type = glsl_type::void_type;
135b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      prog->UniformStorage[i].array_elements = 0;
136b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      prog->UniformStorage[i].initialized = false;
137b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      prog->UniformStorage[i].sampler = ~0;
138b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      prog->UniformStorage[i].num_driver_storage = 0;
139b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      prog->UniformStorage[i].driver_storage = NULL;
140b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      prog->UniformStorage[i].storage = NULL;
141b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   }
142b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
143b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   return red_zone_components;
144b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
145b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
146b45052b3f761deb980bcca405f25e543892a93eeIan Romanick/**
147b45052b3f761deb980bcca405f25e543892a93eeIan Romanick * Verify that the correct uniform is marked as having been initialized.
148b45052b3f761deb980bcca405f25e543892a93eeIan Romanick */
149b45052b3f761deb980bcca405f25e543892a93eeIan Romanickstatic void
150b45052b3f761deb980bcca405f25e543892a93eeIan Romanickverify_initialization(struct gl_shader_program *prog, unsigned actual_index)
151b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
152b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   for (unsigned i = 0; i < prog->NumUserUniformStorage; i++) {
153b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      if (i == actual_index) {
154b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	 EXPECT_TRUE(prog->UniformStorage[actual_index].initialized);
155b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      } else {
156b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	 EXPECT_FALSE(prog->UniformStorage[i].initialized);
157b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      }
158b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   }
159b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
160b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
161b45052b3f761deb980bcca405f25e543892a93eeIan Romanickstatic void
162b45052b3f761deb980bcca405f25e543892a93eeIan Romanicknon_array_test(void *mem_ctx, struct gl_shader_program *prog,
163b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	       unsigned actual_index, const char *name,
164b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	       enum glsl_base_type base_type,
165b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	       unsigned columns, unsigned rows)
166b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
167b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   const glsl_type *const type =
168b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      glsl_type::get_instance(base_type, rows, columns);
169b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
170b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   unsigned red_zone_components =
171b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      establish_uniform_storage(prog, 3, actual_index, name, type, 0);
172b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
173b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   ir_constant *val;
174b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   generate_data(mem_ctx, base_type, columns, rows, val);
175b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
176b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   linker::set_uniform_initializer(mem_ctx, prog, name, type, val);
177b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
178b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   verify_initialization(prog, actual_index);
179b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   verify_data(prog->UniformStorage[actual_index].storage, 0, val,
180b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	       red_zone_components);
181b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
182b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
183b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, int_uniform)
184b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
185b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 1);
186b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
187b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
188b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec2_uniform)
189b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
190b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 2);
191b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
192b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
193b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec3_uniform)
194b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
195b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 3);
196b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
197b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
198b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec4_uniform)
199b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
200b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 4);
201b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
202b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
203b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uint_uniform)
204b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
205b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 1);
206b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
207b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
208b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec2_uniform)
209b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
210b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 2);
211b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
212b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
213b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec3_uniform)
214b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
215b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 3);
216b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
217b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
218b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec4_uniform)
219b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
220b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 4);
221b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
222b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
223b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bool_uniform)
224b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
225b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 1);
226b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
227b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
228b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec2_uniform)
229b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
230b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 2);
231b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
232b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
233b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec3_uniform)
234b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
235b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 3);
236b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
237b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
238b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec4_uniform)
239b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
240b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 4);
241b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
242b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
243b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, float_uniform)
244b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
245b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 2);
246b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
247b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
248b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec2_uniform)
249b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
250b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 2);
251b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
252b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
253b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec3_uniform)
254b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
255b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 3);
256b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
257b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
258b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec4_uniform)
259b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
260b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 4);
261b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
262b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
263b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x2_uniform)
264b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
265b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 2);
266b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
267b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
268b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x3_uniform)
269b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
270b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 3);
271b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
272b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
273b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x4_uniform)
274b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
275b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 4);
276b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
277b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
278b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x2_uniform)
279b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
280b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 2);
281b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
282b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
283b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x3_uniform)
284b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
285b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 3);
286b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
287b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
288b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x4_uniform)
289b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
290b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 4);
291b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
292b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
293b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x2_uniform)
294b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
295b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 2);
296b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
297b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
298b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x3_uniform)
299b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
300b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 3);
301b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
302b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
303b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x4_uniform)
304b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
305b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   non_array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 4);
306b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
307b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
308b45052b3f761deb980bcca405f25e543892a93eeIan Romanickstatic void
309b45052b3f761deb980bcca405f25e543892a93eeIan Romanickarray_test(void *mem_ctx, struct gl_shader_program *prog,
310b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	   unsigned actual_index, const char *name,
311b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	   enum glsl_base_type base_type,
312b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	   unsigned columns, unsigned rows, unsigned array_size,
313b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	   unsigned excess_data_size)
314b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
315b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   const glsl_type *const element_type =
316b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      glsl_type::get_instance(base_type, rows, columns);
317b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
318b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   const unsigned red_zone_components =
319b45052b3f761deb980bcca405f25e543892a93eeIan Romanick      establish_uniform_storage(prog, 3, actual_index, name, element_type,
320b45052b3f761deb980bcca405f25e543892a93eeIan Romanick				array_size);
321b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
322b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   /* The constant value generated may have more array elements than the
323b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * uniform that it initializes.  In the real compiler and linker this can
324b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * happen when a uniform array is compacted because some of the tail
325b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * elements are not used.  In this case, the type of the uniform will be
326b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    * modified, but the initializer will not.
327b45052b3f761deb980bcca405f25e543892a93eeIan Romanick    */
328b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   ir_constant *val;
329b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   generate_array_data(mem_ctx, base_type, columns, rows,
330b45052b3f761deb980bcca405f25e543892a93eeIan Romanick		       array_size + excess_data_size, val);
331b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
332b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   linker::set_uniform_initializer(mem_ctx, prog, name, element_type, val);
333b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
334b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   verify_initialization(prog, actual_index);
335b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   verify_data(prog->UniformStorage[actual_index].storage, array_size,
336b45052b3f761deb980bcca405f25e543892a93eeIan Romanick	       val, red_zone_components);
337b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
338b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
339b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, int_array_uniform)
340b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
341b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 1, 4, 0);
342b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
343b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
344b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec2_array_uniform)
345b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
346b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 2, 4, 0);
347b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
348b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
349b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec3_array_uniform)
350b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
351b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 3, 4, 0);
352b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
353b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
354b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec4_array_uniform)
355b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
356b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 4, 4, 0);
357b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
358b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
359b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uint_array_uniform)
360b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
361b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 1, 4, 0);
362b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
363b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
364b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec2_array_uniform)
365b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
366b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 2, 4, 0);
367b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
368b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
369b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec3_array_uniform)
370b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
371b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 3, 4, 0);
372b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
373b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
374b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec4_array_uniform)
375b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
376b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 4, 4, 0);
377b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
378b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
379b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bool_array_uniform)
380b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
381b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 1, 4, 0);
382b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
383b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
384b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec2_array_uniform)
385b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
386b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 2, 4, 0);
387b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
388b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
389b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec3_array_uniform)
390b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
391b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 3, 4, 0);
392b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
393b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
394b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec4_array_uniform)
395b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
396b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 4, 4, 0);
397b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
398b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
399b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, float_array_uniform)
400b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
401b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 1, 4, 0);
402b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
403b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
404b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec2_array_uniform)
405b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
406b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 2, 4, 0);
407b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
408b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
409b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec3_array_uniform)
410b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
411b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 3, 4, 0);
412b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
413b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
414b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec4_array_uniform)
415b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
416b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 4, 4, 0);
417b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
418b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
419b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x2_array_uniform)
420b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
421b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 2, 4, 0);
422b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
423b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
424b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x3_array_uniform)
425b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
426b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 3, 4, 0);
427b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
428b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
429b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x4_array_uniform)
430b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
431b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 4, 4, 0);
432b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
433b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
434b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x2_array_uniform)
435b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
436b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 2, 4, 0);
437b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
438b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
439b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x3_array_uniform)
440b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
441b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 3, 4, 0);
442b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
443b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
444b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x4_array_uniform)
445b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
446b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 4, 4, 0);
447b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
448b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
449b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x2_array_uniform)
450b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
451b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 2, 4, 0);
452b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
453b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
454b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x3_array_uniform)
455b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
456b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 3, 4, 0);
457b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
458b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
459b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x4_array_uniform)
460b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
461b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 4, 4, 0);
462b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
463b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
464b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, int_array_uniform_excess_initializer)
465b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
466b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 1, 4, 5);
467b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
468b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
469b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec2_array_uniform_excess_initializer)
470b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
471b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 2, 4, 5);
472b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
473b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
474b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec3_array_uniform_excess_initializer)
475b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
476b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 3, 4, 5);
477b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
478b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
479b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, ivec4_array_uniform_excess_initializer)
480b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
481b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_INT, 1, 4, 4, 5);
482b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
483b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
484b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uint_array_uniform_excess_initializer)
485b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
486b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 1, 4, 5);
487b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
488b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
489b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec2_array_uniform_excess_initializer)
490b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
491b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 2, 4, 5);
492b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
493b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
494b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec3_array_uniform_excess_initializer)
495b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
496b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 3, 4, 5);
497b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
498b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
499b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, uvec4_array_uniform_excess_initializer)
500b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
501b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_UINT, 1, 4, 4, 5);
502b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
503b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
504b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bool_array_uniform_excess_initializer)
505b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
506b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 1, 4, 5);
507b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
508b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
509b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec2_array_uniform_excess_initializer)
510b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
511b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 2, 4, 5);
512b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
513b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
514b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec3_array_uniform_excess_initializer)
515b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
516b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 3, 4, 5);
517b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
518b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
519b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, bvec4_array_uniform_excess_initializer)
520b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
521b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_BOOL, 1, 4, 4, 5);
522b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
523b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
524b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, float_array_uniform_excess_initializer)
525b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
526b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 1, 4, 5);
527b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
528b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
529b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec2_array_uniform_excess_initializer)
530b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
531b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 2, 4, 5);
532b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
533b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
534b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec3_array_uniform_excess_initializer)
535b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
536b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 3, 4, 5);
537b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
538b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
539b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, vec4_array_uniform_excess_initializer)
540b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
541b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 1, 4, 4, 5);
542b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
543b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
544b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x2_array_uniform_excess_initializer)
545b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
546b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 2, 4, 5);
547b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
548b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
549b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x3_array_uniform_excess_initializer)
550b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
551b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 3, 4, 5);
552b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
553b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
554b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat2x4_array_uniform_excess_initializer)
555b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
556b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 2, 4, 4, 5);
557b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
558b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
559b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x2_array_uniform_excess_initializer)
560b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
561b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 2, 4, 5);
562b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
563b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
564b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x3_array_uniform_excess_initializer)
565b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
566b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 3, 4, 5);
567b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
568b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
569b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat3x4_array_uniform_excess_initializer)
570b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
571b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 3, 4, 4, 5);
572b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
573b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
574b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x2_array_uniform_excess_initializer)
575b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
576b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 2, 4, 5);
577b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
578b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
579b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x3_array_uniform_excess_initializer)
580b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
581b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 3, 4, 5);
582b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
583b45052b3f761deb980bcca405f25e543892a93eeIan Romanick
584b45052b3f761deb980bcca405f25e543892a93eeIan RomanickTEST_F(set_uniform_initializer, mat4x4_array_uniform_excess_initializer)
585b45052b3f761deb980bcca405f25e543892a93eeIan Romanick{
586b45052b3f761deb980bcca405f25e543892a93eeIan Romanick   array_test(mem_ctx, prog, actual_index, name, GLSL_TYPE_FLOAT, 4, 4, 4, 5);
587b45052b3f761deb980bcca405f25e543892a93eeIan Romanick}
588