diff --git a/src/util/format/u_format.c b/src/util/format/u_format.c index 6b3e0cf0e1d..ed2639ef53e 100644 --- a/src/util/format/u_format.c +++ b/src/util/format/u_format.c @@ -1032,101 +1032,6 @@ void util_format_unswizzle_4f(float *dst, const float *src, } } -enum pipe_format -util_format_snorm_to_sint(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_R32_SNORM: - return PIPE_FORMAT_R32_SINT; - case PIPE_FORMAT_R32G32_SNORM: - return PIPE_FORMAT_R32G32_SINT; - case PIPE_FORMAT_R32G32B32_SNORM: - return PIPE_FORMAT_R32G32B32_SINT; - case PIPE_FORMAT_R32G32B32A32_SNORM: - return PIPE_FORMAT_R32G32B32A32_SINT; - - case PIPE_FORMAT_R16_SNORM: - return PIPE_FORMAT_R16_SINT; - case PIPE_FORMAT_R16G16_SNORM: - return PIPE_FORMAT_R16G16_SINT; - case PIPE_FORMAT_R16G16B16_SNORM: - return PIPE_FORMAT_R16G16B16_SINT; - case PIPE_FORMAT_R16G16B16A16_SNORM: - return PIPE_FORMAT_R16G16B16A16_SINT; - - case PIPE_FORMAT_R8_SNORM: - return PIPE_FORMAT_R8_SINT; - case PIPE_FORMAT_R8G8_SNORM: - return PIPE_FORMAT_R8G8_SINT; - case PIPE_FORMAT_R8G8B8_SNORM: - return PIPE_FORMAT_R8G8B8_SINT; - case PIPE_FORMAT_B8G8R8_SNORM: - return PIPE_FORMAT_B8G8R8_SINT; - case PIPE_FORMAT_R8G8B8A8_SNORM: - return PIPE_FORMAT_R8G8B8A8_SINT; - case PIPE_FORMAT_B8G8R8A8_SNORM: - return PIPE_FORMAT_B8G8R8A8_SINT; - - case PIPE_FORMAT_R10G10B10A2_SNORM: - return PIPE_FORMAT_R10G10B10A2_SINT; - case PIPE_FORMAT_B10G10R10A2_SNORM: - return PIPE_FORMAT_B10G10R10A2_SINT; - - case PIPE_FORMAT_R10G10B10X2_SNORM: - return PIPE_FORMAT_R10G10B10X2_SINT; - - case PIPE_FORMAT_A8_SNORM: - return PIPE_FORMAT_A8_SINT; - case PIPE_FORMAT_L8_SNORM: - return PIPE_FORMAT_L8_SINT; - case PIPE_FORMAT_L8A8_SNORM: - return PIPE_FORMAT_L8A8_SINT; - case PIPE_FORMAT_I8_SNORM: - return PIPE_FORMAT_I8_SINT; - - case PIPE_FORMAT_A16_SNORM: - return PIPE_FORMAT_A16_SINT; - case PIPE_FORMAT_L16_SNORM: - return PIPE_FORMAT_L16_SINT; - case PIPE_FORMAT_L16A16_SNORM: - return PIPE_FORMAT_L16A16_SINT; - case PIPE_FORMAT_I16_SNORM: - return PIPE_FORMAT_I16_SINT; - - case PIPE_FORMAT_R8G8B8X8_SNORM: - return PIPE_FORMAT_R8G8B8X8_SINT; - case PIPE_FORMAT_R16G16B16X16_SNORM: - return PIPE_FORMAT_R16G16B16X16_SINT; - - case PIPE_FORMAT_R8A8_SNORM: - return PIPE_FORMAT_R8A8_SINT; - case PIPE_FORMAT_R16A16_SNORM: - return PIPE_FORMAT_R16A16_SINT; - - case PIPE_FORMAT_G8R8_SNORM: - return PIPE_FORMAT_G8R8_SINT; - case PIPE_FORMAT_G16R16_SNORM: - return PIPE_FORMAT_G16R16_SINT; - - case PIPE_FORMAT_A8B8G8R8_SNORM: - return PIPE_FORMAT_A8B8G8R8_SINT; - case PIPE_FORMAT_X8B8G8R8_SNORM: - return PIPE_FORMAT_X8B8G8R8_SINT; - - case PIPE_FORMAT_B8G8R8X8_SNORM: - return PIPE_FORMAT_B8G8R8X8_SINT; - case PIPE_FORMAT_A8R8G8B8_SNORM: - return PIPE_FORMAT_A8R8G8B8_SINT; - case PIPE_FORMAT_X8R8G8B8_SNORM: - return PIPE_FORMAT_X8R8G8B8_SINT; - case PIPE_FORMAT_B10G10R10X2_SNORM: - return PIPE_FORMAT_B10G10R10X2_SINT; - - default: - return format; - } -} - /** * If the format is RGB, return BGR. If the format is BGR, return RGB. * This may fail by returning PIPE_FORMAT_NONE. @@ -1257,72 +1162,6 @@ util_format_unpack_description(enum pipe_format format) return util_format_unpack_table[format]; } -enum pipe_format -util_format_snorm_to_unorm(enum pipe_format format) -{ -#define CASE(x) case PIPE_FORMAT_##x##_SNORM: return PIPE_FORMAT_##x##_UNORM - - switch (format) { - CASE(R8G8B8A8); - CASE(R8G8B8X8); - CASE(B8G8R8A8); - CASE(B8G8R8X8); - CASE(A8R8G8B8); - CASE(X8R8G8B8); - CASE(A8B8G8R8); - CASE(X8B8G8R8); - - CASE(R10G10B10A2); - CASE(R10G10B10X2); - CASE(B10G10R10A2); - CASE(B10G10R10X2); - - CASE(R8); - CASE(R8G8); - CASE(G8R8); - CASE(R8G8B8); - CASE(B8G8R8); - - CASE(R16); - CASE(R16G16); - CASE(G16R16); - CASE(R16G16B16); - - CASE(R16G16B16A16); - CASE(R16G16B16X16); - - CASE(R32); - CASE(R32G32); - CASE(R32G32B32); - CASE(R32G32B32A32); - - CASE(RGTC1); - CASE(RGTC2); - CASE(ETC2_R11); - CASE(ETC2_RG11); - - CASE(A8); - CASE(A16); - CASE(L8); - CASE(L16); - CASE(I8); - CASE(I16); - - CASE(L8A8); - CASE(L16A16); - CASE(R8A8); - CASE(R16A16); - - CASE(LATC1); - CASE(LATC2); - - default: - return format; - } - -#undef CASE -} - enum pipe_format util_format_rgbx_to_rgba(enum pipe_format format) { diff --git a/src/util/format/u_format.h b/src/util/format/u_format.h index a1bef3192e6..c8c3704d8fa 100644 --- a/src/util/format/u_format.h +++ b/src/util/format/u_format.h @@ -1545,9 +1545,6 @@ void pipe_swizzle_4f(float *dst, const float *src, void util_format_unswizzle_4f(float *dst, const float *src, const unsigned char swz[4]); -enum pipe_format -util_format_snorm_to_sint(enum pipe_format format) ATTRIBUTE_CONST; - extern void util_copy_rect(void * dst, enum pipe_format format, unsigned dst_stride, unsigned dst_x, unsigned dst_y, @@ -1561,10 +1558,6 @@ util_copy_rect(void * dst, enum pipe_format format, enum pipe_format util_format_rgb_to_bgr(enum pipe_format format); -/* Returns the pipe format with SNORM formats cast to UNORM, otherwise the original pipe format. */ -enum pipe_format -util_format_snorm_to_unorm(enum pipe_format format); - enum pipe_format util_format_rgbx_to_rgba(enum pipe_format format); diff --git a/src/util/format/u_format_table.py b/src/util/format/u_format_table.py index 08b4535108d..9c864185f9d 100644 --- a/src/util/format/u_format_table.py +++ b/src/util/format/u_format_table.py @@ -494,6 +494,47 @@ def write_get_plane_format(formats): print('}', file=sys.stdout3) print(file=sys.stdout3) +def write_type_conv_helper(formats, in_type, out_type): + print('static inline enum pipe_format', file=sys.stdout3) + print('util_format_%s_to_%s(enum pipe_format format)' % (in_type, out_type), file=sys.stdout3) + print('{', file=sys.stdout3) + print(' switch (format) {', file=sys.stdout3) + for out_fmt in formats: + if out_fmt.colorspace != 'RGB': + continue + if out_type not in out_fmt.short_name(): + continue + + match = [] + if in_type != 'any': + match += [out_fmt.short_name().replace(out_type, in_type)] + else: + for fmt_type in ['unorm', 'snorm', 'uint', 'sint', 'float']: + if fmt_type != in_type: + match += [out_fmt.short_name().replace(out_type, fmt_type)] + + found_match = False + for in_fmt in formats: + if in_fmt.short_name() in match: + print(' case %s:' % in_fmt.name, file=sys.stdout3) + found_match = True + + if found_match: + print(' return %s;' % out_fmt.name, file=sys.stdout3) + print(' default:', file=sys.stdout3) + print(' return format;', file=sys.stdout3) + print(' }', file=sys.stdout3) + print('}', file=sys.stdout3) + +def write_type_conv_helpers(formats): + out_types = ['unorm', 'snorm', 'uint', 'sint', 'float'] + in_types = out_types + ['any'] + for in_type in in_types: + for out_type in out_types: + if in_type != out_type: + write_type_conv_helper(formats, in_type, out_type) + print(file=sys.stdout3) + def write_format_inline_helpers(formats): write_to_chroma_format(formats) print(file=sys.stdout3) @@ -501,6 +542,7 @@ def write_format_inline_helpers(formats): print(file=sys.stdout3) write_get_plane_width_height(formats) print(file=sys.stdout3) + write_type_conv_helpers(formats) def write_format_table(formats): write_format_table_header(sys.stdout)