astc: Various robustness enhancements for the gpu decoder

These changes should help in reducing crashes/drivers panics that may
occur due to synchronization issues between the shader completion and
later access of the decoded texture.
This commit is contained in:
ameerj 2021-06-19 00:55:13 -04:00
parent 3870ba670f
commit 31b125ef57
5 changed files with 16 additions and 47 deletions

View file

@ -14,9 +14,8 @@
#define BINDING_6_TO_8_BUFFER 2
#define BINDING_7_TO_8_BUFFER 3
#define BINDING_8_TO_8_BUFFER 4
#define BINDING_BYTE_TO_16_BUFFER 5
#define BINDING_SWIZZLE_BUFFER 6
#define BINDING_OUTPUT_IMAGE 7
#define BINDING_SWIZZLE_BUFFER 5
#define BINDING_OUTPUT_IMAGE 6
#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv
@ -29,7 +28,6 @@
#define BINDING_6_TO_8_BUFFER 3
#define BINDING_7_TO_8_BUFFER 4
#define BINDING_8_TO_8_BUFFER 5
#define BINDING_BYTE_TO_16_BUFFER 6
#define BINDING_OUTPUT_IMAGE 0
#endif
@ -86,9 +84,6 @@ layout(binding = BINDING_7_TO_8_BUFFER, std430) readonly buffer REPLICATE_7_BIT_
layout(binding = BINDING_8_TO_8_BUFFER, std430) readonly buffer REPLICATE_8_BIT_TO_8 {
uint REPLICATE_8_BIT_TO_8_TABLE[];
};
layout(binding = BINDING_BYTE_TO_16_BUFFER, std430) readonly buffer REPLICATE_BYTE_TO_16 {
uint REPLICATE_BYTE_TO_16_TABLE[];
};
layout(binding = BINDING_OUTPUT_IMAGE, rgba8) uniform writeonly image2DArray dest_image;
@ -207,8 +202,7 @@ uint Replicate(uint val, uint num_bits, uint to_bit) {
}
uvec4 ReplicateByteTo16(uvec4 value) {
return uvec4(REPLICATE_BYTE_TO_16_TABLE[value.x], REPLICATE_BYTE_TO_16_TABLE[value.y],
REPLICATE_BYTE_TO_16_TABLE[value.z], REPLICATE_BYTE_TO_16_TABLE[value.w]);
return value * 0x101;
}
uint ReplicateBitTo7(uint value) {
@ -1327,6 +1321,9 @@ void main() {
offset += swizzle;
const ivec3 coord = ivec3(gl_GlobalInvocationID * uvec3(block_dims, 1));
if (any(greaterThanEqual(coord, imageSize(dest_image)))) {
return;
}
uint block_index =
pos.z * gl_WorkGroupSize.x * gl_WorkGroupSize.y + pos.y * gl_WorkGroupSize.x + pos.x;