summaryrefslogtreecommitdiff
path: root/src/amd
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>2021-03-21 00:27:17 +0100
committerEric Engestrom <eric@engestrom.ch>2021-05-18 23:34:14 +0200
commit16c4d7357f1f51e9bc5fa18134e8cc2fe2076b04 (patch)
treee2a8f6ecf9803a0b806de5b64acbe9c72fcfba7e /src/amd
parentb22b11ffa45f39f0b9bb646e95c7415090e70c02 (diff)
radv: Use correct border swizzle on GFX9+.
We only need the format swizzle, not the full swizzle. Fixes: 57e796a12a8 ("radv: Implement VK_EXT_custom_border_color") Gitlab: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4020 Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9731> (cherry picked from commit 74d36c4f986c7bd38390d0803074e97057fd4a71)
Diffstat (limited to 'src/amd')
-rw-r--r--src/amd/vulkan/radv_image.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index c7d102882a6..aa76d1e2674 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -824,29 +824,29 @@ radv_tex_dim(VkImageType image_type, VkImageViewType view_type, unsigned nr_laye
}
static unsigned
-gfx9_border_color_swizzle(const enum pipe_swizzle swizzle[4])
+gfx9_border_color_swizzle(const struct util_format_description *desc)
{
unsigned bc_swizzle = V_008F20_BC_SWIZZLE_XYZW;
- if (swizzle[3] == PIPE_SWIZZLE_X) {
+ if (desc->swizzle[3] == PIPE_SWIZZLE_X) {
/* For the pre-defined border color values (white, opaque
* black, transparent black), the only thing that matters is
* that the alpha channel winds up in the correct place
* (because the RGB channels are all the same) so either of
* these enumerations will work.
*/
- if (swizzle[2] == PIPE_SWIZZLE_Y)
+ if (desc->swizzle[2] == PIPE_SWIZZLE_Y)
bc_swizzle = V_008F20_BC_SWIZZLE_WZYX;
else
bc_swizzle = V_008F20_BC_SWIZZLE_WXYZ;
- } else if (swizzle[0] == PIPE_SWIZZLE_X) {
- if (swizzle[1] == PIPE_SWIZZLE_Y)
+ } else if (desc->swizzle[0] == PIPE_SWIZZLE_X) {
+ if (desc->swizzle[1] == PIPE_SWIZZLE_Y)
bc_swizzle = V_008F20_BC_SWIZZLE_XYZW;
else
bc_swizzle = V_008F20_BC_SWIZZLE_XWYZ;
- } else if (swizzle[1] == PIPE_SWIZZLE_X) {
+ } else if (desc->swizzle[1] == PIPE_SWIZZLE_X) {
bc_swizzle = V_008F20_BC_SWIZZLE_YXWZ;
- } else if (swizzle[2] == PIPE_SWIZZLE_X) {
+ } else if (desc->swizzle[2] == PIPE_SWIZZLE_X) {
bc_swizzle = V_008F20_BC_SWIZZLE_ZYXW;
}
@@ -906,7 +906,7 @@ gfx10_make_texture_descriptor(struct radv_device *device, struct radv_image *ima
S_00A00C_BASE_LEVEL(image->info.samples > 1 ? 0 : first_level) |
S_00A00C_LAST_LEVEL(image->info.samples > 1 ? util_logbase2(image->info.samples)
: last_level) |
- S_00A00C_BC_SWIZZLE(gfx9_border_color_swizzle(swizzle)) | S_00A00C_TYPE(type);
+ S_00A00C_BC_SWIZZLE(gfx9_border_color_swizzle(desc)) | S_00A00C_TYPE(type);
/* Depth is the the last accessible layer on gfx9+. The hw doesn't need
* to know the total number of layers.
*/
@@ -1051,7 +1051,7 @@ si_make_texture_descriptor(struct radv_device *device, struct radv_image *image,
state[7] = 0;
if (device->physical_device->rad_info.chip_class == GFX9) {
- unsigned bc_swizzle = gfx9_border_color_swizzle(swizzle);
+ unsigned bc_swizzle = gfx9_border_color_swizzle(desc);
/* Depth is the last accessible layer on Gfx9.
* The hw doesn't need to know the total number of layers.