diff options
| -rw-r--r-- | src/video_core/host_shaders/astc_decoder.comp | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/src/video_core/host_shaders/astc_decoder.comp b/src/video_core/host_shaders/astc_decoder.comp index 4014d4bfe..70f147d80 100644 --- a/src/video_core/host_shaders/astc_decoder.comp +++ b/src/video_core/host_shaders/astc_decoder.comp | |||
| @@ -77,7 +77,7 @@ int color_bitsread = 0; | |||
| 77 | #define DIVCEIL(number, divisor) (number + divisor - 1) / divisor | 77 | #define DIVCEIL(number, divisor) (number + divisor - 1) / divisor |
| 78 | #define ARRAY_NUM_ELEMENTS 144 | 78 | #define ARRAY_NUM_ELEMENTS 144 |
| 79 | #define VECTOR_ARRAY_SIZE DIVCEIL(ARRAY_NUM_ELEMENTS * 2, 4) | 79 | #define VECTOR_ARRAY_SIZE DIVCEIL(ARRAY_NUM_ELEMENTS * 2, 4) |
| 80 | uvec4 result_vector[VECTOR_ARRAY_SIZE]; | 80 | uint result_vector[ARRAY_NUM_ELEMENTS * 2]; |
| 81 | 81 | ||
| 82 | int result_index = 0; | 82 | int result_index = 0; |
| 83 | uint result_vector_max_index; | 83 | uint result_vector_max_index; |
| @@ -122,9 +122,7 @@ void ResultEmplaceBack(EncodingData val) { | |||
| 122 | result_limit_reached = true; | 122 | result_limit_reached = true; |
| 123 | return; | 123 | return; |
| 124 | } | 124 | } |
| 125 | const uint array_index = result_index / 4; | 125 | result_vector[result_index] = val.data; |
| 126 | const uint vector_index = result_index % 4; | ||
| 127 | result_vector[array_index][vector_index] = val.data; | ||
| 128 | ++result_index; | 126 | ++result_index; |
| 129 | } | 127 | } |
| 130 | 128 | ||
| @@ -309,10 +307,7 @@ uint StreamColorBits(uint num_bits) { | |||
| 309 | } | 307 | } |
| 310 | 308 | ||
| 311 | EncodingData GetEncodingFromVector(uint index) { | 309 | EncodingData GetEncodingFromVector(uint index) { |
| 312 | const uint array_index = index / 4; | 310 | const uint data = result_vector[index]; |
| 313 | const uint vector_index = index % 4; | ||
| 314 | |||
| 315 | const uint data = result_vector[array_index][vector_index]; | ||
| 316 | return EncodingData(data); | 311 | return EncodingData(data); |
| 317 | } | 312 | } |
| 318 | 313 | ||
| @@ -809,18 +804,14 @@ void UnquantizeTexelWeights(uvec2 size, bool is_dual_plane) { | |||
| 809 | const uint area = size.x * size.y; | 804 | const uint area = size.x * size.y; |
| 810 | const uint loop_count = min(result_index, area * num_planes); | 805 | const uint loop_count = min(result_index, area * num_planes); |
| 811 | for (uint itr = 0; itr < loop_count; ++itr) { | 806 | for (uint itr = 0; itr < loop_count; ++itr) { |
| 812 | const uint array_index = itr / 4; | 807 | result_vector[itr] = |
| 813 | const uint vector_index = itr % 4; | ||
| 814 | result_vector[array_index][vector_index] = | ||
| 815 | UnquantizeTexelWeight(GetEncodingFromVector(itr)); | 808 | UnquantizeTexelWeight(GetEncodingFromVector(itr)); |
| 816 | } | 809 | } |
| 817 | } | 810 | } |
| 818 | 811 | ||
| 819 | uint GetUnquantizedTexelWieght(uint offset_base, uint plane, bool is_dual_plane) { | 812 | uint GetUnquantizedTexelWieght(uint offset_base, uint plane, bool is_dual_plane) { |
| 820 | const uint offset = is_dual_plane ? 2 * offset_base + plane : offset_base; | 813 | const uint offset = is_dual_plane ? 2 * offset_base + plane : offset_base; |
| 821 | const uint array_index = offset / 4; | 814 | return result_vector[offset]; |
| 822 | const uint vector_index = offset % 4; | ||
| 823 | return result_vector[array_index][vector_index]; | ||
| 824 | } | 815 | } |
| 825 | 816 | ||
| 826 | uvec4 GetUnquantizedWeightVector(uint t, uint s, uvec2 size, uint plane_index, bool is_dual_plane) { | 817 | uvec4 GetUnquantizedWeightVector(uint t, uint s, uvec2 size, uint plane_index, bool is_dual_plane) { |