[Mesa-dev] [PATCH 08/12] main/texstore: Split texture storage into three functions: texstore_depth_stencil, texstore_compressed, and texstore_rgba
Brian Paul
brianp at vmware.com
Fri Jul 18 07:52:11 PDT 2014
The first line of the commit msg should be shorter.
Why do you want to do this split? The commit message doesn't say.
-Brian
On 07/17/2014 12:04 PM, Jason Ekstrand wrote:
> Signed-off-by: Jason Ekstrand <jason.ekstrand at intel.com>
> ---
> src/mesa/main/texstore.c | 171 +++++++++++++++++++++++++++--------------------
> 1 file changed, 100 insertions(+), 71 deletions(-)
>
> diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c
> index d363f9f..e1f2284 100644
> --- a/src/mesa/main/texstore.c
> +++ b/src/mesa/main/texstore.c
> @@ -3540,35 +3540,95 @@ _mesa_texstore_abgr2101010(TEXSTORE_PARAMS)
> return GL_TRUE;
> }
>
> +
> static GLboolean
> -_mesa_texstore_null(TEXSTORE_PARAMS)
> +texstore_depth_stencil(TEXSTORE_PARAMS)
> {
> - (void) ctx; (void) dims;
> - (void) baseInternalFormat;
> - (void) dstFormat;
> - (void) dstRowStride; (void) dstSlices,
> - (void) srcWidth; (void) srcHeight; (void) srcDepth;
> - (void) srcFormat; (void) srcType;
> - (void) srcAddr;
> - (void) srcPacking;
> -
> - /* should never happen */
> - _mesa_problem(NULL, "_mesa_texstore_null() is called");
> - return GL_FALSE;
> + static StoreTexImageFunc table[MESA_FORMAT_COUNT];
> + static GLboolean initialized = GL_FALSE;
> +
> + if (!initialized) {
> + memset(table, 0, sizeof table);
> +
> + table[MESA_FORMAT_S8_UINT_Z24_UNORM] = _mesa_texstore_z24_s8;
> + table[MESA_FORMAT_Z24_UNORM_S8_UINT] = _mesa_texstore_s8_z24;
> + table[MESA_FORMAT_Z_UNORM16] = _mesa_texstore_z16;
> + table[MESA_FORMAT_Z24_UNORM_X8_UINT] = _mesa_texstore_x8_z24;
> + table[MESA_FORMAT_X8_UINT_Z24_UNORM] = _mesa_texstore_z24_x8;
> + table[MESA_FORMAT_Z_UNORM32] = _mesa_texstore_z32;
> + table[MESA_FORMAT_S_UINT8] = _mesa_texstore_s8;
> + table[MESA_FORMAT_Z_FLOAT32] = _mesa_texstore_z32;
> + table[MESA_FORMAT_Z32_FLOAT_S8X24_UINT] = _mesa_texstore_z32f_x24s8;
> +
> + initialized = GL_TRUE;
> + }
> +
> + ASSERT(table[dstFormat]);
> + return table[dstFormat](ctx, dims, baseInternalFormat,
> + dstFormat, dstRowStride, dstSlices,
> + srcWidth, srcHeight, srcDepth,
> + srcFormat, srcType, srcAddr, srcPacking);
> }
>
> +static GLboolean
> +texstore_compressed(TEXSTORE_PARAMS)
> +{
> + static StoreTexImageFunc table[MESA_FORMAT_COUNT];
> + static GLboolean initialized = GL_FALSE;
> +
> + if (!initialized) {
> + memset(table, 0, sizeof table);
>
> -/**
> - * Return the StoreTexImageFunc pointer to store an image in the given format.
> - */
> -static StoreTexImageFunc
> -_mesa_get_texstore_func(mesa_format format)
> + table[MESA_FORMAT_SRGB_DXT1] = _mesa_texstore_rgb_dxt1;
> + table[MESA_FORMAT_SRGBA_DXT1] = _mesa_texstore_rgba_dxt1;
> + table[MESA_FORMAT_SRGBA_DXT3] = _mesa_texstore_rgba_dxt3;
> + table[MESA_FORMAT_SRGBA_DXT5] = _mesa_texstore_rgba_dxt5;
> + table[MESA_FORMAT_RGB_FXT1] = _mesa_texstore_rgb_fxt1;
> + table[MESA_FORMAT_RGBA_FXT1] = _mesa_texstore_rgba_fxt1;
> + table[MESA_FORMAT_RGB_DXT1] = _mesa_texstore_rgb_dxt1;
> + table[MESA_FORMAT_RGBA_DXT1] = _mesa_texstore_rgba_dxt1;
> + table[MESA_FORMAT_RGBA_DXT3] = _mesa_texstore_rgba_dxt3;
> + table[MESA_FORMAT_RGBA_DXT5] = _mesa_texstore_rgba_dxt5;
> + table[MESA_FORMAT_R_RGTC1_UNORM] = _mesa_texstore_red_rgtc1;
> + table[MESA_FORMAT_R_RGTC1_SNORM] = _mesa_texstore_signed_red_rgtc1;
> + table[MESA_FORMAT_RG_RGTC2_UNORM] = _mesa_texstore_rg_rgtc2;
> + table[MESA_FORMAT_RG_RGTC2_SNORM] = _mesa_texstore_signed_rg_rgtc2;
> + table[MESA_FORMAT_L_LATC1_UNORM] = _mesa_texstore_red_rgtc1;
> + table[MESA_FORMAT_L_LATC1_SNORM] = _mesa_texstore_signed_red_rgtc1;
> + table[MESA_FORMAT_LA_LATC2_UNORM] = _mesa_texstore_rg_rgtc2;
> + table[MESA_FORMAT_LA_LATC2_SNORM] = _mesa_texstore_signed_rg_rgtc2;
> + table[MESA_FORMAT_ETC1_RGB8] = _mesa_texstore_etc1_rgb8;
> + table[MESA_FORMAT_ETC2_RGB8] = _mesa_texstore_etc2_rgb8;
> + table[MESA_FORMAT_ETC2_SRGB8] = _mesa_texstore_etc2_srgb8;
> + table[MESA_FORMAT_ETC2_RGBA8_EAC] = _mesa_texstore_etc2_rgba8_eac;
> + table[MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC] = _mesa_texstore_etc2_srgb8_alpha8_eac;
> + table[MESA_FORMAT_ETC2_R11_EAC] = _mesa_texstore_etc2_r11_eac;
> + table[MESA_FORMAT_ETC2_RG11_EAC] = _mesa_texstore_etc2_rg11_eac;
> + table[MESA_FORMAT_ETC2_SIGNED_R11_EAC] = _mesa_texstore_etc2_signed_r11_eac;
> + table[MESA_FORMAT_ETC2_SIGNED_RG11_EAC] = _mesa_texstore_etc2_signed_rg11_eac;
> + table[MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1] =
> + _mesa_texstore_etc2_rgb8_punchthrough_alpha1;
> + table[MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1] =
> + _mesa_texstore_etc2_srgb8_punchthrough_alpha1;
> +
> + initialized = GL_TRUE;
> + }
> +
> + ASSERT(table[dstFormat]);
> + return table[dstFormat](ctx, dims, baseInternalFormat,
> + dstFormat, dstRowStride, dstSlices,
> + srcWidth, srcHeight, srcDepth,
> + srcFormat, srcType, srcAddr, srcPacking);
> +}
> +
> +static GLboolean
> +texstore_rgba(TEXSTORE_PARAMS)
> {
> static StoreTexImageFunc table[MESA_FORMAT_COUNT];
> static GLboolean initialized = GL_FALSE;
>
> if (!initialized) {
> - table[MESA_FORMAT_NONE] = _mesa_texstore_null;
> + memset(table, 0, sizeof table);
>
> table[MESA_FORMAT_A8B8G8R8_UNORM] = _mesa_texstore_rgba8888;
> table[MESA_FORMAT_R8G8B8A8_UNORM] = _mesa_texstore_rgba8888;
> @@ -3608,28 +3668,11 @@ _mesa_get_texstore_func(mesa_format format)
> table[MESA_FORMAT_R16G16_UNORM] = _mesa_texstore_unorm1616;
> table[MESA_FORMAT_G16R16_UNORM] = _mesa_texstore_unorm1616;
> table[MESA_FORMAT_B10G10R10A2_UNORM] = _mesa_texstore_argb2101010;
> - table[MESA_FORMAT_S8_UINT_Z24_UNORM] = _mesa_texstore_z24_s8;
> - table[MESA_FORMAT_Z24_UNORM_S8_UINT] = _mesa_texstore_s8_z24;
> - table[MESA_FORMAT_Z_UNORM16] = _mesa_texstore_z16;
> - table[MESA_FORMAT_Z24_UNORM_X8_UINT] = _mesa_texstore_x8_z24;
> - table[MESA_FORMAT_X8_UINT_Z24_UNORM] = _mesa_texstore_z24_x8;
> - table[MESA_FORMAT_Z_UNORM32] = _mesa_texstore_z32;
> - table[MESA_FORMAT_S_UINT8] = _mesa_texstore_s8;
> table[MESA_FORMAT_BGR_SRGB8] = _mesa_texstore_srgb8;
> table[MESA_FORMAT_A8B8G8R8_SRGB] = _mesa_texstore_srgba8;
> table[MESA_FORMAT_B8G8R8A8_SRGB] = _mesa_texstore_sargb8;
> table[MESA_FORMAT_L_SRGB8] = _mesa_texstore_sl8;
> table[MESA_FORMAT_L8A8_SRGB] = _mesa_texstore_sla8;
> - table[MESA_FORMAT_SRGB_DXT1] = _mesa_texstore_rgb_dxt1;
> - table[MESA_FORMAT_SRGBA_DXT1] = _mesa_texstore_rgba_dxt1;
> - table[MESA_FORMAT_SRGBA_DXT3] = _mesa_texstore_rgba_dxt3;
> - table[MESA_FORMAT_SRGBA_DXT5] = _mesa_texstore_rgba_dxt5;
> - table[MESA_FORMAT_RGB_FXT1] = _mesa_texstore_rgb_fxt1;
> - table[MESA_FORMAT_RGBA_FXT1] = _mesa_texstore_rgba_fxt1;
> - table[MESA_FORMAT_RGB_DXT1] = _mesa_texstore_rgb_dxt1;
> - table[MESA_FORMAT_RGBA_DXT1] = _mesa_texstore_rgba_dxt1;
> - table[MESA_FORMAT_RGBA_DXT3] = _mesa_texstore_rgba_dxt3;
> - table[MESA_FORMAT_RGBA_DXT5] = _mesa_texstore_rgba_dxt5;
> table[MESA_FORMAT_RGBA_FLOAT32] = _mesa_texstore_rgba_float32;
> table[MESA_FORMAT_RGBA_FLOAT16] = _mesa_texstore_rgba_float16;
> table[MESA_FORMAT_RGB_FLOAT32] = _mesa_texstore_rgba_float32;
> @@ -3656,27 +3699,6 @@ _mesa_get_texstore_func(mesa_format format)
> table[MESA_FORMAT_RGB_SNORM16] = _mesa_texstore_signed_rgba_16;
> table[MESA_FORMAT_RGBA_SNORM16] = _mesa_texstore_signed_rgba_16;
> table[MESA_FORMAT_RGBA_UNORM16] = _mesa_texstore_rgba_16;
> - table[MESA_FORMAT_R_RGTC1_UNORM] = _mesa_texstore_red_rgtc1;
> - table[MESA_FORMAT_R_RGTC1_SNORM] = _mesa_texstore_signed_red_rgtc1;
> - table[MESA_FORMAT_RG_RGTC2_UNORM] = _mesa_texstore_rg_rgtc2;
> - table[MESA_FORMAT_RG_RGTC2_SNORM] = _mesa_texstore_signed_rg_rgtc2;
> - table[MESA_FORMAT_L_LATC1_UNORM] = _mesa_texstore_red_rgtc1;
> - table[MESA_FORMAT_L_LATC1_SNORM] = _mesa_texstore_signed_red_rgtc1;
> - table[MESA_FORMAT_LA_LATC2_UNORM] = _mesa_texstore_rg_rgtc2;
> - table[MESA_FORMAT_LA_LATC2_SNORM] = _mesa_texstore_signed_rg_rgtc2;
> - table[MESA_FORMAT_ETC1_RGB8] = _mesa_texstore_etc1_rgb8;
> - table[MESA_FORMAT_ETC2_RGB8] = _mesa_texstore_etc2_rgb8;
> - table[MESA_FORMAT_ETC2_SRGB8] = _mesa_texstore_etc2_srgb8;
> - table[MESA_FORMAT_ETC2_RGBA8_EAC] = _mesa_texstore_etc2_rgba8_eac;
> - table[MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC] = _mesa_texstore_etc2_srgb8_alpha8_eac;
> - table[MESA_FORMAT_ETC2_R11_EAC] = _mesa_texstore_etc2_r11_eac;
> - table[MESA_FORMAT_ETC2_RG11_EAC] = _mesa_texstore_etc2_rg11_eac;
> - table[MESA_FORMAT_ETC2_SIGNED_R11_EAC] = _mesa_texstore_etc2_signed_r11_eac;
> - table[MESA_FORMAT_ETC2_SIGNED_RG11_EAC] = _mesa_texstore_etc2_signed_rg11_eac;
> - table[MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1] =
> - _mesa_texstore_etc2_rgb8_punchthrough_alpha1;
> - table[MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1] =
> - _mesa_texstore_etc2_srgb8_punchthrough_alpha1;
> table[MESA_FORMAT_A_SNORM8] = _mesa_texstore_snorm8;
> table[MESA_FORMAT_L_SNORM8] = _mesa_texstore_snorm8;
> table[MESA_FORMAT_L8A8_SNORM] = _mesa_texstore_snorm88;
> @@ -3774,11 +3796,13 @@ _mesa_get_texstore_func(mesa_format format)
> initialized = GL_TRUE;
> }
>
> - ASSERT(table[format]);
> - return table[format];
> + ASSERT(table[dstFormat]);
> + return table[dstFormat](ctx, dims, baseInternalFormat,
> + dstFormat, dstRowStride, dstSlices,
> + srcWidth, srcHeight, srcDepth,
> + srcFormat, srcType, srcAddr, srcPacking);
> }
>
> -
> GLboolean
> _mesa_texstore_needs_transfer_ops(struct gl_context *ctx,
> GLenum baseInternalFormat,
> @@ -3858,9 +3882,6 @@ _mesa_texstore_memcpy(TEXSTORE_PARAMS)
> GLboolean
> _mesa_texstore(TEXSTORE_PARAMS)
> {
> - StoreTexImageFunc storeImage;
> - GLboolean success;
> -
> if (_mesa_texstore_memcpy(ctx, dims, baseInternalFormat,
> dstFormat,
> dstRowStride, dstSlices,
> @@ -3869,14 +3890,22 @@ _mesa_texstore(TEXSTORE_PARAMS)
> return GL_TRUE;
> }
>
> - storeImage = _mesa_get_texstore_func(dstFormat);
> -
> - success = storeImage(ctx, dims, baseInternalFormat,
> - dstFormat,
> - dstRowStride, dstSlices,
> - srcWidth, srcHeight, srcDepth,
> - srcFormat, srcType, srcAddr, srcPacking);
> - return success;
> + if (_mesa_is_depth_or_stencil_format(baseInternalFormat)) {
> + return texstore_depth_stencil(ctx, dims, baseInternalFormat,
> + dstFormat, dstRowStride, dstSlices,
> + srcWidth, srcHeight, srcDepth,
> + srcFormat, srcType, srcAddr, srcPacking);
> + } else if (_mesa_is_format_compressed(dstFormat)) {
> + return texstore_compressed(ctx, dims, baseInternalFormat,
> + dstFormat, dstRowStride, dstSlices,
> + srcWidth, srcHeight, srcDepth,
> + srcFormat, srcType, srcAddr, srcPacking);
> + } else {
> + return texstore_rgba(ctx, dims, baseInternalFormat,
> + dstFormat, dstRowStride, dstSlices,
> + srcWidth, srcHeight, srcDepth,
> + srcFormat, srcType, srcAddr, srcPacking);
> + }
> }
>
>
>
More information about the mesa-dev
mailing list