VulkanShader_1.21.10-0.0.4-alpha.jar
Download file
package net.vulkanmod.vulkan.util;
import java.lang.reflect.Field;
import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.Objects;
import java.util.stream.Stream;
import net.vulkanmod.vulkan.memory.buffer.Buffer;
import org.lwjgl.PointerBuffer;
import org.lwjgl.system.MemoryStack;
import org.lwjgl.system.MemoryUtil;
import sun.misc.Unsafe;
public class VUtil {
public static final boolean CHECKS = true;
public static final int UINT32_MAX = -1;
public static final long UINT64_MAX = -1L;
public static final Unsafe UNSAFE;
public static PointerBuffer asPointerBuffer(Collection<String> collection) {
MemoryStack stack = MemoryStack.stackGet();
PointerBuffer buffer = stack.mallocPointer(collection.size());
Stream var10000 = collection.stream();
Objects.requireNonNull(stack);
var10000 = var10000.map(stack::UTF8);
Objects.requireNonNull(buffer);
var10000.forEach(buffer::put);
return (PointerBuffer)buffer.rewind();
}
public static void memcpy(ByteBuffer src, long dstPtr) {
MemoryUtil.memCopy(MemoryUtil.memAddress0(src), dstPtr, (long)src.capacity());
}
public static void memcpy(ByteBuffer src, Buffer dst, long size) {
if (size > dst.getBufferSize() - dst.getUsedBytes()) {
throw new IllegalArgumentException("Upload size is greater than available dst buffer size");
} else {
long srcPtr = MemoryUtil.memAddress(src);
long dstPtr = dst.getDataPtr() + dst.getUsedBytes();
MemoryUtil.memCopy(srcPtr, dstPtr, size);
}
}
public static void memcpy(Buffer src, ByteBuffer dst, long size) {
if (size > (long)dst.remaining()) {
throw new IllegalArgumentException("Upload size is greater than available dst buffer size");
} else {
long srcPtr = src.getDataPtr();
long dstPtr = MemoryUtil.memAddress(dst);
MemoryUtil.memCopy(srcPtr, dstPtr, size);
}
}
public static void memcpy(ByteBuffer src, Buffer dst, long size, long srcOffset, long dstOffset) {
if (size > dst.getBufferSize() - dstOffset) {
throw new IllegalArgumentException("Upload size is greater than available dst buffer size");
} else {
long dstPtr = dst.getDataPtr() + dstOffset;
long srcPtr = MemoryUtil.memAddress(src) + srcOffset;
MemoryUtil.memCopy(srcPtr, dstPtr, size);
}
}
public static int align(int x, int align) {
int r = x % align;
return r == 0 ? x : x + align - r;
}
static {
Field f = null;
try {
f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
UNSAFE = (Unsafe)f.get((Object)null);
} catch (IllegalAccessException | NoSuchFieldException e) {
throw new RuntimeException(e);
}
}
}
Download file