panvk: Get rid of fields we already have in vk_xxx objects
There's no point adding our own pointer when the base vk_xxx object already provides a way to get back to the parent. Replace those fields by _get_xxx() helpers. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28104>
This commit is contained in:
@@ -481,14 +481,16 @@ panvk_cmd_fb_info_set_subpass(struct panvk_cmd_buffer *cmdbuf)
|
||||
void
|
||||
panvk_cmd_fb_info_init(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||
const struct vk_framebuffer *fb = cmdbuf->state.framebuffer;
|
||||
|
||||
memset(cmdbuf->state.fb.crc_valid, 0, sizeof(cmdbuf->state.fb.crc_valid));
|
||||
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(
|
||||
cmdbuf->device->physical_device->model),
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.width = fb->width,
|
||||
.height = fb->height,
|
||||
.extent.maxx = fb->width - 1,
|
||||
|
||||
@@ -450,8 +450,6 @@ panvk_physical_device_init(struct panvk_physical_device *device,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
device->instance = instance;
|
||||
|
||||
if (instance->vk.enabled_extensions.KHR_display) {
|
||||
master_fd = open(drm_device->nodes[DRM_NODE_PRIMARY], O_RDWR | O_CLOEXEC);
|
||||
if (master_fd >= 0) {
|
||||
@@ -929,10 +927,12 @@ static VkResult
|
||||
panvk_queue_init(struct panvk_device *device, struct panvk_queue *queue,
|
||||
int idx, const VkDeviceQueueCreateInfo *create_info)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(device->vk.physical);
|
||||
|
||||
VkResult result = vk_queue_init(&queue->vk, &device->vk, create_info, idx);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
queue->device = device;
|
||||
|
||||
struct drm_syncobj_create create = {
|
||||
.flags = DRM_SYNCOBJ_CREATE_SIGNALED,
|
||||
@@ -944,7 +944,7 @@ panvk_queue_init(struct panvk_device *device, struct panvk_queue *queue,
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
|
||||
unsigned arch = pan_arch(device->physical_device->kmod.props.gpu_prod_id);
|
||||
unsigned arch = pan_arch(phys_dev->kmod.props.gpu_prod_id);
|
||||
|
||||
switch (arch) {
|
||||
case 6:
|
||||
@@ -1077,12 +1077,13 @@ panvk_CreateDevice(VkPhysicalDevice physicalDevice,
|
||||
const VkAllocationCallbacks *pAllocator, VkDevice *pDevice)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_physical_device, physical_device, physicalDevice);
|
||||
struct panvk_instance *instance = physical_device->instance;
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(physical_device->vk.instance);
|
||||
VkResult result;
|
||||
struct panvk_device *device;
|
||||
|
||||
device = vk_zalloc2(&physical_device->instance->vk.alloc, pAllocator,
|
||||
sizeof(*device), 8, VK_SYSTEM_ALLOCATION_SCOPE_DEVICE);
|
||||
device = vk_zalloc2(&instance->vk.alloc, pAllocator, sizeof(*device), 8,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_DEVICE);
|
||||
if (!device)
|
||||
return vk_error(physical_device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
@@ -1139,9 +1140,6 @@ panvk_CreateDevice(VkPhysicalDevice physicalDevice,
|
||||
device->vk.command_dispatch_table = &device->cmd_dispatch;
|
||||
device->vk.command_buffer_ops = cmd_buffer_ops;
|
||||
|
||||
device->instance = physical_device->instance;
|
||||
device->physical_device = physical_device;
|
||||
|
||||
device->kmod.allocator = (struct pan_kmod_allocator){
|
||||
.zalloc = panvk_kmod_zalloc,
|
||||
.free = panvk_kmod_free,
|
||||
@@ -1232,7 +1230,8 @@ VKAPI_ATTR void VKAPI_CALL
|
||||
panvk_DestroyDevice(VkDevice _device, const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
struct panvk_physical_device *physical_device = device->physical_device;
|
||||
struct panvk_physical_device *physical_device =
|
||||
to_panvk_physical_device(device->vk.physical);
|
||||
|
||||
if (!device)
|
||||
return;
|
||||
@@ -1269,8 +1268,9 @@ VKAPI_ATTR VkResult VKAPI_CALL
|
||||
panvk_QueueWaitIdle(VkQueue _queue)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_queue, queue, _queue);
|
||||
struct panvk_device *dev = to_panvk_device(queue->vk.base.device);
|
||||
|
||||
if (vk_device_is_lost(&queue->device->vk))
|
||||
if (vk_device_is_lost(&dev->vk))
|
||||
return VK_ERROR_DEVICE_LOST;
|
||||
|
||||
struct drm_syncobj_wait wait = {
|
||||
|
||||
@@ -65,6 +65,8 @@ panvk_image_create(VkDevice _device, const VkImageCreateInfo *pCreateInfo,
|
||||
uint64_t modifier, const VkSubresourceLayout *plane_layouts)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(device->vk.physical);
|
||||
struct panvk_image *image = NULL;
|
||||
|
||||
image = vk_image_create(&device->vk, pCreateInfo, alloc, sizeof(*image));
|
||||
@@ -83,7 +85,7 @@ panvk_image_create(VkDevice _device, const VkImageCreateInfo *pCreateInfo,
|
||||
.nr_slices = image->vk.mip_levels,
|
||||
};
|
||||
|
||||
unsigned arch = pan_arch(device->physical_device->kmod.props.gpu_prod_id);
|
||||
unsigned arch = pan_arch(phys_dev->kmod.props.gpu_prod_id);
|
||||
pan_image_layout_init(arch, &image->pimage.layout, NULL);
|
||||
|
||||
*pImage = panvk_image_to_handle(image);
|
||||
@@ -95,11 +97,13 @@ panvk_image_select_mod(VkDevice _device, const VkImageCreateInfo *pCreateInfo,
|
||||
const VkSubresourceLayout **plane_layouts)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(device->vk.physical->instance);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(device->vk.physical);
|
||||
enum pipe_format fmt = vk_format_to_pipe_format(pCreateInfo->format);
|
||||
bool noafbc =
|
||||
!(device->physical_device->instance->debug_flags & PANVK_DEBUG_AFBC);
|
||||
bool linear =
|
||||
device->physical_device->instance->debug_flags & PANVK_DEBUG_LINEAR;
|
||||
bool noafbc = !(instance->debug_flags & PANVK_DEBUG_AFBC);
|
||||
bool linear = instance->debug_flags & PANVK_DEBUG_LINEAR;
|
||||
|
||||
*plane_layouts = NULL;
|
||||
|
||||
@@ -156,11 +160,11 @@ panvk_image_select_mod(VkDevice _device, const VkImageCreateInfo *pCreateInfo,
|
||||
if (pCreateInfo->samples > 1)
|
||||
return DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED;
|
||||
|
||||
if (!panfrost_query_afbc(&device->physical_device->kmod.props))
|
||||
if (!panfrost_query_afbc(&phys_dev->kmod.props))
|
||||
return DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED;
|
||||
|
||||
/* Only a small selection of formats are AFBC'able */
|
||||
unsigned arch = pan_arch(device->physical_device->kmod.props.gpu_prod_id);
|
||||
unsigned arch = pan_arch(phys_dev->kmod.props.gpu_prod_id);
|
||||
if (!panfrost_format_supports_afbc(arch, fmt))
|
||||
return DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED;
|
||||
|
||||
|
||||
@@ -210,8 +210,6 @@ struct panvk_physical_device {
|
||||
const struct panfrost_format *all;
|
||||
} formats;
|
||||
|
||||
struct panvk_instance *instance;
|
||||
|
||||
char name[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
|
||||
uint8_t driver_uuid[VK_UUID_SIZE];
|
||||
uint8_t device_uuid[VK_UUID_SIZE];
|
||||
@@ -225,6 +223,12 @@ struct panvk_physical_device {
|
||||
int master_fd;
|
||||
};
|
||||
|
||||
static inline struct panvk_physical_device *
|
||||
to_panvk_physical_device(struct vk_physical_device *phys_dev)
|
||||
{
|
||||
return container_of(phys_dev, struct panvk_physical_device, vk);
|
||||
}
|
||||
|
||||
enum panvk_debug_flags {
|
||||
PANVK_DEBUG_STARTUP = 1 << 0,
|
||||
PANVK_DEBUG_NIR = 1 << 1,
|
||||
@@ -248,6 +252,12 @@ struct panvk_instance {
|
||||
} kmod;
|
||||
};
|
||||
|
||||
static inline struct panvk_instance *
|
||||
to_panvk_instance(struct vk_instance *instance)
|
||||
{
|
||||
return container_of(instance, struct panvk_instance, vk);
|
||||
}
|
||||
|
||||
VkResult panvk_wsi_init(struct panvk_physical_device *physical_device);
|
||||
void panvk_wsi_finish(struct panvk_physical_device *physical_device);
|
||||
|
||||
@@ -261,7 +271,6 @@ panvk_physical_device_extension_supported(struct panvk_physical_device *dev,
|
||||
|
||||
struct panvk_queue {
|
||||
struct vk_queue vk;
|
||||
struct panvk_device *device;
|
||||
uint32_t sync;
|
||||
};
|
||||
|
||||
@@ -281,18 +290,20 @@ struct panvk_device {
|
||||
|
||||
struct vk_device_dispatch_table cmd_dispatch;
|
||||
|
||||
struct panvk_instance *instance;
|
||||
|
||||
struct panvk_queue *queues[PANVK_MAX_QUEUE_FAMILIES];
|
||||
int queue_count[PANVK_MAX_QUEUE_FAMILIES];
|
||||
|
||||
struct panvk_physical_device *physical_device;
|
||||
|
||||
struct {
|
||||
struct pandecode_context *decode_ctx;
|
||||
} debug;
|
||||
};
|
||||
|
||||
static inline struct panvk_device *
|
||||
to_panvk_device(struct vk_device *dev)
|
||||
{
|
||||
return container_of(dev, struct panvk_device, vk);
|
||||
}
|
||||
|
||||
#define TILER_DESC_WORDS 56
|
||||
|
||||
struct panvk_batch {
|
||||
@@ -777,8 +788,6 @@ struct panvk_cmd_bind_point_state {
|
||||
struct panvk_cmd_buffer {
|
||||
struct vk_command_buffer vk;
|
||||
|
||||
struct panvk_device *device;
|
||||
|
||||
struct panvk_pool desc_pool;
|
||||
struct panvk_pool varying_pool;
|
||||
struct panvk_pool tls_pool;
|
||||
|
||||
@@ -45,9 +45,10 @@ static uint32_t
|
||||
panvk_debug_adjust_bo_flags(const struct panvk_device *device,
|
||||
uint32_t bo_flags)
|
||||
{
|
||||
uint32_t debug_flags = device->physical_device->instance->debug_flags;
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(device->vk.physical->instance);
|
||||
|
||||
if (debug_flags & PANVK_DEBUG_DUMP)
|
||||
if (instance->debug_flags & PANVK_DEBUG_DUMP)
|
||||
bo_flags &= ~PAN_KMOD_BO_FLAG_NO_MMAP;
|
||||
|
||||
return bo_flags;
|
||||
@@ -102,7 +103,9 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf)
|
||||
return;
|
||||
}
|
||||
|
||||
struct panvk_device *dev = cmdbuf->device;
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
|
||||
list_addtail(&batch->node, &cmdbuf->batches);
|
||||
|
||||
@@ -118,11 +121,10 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf)
|
||||
|
||||
if (batch->tlsinfo.tls.size) {
|
||||
unsigned thread_tls_alloc =
|
||||
panfrost_query_thread_tls_alloc(&dev->physical_device->kmod.props);
|
||||
panfrost_query_thread_tls_alloc(&phys_dev->kmod.props);
|
||||
unsigned core_id_range;
|
||||
|
||||
panfrost_query_core_count(&dev->physical_device->kmod.props,
|
||||
&core_id_range);
|
||||
panfrost_query_core_count(&phys_dev->kmod.props, &core_id_range);
|
||||
|
||||
unsigned size = panfrost_get_total_stack_size(
|
||||
batch->tlsinfo.tls.size, thread_tls_alloc, core_id_range);
|
||||
@@ -142,7 +144,7 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf)
|
||||
GENX(pan_emit_tls)(&batch->tlsinfo, batch->tls.cpu);
|
||||
|
||||
if (batch->fb.desc.cpu) {
|
||||
fbinfo->sample_positions = cmdbuf->device->sample_positions->addr.dev +
|
||||
fbinfo->sample_positions = dev->sample_positions->addr.dev +
|
||||
panfrost_sample_positions_offset(
|
||||
pan_sample_pattern(fbinfo->nr_samples));
|
||||
|
||||
@@ -376,6 +378,7 @@ static void
|
||||
panvk_draw_prepare_fs_rsd(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_draw_info *draw)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
const struct panvk_pipeline *pipeline =
|
||||
panvk_cmd_get_pipeline(cmdbuf, GRAPHICS);
|
||||
|
||||
@@ -408,9 +411,8 @@ panvk_draw_prepare_fs_rsd(struct panvk_cmd_buffer *cmdbuf,
|
||||
|
||||
STATIC_ASSERT(sizeof(pipeline->blend.bd_template[0]) >=
|
||||
sizeof(*bd_templ));
|
||||
panvk_per_arch(emit_blend_constant)(cmdbuf->device, pipeline, i,
|
||||
cmdbuf->state.blend.constants,
|
||||
&bd_dyn);
|
||||
panvk_per_arch(emit_blend_constant)(
|
||||
dev, pipeline, i, cmdbuf->state.blend.constants, &bd_dyn);
|
||||
pan_merge(bd_dyn, (*bd_templ), BLEND);
|
||||
memcpy(bd, &bd_dyn, sizeof(bd_dyn));
|
||||
}
|
||||
@@ -427,6 +429,7 @@ void
|
||||
panvk_per_arch(cmd_get_tiler_context)(struct panvk_cmd_buffer *cmdbuf,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_batch *batch = cmdbuf->state.batch;
|
||||
|
||||
if (batch->tiler.descs.cpu)
|
||||
@@ -442,7 +445,7 @@ panvk_per_arch(cmd_get_tiler_context)(struct panvk_cmd_buffer *cmdbuf,
|
||||
.cpu = batch->tiler.templ,
|
||||
};
|
||||
|
||||
panvk_per_arch(emit_tiler_context)(cmdbuf->device, width, height, &desc);
|
||||
panvk_per_arch(emit_tiler_context)(dev, width, height, &desc);
|
||||
memcpy(batch->tiler.descs.cpu, batch->tiler.templ,
|
||||
pan_size(TILER_CONTEXT) + pan_size(TILER_HEAP));
|
||||
batch->tiler.ctx.bifrost = batch->tiler.descs.gpu;
|
||||
@@ -470,6 +473,7 @@ static void
|
||||
panvk_draw_prepare_varyings(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_draw_info *draw)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
const struct panvk_pipeline *pipeline =
|
||||
panvk_cmd_get_pipeline(cmdbuf, GRAPHICS);
|
||||
struct panvk_varyings_info *varyings = &cmdbuf->state.varyings;
|
||||
@@ -515,7 +519,7 @@ panvk_draw_prepare_varyings(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panfrost_ptr attribs = pan_pool_alloc_desc_array(
|
||||
&cmdbuf->desc_pool.base, varyings->stage[s].count, ATTRIBUTE);
|
||||
|
||||
panvk_per_arch(emit_varyings)(cmdbuf->device, varyings, s, attribs.cpu);
|
||||
panvk_per_arch(emit_varyings)(dev, varyings, s, attribs.cpu);
|
||||
draw->stages[s].varyings = attribs.gpu;
|
||||
}
|
||||
}
|
||||
@@ -580,6 +584,7 @@ static void
|
||||
panvk_draw_prepare_vs_attribs(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_draw_info *draw)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_cmd_bind_point_state *bind_point_state =
|
||||
panvk_cmd_get_bind_point_state(cmdbuf, GRAPHICS);
|
||||
struct panvk_descriptor_state *desc_state = &bind_point_state->desc_state;
|
||||
@@ -608,7 +613,7 @@ panvk_draw_prepare_vs_attribs(struct panvk_cmd_buffer *cmdbuf,
|
||||
|
||||
panvk_per_arch(emit_attrib_bufs)(&pipeline->attribs, cmdbuf->state.vb.bufs,
|
||||
cmdbuf->state.vb.count, draw, bufs.cpu);
|
||||
panvk_per_arch(emit_attribs)(cmdbuf->device, draw, &pipeline->attribs,
|
||||
panvk_per_arch(emit_attribs)(dev, draw, &pipeline->attribs,
|
||||
cmdbuf->state.vb.bufs, cmdbuf->state.vb.count,
|
||||
attribs.cpu);
|
||||
|
||||
@@ -809,16 +814,16 @@ panvk_index_minmax_search(struct panvk_cmd_buffer *cmdbuf, uint32_t start,
|
||||
uint32_t count, bool restart, uint32_t *min,
|
||||
uint32_t *max)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(dev->vk.physical->instance);
|
||||
void *ptr = cmdbuf->state.ib.buffer->host_ptr + cmdbuf->state.ib.offset;
|
||||
|
||||
assert(cmdbuf->state.ib.buffer);
|
||||
assert(cmdbuf->state.ib.buffer->bo);
|
||||
assert(cmdbuf->state.ib.buffer->host_ptr);
|
||||
|
||||
uint32_t debug_flags =
|
||||
cmdbuf->device->physical_device->instance->debug_flags;
|
||||
|
||||
if (!(debug_flags & PANVK_DEBUG_NO_KNOWN_WARN)) {
|
||||
if (!(instance->debug_flags & PANVK_DEBUG_NO_KNOWN_WARN)) {
|
||||
fprintf(
|
||||
stderr,
|
||||
"WARNING: Crawling index buffers from the CPU isn't valid in Vulkan\n");
|
||||
@@ -1078,7 +1083,7 @@ panvk_destroy_cmdbuf(struct vk_command_buffer *vk_cmdbuf)
|
||||
{
|
||||
struct panvk_cmd_buffer *cmdbuf =
|
||||
container_of(vk_cmdbuf, struct panvk_cmd_buffer, vk);
|
||||
struct panvk_device *device = cmdbuf->device;
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
|
||||
list_for_each_entry_safe(struct panvk_batch, batch, &cmdbuf->batches, node) {
|
||||
list_del(&batch->node);
|
||||
@@ -1092,7 +1097,7 @@ panvk_destroy_cmdbuf(struct vk_command_buffer *vk_cmdbuf)
|
||||
panvk_pool_cleanup(&cmdbuf->tls_pool);
|
||||
panvk_pool_cleanup(&cmdbuf->varying_pool);
|
||||
vk_command_buffer_finish(&cmdbuf->vk);
|
||||
vk_free(&device->vk.alloc, cmdbuf);
|
||||
vk_free(&dev->vk.alloc, cmdbuf);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
@@ -1117,8 +1122,6 @@ panvk_create_cmdbuf(struct vk_command_pool *vk_pool,
|
||||
return result;
|
||||
}
|
||||
|
||||
cmdbuf->device = device;
|
||||
|
||||
panvk_pool_init(&cmdbuf->desc_pool, device, &pool->desc_bo_pool, 0,
|
||||
64 * 1024, "Command buffer descriptor pool", true);
|
||||
panvk_pool_init(
|
||||
@@ -1174,13 +1177,15 @@ panvk_per_arch(CmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x,
|
||||
uint32_t y, uint32_t z)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct panvk_dispatch_info dispatch = {
|
||||
.wg_count = {x, y, z},
|
||||
};
|
||||
|
||||
panvk_per_arch(cmd_close_batch)(cmdbuf);
|
||||
struct panvk_batch *batch = panvk_cmd_open_batch(cmdbuf);
|
||||
struct panvk_device *dev = cmdbuf->device;
|
||||
|
||||
struct panvk_cmd_bind_point_state *bind_point_state =
|
||||
panvk_cmd_get_bind_point_state(cmdbuf, COMPUTE);
|
||||
@@ -1223,8 +1228,7 @@ panvk_per_arch(CmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x,
|
||||
if (batch->tlsinfo.wls.size) {
|
||||
unsigned core_id_range;
|
||||
|
||||
panfrost_query_core_count(&dev->physical_device->kmod.props,
|
||||
&core_id_range);
|
||||
panfrost_query_core_count(&phys_dev->kmod.props, &core_id_range);
|
||||
batch->wls_total_size = pan_wls_adjust_size(batch->tlsinfo.wls.size) *
|
||||
pan_wls_instances(&dispatch.wg_count) *
|
||||
core_id_range;
|
||||
|
||||
@@ -41,8 +41,12 @@ panvk_queue_submit_batch(struct panvk_queue *queue, struct panvk_batch *batch,
|
||||
uint32_t *bos, unsigned nr_bos, uint32_t *in_fences,
|
||||
unsigned nr_in_fences)
|
||||
{
|
||||
const struct panvk_device *dev = queue->device;
|
||||
unsigned debug = dev->physical_device->instance->debug_flags;
|
||||
struct panvk_device *dev = to_panvk_device(queue->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(dev->vk.physical->instance);
|
||||
unsigned debug = instance->debug_flags;
|
||||
int ret;
|
||||
|
||||
/* Reset the batch if it's already been issued */
|
||||
@@ -78,7 +82,7 @@ panvk_queue_submit_batch(struct panvk_queue *queue, struct panvk_batch *batch,
|
||||
|
||||
if (debug & PANVK_DEBUG_TRACE) {
|
||||
pandecode_jc(dev->debug.decode_ctx, batch->jc.first_job,
|
||||
dev->physical_device->kmod.props.gpu_prod_id);
|
||||
phys_dev->kmod.props.gpu_prod_id);
|
||||
}
|
||||
|
||||
if (debug & PANVK_DEBUG_DUMP)
|
||||
@@ -112,7 +116,7 @@ panvk_queue_submit_batch(struct panvk_queue *queue, struct panvk_batch *batch,
|
||||
|
||||
if (debug & PANVK_DEBUG_TRACE)
|
||||
pandecode_jc(dev->debug.decode_ctx, batch->fragment_job,
|
||||
dev->physical_device->kmod.props.gpu_prod_id);
|
||||
phys_dev->kmod.props.gpu_prod_id);
|
||||
|
||||
if (debug & PANVK_DEBUG_DUMP)
|
||||
pandecode_dump_mappings(dev->debug.decode_ctx);
|
||||
@@ -127,7 +131,7 @@ panvk_queue_submit_batch(struct panvk_queue *queue, struct panvk_batch *batch,
|
||||
static void
|
||||
panvk_queue_transfer_sync(struct panvk_queue *queue, uint32_t syncobj)
|
||||
{
|
||||
struct panvk_device *dev = queue->device;
|
||||
struct panvk_device *dev = to_panvk_device(queue->vk.base.device);
|
||||
int ret;
|
||||
|
||||
struct drm_syncobj_handle handle = {
|
||||
@@ -172,7 +176,7 @@ static void
|
||||
panvk_signal_event_syncobjs(struct panvk_queue *queue,
|
||||
struct panvk_batch *batch)
|
||||
{
|
||||
struct panvk_device *dev = queue->device;
|
||||
struct panvk_device *dev = to_panvk_device(queue->vk.base.device);
|
||||
|
||||
util_dynarray_foreach(&batch->event_ops, struct panvk_cmd_event_op, op) {
|
||||
switch (op->type) {
|
||||
@@ -205,7 +209,7 @@ panvk_per_arch(queue_submit)(struct vk_queue *vk_queue,
|
||||
struct vk_queue_submit *submit)
|
||||
{
|
||||
struct panvk_queue *queue = container_of(vk_queue, struct panvk_queue, vk);
|
||||
struct panvk_device *dev = queue->device;
|
||||
struct panvk_device *dev = to_panvk_device(queue->vk.base.device);
|
||||
|
||||
unsigned nr_semaphores = submit->wait_count + 1;
|
||||
uint32_t semaphores[nr_semaphores];
|
||||
|
||||
@@ -184,7 +184,7 @@ panvk_per_arch(CreateBufferView)(VkDevice _device,
|
||||
&device->vk, pAllocator, sizeof(*view), VK_OBJECT_TYPE_BUFFER_VIEW);
|
||||
|
||||
if (!view)
|
||||
return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
vk_buffer_view_init(&device->vk, &view->vk, pCreateInfo);
|
||||
|
||||
|
||||
@@ -34,7 +34,9 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_image *src_img,
|
||||
const struct panvk_image *dst_img)
|
||||
{
|
||||
struct panvk_device *dev = cmdbuf->device;
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||
struct pan_blit_context ctx;
|
||||
struct pan_image_view views[2] = {
|
||||
@@ -56,8 +58,7 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf,
|
||||
};
|
||||
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(
|
||||
cmdbuf->device->physical_device->model),
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.width = u_minify(blitinfo->dst.planes[0].image->layout.width,
|
||||
blitinfo->dst.level),
|
||||
.height = u_minify(blitinfo->dst.planes[0].image->layout.height,
|
||||
@@ -227,15 +228,18 @@ panvk_per_arch(CmdResolveImage2)(VkCommandBuffer commandBuffer,
|
||||
void
|
||||
panvk_per_arch(meta_blit_init)(struct panvk_device *dev)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
|
||||
panvk_pool_init(&dev->meta.blitter.bin_pool, dev, NULL,
|
||||
PAN_KMOD_BO_FLAG_EXECUTABLE, 16 * 1024,
|
||||
"panvk_meta blitter binary pool", false);
|
||||
panvk_pool_init(&dev->meta.blitter.desc_pool, dev, NULL, 0, 16 * 1024,
|
||||
"panvk_meta blitter descriptor pool", false);
|
||||
pan_blend_shader_cache_init(&dev->meta.blend_shader_cache,
|
||||
dev->physical_device->kmod.props.gpu_prod_id);
|
||||
phys_dev->kmod.props.gpu_prod_id);
|
||||
GENX(pan_blitter_cache_init)
|
||||
(&dev->meta.blitter.cache, dev->physical_device->kmod.props.gpu_prod_id,
|
||||
(&dev->meta.blitter.cache, phys_dev->kmod.props.gpu_prod_id,
|
||||
&dev->meta.blend_shader_cache, &dev->meta.blitter.bin_pool.base,
|
||||
&dev->meta.blitter.desc_pool.base);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ panvk_meta_clear_color_attachment_shader(struct panvk_device *dev,
|
||||
enum glsl_base_type base_type,
|
||||
struct pan_shader_info *shader_info)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
|
||||
|
||||
nir_builder b = nir_builder_init_simple_shader(
|
||||
@@ -53,7 +55,7 @@ panvk_meta_clear_color_attachment_shader(struct panvk_device *dev,
|
||||
nir_store_var(&b, out, clear_values, 0xff);
|
||||
|
||||
struct panfrost_compile_inputs inputs = {
|
||||
.gpu_id = dev->physical_device->kmod.props.gpu_prod_id,
|
||||
.gpu_id = phys_dev->kmod.props.gpu_prod_id,
|
||||
.is_blit = true,
|
||||
.no_ubo_to_push = true,
|
||||
};
|
||||
@@ -255,7 +257,8 @@ panvk_meta_clear_attachment(struct panvk_cmd_buffer *cmdbuf,
|
||||
const VkClearValue *clear_value,
|
||||
const VkClearRect *clear_rect)
|
||||
{
|
||||
struct panvk_meta *meta = &cmdbuf->device->meta;
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_meta *meta = &dev->meta;
|
||||
struct panvk_batch *batch = cmdbuf->state.batch;
|
||||
const struct panvk_render_pass *pass = cmdbuf->state.pass;
|
||||
const struct panvk_render_pass_attachment *att =
|
||||
@@ -318,6 +321,9 @@ panvk_meta_clear_color_img(struct panvk_cmd_buffer *cmdbuf,
|
||||
const VkClearColorValue *color,
|
||||
const VkImageSubresourceRange *range)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||
struct pan_image_view view = {
|
||||
.format = img->pimage.layout.format,
|
||||
@@ -330,8 +336,7 @@ panvk_meta_clear_color_img(struct panvk_cmd_buffer *cmdbuf,
|
||||
|
||||
cmdbuf->state.fb.crc_valid[0] = false;
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(
|
||||
cmdbuf->device->physical_device->model),
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.nr_samples = img->pimage.layout.nr_samples,
|
||||
.rt_count = 1,
|
||||
.rts[0].view = &view,
|
||||
@@ -389,6 +394,9 @@ panvk_meta_clear_zs_img(struct panvk_cmd_buffer *cmdbuf,
|
||||
const VkClearDepthStencilValue *value,
|
||||
const VkImageSubresourceRange *range)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||
struct pan_image_view view = {
|
||||
.format = img->pimage.layout.format,
|
||||
@@ -401,8 +409,7 @@ panvk_meta_clear_zs_img(struct panvk_cmd_buffer *cmdbuf,
|
||||
|
||||
cmdbuf->state.fb.crc_valid[0] = false;
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(
|
||||
cmdbuf->device->physical_device->model),
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.nr_samples = img->pimage.layout.nr_samples,
|
||||
.rt_count = 1,
|
||||
.zs.clear_value.depth = value->depth,
|
||||
|
||||
@@ -289,6 +289,8 @@ panvk_meta_copy_img2img_shader(struct panvk_device *dev,
|
||||
bool texisarray, bool is_ms,
|
||||
struct pan_shader_info *shader_info)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
|
||||
|
||||
nir_builder b = nir_builder_init_simple_shader(
|
||||
@@ -416,7 +418,7 @@ panvk_meta_copy_img2img_shader(struct panvk_device *dev,
|
||||
nir_store_var(&b, out, texel, 0xff);
|
||||
|
||||
struct panfrost_compile_inputs inputs = {
|
||||
.gpu_id = dev->physical_device->kmod.props.gpu_prod_id,
|
||||
.gpu_id = phys_dev->kmod.props.gpu_prod_id,
|
||||
.is_blit = true,
|
||||
.no_ubo_to_push = true,
|
||||
};
|
||||
@@ -554,6 +556,9 @@ panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_image *dst,
|
||||
const VkImageCopy2 *region)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||
struct panvk_meta_copy_img2img_format_info key = {
|
||||
.srcfmt = panvk_meta_copy_img_format(src->pimage.layout.format),
|
||||
@@ -569,7 +574,7 @@ panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
unsigned fmtidx = panvk_meta_copy_img2img_format_idx(key);
|
||||
unsigned ms = dst->pimage.layout.nr_samples > 1 ? 1 : 0;
|
||||
|
||||
mali_ptr rsd = cmdbuf->device->meta.copy.img2img[ms][texdimidx][fmtidx].rsd;
|
||||
mali_ptr rsd = dev->meta.copy.img2img[ms][texdimidx][fmtidx].rsd;
|
||||
|
||||
struct pan_image_view srcview = {
|
||||
.format = key.srcfmt,
|
||||
@@ -622,8 +627,7 @@ panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
u_minify(dst->pimage.layout.height, region->dstSubresource.mipLevel);
|
||||
cmdbuf->state.fb.crc_valid[0] = false;
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(
|
||||
cmdbuf->device->physical_device->model),
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.width = width,
|
||||
.height = height,
|
||||
.extent.minx = minx & ~31,
|
||||
@@ -851,6 +855,8 @@ panvk_meta_copy_buf2img_shader(struct panvk_device *dev,
|
||||
struct panvk_meta_copy_format_info key,
|
||||
struct pan_shader_info *shader_info)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
|
||||
|
||||
nir_builder b = nir_builder_init_simple_shader(
|
||||
@@ -955,7 +961,7 @@ panvk_meta_copy_buf2img_shader(struct panvk_device *dev,
|
||||
nir_store_var(&b, out, texel, 0xff);
|
||||
|
||||
struct panfrost_compile_inputs inputs = {
|
||||
.gpu_id = dev->physical_device->kmod.props.gpu_prod_id,
|
||||
.gpu_id = phys_dev->kmod.props.gpu_prod_id,
|
||||
.is_blit = true,
|
||||
.no_ubo_to_push = true,
|
||||
};
|
||||
@@ -998,6 +1004,9 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_image *img,
|
||||
const VkBufferImageCopy2 *region)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||
unsigned minx = MAX2(region->imageOffset.x, 0);
|
||||
unsigned miny = MAX2(region->imageOffset.y, 0);
|
||||
@@ -1024,7 +1033,7 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
|
||||
unsigned fmtidx = panvk_meta_copy_buf2img_format_idx(key);
|
||||
|
||||
mali_ptr rsd = cmdbuf->device->meta.copy.buf2img[fmtidx].rsd;
|
||||
mali_ptr rsd = dev->meta.copy.buf2img[fmtidx].rsd;
|
||||
|
||||
const struct vk_image_buffer_layout buflayout =
|
||||
vk_image_buffer_copy_layout(&img->vk, region);
|
||||
@@ -1051,8 +1060,7 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
/* TODO: don't force preloads of dst resources if unneeded */
|
||||
cmdbuf->state.fb.crc_valid[0] = false;
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(
|
||||
cmdbuf->device->physical_device->model),
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.width =
|
||||
u_minify(img->pimage.layout.width, region->imageSubresource.mipLevel),
|
||||
.height =
|
||||
@@ -1239,6 +1247,8 @@ panvk_meta_copy_img2buf_shader(struct panvk_device *dev,
|
||||
unsigned texdim, unsigned texisarray,
|
||||
struct pan_shader_info *shader_info)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
unsigned imgtexelsz = util_format_get_blocksize(key.imgfmt);
|
||||
unsigned buftexelsz = panvk_meta_copy_buf_texelsize(key.imgfmt, key.mask);
|
||||
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
|
||||
@@ -1413,7 +1423,7 @@ panvk_meta_copy_img2buf_shader(struct panvk_device *dev,
|
||||
nir_pop_if(&b, NULL);
|
||||
|
||||
struct panfrost_compile_inputs inputs = {
|
||||
.gpu_id = dev->physical_device->kmod.props.gpu_prod_id,
|
||||
.gpu_id = phys_dev->kmod.props.gpu_prod_id,
|
||||
.is_blit = true,
|
||||
.no_ubo_to_push = true,
|
||||
};
|
||||
@@ -1453,6 +1463,7 @@ panvk_meta_copy_img2buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_image *img,
|
||||
const VkBufferImageCopy2 *region)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_meta_copy_format_info key = {
|
||||
.imgfmt = panvk_meta_copy_img2buf_format(img->pimage.layout.format),
|
||||
.mask = panvk_meta_copy_img_mask(img->pimage.layout.format,
|
||||
@@ -1463,7 +1474,7 @@ panvk_meta_copy_img2buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
img->pimage.layout.dim, img->pimage.layout.array_size > 1);
|
||||
unsigned fmtidx = panvk_meta_copy_img2buf_format_idx(key);
|
||||
|
||||
mali_ptr rsd = cmdbuf->device->meta.copy.img2buf[texdimidx][fmtidx].rsd;
|
||||
mali_ptr rsd = dev->meta.copy.img2buf[texdimidx][fmtidx].rsd;
|
||||
|
||||
struct panvk_meta_copy_img2buf_info info = {
|
||||
.buf.ptr = panvk_buffer_gpu_ptr(buf, region->bufferOffset),
|
||||
@@ -1614,6 +1625,8 @@ static mali_ptr
|
||||
panvk_meta_copy_buf2buf_shader(struct panvk_device *dev, unsigned blksz,
|
||||
struct pan_shader_info *shader_info)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
|
||||
|
||||
/* FIXME: Won't work on compute queues, but we can't do that with
|
||||
@@ -1639,7 +1652,7 @@ panvk_meta_copy_buf2buf_shader(struct panvk_device *dev, unsigned blksz,
|
||||
(1 << ncomps) - 1);
|
||||
|
||||
struct panfrost_compile_inputs inputs = {
|
||||
.gpu_id = dev->physical_device->kmod.props.gpu_prod_id,
|
||||
.gpu_id = phys_dev->kmod.props.gpu_prod_id,
|
||||
.is_blit = true,
|
||||
.no_ubo_to_push = true,
|
||||
};
|
||||
@@ -1680,6 +1693,7 @@ panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_buffer *dst,
|
||||
const VkBufferCopy2 *region)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_meta_copy_buf2buf_info info = {
|
||||
.src = panvk_buffer_gpu_ptr(src, region->srcOffset),
|
||||
.dst = panvk_buffer_gpu_ptr(dst, region->dstOffset),
|
||||
@@ -1688,8 +1702,8 @@ panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
unsigned alignment = ffs((info.src | info.dst | region->size) & 15);
|
||||
unsigned log2blksz = alignment ? alignment - 1 : 4;
|
||||
|
||||
assert(log2blksz < ARRAY_SIZE(cmdbuf->device->meta.copy.buf2buf));
|
||||
mali_ptr rsd = cmdbuf->device->meta.copy.buf2buf[log2blksz].rsd;
|
||||
assert(log2blksz < ARRAY_SIZE(dev->meta.copy.buf2buf));
|
||||
mali_ptr rsd = dev->meta.copy.buf2buf[log2blksz].rsd;
|
||||
|
||||
mali_ptr pushconsts =
|
||||
pan_pool_upload_aligned(&cmdbuf->desc_pool.base, &info, sizeof(info), 16);
|
||||
@@ -1744,6 +1758,8 @@ static mali_ptr
|
||||
panvk_meta_fill_buf_shader(struct panvk_device *dev,
|
||||
struct pan_shader_info *shader_info)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
|
||||
|
||||
/* FIXME: Won't work on compute queues, but we can't do that with
|
||||
@@ -1764,7 +1780,7 @@ panvk_meta_fill_buf_shader(struct panvk_device *dev,
|
||||
nir_store_global(&b, ptr, sizeof(uint32_t), val, 1);
|
||||
|
||||
struct panfrost_compile_inputs inputs = {
|
||||
.gpu_id = dev->physical_device->kmod.props.gpu_prod_id,
|
||||
.gpu_id = phys_dev->kmod.props.gpu_prod_id,
|
||||
.is_blit = true,
|
||||
.no_ubo_to_push = true,
|
||||
};
|
||||
@@ -1816,6 +1832,7 @@ panvk_meta_fill_buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_buffer *dst, VkDeviceSize size,
|
||||
VkDeviceSize offset, uint32_t val)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_meta_fill_buf_info info = {
|
||||
.start = panvk_buffer_gpu_ptr(dst, offset),
|
||||
.val = val,
|
||||
@@ -1835,7 +1852,7 @@ panvk_meta_fill_buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
assert(!(offset & 3) && !(size & 3));
|
||||
|
||||
unsigned nwords = size / sizeof(uint32_t);
|
||||
mali_ptr rsd = cmdbuf->device->meta.copy.fillbuf.rsd;
|
||||
mali_ptr rsd = dev->meta.copy.fillbuf.rsd;
|
||||
|
||||
mali_ptr pushconsts =
|
||||
pan_pool_upload_aligned(&cmdbuf->desc_pool.base, &info, sizeof(info), 16);
|
||||
@@ -1876,6 +1893,7 @@ panvk_meta_update_buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_buffer *dst, VkDeviceSize offset,
|
||||
VkDeviceSize size, const void *data)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_meta_copy_buf2buf_info info = {
|
||||
.src = pan_pool_upload_aligned(&cmdbuf->desc_pool.base, data, size, 4),
|
||||
.dst = panvk_buffer_gpu_ptr(dst, offset),
|
||||
@@ -1883,7 +1901,7 @@ panvk_meta_update_buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
|
||||
unsigned log2blksz = ffs(sizeof(uint32_t)) - 1;
|
||||
|
||||
mali_ptr rsd = cmdbuf->device->meta.copy.buf2buf[log2blksz].rsd;
|
||||
mali_ptr rsd = dev->meta.copy.buf2buf[log2blksz].rsd;
|
||||
|
||||
mali_ptr pushconsts =
|
||||
pan_pool_upload_aligned(&cmdbuf->desc_pool.base, &info, sizeof(info), 16);
|
||||
|
||||
@@ -414,7 +414,9 @@ panvk_per_arch(blend_needs_lowering)(const struct panvk_device *dev,
|
||||
if (!pan_blend_is_homogenous_constant(constant_mask, state->constants))
|
||||
return true;
|
||||
|
||||
unsigned arch = pan_arch(dev->physical_device->kmod.props.gpu_prod_id);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
unsigned arch = pan_arch(phys_dev->kmod.props.gpu_prod_id);
|
||||
bool supports_2src = pan_blend_supports_2src(arch);
|
||||
return !pan_blend_can_fixed_function(state->rts[rt].equation, supports_2src);
|
||||
}
|
||||
|
||||
@@ -218,6 +218,10 @@ panvk_per_arch(shader_create)(struct panvk_device *dev, gl_shader_stage stage,
|
||||
const VkAllocationCallbacks *alloc)
|
||||
{
|
||||
VK_FROM_HANDLE(vk_shader_module, module, stage_info->module);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(dev->vk.physical->instance);
|
||||
struct panvk_shader *shader;
|
||||
|
||||
shader = vk_zalloc2(&dev->vk.alloc, alloc, sizeof(*shader), 8,
|
||||
@@ -253,7 +257,7 @@ panvk_per_arch(shader_create)(struct panvk_device *dev, gl_shader_stage stage,
|
||||
true, true);
|
||||
|
||||
struct panfrost_compile_inputs inputs = {
|
||||
.gpu_id = dev->physical_device->kmod.props.gpu_prod_id,
|
||||
.gpu_id = phys_dev->kmod.props.gpu_prod_id,
|
||||
.no_ubo_to_push = true,
|
||||
.no_idvs = true, /* TODO */
|
||||
};
|
||||
@@ -337,8 +341,7 @@ panvk_per_arch(shader_create)(struct panvk_device *dev, gl_shader_stage stage,
|
||||
NIR_PASS_V(nir, nir_lower_global_vars_to_local);
|
||||
|
||||
nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));
|
||||
if (unlikely(dev->physical_device->instance->debug_flags &
|
||||
PANVK_DEBUG_NIR)) {
|
||||
if (unlikely(instance->debug_flags & PANVK_DEBUG_NIR)) {
|
||||
fprintf(stderr, "translated nir:\n");
|
||||
nir_print_shader(nir, stderr);
|
||||
}
|
||||
|
||||
@@ -34,19 +34,23 @@ static VKAPI_PTR PFN_vkVoidFunction
|
||||
panvk_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char *pName)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_physical_device, pdevice, physicalDevice);
|
||||
return vk_instance_get_proc_addr_unchecked(&pdevice->instance->vk, pName);
|
||||
struct panvk_instance *instance = to_panvk_instance(pdevice->vk.instance);
|
||||
|
||||
return vk_instance_get_proc_addr_unchecked(&instance->vk, pName);
|
||||
}
|
||||
|
||||
VkResult
|
||||
panvk_wsi_init(struct panvk_physical_device *physical_device)
|
||||
{
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(physical_device->vk.instance);
|
||||
VkResult result;
|
||||
|
||||
result = wsi_device_init(
|
||||
&physical_device->wsi_device,
|
||||
panvk_physical_device_to_handle(physical_device), panvk_wsi_proc_addr,
|
||||
&physical_device->instance->vk.alloc, physical_device->master_fd, NULL,
|
||||
&(struct wsi_device_options){.sw_device = false});
|
||||
result = wsi_device_init(&physical_device->wsi_device,
|
||||
panvk_physical_device_to_handle(physical_device),
|
||||
panvk_wsi_proc_addr, &instance->vk.alloc,
|
||||
physical_device->master_fd, NULL,
|
||||
&(struct wsi_device_options){.sw_device = false});
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
@@ -60,7 +64,9 @@ panvk_wsi_init(struct panvk_physical_device *physical_device)
|
||||
void
|
||||
panvk_wsi_finish(struct panvk_physical_device *physical_device)
|
||||
{
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(physical_device->vk.instance);
|
||||
|
||||
physical_device->vk.wsi_device = NULL;
|
||||
wsi_device_finish(&physical_device->wsi_device,
|
||||
&physical_device->instance->vk.alloc);
|
||||
wsi_device_finish(&physical_device->wsi_device, &instance->vk.alloc);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user