mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-30 21:21:39 +02:00
radv: Make fs key exemplars ordered to be a reverse fs_key lookup.
While at it, share the exemplars and account for a non-occurring fs key. Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
0be5e9f5a1
commit
806a792b43
7 changed files with 39 additions and 88 deletions
|
|
@ -714,21 +714,6 @@ radv_device_finish_meta_blit_state(struct radv_device *device)
|
|||
state->blit.ds_layout, &state->alloc);
|
||||
}
|
||||
|
||||
static VkFormat pipeline_formats[] = {
|
||||
VK_FORMAT_R8G8B8A8_UNORM,
|
||||
VK_FORMAT_R8G8B8A8_UINT,
|
||||
VK_FORMAT_R8G8B8A8_SINT,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32,
|
||||
VK_FORMAT_R16G16B16A16_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_SNORM,
|
||||
VK_FORMAT_R16G16B16A16_UINT,
|
||||
VK_FORMAT_R16G16B16A16_SINT,
|
||||
VK_FORMAT_R32_SFLOAT,
|
||||
VK_FORMAT_R32G32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT
|
||||
};
|
||||
|
||||
static VkResult
|
||||
radv_device_init_meta_blit_color(struct radv_device *device,
|
||||
struct radv_shader_module *vs)
|
||||
|
|
@ -740,8 +725,8 @@ radv_device_init_meta_blit_color(struct radv_device *device,
|
|||
fs_2d.nir = build_nir_copy_fragment_shader(GLSL_SAMPLER_DIM_2D);
|
||||
fs_3d.nir = build_nir_copy_fragment_shader(GLSL_SAMPLER_DIM_3D);
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(pipeline_formats); ++i) {
|
||||
unsigned key = radv_format_meta_fs_key(pipeline_formats[i]);
|
||||
for (unsigned i = 0; i < NUM_META_FS_KEYS; ++i) {
|
||||
unsigned key = radv_format_meta_fs_key(radv_fs_key_format_exemplars[i]);
|
||||
for(unsigned j = 0; j < RADV_META_DST_LAYOUT_COUNT; ++j) {
|
||||
VkImageLayout layout = radv_meta_dst_layout_to_layout(j);
|
||||
result = radv_CreateRenderPass(radv_device_to_handle(device),
|
||||
|
|
@ -749,7 +734,7 @@ radv_device_init_meta_blit_color(struct radv_device *device,
|
|||
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
|
||||
.attachmentCount = 1,
|
||||
.pAttachments = &(VkAttachmentDescription) {
|
||||
.format = pipeline_formats[i],
|
||||
.format = radv_fs_key_format_exemplars[i],
|
||||
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||
.initialLayout = layout,
|
||||
|
|
|
|||
|
|
@ -1239,21 +1239,6 @@ blit2d_init_stencil_only_pipeline(struct radv_device *device,
|
|||
return result;
|
||||
}
|
||||
|
||||
static VkFormat pipeline_formats[] = {
|
||||
VK_FORMAT_R8G8B8A8_UNORM,
|
||||
VK_FORMAT_R8G8B8A8_UINT,
|
||||
VK_FORMAT_R8G8B8A8_SINT,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32,
|
||||
VK_FORMAT_R16G16B16A16_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_SNORM,
|
||||
VK_FORMAT_R16G16B16A16_UINT,
|
||||
VK_FORMAT_R16G16B16A16_SINT,
|
||||
VK_FORMAT_R32_SFLOAT,
|
||||
VK_FORMAT_R32G32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT
|
||||
};
|
||||
|
||||
static VkResult
|
||||
meta_blit2d_create_pipe_layout(struct radv_device *device,
|
||||
int idx,
|
||||
|
|
@ -1320,8 +1305,8 @@ radv_device_init_meta_blit2d_state(struct radv_device *device)
|
|||
if (result != VK_SUCCESS)
|
||||
goto fail;
|
||||
|
||||
for (unsigned j = 0; j < ARRAY_SIZE(pipeline_formats); ++j) {
|
||||
result = blit2d_init_color_pipeline(device, src, pipeline_formats[j], log2_samples);
|
||||
for (unsigned j = 0; j < NUM_META_FS_KEYS; ++j) {
|
||||
result = blit2d_init_color_pipeline(device, src, radv_fs_key_format_exemplars[j], log2_samples);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -757,21 +757,6 @@ fail:
|
|||
return false;
|
||||
}
|
||||
|
||||
static VkFormat pipeline_formats[] = {
|
||||
VK_FORMAT_R8G8B8A8_UNORM,
|
||||
VK_FORMAT_R8G8B8A8_UINT,
|
||||
VK_FORMAT_R8G8B8A8_SINT,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32,
|
||||
VK_FORMAT_R16G16B16A16_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_SNORM,
|
||||
VK_FORMAT_R16G16B16A16_UINT,
|
||||
VK_FORMAT_R16G16B16A16_SINT,
|
||||
VK_FORMAT_R32_SFLOAT,
|
||||
VK_FORMAT_R32G32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT
|
||||
};
|
||||
|
||||
VkResult
|
||||
radv_device_init_meta_clear_state(struct radv_device *device)
|
||||
{
|
||||
|
|
@ -808,8 +793,8 @@ radv_device_init_meta_clear_state(struct radv_device *device)
|
|||
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(state->clear); ++i) {
|
||||
uint32_t samples = 1 << i;
|
||||
for (uint32_t j = 0; j < ARRAY_SIZE(pipeline_formats); ++j) {
|
||||
VkFormat format = pipeline_formats[j];
|
||||
for (uint32_t j = 0; j < NUM_META_FS_KEYS; ++j) {
|
||||
VkFormat format = radv_fs_key_format_exemplars[j];
|
||||
unsigned fs_key = radv_format_meta_fs_key(format);
|
||||
assert(!state->clear[i].color_pipelines[fs_key]);
|
||||
|
||||
|
|
|
|||
|
|
@ -251,21 +251,6 @@ radv_device_finish_meta_resolve_state(struct radv_device *device)
|
|||
|
||||
}
|
||||
|
||||
static VkFormat pipeline_formats[] = {
|
||||
VK_FORMAT_R8G8B8A8_UNORM,
|
||||
VK_FORMAT_R8G8B8A8_UINT,
|
||||
VK_FORMAT_R8G8B8A8_SINT,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32,
|
||||
VK_FORMAT_R16G16B16A16_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_SNORM,
|
||||
VK_FORMAT_R16G16B16A16_UINT,
|
||||
VK_FORMAT_R16G16B16A16_SINT,
|
||||
VK_FORMAT_R32_SFLOAT,
|
||||
VK_FORMAT_R32G32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT
|
||||
};
|
||||
|
||||
VkResult
|
||||
radv_device_init_meta_resolve_state(struct radv_device *device)
|
||||
{
|
||||
|
|
@ -278,8 +263,8 @@ radv_device_init_meta_resolve_state(struct radv_device *device)
|
|||
goto fail;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(pipeline_formats); ++i) {
|
||||
VkFormat format = pipeline_formats[i];
|
||||
for (uint32_t i = 0; i < NUM_META_FS_KEYS; ++i) {
|
||||
VkFormat format = radv_fs_key_format_exemplars[i];
|
||||
unsigned fs_key = radv_format_meta_fs_key(format);
|
||||
res = create_pass(device, format, &state->resolve.pass[fs_key]);
|
||||
if (res != VK_SUCCESS)
|
||||
|
|
|
|||
|
|
@ -156,21 +156,6 @@ static const VkPipelineVertexInputStateCreateInfo normal_vi_create_info = {
|
|||
.vertexAttributeDescriptionCount = 0,
|
||||
};
|
||||
|
||||
static VkFormat pipeline_formats[] = {
|
||||
VK_FORMAT_R8G8B8A8_UNORM,
|
||||
VK_FORMAT_R8G8B8A8_UINT,
|
||||
VK_FORMAT_R8G8B8A8_SINT,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32,
|
||||
VK_FORMAT_R16G16B16A16_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_SNORM,
|
||||
VK_FORMAT_R16G16B16A16_UINT,
|
||||
VK_FORMAT_R16G16B16A16_SINT,
|
||||
VK_FORMAT_R32_SFLOAT,
|
||||
VK_FORMAT_R32G32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT
|
||||
};
|
||||
|
||||
static VkResult
|
||||
create_resolve_pipeline(struct radv_device *device,
|
||||
int samples_log2,
|
||||
|
|
@ -335,8 +320,8 @@ radv_device_init_meta_resolve_fragment_state(struct radv_device *device)
|
|||
goto fail;
|
||||
|
||||
for (uint32_t i = 0; i < MAX_SAMPLES_LOG2; ++i) {
|
||||
for (unsigned j = 0; j < ARRAY_SIZE(pipeline_formats); ++j) {
|
||||
res = create_resolve_pipeline(device, i, pipeline_formats[j]);
|
||||
for (unsigned j = 0; j < NUM_META_FS_KEYS; ++j) {
|
||||
res = create_resolve_pipeline(device, i, radv_fs_key_format_exemplars[j]);
|
||||
if (res != VK_SUCCESS)
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -565,9 +565,34 @@ format_is_int10(VkFormat format)
|
|||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Ordered so that for each i,
|
||||
* radv_format_meta_fs_key(radv_fs_key_format_exemplars[i]) == i.
|
||||
*/
|
||||
const VkFormat radv_fs_key_format_exemplars[NUM_META_FS_KEYS] = {
|
||||
VK_FORMAT_R32_SFLOAT,
|
||||
VK_FORMAT_R32G32_SFLOAT,
|
||||
VK_FORMAT_R8G8B8A8_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_SNORM,
|
||||
VK_FORMAT_R16G16B16A16_UINT,
|
||||
VK_FORMAT_R16G16B16A16_SINT,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT,
|
||||
VK_FORMAT_R8G8B8A8_UINT,
|
||||
VK_FORMAT_R8G8B8A8_SINT,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32,
|
||||
};
|
||||
|
||||
unsigned radv_format_meta_fs_key(VkFormat format)
|
||||
{
|
||||
unsigned col_format = si_choose_spi_color_format(format, false, false) - 1;
|
||||
unsigned col_format = si_choose_spi_color_format(format, false, false);
|
||||
|
||||
assert(col_format != V_028714_SPI_SHADER_32_AR);
|
||||
if (col_format >= V_028714_SPI_SHADER_32_AR)
|
||||
--col_format; /* Skip V_028714_SPI_SHADER_32_AR since there is no such VkFormat */
|
||||
|
||||
--col_format; /* Skip V_028714_SPI_SHADER_ZERO */
|
||||
bool is_int8 = format_is_int8(format);
|
||||
bool is_int10 = format_is_int10(format);
|
||||
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ typedef uint32_t xcb_window_t;
|
|||
#define MAX_DYNAMIC_STORAGE_BUFFERS 8
|
||||
#define MAX_DYNAMIC_BUFFERS (MAX_DYNAMIC_UNIFORM_BUFFERS + MAX_DYNAMIC_STORAGE_BUFFERS)
|
||||
#define MAX_SAMPLES_LOG2 4
|
||||
#define NUM_META_FS_KEYS 13
|
||||
#define NUM_META_FS_KEYS 12
|
||||
#define RADV_MAX_DRM_DEVICES 8
|
||||
#define MAX_VIEWS 8
|
||||
|
||||
|
|
@ -1242,6 +1242,7 @@ mesa_to_vk_shader_stage(gl_shader_stage mesa_stage)
|
|||
stage = __builtin_ffs(__tmp) - 1, __tmp; \
|
||||
__tmp &= ~(1 << (stage)))
|
||||
|
||||
extern const VkFormat radv_fs_key_format_exemplars[NUM_META_FS_KEYS];
|
||||
unsigned radv_format_meta_fs_key(VkFormat format);
|
||||
|
||||
struct radv_multisample_state {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue