linux/drivers/gpu/drm/vmwgfx/vmw_surface_cache.h

/* SPDX-License-Identifier: GPL-2.0 OR MIT */
/**********************************************************
 *
 * Copyright (c) 2021-2024 Broadcom. All Rights Reserved. The term
 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use, copy,
 * modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 **********************************************************/

#ifndef VMW_SURFACE_CACHE_H
#define VMW_SURFACE_CACHE_H

#include "device_include/svga3d_surfacedefs.h"

#include <drm/vmwgfx_drm.h>

#define SVGA3D_FLAGS_UPPER_32(svga3d_flags)
#define SVGA3D_FLAGS_LOWER_32(svga3d_flags)

static inline u32 clamped_umul32(u32 a, u32 b)
{}

/**
 * vmw_surface_get_desc - Look up the appropriate SVGA3dSurfaceDesc for the
 * given format.
 */
static inline const SVGA3dSurfaceDesc *
vmw_surface_get_desc(SVGA3dSurfaceFormat format)
{}

/**
 * vmw_surface_get_mip_size -  Given a base level size and the mip level,
 * compute the size of the mip level.
 */
static inline struct drm_vmw_size
vmw_surface_get_mip_size(struct drm_vmw_size base_level, u32 mip_level)
{}

static inline void
vmw_surface_get_size_in_blocks(const SVGA3dSurfaceDesc *desc,
				 const struct drm_vmw_size *pixel_size,
				 SVGA3dSize *block_size)
{}

static inline bool
vmw_surface_is_planar_surface(const SVGA3dSurfaceDesc *desc)
{}

static inline u32
vmw_surface_calculate_pitch(const SVGA3dSurfaceDesc *desc,
			      const struct drm_vmw_size *size)
{}

/**
 * vmw_surface_get_image_buffer_size - Calculates image buffer size.
 *
 * Return the number of bytes of buffer space required to store one image of a
 * surface, optionally using the specified pitch.
 *
 * If pitch is zero, it is assumed that rows are tightly packed.
 *
 * This function is overflow-safe. If the result would have overflowed, instead
 * we return MAX_UINT32.
 */
static inline u32
vmw_surface_get_image_buffer_size(const SVGA3dSurfaceDesc *desc,
				    const struct drm_vmw_size *size,
				    u32 pitch)
{}

/**
 * vmw_surface_get_serialized_size - Get the serialized size for the image.
 */
static inline u32
vmw_surface_get_serialized_size(SVGA3dSurfaceFormat format,
				  struct drm_vmw_size base_level_size,
				  u32 num_mip_levels,
				  u32 num_layers)
{}

/**
 * vmw_surface_get_serialized_size_extended - Returns the number of bytes
 * required for a surface with given parameters. Support for sample count.
 */
static inline u32
vmw_surface_get_serialized_size_extended(SVGA3dSurfaceFormat format,
					   struct drm_vmw_size base_level_size,
					   u32 num_mip_levels,
					   u32 num_layers,
					   u32 num_samples)
{}

/**
 * vmw_surface_get_pixel_offset - Compute the offset (in bytes) to a pixel
 * in an image (or volume).
 *
 * @width: The image width in pixels.
 * @height: The image height in pixels
 */
static inline u32
vmw_surface_get_pixel_offset(SVGA3dSurfaceFormat format,
			       u32 width, u32 height,
			       u32 x, u32 y, u32 z)
{}

static inline u32
vmw_surface_get_image_offset(SVGA3dSurfaceFormat format,
			       struct drm_vmw_size baseLevelSize,
			       u32 numMipLevels,
			       u32 face,
			       u32 mip)

{}


/**
 * vmw_surface_is_gb_screen_target_format - Is the specified format usable as
 *                                            a ScreenTarget?
 *                                            (with just the GBObjects cap-bit
 *                                             set)
 * @format: format to queried
 *
 * RETURNS:
 * true if queried format is valid for screen targets
 */
static inline bool
vmw_surface_is_gb_screen_target_format(SVGA3dSurfaceFormat format)
{}


/**
 * vmw_surface_is_dx_screen_target_format - Is the specified format usable as
 *                                            a ScreenTarget?
 *                                            (with DX10 enabled)
 *
 * @format: format to queried
 *
 * Results:
 * true if queried format is valid for screen targets
 */
static inline bool
vmw_surface_is_dx_screen_target_format(SVGA3dSurfaceFormat format)
{}


