mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
panvk: Move the VkSampler logic to its own file
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com> Reviewed-by: Rebecca Mckeever <rebecca.mckeever@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28170>
This commit is contained in:
parent
5a817bd62b
commit
6b511f7564
11 changed files with 139 additions and 123 deletions
|
|
@ -72,6 +72,7 @@ foreach arch : ['6', '7']
|
|||
'panvk_vX_meta_clear.c',
|
||||
'panvk_vX_nir_lower_descriptors.c',
|
||||
'panvk_vX_pipeline.c',
|
||||
'panvk_vX_sampler.c',
|
||||
'panvk_vX_shader.c',
|
||||
],
|
||||
include_directories : [
|
||||
|
|
|
|||
|
|
@ -71,18 +71,6 @@ panvk_per_arch(translate_compare_func)(VkCompareOp comp)
|
|||
|
||||
return (enum mali_func)comp;
|
||||
}
|
||||
|
||||
static inline enum mali_func
|
||||
panvk_per_arch(translate_sampler_compare_func)(
|
||||
const VkSamplerCreateInfo *pCreateInfo)
|
||||
{
|
||||
if (!pCreateInfo->compareEnable)
|
||||
return MALI_FUNC_NEVER;
|
||||
|
||||
enum mali_func f =
|
||||
panvk_per_arch(translate_compare_func)(pCreateInfo->compareOp);
|
||||
return panfrost_flip_compare_func(f);
|
||||
}
|
||||
#endif
|
||||
|
||||
void panvk_sysval_upload_viewport_scale(const VkViewport *viewport,
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#include "panvk_private.h"
|
||||
#include "panvk_sampler.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
|
|
|
|||
|
|
@ -1425,19 +1425,6 @@ panvk_ResetEvent(VkDevice _device, VkEvent _event)
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
panvk_DestroySampler(VkDevice _device, VkSampler _sampler,
|
||||
const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
VK_FROM_HANDLE(panvk_sampler, sampler, _sampler);
|
||||
|
||||
if (!sampler)
|
||||
return;
|
||||
|
||||
vk_sampler_destroy(&device->vk, pAllocator, &sampler->vk);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
panvk_GetPhysicalDeviceExternalSemaphoreProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
|
|
|
|||
|
|
@ -899,13 +899,6 @@ struct panvk_image_view {
|
|||
} descs;
|
||||
};
|
||||
|
||||
#define SAMPLER_DESC_WORDS 8
|
||||
|
||||
struct panvk_sampler {
|
||||
struct vk_sampler vk;
|
||||
uint32_t desc[SAMPLER_DESC_WORDS];
|
||||
};
|
||||
|
||||
VK_DEFINE_HANDLE_CASTS(panvk_cmd_buffer, vk.base, VkCommandBuffer,
|
||||
VK_OBJECT_TYPE_COMMAND_BUFFER)
|
||||
VK_DEFINE_HANDLE_CASTS(panvk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE)
|
||||
|
|
@ -931,8 +924,6 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline, base, VkPipeline,
|
|||
VK_OBJECT_TYPE_PIPELINE)
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline_layout, vk.base, VkPipelineLayout,
|
||||
VK_OBJECT_TYPE_PIPELINE_LAYOUT)
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_sampler, vk.base, VkSampler,
|
||||
VK_OBJECT_TYPE_SAMPLER)
|
||||
|
||||
#ifdef PAN_ARCH
|
||||
#include "panvk_vX_cmd_buffer.h"
|
||||
|
|
|
|||
23
src/panfrost/vulkan/panvk_sampler.h
Normal file
23
src/panfrost/vulkan/panvk_sampler.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright © 2021 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef PANVK_SAMPLER_H
|
||||
#define PANVK_SAMPLER_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "vk_sampler.h"
|
||||
|
||||
#define SAMPLER_DESC_WORDS 8
|
||||
|
||||
struct panvk_sampler {
|
||||
struct vk_sampler vk;
|
||||
uint32_t desc[SAMPLER_DESC_WORDS];
|
||||
};
|
||||
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_sampler, vk.base, VkSampler,
|
||||
VK_OBJECT_TYPE_SAMPLER)
|
||||
|
||||
#endif
|
||||
|
|
@ -41,38 +41,6 @@
|
|||
|
||||
#include "vk_sampler.h"
|
||||
|
||||
static enum mali_mipmap_mode
|
||||
panvk_translate_sampler_mipmap_mode(VkSamplerMipmapMode mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case VK_SAMPLER_MIPMAP_MODE_NEAREST:
|
||||
return MALI_MIPMAP_MODE_NEAREST;
|
||||
case VK_SAMPLER_MIPMAP_MODE_LINEAR:
|
||||
return MALI_MIPMAP_MODE_TRILINEAR;
|
||||
default:
|
||||
unreachable("Invalid mipmap mode");
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned
|
||||
panvk_translate_sampler_address_mode(VkSamplerAddressMode mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case VK_SAMPLER_ADDRESS_MODE_REPEAT:
|
||||
return MALI_WRAP_MODE_REPEAT;
|
||||
case VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT:
|
||||
return MALI_WRAP_MODE_MIRRORED_REPEAT;
|
||||
case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE:
|
||||
return MALI_WRAP_MODE_CLAMP_TO_EDGE;
|
||||
case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER:
|
||||
return MALI_WRAP_MODE_CLAMP_TO_BORDER;
|
||||
case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE:
|
||||
return MALI_WRAP_MODE_MIRRORED_CLAMP_TO_EDGE;
|
||||
default:
|
||||
unreachable("Invalid wrap");
|
||||
}
|
||||
}
|
||||
|
||||
static mali_pixel_format
|
||||
panvk_varying_hw_format(const struct panvk_device *dev,
|
||||
const struct panvk_varyings_info *varyings,
|
||||
|
|
@ -245,37 +213,6 @@ panvk_per_arch(emit_attrib_bufs)(const struct panvk_attribs_info *info,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
panvk_per_arch(emit_sampler)(const VkSamplerCreateInfo *pCreateInfo, void *desc)
|
||||
{
|
||||
VkClearColorValue border_color =
|
||||
vk_sampler_border_color_value(pCreateInfo, NULL);
|
||||
|
||||
pan_pack(desc, SAMPLER, cfg) {
|
||||
cfg.magnify_nearest = pCreateInfo->magFilter == VK_FILTER_NEAREST;
|
||||
cfg.minify_nearest = pCreateInfo->minFilter == VK_FILTER_NEAREST;
|
||||
cfg.mipmap_mode =
|
||||
panvk_translate_sampler_mipmap_mode(pCreateInfo->mipmapMode);
|
||||
cfg.normalized_coordinates = !pCreateInfo->unnormalizedCoordinates;
|
||||
|
||||
cfg.lod_bias = pCreateInfo->mipLodBias;
|
||||
cfg.minimum_lod = pCreateInfo->minLod;
|
||||
cfg.maximum_lod = pCreateInfo->maxLod;
|
||||
cfg.wrap_mode_s =
|
||||
panvk_translate_sampler_address_mode(pCreateInfo->addressModeU);
|
||||
cfg.wrap_mode_t =
|
||||
panvk_translate_sampler_address_mode(pCreateInfo->addressModeV);
|
||||
cfg.wrap_mode_r =
|
||||
panvk_translate_sampler_address_mode(pCreateInfo->addressModeW);
|
||||
cfg.compare_function =
|
||||
panvk_per_arch(translate_sampler_compare_func)(pCreateInfo);
|
||||
cfg.border_color_r = border_color.uint32[0];
|
||||
cfg.border_color_g = border_color.uint32[1];
|
||||
cfg.border_color_b = border_color.uint32[2];
|
||||
cfg.border_color_a = border_color.uint32[3];
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
panvk_emit_attrib(const struct panvk_device *dev,
|
||||
const struct panvk_draw_info *draw,
|
||||
|
|
|
|||
|
|
@ -63,9 +63,6 @@ void panvk_per_arch(emit_ubos)(const struct panvk_pipeline *pipeline,
|
|||
const struct panvk_descriptor_state *state,
|
||||
void *descs);
|
||||
|
||||
void panvk_per_arch(emit_sampler)(const VkSamplerCreateInfo *pCreateInfo,
|
||||
void *desc);
|
||||
|
||||
void panvk_per_arch(emit_vertex_job)(const struct panvk_pipeline *pipeline,
|
||||
const struct panvk_draw_info *draw,
|
||||
void *job);
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@
|
|||
|
||||
#include "panvk_buffer.h"
|
||||
#include "panvk_cs.h"
|
||||
#include "panvk_sampler.h"
|
||||
|
||||
#define PANVK_DESCRIPTOR_ALIGN 8
|
||||
|
||||
|
|
|
|||
|
|
@ -300,26 +300,3 @@ panvk_per_arch(queue_submit)(struct vk_queue *vk_queue,
|
|||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
panvk_per_arch(CreateSampler)(VkDevice _device,
|
||||
const VkSamplerCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkSampler *pSampler)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
struct panvk_sampler *sampler;
|
||||
|
||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO);
|
||||
|
||||
sampler =
|
||||
vk_sampler_create(&device->vk, pCreateInfo, pAllocator, sizeof(*sampler));
|
||||
if (!sampler)
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
STATIC_ASSERT(sizeof(sampler->desc) >= pan_size(SAMPLER));
|
||||
panvk_per_arch(emit_sampler)(pCreateInfo, &sampler->desc);
|
||||
*pSampler = panvk_sampler_to_handle(sampler);
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
113
src/panfrost/vulkan/panvk_vX_sampler.c
Normal file
113
src/panfrost/vulkan/panvk_vX_sampler.c
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* Copyright © 2021 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "genxml/gen_macros.h"
|
||||
|
||||
#include "panvk_private.h"
|
||||
#include "panvk_sampler.h"
|
||||
|
||||
#include "pan_encoder.h"
|
||||
|
||||
static enum mali_mipmap_mode
|
||||
panvk_translate_sampler_mipmap_mode(VkSamplerMipmapMode mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case VK_SAMPLER_MIPMAP_MODE_NEAREST:
|
||||
return MALI_MIPMAP_MODE_NEAREST;
|
||||
case VK_SAMPLER_MIPMAP_MODE_LINEAR:
|
||||
return MALI_MIPMAP_MODE_TRILINEAR;
|
||||
default:
|
||||
unreachable("Invalid mipmap mode");
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned
|
||||
panvk_translate_sampler_address_mode(VkSamplerAddressMode mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case VK_SAMPLER_ADDRESS_MODE_REPEAT:
|
||||
return MALI_WRAP_MODE_REPEAT;
|
||||
case VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT:
|
||||
return MALI_WRAP_MODE_MIRRORED_REPEAT;
|
||||
case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE:
|
||||
return MALI_WRAP_MODE_CLAMP_TO_EDGE;
|
||||
case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER:
|
||||
return MALI_WRAP_MODE_CLAMP_TO_BORDER;
|
||||
case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE:
|
||||
return MALI_WRAP_MODE_MIRRORED_CLAMP_TO_EDGE;
|
||||
default:
|
||||
unreachable("Invalid wrap");
|
||||
}
|
||||
}
|
||||
|
||||
static enum mali_func
|
||||
panvk_translate_sampler_compare_func(const VkSamplerCreateInfo *pCreateInfo)
|
||||
{
|
||||
if (!pCreateInfo->compareEnable)
|
||||
return MALI_FUNC_NEVER;
|
||||
|
||||
return panfrost_flip_compare_func((enum mali_func)pCreateInfo->compareOp);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
panvk_per_arch(CreateSampler)(VkDevice _device,
|
||||
const VkSamplerCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkSampler *pSampler)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
struct panvk_sampler *sampler;
|
||||
|
||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO);
|
||||
|
||||
sampler =
|
||||
vk_sampler_create(&device->vk, pCreateInfo, pAllocator, sizeof(*sampler));
|
||||
if (!sampler)
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
STATIC_ASSERT(sizeof(sampler->desc) >= pan_size(SAMPLER));
|
||||
|
||||
VkClearColorValue border_color =
|
||||
vk_sampler_border_color_value(pCreateInfo, NULL);
|
||||
|
||||
pan_pack(sampler->desc, SAMPLER, cfg) {
|
||||
cfg.magnify_nearest = pCreateInfo->magFilter == VK_FILTER_NEAREST;
|
||||
cfg.minify_nearest = pCreateInfo->minFilter == VK_FILTER_NEAREST;
|
||||
cfg.mipmap_mode =
|
||||
panvk_translate_sampler_mipmap_mode(pCreateInfo->mipmapMode);
|
||||
cfg.normalized_coordinates = !pCreateInfo->unnormalizedCoordinates;
|
||||
|
||||
cfg.lod_bias = pCreateInfo->mipLodBias;
|
||||
cfg.minimum_lod = pCreateInfo->minLod;
|
||||
cfg.maximum_lod = pCreateInfo->maxLod;
|
||||
cfg.wrap_mode_s =
|
||||
panvk_translate_sampler_address_mode(pCreateInfo->addressModeU);
|
||||
cfg.wrap_mode_t =
|
||||
panvk_translate_sampler_address_mode(pCreateInfo->addressModeV);
|
||||
cfg.wrap_mode_r =
|
||||
panvk_translate_sampler_address_mode(pCreateInfo->addressModeW);
|
||||
cfg.compare_function = panvk_translate_sampler_compare_func(pCreateInfo);
|
||||
cfg.border_color_r = border_color.uint32[0];
|
||||
cfg.border_color_g = border_color.uint32[1];
|
||||
cfg.border_color_b = border_color.uint32[2];
|
||||
cfg.border_color_a = border_color.uint32[3];
|
||||
}
|
||||
|
||||
*pSampler = panvk_sampler_to_handle(sampler);
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
panvk_per_arch(DestroySampler)(VkDevice _device, VkSampler _sampler,
|
||||
const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
VK_FROM_HANDLE(panvk_sampler, sampler, _sampler);
|
||||
|
||||
if (!sampler)
|
||||
return;
|
||||
|
||||
vk_sampler_destroy(&device->vk, pAllocator, &sampler->vk);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue