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/mtypes.h" 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/macros.h" 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ralloc.h" 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "uniform_initializer_utils.h" 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdio.h> 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfill_storage_array_with_sentinels(gl_constant_value *storage, 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned data_size, 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned red_zone_size) 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned i = 0; i < data_size; i++) 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org storage[i].u = 0xDEADBEEF; 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned i = 0; i < red_zone_size; i++) 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org storage[data_size + i].u = 0xBADDC0DE; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Verfiy that markers past the end of the real uniform are unmodified 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic ::testing::AssertionResult 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgred_zone_is_intact(gl_constant_value *storage, 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned data_size, 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned red_zone_size) 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned i = 0; i < red_zone_size; i++) { 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned idx = data_size + i; 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (storage[idx].u != 0xBADDC0DE) 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ::testing::AssertionFailure() 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org << "storage[" << idx << "].u = " << storage[idx].u 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org << ", exepected data values = " << data_size 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org << ", red-zone size = " << red_zone_size; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ::testing::AssertionSuccess(); 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const int values[] = { 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2, 0, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Generate a single data element. 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is by both \c generate_data and \c generate_array_data to create the 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * data. 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggenerate_data_element(void *mem_ctx, const glsl_type *type, 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_constant *&val, unsigned data_index_base) 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Set the initial data values for the generated constant. 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_constant_data data; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(&data, 0, sizeof(data)); 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned i = 0; i < type->components(); i++) { 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned idx = (i + data_index_base) % Elements(values); 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type->base_type) { 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_UINT: 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_INT: 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_SAMPLER: 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.i[i] = values[idx]; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_FLOAT: 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.f[i] = float(values[idx]); 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_BOOL: 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.b[i] = bool(values[idx]); 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_STRUCT: 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_ARRAY: 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_VOID: 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_ERROR: 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_TRUE(false); 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Generate and verify the constant. 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org val = new(mem_ctx) ir_constant(type, &data); 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned i = 0; i < type->components(); i++) { 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type->base_type) { 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_UINT: 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_INT: 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_SAMPLER: 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_EQ(data.i[i], val->value.i[i]); 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_FLOAT: 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_EQ(data.f[i], val->value.f[i]); 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_BOOL: 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_EQ(data.b[i], val->value.b[i]); 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_STRUCT: 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_ARRAY: 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_VOID: 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_ERROR: 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_TRUE(false); 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggenerate_data(void *mem_ctx, enum glsl_base_type base_type, 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned columns, unsigned rows, 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_constant *&val) 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Determine what the type of the generated constant should be. 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const glsl_type *const type = 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glsl_type::get_instance(base_type, rows, columns); 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_FALSE(type->is_error()); 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org generate_data_element(mem_ctx, type, val, 0); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggenerate_array_data(void *mem_ctx, enum glsl_base_type base_type, 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned columns, unsigned rows, unsigned array_size, 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_constant *&val) 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Determine what the type of the generated constant should be. 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const glsl_type *const element_type = 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glsl_type::get_instance(base_type, rows, columns); 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_FALSE(element_type->is_error()); 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const glsl_type *const array_type = 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glsl_type::get_array_instance(element_type, array_size); 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_FALSE(array_type->is_error()); 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Set the initial data values for the generated constant. 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exec_list values_for_array; 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned i = 0; i < array_size; i++) { 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_constant *element; 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org generate_data_element(mem_ctx, element_type, element, i); 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org values_for_array.push_tail(element); 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org val = new(mem_ctx) ir_constant(array_type, &values_for_array); 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Verify that the data stored for the uniform matches the initializer 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param storage Backing storage for the uniform 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param storage_array_size Array size of the backing storage. This must be 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * less than or equal to the array size of the type 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of \c val. If \c val is not an array, this must 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * be zero. 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param val Value of the initializer for the unifrom. 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param red_zone 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgverify_data(gl_constant_value *storage, unsigned storage_array_size, 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_constant *val, unsigned red_zone_size) 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (val->type->base_type == GLSL_TYPE_ARRAY) { 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const glsl_type *const element_type = val->array_elements[0]->type; 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned i = 0; i < storage_array_size; i++) { 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org verify_data(storage + (i * element_type->components()), 0, 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org val->array_elements[i], 0); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned components = element_type->components(); 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (red_zone_size > 0) { 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_TRUE(red_zone_is_intact(storage, 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org storage_array_size * components, 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org red_zone_size)); 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_EQ(0u, storage_array_size); 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned i = 0; i < val->type->components(); i++) { 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (val->type->base_type) { 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_UINT: 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_INT: 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_SAMPLER: 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(val->value.i[i], storage[i].i); 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_FLOAT: 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(val->value.f[i], storage[i].f); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_BOOL: 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(int(val->value.b[i]), storage[i].i); 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_STRUCT: 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_ARRAY: 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_VOID: 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLSL_TYPE_ERROR: 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_TRUE(false); 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (red_zone_size > 0) { 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_TRUE(red_zone_is_intact(storage, 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org val->type->components(), 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org red_zone_size)); 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 234