diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c index 0028e7ee055..5b99ee54a8d 100644 --- a/src/amd/common/ac_gpu_info.c +++ b/src/amd/common/ac_gpu_info.c @@ -1223,6 +1223,9 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info, info->has_dcc_constant_encode = info->family == CHIP_RAVEN2 || info->family == CHIP_RENOIR || info->gfx_level >= GFX10; + info->has_etc_support = info->family == CHIP_STONEY || info->family == CHIP_VEGA10 || + info->family == CHIP_RAVEN || info->family == CHIP_RAVEN2; + info->has_rbplus = info->family == CHIP_STONEY || info->gfx_level >= GFX9; /* Some chips have RB+ registers, but don't support RB+. Those must diff --git a/src/amd/common/ac_gpu_info.h b/src/amd/common/ac_gpu_info.h index c15ac02ae5c..954b7a3a2ae 100644 --- a/src/amd/common/ac_gpu_info.h +++ b/src/amd/common/ac_gpu_info.h @@ -85,6 +85,7 @@ struct radeon_info { bool has_clear_state; bool has_distributed_tess; bool has_dcc_constant_encode; + bool has_etc_support; bool has_rbplus; /* if RB+ registers exist */ bool rbplus_allowed; /* if RB+ is allowed */ bool has_load_ctx_reg_pkt; diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index 64a3c03b870..db2e2c3984b 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -578,7 +578,7 @@ radv_physical_device_get_format_properties(struct radv_physical_device *pdev, Vk return; } - if ((desc->layout == UTIL_FORMAT_LAYOUT_ETC && !radv_device_supports_etc(pdev)) || + if ((desc->layout == UTIL_FORMAT_LAYOUT_ETC && !pdev->info.has_etc_support) || desc->layout == UTIL_FORMAT_LAYOUT_ASTC) { if (radv_is_format_emulated(pdev, format)) { /* required features for compressed formats */ diff --git a/src/amd/vulkan/radv_physical_device.c b/src/amd/vulkan/radv_physical_device.c index 3abff010426..5ed878ea9a0 100644 --- a/src/amd/vulkan/radv_physical_device.c +++ b/src/amd/vulkan/radv_physical_device.c @@ -124,13 +124,6 @@ radv_is_conformant(const struct radv_physical_device *pdev) return pdev->info.gfx_level >= GFX8; } -bool -radv_device_supports_etc(const struct radv_physical_device *pdev) -{ - return pdev->info.family == CHIP_VEGA10 || pdev->info.family == CHIP_RAVEN || pdev->info.family == CHIP_RAVEN2 || - pdev->info.family == CHIP_STONEY; -} - static void parse_hex(char *out, const char *in, unsigned length) { @@ -748,7 +741,7 @@ radv_physical_device_get_features(const struct radv_physical_device *pdev, struc .alphaToOne = true, .multiViewport = true, .samplerAnisotropy = true, - .textureCompressionETC2 = radv_device_supports_etc(pdev) || pdev->emulate_etc2, + .textureCompressionETC2 = pdev->info.has_etc_support || pdev->emulate_etc2, .textureCompressionASTC_LDR = pdev->emulate_astc, .textureCompressionBC = true, .occlusionQueryPrecise = true, @@ -2038,10 +2031,10 @@ radv_physical_device_try_create(struct radv_instance *instance, drmDevicePtr drm #endif #if DETECT_OS_ANDROID - pdev->emulate_etc2 = !radv_device_supports_etc(pdev); + pdev->emulate_etc2 = !pdev->info.has_etc_support; pdev->emulate_astc = true; #else - pdev->emulate_etc2 = !radv_device_supports_etc(pdev) && instance->drirc.vk_require_etc2; + pdev->emulate_etc2 = !pdev->info.has_etc_support && instance->drirc.vk_require_etc2; pdev->emulate_astc = instance->drirc.vk_require_astc; #endif diff --git a/src/amd/vulkan/radv_physical_device.h b/src/amd/vulkan/radv_physical_device.h index df3d1797fd5..8d4ac117cbe 100644 --- a/src/amd/vulkan/radv_physical_device.h +++ b/src/amd/vulkan/radv_physical_device.h @@ -255,8 +255,6 @@ bool radv_enable_rt(const struct radv_physical_device *pdev, bool rt_pipelines); bool radv_emulate_rt(const struct radv_physical_device *pdev); -bool radv_device_supports_etc(const struct radv_physical_device *pdev); - uint32_t radv_find_memory_index(const struct radv_physical_device *pdev, VkMemoryPropertyFlags flags); VkResult create_null_physical_device(struct vk_instance *vk_instance); diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index a0d60461ba3..b8f44df500c 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -2042,9 +2042,7 @@ static uint32_t si_translate_texformat(struct pipe_screen *screen, enum pipe_for } } - if (desc->layout == UTIL_FORMAT_LAYOUT_ETC && - (sscreen->info.family == CHIP_STONEY || sscreen->info.family == CHIP_VEGA10 || - sscreen->info.family == CHIP_RAVEN || sscreen->info.family == CHIP_RAVEN2)) { + if (desc->layout == UTIL_FORMAT_LAYOUT_ETC && sscreen->info.has_etc_support) { switch (format) { case PIPE_FORMAT_ETC1_RGB8: case PIPE_FORMAT_ETC2_RGB8: