2022-04-23 10:59:50 +02:00
|
|
|
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
2020-12-30 06:03:50 +01:00
|
|
|
|
|
|
|
#version 460 core
|
|
|
|
#extension GL_EXT_shader_16bit_storage : require
|
|
|
|
#extension GL_EXT_shader_8bit_storage : require
|
|
|
|
|
|
|
|
layout (local_size_x = 1024) in;
|
|
|
|
|
|
|
|
layout (std430, set = 0, binding = 0) readonly buffer InputBuffer {
|
|
|
|
uint8_t input_indexes[];
|
|
|
|
};
|
|
|
|
|
|
|
|
layout (std430, set = 0, binding = 1) writeonly buffer OutputBuffer {
|
|
|
|
uint16_t output_indexes[];
|
|
|
|
};
|
|
|
|
|
2021-01-17 00:48:58 +01:00
|
|
|
uint AssembleIndex(uint id) {
|
|
|
|
// Most primitive restart indices are 0xFF
|
|
|
|
// Hardcode this to 0xFF for now
|
|
|
|
uint index = uint(input_indexes[id]);
|
|
|
|
return index == 0xFF ? 0xFFFF : index;
|
|
|
|
}
|
|
|
|
|
2020-12-30 06:03:50 +01:00
|
|
|
void main() {
|
|
|
|
uint id = gl_GlobalInvocationID.x;
|
|
|
|
if (id < input_indexes.length()) {
|
2021-01-17 00:48:58 +01:00
|
|
|
output_indexes[id] = uint16_t(AssembleIndex(id));
|
2020-12-30 06:03:50 +01:00
|
|
|
}
|
|
|
|
}
|