panvk: Use vk_shader_module

Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15305>
This commit is contained in:
Jason Ekstrand 2022-03-09 12:05:39 -06:00 committed by Marge Bot
parent 0b4a80b4c4
commit 0c871d89ae
3 changed files with 5 additions and 61 deletions

View File

@ -742,14 +742,6 @@ struct panvk_event {
uint32_t syncobj;
};
struct panvk_shader_module {
struct vk_object_base base;
unsigned char sha1[20];
uint32_t code_size;
const uint32_t *code[0];
};
struct panvk_shader {
struct pan_shader_info info;
struct util_dynarray binary;
@ -1069,7 +1061,6 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline, base, VkPipeline, VK_OBJECT_TYPE_
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline_layout, base, VkPipelineLayout, VK_OBJECT_TYPE_PIPELINE_LAYOUT)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_render_pass, base, VkRenderPass, VK_OBJECT_TYPE_RENDER_PASS)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_sampler, base, VkSampler, VK_OBJECT_TYPE_SAMPLER)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_shader_module, base, VkShaderModule, VK_OBJECT_TYPE_SHADER_MODULE)
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_semaphore, base, VkSemaphore, VK_OBJECT_TYPE_SEMAPHORE)
#define panvk_arch_name(name, version) panvk_## version ## _ ## name

View File

@ -26,11 +26,6 @@
#include "panvk_private.h"
#include "nir_builder.h"
#include "nir_lower_blend.h"
#include "spirv/nir_spirv.h"
#include "util/mesa-sha1.h"
#include "pan_shader.h"
#include "vk_util.h"
@ -43,46 +38,3 @@ panvk_shader_destroy(struct panvk_device *dev,
util_dynarray_fini(&shader->binary);
vk_free2(&dev->vk.alloc, alloc, shader);
}
VkResult
panvk_CreateShaderModule(VkDevice _device,
const VkShaderModuleCreateInfo *pCreateInfo,
const VkAllocationCallbacks *pAllocator,
VkShaderModule *pShaderModule)
{
VK_FROM_HANDLE(panvk_device, device, _device);
struct panvk_shader_module *module;
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO);
assert(pCreateInfo->flags == 0);
assert(pCreateInfo->codeSize % 4 == 0);
module = vk_object_zalloc(&device->vk, pAllocator,
sizeof(*module) + pCreateInfo->codeSize,
VK_OBJECT_TYPE_SHADER_MODULE);
if (module == NULL)
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
module->code_size = pCreateInfo->codeSize;
memcpy(module->code, pCreateInfo->pCode, pCreateInfo->codeSize);
_mesa_sha1_compute(module->code, module->code_size, module->sha1);
*pShaderModule = panvk_shader_module_to_handle(module);
return VK_SUCCESS;
}
void
panvk_DestroyShaderModule(VkDevice _device,
VkShaderModule _module,
const VkAllocationCallbacks *pAllocator)
{
VK_FROM_HANDLE(panvk_device, device, _device);
VK_FROM_HANDLE(panvk_shader_module, module, _module);
if (!module)
return;
vk_object_free(&device->vk, pAllocator, module);
}

View File

@ -34,6 +34,7 @@
#include "nir_conversion_builder.h"
#include "spirv/nir_spirv.h"
#include "util/mesa-sha1.h"
#include "vk_shader_module.h"
#include "pan_shader.h"
#include "util/pan_lower_framebuffer.h"
@ -541,7 +542,7 @@ panvk_per_arch(shader_create)(struct panvk_device *dev,
bool static_blend_constants,
const VkAllocationCallbacks *alloc)
{
const struct panvk_shader_module *module = panvk_shader_module_from_handle(stage_info->module);
VK_FROM_HANDLE(vk_shader_module, module, stage_info->module);
struct panfrost_device *pdev = &dev->physical_device->pdev;
struct panvk_shader *shader;
@ -553,9 +554,9 @@ panvk_per_arch(shader_create)(struct panvk_device *dev,
util_dynarray_init(&shader->binary, NULL);
/* translate SPIR-V to NIR */
assert(module->code_size % 4 == 0);
nir_shader *nir = panvk_spirv_to_nir(module->code,
module->code_size,
assert(module->size % 4 == 0);
nir_shader *nir = panvk_spirv_to_nir(module->data,
module->size,
stage, stage_info->pName,
stage_info->pSpecializationInfo,
GENX(pan_shader_get_compiler_options)());