blob: 73dae0d95d70ab75fa90dd2cbd1e0bc7955e7004 [file] [log] [blame]
/*
* Copyright © 2021 Raspberry Pi Ltd
*
* 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 (including the next
* paragraph) 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 V3D_UTIL_H
#define V3D_UTIL_H
#include "util/macros.h"
#include "common/v3d_device_info.h"
#include "compiler/shader_enums.h"
#include "util/format/u_formats.h"
#if USE_V3D_SIMULATOR
# include "simulator/v3d_simulator.h"
#else
# include "xf86drm.h"
#endif
/* Helper to call hw ver specific functions */
#define v3d_X(devinfo, thing) ({ \
__typeof(&v3d42_##thing) v3d_X_thing; \
switch (devinfo->ver) { \
case 42: \
v3d_X_thing = &v3d42_##thing; \
break; \
case 71: \
v3d_X_thing = &v3d71_##thing; \
break; \
default: \
unreachable("Unsupported hardware generation"); \
} \
v3d_X_thing; \
})
uint32_t
v3d_csd_choose_workgroups_per_supergroup(struct v3d_device_info *devinfo,
bool has_subgroups,
bool has_tsy_barrier,
uint32_t threads,
uint32_t num_wgs,
uint32_t wg_size);
void
v3d_choose_tile_size(const struct v3d_device_info *devinfo,
uint32_t color_attachment_count,
uint32_t max_internal_bpp,
uint32_t total_color_bpp,
bool msaa,
bool double_buffer,
uint32_t *width,
uint32_t *height);
uint32_t
v3d_translate_pipe_swizzle(enum pipe_swizzle swizzle);
uint32_t
v3d_hw_prim_type(enum mesa_prim prim_type);
uint32_t
v3d_internal_bpp_words(uint32_t internal_bpp);
/* Some configuration packets want the size on log2, but starting at 0 for
* size 8.
*/
static inline uint8_t
log2_tile_size(uint32_t size)
{
switch(size) {
case 8:
return 0;
case 16:
return 1;
case 32:
return 2;
case 64:
return 3;
default:
unreachable("Unsupported tile width/height");
}
}
uint32_t
v3d_compute_rt_row_row_stride_128_bits(uint32_t tile_width,
uint32_t bpp);
static inline int
v3d_ioctl(int fd, unsigned long request, void *arg)
{
#if USE_V3D_SIMULATOR
return v3d_simulator_ioctl(fd, request, arg);
#else
return drmIoctl(fd, request, arg);
#endif
}
#endif