X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fglsl_types.h;h=55faac25331401499c50395985b58a8bf2033a18;hb=da506cce8ae8fd05b1f8e93ebed3009b8f176d59;hp=b98ce66c48df7bbe5fa00a676a01f1101b1a1a51;hpb=87be9faa7811e77471b5bf2964e484bb9de84883;p=mesa.git diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h index b98ce66c48d..55faac25331 100644 --- a/src/compiler/glsl_types.h +++ b/src/compiler/glsl_types.h @@ -72,7 +72,9 @@ static inline bool glsl_base_type_is_64bit(enum glsl_base_type type) { return type == GLSL_TYPE_DOUBLE || type == GLSL_TYPE_UINT64 || - type == GLSL_TYPE_INT64; + type == GLSL_TYPE_INT64 || + type == GLSL_TYPE_IMAGE || + type == GLSL_TYPE_SAMPLER; } enum glsl_sampler_dim { @@ -147,7 +149,7 @@ struct glsl_type { * easier to just ralloc_free 'mem_ctx' (or any of its ancestors). */ static void* operator new(size_t size) { - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); /* mem_ctx should have been created by the static members */ assert(glsl_type::mem_ctx != NULL); @@ -157,7 +159,7 @@ struct glsl_type { type = ralloc_size(glsl_type::mem_ctx, size); assert(type != NULL); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); return type; } @@ -166,9 +168,9 @@ struct glsl_type { * ralloc_free in that case. */ static void operator delete(void *type) { - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); ralloc_free(type); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); } /** @@ -439,7 +441,7 @@ struct glsl_type { { return (vector_elements == 1) && (base_type >= GLSL_TYPE_UINT) - && (base_type <= GLSL_TYPE_BOOL); + && (base_type <= GLSL_TYPE_IMAGE); } /** @@ -491,8 +493,7 @@ struct glsl_type { */ bool is_integer_32_64() const { - return (base_type == GLSL_TYPE_UINT) || (base_type == GLSL_TYPE_INT) || - (base_type == GLSL_TYPE_UINT64) || (base_type == GLSL_TYPE_INT64); + return is_integer() || is_integer_64(); } /** @@ -561,6 +562,12 @@ struct glsl_type { */ bool contains_sampler() const; + /** + * Query whether or not type is an array or for struct, interface and + * array types, contains an array. + */ + bool contains_array() const; + /** * Get the Mesa texture target index for a sampler type. */ @@ -813,7 +820,8 @@ struct glsl_type { private: - static mtx_t mutex; + static mtx_t mem_mutex; + static mtx_t hash_mutex; /** * ralloc context for all glsl_type allocations @@ -967,14 +975,19 @@ struct glsl_struct_field { unsigned precision:2; /** - * Image qualifiers, applicable to buffer variables defined in shader + * Memory qualifiers, applicable to buffer variables defined in shader * storage buffer objects (SSBOs) */ - unsigned image_read_only:1; - unsigned image_write_only:1; - unsigned image_coherent:1; - unsigned image_volatile:1; - unsigned image_restrict:1; + unsigned memory_read_only:1; + unsigned memory_write_only:1; + unsigned memory_coherent:1; + unsigned memory_volatile:1; + unsigned memory_restrict:1; + + /** + * Layout format, applicable to image variables only. + */ + unsigned image_format:16; /** * Any of the xfb_* qualifiers trigger the shader to be in transform @@ -989,9 +1002,10 @@ struct glsl_struct_field { : type(_type), name(_name), location(-1), offset(0), xfb_buffer(0), xfb_stride(0), interpolation(0), centroid(0), sample(0), matrix_layout(GLSL_MATRIX_LAYOUT_INHERITED), patch(0), - precision(GLSL_PRECISION_NONE), image_read_only(0), image_write_only(0), - image_coherent(0), image_volatile(0), image_restrict(0), - explicit_xfb_buffer(0), implicit_sized_array(0) + precision(GLSL_PRECISION_NONE), memory_read_only(0), + memory_write_only(0), memory_coherent(0), memory_volatile(0), + memory_restrict(0), image_format(0), explicit_xfb_buffer(0), + implicit_sized_array(0) { /* empty */ }