Commit 7f418fc2 by Courtney Goeltzenleuchter Committed by Commit Bot

Vulkan: lineloop support for DrawArrayIndirect

Add support for lineloops. Includes a compute shader for generating an index buffer to draw lineloop. Instancing turns out to be a special case for indirect draws if we have vertex attributes that need to be emulated (e.g. divisor too large or native vertex format not available). Test: dEQP.GLES31/functional_draw_indirect_* angle_end2end_tests --gtest_filter=LineLoopIndirectTest.*/* dEQP.GLES3/functional_draw_* Bug: angleproject:3564 Change-Id: I1fdabe2c8a690c8b6df9e252e1e839e08796bcca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1834682 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 299bea64
...@@ -82,17 +82,19 @@ ...@@ -82,17 +82,19 @@
"src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000B.inc": "src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000B.inc":
"7e13d5325d35f96045e920a1cb3598bc", "7e13d5325d35f96045e920a1cb3598bc",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000000.inc":
"b3877393750a16efd1d6805a0327a9e7", "2eb01d29bfbe67165fe2ac22f889b65e",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000001.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000001.inc":
"66d7868159587d000ef41d84489780bc", "88ec915ed8519a5b49f1d022774d2655",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000002.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000002.inc":
"db98380613bc3f032037b4a096756975", "4b5290a0c127e1375ec6b5dcec46893c",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000003.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000003.inc":
"e676bdff5c3b596eccba13a4e52d3875", "0d3eb0f82f328837ef4c0fe5f978ef3f",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000000.inc":
"d99b638b0b2efa9726350869fe6b9b10", "76d8265a6ccec813fb7f7ad1b503947e",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000001.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000001.inc":
"8f27f7634724189ce2bd63820e96ee63", "a1964fd9d0b75701a384a11ac23242fb",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndirectLineLoop.comp.00000000.inc":
"523d3207d424614197ace9601ce56950",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc":
"f5ef892346ee10e5d0d9f8cba2a491b2", "f5ef892346ee10e5d0d9f8cba2a491b2",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc":
...@@ -290,9 +292,11 @@ ...@@ -290,9 +292,11 @@
"src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp": "src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp":
"b7c20e019199f8328ef37b11c6fbcadd", "b7c20e019199f8328ef37b11c6fbcadd",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndex.comp": "src/libANGLE/renderer/vulkan/shaders/src/ConvertIndex.comp":
"083e2b6ed2cf40f036287413c449e675", "a46b48d7d5b19c74eb377f275525ab8d",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndexIndirectLineLoop.comp": "src/libANGLE/renderer/vulkan/shaders/src/ConvertIndexIndirectLineLoop.comp":
"a543a28fc1fe53eefd5949ee3b4428f3", "63418a915d0a63a26c17fea3091cd42d",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndirectLineLoop.comp":
"c4fe0f463b41cd59bae33f9711e0b67b",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp": "src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp":
"6d034ff271e17c0a4f8a12b8eec2970d", "6d034ff271e17c0a4f8a12b8eec2970d",
"src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert": "src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert":
...@@ -306,9 +310,9 @@ ...@@ -306,9 +310,9 @@
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp": "src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp":
"dcc246b398b2e07a869a264666499362", "dcc246b398b2e07a869a264666499362",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp": "src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp":
"39bcc07efd2fe05c1eb0a9d9e34567d3", "5991a86d00cf2b40989e92cc0e9f2519",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h": "src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h":
"cfeb07579c1ba5051450f76f06e47d05", "64b710329f099176d53899fb4d8c816a",
"tools/glslang/glslang_validator.exe.sha1": "tools/glslang/glslang_validator.exe.sha1":
"289f30598865a987a21b79ae525fc66f", "289f30598865a987a21b79ae525fc66f",
"tools/glslang/glslang_validator.sha1": "tools/glslang/glslang_validator.sha1":
......
...@@ -756,7 +756,6 @@ angle::Result ContextVk::setupDraw(const gl::Context *context, ...@@ -756,7 +756,6 @@ angle::Result ContextVk::setupDraw(const gl::Context *context,
// Must be called before the command buffer is started. Can call finish. // Must be called before the command buffer is started. Can call finish.
if (mVertexArray->getStreamingVertexAttribsMask().any()) if (mVertexArray->getStreamingVertexAttribsMask().any())
{ {
ASSERT(firstVertexOrInvalid != -1);
// All client attribs & any emulated buffered attribs will be updated // All client attribs & any emulated buffered attribs will be updated
ANGLE_TRY(mVertexArray->updateStreamedAttribs(context, firstVertexOrInvalid, ANGLE_TRY(mVertexArray->updateStreamedAttribs(context, firstVertexOrInvalid,
vertexOrIndexCount, instanceCount, vertexOrIndexCount, instanceCount,
...@@ -865,21 +864,20 @@ angle::Result ContextVk::setupIndexedDraw(const gl::Context *context, ...@@ -865,21 +864,20 @@ angle::Result ContextVk::setupIndexedDraw(const gl::Context *context,
angle::Result ContextVk::setupIndirectDraw(const gl::Context *context, angle::Result ContextVk::setupIndirectDraw(const gl::Context *context,
gl::PrimitiveMode mode, gl::PrimitiveMode mode,
DirtyBits dirtyBitMask, DirtyBits dirtyBitMask,
vk::CommandBuffer **commandBufferOut, vk::BufferHelper *indirectBuffer,
vk::Buffer **indirectBufferOut) VkDeviceSize indirectBufferOffset,
vk::CommandBuffer **commandBufferOut)
{ {
ASSERT(mode != gl::PrimitiveMode::LineLoop); GLint firstVertex = -1;
GLsizei vertexCount = 0;
gl::Buffer *indirectBuffer = mState.getTargetBuffer(gl::BufferBinding::DrawIndirect); GLsizei instanceCount = 1;
ASSERT(indirectBuffer);
vk::BufferHelper &buffer = vk::GetImpl(indirectBuffer)->getBuffer();
*indirectBufferOut = const_cast<vk::Buffer *>(&buffer.getBuffer());
vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer(); vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer();
buffer.onRead(this, framebuffer, VK_ACCESS_INDIRECT_COMMAND_READ_BIT); indirectBuffer->onRead(this, framebuffer, VK_ACCESS_INDIRECT_COMMAND_READ_BIT);
ANGLE_TRY(setupDraw(context, mode, -1, 0, 0, gl::DrawElementsType::InvalidEnum, nullptr, ANGLE_TRY(setupDraw(context, mode, firstVertex, vertexCount, instanceCount,
dirtyBitMask, commandBufferOut)); gl::DrawElementsType::InvalidEnum, nullptr, dirtyBitMask,
commandBufferOut));
return angle::Result::Continue; return angle::Result::Continue;
} }
...@@ -887,8 +885,9 @@ angle::Result ContextVk::setupIndirectDraw(const gl::Context *context, ...@@ -887,8 +885,9 @@ angle::Result ContextVk::setupIndirectDraw(const gl::Context *context,
angle::Result ContextVk::setupIndexedIndirectDraw(const gl::Context *context, angle::Result ContextVk::setupIndexedIndirectDraw(const gl::Context *context,
gl::PrimitiveMode mode, gl::PrimitiveMode mode,
gl::DrawElementsType indexType, gl::DrawElementsType indexType,
vk::CommandBuffer **commandBufferOut, vk::BufferHelper *indirectBuffer,
vk::Buffer **indirectBufferOut) VkDeviceSize indirectBufferOffset,
vk::CommandBuffer **commandBufferOut)
{ {
ASSERT(mode != gl::PrimitiveMode::LineLoop); ASSERT(mode != gl::PrimitiveMode::LineLoop);
...@@ -898,30 +897,30 @@ angle::Result ContextVk::setupIndexedIndirectDraw(const gl::Context *context, ...@@ -898,30 +897,30 @@ angle::Result ContextVk::setupIndexedIndirectDraw(const gl::Context *context,
setIndexBufferDirty(); setIndexBufferDirty();
} }
return setupIndirectDraw(context, mode, mIndexedDirtyBitsMask, commandBufferOut, return setupIndirectDraw(context, mode, mIndexedDirtyBitsMask, indirectBuffer,
indirectBufferOut); indirectBufferOffset, commandBufferOut);
} }
angle::Result ContextVk::setupLineLoopIndexedIndirectDraw(const gl::Context *context, angle::Result ContextVk::setupLineLoopIndexedIndirectDraw(const gl::Context *context,
gl::PrimitiveMode mode, gl::PrimitiveMode mode,
gl::DrawElementsType indexType, gl::DrawElementsType indexType,
const gl::Buffer *indirectBuffer, vk::BufferHelper *srcIndirectBuf,
VkDeviceSize indirectBufferOffset, VkDeviceSize indirectBufferOffset,
const gl::Buffer *indexBuffer,
vk::CommandBuffer **commandBufferOut, vk::CommandBuffer **commandBufferOut,
vk::Buffer **indirectBufferOut, vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut) VkDeviceSize *indirectBufferOffsetOut)
{ {
ASSERT(mode == gl::PrimitiveMode::LineLoop); ASSERT(mode == gl::PrimitiveMode::LineLoop);
BufferVk *indirectBufferVk = vk::GetImpl(indirectBuffer); vk::BufferHelper *dstIndirectBuf = nullptr;
vk::BufferHelper *indirectBufferHelperOut = nullptr; VkDeviceSize dstIndirectBufOffset = 0;
ANGLE_TRY(mVertexArray->handleLineLoopIndirect(this, indirectBufferVk, indexType, ANGLE_TRY(mVertexArray->handleLineLoopIndexIndirect(this, indexType, srcIndirectBuf,
indirectBufferOffset, &indirectBufferHelperOut, indirectBufferOffset, &dstIndirectBuf,
indirectBufferOffsetOut)); &dstIndirectBufOffset));
*indirectBufferOut = const_cast<vk::Buffer *>(&indirectBufferHelperOut->getBuffer()); *indirectBufferOut = dstIndirectBuf;
*indirectBufferOffsetOut = dstIndirectBufOffset;
if (indexType != mCurrentDrawElementsType) if (indexType != mCurrentDrawElementsType)
{ {
...@@ -929,11 +928,36 @@ angle::Result ContextVk::setupLineLoopIndexedIndirectDraw(const gl::Context *con ...@@ -929,11 +928,36 @@ angle::Result ContextVk::setupLineLoopIndexedIndirectDraw(const gl::Context *con
setIndexBufferDirty(); setIndexBufferDirty();
} }
vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer(); return setupIndirectDraw(context, mode, mIndexedDirtyBitsMask, dstIndirectBuf,
indirectBufferHelperOut->onRead(this, framebuffer, VK_ACCESS_INDIRECT_COMMAND_READ_BIT); dstIndirectBufOffset, commandBufferOut);
}
return setupDraw(context, mode, -1, 0, 0, gl::DrawElementsType::InvalidEnum, nullptr, angle::Result ContextVk::setupLineLoopIndirectDraw(const gl::Context *context,
mIndexedDirtyBitsMask, commandBufferOut); gl::PrimitiveMode mode,
vk::BufferHelper *indirectBuffer,
VkDeviceSize indirectBufferOffset,
vk::CommandBuffer **commandBufferOut,
vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut)
{
ASSERT(mode == gl::PrimitiveMode::LineLoop);
vk::BufferHelper *indirectBufferHelperOut = nullptr;
ANGLE_TRY(mVertexArray->handleLineLoopIndirectDraw(
context, indirectBuffer, indirectBufferOffset, &indirectBufferHelperOut,
indirectBufferOffsetOut));
*indirectBufferOut = indirectBufferHelperOut;
if (gl::DrawElementsType::UnsignedInt != mCurrentDrawElementsType)
{
mCurrentDrawElementsType = gl::DrawElementsType::UnsignedInt;
setIndexBufferDirty();
}
return setupIndirectDraw(context, mode, mIndexedDirtyBitsMask, indirectBufferHelperOut,
*indirectBufferOffsetOut, commandBufferOut);
} }
angle::Result ContextVk::setupLineLoopDraw(const gl::Context *context, angle::Result ContextVk::setupLineLoopDraw(const gl::Context *context,
...@@ -1613,14 +1637,19 @@ angle::Result ContextVk::drawArraysInstanced(const gl::Context *context, ...@@ -1613,14 +1637,19 @@ angle::Result ContextVk::drawArraysInstanced(const gl::Context *context,
GLsizei count, GLsizei count,
GLsizei instances) GLsizei instances)
{ {
vk::CommandBuffer *commandBuffer = nullptr;
if (mode == gl::PrimitiveMode::LineLoop) if (mode == gl::PrimitiveMode::LineLoop)
{ {
// TODO - http://anglebug.com/2672 uint32_t clampedVertexCount = gl::GetClampedVertexCount<uint32_t>(count);
ANGLE_VK_UNREACHABLE(this); uint32_t numIndices;
return angle::Result::Stop; ANGLE_TRY(setupLineLoopDraw(context, mode, first, clampedVertexCount,
gl::DrawElementsType::InvalidEnum, nullptr, &commandBuffer,
&numIndices));
commandBuffer->drawIndexedInstanced(numIndices, instances);
return angle::Result::Continue;
} }
vk::CommandBuffer *commandBuffer = nullptr;
ANGLE_TRY(setupDraw(context, mode, first, count, instances, gl::DrawElementsType::InvalidEnum, ANGLE_TRY(setupDraw(context, mode, first, count, instances, gl::DrawElementsType::InvalidEnum,
nullptr, mNonIndexedDirtyBitsMask, &commandBuffer)); nullptr, mNonIndexedDirtyBitsMask, &commandBuffer));
commandBuffer->drawInstanced(gl::GetClampedVertexCount<uint32_t>(count), instances, first); commandBuffer->drawInstanced(gl::GetClampedVertexCount<uint32_t>(count), instances, first);
...@@ -1634,14 +1663,20 @@ angle::Result ContextVk::drawArraysInstancedBaseInstance(const gl::Context *cont ...@@ -1634,14 +1663,20 @@ angle::Result ContextVk::drawArraysInstancedBaseInstance(const gl::Context *cont
GLsizei instances, GLsizei instances,
GLuint baseInstance) GLuint baseInstance)
{ {
vk::CommandBuffer *commandBuffer = nullptr;
if (mode == gl::PrimitiveMode::LineLoop) if (mode == gl::PrimitiveMode::LineLoop)
{ {
// TODO - http://anglebug.com/2672 uint32_t clampedVertexCount = gl::GetClampedVertexCount<uint32_t>(count);
ANGLE_VK_UNREACHABLE(this); uint32_t numIndices;
return angle::Result::Stop; ANGLE_TRY(setupLineLoopDraw(context, mode, first, clampedVertexCount,
gl::DrawElementsType::InvalidEnum, nullptr, &commandBuffer,
&numIndices));
commandBuffer->drawIndexedInstancedBaseVertexBaseInstance(numIndices, instances, 0, 0,
baseInstance);
return angle::Result::Continue;
} }
vk::CommandBuffer *commandBuffer = nullptr;
ANGLE_TRY(setupDraw(context, mode, first, count, instances, gl::DrawElementsType::InvalidEnum, ANGLE_TRY(setupDraw(context, mode, first, count, instances, gl::DrawElementsType::InvalidEnum,
nullptr, mNonIndexedDirtyBitsMask, &commandBuffer)); nullptr, mNonIndexedDirtyBitsMask, &commandBuffer));
commandBuffer->drawInstancedBaseInstance(gl::GetClampedVertexCount<uint32_t>(count), instances, commandBuffer->drawInstancedBaseInstance(gl::GetClampedVertexCount<uint32_t>(count), instances,
...@@ -1679,15 +1714,20 @@ angle::Result ContextVk::drawElementsInstanced(const gl::Context *context, ...@@ -1679,15 +1714,20 @@ angle::Result ContextVk::drawElementsInstanced(const gl::Context *context,
const void *indices, const void *indices,
GLsizei instances) GLsizei instances)
{ {
vk::CommandBuffer *commandBuffer = nullptr;
if (mode == gl::PrimitiveMode::LineLoop) if (mode == gl::PrimitiveMode::LineLoop)
{ {
// TODO - http://anglebug.com/2672 uint32_t indexCount;
ANGLE_VK_UNREACHABLE(this); ANGLE_TRY(
return angle::Result::Stop; setupLineLoopDraw(context, mode, 0, count, type, indices, &commandBuffer, &indexCount));
count = indexCount;
} }
else
vk::CommandBuffer *commandBuffer = nullptr; {
ANGLE_TRY(setupIndexedDraw(context, mode, count, instances, type, indices, &commandBuffer)); ANGLE_TRY(setupIndexedDraw(context, mode, count, instances, type, indices, &commandBuffer));
}
commandBuffer->drawIndexedInstanced(count, instances); commandBuffer->drawIndexedInstanced(count, instances);
return angle::Result::Continue; return angle::Result::Continue;
} }
...@@ -1701,14 +1741,18 @@ angle::Result ContextVk::drawElementsInstancedBaseVertexBaseInstance(const gl::C ...@@ -1701,14 +1741,18 @@ angle::Result ContextVk::drawElementsInstancedBaseVertexBaseInstance(const gl::C
GLint baseVertex, GLint baseVertex,
GLuint baseInstance) GLuint baseInstance)
{ {
vk::CommandBuffer *commandBuffer = nullptr;
if (mode == gl::PrimitiveMode::LineLoop) if (mode == gl::PrimitiveMode::LineLoop)
{ {
// TODO - http://anglebug.com/2672 uint32_t indexCount;
ANGLE_VK_UNREACHABLE(this); ANGLE_TRY(
return angle::Result::Stop; setupLineLoopDraw(context, mode, 0, count, type, indices, &commandBuffer, &indexCount));
commandBuffer->drawIndexedInstancedBaseVertexBaseInstance(indexCount, instances, 0,
baseVertex, baseInstance);
return angle::Result::Continue;
} }
vk::CommandBuffer *commandBuffer = nullptr;
ANGLE_TRY(setupIndexedDraw(context, mode, count, instances, type, indices, &commandBuffer)); ANGLE_TRY(setupIndexedDraw(context, mode, count, instances, type, indices, &commandBuffer));
commandBuffer->drawIndexedInstancedBaseVertexBaseInstance(count, instances, 0, baseVertex, commandBuffer->drawIndexedInstancedBaseVertexBaseInstance(count, instances, 0, baseVertex,
baseInstance); baseInstance);
...@@ -1735,19 +1779,51 @@ angle::Result ContextVk::drawArraysIndirect(const gl::Context *context, ...@@ -1735,19 +1779,51 @@ angle::Result ContextVk::drawArraysIndirect(const gl::Context *context,
gl::PrimitiveMode mode, gl::PrimitiveMode mode,
const void *indirect) const void *indirect)
{ {
if (mode == gl::PrimitiveMode::LineLoop) gl::Buffer *indirectBuffer = mState.getTargetBuffer(gl::BufferBinding::DrawIndirect);
vk::BufferHelper *currentIndirectBuf = &vk::GetImpl(indirectBuffer)->getBuffer();
VkDeviceSize currentIndirectBufOffset = reinterpret_cast<VkDeviceSize>(indirect);
if (mVertexArray->getStreamingVertexAttribsMask().any())
{ {
// TODO - http://anglebug.com/3564 vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer();
ANGLE_VK_UNREACHABLE(this); currentIndirectBuf->onRead(this, framebuffer, VK_ACCESS_INDIRECT_COMMAND_READ_BIT);
return angle::Result::Stop;
// We have instanced vertex attributes that need to be emulated for Vulkan.
// invalidate any cache and map the buffer so that we can read the indirect data.
// Mapping the buffer will cause a flush.
ANGLE_TRY(currentIndirectBuf->invalidate(this, 0, sizeof(VkDrawIndirectCommand)));
uint8_t *buffPtr;
ANGLE_TRY(currentIndirectBuf->map(this, &buffPtr));
const VkDrawIndirectCommand *indirectData =
reinterpret_cast<VkDrawIndirectCommand *>(buffPtr + currentIndirectBufOffset);
ANGLE_TRY(drawArraysInstanced(context, mode, indirectData->firstVertex,
indirectData->vertexCount, indirectData->instanceCount));
currentIndirectBuf->unmap(getDevice());
return angle::Result::Continue;
} }
vk::CommandBuffer *commandBuffer = nullptr; vk::CommandBuffer *commandBuffer = nullptr;
vk::Buffer *buffer = nullptr;
ANGLE_TRY(setupIndirectDraw(context, mode, mNonIndexedDirtyBitsMask, &commandBuffer, &buffer)); if (mode == gl::PrimitiveMode::LineLoop)
{
ASSERT(indirectBuffer);
vk::BufferHelper *dstIndirectBuf = nullptr;
VkDeviceSize dstIndirectBufOffset = 0;
ANGLE_TRY(setupLineLoopIndirectDraw(context, mode, currentIndirectBuf,
currentIndirectBufOffset, &commandBuffer,
&dstIndirectBuf, &dstIndirectBufOffset));
commandBuffer->drawIndexedIndirect(dstIndirectBuf->getBuffer(), dstIndirectBufOffset, 1, 0);
return angle::Result::Continue;
}
ANGLE_TRY(setupIndirectDraw(context, mode, mNonIndexedDirtyBitsMask, currentIndirectBuf,
currentIndirectBufOffset, &commandBuffer));
commandBuffer->drawIndirect(*buffer, reinterpret_cast<VkDeviceSize>(indirect), 1, 0); commandBuffer->drawIndirect(currentIndirectBuf->getBuffer(), currentIndirectBufOffset, 1, 0);
return angle::Result::Continue; return angle::Result::Continue;
} }
...@@ -1756,37 +1832,67 @@ angle::Result ContextVk::drawElementsIndirect(const gl::Context *context, ...@@ -1756,37 +1832,67 @@ angle::Result ContextVk::drawElementsIndirect(const gl::Context *context,
gl::DrawElementsType type, gl::DrawElementsType type,
const void *indirect) const void *indirect)
{ {
VkDeviceSize indirectBufferOffset = reinterpret_cast<VkDeviceSize>(indirect); VkDeviceSize currentIndirectBufOffset = reinterpret_cast<VkDeviceSize>(indirect);
gl::Buffer *indirectBuffer = mState.getTargetBuffer(gl::BufferBinding::DrawIndirect); gl::Buffer *indirectBuffer = mState.getTargetBuffer(gl::BufferBinding::DrawIndirect);
ASSERT(indirectBuffer); ASSERT(indirectBuffer);
vk::BufferHelper *currentIndirectBuf = &vk::GetImpl(indirectBuffer)->getBuffer();
const gl::Buffer *indexBuffer = mVertexArray->getState().getElementArrayBuffer(); if (mVertexArray->getStreamingVertexAttribsMask().any())
ASSERT(indexBuffer); {
vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer();
currentIndirectBuf->onRead(this, framebuffer, VK_ACCESS_INDIRECT_COMMAND_READ_BIT);
// We have instanced vertex attributes that need to be emulated for Vulkan.
// invalidate any cache and map the buffer so that we can read the indirect data.
// Mapping the buffer will cause a flush.
ANGLE_TRY(currentIndirectBuf->invalidate(this, 0, sizeof(VkDrawIndexedIndirectCommand)));
uint8_t *buffPtr;
ANGLE_TRY(currentIndirectBuf->map(this, &buffPtr));
const VkDrawIndexedIndirectCommand *indirectData =
reinterpret_cast<VkDrawIndexedIndirectCommand *>(buffPtr + currentIndirectBufOffset);
ANGLE_TRY(drawElementsInstanced(context, mode, indirectData->indexCount, type, nullptr,
indirectData->instanceCount));
currentIndirectBuf->unmap(getDevice());
return angle::Result::Continue;
}
if (type == gl::DrawElementsType::UnsignedByte && mGraphicsDirtyBits[DIRTY_BIT_INDEX_BUFFER]) if (type == gl::DrawElementsType::UnsignedByte && mGraphicsDirtyBits[DIRTY_BIT_INDEX_BUFFER])
{ {
BufferVk *indexVk = vk::GetImpl(indexBuffer); vk::BufferHelper *dstIndirectBuf;
BufferVk *cmdBufferVk = vk::GetImpl(indirectBuffer); VkDeviceSize dstIndirectBufOffset;
ANGLE_TRY(
mVertexArray->convertIndexBufferIndirectGPU(this, cmdBufferVk, indexVk, indirect)); ANGLE_TRY(mVertexArray->convertIndexBufferIndirectGPU(
this, currentIndirectBuf, currentIndirectBufOffset, &dstIndirectBuf,
&dstIndirectBufOffset));
currentIndirectBuf = dstIndirectBuf;
currentIndirectBufOffset = dstIndirectBufOffset;
} }
vk::CommandBuffer *commandBuffer = nullptr; vk::CommandBuffer *commandBuffer = nullptr;
vk::Buffer *indirectBufferFinal = nullptr;
if (mode == gl::PrimitiveMode::LineLoop) if (mode == gl::PrimitiveMode::LineLoop)
{ {
ANGLE_TRY(setupLineLoopIndexedIndirectDraw( vk::BufferHelper *dstIndirectBuf;
context, mode, type, indirectBuffer, indirectBufferOffset, indexBuffer, &commandBuffer, VkDeviceSize dstIndirectBufOffset;
&indirectBufferFinal, &indirectBufferOffset));
ANGLE_TRY(setupLineLoopIndexedIndirectDraw(context, mode, type, currentIndirectBuf,
currentIndirectBufOffset, &commandBuffer,
&dstIndirectBuf, &dstIndirectBufOffset));
currentIndirectBuf = dstIndirectBuf;
currentIndirectBufOffset = dstIndirectBufOffset;
} }
else else
{ {
ANGLE_TRY( ANGLE_TRY(setupIndexedIndirectDraw(context, mode, type, currentIndirectBuf,
setupIndexedIndirectDraw(context, mode, type, &commandBuffer, &indirectBufferFinal)); currentIndirectBufOffset, &commandBuffer));
} }
commandBuffer->drawIndexedIndirect(*indirectBufferFinal, indirectBufferOffset, 1, 0); commandBuffer->drawIndexedIndirect(currentIndirectBuf->getBuffer(), currentIndirectBufOffset, 1,
0);
return angle::Result::Continue; return angle::Result::Continue;
} }
......
...@@ -506,26 +506,30 @@ class ContextVk : public ContextImpl, public vk::Context, public vk::RenderPassO ...@@ -506,26 +506,30 @@ class ContextVk : public ContextImpl, public vk::Context, public vk::RenderPassO
angle::Result setupIndirectDraw(const gl::Context *context, angle::Result setupIndirectDraw(const gl::Context *context,
gl::PrimitiveMode mode, gl::PrimitiveMode mode,
DirtyBits dirtyBitMask, DirtyBits dirtyBitMask,
vk::CommandBuffer **commandBufferOut, vk::BufferHelper *indirectBuffer,
vk::Buffer **indirectBufferOut); VkDeviceSize indirectBufferOffset,
angle::Result setupIndirectDrawHelper(const gl::Context *context,
gl::PrimitiveMode mode,
DirtyBits dirtyBitMask,
vk::CommandBuffer **commandBufferOut); vk::CommandBuffer **commandBufferOut);
angle::Result setupIndexedIndirectDraw(const gl::Context *context, angle::Result setupIndexedIndirectDraw(const gl::Context *context,
gl::PrimitiveMode mode, gl::PrimitiveMode mode,
gl::DrawElementsType indexType, gl::DrawElementsType indexType,
vk::CommandBuffer **commandBufferOut, vk::BufferHelper *indirectBuffer,
vk::Buffer **indirectBufferOut); VkDeviceSize indirectBufferOffset,
vk::CommandBuffer **commandBufferOut);
angle::Result setupLineLoopIndexedIndirectDraw(const gl::Context *context, angle::Result setupLineLoopIndexedIndirectDraw(const gl::Context *context,
gl::PrimitiveMode mode, gl::PrimitiveMode mode,
gl::DrawElementsType indexType, gl::DrawElementsType indexType,
const gl::Buffer *indirectBuffer, vk::BufferHelper *srcIndirectBuf,
VkDeviceSize indirectBufferOffset,
vk::CommandBuffer **commandBufferOut,
vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut);
angle::Result setupLineLoopIndirectDraw(const gl::Context *context,
gl::PrimitiveMode mode,
vk::BufferHelper *indirectBuffer,
VkDeviceSize indirectBufferOffset, VkDeviceSize indirectBufferOffset,
const gl::Buffer *indexBuffer,
vk::CommandBuffer **commandBufferOut, vk::CommandBuffer **commandBufferOut,
vk::Buffer **indirectBufferOut, vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut); VkDeviceSize *indirectBufferOffsetOut);
angle::Result setupLineLoopDraw(const gl::Context *context, angle::Result setupLineLoopDraw(const gl::Context *context,
......
...@@ -393,6 +393,14 @@ void UtilsVk::destroy(VkDevice device) ...@@ -393,6 +393,14 @@ void UtilsVk::destroy(VkDevice device)
{ {
program.destroy(device); program.destroy(device);
} }
for (vk::ShaderProgramHelper &program : mConvertIndirectLineLoopPrograms)
{
program.destroy(device);
}
for (vk::ShaderProgramHelper &program : mConvertIndexIndirectLineLoopPrograms)
{
program.destroy(device);
}
for (vk::ShaderProgramHelper &program : mConvertVertexPrograms) for (vk::ShaderProgramHelper &program : mConvertVertexPrograms)
{ {
program.destroy(device); program.destroy(device);
...@@ -515,10 +523,11 @@ angle::Result UtilsVk::ensureConvertIndexIndirectResourcesInitialized(ContextVk ...@@ -515,10 +523,11 @@ angle::Result UtilsVk::ensureConvertIndexIndirectResourcesInitialized(ContextVk
return angle::Result::Continue; return angle::Result::Continue;
} }
VkDescriptorPoolSize setSizes[3] = { VkDescriptorPoolSize setSizes[4] = {
{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // source index buffer
{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // dest index buffer {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // dest index buffer
{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // cmd buffer {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // source index buffer
{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // src indirect buffer
{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // dest indirect buffer
}; };
return ensureResourcesInitialized(contextVk, Function::ConvertIndexIndirectBuffer, setSizes, return ensureResourcesInitialized(contextVk, Function::ConvertIndexIndirectBuffer, setSizes,
...@@ -545,6 +554,24 @@ angle::Result UtilsVk::ensureConvertIndexIndirectLineLoopResourcesInitialized(Co ...@@ -545,6 +554,24 @@ angle::Result UtilsVk::ensureConvertIndexIndirectLineLoopResourcesInitialized(Co
sizeof(ConvertIndexIndirectLineLoopShaderParams)); sizeof(ConvertIndexIndirectLineLoopShaderParams));
} }
angle::Result UtilsVk::ensureConvertIndirectLineLoopResourcesInitialized(ContextVk *contextVk)
{
if (mPipelineLayouts[Function::ConvertIndirectLineLoopBuffer].valid())
{
return angle::Result::Continue;
}
VkDescriptorPoolSize setSizes[3] = {
{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // cmd buffer
{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // dest cmd buffer
{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, // dest index buffer
};
return ensureResourcesInitialized(contextVk, Function::ConvertIndirectLineLoopBuffer, setSizes,
ArraySize(setSizes),
sizeof(ConvertIndirectLineLoopShaderParams));
}
angle::Result UtilsVk::ensureConvertVertexResourcesInitialized(ContextVk *contextVk) angle::Result UtilsVk::ensureConvertVertexResourcesInitialized(ContextVk *contextVk)
{ {
if (mPipelineLayouts[Function::ConvertVertexBuffer].valid()) if (mPipelineLayouts[Function::ConvertVertexBuffer].valid())
...@@ -877,19 +904,25 @@ angle::Result UtilsVk::convertIndexBuffer(ContextVk *contextVk, ...@@ -877,19 +904,25 @@ angle::Result UtilsVk::convertIndexBuffer(ContextVk *contextVk,
} }
angle::Result UtilsVk::convertIndexIndirectBuffer(ContextVk *contextVk, angle::Result UtilsVk::convertIndexIndirectBuffer(ContextVk *contextVk,
vk::BufferHelper *cmdBuffer, vk::BufferHelper *srcIndirectBuf,
vk::BufferHelper *dest, vk::BufferHelper *srcIndexBuf,
vk::BufferHelper *src, vk::BufferHelper *dstIndirectBuf,
vk::BufferHelper *dstIndexBuf,
const ConvertIndexIndirectParameters &params) const ConvertIndexIndirectParameters &params)
{ {
ANGLE_TRY(ensureConvertIndexIndirectResourcesInitialized(contextVk)); ANGLE_TRY(ensureConvertIndexIndirectResourcesInitialized(contextVk));
vk::CommandBuffer *commandBuffer; vk::CommandBuffer *commandBuffer;
ANGLE_TRY(dest->recordCommands(contextVk, &commandBuffer)); ANGLE_TRY(dstIndexBuf->recordCommands(contextVk, &commandBuffer));
// Tell src we are going to read from it and dest it's being written to. // Tell src we are going to read from it and dest it's being written to.
src->onReadByBuffer(contextVk, dest, VK_ACCESS_SHADER_READ_BIT, VK_ACCESS_SHADER_WRITE_BIT); srcIndexBuf->onReadByBuffer(contextVk, dstIndexBuf, VK_ACCESS_SHADER_READ_BIT,
cmdBuffer->onReadByBuffer(contextVk, dest, VK_ACCESS_SHADER_READ_BIT, VK_ACCESS_SHADER_WRITE_BIT);
srcIndirectBuf->onReadByBuffer(contextVk, dstIndexBuf, VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_SHADER_WRITE_BIT);
ANGLE_TRY(dstIndirectBuf->recordCommands(contextVk, &commandBuffer));
srcIndirectBuf->onReadByBuffer(contextVk, dstIndirectBuf, VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_SHADER_WRITE_BIT); VK_ACCESS_SHADER_WRITE_BIT);
VkDescriptorSet descriptorSet; VkDescriptorSet descriptorSet;
...@@ -897,24 +930,26 @@ angle::Result UtilsVk::convertIndexIndirectBuffer(ContextVk *contextVk, ...@@ -897,24 +930,26 @@ angle::Result UtilsVk::convertIndexIndirectBuffer(ContextVk *contextVk,
ANGLE_TRY(allocateDescriptorSet(contextVk, Function::ConvertIndexIndirectBuffer, ANGLE_TRY(allocateDescriptorSet(contextVk, Function::ConvertIndexIndirectBuffer,
&descriptorPoolBinding, &descriptorSet)); &descriptorPoolBinding, &descriptorSet));
std::array<VkDescriptorBufferInfo, 3> buffers = {{ std::array<VkDescriptorBufferInfo, 4> buffers = {{
{dest->getBuffer().getHandle(), 0, VK_WHOLE_SIZE}, {dstIndexBuf->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{src->getBuffer().getHandle(), 0, VK_WHOLE_SIZE}, {srcIndexBuf->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{cmdBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE}, {srcIndirectBuf->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{dstIndirectBuf->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
}}; }};
VkWriteDescriptorSet writeInfo = {}; VkWriteDescriptorSet writeInfo = {};
writeInfo.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; writeInfo.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writeInfo.dstSet = descriptorSet; writeInfo.dstSet = descriptorSet;
writeInfo.dstBinding = kConvertIndexDestinationBinding; writeInfo.dstBinding = kConvertIndexDestinationBinding;
writeInfo.descriptorCount = 3; writeInfo.descriptorCount = 4;
writeInfo.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; writeInfo.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
writeInfo.pBufferInfo = buffers.data(); writeInfo.pBufferInfo = buffers.data();
vkUpdateDescriptorSets(contextVk->getDevice(), 1, &writeInfo, 0, nullptr); vkUpdateDescriptorSets(contextVk->getDevice(), 1, &writeInfo, 0, nullptr);
ConvertIndexIndirectShaderParams shaderParams = {params.indirectBufferOffset >> 2, ConvertIndexIndirectShaderParams shaderParams = {params.srcIndirectBufOffset >> 2,
params.dstOffset >> 2, params.maxIndex, 0}; params.dstIndexBufOffset >> 2, params.maxIndex,
params.dstIndirectBufOffset >> 2};
uint32_t flags = vk::InternalShader::ConvertIndex_comp::kIsIndirect; uint32_t flags = vk::InternalShader::ConvertIndex_comp::kIsIndirect;
if (contextVk->getState().isPrimitiveRestartEnabled()) if (contextVk->getState().isPrimitiveRestartEnabled())
...@@ -944,25 +979,25 @@ angle::Result UtilsVk::convertIndexIndirectBuffer(ContextVk *contextVk, ...@@ -944,25 +979,25 @@ angle::Result UtilsVk::convertIndexIndirectBuffer(ContextVk *contextVk,
angle::Result UtilsVk::convertLineLoopIndexIndirectBuffer( angle::Result UtilsVk::convertLineLoopIndexIndirectBuffer(
ContextVk *contextVk, ContextVk *contextVk,
vk::BufferHelper *srcIndirectBuffer, vk::BufferHelper *srcIndirectBuffer,
vk::BufferHelper *destIndirectBuffer, vk::BufferHelper *dstIndirectBuffer,
vk::BufferHelper *destIndexBuffer, vk::BufferHelper *dstIndexBuffer,
vk::BufferHelper *srcIndexBuffer, vk::BufferHelper *srcIndexBuffer,
const ConvertLineLoopIndexIndirectParameters &params) const ConvertLineLoopIndexIndirectParameters &params)
{ {
ANGLE_TRY(ensureConvertIndexIndirectLineLoopResourcesInitialized(contextVk)); ANGLE_TRY(ensureConvertIndexIndirectLineLoopResourcesInitialized(contextVk));
vk::CommandBuffer *commandBuffer; vk::CommandBuffer *commandBuffer;
ANGLE_TRY(destIndexBuffer->recordCommands(contextVk, &commandBuffer)); ANGLE_TRY(dstIndexBuffer->recordCommands(contextVk, &commandBuffer));
// Tell src we are going to read from it and dest it's being written to. // Tell src we are going to read from it and dest it's being written to.
srcIndexBuffer->onReadByBuffer(contextVk, destIndexBuffer, VK_ACCESS_SHADER_READ_BIT, srcIndexBuffer->onReadByBuffer(contextVk, dstIndexBuffer, VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_SHADER_WRITE_BIT); VK_ACCESS_SHADER_WRITE_BIT);
srcIndirectBuffer->onReadByBuffer(contextVk, destIndexBuffer, VK_ACCESS_SHADER_READ_BIT, srcIndirectBuffer->onReadByBuffer(contextVk, dstIndexBuffer, VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_SHADER_WRITE_BIT); VK_ACCESS_SHADER_WRITE_BIT);
ANGLE_TRY(destIndirectBuffer->recordCommands(contextVk, &commandBuffer)); ANGLE_TRY(dstIndirectBuffer->recordCommands(contextVk, &commandBuffer));
srcIndirectBuffer->onReadByBuffer(contextVk, destIndirectBuffer, VK_ACCESS_SHADER_READ_BIT, srcIndirectBuffer->onReadByBuffer(contextVk, dstIndirectBuffer, VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_SHADER_WRITE_BIT); VK_ACCESS_SHADER_WRITE_BIT);
VkDescriptorSet descriptorSet; VkDescriptorSet descriptorSet;
...@@ -971,10 +1006,10 @@ angle::Result UtilsVk::convertLineLoopIndexIndirectBuffer( ...@@ -971,10 +1006,10 @@ angle::Result UtilsVk::convertLineLoopIndexIndirectBuffer(
&descriptorPoolBinding, &descriptorSet)); &descriptorPoolBinding, &descriptorSet));
std::array<VkDescriptorBufferInfo, 4> buffers = {{ std::array<VkDescriptorBufferInfo, 4> buffers = {{
{srcIndirectBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE}, {dstIndexBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{destIndirectBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{destIndexBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{srcIndexBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE}, {srcIndexBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{srcIndirectBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{dstIndirectBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
}}; }};
VkWriteDescriptorSet writeInfo = {}; VkWriteDescriptorSet writeInfo = {};
...@@ -1002,8 +1037,73 @@ angle::Result UtilsVk::convertLineLoopIndexIndirectBuffer( ...@@ -1002,8 +1037,73 @@ angle::Result UtilsVk::convertLineLoopIndexIndirectBuffer(
&shader)); &shader));
ANGLE_TRY(setupProgram(contextVk, Function::ConvertIndexIndirectLineLoopBuffer, shader, nullptr, ANGLE_TRY(setupProgram(contextVk, Function::ConvertIndexIndirectLineLoopBuffer, shader, nullptr,
&mConvertIndexPrograms[flags], nullptr, descriptorSet, &shaderParams, &mConvertIndexIndirectLineLoopPrograms[flags], nullptr, descriptorSet,
sizeof(ConvertIndexIndirectLineLoopShaderParams), commandBuffer)); &shaderParams, sizeof(ConvertIndexIndirectLineLoopShaderParams),
commandBuffer));
commandBuffer->dispatch(1, 1, 1);
descriptorPoolBinding.reset();
return angle::Result::Continue;
}
angle::Result UtilsVk::convertLineLoopArrayIndirectBuffer(
ContextVk *contextVk,
vk::BufferHelper *srcIndirectBuffer,
vk::BufferHelper *destIndirectBuffer,
vk::BufferHelper *destIndexBuffer,
const ConvertLineLoopArrayIndirectParameters &params)
{
ANGLE_TRY(ensureConvertIndirectLineLoopResourcesInitialized(contextVk));
vk::CommandBuffer *commandBuffer;
ANGLE_TRY(destIndexBuffer->recordCommands(contextVk, &commandBuffer));
// Tell src we are going to read from it and dest it's being written to.
srcIndirectBuffer->onReadByBuffer(contextVk, destIndexBuffer, VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_SHADER_WRITE_BIT);
ANGLE_TRY(destIndirectBuffer->recordCommands(contextVk, &commandBuffer));
srcIndirectBuffer->onReadByBuffer(contextVk, destIndirectBuffer, VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_SHADER_WRITE_BIT);
VkDescriptorSet descriptorSet;
vk::RefCountedDescriptorPoolBinding descriptorPoolBinding;
ANGLE_TRY(allocateDescriptorSet(contextVk, Function::ConvertIndirectLineLoopBuffer,
&descriptorPoolBinding, &descriptorSet));
std::array<VkDescriptorBufferInfo, 3> buffers = {{
{srcIndirectBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{destIndirectBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
{destIndexBuffer->getBuffer().getHandle(), 0, VK_WHOLE_SIZE},
}};
VkWriteDescriptorSet writeInfo = {};
writeInfo.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writeInfo.dstSet = descriptorSet;
writeInfo.dstBinding = kConvertIndexDestinationBinding;
writeInfo.descriptorCount = 3;
writeInfo.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
writeInfo.pBufferInfo = buffers.data();
vkUpdateDescriptorSets(contextVk->getDevice(), 1, &writeInfo, 0, nullptr);
ConvertIndirectLineLoopShaderParams shaderParams = {params.indirectBufferOffset >> 2,
params.dstIndirectBufferOffset >> 2,
params.dstIndexBufferOffset >> 2};
uint32_t flags = 0;
vk::RefCounted<vk::ShaderAndSerial> *shader = nullptr;
ANGLE_TRY(
contextVk->getShaderLibrary().getConvertIndirectLineLoop_comp(contextVk, flags, &shader));
ANGLE_TRY(setupProgram(contextVk, Function::ConvertIndirectLineLoopBuffer, shader, nullptr,
&mConvertIndirectLineLoopPrograms[flags], nullptr, descriptorSet,
&shaderParams, sizeof(ConvertIndirectLineLoopShaderParams),
commandBuffer));
commandBuffer->dispatch(1, 1, 1); commandBuffer->dispatch(1, 1, 1);
......
...@@ -56,9 +56,10 @@ class UtilsVk : angle::NonCopyable ...@@ -56,9 +56,10 @@ class UtilsVk : angle::NonCopyable
struct ConvertIndexIndirectParameters struct ConvertIndexIndirectParameters
{ {
uint32_t indirectBufferOffset = 0; uint32_t srcIndirectBufOffset = 0;
uint32_t dstOffset = 0; uint32_t dstIndexBufOffset = 0;
uint32_t maxIndex = 0; uint32_t maxIndex = 0;
uint32_t dstIndirectBufOffset = 0;
}; };
struct ConvertLineLoopIndexIndirectParameters struct ConvertLineLoopIndexIndirectParameters
...@@ -69,6 +70,13 @@ class UtilsVk : angle::NonCopyable ...@@ -69,6 +70,13 @@ class UtilsVk : angle::NonCopyable
uint32_t is32Bit = 0; uint32_t is32Bit = 0;
}; };
struct ConvertLineLoopArrayIndirectParameters
{
uint32_t indirectBufferOffset = 0;
uint32_t dstIndirectBufferOffset = 0;
uint32_t dstIndexBufferOffset = 0;
};
struct ConvertVertexParameters struct ConvertVertexParameters
{ {
size_t vertexCount; size_t vertexCount;
...@@ -154,19 +162,27 @@ class UtilsVk : angle::NonCopyable ...@@ -154,19 +162,27 @@ class UtilsVk : angle::NonCopyable
vk::BufferHelper *src, vk::BufferHelper *src,
const ConvertIndexParameters &params); const ConvertIndexParameters &params);
angle::Result convertIndexIndirectBuffer(ContextVk *contextVk, angle::Result convertIndexIndirectBuffer(ContextVk *contextVk,
vk::BufferHelper *cmdBufferVk, vk::BufferHelper *srcIndirectBuf,
vk::BufferHelper *dest, vk::BufferHelper *srcIndexBuf,
vk::BufferHelper *src, vk::BufferHelper *dstIndirectBuf,
vk::BufferHelper *dstIndexBuf,
const ConvertIndexIndirectParameters &params); const ConvertIndexIndirectParameters &params);
angle::Result convertLineLoopIndexIndirectBuffer( angle::Result convertLineLoopIndexIndirectBuffer(
ContextVk *contextVk, ContextVk *contextVk,
vk::BufferHelper *cmdBufferVk, vk::BufferHelper *srcIndirectBuffer,
vk::BufferHelper *destCmdBufferVk, vk::BufferHelper *destIndirectBuffer,
vk::BufferHelper *dest, vk::BufferHelper *destIndexBuffer,
vk::BufferHelper *src, vk::BufferHelper *srcIndexBuffer,
const ConvertLineLoopIndexIndirectParameters &params); const ConvertLineLoopIndexIndirectParameters &params);
angle::Result convertLineLoopArrayIndirectBuffer(
ContextVk *contextVk,
vk::BufferHelper *srcIndirectBuffer,
vk::BufferHelper *destIndirectBuffer,
vk::BufferHelper *destIndexBuffer,
const ConvertLineLoopArrayIndirectParameters &params);
angle::Result convertVertexBuffer(ContextVk *contextVk, angle::Result convertVertexBuffer(ContextVk *contextVk,
vk::BufferHelper *dest, vk::BufferHelper *dest,
vk::BufferHelper *src, vk::BufferHelper *src,
...@@ -242,10 +258,10 @@ class UtilsVk : angle::NonCopyable ...@@ -242,10 +258,10 @@ class UtilsVk : angle::NonCopyable
struct ConvertIndexIndirectShaderParams struct ConvertIndexIndirectShaderParams
{ {
uint32_t cmdOffsetDiv4 = 0; uint32_t srcIndirectOffsetDiv4 = 0;
uint32_t dstOffsetDiv4 = 0; uint32_t dstOffsetDiv4 = 0;
uint32_t maxIndex = 0; uint32_t maxIndex = 0;
uint32_t _padding = 0; uint32_t dstIndirectOffsetDiv4 = 0;
}; };
struct ConvertIndexIndirectLineLoopShaderParams struct ConvertIndexIndirectLineLoopShaderParams
...@@ -256,6 +272,13 @@ class UtilsVk : angle::NonCopyable ...@@ -256,6 +272,13 @@ class UtilsVk : angle::NonCopyable
uint32_t isRestartEnabled = 0; uint32_t isRestartEnabled = 0;
}; };
struct ConvertIndirectLineLoopShaderParams
{
uint32_t cmdOffsetDiv4 = 0;
uint32_t dstCmdOffsetDiv4 = 0;
uint32_t dstOffsetDiv4 = 0;
};
struct ConvertVertexShaderParams struct ConvertVertexShaderParams
{ {
ConvertVertexShaderParams(); ConvertVertexShaderParams();
...@@ -358,9 +381,10 @@ class UtilsVk : angle::NonCopyable ...@@ -358,9 +381,10 @@ class UtilsVk : angle::NonCopyable
OverlayDraw = 8, OverlayDraw = 8,
ConvertIndexIndirectBuffer = 9, ConvertIndexIndirectBuffer = 9,
ConvertIndexIndirectLineLoopBuffer = 10, ConvertIndexIndirectLineLoopBuffer = 10,
ConvertIndirectLineLoopBuffer = 11,
InvalidEnum = 11, InvalidEnum = 12,
EnumCount = 11, EnumCount = 12,
}; };
// Common function that creates the pipeline for the specified function, binds it and prepares // Common function that creates the pipeline for the specified function, binds it and prepares
...@@ -396,6 +420,7 @@ class UtilsVk : angle::NonCopyable ...@@ -396,6 +420,7 @@ class UtilsVk : angle::NonCopyable
angle::Result ensureConvertIndexResourcesInitialized(ContextVk *contextVk); angle::Result ensureConvertIndexResourcesInitialized(ContextVk *contextVk);
angle::Result ensureConvertIndexIndirectResourcesInitialized(ContextVk *contextVk); angle::Result ensureConvertIndexIndirectResourcesInitialized(ContextVk *contextVk);
angle::Result ensureConvertIndexIndirectLineLoopResourcesInitialized(ContextVk *contextVk); angle::Result ensureConvertIndexIndirectLineLoopResourcesInitialized(ContextVk *contextVk);
angle::Result ensureConvertIndirectLineLoopResourcesInitialized(ContextVk *contextVk);
angle::Result ensureConvertVertexResourcesInitialized(ContextVk *contextVk); angle::Result ensureConvertVertexResourcesInitialized(ContextVk *contextVk);
angle::Result ensureImageClearResourcesInitialized(ContextVk *contextVk); angle::Result ensureImageClearResourcesInitialized(ContextVk *contextVk);
angle::Result ensureImageCopyResourcesInitialized(ContextVk *contextVk); angle::Result ensureImageCopyResourcesInitialized(ContextVk *contextVk);
...@@ -434,6 +459,10 @@ class UtilsVk : angle::NonCopyable ...@@ -434,6 +459,10 @@ class UtilsVk : angle::NonCopyable
vk::ShaderProgramHelper mBufferUtilsPrograms[vk::InternalShader::BufferUtils_comp::kArrayLen]; vk::ShaderProgramHelper mBufferUtilsPrograms[vk::InternalShader::BufferUtils_comp::kArrayLen];
vk::ShaderProgramHelper mConvertIndexPrograms[vk::InternalShader::ConvertIndex_comp::kArrayLen]; vk::ShaderProgramHelper mConvertIndexPrograms[vk::InternalShader::ConvertIndex_comp::kArrayLen];
vk::ShaderProgramHelper mConvertIndexIndirectLineLoopPrograms
[vk::InternalShader::ConvertIndexIndirectLineLoop_comp::kArrayLen];
vk::ShaderProgramHelper mConvertIndirectLineLoopPrograms
[vk::InternalShader::ConvertIndirectLineLoop_comp::kArrayLen];
vk::ShaderProgramHelper vk::ShaderProgramHelper
mConvertVertexPrograms[vk::InternalShader::ConvertVertex_comp::kArrayLen]; mConvertVertexPrograms[vk::InternalShader::ConvertVertex_comp::kArrayLen];
vk::ShaderProgramHelper mImageClearProgramVSOnly; vk::ShaderProgramHelper mImageClearProgramVSOnly;
......
...@@ -26,6 +26,7 @@ namespace ...@@ -26,6 +26,7 @@ namespace
{ {
constexpr size_t kDynamicVertexDataSize = 1024 * 1024; constexpr size_t kDynamicVertexDataSize = 1024 * 1024;
constexpr size_t kDynamicIndexDataSize = 1024 * 8; constexpr size_t kDynamicIndexDataSize = 1024 * 8;
constexpr size_t kDynamicIndirectDataSize = sizeof(VkDrawIndexedIndirectCommand) * 8;
ANGLE_INLINE bool BindingIsAligned(const gl::VertexBinding &binding, ANGLE_INLINE bool BindingIsAligned(const gl::VertexBinding &binding,
const angle::Format &angleFormat, const angle::Format &angleFormat,
...@@ -140,6 +141,8 @@ VertexArrayVk::VertexArrayVk(ContextVk *contextVk, const gl::VertexArrayState &s ...@@ -140,6 +141,8 @@ VertexArrayVk::VertexArrayVk(ContextVk *contextVk, const gl::VertexArrayState &s
kDynamicIndexDataSize, true); kDynamicIndexDataSize, true);
mTranslatedByteIndexData.init(renderer, vk::kIndexBufferUsageFlags, vk::kIndexBufferAlignment, mTranslatedByteIndexData.init(renderer, vk::kIndexBufferUsageFlags, vk::kIndexBufferAlignment,
kDynamicIndexDataSize, true); kDynamicIndexDataSize, true);
mTranslatedByteIndirectData.init(renderer, vk::kIndirectBufferUsageFlags,
vk::kIndirectBufferAlignment, kDynamicIndirectDataSize, true);
} }
VertexArrayVk::~VertexArrayVk() {} VertexArrayVk::~VertexArrayVk() {}
...@@ -155,6 +158,7 @@ void VertexArrayVk::destroy(const gl::Context *context) ...@@ -155,6 +158,7 @@ void VertexArrayVk::destroy(const gl::Context *context)
mDynamicVertexData.release(renderer); mDynamicVertexData.release(renderer);
mDynamicIndexData.release(renderer); mDynamicIndexData.release(renderer);
mTranslatedByteIndexData.release(renderer); mTranslatedByteIndexData.release(renderer);
mTranslatedByteIndirectData.release(renderer);
mLineLoopHelper.release(contextVk); mLineLoopHelper.release(contextVk);
} }
...@@ -186,44 +190,96 @@ angle::Result VertexArrayVk::convertIndexBufferGPU(ContextVk *contextVk, ...@@ -186,44 +190,96 @@ angle::Result VertexArrayVk::convertIndexBufferGPU(ContextVk *contextVk,
} }
angle::Result VertexArrayVk::convertIndexBufferIndirectGPU(ContextVk *contextVk, angle::Result VertexArrayVk::convertIndexBufferIndirectGPU(ContextVk *contextVk,
BufferVk *cmdBufferVk, vk::BufferHelper *srcIndirectBuf,
BufferVk *indexBufferVk, VkDeviceSize srcIndirectBufOffset,
const void *offset) vk::BufferHelper **indirectBufferVkOut,
VkDeviceSize *indirectBufferVkOffsetOut)
{ {
intptr_t indirectBufferOffset = reinterpret_cast<intptr_t>(offset); size_t srcDataSize = static_cast<size_t>(mCurrentElementArrayBuffer->getSize());
size_t srcDataSize = static_cast<size_t>(indexBufferVk->getSize()); ASSERT(mCurrentElementArrayBuffer ==
&vk::GetImpl(getState().getElementArrayBuffer())->getBuffer());
mTranslatedByteIndexData.releaseInFlightBuffers(contextVk); mTranslatedByteIndexData.releaseInFlightBuffers(contextVk);
mTranslatedByteIndirectData.releaseInFlightBuffers(contextVk);
vk::BufferHelper *srcIndexBuf = mCurrentElementArrayBuffer;
VkDeviceSize dstIndirectBufOffset;
VkDeviceSize dstIndexBufOffset;
ANGLE_TRY(mTranslatedByteIndexData.allocate(contextVk, sizeof(GLushort) * srcDataSize, nullptr, ANGLE_TRY(mTranslatedByteIndexData.allocate(contextVk, sizeof(GLushort) * srcDataSize, nullptr,
nullptr, &mCurrentElementArrayBufferOffset, nullptr, &dstIndexBufOffset, nullptr));
vk::BufferHelper *dstIndexBuf = mTranslatedByteIndexData.getCurrentBuffer();
ANGLE_TRY(mTranslatedByteIndirectData.allocate(contextVk, sizeof(VkDrawIndexedIndirectCommand),
nullptr, nullptr, &dstIndirectBufOffset,
nullptr)); nullptr));
mCurrentElementArrayBuffer = mTranslatedByteIndexData.getCurrentBuffer(); vk::BufferHelper *dstIndirectBuf = mTranslatedByteIndirectData.getCurrentBuffer();
vk::BufferHelper *dest = mTranslatedByteIndexData.getCurrentBuffer(); // Save new element array buffer
vk::BufferHelper *src = &indexBufferVk->getBuffer(); mCurrentElementArrayBuffer = dstIndexBuf;
mCurrentElementArrayBufferOffset = dstIndexBufOffset;
// Tell caller what new indirect buffer is
*indirectBufferVkOut = dstIndirectBuf;
*indirectBufferVkOffsetOut = dstIndirectBufOffset;
// Copy relevant section of the source into destination at allocated offset. Note that the // Copy relevant section of the source into destination at allocated offset. Note that the
// offset returned by allocate() above is in bytes. As is the indices offset pointer. // offset returned by allocate() above is in bytes. As is the indices offset pointer.
UtilsVk::ConvertIndexIndirectParameters params = {}; UtilsVk::ConvertIndexIndirectParameters params = {};
params.indirectBufferOffset = static_cast<uint32_t>(indirectBufferOffset); params.srcIndirectBufOffset = static_cast<uint32_t>(srcIndirectBufOffset);
params.dstOffset = static_cast<uint32_t>(mCurrentElementArrayBufferOffset); params.dstIndexBufOffset = static_cast<uint32_t>(dstIndexBufOffset);
params.maxIndex = static_cast<uint32_t>(indexBufferVk->getSize()); params.maxIndex = static_cast<uint32_t>(srcDataSize);
params.dstIndirectBufOffset = static_cast<uint32_t>(dstIndirectBufOffset);
return contextVk->getUtils().convertIndexIndirectBuffer(contextVk, &cmdBufferVk->getBuffer(), return contextVk->getUtils().convertIndexIndirectBuffer(contextVk, srcIndirectBuf, srcIndexBuf,
dest, src, params); dstIndirectBuf, dstIndexBuf, params);
} }
angle::Result VertexArrayVk::handleLineLoopIndirect(ContextVk *contextVk, angle::Result VertexArrayVk::handleLineLoopIndexIndirect(ContextVk *contextVk,
BufferVk *indirectBufferVk,
gl::DrawElementsType glIndexType, gl::DrawElementsType glIndexType,
vk::BufferHelper *srcIndirectBuf,
VkDeviceSize indirectBufferOffset, VkDeviceSize indirectBufferOffset,
vk::BufferHelper **indirectBufferOut, vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut) VkDeviceSize *indirectBufferOffsetOut)
{ {
ANGLE_TRY(mLineLoopHelper.streamIndicesIndirect( ANGLE_TRY(mLineLoopHelper.streamIndicesIndirect(
contextVk, glIndexType, mCurrentElementArrayBuffer, &indirectBufferVk->getBuffer(), contextVk, glIndexType, mCurrentElementArrayBuffer, srcIndirectBuf, indirectBufferOffset,
indirectBufferOffset, &mCurrentElementArrayBuffer, &mCurrentElementArrayBufferOffset, &mCurrentElementArrayBuffer, &mCurrentElementArrayBufferOffset, indirectBufferOut,
indirectBufferOffsetOut));
return angle::Result::Continue;
}
angle::Result VertexArrayVk::handleLineLoopIndirectDraw(const gl::Context *context,
vk::BufferHelper *indirectBufferVk,
VkDeviceSize indirectBufferOffset,
vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut)
{
size_t maxVertexCount = 0;
ContextVk *contextVk = vk::GetImpl(context);
const gl::AttributesMask activeAttribs =
context->getStateCache().getActiveBufferedAttribsMask();
const auto &attribs = mState.getVertexAttributes();
const auto &bindings = mState.getVertexBindings();
for (size_t attribIndex : activeAttribs)
{
const gl::VertexAttribute &attrib = attribs[attribIndex];
ASSERT(attrib.enabled);
VkDeviceSize bufSize = this->getCurrentArrayBuffers()[attribIndex]->getSize();
const gl::VertexBinding &binding = bindings[attrib.bindingIndex];
size_t stride = binding.getStride();
size_t vertexCount = static_cast<size_t>(bufSize / stride);
if (vertexCount > maxVertexCount)
{
maxVertexCount = vertexCount;
}
}
ANGLE_TRY(mLineLoopHelper.streamArrayIndirect(contextVk, maxVertexCount + 1, indirectBufferVk,
indirectBufferOffset, &mCurrentElementArrayBuffer,
&mCurrentElementArrayBufferOffset,
indirectBufferOut, indirectBufferOffsetOut)); indirectBufferOut, indirectBufferOffsetOut));
return angle::Result::Continue; return angle::Result::Continue;
...@@ -502,7 +558,7 @@ angle::Result VertexArrayVk::syncDirtyAttrib(ContextVk *contextVk, ...@@ -502,7 +558,7 @@ angle::Result VertexArrayVk::syncDirtyAttrib(ContextVk *contextVk,
(binding.getDivisor() > renderer->getMaxVertexAttribDivisor()) || (bufferGL == nullptr); (binding.getDivisor() > renderer->getMaxVertexAttribDivisor()) || (bufferGL == nullptr);
mStreamingVertexAttribsMask.set(attribIndex, isStreamingVertexAttrib); mStreamingVertexAttribsMask.set(attribIndex, isStreamingVertexAttrib);
if (bufferGL) if (!isStreamingVertexAttrib)
{ {
BufferVk *bufferVk = vk::GetImpl(bufferGL); BufferVk *bufferVk = vk::GetImpl(bufferGL);
const angle::Format &angleFormat = vertexFormat.angleFormat(); const angle::Format &angleFormat = vertexFormat.angleFormat();
...@@ -644,6 +700,7 @@ angle::Result VertexArrayVk::updateStreamedAttribs(const gl::Context *context, ...@@ -644,6 +700,7 @@ angle::Result VertexArrayVk::updateStreamedAttribs(const gl::Context *context,
const gl::VertexBinding &binding = bindings[attrib.bindingIndex]; const gl::VertexBinding &binding = bindings[attrib.bindingIndex];
const vk::Format &vertexFormat = renderer->getFormat(attrib.format->id); const vk::Format &vertexFormat = renderer->getFormat(attrib.format->id);
GLuint stride = vertexFormat.bufferFormat().pixelBytes; GLuint stride = vertexFormat.bufferFormat().pixelBytes;
ASSERT(GetVertexInputAlignment(vertexFormat) <= vk::kVertexBufferAlignment); ASSERT(GetVertexInputAlignment(vertexFormat) <= vk::kVertexBufferAlignment);
...@@ -663,7 +720,7 @@ angle::Result VertexArrayVk::updateStreamedAttribs(const gl::Context *context, ...@@ -663,7 +720,7 @@ angle::Result VertexArrayVk::updateStreamedAttribs(const gl::Context *context,
bufferVk = vk::GetImpl(binding.getBuffer().get()); bufferVk = vk::GetImpl(binding.getBuffer().get());
void *buffSrc = nullptr; void *buffSrc = nullptr;
ANGLE_TRY(bufferVk->mapImpl(contextVk, &buffSrc)); ANGLE_TRY(bufferVk->mapImpl(contextVk, &buffSrc));
src = reinterpret_cast<const uint8_t *>(buffSrc); src = reinterpret_cast<const uint8_t *>(buffSrc) + binding.getOffset();
} }
// Divisor will be set to 1 & so update buffer to have 1 attrib per instance // Divisor will be set to 1 & so update buffer to have 1 attrib per instance
size_t bytesToAllocate = instanceCount * stride; size_t bytesToAllocate = instanceCount * stride;
......
...@@ -52,9 +52,15 @@ class VertexArrayVk : public VertexArrayImpl ...@@ -52,9 +52,15 @@ class VertexArrayVk : public VertexArrayImpl
const void *indices, const void *indices,
uint32_t *indexCountOut); uint32_t *indexCountOut);
angle::Result handleLineLoopIndirect(ContextVk *contextVk, angle::Result handleLineLoopIndexIndirect(ContextVk *contextVk,
BufferVk *indirectBufferVk,
gl::DrawElementsType glIndexType, gl::DrawElementsType glIndexType,
vk::BufferHelper *srcIndirectBuf,
VkDeviceSize indirectBufferOffset,
vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut);
angle::Result handleLineLoopIndirectDraw(const gl::Context *context,
vk::BufferHelper *indirectBufferVk,
VkDeviceSize indirectBufferOffset, VkDeviceSize indirectBufferOffset,
vk::BufferHelper **indirectBufferOut, vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut); VkDeviceSize *indirectBufferOffsetOut);
...@@ -91,9 +97,10 @@ class VertexArrayVk : public VertexArrayImpl ...@@ -91,9 +97,10 @@ class VertexArrayVk : public VertexArrayImpl
const void *indices); const void *indices);
angle::Result convertIndexBufferIndirectGPU(ContextVk *contextVk, angle::Result convertIndexBufferIndirectGPU(ContextVk *contextVk,
BufferVk *cmdBufferVk, vk::BufferHelper *srcIndirectBuf,
BufferVk *indexBufferVk, VkDeviceSize srcIndirectBufOffset,
const void *indices); vk::BufferHelper **indirectBufferVkOut,
VkDeviceSize *indirectBufferVkOffsetOut);
angle::Result convertIndexBufferCPU(ContextVk *contextVk, angle::Result convertIndexBufferCPU(ContextVk *contextVk,
gl::DrawElementsType indexType, gl::DrawElementsType indexType,
...@@ -138,6 +145,7 @@ class VertexArrayVk : public VertexArrayImpl ...@@ -138,6 +145,7 @@ class VertexArrayVk : public VertexArrayImpl
vk::DynamicBuffer mDynamicVertexData; vk::DynamicBuffer mDynamicVertexData;
vk::DynamicBuffer mDynamicIndexData; vk::DynamicBuffer mDynamicIndexData;
vk::DynamicBuffer mTranslatedByteIndexData; vk::DynamicBuffer mTranslatedByteIndexData;
vk::DynamicBuffer mTranslatedByteIndirectData;
vk::LineLoopHelper mLineLoopHelper; vk::LineLoopHelper mLineLoopHelper;
Optional<GLint> mLineLoopBufferFirstIndex; Optional<GLint> mLineLoopBufferFirstIndex;
......
...@@ -11,113 +11,113 @@ const uint32_t kConvertIndex_comp_00000000[] = { ...@@ -11,113 +11,113 @@ const uint32_t kConvertIndex_comp_00000000[] = {
0x56637273,0x65756c61,0x00000000,0x00050005,0x0000000e,0x65646e69,0x646e4978,0x00007865, 0x56637273,0x65756c61,0x00000000,0x00050005,0x0000000e,0x65646e69,0x646e4978,0x00007865,
0x00050005,0x0000000f,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000012,0x49637273, 0x00050005,0x0000000f,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000012,0x49637273,
0x7865646e,0x00000000,0x00060005,0x00000014,0x68737550,0x736e6f43,0x746e6174,0x00000073, 0x7865646e,0x00000000,0x00060005,0x00000014,0x68737550,0x736e6f43,0x746e6174,0x00000073,
0x00060006,0x00000014,0x00000000,0x4f637273,0x65736666,0x00000074,0x00070006,0x00000014, 0x00070006,0x00000014,0x00000000,0x49637273,0x7865646e,0x7366664f,0x00007465,0x00090006,
0x00000001,0x4f747364,0x65736666,0x76694474,0x00000034,0x00060006,0x00000014,0x00000002, 0x00000014,0x00000001,0x49747364,0x7865646e,0x4f667542,0x65736666,0x76694474,0x00000034,
0x4978616d,0x7865646e,0x00000000,0x00060006,0x00000014,0x00000003,0x6461705f,0x676e6964, 0x00060006,0x00000014,0x00000002,0x4978616d,0x7865646e,0x00000000,0x00060006,0x00000014,
0x00000000,0x00030005,0x00000016,0x00000000,0x00050005,0x0000001d,0x42637273,0x6b636f6c, 0x00000003,0x6461705f,0x676e6964,0x00000000,0x00030005,0x00000016,0x00000000,0x00050005,
0x00000000,0x00030005,0x0000001f,0x00637273,0x00050006,0x0000001f,0x00000000,0x44637273, 0x0000001d,0x42637273,0x6b636f6c,0x00000000,0x00030005,0x0000001f,0x00637273,0x00060006,
0x00617461,0x00030005,0x00000021,0x00000000,0x00060005,0x00000028,0x43637273,0x6f706d6f, 0x0000001f,0x00000000,0x49637273,0x7865646e,0x00667542,0x00030005,0x00000021,0x00000000,
0x746e656e,0x00000000,0x00040005,0x0000002c,0x756c6176,0x00000065,0x00050005,0x0000003e, 0x00060005,0x00000028,0x43637273,0x6f706d6f,0x746e656e,0x00000000,0x00040005,0x0000002c,
0x73726966,0x646e4974,0x00007865,0x00050005,0x00000040,0x49646e65,0x7865646e,0x00000000, 0x756c6176,0x00000065,0x00050005,0x0000003e,0x73726966,0x646e4974,0x00007865,0x00050005,
0x00040005,0x00000045,0x65646e69,0x00000078,0x00080005,0x00000048,0x475f6c67,0x61626f6c, 0x00000040,0x49646e65,0x7865646e,0x00000000,0x00040005,0x00000045,0x65646e69,0x00000078,
0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00050005,0x00000058,0x56747364,0x65756c61, 0x00080005,0x00000048,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,
0x00000000,0x00050005,0x0000005e,0x56637273,0x65756c61,0x00000000,0x00040005,0x0000005f, 0x00050005,0x00000058,0x56747364,0x65756c61,0x00000000,0x00050005,0x0000005e,0x56637273,
0x61726170,0x0000006d,0x00040005,0x00000062,0x61726170,0x0000006d,0x00040005,0x00000064, 0x65756c61,0x00000000,0x00040005,0x0000005f,0x61726170,0x0000006d,0x00040005,0x00000062,
0x61726170,0x0000006d,0x00040005,0x00000065,0x61726170,0x0000006d,0x00050005,0x00000070, 0x61726170,0x0000006d,0x00040005,0x00000064,0x61726170,0x0000006d,0x00040005,0x00000065,
0x56637273,0x65756c61,0x00000000,0x00040005,0x00000073,0x61726170,0x0000006d,0x00040005, 0x61726170,0x0000006d,0x00050005,0x00000070,0x56637273,0x65756c61,0x00000000,0x00040005,
0x00000075,0x61726170,0x0000006d,0x00040005,0x00000077,0x61726170,0x0000006d,0x00040005, 0x00000073,0x61726170,0x0000006d,0x00040005,0x00000075,0x61726170,0x0000006d,0x00040005,
0x00000078,0x61726170,0x0000006d,0x00030005,0x0000007d,0x00747364,0x00050006,0x0000007d, 0x00000077,0x61726170,0x0000006d,0x00040005,0x00000078,0x61726170,0x0000006d,0x00030005,
0x00000000,0x44747364,0x00617461,0x00030005,0x0000007f,0x00000000,0x00050048,0x00000014, 0x0000007d,0x00747364,0x00060006,0x0000007d,0x00000000,0x49747364,0x7865646e,0x00667542,
0x00000000,0x00000023,0x00000000,0x00050048,0x00000014,0x00000001,0x00000023,0x00000004, 0x00030005,0x0000007f,0x00000000,0x00050048,0x00000014,0x00000000,0x00000023,0x00000000,
0x00050048,0x00000014,0x00000002,0x00000023,0x00000008,0x00050048,0x00000014,0x00000003, 0x00050048,0x00000014,0x00000001,0x00000023,0x00000004,0x00050048,0x00000014,0x00000002,
0x00000023,0x0000000c,0x00030047,0x00000014,0x00000002,0x00040047,0x0000001e,0x00000006, 0x00000023,0x00000008,0x00050048,0x00000014,0x00000003,0x00000023,0x0000000c,0x00030047,
0x00000004,0x00040048,0x0000001f,0x00000000,0x00000018,0x00050048,0x0000001f,0x00000000, 0x00000014,0x00000002,0x00040047,0x0000001e,0x00000006,0x00000004,0x00040048,0x0000001f,
0x00000023,0x00000000,0x00030047,0x0000001f,0x00000003,0x00040047,0x00000021,0x00000022, 0x00000000,0x00000018,0x00050048,0x0000001f,0x00000000,0x00000023,0x00000000,0x00030047,
0x00000000,0x00040047,0x00000021,0x00000021,0x00000001,0x00040047,0x00000048,0x0000000b, 0x0000001f,0x00000003,0x00040047,0x00000021,0x00000022,0x00000000,0x00040047,0x00000021,
0x0000001c,0x00040047,0x0000007c,0x00000006,0x00000004,0x00050048,0x0000007d,0x00000000, 0x00000021,0x00000001,0x00040047,0x00000048,0x0000000b,0x0000001c,0x00040047,0x0000007c,
0x00000023,0x00000000,0x00030047,0x0000007d,0x00000003,0x00040047,0x0000007f,0x00000022, 0x00000006,0x00000004,0x00050048,0x0000007d,0x00000000,0x00000023,0x00000000,0x00030047,
0x00000000,0x00040047,0x0000007f,0x00000021,0x00000000,0x00040047,0x00000088,0x0000000b, 0x0000007d,0x00000003,0x00040047,0x0000007f,0x00000022,0x00000000,0x00040047,0x0000007f,
0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006, 0x00000021,0x00000000,0x00040047,0x00000088,0x0000000b,0x00000019,0x00020013,0x00000002,
0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008, 0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,
0x00000006,0x00000007,0x00060021,0x0000000c,0x00000002,0x00000007,0x00000007,0x00000007, 0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00060021,
0x0006001e,0x00000014,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000015, 0x0000000c,0x00000002,0x00000007,0x00000007,0x00000007,0x0006001e,0x00000014,0x00000006,
0x00000009,0x00000014,0x0004003b,0x00000015,0x00000016,0x00000009,0x00040015,0x00000017, 0x00000006,0x00000006,0x00000006,0x00040020,0x00000015,0x00000009,0x00000014,0x0004003b,
0x00000020,0x00000001,0x0004002b,0x00000017,0x00000018,0x00000000,0x00040020,0x00000019, 0x00000015,0x00000016,0x00000009,0x00040015,0x00000017,0x00000020,0x00000001,0x0004002b,
0x00000009,0x00000006,0x0003001d,0x0000001e,0x00000006,0x0003001e,0x0000001f,0x0000001e, 0x00000017,0x00000018,0x00000000,0x00040020,0x00000019,0x00000009,0x00000006,0x0003001d,
0x00040020,0x00000020,0x00000002,0x0000001f,0x0004003b,0x00000020,0x00000021,0x00000002, 0x0000001e,0x00000006,0x0003001e,0x0000001f,0x0000001e,0x00040020,0x00000020,0x00000002,
0x0004002b,0x00000017,0x00000023,0x00000002,0x00040020,0x00000025,0x00000002,0x00000006, 0x0000001f,0x0004003b,0x00000020,0x00000021,0x00000002,0x0004002b,0x00000017,0x00000023,
0x0004002b,0x00000006,0x0000002a,0x00000003,0x0004002b,0x00000017,0x0000002f,0x00000003, 0x00000002,0x00040020,0x00000025,0x00000002,0x00000006,0x0004002b,0x00000006,0x0000002a,
0x0004002b,0x00000006,0x00000032,0x000000ff,0x0004002b,0x00000017,0x00000039,0x00000004, 0x00000003,0x0004002b,0x00000017,0x0000002f,0x00000003,0x0004002b,0x00000006,0x00000032,
0x0004002b,0x00000006,0x0000003f,0x00000000,0x00040017,0x00000046,0x00000006,0x00000003, 0x000000ff,0x0004002b,0x00000017,0x00000039,0x00000004,0x0004002b,0x00000006,0x0000003f,
0x00040020,0x00000047,0x00000001,0x00000046,0x0004003b,0x00000047,0x00000048,0x00000001, 0x00000000,0x00040017,0x00000046,0x00000006,0x00000003,0x00040020,0x00000047,0x00000001,
0x00040020,0x00000049,0x00000001,0x00000006,0x0004002b,0x00000017,0x0000004d,0x00000001, 0x00000046,0x0004003b,0x00000047,0x00000048,0x00000001,0x00040020,0x00000049,0x00000001,
0x00020014,0x00000053,0x0004002b,0x00000006,0x0000006a,0x00000001,0x0003001d,0x0000007c, 0x00000006,0x0004002b,0x00000017,0x0000004d,0x00000001,0x00020014,0x00000053,0x0004002b,
0x00000006,0x0003001e,0x0000007d,0x0000007c,0x00040020,0x0000007e,0x00000002,0x0000007d, 0x00000006,0x0000006a,0x00000001,0x0003001d,0x0000007c,0x00000006,0x0003001e,0x0000007d,
0x0004003b,0x0000007e,0x0000007f,0x00000002,0x0004002b,0x00000006,0x00000087,0x00000040, 0x0000007c,0x00040020,0x0000007e,0x00000002,0x0000007d,0x0004003b,0x0000007e,0x0000007f,
0x0006002c,0x00000046,0x00000088,0x00000087,0x0000006a,0x0000006a,0x00050036,0x00000002, 0x00000002,0x0004002b,0x00000006,0x00000087,0x00000040,0x0006002c,0x00000046,0x00000088,
0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x0000003e, 0x00000087,0x0000006a,0x0000006a,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,
0x00000007,0x0004003b,0x00000007,0x00000040,0x00000007,0x0004003b,0x00000007,0x00000045, 0x000200f8,0x00000005,0x0004003b,0x00000007,0x0000003e,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x00000058,0x00000007,0x0004003b,0x00000007,0x0000005e, 0x00000040,0x00000007,0x0004003b,0x00000007,0x00000045,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x0000005f,0x00000007,0x0004003b,0x00000007,0x00000062, 0x00000058,0x00000007,0x0004003b,0x00000007,0x0000005e,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x00000064,0x00000007,0x0004003b,0x00000007,0x00000065, 0x0000005f,0x00000007,0x0004003b,0x00000007,0x00000062,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x00000070,0x00000007,0x0004003b,0x00000007,0x00000073, 0x00000064,0x00000007,0x0004003b,0x00000007,0x00000065,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x00000075,0x00000007,0x0004003b,0x00000007,0x00000077, 0x00000070,0x00000007,0x0004003b,0x00000007,0x00000073,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x00000078,0x00000007,0x0003003e,0x0000003e,0x0000003f, 0x00000075,0x00000007,0x0004003b,0x00000007,0x00000077,0x00000007,0x0004003b,0x00000007,
0x0004003d,0x00000006,0x00000041,0x0000003e,0x00050041,0x00000019,0x00000042,0x00000016, 0x00000078,0x00000007,0x0003003e,0x0000003e,0x0000003f,0x0004003d,0x00000006,0x00000041,
0x00000023,0x0004003d,0x00000006,0x00000043,0x00000042,0x00050080,0x00000006,0x00000044, 0x0000003e,0x00050041,0x00000019,0x00000042,0x00000016,0x00000023,0x0004003d,0x00000006,
0x00000041,0x00000043,0x0003003e,0x00000040,0x00000044,0x00050041,0x00000049,0x0000004a, 0x00000043,0x00000042,0x00050080,0x00000006,0x00000044,0x00000041,0x00000043,0x0003003e,
0x00000048,0x0000003f,0x0004003d,0x00000006,0x0000004b,0x0000004a,0x0004003d,0x00000006, 0x00000040,0x00000044,0x00050041,0x00000049,0x0000004a,0x00000048,0x0000003f,0x0004003d,
0x0000004c,0x0000003e,0x000500c2,0x00000006,0x0000004e,0x0000004c,0x0000004d,0x00050080, 0x00000006,0x0000004b,0x0000004a,0x0004003d,0x00000006,0x0000004c,0x0000003e,0x000500c2,
0x00000006,0x0000004f,0x0000004b,0x0000004e,0x000500c4,0x00000006,0x00000050,0x0000004f, 0x00000006,0x0000004e,0x0000004c,0x0000004d,0x00050080,0x00000006,0x0000004f,0x0000004b,
0x0000004d,0x0003003e,0x00000045,0x00000050,0x0004003d,0x00000006,0x00000051,0x00000045, 0x0000004e,0x000500c4,0x00000006,0x00000050,0x0000004f,0x0000004d,0x0003003e,0x00000045,
0x0004003d,0x00000006,0x00000052,0x00000040,0x000500ae,0x00000053,0x00000054,0x00000051, 0x00000050,0x0004003d,0x00000006,0x00000051,0x00000045,0x0004003d,0x00000006,0x00000052,
0x00000052,0x000300f7,0x00000056,0x00000000,0x000400fa,0x00000054,0x00000055,0x00000056, 0x00000040,0x000500ae,0x00000053,0x00000054,0x00000051,0x00000052,0x000300f7,0x00000056,
0x000200f8,0x00000055,0x000100fd,0x000200f8,0x00000056,0x0003003e,0x00000058,0x0000003f, 0x00000000,0x000400fa,0x00000054,0x00000055,0x00000056,0x000200f8,0x00000055,0x000100fd,
0x0004003d,0x00000006,0x00000059,0x00000045,0x0004003d,0x00000006,0x0000005a,0x0000003e, 0x000200f8,0x00000056,0x0003003e,0x00000058,0x0000003f,0x0004003d,0x00000006,0x00000059,
0x000500ae,0x00000053,0x0000005b,0x00000059,0x0000005a,0x000300f7,0x0000005d,0x00000000, 0x00000045,0x0004003d,0x00000006,0x0000005a,0x0000003e,0x000500ae,0x00000053,0x0000005b,
0x000400fa,0x0000005b,0x0000005c,0x0000005d,0x000200f8,0x0000005c,0x0004003d,0x00000006, 0x00000059,0x0000005a,0x000300f7,0x0000005d,0x00000000,0x000400fa,0x0000005b,0x0000005c,
0x00000060,0x00000045,0x0003003e,0x0000005f,0x00000060,0x00050039,0x00000006,0x00000061, 0x0000005d,0x000200f8,0x0000005c,0x0004003d,0x00000006,0x00000060,0x00000045,0x0003003e,
0x0000000a,0x0000005f,0x0003003e,0x0000005e,0x00000061,0x0004003d,0x00000006,0x00000063, 0x0000005f,0x00000060,0x00050039,0x00000006,0x00000061,0x0000000a,0x0000005f,0x0003003e,
0x0000005e,0x0003003e,0x00000062,0x00000063,0x0003003e,0x00000064,0x0000003f,0x0004003d, 0x0000005e,0x00000061,0x0004003d,0x00000006,0x00000063,0x0000005e,0x0003003e,0x00000062,
0x00000006,0x00000066,0x00000058,0x0003003e,0x00000065,0x00000066,0x00070039,0x00000002, 0x00000063,0x0003003e,0x00000064,0x0000003f,0x0004003d,0x00000006,0x00000066,0x00000058,
0x00000067,0x00000010,0x00000062,0x00000064,0x00000065,0x0004003d,0x00000006,0x00000068, 0x0003003e,0x00000065,0x00000066,0x00070039,0x00000002,0x00000067,0x00000010,0x00000062,
0x00000065,0x0003003e,0x00000058,0x00000068,0x000200f9,0x0000005d,0x000200f8,0x0000005d, 0x00000064,0x00000065,0x0004003d,0x00000006,0x00000068,0x00000065,0x0003003e,0x00000058,
0x0004003d,0x00000006,0x00000069,0x00000045,0x00050080,0x00000006,0x0000006b,0x00000069, 0x00000068,0x000200f9,0x0000005d,0x000200f8,0x0000005d,0x0004003d,0x00000006,0x00000069,
0x0000006a,0x0004003d,0x00000006,0x0000006c,0x00000040,0x000500b0,0x00000053,0x0000006d, 0x00000045,0x00050080,0x00000006,0x0000006b,0x00000069,0x0000006a,0x0004003d,0x00000006,
0x0000006b,0x0000006c,0x000300f7,0x0000006f,0x00000000,0x000400fa,0x0000006d,0x0000006e, 0x0000006c,0x00000040,0x000500b0,0x00000053,0x0000006d,0x0000006b,0x0000006c,0x000300f7,
0x0000006f,0x000200f8,0x0000006e,0x0004003d,0x00000006,0x00000071,0x00000045,0x00050080, 0x0000006f,0x00000000,0x000400fa,0x0000006d,0x0000006e,0x0000006f,0x000200f8,0x0000006e,
0x00000006,0x00000072,0x00000071,0x0000006a,0x0003003e,0x00000073,0x00000072,0x00050039, 0x0004003d,0x00000006,0x00000071,0x00000045,0x00050080,0x00000006,0x00000072,0x00000071,
0x00000006,0x00000074,0x0000000a,0x00000073,0x0003003e,0x00000070,0x00000074,0x0004003d, 0x0000006a,0x0003003e,0x00000073,0x00000072,0x00050039,0x00000006,0x00000074,0x0000000a,
0x00000006,0x00000076,0x00000070,0x0003003e,0x00000075,0x00000076,0x0003003e,0x00000077, 0x00000073,0x0003003e,0x00000070,0x00000074,0x0004003d,0x00000006,0x00000076,0x00000070,
0x0000006a,0x0004003d,0x00000006,0x00000079,0x00000058,0x0003003e,0x00000078,0x00000079, 0x0003003e,0x00000075,0x00000076,0x0003003e,0x00000077,0x0000006a,0x0004003d,0x00000006,
0x00070039,0x00000002,0x0000007a,0x00000010,0x00000075,0x00000077,0x00000078,0x0004003d, 0x00000079,0x00000058,0x0003003e,0x00000078,0x00000079,0x00070039,0x00000002,0x0000007a,
0x00000006,0x0000007b,0x00000078,0x0003003e,0x00000058,0x0000007b,0x000200f9,0x0000006f, 0x00000010,0x00000075,0x00000077,0x00000078,0x0004003d,0x00000006,0x0000007b,0x00000078,
0x000200f8,0x0000006f,0x00050041,0x00000019,0x00000080,0x00000016,0x0000004d,0x0004003d, 0x0003003e,0x00000058,0x0000007b,0x000200f9,0x0000006f,0x000200f8,0x0000006f,0x00050041,
0x00000006,0x00000081,0x00000080,0x00050041,0x00000049,0x00000082,0x00000048,0x0000003f, 0x00000019,0x00000080,0x00000016,0x0000004d,0x0004003d,0x00000006,0x00000081,0x00000080,
0x0004003d,0x00000006,0x00000083,0x00000082,0x00050080,0x00000006,0x00000084,0x00000081, 0x00050041,0x00000049,0x00000082,0x00000048,0x0000003f,0x0004003d,0x00000006,0x00000083,
0x00000083,0x0004003d,0x00000006,0x00000085,0x00000058,0x00060041,0x00000025,0x00000086, 0x00000082,0x00050080,0x00000006,0x00000084,0x00000081,0x00000083,0x0004003d,0x00000006,
0x0000007f,0x00000018,0x00000084,0x0003003e,0x00000086,0x00000085,0x000100fd,0x00010038, 0x00000085,0x00000058,0x00060041,0x00000025,0x00000086,0x0000007f,0x00000018,0x00000084,
0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009, 0x0003003e,0x00000086,0x00000085,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,
0x000200f8,0x0000000b,0x0004003b,0x00000007,0x00000012,0x00000007,0x0004003b,0x00000007, 0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,
0x0000001d,0x00000007,0x0004003b,0x00000007,0x00000028,0x00000007,0x0004003b,0x00000007, 0x00000007,0x00000012,0x00000007,0x0004003b,0x00000007,0x0000001d,0x00000007,0x0004003b,
0x0000002c,0x00000007,0x0004003d,0x00000006,0x00000013,0x00000009,0x00050041,0x00000019, 0x00000007,0x00000028,0x00000007,0x0004003b,0x00000007,0x0000002c,0x00000007,0x0004003d,
0x0000001a,0x00000016,0x00000018,0x0004003d,0x00000006,0x0000001b,0x0000001a,0x00050080, 0x00000006,0x00000013,0x00000009,0x00050041,0x00000019,0x0000001a,0x00000016,0x00000018,
0x00000006,0x0000001c,0x00000013,0x0000001b,0x0003003e,0x00000012,0x0000001c,0x0004003d, 0x0004003d,0x00000006,0x0000001b,0x0000001a,0x00050080,0x00000006,0x0000001c,0x00000013,
0x00000006,0x00000022,0x00000012,0x000500c2,0x00000006,0x00000024,0x00000022,0x00000023, 0x0000001b,0x0003003e,0x00000012,0x0000001c,0x0004003d,0x00000006,0x00000022,0x00000012,
0x00060041,0x00000025,0x00000026,0x00000021,0x00000018,0x00000024,0x0004003d,0x00000006, 0x000500c2,0x00000006,0x00000024,0x00000022,0x00000023,0x00060041,0x00000025,0x00000026,
0x00000027,0x00000026,0x0003003e,0x0000001d,0x00000027,0x0004003d,0x00000006,0x00000029, 0x00000021,0x00000018,0x00000024,0x0004003d,0x00000006,0x00000027,0x00000026,0x0003003e,
0x00000012,0x000500c7,0x00000006,0x0000002b,0x00000029,0x0000002a,0x0003003e,0x00000028, 0x0000001d,0x00000027,0x0004003d,0x00000006,0x00000029,0x00000012,0x000500c7,0x00000006,
0x0000002b,0x0004003d,0x00000006,0x0000002d,0x0000001d,0x0004003d,0x00000006,0x0000002e, 0x0000002b,0x00000029,0x0000002a,0x0003003e,0x00000028,0x0000002b,0x0004003d,0x00000006,
0x00000028,0x000500c4,0x00000006,0x00000030,0x0000002e,0x0000002f,0x000500c2,0x00000006, 0x0000002d,0x0000001d,0x0004003d,0x00000006,0x0000002e,0x00000028,0x000500c4,0x00000006,
0x00000031,0x0000002d,0x00000030,0x000500c7,0x00000006,0x00000033,0x00000031,0x00000032, 0x00000030,0x0000002e,0x0000002f,0x000500c2,0x00000006,0x00000031,0x0000002d,0x00000030,
0x0003003e,0x0000002c,0x00000033,0x0004003d,0x00000006,0x00000034,0x0000002c,0x000200fe, 0x000500c7,0x00000006,0x00000033,0x00000031,0x00000032,0x0003003e,0x0000002c,0x00000033,
0x00000034,0x00010038,0x00050036,0x00000002,0x00000010,0x00000000,0x0000000c,0x00030037, 0x0004003d,0x00000006,0x00000034,0x0000002c,0x000200fe,0x00000034,0x00010038,0x00050036,
0x00000007,0x0000000d,0x00030037,0x00000007,0x0000000e,0x00030037,0x00000007,0x0000000f, 0x00000002,0x00000010,0x00000000,0x0000000c,0x00030037,0x00000007,0x0000000d,0x00030037,
0x000200f8,0x00000011,0x0004003d,0x00000006,0x00000037,0x0000000d,0x0004003d,0x00000006, 0x00000007,0x0000000e,0x00030037,0x00000007,0x0000000f,0x000200f8,0x00000011,0x0004003d,
0x00000038,0x0000000e,0x000500c4,0x00000006,0x0000003a,0x00000038,0x00000039,0x000500c4, 0x00000006,0x00000037,0x0000000d,0x0004003d,0x00000006,0x00000038,0x0000000e,0x000500c4,
0x00000006,0x0000003b,0x00000037,0x0000003a,0x0004003d,0x00000006,0x0000003c,0x0000000f, 0x00000006,0x0000003a,0x00000038,0x00000039,0x000500c4,0x00000006,0x0000003b,0x00000037,
0x000500c5,0x00000006,0x0000003d,0x0000003c,0x0000003b,0x0003003e,0x0000000f,0x0000003d, 0x0000003a,0x0004003d,0x00000006,0x0000003c,0x0000000f,0x000500c5,0x00000006,0x0000003d,
0x000100fd,0x00010038 0x0000003c,0x0000003b,0x0003003e,0x0000000f,0x0000003d,0x000100fd,0x00010038
}; };
// Generated from: // Generated from:
...@@ -129,21 +129,21 @@ const uint32_t kConvertIndex_comp_00000000[] = { ...@@ -129,21 +129,21 @@ const uint32_t kConvertIndex_comp_00000000[] = {
// layout(set = 0, binding = 0)buffer dst // layout(set = 0, binding = 0)buffer dst
// { // {
// //
// uint dstData[]; // uint dstIndexBuf[];
// }; // };
// //
// layout(set = 0, binding = 1)readonly buffer src // layout(set = 0, binding = 1)readonly buffer src
// { // {
// //
// uint srcData[]; // uint srcIndexBuf[];
// }; // };
// //
// layout(push_constant)uniform PushConstants // layout(push_constant)uniform PushConstants
// { // {
// //
// uint srcOffset; // uint srcIndexOffset;
// //
// uint dstOffsetDiv4; // uint dstIndexBufOffsetDiv4;
// //
// uint maxIndex; // uint maxIndex;
// //
...@@ -153,9 +153,9 @@ const uint32_t kConvertIndex_comp_00000000[] = { ...@@ -153,9 +153,9 @@ const uint32_t kConvertIndex_comp_00000000[] = {
// uint PullIndex(uint index) // uint PullIndex(uint index)
// { // {
// //
// uint srcIndex = index + srcOffset; // uint srcIndex = index + srcIndexOffset;
// //
// uint srcBlock = srcData[srcIndex >> 2]; // uint srcBlock = srcIndexBuf[srcIndex >> 2];
// uint srcComponent =(srcIndex & 3); // uint srcComponent =(srcIndex & 3);
// //
// uint value =(srcBlock >>(srcComponent << 3))& 0xFF; // uint value =(srcBlock >>(srcComponent << 3))& 0xFF;
...@@ -194,5 +194,6 @@ const uint32_t kConvertIndex_comp_00000000[] = { ...@@ -194,5 +194,6 @@ const uint32_t kConvertIndex_comp_00000000[] = {
// PackIndexValue(srcValue, 1, dstValue); // PackIndexValue(srcValue, 1, dstValue);
// } // }
// //
// dstData[dstOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue; // dstIndexBuf[dstIndexBufOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue;
//
// } // }
...@@ -11,116 +11,117 @@ const uint32_t kConvertIndex_comp_00000001[] = { ...@@ -11,116 +11,117 @@ const uint32_t kConvertIndex_comp_00000001[] = {
0x56637273,0x65756c61,0x00000000,0x00050005,0x0000000e,0x65646e69,0x646e4978,0x00007865, 0x56637273,0x65756c61,0x00000000,0x00050005,0x0000000e,0x65646e69,0x646e4978,0x00007865,
0x00050005,0x0000000f,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000012,0x49637273, 0x00050005,0x0000000f,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000012,0x49637273,
0x7865646e,0x00000000,0x00060005,0x00000014,0x68737550,0x736e6f43,0x746e6174,0x00000073, 0x7865646e,0x00000000,0x00060005,0x00000014,0x68737550,0x736e6f43,0x746e6174,0x00000073,
0x00060006,0x00000014,0x00000000,0x4f637273,0x65736666,0x00000074,0x00070006,0x00000014, 0x00070006,0x00000014,0x00000000,0x49637273,0x7865646e,0x7366664f,0x00007465,0x00090006,
0x00000001,0x4f747364,0x65736666,0x76694474,0x00000034,0x00060006,0x00000014,0x00000002, 0x00000014,0x00000001,0x49747364,0x7865646e,0x4f667542,0x65736666,0x76694474,0x00000034,
0x4978616d,0x7865646e,0x00000000,0x00060006,0x00000014,0x00000003,0x6461705f,0x676e6964, 0x00060006,0x00000014,0x00000002,0x4978616d,0x7865646e,0x00000000,0x00060006,0x00000014,
0x00000000,0x00030005,0x00000016,0x00000000,0x00050005,0x0000001d,0x42637273,0x6b636f6c, 0x00000003,0x6461705f,0x676e6964,0x00000000,0x00030005,0x00000016,0x00000000,0x00050005,
0x00000000,0x00030005,0x0000001f,0x00637273,0x00050006,0x0000001f,0x00000000,0x44637273, 0x0000001d,0x42637273,0x6b636f6c,0x00000000,0x00030005,0x0000001f,0x00637273,0x00060006,
0x00617461,0x00030005,0x00000021,0x00000000,0x00060005,0x00000028,0x43637273,0x6f706d6f, 0x0000001f,0x00000000,0x49637273,0x7865646e,0x00667542,0x00030005,0x00000021,0x00000000,
0x746e656e,0x00000000,0x00040005,0x0000002c,0x756c6176,0x00000065,0x00050005,0x00000044, 0x00060005,0x00000028,0x43637273,0x6f706d6f,0x746e656e,0x00000000,0x00040005,0x0000002c,
0x73726966,0x646e4974,0x00007865,0x00050005,0x00000046,0x49646e65,0x7865646e,0x00000000, 0x756c6176,0x00000065,0x00050005,0x00000044,0x73726966,0x646e4974,0x00007865,0x00050005,
0x00040005,0x0000004b,0x65646e69,0x00000078,0x00080005,0x0000004e,0x475f6c67,0x61626f6c, 0x00000046,0x49646e65,0x7865646e,0x00000000,0x00040005,0x0000004b,0x65646e69,0x00000078,
0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00050005,0x0000005d,0x56747364,0x65756c61, 0x00080005,0x0000004e,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,
0x00000000,0x00050005,0x00000063,0x56637273,0x65756c61,0x00000000,0x00040005,0x00000064, 0x00050005,0x0000005d,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000063,0x56637273,
0x61726170,0x0000006d,0x00040005,0x00000067,0x61726170,0x0000006d,0x00040005,0x00000069, 0x65756c61,0x00000000,0x00040005,0x00000064,0x61726170,0x0000006d,0x00040005,0x00000067,
0x61726170,0x0000006d,0x00040005,0x0000006a,0x61726170,0x0000006d,0x00050005,0x00000075, 0x61726170,0x0000006d,0x00040005,0x00000069,0x61726170,0x0000006d,0x00040005,0x0000006a,
0x56637273,0x65756c61,0x00000000,0x00040005,0x00000078,0x61726170,0x0000006d,0x00040005, 0x61726170,0x0000006d,0x00050005,0x00000075,0x56637273,0x65756c61,0x00000000,0x00040005,
0x0000007a,0x61726170,0x0000006d,0x00040005,0x0000007c,0x61726170,0x0000006d,0x00040005, 0x00000078,0x61726170,0x0000006d,0x00040005,0x0000007a,0x61726170,0x0000006d,0x00040005,
0x0000007d,0x61726170,0x0000006d,0x00030005,0x00000082,0x00747364,0x00050006,0x00000082, 0x0000007c,0x61726170,0x0000006d,0x00040005,0x0000007d,0x61726170,0x0000006d,0x00030005,
0x00000000,0x44747364,0x00617461,0x00030005,0x00000084,0x00000000,0x00050048,0x00000014, 0x00000082,0x00747364,0x00060006,0x00000082,0x00000000,0x49747364,0x7865646e,0x00667542,
0x00000000,0x00000023,0x00000000,0x00050048,0x00000014,0x00000001,0x00000023,0x00000004, 0x00030005,0x00000084,0x00000000,0x00050048,0x00000014,0x00000000,0x00000023,0x00000000,
0x00050048,0x00000014,0x00000002,0x00000023,0x00000008,0x00050048,0x00000014,0x00000003, 0x00050048,0x00000014,0x00000001,0x00000023,0x00000004,0x00050048,0x00000014,0x00000002,
0x00000023,0x0000000c,0x00030047,0x00000014,0x00000002,0x00040047,0x0000001e,0x00000006, 0x00000023,0x00000008,0x00050048,0x00000014,0x00000003,0x00000023,0x0000000c,0x00030047,
0x00000004,0x00040048,0x0000001f,0x00000000,0x00000018,0x00050048,0x0000001f,0x00000000, 0x00000014,0x00000002,0x00040047,0x0000001e,0x00000006,0x00000004,0x00040048,0x0000001f,
0x00000023,0x00000000,0x00030047,0x0000001f,0x00000003,0x00040047,0x00000021,0x00000022, 0x00000000,0x00000018,0x00050048,0x0000001f,0x00000000,0x00000023,0x00000000,0x00030047,
0x00000000,0x00040047,0x00000021,0x00000021,0x00000001,0x00040047,0x0000004e,0x0000000b, 0x0000001f,0x00000003,0x00040047,0x00000021,0x00000022,0x00000000,0x00040047,0x00000021,
0x0000001c,0x00040047,0x00000081,0x00000006,0x00000004,0x00050048,0x00000082,0x00000000, 0x00000021,0x00000001,0x00040047,0x0000004e,0x0000000b,0x0000001c,0x00040047,0x00000081,
0x00000023,0x00000000,0x00030047,0x00000082,0x00000003,0x00040047,0x00000084,0x00000022, 0x00000006,0x00000004,0x00050048,0x00000082,0x00000000,0x00000023,0x00000000,0x00030047,
0x00000000,0x00040047,0x00000084,0x00000021,0x00000000,0x00040047,0x0000008d,0x0000000b, 0x00000082,0x00000003,0x00040047,0x00000084,0x00000022,0x00000000,0x00040047,0x00000084,
0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006, 0x00000021,0x00000000,0x00040047,0x0000008d,0x0000000b,0x00000019,0x00020013,0x00000002,
0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008, 0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,
0x00000006,0x00000007,0x00060021,0x0000000c,0x00000002,0x00000007,0x00000007,0x00000007, 0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00060021,
0x0006001e,0x00000014,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000015, 0x0000000c,0x00000002,0x00000007,0x00000007,0x00000007,0x0006001e,0x00000014,0x00000006,
0x00000009,0x00000014,0x0004003b,0x00000015,0x00000016,0x00000009,0x00040015,0x00000017, 0x00000006,0x00000006,0x00000006,0x00040020,0x00000015,0x00000009,0x00000014,0x0004003b,
0x00000020,0x00000001,0x0004002b,0x00000017,0x00000018,0x00000000,0x00040020,0x00000019, 0x00000015,0x00000016,0x00000009,0x00040015,0x00000017,0x00000020,0x00000001,0x0004002b,
0x00000009,0x00000006,0x0003001d,0x0000001e,0x00000006,0x0003001e,0x0000001f,0x0000001e, 0x00000017,0x00000018,0x00000000,0x00040020,0x00000019,0x00000009,0x00000006,0x0003001d,
0x00040020,0x00000020,0x00000002,0x0000001f,0x0004003b,0x00000020,0x00000021,0x00000002, 0x0000001e,0x00000006,0x0003001e,0x0000001f,0x0000001e,0x00040020,0x00000020,0x00000002,
0x0004002b,0x00000017,0x00000023,0x00000002,0x00040020,0x00000025,0x00000002,0x00000006, 0x0000001f,0x0004003b,0x00000020,0x00000021,0x00000002,0x0004002b,0x00000017,0x00000023,
0x0004002b,0x00000006,0x0000002a,0x00000003,0x0004002b,0x00000017,0x0000002f,0x00000003, 0x00000002,0x00040020,0x00000025,0x00000002,0x00000006,0x0004002b,0x00000006,0x0000002a,
0x0004002b,0x00000006,0x00000032,0x000000ff,0x00020014,0x00000035,0x0004002b,0x00000006, 0x00000003,0x0004002b,0x00000017,0x0000002f,0x00000003,0x0004002b,0x00000006,0x00000032,
0x00000039,0x0000ffff,0x0004002b,0x00000017,0x0000003f,0x00000004,0x0004002b,0x00000006, 0x000000ff,0x00020014,0x00000035,0x0004002b,0x00000006,0x00000039,0x0000ffff,0x0004002b,
0x00000045,0x00000000,0x00040017,0x0000004c,0x00000006,0x00000003,0x00040020,0x0000004d, 0x00000017,0x0000003f,0x00000004,0x0004002b,0x00000006,0x00000045,0x00000000,0x00040017,
0x00000001,0x0000004c,0x0004003b,0x0000004d,0x0000004e,0x00000001,0x00040020,0x0000004f, 0x0000004c,0x00000006,0x00000003,0x00040020,0x0000004d,0x00000001,0x0000004c,0x0004003b,
0x00000001,0x00000006,0x0004002b,0x00000017,0x00000053,0x00000001,0x0004002b,0x00000006, 0x0000004d,0x0000004e,0x00000001,0x00040020,0x0000004f,0x00000001,0x00000006,0x0004002b,
0x0000006f,0x00000001,0x0003001d,0x00000081,0x00000006,0x0003001e,0x00000082,0x00000081, 0x00000017,0x00000053,0x00000001,0x0004002b,0x00000006,0x0000006f,0x00000001,0x0003001d,
0x00040020,0x00000083,0x00000002,0x00000082,0x0004003b,0x00000083,0x00000084,0x00000002, 0x00000081,0x00000006,0x0003001e,0x00000082,0x00000081,0x00040020,0x00000083,0x00000002,
0x0004002b,0x00000006,0x0000008c,0x00000040,0x0006002c,0x0000004c,0x0000008d,0x0000008c, 0x00000082,0x0004003b,0x00000083,0x00000084,0x00000002,0x0004002b,0x00000006,0x0000008c,
0x0000006f,0x0000006f,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, 0x00000040,0x0006002c,0x0000004c,0x0000008d,0x0000008c,0x0000006f,0x0000006f,0x00050036,
0x00000005,0x0004003b,0x00000007,0x00000044,0x00000007,0x0004003b,0x00000007,0x00000046, 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x0000004b,0x00000007,0x0004003b,0x00000007,0x0000005d, 0x00000044,0x00000007,0x0004003b,0x00000007,0x00000046,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x00000063,0x00000007,0x0004003b,0x00000007,0x00000064, 0x0000004b,0x00000007,0x0004003b,0x00000007,0x0000005d,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x00000067,0x00000007,0x0004003b,0x00000007,0x00000069, 0x00000063,0x00000007,0x0004003b,0x00000007,0x00000064,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x0000006a,0x00000007,0x0004003b,0x00000007,0x00000075, 0x00000067,0x00000007,0x0004003b,0x00000007,0x00000069,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x00000078,0x00000007,0x0004003b,0x00000007,0x0000007a, 0x0000006a,0x00000007,0x0004003b,0x00000007,0x00000075,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0004003b,0x00000007,0x0000007c,0x00000007,0x0004003b,0x00000007,0x0000007d, 0x00000078,0x00000007,0x0004003b,0x00000007,0x0000007a,0x00000007,0x0004003b,0x00000007,
0x00000007,0x0003003e,0x00000044,0x00000045,0x0004003d,0x00000006,0x00000047,0x00000044, 0x0000007c,0x00000007,0x0004003b,0x00000007,0x0000007d,0x00000007,0x0003003e,0x00000044,
0x00050041,0x00000019,0x00000048,0x00000016,0x00000023,0x0004003d,0x00000006,0x00000049, 0x00000045,0x0004003d,0x00000006,0x00000047,0x00000044,0x00050041,0x00000019,0x00000048,
0x00000048,0x00050080,0x00000006,0x0000004a,0x00000047,0x00000049,0x0003003e,0x00000046, 0x00000016,0x00000023,0x0004003d,0x00000006,0x00000049,0x00000048,0x00050080,0x00000006,
0x0000004a,0x00050041,0x0000004f,0x00000050,0x0000004e,0x00000045,0x0004003d,0x00000006, 0x0000004a,0x00000047,0x00000049,0x0003003e,0x00000046,0x0000004a,0x00050041,0x0000004f,
0x00000051,0x00000050,0x0004003d,0x00000006,0x00000052,0x00000044,0x000500c2,0x00000006, 0x00000050,0x0000004e,0x00000045,0x0004003d,0x00000006,0x00000051,0x00000050,0x0004003d,
0x00000054,0x00000052,0x00000053,0x00050080,0x00000006,0x00000055,0x00000051,0x00000054, 0x00000006,0x00000052,0x00000044,0x000500c2,0x00000006,0x00000054,0x00000052,0x00000053,
0x000500c4,0x00000006,0x00000056,0x00000055,0x00000053,0x0003003e,0x0000004b,0x00000056, 0x00050080,0x00000006,0x00000055,0x00000051,0x00000054,0x000500c4,0x00000006,0x00000056,
0x0004003d,0x00000006,0x00000057,0x0000004b,0x0004003d,0x00000006,0x00000058,0x00000046, 0x00000055,0x00000053,0x0003003e,0x0000004b,0x00000056,0x0004003d,0x00000006,0x00000057,
0x000500ae,0x00000035,0x00000059,0x00000057,0x00000058,0x000300f7,0x0000005b,0x00000000, 0x0000004b,0x0004003d,0x00000006,0x00000058,0x00000046,0x000500ae,0x00000035,0x00000059,
0x000400fa,0x00000059,0x0000005a,0x0000005b,0x000200f8,0x0000005a,0x000100fd,0x000200f8, 0x00000057,0x00000058,0x000300f7,0x0000005b,0x00000000,0x000400fa,0x00000059,0x0000005a,
0x0000005b,0x0003003e,0x0000005d,0x00000045,0x0004003d,0x00000006,0x0000005e,0x0000004b, 0x0000005b,0x000200f8,0x0000005a,0x000100fd,0x000200f8,0x0000005b,0x0003003e,0x0000005d,
0x0004003d,0x00000006,0x0000005f,0x00000044,0x000500ae,0x00000035,0x00000060,0x0000005e, 0x00000045,0x0004003d,0x00000006,0x0000005e,0x0000004b,0x0004003d,0x00000006,0x0000005f,
0x0000005f,0x000300f7,0x00000062,0x00000000,0x000400fa,0x00000060,0x00000061,0x00000062, 0x00000044,0x000500ae,0x00000035,0x00000060,0x0000005e,0x0000005f,0x000300f7,0x00000062,
0x000200f8,0x00000061,0x0004003d,0x00000006,0x00000065,0x0000004b,0x0003003e,0x00000064, 0x00000000,0x000400fa,0x00000060,0x00000061,0x00000062,0x000200f8,0x00000061,0x0004003d,
0x00000065,0x00050039,0x00000006,0x00000066,0x0000000a,0x00000064,0x0003003e,0x00000063, 0x00000006,0x00000065,0x0000004b,0x0003003e,0x00000064,0x00000065,0x00050039,0x00000006,
0x00000066,0x0004003d,0x00000006,0x00000068,0x00000063,0x0003003e,0x00000067,0x00000068, 0x00000066,0x0000000a,0x00000064,0x0003003e,0x00000063,0x00000066,0x0004003d,0x00000006,
0x0003003e,0x00000069,0x00000045,0x0004003d,0x00000006,0x0000006b,0x0000005d,0x0003003e, 0x00000068,0x00000063,0x0003003e,0x00000067,0x00000068,0x0003003e,0x00000069,0x00000045,
0x0000006a,0x0000006b,0x00070039,0x00000002,0x0000006c,0x00000010,0x00000067,0x00000069, 0x0004003d,0x00000006,0x0000006b,0x0000005d,0x0003003e,0x0000006a,0x0000006b,0x00070039,
0x0000006a,0x0004003d,0x00000006,0x0000006d,0x0000006a,0x0003003e,0x0000005d,0x0000006d, 0x00000002,0x0000006c,0x00000010,0x00000067,0x00000069,0x0000006a,0x0004003d,0x00000006,
0x000200f9,0x00000062,0x000200f8,0x00000062,0x0004003d,0x00000006,0x0000006e,0x0000004b, 0x0000006d,0x0000006a,0x0003003e,0x0000005d,0x0000006d,0x000200f9,0x00000062,0x000200f8,
0x00050080,0x00000006,0x00000070,0x0000006e,0x0000006f,0x0004003d,0x00000006,0x00000071, 0x00000062,0x0004003d,0x00000006,0x0000006e,0x0000004b,0x00050080,0x00000006,0x00000070,
0x00000046,0x000500b0,0x00000035,0x00000072,0x00000070,0x00000071,0x000300f7,0x00000074, 0x0000006e,0x0000006f,0x0004003d,0x00000006,0x00000071,0x00000046,0x000500b0,0x00000035,
0x00000000,0x000400fa,0x00000072,0x00000073,0x00000074,0x000200f8,0x00000073,0x0004003d, 0x00000072,0x00000070,0x00000071,0x000300f7,0x00000074,0x00000000,0x000400fa,0x00000072,
0x00000006,0x00000076,0x0000004b,0x00050080,0x00000006,0x00000077,0x00000076,0x0000006f, 0x00000073,0x00000074,0x000200f8,0x00000073,0x0004003d,0x00000006,0x00000076,0x0000004b,
0x0003003e,0x00000078,0x00000077,0x00050039,0x00000006,0x00000079,0x0000000a,0x00000078, 0x00050080,0x00000006,0x00000077,0x00000076,0x0000006f,0x0003003e,0x00000078,0x00000077,
0x0003003e,0x00000075,0x00000079,0x0004003d,0x00000006,0x0000007b,0x00000075,0x0003003e, 0x00050039,0x00000006,0x00000079,0x0000000a,0x00000078,0x0003003e,0x00000075,0x00000079,
0x0000007a,0x0000007b,0x0003003e,0x0000007c,0x0000006f,0x0004003d,0x00000006,0x0000007e, 0x0004003d,0x00000006,0x0000007b,0x00000075,0x0003003e,0x0000007a,0x0000007b,0x0003003e,
0x0000005d,0x0003003e,0x0000007d,0x0000007e,0x00070039,0x00000002,0x0000007f,0x00000010, 0x0000007c,0x0000006f,0x0004003d,0x00000006,0x0000007e,0x0000005d,0x0003003e,0x0000007d,
0x0000007a,0x0000007c,0x0000007d,0x0004003d,0x00000006,0x00000080,0x0000007d,0x0003003e, 0x0000007e,0x00070039,0x00000002,0x0000007f,0x00000010,0x0000007a,0x0000007c,0x0000007d,
0x0000005d,0x00000080,0x000200f9,0x00000074,0x000200f8,0x00000074,0x00050041,0x00000019, 0x0004003d,0x00000006,0x00000080,0x0000007d,0x0003003e,0x0000005d,0x00000080,0x000200f9,
0x00000085,0x00000016,0x00000053,0x0004003d,0x00000006,0x00000086,0x00000085,0x00050041, 0x00000074,0x000200f8,0x00000074,0x00050041,0x00000019,0x00000085,0x00000016,0x00000053,
0x0000004f,0x00000087,0x0000004e,0x00000045,0x0004003d,0x00000006,0x00000088,0x00000087, 0x0004003d,0x00000006,0x00000086,0x00000085,0x00050041,0x0000004f,0x00000087,0x0000004e,
0x00050080,0x00000006,0x00000089,0x00000086,0x00000088,0x0004003d,0x00000006,0x0000008a, 0x00000045,0x0004003d,0x00000006,0x00000088,0x00000087,0x00050080,0x00000006,0x00000089,
0x0000005d,0x00060041,0x00000025,0x0000008b,0x00000084,0x00000018,0x00000089,0x0003003e, 0x00000086,0x00000088,0x0004003d,0x00000006,0x0000008a,0x0000005d,0x00060041,0x00000025,
0x0000008b,0x0000008a,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000, 0x0000008b,0x00000084,0x00000018,0x00000089,0x0003003e,0x0000008b,0x0000008a,0x000100fd,
0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000007, 0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,
0x00000012,0x00000007,0x0004003b,0x00000007,0x0000001d,0x00000007,0x0004003b,0x00000007, 0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000007,0x00000012,0x00000007,0x0004003b,
0x00000028,0x00000007,0x0004003b,0x00000007,0x0000002c,0x00000007,0x0004003d,0x00000006, 0x00000007,0x0000001d,0x00000007,0x0004003b,0x00000007,0x00000028,0x00000007,0x0004003b,
0x00000013,0x00000009,0x00050041,0x00000019,0x0000001a,0x00000016,0x00000018,0x0004003d, 0x00000007,0x0000002c,0x00000007,0x0004003d,0x00000006,0x00000013,0x00000009,0x00050041,
0x00000006,0x0000001b,0x0000001a,0x00050080,0x00000006,0x0000001c,0x00000013,0x0000001b, 0x00000019,0x0000001a,0x00000016,0x00000018,0x0004003d,0x00000006,0x0000001b,0x0000001a,
0x0003003e,0x00000012,0x0000001c,0x0004003d,0x00000006,0x00000022,0x00000012,0x000500c2, 0x00050080,0x00000006,0x0000001c,0x00000013,0x0000001b,0x0003003e,0x00000012,0x0000001c,
0x00000006,0x00000024,0x00000022,0x00000023,0x00060041,0x00000025,0x00000026,0x00000021, 0x0004003d,0x00000006,0x00000022,0x00000012,0x000500c2,0x00000006,0x00000024,0x00000022,
0x00000018,0x00000024,0x0004003d,0x00000006,0x00000027,0x00000026,0x0003003e,0x0000001d, 0x00000023,0x00060041,0x00000025,0x00000026,0x00000021,0x00000018,0x00000024,0x0004003d,
0x00000027,0x0004003d,0x00000006,0x00000029,0x00000012,0x000500c7,0x00000006,0x0000002b, 0x00000006,0x00000027,0x00000026,0x0003003e,0x0000001d,0x00000027,0x0004003d,0x00000006,
0x00000029,0x0000002a,0x0003003e,0x00000028,0x0000002b,0x0004003d,0x00000006,0x0000002d, 0x00000029,0x00000012,0x000500c7,0x00000006,0x0000002b,0x00000029,0x0000002a,0x0003003e,
0x0000001d,0x0004003d,0x00000006,0x0000002e,0x00000028,0x000500c4,0x00000006,0x00000030, 0x00000028,0x0000002b,0x0004003d,0x00000006,0x0000002d,0x0000001d,0x0004003d,0x00000006,
0x0000002e,0x0000002f,0x000500c2,0x00000006,0x00000031,0x0000002d,0x00000030,0x000500c7, 0x0000002e,0x00000028,0x000500c4,0x00000006,0x00000030,0x0000002e,0x0000002f,0x000500c2,
0x00000006,0x00000033,0x00000031,0x00000032,0x0003003e,0x0000002c,0x00000033,0x0004003d, 0x00000006,0x00000031,0x0000002d,0x00000030,0x000500c7,0x00000006,0x00000033,0x00000031,
0x00000006,0x00000034,0x0000002c,0x000500aa,0x00000035,0x00000036,0x00000034,0x00000032, 0x00000032,0x0003003e,0x0000002c,0x00000033,0x0004003d,0x00000006,0x00000034,0x0000002c,
0x000300f7,0x00000038,0x00000000,0x000400fa,0x00000036,0x00000037,0x00000038,0x000200f8, 0x000500aa,0x00000035,0x00000036,0x00000034,0x00000032,0x000300f7,0x00000038,0x00000000,
0x00000037,0x0003003e,0x0000002c,0x00000039,0x000200f9,0x00000038,0x000200f8,0x00000038, 0x000400fa,0x00000036,0x00000037,0x00000038,0x000200f8,0x00000037,0x0003003e,0x0000002c,
0x0004003d,0x00000006,0x0000003a,0x0000002c,0x000200fe,0x0000003a,0x00010038,0x00050036, 0x00000039,0x000200f9,0x00000038,0x000200f8,0x00000038,0x0004003d,0x00000006,0x0000003a,
0x00000002,0x00000010,0x00000000,0x0000000c,0x00030037,0x00000007,0x0000000d,0x00030037, 0x0000002c,0x000200fe,0x0000003a,0x00010038,0x00050036,0x00000002,0x00000010,0x00000000,
0x00000007,0x0000000e,0x00030037,0x00000007,0x0000000f,0x000200f8,0x00000011,0x0004003d, 0x0000000c,0x00030037,0x00000007,0x0000000d,0x00030037,0x00000007,0x0000000e,0x00030037,
0x00000006,0x0000003d,0x0000000d,0x0004003d,0x00000006,0x0000003e,0x0000000e,0x000500c4, 0x00000007,0x0000000f,0x000200f8,0x00000011,0x0004003d,0x00000006,0x0000003d,0x0000000d,
0x00000006,0x00000040,0x0000003e,0x0000003f,0x000500c4,0x00000006,0x00000041,0x0000003d, 0x0004003d,0x00000006,0x0000003e,0x0000000e,0x000500c4,0x00000006,0x00000040,0x0000003e,
0x00000040,0x0004003d,0x00000006,0x00000042,0x0000000f,0x000500c5,0x00000006,0x00000043, 0x0000003f,0x000500c4,0x00000006,0x00000041,0x0000003d,0x00000040,0x0004003d,0x00000006,
0x00000042,0x00000041,0x0003003e,0x0000000f,0x00000043,0x000100fd,0x00010038 0x00000042,0x0000000f,0x000500c5,0x00000006,0x00000043,0x00000042,0x00000041,0x0003003e,
0x0000000f,0x00000043,0x000100fd,0x00010038
}; };
// Generated from: // Generated from:
...@@ -132,21 +133,21 @@ const uint32_t kConvertIndex_comp_00000001[] = { ...@@ -132,21 +133,21 @@ const uint32_t kConvertIndex_comp_00000001[] = {
// layout(set = 0, binding = 0)buffer dst // layout(set = 0, binding = 0)buffer dst
// { // {
// //
// uint dstData[]; // uint dstIndexBuf[];
// }; // };
// //
// layout(set = 0, binding = 1)readonly buffer src // layout(set = 0, binding = 1)readonly buffer src
// { // {
// //
// uint srcData[]; // uint srcIndexBuf[];
// }; // };
// //
// layout(push_constant)uniform PushConstants // layout(push_constant)uniform PushConstants
// { // {
// //
// uint srcOffset; // uint srcIndexOffset;
// //
// uint dstOffsetDiv4; // uint dstIndexBufOffsetDiv4;
// //
// uint maxIndex; // uint maxIndex;
// //
...@@ -156,9 +157,9 @@ const uint32_t kConvertIndex_comp_00000001[] = { ...@@ -156,9 +157,9 @@ const uint32_t kConvertIndex_comp_00000001[] = {
// uint PullIndex(uint index) // uint PullIndex(uint index)
// { // {
// //
// uint srcIndex = index + srcOffset; // uint srcIndex = index + srcIndexOffset;
// //
// uint srcBlock = srcData[srcIndex >> 2]; // uint srcBlock = srcIndexBuf[srcIndex >> 2];
// uint srcComponent =(srcIndex & 3); // uint srcComponent =(srcIndex & 3);
// //
// uint value =(srcBlock >>(srcComponent << 3))& 0xFF; // uint value =(srcBlock >>(srcComponent << 3))& 0xFF;
...@@ -200,5 +201,6 @@ const uint32_t kConvertIndex_comp_00000001[] = { ...@@ -200,5 +201,6 @@ const uint32_t kConvertIndex_comp_00000001[] = {
// PackIndexValue(srcValue, 1, dstValue); // PackIndexValue(srcValue, 1, dstValue);
// } // }
// //
// dstData[dstOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue; // dstIndexBuf[dstIndexBufOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue;
//
// } // }
// 7.12.3226 // 7.12.3226
#pragma once #pragma once
const uint32_t kConvertIndex_comp_00000002[] = { const uint32_t kConvertIndex_comp_00000002[] = {
0x07230203,0x00010000,0x00080007,0x00000094,0x00000000,0x00020011,0x00000001,0x0006000b, 0x07230203,0x00010000,0x00080007,0x000000c1,0x00000000,0x00020011,0x00000001,0x0006000b,
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000052,0x00060010,0x00000004, 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000052,0x00060010,0x00000004,
0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x00040005, 0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x00040005,
...@@ -11,105 +11,140 @@ const uint32_t kConvertIndex_comp_00000002[] = { ...@@ -11,105 +11,140 @@ const uint32_t kConvertIndex_comp_00000002[] = {
0x56637273,0x65756c61,0x00000000,0x00050005,0x0000000e,0x65646e69,0x646e4978,0x00007865, 0x56637273,0x65756c61,0x00000000,0x00050005,0x0000000e,0x65646e69,0x646e4978,0x00007865,
0x00050005,0x0000000f,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000012,0x49637273, 0x00050005,0x0000000f,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000012,0x49637273,
0x7865646e,0x00000000,0x00050005,0x00000014,0x42637273,0x6b636f6c,0x00000000,0x00030005, 0x7865646e,0x00000000,0x00050005,0x00000014,0x42637273,0x6b636f6c,0x00000000,0x00030005,
0x00000016,0x00637273,0x00050006,0x00000016,0x00000000,0x44637273,0x00617461,0x00030005, 0x00000016,0x00637273,0x00060006,0x00000016,0x00000000,0x49637273,0x7865646e,0x00667542,
0x00000018,0x00000000,0x00060005,0x00000021,0x43637273,0x6f706d6f,0x746e656e,0x00000000, 0x00030005,0x00000018,0x00000000,0x00060005,0x00000021,0x43637273,0x6f706d6f,0x746e656e,
0x00040005,0x00000025,0x756c6176,0x00000065,0x00050005,0x00000037,0x65646e69,0x756f4378, 0x00000000,0x00040005,0x00000025,0x756c6176,0x00000065,0x00050005,0x00000037,0x65646e69,
0x0000746e,0x00030005,0x00000039,0x00646d63,0x00050006,0x00000039,0x00000000,0x44646d63, 0x756f4378,0x0000746e,0x00050005,0x00000039,0x49637273,0x7269646e,0x00746365,0x00070006,
0x00617461,0x00030005,0x0000003b,0x00000000,0x00060005,0x0000003c,0x68737550,0x736e6f43, 0x00000039,0x00000000,0x49637273,0x7269646e,0x42746365,0x00006675,0x00030005,0x0000003b,
0x746e6174,0x00000073,0x00070006,0x0000003c,0x00000000,0x4f646d63,0x65736666,0x76694474, 0x00000000,0x00060005,0x0000003c,0x68737550,0x736e6f43,0x746e6174,0x00000073,0x00090006,
0x00000034,0x00070006,0x0000003c,0x00000001,0x4f747364,0x65736666,0x76694474,0x00000034, 0x0000003c,0x00000000,0x49637273,0x7269646e,0x4f746365,0x65736666,0x76694474,0x00000034,
0x00060006,0x0000003c,0x00000002,0x4978616d,0x7865646e,0x00000000,0x00060006,0x0000003c, 0x00090006,0x0000003c,0x00000001,0x49747364,0x7865646e,0x4f667542,0x65736666,0x76694474,
0x00000003,0x6461705f,0x676e6964,0x00000000,0x00030005,0x0000003e,0x00000000,0x00050005, 0x00000034,0x00060006,0x0000003c,0x00000002,0x4978616d,0x7865646e,0x00000000,0x000a0006,
0x00000044,0x73726966,0x646e4974,0x00007865,0x00050005,0x0000004b,0x49646e65,0x7865646e, 0x0000003c,0x00000003,0x49747364,0x7269646e,0x42746365,0x664f6675,0x74657366,0x34766944,
0x00000000,0x00040005,0x0000004f,0x65646e69,0x00000078,0x00080005,0x00000052,0x475f6c67, 0x00000000,0x00030005,0x0000003e,0x00000000,0x00050005,0x00000044,0x73726966,0x646e4974,
0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00050005,0x00000063,0x56747364, 0x00007865,0x00050005,0x0000004b,0x49646e65,0x7865646e,0x00000000,0x00040005,0x0000004f,
0x65756c61,0x00000000,0x00050005,0x00000069,0x56637273,0x65756c61,0x00000000,0x00040005, 0x65646e69,0x00000078,0x00080005,0x00000052,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,
0x0000006a,0x61726170,0x0000006d,0x00040005,0x0000006d,0x61726170,0x0000006d,0x00040005, 0x496e6f69,0x00000044,0x00050005,0x00000063,0x56747364,0x65756c61,0x00000000,0x00050005,
0x0000006f,0x61726170,0x0000006d,0x00040005,0x00000070,0x61726170,0x0000006d,0x00050005, 0x00000069,0x56637273,0x65756c61,0x00000000,0x00040005,0x0000006a,0x61726170,0x0000006d,
0x0000007b,0x56637273,0x65756c61,0x00000000,0x00040005,0x0000007e,0x61726170,0x0000006d, 0x00040005,0x0000006d,0x61726170,0x0000006d,0x00040005,0x0000006f,0x61726170,0x0000006d,
0x00040005,0x00000080,0x61726170,0x0000006d,0x00040005,0x00000082,0x61726170,0x0000006d, 0x00040005,0x00000070,0x61726170,0x0000006d,0x00050005,0x0000007b,0x56637273,0x65756c61,
0x00040005,0x00000083,0x61726170,0x0000006d,0x00030005,0x00000088,0x00747364,0x00050006, 0x00000000,0x00040005,0x0000007e,0x61726170,0x0000006d,0x00040005,0x00000080,0x61726170,
0x00000088,0x00000000,0x44747364,0x00617461,0x00030005,0x0000008a,0x00000000,0x00040047, 0x0000006d,0x00040005,0x00000082,0x61726170,0x0000006d,0x00040005,0x00000083,0x61726170,
0x00000015,0x00000006,0x00000004,0x00040048,0x00000016,0x00000000,0x00000018,0x00050048, 0x0000006d,0x00030005,0x00000088,0x00747364,0x00060006,0x00000088,0x00000000,0x49747364,
0x00000016,0x00000000,0x00000023,0x00000000,0x00030047,0x00000016,0x00000003,0x00040047, 0x7865646e,0x00667542,0x00030005,0x0000008a,0x00000000,0x00050005,0x00000098,0x49747364,
0x00000018,0x00000022,0x00000000,0x00040047,0x00000018,0x00000021,0x00000001,0x00040047, 0x7269646e,0x00746365,0x00070006,0x00000098,0x00000000,0x49747364,0x7269646e,0x42746365,
0x00000038,0x00000006,0x00000004,0x00040048,0x00000039,0x00000000,0x00000018,0x00050048, 0x00006675,0x00030005,0x0000009a,0x00000000,0x00040047,0x00000015,0x00000006,0x00000004,
0x00000039,0x00000000,0x00000023,0x00000000,0x00030047,0x00000039,0x00000003,0x00040047, 0x00040048,0x00000016,0x00000000,0x00000018,0x00050048,0x00000016,0x00000000,0x00000023,
0x0000003b,0x00000022,0x00000000,0x00040047,0x0000003b,0x00000021,0x00000002,0x00050048, 0x00000000,0x00030047,0x00000016,0x00000003,0x00040047,0x00000018,0x00000022,0x00000000,
0x0000003c,0x00000000,0x00000023,0x00000000,0x00050048,0x0000003c,0x00000001,0x00000023, 0x00040047,0x00000018,0x00000021,0x00000001,0x00040047,0x00000038,0x00000006,0x00000004,
0x00000004,0x00050048,0x0000003c,0x00000002,0x00000023,0x00000008,0x00050048,0x0000003c, 0x00040048,0x00000039,0x00000000,0x00000018,0x00050048,0x00000039,0x00000000,0x00000023,
0x00000003,0x00000023,0x0000000c,0x00030047,0x0000003c,0x00000002,0x00040047,0x00000052, 0x00000000,0x00030047,0x00000039,0x00000003,0x00040047,0x0000003b,0x00000022,0x00000000,
0x0000000b,0x0000001c,0x00040047,0x00000087,0x00000006,0x00000004,0x00050048,0x00000088, 0x00040047,0x0000003b,0x00000021,0x00000002,0x00050048,0x0000003c,0x00000000,0x00000023,
0x00000000,0x00000023,0x00000000,0x00030047,0x00000088,0x00000003,0x00040047,0x0000008a, 0x00000000,0x00050048,0x0000003c,0x00000001,0x00000023,0x00000004,0x00050048,0x0000003c,
0x00000022,0x00000000,0x00040047,0x0000008a,0x00000021,0x00000000,0x00040047,0x00000093, 0x00000002,0x00000023,0x00000008,0x00050048,0x0000003c,0x00000003,0x00000023,0x0000000c,
0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, 0x00030047,0x0000003c,0x00000002,0x00040047,0x00000052,0x0000000b,0x0000001c,0x00040047,
0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021, 0x00000087,0x00000006,0x00000004,0x00050048,0x00000088,0x00000000,0x00000023,0x00000000,
0x00000008,0x00000006,0x00000007,0x00060021,0x0000000c,0x00000002,0x00000007,0x00000007, 0x00030047,0x00000088,0x00000003,0x00040047,0x0000008a,0x00000022,0x00000000,0x00040047,
0x00000007,0x0003001d,0x00000015,0x00000006,0x0003001e,0x00000016,0x00000015,0x00040020, 0x0000008a,0x00000021,0x00000000,0x00040047,0x00000097,0x00000006,0x00000004,0x00050048,
0x00000017,0x00000002,0x00000016,0x0004003b,0x00000017,0x00000018,0x00000002,0x00040015, 0x00000098,0x00000000,0x00000023,0x00000000,0x00030047,0x00000098,0x00000003,0x00040047,
0x00000019,0x00000020,0x00000001,0x0004002b,0x00000019,0x0000001a,0x00000000,0x0004002b, 0x0000009a,0x00000022,0x00000000,0x00040047,0x0000009a,0x00000021,0x00000003,0x00040047,
0x00000019,0x0000001c,0x00000002,0x00040020,0x0000001e,0x00000002,0x00000006,0x0004002b, 0x000000c0,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,
0x00000006,0x00000023,0x00000003,0x0004002b,0x00000019,0x00000028,0x00000003,0x0004002b, 0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,
0x00000006,0x0000002b,0x000000ff,0x0004002b,0x00000019,0x00000032,0x00000004,0x0003001d, 0x00040021,0x00000008,0x00000006,0x00000007,0x00060021,0x0000000c,0x00000002,0x00000007,
0x00000038,0x00000006,0x0003001e,0x00000039,0x00000038,0x00040020,0x0000003a,0x00000002, 0x00000007,0x00000007,0x0003001d,0x00000015,0x00000006,0x0003001e,0x00000016,0x00000015,
0x00000039,0x0004003b,0x0000003a,0x0000003b,0x00000002,0x0006001e,0x0000003c,0x00000006, 0x00040020,0x00000017,0x00000002,0x00000016,0x0004003b,0x00000017,0x00000018,0x00000002,
0x00000006,0x00000006,0x00000006,0x00040020,0x0000003d,0x00000009,0x0000003c,0x0004003b, 0x00040015,0x00000019,0x00000020,0x00000001,0x0004002b,0x00000019,0x0000001a,0x00000000,
0x0000003d,0x0000003e,0x00000009,0x00040020,0x0000003f,0x00000009,0x00000006,0x0004002b, 0x0004002b,0x00000019,0x0000001c,0x00000002,0x00040020,0x0000001e,0x00000002,0x00000006,
0x00000006,0x00000047,0x00000002,0x00040017,0x00000050,0x00000006,0x00000003,0x00040020, 0x0004002b,0x00000006,0x00000023,0x00000003,0x0004002b,0x00000019,0x00000028,0x00000003,
0x00000051,0x00000001,0x00000050,0x0004003b,0x00000051,0x00000052,0x00000001,0x0004002b, 0x0004002b,0x00000006,0x0000002b,0x000000ff,0x0004002b,0x00000019,0x00000032,0x00000004,
0x00000006,0x00000053,0x00000000,0x00040020,0x00000054,0x00000001,0x00000006,0x0004002b, 0x0003001d,0x00000038,0x00000006,0x0003001e,0x00000039,0x00000038,0x00040020,0x0000003a,
0x00000019,0x00000058,0x00000001,0x00020014,0x0000005e,0x0004002b,0x00000006,0x00000075, 0x00000002,0x00000039,0x0004003b,0x0000003a,0x0000003b,0x00000002,0x0006001e,0x0000003c,
0x00000001,0x0003001d,0x00000087,0x00000006,0x0003001e,0x00000088,0x00000087,0x00040020, 0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x0000003d,0x00000009,0x0000003c,
0x00000089,0x00000002,0x00000088,0x0004003b,0x00000089,0x0000008a,0x00000002,0x0004002b, 0x0004003b,0x0000003d,0x0000003e,0x00000009,0x00040020,0x0000003f,0x00000009,0x00000006,
0x00000006,0x00000092,0x00000040,0x0006002c,0x00000050,0x00000093,0x00000092,0x00000075, 0x0004002b,0x00000006,0x00000047,0x00000002,0x00040017,0x00000050,0x00000006,0x00000003,
0x00000075,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005, 0x00040020,0x00000051,0x00000001,0x00000050,0x0004003b,0x00000051,0x00000052,0x00000001,
0x0004003b,0x00000007,0x00000037,0x00000007,0x0004003b,0x00000007,0x00000044,0x00000007, 0x0004002b,0x00000006,0x00000053,0x00000000,0x00040020,0x00000054,0x00000001,0x00000006,
0x0004003b,0x00000007,0x0000004b,0x00000007,0x0004003b,0x00000007,0x0000004f,0x00000007, 0x0004002b,0x00000019,0x00000058,0x00000001,0x00020014,0x0000005e,0x0004002b,0x00000006,
0x0004003b,0x00000007,0x00000063,0x00000007,0x0004003b,0x00000007,0x00000069,0x00000007, 0x00000075,0x00000001,0x0003001d,0x00000087,0x00000006,0x0003001e,0x00000088,0x00000087,
0x0004003b,0x00000007,0x0000006a,0x00000007,0x0004003b,0x00000007,0x0000006d,0x00000007, 0x00040020,0x00000089,0x00000002,0x00000088,0x0004003b,0x00000089,0x0000008a,0x00000002,
0x0004003b,0x00000007,0x0000006f,0x00000007,0x0004003b,0x00000007,0x00000070,0x00000007, 0x0003001d,0x00000097,0x00000006,0x0003001e,0x00000098,0x00000097,0x00040020,0x00000099,
0x0004003b,0x00000007,0x0000007b,0x00000007,0x0004003b,0x00000007,0x0000007e,0x00000007, 0x00000002,0x00000098,0x0004003b,0x00000099,0x0000009a,0x00000002,0x0004002b,0x00000006,
0x0004003b,0x00000007,0x00000080,0x00000007,0x0004003b,0x00000007,0x00000082,0x00000007, 0x000000bc,0x00000004,0x0004002b,0x00000006,0x000000bf,0x00000040,0x0006002c,0x00000050,
0x0004003b,0x00000007,0x00000083,0x00000007,0x00050041,0x0000003f,0x00000040,0x0000003e, 0x000000c0,0x000000bf,0x00000075,0x00000075,0x00050036,0x00000002,0x00000004,0x00000000,
0x0000001a,0x0004003d,0x00000006,0x00000041,0x00000040,0x00060041,0x0000001e,0x00000042, 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x00000037,0x00000007,0x0004003b,
0x0000003b,0x0000001a,0x00000041,0x0004003d,0x00000006,0x00000043,0x00000042,0x0003003e, 0x00000007,0x00000044,0x00000007,0x0004003b,0x00000007,0x0000004b,0x00000007,0x0004003b,
0x00000037,0x00000043,0x00050041,0x0000003f,0x00000045,0x0000003e,0x0000001a,0x0004003d, 0x00000007,0x0000004f,0x00000007,0x0004003b,0x00000007,0x00000063,0x00000007,0x0004003b,
0x00000006,0x00000046,0x00000045,0x00050080,0x00000006,0x00000048,0x00000046,0x00000047, 0x00000007,0x00000069,0x00000007,0x0004003b,0x00000007,0x0000006a,0x00000007,0x0004003b,
0x00060041,0x0000001e,0x00000049,0x0000003b,0x0000001a,0x00000048,0x0004003d,0x00000006, 0x00000007,0x0000006d,0x00000007,0x0004003b,0x00000007,0x0000006f,0x00000007,0x0004003b,
0x0000004a,0x00000049,0x0003003e,0x00000044,0x0000004a,0x0004003d,0x00000006,0x0000004c, 0x00000007,0x00000070,0x00000007,0x0004003b,0x00000007,0x0000007b,0x00000007,0x0004003b,
0x00000044,0x0004003d,0x00000006,0x0000004d,0x00000037,0x00050080,0x00000006,0x0000004e, 0x00000007,0x0000007e,0x00000007,0x0004003b,0x00000007,0x00000080,0x00000007,0x0004003b,
0x0000004c,0x0000004d,0x0003003e,0x0000004b,0x0000004e,0x00050041,0x00000054,0x00000055, 0x00000007,0x00000082,0x00000007,0x0004003b,0x00000007,0x00000083,0x00000007,0x00050041,
0x00000052,0x00000053,0x0004003d,0x00000006,0x00000056,0x00000055,0x0004003d,0x00000006, 0x0000003f,0x00000040,0x0000003e,0x0000001a,0x0004003d,0x00000006,0x00000041,0x00000040,
0x00000057,0x00000044,0x000500c2,0x00000006,0x00000059,0x00000057,0x00000058,0x00050080, 0x00060041,0x0000001e,0x00000042,0x0000003b,0x0000001a,0x00000041,0x0004003d,0x00000006,
0x00000006,0x0000005a,0x00000056,0x00000059,0x000500c4,0x00000006,0x0000005b,0x0000005a, 0x00000043,0x00000042,0x0003003e,0x00000037,0x00000043,0x00050041,0x0000003f,0x00000045,
0x00000058,0x0003003e,0x0000004f,0x0000005b,0x0004003d,0x00000006,0x0000005c,0x0000004f, 0x0000003e,0x0000001a,0x0004003d,0x00000006,0x00000046,0x00000045,0x00050080,0x00000006,
0x0004003d,0x00000006,0x0000005d,0x0000004b,0x000500ae,0x0000005e,0x0000005f,0x0000005c, 0x00000048,0x00000046,0x00000047,0x00060041,0x0000001e,0x00000049,0x0000003b,0x0000001a,
0x0000005d,0x000300f7,0x00000061,0x00000000,0x000400fa,0x0000005f,0x00000060,0x00000061, 0x00000048,0x0004003d,0x00000006,0x0000004a,0x00000049,0x0003003e,0x00000044,0x0000004a,
0x000200f8,0x00000060,0x000100fd,0x000200f8,0x00000061,0x0003003e,0x00000063,0x00000053, 0x0004003d,0x00000006,0x0000004c,0x00000044,0x0004003d,0x00000006,0x0000004d,0x00000037,
0x0004003d,0x00000006,0x00000064,0x0000004f,0x0004003d,0x00000006,0x00000065,0x00000044, 0x00050080,0x00000006,0x0000004e,0x0000004c,0x0000004d,0x0003003e,0x0000004b,0x0000004e,
0x000500ae,0x0000005e,0x00000066,0x00000064,0x00000065,0x000300f7,0x00000068,0x00000000, 0x00050041,0x00000054,0x00000055,0x00000052,0x00000053,0x0004003d,0x00000006,0x00000056,
0x000400fa,0x00000066,0x00000067,0x00000068,0x000200f8,0x00000067,0x0004003d,0x00000006, 0x00000055,0x0004003d,0x00000006,0x00000057,0x00000044,0x000500c2,0x00000006,0x00000059,
0x0000006b,0x0000004f,0x0003003e,0x0000006a,0x0000006b,0x00050039,0x00000006,0x0000006c, 0x00000057,0x00000058,0x00050080,0x00000006,0x0000005a,0x00000056,0x00000059,0x000500c4,
0x0000000a,0x0000006a,0x0003003e,0x00000069,0x0000006c,0x0004003d,0x00000006,0x0000006e, 0x00000006,0x0000005b,0x0000005a,0x00000058,0x0003003e,0x0000004f,0x0000005b,0x0004003d,
0x00000069,0x0003003e,0x0000006d,0x0000006e,0x0003003e,0x0000006f,0x00000053,0x0004003d, 0x00000006,0x0000005c,0x0000004f,0x0004003d,0x00000006,0x0000005d,0x0000004b,0x000500ae,
0x00000006,0x00000071,0x00000063,0x0003003e,0x00000070,0x00000071,0x00070039,0x00000002, 0x0000005e,0x0000005f,0x0000005c,0x0000005d,0x000300f7,0x00000061,0x00000000,0x000400fa,
0x00000072,0x00000010,0x0000006d,0x0000006f,0x00000070,0x0004003d,0x00000006,0x00000073, 0x0000005f,0x00000060,0x00000061,0x000200f8,0x00000060,0x000100fd,0x000200f8,0x00000061,
0x00000070,0x0003003e,0x00000063,0x00000073,0x000200f9,0x00000068,0x000200f8,0x00000068, 0x0003003e,0x00000063,0x00000053,0x0004003d,0x00000006,0x00000064,0x0000004f,0x0004003d,
0x0004003d,0x00000006,0x00000074,0x0000004f,0x00050080,0x00000006,0x00000076,0x00000074, 0x00000006,0x00000065,0x00000044,0x000500ae,0x0000005e,0x00000066,0x00000064,0x00000065,
0x00000075,0x0004003d,0x00000006,0x00000077,0x0000004b,0x000500b0,0x0000005e,0x00000078, 0x000300f7,0x00000068,0x00000000,0x000400fa,0x00000066,0x00000067,0x00000068,0x000200f8,
0x00000076,0x00000077,0x000300f7,0x0000007a,0x00000000,0x000400fa,0x00000078,0x00000079, 0x00000067,0x0004003d,0x00000006,0x0000006b,0x0000004f,0x0003003e,0x0000006a,0x0000006b,
0x0000007a,0x000200f8,0x00000079,0x0004003d,0x00000006,0x0000007c,0x0000004f,0x00050080, 0x00050039,0x00000006,0x0000006c,0x0000000a,0x0000006a,0x0003003e,0x00000069,0x0000006c,
0x00000006,0x0000007d,0x0000007c,0x00000075,0x0003003e,0x0000007e,0x0000007d,0x00050039, 0x0004003d,0x00000006,0x0000006e,0x00000069,0x0003003e,0x0000006d,0x0000006e,0x0003003e,
0x00000006,0x0000007f,0x0000000a,0x0000007e,0x0003003e,0x0000007b,0x0000007f,0x0004003d, 0x0000006f,0x00000053,0x0004003d,0x00000006,0x00000071,0x00000063,0x0003003e,0x00000070,
0x00000006,0x00000081,0x0000007b,0x0003003e,0x00000080,0x00000081,0x0003003e,0x00000082, 0x00000071,0x00070039,0x00000002,0x00000072,0x00000010,0x0000006d,0x0000006f,0x00000070,
0x00000075,0x0004003d,0x00000006,0x00000084,0x00000063,0x0003003e,0x00000083,0x00000084, 0x0004003d,0x00000006,0x00000073,0x00000070,0x0003003e,0x00000063,0x00000073,0x000200f9,
0x00070039,0x00000002,0x00000085,0x00000010,0x00000080,0x00000082,0x00000083,0x0004003d, 0x00000068,0x000200f8,0x00000068,0x0004003d,0x00000006,0x00000074,0x0000004f,0x00050080,
0x00000006,0x00000086,0x00000083,0x0003003e,0x00000063,0x00000086,0x000200f9,0x0000007a, 0x00000006,0x00000076,0x00000074,0x00000075,0x0004003d,0x00000006,0x00000077,0x0000004b,
0x000200f8,0x0000007a,0x00050041,0x0000003f,0x0000008b,0x0000003e,0x00000058,0x0004003d, 0x000500b0,0x0000005e,0x00000078,0x00000076,0x00000077,0x000300f7,0x0000007a,0x00000000,
0x00000006,0x0000008c,0x0000008b,0x00050041,0x00000054,0x0000008d,0x00000052,0x00000053, 0x000400fa,0x00000078,0x00000079,0x0000007a,0x000200f8,0x00000079,0x0004003d,0x00000006,
0x0004003d,0x00000006,0x0000008e,0x0000008d,0x00050080,0x00000006,0x0000008f,0x0000008c, 0x0000007c,0x0000004f,0x00050080,0x00000006,0x0000007d,0x0000007c,0x00000075,0x0003003e,
0x0000008e,0x0004003d,0x00000006,0x00000090,0x00000063,0x00060041,0x0000001e,0x00000091, 0x0000007e,0x0000007d,0x00050039,0x00000006,0x0000007f,0x0000000a,0x0000007e,0x0003003e,
0x0000008a,0x0000001a,0x0000008f,0x0003003e,0x00000091,0x00000090,0x000100fd,0x00010038, 0x0000007b,0x0000007f,0x0004003d,0x00000006,0x00000081,0x0000007b,0x0003003e,0x00000080,
0x00000081,0x0003003e,0x00000082,0x00000075,0x0004003d,0x00000006,0x00000084,0x00000063,
0x0003003e,0x00000083,0x00000084,0x00070039,0x00000002,0x00000085,0x00000010,0x00000080,
0x00000082,0x00000083,0x0004003d,0x00000006,0x00000086,0x00000083,0x0003003e,0x00000063,
0x00000086,0x000200f9,0x0000007a,0x000200f8,0x0000007a,0x00050041,0x0000003f,0x0000008b,
0x0000003e,0x00000058,0x0004003d,0x00000006,0x0000008c,0x0000008b,0x00050041,0x00000054,
0x0000008d,0x00000052,0x00000053,0x0004003d,0x00000006,0x0000008e,0x0000008d,0x00050080,
0x00000006,0x0000008f,0x0000008c,0x0000008e,0x0004003d,0x00000006,0x00000090,0x00000063,
0x00060041,0x0000001e,0x00000091,0x0000008a,0x0000001a,0x0000008f,0x0003003e,0x00000091,
0x00000090,0x00050041,0x00000054,0x00000092,0x00000052,0x00000053,0x0004003d,0x00000006,
0x00000093,0x00000092,0x000500aa,0x0000005e,0x00000094,0x00000093,0x00000053,0x000300f7,
0x00000096,0x00000000,0x000400fa,0x00000094,0x00000095,0x00000096,0x000200f8,0x00000095,
0x00050041,0x0000003f,0x0000009b,0x0000003e,0x00000028,0x0004003d,0x00000006,0x0000009c,
0x0000009b,0x00050041,0x0000003f,0x0000009d,0x0000003e,0x0000001a,0x0004003d,0x00000006,
0x0000009e,0x0000009d,0x00060041,0x0000001e,0x0000009f,0x0000003b,0x0000001a,0x0000009e,
0x0004003d,0x00000006,0x000000a0,0x0000009f,0x00060041,0x0000001e,0x000000a1,0x0000009a,
0x0000001a,0x0000009c,0x0003003e,0x000000a1,0x000000a0,0x00050041,0x0000003f,0x000000a2,
0x0000003e,0x00000028,0x0004003d,0x00000006,0x000000a3,0x000000a2,0x00050080,0x00000006,
0x000000a4,0x000000a3,0x00000075,0x00050041,0x0000003f,0x000000a5,0x0000003e,0x0000001a,
0x0004003d,0x00000006,0x000000a6,0x000000a5,0x00050080,0x00000006,0x000000a7,0x000000a6,
0x00000075,0x00060041,0x0000001e,0x000000a8,0x0000003b,0x0000001a,0x000000a7,0x0004003d,
0x00000006,0x000000a9,0x000000a8,0x00060041,0x0000001e,0x000000aa,0x0000009a,0x0000001a,
0x000000a4,0x0003003e,0x000000aa,0x000000a9,0x00050041,0x0000003f,0x000000ab,0x0000003e,
0x00000028,0x0004003d,0x00000006,0x000000ac,0x000000ab,0x00050080,0x00000006,0x000000ad,
0x000000ac,0x00000047,0x0004003d,0x00000006,0x000000ae,0x00000044,0x000500c7,0x00000006,
0x000000af,0x000000ae,0x00000075,0x00060041,0x0000001e,0x000000b0,0x0000009a,0x0000001a,
0x000000ad,0x0003003e,0x000000b0,0x000000af,0x00050041,0x0000003f,0x000000b1,0x0000003e,
0x00000028,0x0004003d,0x00000006,0x000000b2,0x000000b1,0x00050080,0x00000006,0x000000b3,
0x000000b2,0x00000023,0x00050041,0x0000003f,0x000000b4,0x0000003e,0x0000001a,0x0004003d,
0x00000006,0x000000b5,0x000000b4,0x00050080,0x00000006,0x000000b6,0x000000b5,0x00000023,
0x00060041,0x0000001e,0x000000b7,0x0000003b,0x0000001a,0x000000b6,0x0004003d,0x00000006,
0x000000b8,0x000000b7,0x00060041,0x0000001e,0x000000b9,0x0000009a,0x0000001a,0x000000b3,
0x0003003e,0x000000b9,0x000000b8,0x00050041,0x0000003f,0x000000ba,0x0000003e,0x00000028,
0x0004003d,0x00000006,0x000000bb,0x000000ba,0x00050080,0x00000006,0x000000bd,0x000000bb,
0x000000bc,0x00060041,0x0000001e,0x000000be,0x0000009a,0x0000001a,0x000000bd,0x0003003e,
0x000000be,0x00000053,0x000200f9,0x00000096,0x000200f8,0x00000096,0x000100fd,0x00010038,
0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009, 0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,
0x000200f8,0x0000000b,0x0004003b,0x00000007,0x00000012,0x00000007,0x0004003b,0x00000007, 0x000200f8,0x0000000b,0x0004003b,0x00000007,0x00000012,0x00000007,0x0004003b,0x00000007,
0x00000014,0x00000007,0x0004003b,0x00000007,0x00000021,0x00000007,0x0004003b,0x00000007, 0x00000014,0x00000007,0x0004003b,0x00000007,0x00000021,0x00000007,0x0004003b,0x00000007,
...@@ -140,31 +175,37 @@ const uint32_t kConvertIndex_comp_00000002[] = { ...@@ -140,31 +175,37 @@ const uint32_t kConvertIndex_comp_00000002[] = {
// layout(set = 0, binding = 0)buffer dst // layout(set = 0, binding = 0)buffer dst
// { // {
// //
// uint dstData[]; // uint dstIndexBuf[];
// }; // };
// //
// layout(set = 0, binding = 1)readonly buffer src // layout(set = 0, binding = 1)readonly buffer src
// { // {
// //
// uint srcData[]; // uint srcIndexBuf[];
// }; // };
// //
// layout(set = 0, binding = 2)readonly buffer cmd // layout(set = 0, binding = 2)readonly buffer srcIndirect
// { // {
// //
// uint cmdData[]; // uint srcIndirectBuf[];
// };
//
// layout(set = 0, binding = 3)buffer dstIndirect
// {
//
// uint dstIndirectBuf[];
// }; // };
// //
// layout(push_constant)uniform PushConstants // layout(push_constant)uniform PushConstants
// { // {
// //
// uint cmdOffsetDiv4; // uint srcIndirectOffsetDiv4;
// //
// uint dstOffsetDiv4; // uint dstIndexBufOffsetDiv4;
// //
// uint maxIndex; // uint maxIndex;
// //
// uint _padding; // uint dstIndirectBufOffsetDiv4;
// }; // };
// //
// uint PullIndex(uint index) // uint PullIndex(uint index)
...@@ -172,7 +213,7 @@ const uint32_t kConvertIndex_comp_00000002[] = { ...@@ -172,7 +213,7 @@ const uint32_t kConvertIndex_comp_00000002[] = {
// //
// uint srcIndex = index; // uint srcIndex = index;
// //
// uint srcBlock = srcData[srcIndex >> 2]; // uint srcBlock = srcIndexBuf[srcIndex >> 2];
// uint srcComponent =(srcIndex & 3); // uint srcComponent =(srcIndex & 3);
// //
// uint value =(srcBlock >>(srcComponent << 3))& 0xFF; // uint value =(srcBlock >>(srcComponent << 3))& 0xFF;
...@@ -189,8 +230,8 @@ const uint32_t kConvertIndex_comp_00000002[] = { ...@@ -189,8 +230,8 @@ const uint32_t kConvertIndex_comp_00000002[] = {
// void main() // void main()
// { // {
// //
// uint indexCount = cmdData[cmdOffsetDiv4]; // uint indexCount = srcIndirectBuf[srcIndirectOffsetDiv4];
// uint firstIndex = cmdData[cmdOffsetDiv4 + 2]; // uint firstIndex = srcIndirectBuf[srcIndirectOffsetDiv4 + 2];
// uint endIndex = firstIndex + indexCount; // uint endIndex = firstIndex + indexCount;
// //
// uint index =((gl_GlobalInvocationID . x +(firstIndex >> 1))<< 1); // uint index =((gl_GlobalInvocationID . x +(firstIndex >> 1))<< 1);
...@@ -212,5 +253,18 @@ const uint32_t kConvertIndex_comp_00000002[] = { ...@@ -212,5 +253,18 @@ const uint32_t kConvertIndex_comp_00000002[] = {
// PackIndexValue(srcValue, 1, dstValue); // PackIndexValue(srcValue, 1, dstValue);
// } // }
// //
// dstData[dstOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue; // dstIndexBuf[dstIndexBufOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue;
//
// if(gl_GlobalInvocationID . x == 0)
// {
// dstIndirectBuf[dstIndirectBufOffsetDiv4]= srcIndirectBuf[srcIndirectOffsetDiv4];
//
// dstIndirectBuf[dstIndirectBufOffsetDiv4 + 1]= srcIndirectBuf[srcIndirectOffsetDiv4 + 1];
//
// dstIndirectBuf[dstIndirectBufOffsetDiv4 + 2]= firstIndex & 1;
//
// dstIndirectBuf[dstIndirectBufOffsetDiv4 + 3]= srcIndirectBuf[srcIndirectOffsetDiv4 + 3];
// dstIndirectBuf[dstIndirectBufOffsetDiv4 + 4]= 0;
// }
//
// } // }
// 7.12.3226 // 7.12.3226
#pragma once #pragma once
const uint32_t kConvertIndex_comp_00000003[] = { const uint32_t kConvertIndex_comp_00000003[] = {
0x07230203,0x00010000,0x00080007,0x00000099,0x00000000,0x00020011,0x00000001,0x0006000b, 0x07230203,0x00010000,0x00080007,0x000000c6,0x00000000,0x00020011,0x00000001,0x0006000b,
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000058,0x00060010,0x00000004, 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000058,0x00060010,0x00000004,
0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x00040005, 0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x00040005,
...@@ -11,106 +11,141 @@ const uint32_t kConvertIndex_comp_00000003[] = { ...@@ -11,106 +11,141 @@ const uint32_t kConvertIndex_comp_00000003[] = {
0x56637273,0x65756c61,0x00000000,0x00050005,0x0000000e,0x65646e69,0x646e4978,0x00007865, 0x56637273,0x65756c61,0x00000000,0x00050005,0x0000000e,0x65646e69,0x646e4978,0x00007865,
0x00050005,0x0000000f,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000012,0x49637273, 0x00050005,0x0000000f,0x56747364,0x65756c61,0x00000000,0x00050005,0x00000012,0x49637273,
0x7865646e,0x00000000,0x00050005,0x00000014,0x42637273,0x6b636f6c,0x00000000,0x00030005, 0x7865646e,0x00000000,0x00050005,0x00000014,0x42637273,0x6b636f6c,0x00000000,0x00030005,
0x00000016,0x00637273,0x00050006,0x00000016,0x00000000,0x44637273,0x00617461,0x00030005, 0x00000016,0x00637273,0x00060006,0x00000016,0x00000000,0x49637273,0x7865646e,0x00667542,
0x00000018,0x00000000,0x00060005,0x00000021,0x43637273,0x6f706d6f,0x746e656e,0x00000000, 0x00030005,0x00000018,0x00000000,0x00060005,0x00000021,0x43637273,0x6f706d6f,0x746e656e,
0x00040005,0x00000025,0x756c6176,0x00000065,0x00050005,0x0000003d,0x65646e69,0x756f4378, 0x00000000,0x00040005,0x00000025,0x756c6176,0x00000065,0x00050005,0x0000003d,0x65646e69,
0x0000746e,0x00030005,0x0000003f,0x00646d63,0x00050006,0x0000003f,0x00000000,0x44646d63, 0x756f4378,0x0000746e,0x00050005,0x0000003f,0x49637273,0x7269646e,0x00746365,0x00070006,
0x00617461,0x00030005,0x00000041,0x00000000,0x00060005,0x00000042,0x68737550,0x736e6f43, 0x0000003f,0x00000000,0x49637273,0x7269646e,0x42746365,0x00006675,0x00030005,0x00000041,
0x746e6174,0x00000073,0x00070006,0x00000042,0x00000000,0x4f646d63,0x65736666,0x76694474, 0x00000000,0x00060005,0x00000042,0x68737550,0x736e6f43,0x746e6174,0x00000073,0x00090006,
0x00000034,0x00070006,0x00000042,0x00000001,0x4f747364,0x65736666,0x76694474,0x00000034, 0x00000042,0x00000000,0x49637273,0x7269646e,0x4f746365,0x65736666,0x76694474,0x00000034,
0x00060006,0x00000042,0x00000002,0x4978616d,0x7865646e,0x00000000,0x00060006,0x00000042, 0x00090006,0x00000042,0x00000001,0x49747364,0x7865646e,0x4f667542,0x65736666,0x76694474,
0x00000003,0x6461705f,0x676e6964,0x00000000,0x00030005,0x00000044,0x00000000,0x00050005, 0x00000034,0x00060006,0x00000042,0x00000002,0x4978616d,0x7865646e,0x00000000,0x000a0006,
0x0000004a,0x73726966,0x646e4974,0x00007865,0x00050005,0x00000051,0x49646e65,0x7865646e, 0x00000042,0x00000003,0x49747364,0x7269646e,0x42746365,0x664f6675,0x74657366,0x34766944,
0x00000000,0x00040005,0x00000055,0x65646e69,0x00000078,0x00080005,0x00000058,0x475f6c67, 0x00000000,0x00030005,0x00000044,0x00000000,0x00050005,0x0000004a,0x73726966,0x646e4974,
0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00050005,0x00000068,0x56747364, 0x00007865,0x00050005,0x00000051,0x49646e65,0x7865646e,0x00000000,0x00040005,0x00000055,
0x65756c61,0x00000000,0x00050005,0x0000006e,0x56637273,0x65756c61,0x00000000,0x00040005, 0x65646e69,0x00000078,0x00080005,0x00000058,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,
0x0000006f,0x61726170,0x0000006d,0x00040005,0x00000072,0x61726170,0x0000006d,0x00040005, 0x496e6f69,0x00000044,0x00050005,0x00000068,0x56747364,0x65756c61,0x00000000,0x00050005,
0x00000074,0x61726170,0x0000006d,0x00040005,0x00000075,0x61726170,0x0000006d,0x00050005, 0x0000006e,0x56637273,0x65756c61,0x00000000,0x00040005,0x0000006f,0x61726170,0x0000006d,
0x00000080,0x56637273,0x65756c61,0x00000000,0x00040005,0x00000083,0x61726170,0x0000006d, 0x00040005,0x00000072,0x61726170,0x0000006d,0x00040005,0x00000074,0x61726170,0x0000006d,
0x00040005,0x00000085,0x61726170,0x0000006d,0x00040005,0x00000087,0x61726170,0x0000006d, 0x00040005,0x00000075,0x61726170,0x0000006d,0x00050005,0x00000080,0x56637273,0x65756c61,
0x00040005,0x00000088,0x61726170,0x0000006d,0x00030005,0x0000008d,0x00747364,0x00050006, 0x00000000,0x00040005,0x00000083,0x61726170,0x0000006d,0x00040005,0x00000085,0x61726170,
0x0000008d,0x00000000,0x44747364,0x00617461,0x00030005,0x0000008f,0x00000000,0x00040047, 0x0000006d,0x00040005,0x00000087,0x61726170,0x0000006d,0x00040005,0x00000088,0x61726170,
0x00000015,0x00000006,0x00000004,0x00040048,0x00000016,0x00000000,0x00000018,0x00050048, 0x0000006d,0x00030005,0x0000008d,0x00747364,0x00060006,0x0000008d,0x00000000,0x49747364,
0x00000016,0x00000000,0x00000023,0x00000000,0x00030047,0x00000016,0x00000003,0x00040047, 0x7865646e,0x00667542,0x00030005,0x0000008f,0x00000000,0x00050005,0x0000009d,0x49747364,
0x00000018,0x00000022,0x00000000,0x00040047,0x00000018,0x00000021,0x00000001,0x00040047, 0x7269646e,0x00746365,0x00070006,0x0000009d,0x00000000,0x49747364,0x7269646e,0x42746365,
0x0000003e,0x00000006,0x00000004,0x00040048,0x0000003f,0x00000000,0x00000018,0x00050048, 0x00006675,0x00030005,0x0000009f,0x00000000,0x00040047,0x00000015,0x00000006,0x00000004,
0x0000003f,0x00000000,0x00000023,0x00000000,0x00030047,0x0000003f,0x00000003,0x00040047, 0x00040048,0x00000016,0x00000000,0x00000018,0x00050048,0x00000016,0x00000000,0x00000023,
0x00000041,0x00000022,0x00000000,0x00040047,0x00000041,0x00000021,0x00000002,0x00050048, 0x00000000,0x00030047,0x00000016,0x00000003,0x00040047,0x00000018,0x00000022,0x00000000,
0x00000042,0x00000000,0x00000023,0x00000000,0x00050048,0x00000042,0x00000001,0x00000023, 0x00040047,0x00000018,0x00000021,0x00000001,0x00040047,0x0000003e,0x00000006,0x00000004,
0x00000004,0x00050048,0x00000042,0x00000002,0x00000023,0x00000008,0x00050048,0x00000042, 0x00040048,0x0000003f,0x00000000,0x00000018,0x00050048,0x0000003f,0x00000000,0x00000023,
0x00000003,0x00000023,0x0000000c,0x00030047,0x00000042,0x00000002,0x00040047,0x00000058, 0x00000000,0x00030047,0x0000003f,0x00000003,0x00040047,0x00000041,0x00000022,0x00000000,
0x0000000b,0x0000001c,0x00040047,0x0000008c,0x00000006,0x00000004,0x00050048,0x0000008d, 0x00040047,0x00000041,0x00000021,0x00000002,0x00050048,0x00000042,0x00000000,0x00000023,
0x00000000,0x00000023,0x00000000,0x00030047,0x0000008d,0x00000003,0x00040047,0x0000008f, 0x00000000,0x00050048,0x00000042,0x00000001,0x00000023,0x00000004,0x00050048,0x00000042,
0x00000022,0x00000000,0x00040047,0x0000008f,0x00000021,0x00000000,0x00040047,0x00000098, 0x00000002,0x00000023,0x00000008,0x00050048,0x00000042,0x00000003,0x00000023,0x0000000c,
0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, 0x00030047,0x00000042,0x00000002,0x00040047,0x00000058,0x0000000b,0x0000001c,0x00040047,
0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021, 0x0000008c,0x00000006,0x00000004,0x00050048,0x0000008d,0x00000000,0x00000023,0x00000000,
0x00000008,0x00000006,0x00000007,0x00060021,0x0000000c,0x00000002,0x00000007,0x00000007, 0x00030047,0x0000008d,0x00000003,0x00040047,0x0000008f,0x00000022,0x00000000,0x00040047,
0x00000007,0x0003001d,0x00000015,0x00000006,0x0003001e,0x00000016,0x00000015,0x00040020, 0x0000008f,0x00000021,0x00000000,0x00040047,0x0000009c,0x00000006,0x00000004,0x00050048,
0x00000017,0x00000002,0x00000016,0x0004003b,0x00000017,0x00000018,0x00000002,0x00040015, 0x0000009d,0x00000000,0x00000023,0x00000000,0x00030047,0x0000009d,0x00000003,0x00040047,
0x00000019,0x00000020,0x00000001,0x0004002b,0x00000019,0x0000001a,0x00000000,0x0004002b, 0x0000009f,0x00000022,0x00000000,0x00040047,0x0000009f,0x00000021,0x00000003,0x00040047,
0x00000019,0x0000001c,0x00000002,0x00040020,0x0000001e,0x00000002,0x00000006,0x0004002b, 0x000000c5,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,
0x00000006,0x00000023,0x00000003,0x0004002b,0x00000019,0x00000028,0x00000003,0x0004002b, 0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,
0x00000006,0x0000002b,0x000000ff,0x00020014,0x0000002e,0x0004002b,0x00000006,0x00000032, 0x00040021,0x00000008,0x00000006,0x00000007,0x00060021,0x0000000c,0x00000002,0x00000007,
0x0000ffff,0x0004002b,0x00000019,0x00000038,0x00000004,0x0003001d,0x0000003e,0x00000006, 0x00000007,0x00000007,0x0003001d,0x00000015,0x00000006,0x0003001e,0x00000016,0x00000015,
0x0003001e,0x0000003f,0x0000003e,0x00040020,0x00000040,0x00000002,0x0000003f,0x0004003b, 0x00040020,0x00000017,0x00000002,0x00000016,0x0004003b,0x00000017,0x00000018,0x00000002,
0x00000040,0x00000041,0x00000002,0x0006001e,0x00000042,0x00000006,0x00000006,0x00000006, 0x00040015,0x00000019,0x00000020,0x00000001,0x0004002b,0x00000019,0x0000001a,0x00000000,
0x00000006,0x00040020,0x00000043,0x00000009,0x00000042,0x0004003b,0x00000043,0x00000044, 0x0004002b,0x00000019,0x0000001c,0x00000002,0x00040020,0x0000001e,0x00000002,0x00000006,
0x00000009,0x00040020,0x00000045,0x00000009,0x00000006,0x0004002b,0x00000006,0x0000004d, 0x0004002b,0x00000006,0x00000023,0x00000003,0x0004002b,0x00000019,0x00000028,0x00000003,
0x00000002,0x00040017,0x00000056,0x00000006,0x00000003,0x00040020,0x00000057,0x00000001, 0x0004002b,0x00000006,0x0000002b,0x000000ff,0x00020014,0x0000002e,0x0004002b,0x00000006,
0x00000056,0x0004003b,0x00000057,0x00000058,0x00000001,0x0004002b,0x00000006,0x00000059, 0x00000032,0x0000ffff,0x0004002b,0x00000019,0x00000038,0x00000004,0x0003001d,0x0000003e,
0x00000000,0x00040020,0x0000005a,0x00000001,0x00000006,0x0004002b,0x00000019,0x0000005e, 0x00000006,0x0003001e,0x0000003f,0x0000003e,0x00040020,0x00000040,0x00000002,0x0000003f,
0x00000001,0x0004002b,0x00000006,0x0000007a,0x00000001,0x0003001d,0x0000008c,0x00000006, 0x0004003b,0x00000040,0x00000041,0x00000002,0x0006001e,0x00000042,0x00000006,0x00000006,
0x0003001e,0x0000008d,0x0000008c,0x00040020,0x0000008e,0x00000002,0x0000008d,0x0004003b, 0x00000006,0x00000006,0x00040020,0x00000043,0x00000009,0x00000042,0x0004003b,0x00000043,
0x0000008e,0x0000008f,0x00000002,0x0004002b,0x00000006,0x00000097,0x00000040,0x0006002c, 0x00000044,0x00000009,0x00040020,0x00000045,0x00000009,0x00000006,0x0004002b,0x00000006,
0x00000056,0x00000098,0x00000097,0x0000007a,0x0000007a,0x00050036,0x00000002,0x00000004, 0x0000004d,0x00000002,0x00040017,0x00000056,0x00000006,0x00000003,0x00040020,0x00000057,
0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x0000003d,0x00000007, 0x00000001,0x00000056,0x0004003b,0x00000057,0x00000058,0x00000001,0x0004002b,0x00000006,
0x0004003b,0x00000007,0x0000004a,0x00000007,0x0004003b,0x00000007,0x00000051,0x00000007, 0x00000059,0x00000000,0x00040020,0x0000005a,0x00000001,0x00000006,0x0004002b,0x00000019,
0x0004003b,0x00000007,0x00000055,0x00000007,0x0004003b,0x00000007,0x00000068,0x00000007, 0x0000005e,0x00000001,0x0004002b,0x00000006,0x0000007a,0x00000001,0x0003001d,0x0000008c,
0x0004003b,0x00000007,0x0000006e,0x00000007,0x0004003b,0x00000007,0x0000006f,0x00000007, 0x00000006,0x0003001e,0x0000008d,0x0000008c,0x00040020,0x0000008e,0x00000002,0x0000008d,
0x0004003b,0x00000007,0x00000072,0x00000007,0x0004003b,0x00000007,0x00000074,0x00000007, 0x0004003b,0x0000008e,0x0000008f,0x00000002,0x0003001d,0x0000009c,0x00000006,0x0003001e,
0x0004003b,0x00000007,0x00000075,0x00000007,0x0004003b,0x00000007,0x00000080,0x00000007, 0x0000009d,0x0000009c,0x00040020,0x0000009e,0x00000002,0x0000009d,0x0004003b,0x0000009e,
0x0004003b,0x00000007,0x00000083,0x00000007,0x0004003b,0x00000007,0x00000085,0x00000007, 0x0000009f,0x00000002,0x0004002b,0x00000006,0x000000c1,0x00000004,0x0004002b,0x00000006,
0x0004003b,0x00000007,0x00000087,0x00000007,0x0004003b,0x00000007,0x00000088,0x00000007, 0x000000c4,0x00000040,0x0006002c,0x00000056,0x000000c5,0x000000c4,0x0000007a,0x0000007a,
0x00050041,0x00000045,0x00000046,0x00000044,0x0000001a,0x0004003d,0x00000006,0x00000047, 0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,
0x00000046,0x00060041,0x0000001e,0x00000048,0x00000041,0x0000001a,0x00000047,0x0004003d, 0x00000007,0x0000003d,0x00000007,0x0004003b,0x00000007,0x0000004a,0x00000007,0x0004003b,
0x00000006,0x00000049,0x00000048,0x0003003e,0x0000003d,0x00000049,0x00050041,0x00000045, 0x00000007,0x00000051,0x00000007,0x0004003b,0x00000007,0x00000055,0x00000007,0x0004003b,
0x0000004b,0x00000044,0x0000001a,0x0004003d,0x00000006,0x0000004c,0x0000004b,0x00050080, 0x00000007,0x00000068,0x00000007,0x0004003b,0x00000007,0x0000006e,0x00000007,0x0004003b,
0x00000006,0x0000004e,0x0000004c,0x0000004d,0x00060041,0x0000001e,0x0000004f,0x00000041, 0x00000007,0x0000006f,0x00000007,0x0004003b,0x00000007,0x00000072,0x00000007,0x0004003b,
0x0000001a,0x0000004e,0x0004003d,0x00000006,0x00000050,0x0000004f,0x0003003e,0x0000004a, 0x00000007,0x00000074,0x00000007,0x0004003b,0x00000007,0x00000075,0x00000007,0x0004003b,
0x00000050,0x0004003d,0x00000006,0x00000052,0x0000004a,0x0004003d,0x00000006,0x00000053, 0x00000007,0x00000080,0x00000007,0x0004003b,0x00000007,0x00000083,0x00000007,0x0004003b,
0x0000003d,0x00050080,0x00000006,0x00000054,0x00000052,0x00000053,0x0003003e,0x00000051, 0x00000007,0x00000085,0x00000007,0x0004003b,0x00000007,0x00000087,0x00000007,0x0004003b,
0x00000054,0x00050041,0x0000005a,0x0000005b,0x00000058,0x00000059,0x0004003d,0x00000006, 0x00000007,0x00000088,0x00000007,0x00050041,0x00000045,0x00000046,0x00000044,0x0000001a,
0x0000005c,0x0000005b,0x0004003d,0x00000006,0x0000005d,0x0000004a,0x000500c2,0x00000006, 0x0004003d,0x00000006,0x00000047,0x00000046,0x00060041,0x0000001e,0x00000048,0x00000041,
0x0000005f,0x0000005d,0x0000005e,0x00050080,0x00000006,0x00000060,0x0000005c,0x0000005f, 0x0000001a,0x00000047,0x0004003d,0x00000006,0x00000049,0x00000048,0x0003003e,0x0000003d,
0x000500c4,0x00000006,0x00000061,0x00000060,0x0000005e,0x0003003e,0x00000055,0x00000061, 0x00000049,0x00050041,0x00000045,0x0000004b,0x00000044,0x0000001a,0x0004003d,0x00000006,
0x0004003d,0x00000006,0x00000062,0x00000055,0x0004003d,0x00000006,0x00000063,0x00000051, 0x0000004c,0x0000004b,0x00050080,0x00000006,0x0000004e,0x0000004c,0x0000004d,0x00060041,
0x000500ae,0x0000002e,0x00000064,0x00000062,0x00000063,0x000300f7,0x00000066,0x00000000, 0x0000001e,0x0000004f,0x00000041,0x0000001a,0x0000004e,0x0004003d,0x00000006,0x00000050,
0x000400fa,0x00000064,0x00000065,0x00000066,0x000200f8,0x00000065,0x000100fd,0x000200f8, 0x0000004f,0x0003003e,0x0000004a,0x00000050,0x0004003d,0x00000006,0x00000052,0x0000004a,
0x00000066,0x0003003e,0x00000068,0x00000059,0x0004003d,0x00000006,0x00000069,0x00000055, 0x0004003d,0x00000006,0x00000053,0x0000003d,0x00050080,0x00000006,0x00000054,0x00000052,
0x0004003d,0x00000006,0x0000006a,0x0000004a,0x000500ae,0x0000002e,0x0000006b,0x00000069, 0x00000053,0x0003003e,0x00000051,0x00000054,0x00050041,0x0000005a,0x0000005b,0x00000058,
0x0000006a,0x000300f7,0x0000006d,0x00000000,0x000400fa,0x0000006b,0x0000006c,0x0000006d, 0x00000059,0x0004003d,0x00000006,0x0000005c,0x0000005b,0x0004003d,0x00000006,0x0000005d,
0x000200f8,0x0000006c,0x0004003d,0x00000006,0x00000070,0x00000055,0x0003003e,0x0000006f, 0x0000004a,0x000500c2,0x00000006,0x0000005f,0x0000005d,0x0000005e,0x00050080,0x00000006,
0x00000070,0x00050039,0x00000006,0x00000071,0x0000000a,0x0000006f,0x0003003e,0x0000006e, 0x00000060,0x0000005c,0x0000005f,0x000500c4,0x00000006,0x00000061,0x00000060,0x0000005e,
0x00000071,0x0004003d,0x00000006,0x00000073,0x0000006e,0x0003003e,0x00000072,0x00000073, 0x0003003e,0x00000055,0x00000061,0x0004003d,0x00000006,0x00000062,0x00000055,0x0004003d,
0x0003003e,0x00000074,0x00000059,0x0004003d,0x00000006,0x00000076,0x00000068,0x0003003e, 0x00000006,0x00000063,0x00000051,0x000500ae,0x0000002e,0x00000064,0x00000062,0x00000063,
0x00000075,0x00000076,0x00070039,0x00000002,0x00000077,0x00000010,0x00000072,0x00000074, 0x000300f7,0x00000066,0x00000000,0x000400fa,0x00000064,0x00000065,0x00000066,0x000200f8,
0x00000075,0x0004003d,0x00000006,0x00000078,0x00000075,0x0003003e,0x00000068,0x00000078, 0x00000065,0x000100fd,0x000200f8,0x00000066,0x0003003e,0x00000068,0x00000059,0x0004003d,
0x000200f9,0x0000006d,0x000200f8,0x0000006d,0x0004003d,0x00000006,0x00000079,0x00000055, 0x00000006,0x00000069,0x00000055,0x0004003d,0x00000006,0x0000006a,0x0000004a,0x000500ae,
0x00050080,0x00000006,0x0000007b,0x00000079,0x0000007a,0x0004003d,0x00000006,0x0000007c, 0x0000002e,0x0000006b,0x00000069,0x0000006a,0x000300f7,0x0000006d,0x00000000,0x000400fa,
0x00000051,0x000500b0,0x0000002e,0x0000007d,0x0000007b,0x0000007c,0x000300f7,0x0000007f, 0x0000006b,0x0000006c,0x0000006d,0x000200f8,0x0000006c,0x0004003d,0x00000006,0x00000070,
0x00000000,0x000400fa,0x0000007d,0x0000007e,0x0000007f,0x000200f8,0x0000007e,0x0004003d, 0x00000055,0x0003003e,0x0000006f,0x00000070,0x00050039,0x00000006,0x00000071,0x0000000a,
0x00000006,0x00000081,0x00000055,0x00050080,0x00000006,0x00000082,0x00000081,0x0000007a, 0x0000006f,0x0003003e,0x0000006e,0x00000071,0x0004003d,0x00000006,0x00000073,0x0000006e,
0x0003003e,0x00000083,0x00000082,0x00050039,0x00000006,0x00000084,0x0000000a,0x00000083, 0x0003003e,0x00000072,0x00000073,0x0003003e,0x00000074,0x00000059,0x0004003d,0x00000006,
0x0003003e,0x00000080,0x00000084,0x0004003d,0x00000006,0x00000086,0x00000080,0x0003003e, 0x00000076,0x00000068,0x0003003e,0x00000075,0x00000076,0x00070039,0x00000002,0x00000077,
0x00000085,0x00000086,0x0003003e,0x00000087,0x0000007a,0x0004003d,0x00000006,0x00000089, 0x00000010,0x00000072,0x00000074,0x00000075,0x0004003d,0x00000006,0x00000078,0x00000075,
0x00000068,0x0003003e,0x00000088,0x00000089,0x00070039,0x00000002,0x0000008a,0x00000010, 0x0003003e,0x00000068,0x00000078,0x000200f9,0x0000006d,0x000200f8,0x0000006d,0x0004003d,
0x00000085,0x00000087,0x00000088,0x0004003d,0x00000006,0x0000008b,0x00000088,0x0003003e, 0x00000006,0x00000079,0x00000055,0x00050080,0x00000006,0x0000007b,0x00000079,0x0000007a,
0x00000068,0x0000008b,0x000200f9,0x0000007f,0x000200f8,0x0000007f,0x00050041,0x00000045, 0x0004003d,0x00000006,0x0000007c,0x00000051,0x000500b0,0x0000002e,0x0000007d,0x0000007b,
0x00000090,0x00000044,0x0000005e,0x0004003d,0x00000006,0x00000091,0x00000090,0x00050041, 0x0000007c,0x000300f7,0x0000007f,0x00000000,0x000400fa,0x0000007d,0x0000007e,0x0000007f,
0x0000005a,0x00000092,0x00000058,0x00000059,0x0004003d,0x00000006,0x00000093,0x00000092, 0x000200f8,0x0000007e,0x0004003d,0x00000006,0x00000081,0x00000055,0x00050080,0x00000006,
0x00050080,0x00000006,0x00000094,0x00000091,0x00000093,0x0004003d,0x00000006,0x00000095, 0x00000082,0x00000081,0x0000007a,0x0003003e,0x00000083,0x00000082,0x00050039,0x00000006,
0x00000068,0x00060041,0x0000001e,0x00000096,0x0000008f,0x0000001a,0x00000094,0x0003003e, 0x00000084,0x0000000a,0x00000083,0x0003003e,0x00000080,0x00000084,0x0004003d,0x00000006,
0x00000096,0x00000095,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000, 0x00000086,0x00000080,0x0003003e,0x00000085,0x00000086,0x0003003e,0x00000087,0x0000007a,
0x0004003d,0x00000006,0x00000089,0x00000068,0x0003003e,0x00000088,0x00000089,0x00070039,
0x00000002,0x0000008a,0x00000010,0x00000085,0x00000087,0x00000088,0x0004003d,0x00000006,
0x0000008b,0x00000088,0x0003003e,0x00000068,0x0000008b,0x000200f9,0x0000007f,0x000200f8,
0x0000007f,0x00050041,0x00000045,0x00000090,0x00000044,0x0000005e,0x0004003d,0x00000006,
0x00000091,0x00000090,0x00050041,0x0000005a,0x00000092,0x00000058,0x00000059,0x0004003d,
0x00000006,0x00000093,0x00000092,0x00050080,0x00000006,0x00000094,0x00000091,0x00000093,
0x0004003d,0x00000006,0x00000095,0x00000068,0x00060041,0x0000001e,0x00000096,0x0000008f,
0x0000001a,0x00000094,0x0003003e,0x00000096,0x00000095,0x00050041,0x0000005a,0x00000097,
0x00000058,0x00000059,0x0004003d,0x00000006,0x00000098,0x00000097,0x000500aa,0x0000002e,
0x00000099,0x00000098,0x00000059,0x000300f7,0x0000009b,0x00000000,0x000400fa,0x00000099,
0x0000009a,0x0000009b,0x000200f8,0x0000009a,0x00050041,0x00000045,0x000000a0,0x00000044,
0x00000028,0x0004003d,0x00000006,0x000000a1,0x000000a0,0x00050041,0x00000045,0x000000a2,
0x00000044,0x0000001a,0x0004003d,0x00000006,0x000000a3,0x000000a2,0x00060041,0x0000001e,
0x000000a4,0x00000041,0x0000001a,0x000000a3,0x0004003d,0x00000006,0x000000a5,0x000000a4,
0x00060041,0x0000001e,0x000000a6,0x0000009f,0x0000001a,0x000000a1,0x0003003e,0x000000a6,
0x000000a5,0x00050041,0x00000045,0x000000a7,0x00000044,0x00000028,0x0004003d,0x00000006,
0x000000a8,0x000000a7,0x00050080,0x00000006,0x000000a9,0x000000a8,0x0000007a,0x00050041,
0x00000045,0x000000aa,0x00000044,0x0000001a,0x0004003d,0x00000006,0x000000ab,0x000000aa,
0x00050080,0x00000006,0x000000ac,0x000000ab,0x0000007a,0x00060041,0x0000001e,0x000000ad,
0x00000041,0x0000001a,0x000000ac,0x0004003d,0x00000006,0x000000ae,0x000000ad,0x00060041,
0x0000001e,0x000000af,0x0000009f,0x0000001a,0x000000a9,0x0003003e,0x000000af,0x000000ae,
0x00050041,0x00000045,0x000000b0,0x00000044,0x00000028,0x0004003d,0x00000006,0x000000b1,
0x000000b0,0x00050080,0x00000006,0x000000b2,0x000000b1,0x0000004d,0x0004003d,0x00000006,
0x000000b3,0x0000004a,0x000500c7,0x00000006,0x000000b4,0x000000b3,0x0000007a,0x00060041,
0x0000001e,0x000000b5,0x0000009f,0x0000001a,0x000000b2,0x0003003e,0x000000b5,0x000000b4,
0x00050041,0x00000045,0x000000b6,0x00000044,0x00000028,0x0004003d,0x00000006,0x000000b7,
0x000000b6,0x00050080,0x00000006,0x000000b8,0x000000b7,0x00000023,0x00050041,0x00000045,
0x000000b9,0x00000044,0x0000001a,0x0004003d,0x00000006,0x000000ba,0x000000b9,0x00050080,
0x00000006,0x000000bb,0x000000ba,0x00000023,0x00060041,0x0000001e,0x000000bc,0x00000041,
0x0000001a,0x000000bb,0x0004003d,0x00000006,0x000000bd,0x000000bc,0x00060041,0x0000001e,
0x000000be,0x0000009f,0x0000001a,0x000000b8,0x0003003e,0x000000be,0x000000bd,0x00050041,
0x00000045,0x000000bf,0x00000044,0x00000028,0x0004003d,0x00000006,0x000000c0,0x000000bf,
0x00050080,0x00000006,0x000000c2,0x000000c0,0x000000c1,0x00060041,0x0000001e,0x000000c3,
0x0000009f,0x0000001a,0x000000c2,0x0003003e,0x000000c3,0x00000059,0x000200f9,0x0000009b,
0x000200f8,0x0000009b,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,
0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000007, 0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000007,
0x00000012,0x00000007,0x0004003b,0x00000007,0x00000014,0x00000007,0x0004003b,0x00000007, 0x00000012,0x00000007,0x0004003b,0x00000007,0x00000014,0x00000007,0x0004003b,0x00000007,
0x00000021,0x00000007,0x0004003b,0x00000007,0x00000025,0x00000007,0x0004003d,0x00000006, 0x00000021,0x00000007,0x0004003b,0x00000007,0x00000025,0x00000007,0x0004003d,0x00000006,
...@@ -144,31 +179,37 @@ const uint32_t kConvertIndex_comp_00000003[] = { ...@@ -144,31 +179,37 @@ const uint32_t kConvertIndex_comp_00000003[] = {
// layout(set = 0, binding = 0)buffer dst // layout(set = 0, binding = 0)buffer dst
// { // {
// //
// uint dstData[]; // uint dstIndexBuf[];
// }; // };
// //
// layout(set = 0, binding = 1)readonly buffer src // layout(set = 0, binding = 1)readonly buffer src
// { // {
// //
// uint srcData[]; // uint srcIndexBuf[];
// }; // };
// //
// layout(set = 0, binding = 2)readonly buffer cmd // layout(set = 0, binding = 2)readonly buffer srcIndirect
// { // {
// //
// uint cmdData[]; // uint srcIndirectBuf[];
// };
//
// layout(set = 0, binding = 3)buffer dstIndirect
// {
//
// uint dstIndirectBuf[];
// }; // };
// //
// layout(push_constant)uniform PushConstants // layout(push_constant)uniform PushConstants
// { // {
// //
// uint cmdOffsetDiv4; // uint srcIndirectOffsetDiv4;
// //
// uint dstOffsetDiv4; // uint dstIndexBufOffsetDiv4;
// //
// uint maxIndex; // uint maxIndex;
// //
// uint _padding; // uint dstIndirectBufOffsetDiv4;
// }; // };
// //
// uint PullIndex(uint index) // uint PullIndex(uint index)
...@@ -176,7 +217,7 @@ const uint32_t kConvertIndex_comp_00000003[] = { ...@@ -176,7 +217,7 @@ const uint32_t kConvertIndex_comp_00000003[] = {
// //
// uint srcIndex = index; // uint srcIndex = index;
// //
// uint srcBlock = srcData[srcIndex >> 2]; // uint srcBlock = srcIndexBuf[srcIndex >> 2];
// uint srcComponent =(srcIndex & 3); // uint srcComponent =(srcIndex & 3);
// //
// uint value =(srcBlock >>(srcComponent << 3))& 0xFF; // uint value =(srcBlock >>(srcComponent << 3))& 0xFF;
...@@ -196,8 +237,8 @@ const uint32_t kConvertIndex_comp_00000003[] = { ...@@ -196,8 +237,8 @@ const uint32_t kConvertIndex_comp_00000003[] = {
// void main() // void main()
// { // {
// //
// uint indexCount = cmdData[cmdOffsetDiv4]; // uint indexCount = srcIndirectBuf[srcIndirectOffsetDiv4];
// uint firstIndex = cmdData[cmdOffsetDiv4 + 2]; // uint firstIndex = srcIndirectBuf[srcIndirectOffsetDiv4 + 2];
// uint endIndex = firstIndex + indexCount; // uint endIndex = firstIndex + indexCount;
// //
// uint index =((gl_GlobalInvocationID . x +(firstIndex >> 1))<< 1); // uint index =((gl_GlobalInvocationID . x +(firstIndex >> 1))<< 1);
...@@ -219,5 +260,18 @@ const uint32_t kConvertIndex_comp_00000003[] = { ...@@ -219,5 +260,18 @@ const uint32_t kConvertIndex_comp_00000003[] = {
// PackIndexValue(srcValue, 1, dstValue); // PackIndexValue(srcValue, 1, dstValue);
// } // }
// //
// dstData[dstOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue; // dstIndexBuf[dstIndexBufOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue;
//
// if(gl_GlobalInvocationID . x == 0)
// {
// dstIndirectBuf[dstIndirectBufOffsetDiv4]= srcIndirectBuf[srcIndirectOffsetDiv4];
//
// dstIndirectBuf[dstIndirectBufOffsetDiv4 + 1]= srcIndirectBuf[srcIndirectOffsetDiv4 + 1];
//
// dstIndirectBuf[dstIndirectBufOffsetDiv4 + 2]= firstIndex & 1;
//
// dstIndirectBuf[dstIndirectBufOffsetDiv4 + 3]= srcIndirectBuf[srcIndirectOffsetDiv4 + 3];
// dstIndirectBuf[dstIndirectBufOffsetDiv4 + 4]= 0;
// }
//
// } // }
...@@ -39,18 +39,18 @@ const uint32_t kConvertIndexIndirectLineLoop_comp_00000000[] = { ...@@ -39,18 +39,18 @@ const uint32_t kConvertIndexIndirectLineLoop_comp_00000000[] = {
0x000000c6,0x00000000,0x00040047,0x00000012,0x00000006,0x00000004,0x00040048,0x00000013, 0x000000c6,0x00000000,0x00040047,0x00000012,0x00000006,0x00000004,0x00040048,0x00000013,
0x00000000,0x00000018,0x00050048,0x00000013,0x00000000,0x00000023,0x00000000,0x00030047, 0x00000000,0x00000018,0x00050048,0x00000013,0x00000000,0x00000023,0x00000000,0x00030047,
0x00000013,0x00000003,0x00040047,0x00000015,0x00000022,0x00000000,0x00040047,0x00000015, 0x00000013,0x00000003,0x00040047,0x00000015,0x00000022,0x00000000,0x00040047,0x00000015,
0x00000021,0x00000003,0x00050048,0x00000030,0x00000000,0x00000023,0x00000000,0x00050048, 0x00000021,0x00000001,0x00050048,0x00000030,0x00000000,0x00000023,0x00000000,0x00050048,
0x00000030,0x00000001,0x00000023,0x00000004,0x00050048,0x00000030,0x00000002,0x00000023, 0x00000030,0x00000001,0x00000023,0x00000004,0x00050048,0x00000030,0x00000002,0x00000023,
0x00000008,0x00050048,0x00000030,0x00000003,0x00000023,0x0000000c,0x00030047,0x00000030, 0x00000008,0x00050048,0x00000030,0x00000003,0x00000023,0x0000000c,0x00030047,0x00000030,
0x00000002,0x00040047,0x0000003b,0x00000006,0x00000004,0x00050048,0x0000003c,0x00000000, 0x00000002,0x00040047,0x0000003b,0x00000006,0x00000004,0x00050048,0x0000003c,0x00000000,
0x00000023,0x00000000,0x00030047,0x0000003c,0x00000003,0x00040047,0x0000003e,0x00000022, 0x00000023,0x00000000,0x00030047,0x0000003c,0x00000003,0x00040047,0x0000003e,0x00000022,
0x00000000,0x00040047,0x0000003e,0x00000021,0x00000002,0x00040047,0x00000056,0x00000006, 0x00000000,0x00040047,0x0000003e,0x00000021,0x00000000,0x00040047,0x00000056,0x00000006,
0x00000004,0x00040048,0x00000057,0x00000000,0x00000018,0x00050048,0x00000057,0x00000000, 0x00000004,0x00040048,0x00000057,0x00000000,0x00000018,0x00050048,0x00000057,0x00000000,
0x00000023,0x00000000,0x00030047,0x00000057,0x00000003,0x00040047,0x00000059,0x00000022, 0x00000023,0x00000000,0x00030047,0x00000057,0x00000003,0x00040047,0x00000059,0x00000022,
0x00000000,0x00040047,0x00000059,0x00000021,0x00000000,0x00040047,0x0000006b,0x0000000b, 0x00000000,0x00040047,0x00000059,0x00000021,0x00000002,0x00040047,0x0000006b,0x0000000b,
0x0000001c,0x00040047,0x000000c3,0x00000006,0x00000004,0x00050048,0x000000c4,0x00000000, 0x0000001c,0x00040047,0x000000c3,0x00000006,0x00000004,0x00050048,0x000000c4,0x00000000,
0x00000023,0x00000000,0x00030047,0x000000c4,0x00000003,0x00040047,0x000000c6,0x00000022, 0x00000023,0x00000000,0x00030047,0x000000c4,0x00000003,0x00040047,0x000000c6,0x00000022,
0x00000000,0x00040047,0x000000c6,0x00000021,0x00000001,0x00040047,0x000000ed,0x0000000b, 0x00000000,0x00040047,0x000000c6,0x00000021,0x00000003,0x00040047,0x000000ed,0x0000000b,
0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006, 0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,
0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008, 0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,
0x00000006,0x00000007,0x00050021,0x0000000c,0x00000002,0x00000007,0x00000007,0x0003001d, 0x00000006,0x00000007,0x00050021,0x0000000c,0x00000002,0x00000007,0x00000007,0x0003001d,
...@@ -207,28 +207,28 @@ const uint32_t kConvertIndexIndirectLineLoop_comp_00000000[] = { ...@@ -207,28 +207,28 @@ const uint32_t kConvertIndexIndirectLineLoop_comp_00000000[] = {
// //
// layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in; // layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
// //
// layout(set = 0, binding = 0)readonly buffer cmd // layout(set = 0, binding = 0)buffer dst
// { // {
// //
// uint cmdData[]; // uint dstData[];
// }; // };
// //
// layout(set = 0, binding = 1)buffer dstCmd // layout(set = 0, binding = 1)readonly buffer src
// { // {
// //
// uint dstCmdData[]; // uint srcData[];
// }; // };
// //
// layout(set = 0, binding = 2)buffer dst // layout(set = 0, binding = 2)readonly buffer cmd
// { // {
// //
// uint dstData[]; // uint cmdData[];
// }; // };
// //
// layout(set = 0, binding = 3)readonly buffer src // layout(set = 0, binding = 3)buffer dstCmd
// { // {
// //
// uint srcData[]; // uint dstCmdData[];
// }; // };
// //
// layout(push_constant)uniform PushConstants // layout(push_constant)uniform PushConstants
......
...@@ -34,18 +34,18 @@ const uint32_t kConvertIndexIndirectLineLoop_comp_00000001[] = { ...@@ -34,18 +34,18 @@ const uint32_t kConvertIndexIndirectLineLoop_comp_00000001[] = {
0x6144646d,0x00006174,0x00030005,0x000000a1,0x00000000,0x00040047,0x00000011,0x00000006, 0x6144646d,0x00006174,0x00030005,0x000000a1,0x00000000,0x00040047,0x00000011,0x00000006,
0x00000004,0x00040048,0x00000012,0x00000000,0x00000018,0x00050048,0x00000012,0x00000000, 0x00000004,0x00040048,0x00000012,0x00000000,0x00000018,0x00050048,0x00000012,0x00000000,
0x00000023,0x00000000,0x00030047,0x00000012,0x00000003,0x00040047,0x00000014,0x00000022, 0x00000023,0x00000000,0x00030047,0x00000012,0x00000003,0x00040047,0x00000014,0x00000022,
0x00000000,0x00040047,0x00000014,0x00000021,0x00000003,0x00040047,0x0000001d,0x00000006, 0x00000000,0x00040047,0x00000014,0x00000021,0x00000001,0x00040047,0x0000001d,0x00000006,
0x00000004,0x00050048,0x0000001e,0x00000000,0x00000023,0x00000000,0x00030047,0x0000001e, 0x00000004,0x00050048,0x0000001e,0x00000000,0x00000023,0x00000000,0x00030047,0x0000001e,
0x00000003,0x00040047,0x00000020,0x00000022,0x00000000,0x00040047,0x00000020,0x00000021, 0x00000003,0x00040047,0x00000020,0x00000022,0x00000000,0x00040047,0x00000020,0x00000021,
0x00000002,0x00050048,0x00000021,0x00000000,0x00000023,0x00000000,0x00050048,0x00000021, 0x00000000,0x00050048,0x00000021,0x00000000,0x00000023,0x00000000,0x00050048,0x00000021,
0x00000001,0x00000023,0x00000004,0x00050048,0x00000021,0x00000002,0x00000023,0x00000008, 0x00000001,0x00000023,0x00000004,0x00050048,0x00000021,0x00000002,0x00000023,0x00000008,
0x00050048,0x00000021,0x00000003,0x00000023,0x0000000c,0x00030047,0x00000021,0x00000002, 0x00050048,0x00000021,0x00000003,0x00000023,0x0000000c,0x00030047,0x00000021,0x00000002,
0x00040047,0x0000002e,0x00000006,0x00000004,0x00040048,0x0000002f,0x00000000,0x00000018, 0x00040047,0x0000002e,0x00000006,0x00000004,0x00040048,0x0000002f,0x00000000,0x00000018,
0x00050048,0x0000002f,0x00000000,0x00000023,0x00000000,0x00030047,0x0000002f,0x00000003, 0x00050048,0x0000002f,0x00000000,0x00000023,0x00000000,0x00030047,0x0000002f,0x00000003,
0x00040047,0x00000031,0x00000022,0x00000000,0x00040047,0x00000031,0x00000021,0x00000000, 0x00040047,0x00000031,0x00000022,0x00000000,0x00040047,0x00000031,0x00000021,0x00000002,
0x00040047,0x00000043,0x0000000b,0x0000001c,0x00040047,0x0000009e,0x00000006,0x00000004, 0x00040047,0x00000043,0x0000000b,0x0000001c,0x00040047,0x0000009e,0x00000006,0x00000004,
0x00050048,0x0000009f,0x00000000,0x00000023,0x00000000,0x00030047,0x0000009f,0x00000003, 0x00050048,0x0000009f,0x00000000,0x00000023,0x00000000,0x00030047,0x0000009f,0x00000003,
0x00040047,0x000000a1,0x00000022,0x00000000,0x00040047,0x000000a1,0x00000021,0x00000001, 0x00040047,0x000000a1,0x00000022,0x00000000,0x00040047,0x000000a1,0x00000021,0x00000003,
0x00040047,0x000000c8,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003, 0x00040047,0x000000c8,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,
0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007, 0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,
0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00050021,0x0000000c,0x00000002, 0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00050021,0x0000000c,0x00000002,
...@@ -178,28 +178,28 @@ const uint32_t kConvertIndexIndirectLineLoop_comp_00000001[] = { ...@@ -178,28 +178,28 @@ const uint32_t kConvertIndexIndirectLineLoop_comp_00000001[] = {
// //
// layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in; // layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
// //
// layout(set = 0, binding = 0)readonly buffer cmd // layout(set = 0, binding = 0)buffer dst
// { // {
// //
// uint cmdData[]; // uint dstData[];
// }; // };
// //
// layout(set = 0, binding = 1)buffer dstCmd // layout(set = 0, binding = 1)readonly buffer src
// { // {
// //
// uint dstCmdData[]; // uint srcData[];
// }; // };
// //
// layout(set = 0, binding = 2)buffer dst // layout(set = 0, binding = 2)readonly buffer cmd
// { // {
// //
// uint dstData[]; // uint cmdData[];
// }; // };
// //
// layout(set = 0, binding = 3)readonly buffer src // layout(set = 0, binding = 3)buffer dstCmd
// { // {
// //
// uint srcData[]; // uint dstCmdData[];
// }; // };
// //
// layout(push_constant)uniform PushConstants // layout(push_constant)uniform PushConstants
......
// 7.12.3226
#pragma once
const uint32_t kConvertIndirectLineLoop_comp_00000000[] = {
0x07230203,0x00010000,0x00080007,0x00000077,0x00000000,0x00020011,0x00000001,0x0006000b,
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000021,0x00060010,0x00000004,
0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x00040005,
0x00000004,0x6e69616d,0x00000000,0x00050005,0x00000008,0x74726576,0x6f437865,0x00746e75,
0x00060005,0x0000000a,0x49637273,0x7269646e,0x42746365,0x00006675,0x00060006,0x0000000a,
0x00000000,0x69646e69,0x74636572,0x00667542,0x00030005,0x0000000c,0x00000000,0x00060005,
0x0000000f,0x68737550,0x736e6f43,0x746e6174,0x00000073,0x000a0006,0x0000000f,0x00000000,
0x69646e69,0x74636572,0x66667542,0x664f7265,0x74657366,0x34766944,0x00000000,0x000a0006,
0x0000000f,0x00000001,0x65646e69,0x646e4978,0x63657269,0x66754274,0x7366664f,0x69447465,
0x00003476,0x00080006,0x0000000f,0x00000002,0x44747364,0x4f617461,0x65736666,0x76694474,
0x00000034,0x00030005,0x00000011,0x00000000,0x00050005,0x00000018,0x73726966,0x72655674,
0x00786574,0x00080005,0x00000021,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,
0x00000044,0x00030005,0x0000002c,0x00000069,0x00050005,0x00000036,0x49747364,0x7865646e,
0x00667542,0x00050006,0x00000036,0x00000000,0x44747364,0x00617461,0x00030005,0x00000038,
0x00000000,0x00060005,0x00000052,0x49747364,0x7269646e,0x42746365,0x00006675,0x00080006,
0x00000052,0x00000000,0x65646e69,0x646e4978,0x63657269,0x66754274,0x00000000,0x00030005,
0x00000054,0x00000000,0x00040047,0x00000009,0x00000006,0x00000004,0x00040048,0x0000000a,
0x00000000,0x00000018,0x00050048,0x0000000a,0x00000000,0x00000023,0x00000000,0x00030047,
0x0000000a,0x00000003,0x00040047,0x0000000c,0x00000022,0x00000000,0x00040047,0x0000000c,
0x00000021,0x00000000,0x00050048,0x0000000f,0x00000000,0x00000023,0x00000000,0x00050048,
0x0000000f,0x00000001,0x00000023,0x00000004,0x00050048,0x0000000f,0x00000002,0x00000023,
0x00000008,0x00030047,0x0000000f,0x00000002,0x00040047,0x00000021,0x0000000b,0x0000001c,
0x00040047,0x00000035,0x00000006,0x00000004,0x00050048,0x00000036,0x00000000,0x00000023,
0x00000000,0x00030047,0x00000036,0x00000003,0x00040047,0x00000038,0x00000022,0x00000000,
0x00040047,0x00000038,0x00000021,0x00000002,0x00040047,0x00000051,0x00000006,0x00000004,
0x00050048,0x00000052,0x00000000,0x00000023,0x00000000,0x00030047,0x00000052,0x00000003,
0x00040047,0x00000054,0x00000022,0x00000000,0x00040047,0x00000054,0x00000021,0x00000001,
0x00040047,0x00000076,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,
0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,
0x00000006,0x0003001d,0x00000009,0x00000006,0x0003001e,0x0000000a,0x00000009,0x00040020,
0x0000000b,0x00000002,0x0000000a,0x0004003b,0x0000000b,0x0000000c,0x00000002,0x00040015,
0x0000000d,0x00000020,0x00000001,0x0004002b,0x0000000d,0x0000000e,0x00000000,0x0005001e,
0x0000000f,0x00000006,0x00000006,0x00000006,0x00040020,0x00000010,0x00000009,0x0000000f,
0x0004003b,0x00000010,0x00000011,0x00000009,0x00040020,0x00000012,0x00000009,0x00000006,
0x00040020,0x00000015,0x00000002,0x00000006,0x0004002b,0x00000006,0x0000001b,0x00000002,
0x00040017,0x0000001f,0x00000006,0x00000003,0x00040020,0x00000020,0x00000001,0x0000001f,
0x0004003b,0x00000020,0x00000021,0x00000001,0x0004002b,0x00000006,0x00000022,0x00000000,
0x00040020,0x00000023,0x00000001,0x00000006,0x0004002b,0x00000006,0x00000026,0x00000001,
0x00020014,0x00000027,0x0003001d,0x00000035,0x00000006,0x0003001e,0x00000036,0x00000035,
0x00040020,0x00000037,0x00000002,0x00000036,0x0004003b,0x00000037,0x00000038,0x00000002,
0x0004002b,0x0000000d,0x00000039,0x00000002,0x0004002b,0x0000000d,0x00000043,0x00000001,
0x0003001d,0x00000051,0x00000006,0x0003001e,0x00000052,0x00000051,0x00040020,0x00000053,
0x00000002,0x00000052,0x0004003b,0x00000053,0x00000054,0x00000002,0x0004002b,0x00000006,
0x00000068,0x00000003,0x0004002b,0x00000006,0x0000006d,0x00000004,0x0004002b,0x00000006,
0x00000075,0x00000040,0x0006002c,0x0000001f,0x00000076,0x00000075,0x00000026,0x00000026,
0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,
0x00000007,0x00000008,0x00000007,0x0004003b,0x00000007,0x00000018,0x00000007,0x0004003b,
0x00000007,0x0000002c,0x00000007,0x00050041,0x00000012,0x00000013,0x00000011,0x0000000e,
0x0004003d,0x00000006,0x00000014,0x00000013,0x00060041,0x00000015,0x00000016,0x0000000c,
0x0000000e,0x00000014,0x0004003d,0x00000006,0x00000017,0x00000016,0x0003003e,0x00000008,
0x00000017,0x00050041,0x00000012,0x00000019,0x00000011,0x0000000e,0x0004003d,0x00000006,
0x0000001a,0x00000019,0x00050080,0x00000006,0x0000001c,0x0000001a,0x0000001b,0x00060041,
0x00000015,0x0000001d,0x0000000c,0x0000000e,0x0000001c,0x0004003d,0x00000006,0x0000001e,
0x0000001d,0x0003003e,0x00000018,0x0000001e,0x00050041,0x00000023,0x00000024,0x00000021,
0x00000022,0x0004003d,0x00000006,0x00000025,0x00000024,0x000500ae,0x00000027,0x00000028,
0x00000025,0x00000026,0x000300f7,0x0000002a,0x00000000,0x000400fa,0x00000028,0x00000029,
0x0000002a,0x000200f8,0x00000029,0x000100fd,0x000200f8,0x0000002a,0x0003003e,0x0000002c,
0x00000022,0x000200f9,0x0000002d,0x000200f8,0x0000002d,0x000400f6,0x0000002f,0x00000030,
0x00000000,0x000200f9,0x00000031,0x000200f8,0x00000031,0x0004003d,0x00000006,0x00000032,
0x0000002c,0x0004003d,0x00000006,0x00000033,0x00000008,0x000500b0,0x00000027,0x00000034,
0x00000032,0x00000033,0x000400fa,0x00000034,0x0000002e,0x0000002f,0x000200f8,0x0000002e,
0x00050041,0x00000012,0x0000003a,0x00000011,0x00000039,0x0004003d,0x00000006,0x0000003b,
0x0000003a,0x0004003d,0x00000006,0x0000003c,0x0000002c,0x00050080,0x00000006,0x0000003d,
0x0000003b,0x0000003c,0x0004003d,0x00000006,0x0000003e,0x00000018,0x0004003d,0x00000006,
0x0000003f,0x0000002c,0x00050080,0x00000006,0x00000040,0x0000003e,0x0000003f,0x00060041,
0x00000015,0x00000041,0x00000038,0x0000000e,0x0000003d,0x0003003e,0x00000041,0x00000040,
0x000200f9,0x00000030,0x000200f8,0x00000030,0x0004003d,0x00000006,0x00000042,0x0000002c,
0x00050080,0x00000006,0x00000044,0x00000042,0x00000043,0x0003003e,0x0000002c,0x00000044,
0x000200f9,0x0000002d,0x000200f8,0x0000002f,0x0004003d,0x00000006,0x00000045,0x00000008,
0x000500ac,0x00000027,0x00000046,0x00000045,0x00000026,0x000300f7,0x00000048,0x00000000,
0x000400fa,0x00000046,0x00000047,0x00000048,0x000200f8,0x00000047,0x00050041,0x00000012,
0x00000049,0x00000011,0x00000039,0x0004003d,0x00000006,0x0000004a,0x00000049,0x0004003d,
0x00000006,0x0000004b,0x00000008,0x00050080,0x00000006,0x0000004c,0x0000004a,0x0000004b,
0x0004003d,0x00000006,0x0000004d,0x00000018,0x00060041,0x00000015,0x0000004e,0x00000038,
0x0000000e,0x0000004c,0x0003003e,0x0000004e,0x0000004d,0x0004003d,0x00000006,0x0000004f,
0x00000008,0x00050080,0x00000006,0x00000050,0x0000004f,0x00000043,0x0003003e,0x00000008,
0x00000050,0x000200f9,0x00000048,0x000200f8,0x00000048,0x00050041,0x00000012,0x00000055,
0x00000011,0x00000043,0x0004003d,0x00000006,0x00000056,0x00000055,0x0004003d,0x00000006,
0x00000057,0x00000008,0x00060041,0x00000015,0x00000058,0x00000054,0x0000000e,0x00000056,
0x0003003e,0x00000058,0x00000057,0x00050041,0x00000012,0x00000059,0x00000011,0x00000043,
0x0004003d,0x00000006,0x0000005a,0x00000059,0x00050080,0x00000006,0x0000005b,0x0000005a,
0x00000026,0x00050041,0x00000012,0x0000005c,0x00000011,0x0000000e,0x0004003d,0x00000006,
0x0000005d,0x0000005c,0x00050080,0x00000006,0x0000005e,0x0000005d,0x00000026,0x00060041,
0x00000015,0x0000005f,0x0000000c,0x0000000e,0x0000005e,0x0004003d,0x00000006,0x00000060,
0x0000005f,0x00060041,0x00000015,0x00000061,0x00000054,0x0000000e,0x0000005b,0x0003003e,
0x00000061,0x00000060,0x00050041,0x00000012,0x00000062,0x00000011,0x00000043,0x0004003d,
0x00000006,0x00000063,0x00000062,0x00050080,0x00000006,0x00000064,0x00000063,0x0000001b,
0x00060041,0x00000015,0x00000065,0x00000054,0x0000000e,0x00000064,0x0003003e,0x00000065,
0x00000022,0x00050041,0x00000012,0x00000066,0x00000011,0x00000043,0x0004003d,0x00000006,
0x00000067,0x00000066,0x00050080,0x00000006,0x00000069,0x00000067,0x00000068,0x00060041,
0x00000015,0x0000006a,0x00000054,0x0000000e,0x00000069,0x0003003e,0x0000006a,0x00000022,
0x00050041,0x00000012,0x0000006b,0x00000011,0x00000043,0x0004003d,0x00000006,0x0000006c,
0x0000006b,0x00050080,0x00000006,0x0000006e,0x0000006c,0x0000006d,0x00050041,0x00000012,
0x0000006f,0x00000011,0x0000000e,0x0004003d,0x00000006,0x00000070,0x0000006f,0x00050080,
0x00000006,0x00000071,0x00000070,0x00000068,0x00060041,0x00000015,0x00000072,0x0000000c,
0x0000000e,0x00000071,0x0004003d,0x00000006,0x00000073,0x00000072,0x00060041,0x00000015,
0x00000074,0x00000054,0x0000000e,0x0000006e,0x0003003e,0x00000074,0x00000073,0x000100fd,
0x00010038
};
// Generated from:
//
// #version 450 core
//
// layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
//
// layout(set = 0, binding = 0)readonly buffer srcIndirectBuf
// {
//
// uint indirectBuf[];
// };
//
// layout(set = 0, binding = 1)buffer dstIndirectBuf
// {
//
// uint indexIndirectBuf[];
// };
//
// layout(set = 0, binding = 2)buffer dstIndexBuf
// {
//
// uint dstData[];
// };
//
// layout(push_constant)uniform PushConstants
// {
//
// uint indirectBufferOffsetDiv4;
//
// uint indexIndirectBufOffsetDiv4;
//
// uint dstDataOffsetDiv4;
// };
//
// void main()
// {
//
// uint vertexCount = indirectBuf[indirectBufferOffsetDiv4];
// uint firstVertex = indirectBuf[indirectBufferOffsetDiv4 + 2];
//
// if(gl_GlobalInvocationID . x >= 1)
// return;
//
// for(uint i = 0;i < vertexCount;i ++)
// {
// dstData[dstDataOffsetDiv4 + i]= firstVertex + i;
// }
// if(vertexCount > 1)
// {
// dstData[dstDataOffsetDiv4 + vertexCount]= firstVertex;
// vertexCount ++;
// }
//
// indexIndirectBuf[indexIndirectBufOffsetDiv4]= vertexCount;
// indexIndirectBuf[indexIndirectBufOffsetDiv4 + 1]= indirectBuf[indirectBufferOffsetDiv4 + 1];
// indexIndirectBuf[indexIndirectBufOffsetDiv4 + 2]= 0;
// indexIndirectBuf[indexIndirectBufOffsetDiv4 + 3]= 0;
// indexIndirectBuf[indexIndirectBufOffsetDiv4 + 4]= indirectBuf[indirectBufferOffsetDiv4 + 3];
// }
...@@ -20,43 +20,49 @@ layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; ...@@ -20,43 +20,49 @@ layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
layout (set = 0, binding = 0) buffer dst layout (set = 0, binding = 0) buffer dst
{ {
// Shader invocations output one packed 32-bit value with up to two 16-bit indices. // Shader invocations output one packed 32-bit value with up to two 16-bit indices.
uint dstData[]; uint dstIndexBuf[];
}; };
layout (set = 0, binding = 1) readonly buffer src layout (set = 0, binding = 1) readonly buffer src
{ {
// Shader invocations read at most 16 bits of one packed 32-bit value. (Two 8-bit indices.) // Shader invocations read at most 16 bits of one packed 32-bit value. (Two 8-bit indices.)
uint srcData[]; uint srcIndexBuf[];
}; };
#if IsIndirect #if IsIndirect
layout (set = 0, binding = 2) readonly buffer cmd layout (set = 0, binding = 2) readonly buffer srcIndirect
{ {
// Shader invocations read from the cmdData buffer to determine what indices to convert // Shader invocations read from the srcIndirectBuf buffer to determine what indices to convert
// The command data starts at offset cmdOffsetDiv4 of the cmdData buffer. // The command data starts at offset srcIndirectOffsetDiv4 of the srcIndirectBuf buffer.
uint cmdData[]; uint srcIndirectBuf[];
};
layout (set = 0, binding = 3) buffer dstIndirect
{
// output indirect buffer data, data starts at dstIndirectBufOffsetDiv4
uint dstIndirectBuf[];
}; };
layout (push_constant) uniform PushConstants layout (push_constant) uniform PushConstants
{ {
// Read offset in bytes into the cmdData array, divided by four. // Read offset in bytes into the srcIndirectBuf array, divided by four.
uint cmdOffsetDiv4; uint srcIndirectOffsetDiv4;
// Write offset in bytes into the dstData array, divided by four. // Write offset in bytes into the dstIndexBuf array, divided by four.
uint dstOffsetDiv4; uint dstIndexBufOffsetDiv4;
// Maximum size of the read buffer. The highest index value we will convert. // Maximum size of the read buffer. The highest index value we will convert.
uint maxIndex; uint maxIndex;
// Not used in the shader. Kept to pad "PushConstants" to the size of a vec4. // Write offset in bytes/4 of destinatio indirect buffer
uint _padding; uint dstIndirectBufOffsetDiv4;
}; };
#else #else
layout (push_constant) uniform PushConstants layout (push_constant) uniform PushConstants
{ {
// Read offset in bytes into the srcData array. // Read offset in bytes into the srcIndexBuf array.
uint srcOffset; uint srcIndexOffset;
// Write offset in bytes into the dstData array, divided by four. // Write offset in bytes into the dstIndexBuf array, divided by four.
uint dstOffsetDiv4; uint dstIndexBufOffsetDiv4;
// Maximum size of the read buffer. The highest index value we will convert. // Maximum size of the read buffer. The highest index value we will convert.
uint maxIndex; uint maxIndex;
// Not used in the shader. Kept to pad "PushConstants" to the size of a vec4. // Not used in the shader. Kept to pad "PushConstants" to the size of a vec4.
...@@ -69,9 +75,9 @@ uint PullIndex(uint index) ...@@ -69,9 +75,9 @@ uint PullIndex(uint index)
#if IsIndirect #if IsIndirect
uint srcIndex = index; uint srcIndex = index;
#else #else
uint srcIndex = index + srcOffset; uint srcIndex = index + srcIndexOffset;
#endif #endif
uint srcBlock = srcData[srcIndex >> 2]; uint srcBlock = srcIndexBuf[srcIndex >> 2];
uint srcComponent = (srcIndex & 3); uint srcComponent = (srcIndex & 3);
uint value = (srcBlock >> (srcComponent << 3)) & 0xFF; uint value = (srcBlock >> (srcComponent << 3)) & 0xFF;
...@@ -93,8 +99,8 @@ void PackIndexValue(uint srcValue, uint indexIndex, inout uint dstValue) ...@@ -93,8 +99,8 @@ void PackIndexValue(uint srcValue, uint indexIndex, inout uint dstValue)
void main() void main()
{ {
#if IsIndirect #if IsIndirect
uint indexCount = cmdData[cmdOffsetDiv4]; uint indexCount = srcIndirectBuf[srcIndirectOffsetDiv4];
uint firstIndex = cmdData[cmdOffsetDiv4 + 2]; uint firstIndex = srcIndirectBuf[srcIndirectOffsetDiv4 + 2];
uint endIndex = firstIndex + indexCount; uint endIndex = firstIndex + indexCount;
#else #else
uint firstIndex = 0; uint firstIndex = 0;
...@@ -128,5 +134,30 @@ void main() ...@@ -128,5 +134,30 @@ void main()
PackIndexValue(srcValue, 1, dstValue); PackIndexValue(srcValue, 1, dstValue);
} }
dstData[dstOffsetDiv4 + gl_GlobalInvocationID.x] = dstValue; dstIndexBuf[dstIndexBufOffsetDiv4 + gl_GlobalInvocationID.x] = dstValue;
#if IsIndirect
// Copy the source indirect draw info (DrawElementsIndirectCommand) to the destination
// indirect draw buffer adjusting the firstIndex to account for the offset into dstIndirectBuf
// typedef struct {
// uint count;
// uint instanceCount;
// uint firstIndex;
// int baseVertex;
// uint reservedMustBeZero;
// } DrawElementsIndirectCommand;
if (gl_GlobalInvocationID.x == 0)
{
dstIndirectBuf[dstIndirectBufOffsetDiv4] = srcIndirectBuf[srcIndirectOffsetDiv4]; // count
// instanceCount
dstIndirectBuf[dstIndirectBufOffsetDiv4 + 1] = srcIndirectBuf[srcIndirectOffsetDiv4 + 1];
// ANGLE will supply dstIndexBufOffset when binding the index buffer so don't
// need to worry about that as part of firstIndex for the new indirect buffer command.
// firstIndex can be in 2nd half of word so add one if incoming firstIndex is odd
dstIndirectBuf[dstIndirectBufOffsetDiv4 + 2] = firstIndex & 1; // firstIndex
// baseVertex
dstIndirectBuf[dstIndirectBufOffsetDiv4 + 3] = srcIndirectBuf[srcIndirectOffsetDiv4 + 3];
dstIndirectBuf[dstIndirectBufOffsetDiv4 + 4] = 0; // reservedMustBeZero
}
#endif
} }
...@@ -16,29 +16,29 @@ ...@@ -16,29 +16,29 @@
layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
layout (set = 0, binding = 0) readonly buffer cmd layout (set = 0, binding = 0) buffer dst
{ {
// Shader invocations read the cmd data to determine what indices to convert // Shader invocation outputs linelist(s) here.
// Command data at offset cmdOffset of buffer uint dstData[];
uint cmdData[];
}; };
layout (set = 0, binding = 1) buffer dstCmd layout (set = 0, binding = 1) readonly buffer src
{ {
// Shader outputs updated indirect buffer here. // Source index buffer
uint dstCmdData[]; uint srcData[];
}; };
layout (set = 0, binding = 2) buffer dst layout (set = 0, binding = 2) readonly buffer cmd
{ {
// Shader invocation outputs linelist(s) here. // Shader invocations read the cmd data to determine what indices to convert
uint dstData[]; // Command data at offset cmdOffset of buffer
uint cmdData[];
}; };
layout (set = 0, binding = 3) readonly buffer src layout (set = 0, binding = 3) buffer dstCmd
{ {
// Source index buffer // Shader outputs updated indirect buffer here.
uint srcData[]; uint dstCmdData[];
}; };
layout (push_constant) uniform PushConstants layout (push_constant) uniform PushConstants
......
//
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// ConvertArrayIndirectLineloop.comp: Construct an index buffer for an indirect
// draw that draws all the specified vertices and repeats the last vertex at
// the end to give lineloop behavior.
// Will also output a new indirect "command" buffer with adjusted index values.
//
//
#version 450 core
layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
layout (set = 0, binding = 0) readonly buffer srcIndirectBuf
{
// Shader invocations read the cmd data to determine what indices to convert
// Command data at offset cmdOffset of buffer
uint indirectBuf[];
};
layout (set = 0, binding = 1) buffer dstIndirectBuf
{
// Shader outputs updated indirect buffer here.
uint indexIndirectBuf[];
};
layout (set = 0, binding = 2) buffer dstIndexBuf
{
// Shader invocation outputs linelist(s) here.
uint dstData[];
};
layout (push_constant) uniform PushConstants
{
// Read offset in bytes into the indirectBuf, divided by four.
uint indirectBufferOffsetDiv4;
// Dst command offset in bytes into the indexIndirectBuff, divided by four.
uint indexIndirectBufOffsetDiv4;
// Write offset in bytes into the dstData array, divided by four.
uint dstDataOffsetDiv4;
};
// Structure of command data loaded at offset indirectBufferOffsetDiv4 of the indirectBuf buffer
// struct VkDrawIndirectCommand {
// uint32_t vertexCount;
// uint32_t instanceCount;
// uint32_t firstVertex;
// uint32_t firstInstance;
// };
// Structure of command data loaded at offset indexIndirectBufferOffsetDiv4 of the
// indexIndirectBuf buffer
// struct VkDrawIndexedIndirectCommand {
// uint32_t indexCount;
// uint32_t instanceCount;
// uint32_t firstIndex;
// int32_t vertexOffset;
// uint32_t firstInstance;
// };
void main()
{
// Load the relevant command info from cmdData
uint vertexCount = indirectBuf[indirectBufferOffsetDiv4];
uint firstVertex = indirectBuf[indirectBufferOffsetDiv4 + 2];
// Only first invocation does the work
if (gl_GlobalInvocationID.x >= 1)
return;
for (uint i = 0; i < vertexCount; i++)
{
dstData[dstDataOffsetDiv4 + i] = firstVertex + i;
}
if (vertexCount > 1)
{
dstData[dstDataOffsetDiv4 + vertexCount] = firstVertex;
vertexCount++;
}
// Write new indirect data in indexIndirectBuf.
indexIndirectBuf[indexIndirectBufOffsetDiv4] = vertexCount;
indexIndirectBuf[indexIndirectBufOffsetDiv4 + 1] = indirectBuf[indirectBufferOffsetDiv4 + 1];
indexIndirectBuf[indexIndirectBufOffsetDiv4 + 2] = 0;
indexIndirectBuf[indexIndirectBufOffsetDiv4 + 3] = 0;
indexIndirectBuf[indexIndirectBufOffsetDiv4 + 4] = indirectBuf[indirectBufferOffsetDiv4 + 3];
}
{
"Description": [
"Copyright 2019 The ANGLE Project Authors. All rights reserved.",
"Use of this source code is governed by a BSD-style license that can be",
"found in the LICENSE file.",
"",
"ConvertArrayIndirectLineLoop.comp.json: Build parameters for ConvertArrayIndirectLineLoop.comp."
],
"Flags": [
]
}
...@@ -1300,6 +1300,46 @@ angle::Result LineLoopHelper::streamIndicesIndirect(ContextVk *contextVk, ...@@ -1300,6 +1300,46 @@ angle::Result LineLoopHelper::streamIndicesIndirect(ContextVk *contextVk,
return angle::Result::Continue; return angle::Result::Continue;
} }
angle::Result LineLoopHelper::streamArrayIndirect(ContextVk *contextVk,
size_t vertexCount,
vk::BufferHelper *arrayIndirectBuffer,
VkDeviceSize arrayIndirectBufferOffset,
vk::BufferHelper **indexBufferOut,
VkDeviceSize *indexBufferOffsetOut,
vk::BufferHelper **indexIndirectBufferOut,
VkDeviceSize *indexIndirectBufferOffsetOut)
{
auto unitSize = sizeof(uint32_t);
size_t allocateBytes = static_cast<size_t>((vertexCount + 1) * unitSize);
mDynamicIndexBuffer.releaseInFlightBuffers(contextVk);
mDynamicIndirectBuffer.releaseInFlightBuffers(contextVk);
ANGLE_TRY(mDynamicIndexBuffer.allocate(contextVk, allocateBytes, nullptr, nullptr,
indexBufferOffsetOut, nullptr));
*indexBufferOut = mDynamicIndexBuffer.getCurrentBuffer();
ANGLE_TRY(mDynamicIndirectBuffer.allocate(contextVk, sizeof(VkDrawIndexedIndirectCommand),
nullptr, nullptr, indexIndirectBufferOffsetOut,
nullptr));
*indexIndirectBufferOut = mDynamicIndirectBuffer.getCurrentBuffer();
vk::BufferHelper *destIndexBuffer = mDynamicIndexBuffer.getCurrentBuffer();
vk::BufferHelper *destIndirectBuffer = mDynamicIndirectBuffer.getCurrentBuffer();
// Copy relevant section of the source into destination at allocated offset. Note that the
// offset returned by allocate() above is in bytes. As is the indices offset pointer.
UtilsVk::ConvertLineLoopArrayIndirectParameters params = {};
params.indirectBufferOffset = static_cast<uint32_t>(arrayIndirectBufferOffset);
params.dstIndirectBufferOffset = static_cast<uint32_t>(*indexIndirectBufferOffsetOut);
params.dstIndexBufferOffset = static_cast<uint32_t>(*indexBufferOffsetOut);
ANGLE_TRY(contextVk->getUtils().convertLineLoopArrayIndirectBuffer(
contextVk, arrayIndirectBuffer, destIndirectBuffer, destIndexBuffer, params));
return angle::Result::Continue;
}
void LineLoopHelper::release(ContextVk *contextVk) void LineLoopHelper::release(ContextVk *contextVk)
{ {
mDynamicIndexBuffer.release(contextVk->getRenderer()); mDynamicIndexBuffer.release(contextVk->getRenderer());
......
...@@ -25,8 +25,11 @@ constexpr VkBufferUsageFlags kVertexBufferUsageFlags = ...@@ -25,8 +25,11 @@ constexpr VkBufferUsageFlags kVertexBufferUsageFlags =
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
constexpr VkBufferUsageFlags kIndexBufferUsageFlags = constexpr VkBufferUsageFlags kIndexBufferUsageFlags =
VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
constexpr VkBufferUsageFlags kIndirectBufferUsageFlags =
VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
constexpr size_t kVertexBufferAlignment = 4; constexpr size_t kVertexBufferAlignment = 4;
constexpr size_t kIndexBufferAlignment = 4; constexpr size_t kIndexBufferAlignment = 4;
constexpr size_t kIndirectBufferAlignment = 4;
constexpr VkBufferUsageFlags kStagingBufferFlags = constexpr VkBufferUsageFlags kStagingBufferFlags =
VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
...@@ -432,6 +435,15 @@ class LineLoopHelper final : angle::NonCopyable ...@@ -432,6 +435,15 @@ class LineLoopHelper final : angle::NonCopyable
vk::BufferHelper **indirectBufferOut, vk::BufferHelper **indirectBufferOut,
VkDeviceSize *indirectBufferOffsetOut); VkDeviceSize *indirectBufferOffsetOut);
angle::Result streamArrayIndirect(ContextVk *contextVk,
size_t vertexCount,
vk::BufferHelper *arrayIndirectBuffer,
VkDeviceSize arrayIndirectBufferOffset,
vk::BufferHelper **indexBufferOut,
VkDeviceSize *indexBufferOffsetOut,
vk::BufferHelper **indexIndirectBufferOut,
VkDeviceSize *indexIndirectBufferOffsetOut);
void release(ContextVk *contextVk); void release(ContextVk *contextVk);
void destroy(VkDevice device); void destroy(VkDevice device);
......
...@@ -62,6 +62,7 @@ namespace ...@@ -62,6 +62,7 @@ namespace
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000003.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000003.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000000.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000000.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000001.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000001.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndirectLineLoop.comp.00000000.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc"
...@@ -223,6 +224,9 @@ constexpr ShaderBlob kConvertIndexIndirectLineLoop_comp_shaders[] = { ...@@ -223,6 +224,9 @@ constexpr ShaderBlob kConvertIndexIndirectLineLoop_comp_shaders[] = {
{kConvertIndexIndirectLineLoop_comp_00000001, {kConvertIndexIndirectLineLoop_comp_00000001,
sizeof(kConvertIndexIndirectLineLoop_comp_00000001)}, sizeof(kConvertIndexIndirectLineLoop_comp_00000001)},
}; };
constexpr ShaderBlob kConvertIndirectLineLoop_comp_shaders[] = {
{kConvertIndirectLineLoop_comp_00000000, sizeof(kConvertIndirectLineLoop_comp_00000000)},
};
constexpr ShaderBlob kConvertVertex_comp_shaders[] = { constexpr ShaderBlob kConvertVertex_comp_shaders[] = {
{kConvertVertex_comp_00000000, sizeof(kConvertVertex_comp_00000000)}, {kConvertVertex_comp_00000000, sizeof(kConvertVertex_comp_00000000)},
{kConvertVertex_comp_00000001, sizeof(kConvertVertex_comp_00000001)}, {kConvertVertex_comp_00000001, sizeof(kConvertVertex_comp_00000001)},
...@@ -385,6 +389,10 @@ void ShaderLibrary::destroy(VkDevice device) ...@@ -385,6 +389,10 @@ void ShaderLibrary::destroy(VkDevice device)
{ {
shader.get().destroy(device); shader.get().destroy(device);
} }
for (RefCounted<ShaderAndSerial> &shader : mConvertIndirectLineLoop_comp_shaders)
{
shader.get().destroy(device);
}
for (RefCounted<ShaderAndSerial> &shader : mConvertVertex_comp_shaders) for (RefCounted<ShaderAndSerial> &shader : mConvertVertex_comp_shaders)
{ {
shader.get().destroy(device); shader.get().destroy(device);
...@@ -455,6 +463,16 @@ angle::Result ShaderLibrary::getConvertIndexIndirectLineLoop_comp( ...@@ -455,6 +463,16 @@ angle::Result ShaderLibrary::getConvertIndexIndirectLineLoop_comp(
ArraySize(kConvertIndexIndirectLineLoop_comp_shaders), shaderFlags, shaderOut); ArraySize(kConvertIndexIndirectLineLoop_comp_shaders), shaderFlags, shaderOut);
} }
angle::Result ShaderLibrary::getConvertIndirectLineLoop_comp(
Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut)
{
return GetShader(context, mConvertIndirectLineLoop_comp_shaders,
kConvertIndirectLineLoop_comp_shaders,
ArraySize(kConvertIndirectLineLoop_comp_shaders), shaderFlags, shaderOut);
}
angle::Result ShaderLibrary::getConvertVertex_comp(Context *context, angle::Result ShaderLibrary::getConvertVertex_comp(Context *context,
uint32_t shaderFlags, uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut) RefCounted<ShaderAndSerial> **shaderOut)
......
...@@ -55,6 +55,7 @@ angle_vulkan_internal_shaders = [ ...@@ -55,6 +55,7 @@ angle_vulkan_internal_shaders = [
"shaders/gen/ConvertIndex.comp.00000003.inc", "shaders/gen/ConvertIndex.comp.00000003.inc",
"shaders/gen/ConvertIndexIndirectLineLoop.comp.00000000.inc", "shaders/gen/ConvertIndexIndirectLineLoop.comp.00000000.inc",
"shaders/gen/ConvertIndexIndirectLineLoop.comp.00000001.inc", "shaders/gen/ConvertIndexIndirectLineLoop.comp.00000001.inc",
"shaders/gen/ConvertIndirectLineLoop.comp.00000000.inc",
"shaders/gen/ConvertVertex.comp.00000000.inc", "shaders/gen/ConvertVertex.comp.00000000.inc",
"shaders/gen/ConvertVertex.comp.00000001.inc", "shaders/gen/ConvertVertex.comp.00000001.inc",
"shaders/gen/ConvertVertex.comp.00000002.inc", "shaders/gen/ConvertVertex.comp.00000002.inc",
......
...@@ -87,6 +87,11 @@ enum flags ...@@ -87,6 +87,11 @@ enum flags
constexpr size_t kArrayLen = 0x00000002; constexpr size_t kArrayLen = 0x00000002;
} // namespace ConvertIndexIndirectLineLoop_comp } // namespace ConvertIndexIndirectLineLoop_comp
namespace ConvertIndirectLineLoop_comp
{
constexpr size_t kArrayLen = 0x00000001;
} // namespace ConvertIndirectLineLoop_comp
namespace ConvertVertex_comp namespace ConvertVertex_comp
{ {
enum flags enum flags
...@@ -220,6 +225,9 @@ class ShaderLibrary final : angle::NonCopyable ...@@ -220,6 +225,9 @@ class ShaderLibrary final : angle::NonCopyable
angle::Result getConvertIndexIndirectLineLoop_comp(Context *context, angle::Result getConvertIndexIndirectLineLoop_comp(Context *context,
uint32_t shaderFlags, uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut); RefCounted<ShaderAndSerial> **shaderOut);
angle::Result getConvertIndirectLineLoop_comp(Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut);
angle::Result getConvertVertex_comp(Context *context, angle::Result getConvertVertex_comp(Context *context,
uint32_t shaderFlags, uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut); RefCounted<ShaderAndSerial> **shaderOut);
...@@ -250,6 +258,8 @@ class ShaderLibrary final : angle::NonCopyable ...@@ -250,6 +258,8 @@ class ShaderLibrary final : angle::NonCopyable
mConvertIndex_comp_shaders[InternalShader::ConvertIndex_comp::kArrayLen]; mConvertIndex_comp_shaders[InternalShader::ConvertIndex_comp::kArrayLen];
RefCounted<ShaderAndSerial> mConvertIndexIndirectLineLoop_comp_shaders RefCounted<ShaderAndSerial> mConvertIndexIndirectLineLoop_comp_shaders
[InternalShader::ConvertIndexIndirectLineLoop_comp::kArrayLen]; [InternalShader::ConvertIndexIndirectLineLoop_comp::kArrayLen];
RefCounted<ShaderAndSerial> mConvertIndirectLineLoop_comp_shaders
[InternalShader::ConvertIndirectLineLoop_comp::kArrayLen];
RefCounted<ShaderAndSerial> RefCounted<ShaderAndSerial>
mConvertVertex_comp_shaders[InternalShader::ConvertVertex_comp::kArrayLen]; mConvertVertex_comp_shaders[InternalShader::ConvertVertex_comp::kArrayLen];
RefCounted<ShaderAndSerial> RefCounted<ShaderAndSerial>
......
...@@ -623,10 +623,6 @@ ...@@ -623,10 +623,6 @@
// Block name matching failure: // Block name matching failure:
3459 VULKAN : dEQP-GLES31.functional.shaders.linkage.es31.shader_storage_block.mismatch_with_and_without_instance_name = FAIL 3459 VULKAN : dEQP-GLES31.functional.shaders.linkage.es31.shader_storage_block.mismatch_with_and_without_instance_name = FAIL
// Indirect draw:
3564 VULKAN : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_loop.* = SKIP
3564 VULKAN : dEQP-GLES31.functional.draw_indirect.random.* = SKIP
// Tessellation geometry interaction: // Tessellation geometry interaction:
3572 VULKAN : dEQP-GLES31.functional.tessellation_geometry_interaction.* = FAIL 3572 VULKAN : dEQP-GLES31.functional.tessellation_geometry_interaction.* = FAIL
......
...@@ -549,13 +549,6 @@ ...@@ -549,13 +549,6 @@
// Flat shading: // Flat shading:
3430 VULKAN : dEQP-GLES3.functional.rasterization.flatshading.* = FAIL 3430 VULKAN : dEQP-GLES3.functional.rasterization.flatshading.* = FAIL
// Instanced rendering:
2672 VULKAN : dEQP-GLES3.functional.draw.draw_arrays_instanced.line_loop.* = SKIP
2672 VULKAN : dEQP-GLES3.functional.draw.draw_elements_instanced.line_loop.* = SKIP
2672 VULKAN : dEQP-GLES3.functional.draw.random.* = SKIP
// - Primitive restart with line loops:
2672 VULKAN : dEQP-GLES3.functional.primitive_restart.*.line_loop.*instanced = SKIP
// Misc unimplemented: // Misc unimplemented:
// Failures on newer NVIDIA drivers (411.95) and passes on older drivers (388.16). Passes on 418.12 on Linux. // Failures on newer NVIDIA drivers (411.95) and passes on older drivers (388.16). Passes on 418.12 on Linux.
...@@ -570,5 +563,10 @@ ...@@ -570,5 +563,10 @@
2830 ANDROID VULKAN : dEQP-GLES3.functional.rasterization.primitives.line* = FAIL 2830 ANDROID VULKAN : dEQP-GLES3.functional.rasterization.primitives.line* = FAIL
2808 ANDROID VULKAN : dEQP-GLES3.functional.shaders.builtin_variable.fragcoord_w = FAIL 2808 ANDROID VULKAN : dEQP-GLES3.functional.shaders.builtin_variable.fragcoord_w = FAIL
// Pixel driver issues
4024 PIXEL2 VULKAN : dEQP-GLES3.functional.draw.random.5 = SKIP
4024 PIXEL2 VULKAN : dEQP-GLES3.functional.draw.random.49 = SKIP
4024 PIXEL2 VULKAN : dEQP-GLES3.functional.draw.random.96 = FAIL
// Fixed in later driver versions. // Fixed in later driver versions.
2727 VULKAN ANDROID : dEQP-GLES3.functional.shaders.builtin_variable.pointcoord = FAIL 2727 VULKAN ANDROID : dEQP-GLES3.functional.shaders.builtin_variable.pointcoord = FAIL
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment