mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-30 00:58:14 +02:00
As part of this, we get rid of the v3dv_xxx_descriptor structs to v3dv_descriptor. The main reason is that in order to support several versions, we would need to define them several times. Also, they were somewhat an overkill even before, as their main advantage was getting the offset for each data on the combined case. That functionality is replaced with some new helpers. Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11310>
98 lines
3.3 KiB
C
98 lines
3.3 KiB
C
/*
|
|
* Copyright © 2021 Raspberry Pi
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#include "v3dv_private.h"
|
|
#include "broadcom/common/v3d_macros.h"
|
|
#include "broadcom/cle/v3dx_pack.h"
|
|
#include "broadcom/compiler/v3d_compiler.h"
|
|
|
|
/*
|
|
* Returns how much space a given descriptor type needs on a bo (GPU
|
|
* memory).
|
|
*/
|
|
uint32_t
|
|
v3dX(descriptor_bo_size)(VkDescriptorType type)
|
|
{
|
|
switch(type) {
|
|
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
|
return cl_aligned_packet_length(SAMPLER_STATE, 32);
|
|
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
|
return cl_aligned_packet_length(SAMPLER_STATE, 32) +
|
|
cl_aligned_packet_length(TEXTURE_SHADER_STATE, 32);
|
|
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
|
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
|
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
|
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
|
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
|
return cl_aligned_packet_length(TEXTURE_SHADER_STATE, 32);
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* To compute the max_bo_size we want to iterate through the descriptor
|
|
* types. Unfourtunately we can't just use the descriptor type enum values, as
|
|
* the values are not defined consecutively (so extensions could add new
|
|
* descriptor types), and VK_DESCRIPTOR_TYPE_MAX_ENUM is also a really big
|
|
* number.
|
|
*/
|
|
static const uint32_t supported_descriptor_types[] = {
|
|
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
|
|
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
|
|
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
|
|
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
|
|
VK_DESCRIPTOR_TYPE_SAMPLER,
|
|
VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
|
|
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
|
VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
|
|
VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
|
VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
|
|
VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
|
|
};
|
|
|
|
uint32_t
|
|
v3dX(max_descriptor_bo_size)(void)
|
|
{
|
|
static uint32_t max = 0;
|
|
|
|
if (max == 0) {
|
|
for (uint32_t i = 0; i < ARRAY_SIZE(supported_descriptor_types); i++)
|
|
max = MAX2(max, v3dX(descriptor_bo_size)(supported_descriptor_types[i]));
|
|
}
|
|
assert(max != 0);
|
|
|
|
return max;
|
|
}
|
|
|
|
|
|
uint32_t
|
|
v3dX(combined_image_sampler_texture_state_offset)(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
uint32_t
|
|
v3dX(combined_image_sampler_sampler_state_offset)(void)
|
|
{
|
|
return cl_aligned_packet_length(TEXTURE_SHADER_STATE, 32);
|
|
}
|