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