From 3d9a3d0be0c11f46b23459de14e4f2b2c5daaeb0 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 6 Jan 2020 13:09:25 -0800 Subject: [PATCH] i965: Reuse the new core glsl_count_dword_slots(). The only difference I could see was treating interfaces like structs. Maintain that case. Reviewed-by: Kristian H. Kristensen Tested-by: Marge Bot Part-of: --- src/compiler/glsl_types.cpp | 2 +- src/intel/compiler/brw_fs.cpp | 53 +---------------------------------- src/intel/compiler/brw_nir.h | 3 +- 3 files changed, 3 insertions(+), 55 deletions(-) diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp index e664f4ab4cd..b357ed0823b 100644 --- a/src/compiler/glsl_types.cpp +++ b/src/compiler/glsl_types.cpp @@ -2546,6 +2546,7 @@ glsl_type::count_dword_slots(bool is_bindless) const return this->fields.array->count_dword_slots(is_bindless) * this->length; + case GLSL_TYPE_INTERFACE: case GLSL_TYPE_STRUCT: { unsigned size = 0; for (unsigned i = 0; i < this->length; i++) { @@ -2560,7 +2561,6 @@ glsl_type::count_dword_slots(bool is_bindless) const return 1; case GLSL_TYPE_VOID: case GLSL_TYPE_ERROR: - case GLSL_TYPE_INTERFACE: case GLSL_TYPE_FUNCTION: default: unreachable("invalid type in st_glsl_type_dword_size()"); diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index eaa57e4fe0a..4dabf6c9395 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -576,57 +576,6 @@ fs_reg::component_size(unsigned width) const return MAX2(width * stride, 1) * type_sz(type); } -extern "C" int -type_size_scalar(const struct glsl_type *type, bool bindless) -{ - unsigned int size, i; - - switch (type->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_BOOL: - return type->components(); - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_FLOAT16: - return DIV_ROUND_UP(type->components(), 2); - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - return DIV_ROUND_UP(type->components(), 4); - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - return type->components() * 2; - case GLSL_TYPE_ARRAY: - return type_size_scalar(type->fields.array, bindless) * type->length; - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: - size = 0; - for (i = 0; i < type->length; i++) { - size += type_size_scalar(type->fields.structure[i].type, bindless); - } - return size; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - if (bindless) - return type->components() * 2; - case GLSL_TYPE_ATOMIC_UINT: - /* Samplers, atomics, and images take up no register space, since - * they're baked in at link time. - */ - return 0; - case GLSL_TYPE_SUBROUTINE: - return 1; - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - case GLSL_TYPE_FUNCTION: - unreachable("not reached"); - } - - return 0; -} - /** * Create a MOV to read the timestamp register. */ @@ -1219,7 +1168,7 @@ fs_visitor::vgrf(const glsl_type *const type) { int reg_width = dispatch_width / 8; return fs_reg(VGRF, - alloc.allocate(type_size_scalar(type, false) * reg_width), + alloc.allocate(glsl_count_dword_slots(type, false) * reg_width), brw_type_for_base_type(type)); } diff --git a/src/intel/compiler/brw_nir.h b/src/intel/compiler/brw_nir.h index 556648e6f72..7c7f1ea11b7 100644 --- a/src/intel/compiler/brw_nir.h +++ b/src/intel/compiler/brw_nir.h @@ -32,14 +32,13 @@ extern "C" { #endif -int type_size_scalar(const struct glsl_type *type, bool bindless); int type_size_vec4(const struct glsl_type *type, bool bindless); int type_size_dvec4(const struct glsl_type *type, bool bindless); static inline int type_size_scalar_bytes(const struct glsl_type *type, bool bindless) { - return type_size_scalar(type, bindless) * 4; + return glsl_count_dword_slots(type, bindless) * 4; } static inline int -- 2.30.2