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