/**
 * vmw_surface_is_screen_target_format - Is the specified format usable as a
 *                                         ScreenTarget?
 *                                         (for some combination of caps)
 *
 * @format: format to queried
 *
 * Results:
 * true if queried format is valid for screen targets
 */
static inline bool
vmw_surface_is_screen_target_format(SVGA3dSurfaceFormat format)
{}

/**
 * struct vmw_surface_mip - Mimpmap level information
 * @bytes: Bytes required in the backing store of this mipmap level.
 * @img_stride: Byte stride per image.
 * @row_stride: Byte stride per block row.
 * @size: The size of the mipmap.
 */
struct vmw_surface_mip {};

/**
 * struct vmw_surface_cache - Cached surface information
 * @desc: Pointer to the surface descriptor
 * @mip: Array of mipmap level information. Valid size is @num_mip_levels.
 * @mip_chain_bytes: Bytes required in the backing store for the whole chain
 * of mip levels.
 * @sheet_bytes: Bytes required in the backing store for a sheet
 * representing a single sample.
 * @num_mip_levels: Valid size of the @mip array. Number of mipmap levels in
 * a chain.
 * @num_layers: Number of slices in an array texture or number of faces in
 * a cubemap texture.
 */
struct vmw_surface_cache {};

/**
 * struct vmw_surface_loc - Surface location
 * @sheet: The multisample sheet.
 * @sub_resource: Surface subresource. Defined as layer * num_mip_levels +
 * mip_level.
 * @x: X coordinate.
 * @y: Y coordinate.
 * @z: Z coordinate.
 */
struct vmw_surface_loc {};

/**
 * vmw_surface_subres - Compute the subresource from layer and mipmap.
 * @cache: Surface layout data.
 * @mip_level: The mipmap level.
 * @layer: The surface layer (face or array slice).
 *
 * Return: The subresource.
 */
static inline u32 vmw_surface_subres(const struct vmw_surface_cache *cache,
				       u32 mip_level, u32 layer)
{}

/**
 * vmw_surface_setup_cache - Build a surface cache entry
 * @size: The surface base level dimensions.
 * @format: The surface format.
 * @num_mip_levels: Number of mipmap levels.
 * @num_layers: Number of layers.
 * @cache: Pointer to a struct vmw_surface_cach object to be filled in.
 *
 * Return: Zero on success, -EINVAL on invalid surface layout.
 */
static inline int vmw_surface_setup_cache(const struct drm_vmw_size *size,
					    SVGA3dSurfaceFormat format,
					    u32 num_mip_levels,
					    u32 num_layers,
					    u32 num_samples,
					    struct vmw_surface_cache *cache)
{}

/**
 * vmw_surface_get_loc - Get a surface location from an offset into the
 * backing store
 * @cache: Surface layout data.
 * @loc: Pointer to a struct vmw_surface_loc to be filled in.
 * @offset: Offset into the surface backing store.
 */
static inline void
vmw_surface_get_loc(const struct vmw_surface_cache *cache,
		      struct vmw_surface_loc *loc,
		      size_t offset)
{}

/**
 * vmw_surface_inc_loc - Clamp increment a surface location with one block
 * size
 * in each dimension.
 * @loc: Pointer to a struct vmw_surface_loc to be incremented.
 *
 * When computing the size of a range as size = end - start, the range does not
 * include the end element. However a location representing the last byte
 * of a touched region in the backing store *is* included in the range.
 * This function modifies such a location to match the end definition
 * given as start + size which is the one used in a SVGA3dBox.
 */
static inline void
vmw_surface_inc_loc(const struct vmw_surface_cache *cache,
		      struct vmw_surface_loc *loc)
{}

/**
 * vmw_surface_min_loc - The start location in a subresource
 * @cache: Surface layout data.
 * @sub_resource: The subresource.
 * @loc: Pointer to a struct vmw_surface_loc to be filled in.
 */
static inline void
vmw_surface_min_loc(const struct vmw_surface_cache *cache,
		      u32 sub_resource,
		      struct vmw_surface_loc *loc)
{}

/**
 * vmw_surface_min_loc - The end location in a subresource
 * @cache: Surface layout data.
 * @sub_resource: The subresource.
 * @loc: Pointer to a struct vmw_surface_loc to be filled in.
 *
 * Following the end definition given in vmw_surface_inc_loc(),
 * Compute the end location of a surface subresource.
 */
static inline void
vmw_surface_max_loc(const struct vmw_surface_cache *cache,
		      u32 sub_resource,
		      struct vmw_surface_loc *loc)
{}


#endif /* VMW_SURFACE_CACHE_H */