Vulkan: Add DispatchUtilsVK
This class provides a set of compute-based internal utilities.
Currently, buffer clear and copy are implemented. Other possibilities
include more efficient mip map generation, or specialized texture
operations.
VertexArrayVk::updateIndexTranslation() is updated to convert the
GL_UNSIGNED_BYTE index buffer to a GL_UNSIGNED_SHORT one using this
class to avoid a CPU readback.
The vk::Format class is augmented with a few flags (IsInt, IsUnsigned)
to be able to select the appropriate shader based on the format (float,
int or uint).
Bug: angleproject:2958,angleproject:3003
Change-Id: Ie35519deb3c32a3da5ccf74080c70092c9287f0a
Reviewed-on: https://chromium-review.googlesource.com/c/1336307
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/BufferVk.cpp b/src/libANGLE/renderer/vulkan/BufferVk.cpp
index f71462e..30dae1f 100644
--- a/src/libANGLE/renderer/vulkan/BufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/BufferVk.cpp
@@ -51,8 +51,9 @@
// We could potentially use multiple backing buffers for different usages.
// For now keep a single buffer with all relevant usage flags.
const VkImageUsageFlags usageFlags =
- (VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT |
- VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+ VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT |
+ VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
+ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT;
VkBufferCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
@@ -63,7 +64,7 @@
createInfo.queueFamilyIndexCount = 0;
createInfo.pQueueFamilyIndices = nullptr;
- // Assume host vislble/coherent memory available.
+ // Assume host visible/coherent memory available.
const VkMemoryPropertyFlags memoryPropertyFlags =
(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
diff --git a/src/libANGLE/renderer/vulkan/DispatchUtilsVk.cpp b/src/libANGLE/renderer/vulkan/DispatchUtilsVk.cpp
new file mode 100644
index 0000000..9929930
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/DispatchUtilsVk.cpp
@@ -0,0 +1,272 @@
+//
+// Copyright 2018 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.
+//
+// DispatchUtilsVk.cpp:
+// Implements the DispatchUtilsVk class.
+//
+
+#include "libANGLE/renderer/vulkan/DispatchUtilsVk.h"
+
+#include "libANGLE/renderer/vulkan/BufferVk.h"
+#include "libANGLE/renderer/vulkan/FramebufferVk.h"
+#include "libANGLE/renderer/vulkan/RendererVk.h"
+#include "libANGLE/renderer/vulkan/TextureVk.h"
+
+namespace rx
+{
+
+namespace BufferUtils_comp = vk::InternalShader::BufferUtils_comp;
+
+namespace
+{
+// All internal shaders assume there is only one descriptor set, indexed at 0
+constexpr uint32_t kSetIndex = 0;
+
+constexpr uint32_t kClearOutputBinding = 0;
+constexpr uint32_t kCopyDestinationBinding = 0;
+constexpr uint32_t kCopySourceBinding = 1;
+
+uint32_t GetBufferUtilsFlags(size_t dispatchSize, const vk::Format &format)
+{
+ uint32_t flags = dispatchSize % 64 == 0 ? BufferUtils_comp::kIsAligned : 0;
+ const angle::Format &bufferFormat = format.bufferFormat();
+
+ flags |= bufferFormat.componentType == GL_INT
+ ? BufferUtils_comp::kIsInt
+ : bufferFormat.componentType == GL_UNSIGNED_INT ? BufferUtils_comp::kIsUint
+ : BufferUtils_comp::kIsFloat;
+
+ return flags;
+}
+} // namespace
+
+DispatchUtilsVk::DispatchUtilsVk() = default;
+
+DispatchUtilsVk::~DispatchUtilsVk() = default;
+
+void DispatchUtilsVk::destroy(VkDevice device)
+{
+ for (Function f : angle::AllEnums<Function>())
+ {
+ for (auto &descriptorSetLayout : mDescriptorSetLayouts[f])
+ {
+ descriptorSetLayout.reset();
+ }
+ mPipelineLayouts[f].reset();
+ mDescriptorPools[f].destroy(device);
+ }
+
+ for (vk::ShaderProgramHelper &program : mPrograms)
+ {
+ program.destroy(device);
+ }
+}
+
+angle::Result DispatchUtilsVk::ensureResourcesInitialized(vk::Context *context,
+ Function function,
+ VkDescriptorPoolSize *setSizes,
+ size_t setSizesCount)
+{
+ RendererVk *renderer = context->getRenderer();
+
+ vk::DescriptorSetLayoutDesc descriptorSetDesc;
+
+ uint32_t currentBinding = 0;
+ for (size_t i = 0; i < setSizesCount; ++i)
+ {
+ descriptorSetDesc.update(currentBinding, setSizes[i].type, setSizes[i].descriptorCount);
+ currentBinding += setSizes[i].descriptorCount;
+ }
+
+ ANGLE_TRY(renderer->getDescriptorSetLayout(context, descriptorSetDesc,
+ &mDescriptorSetLayouts[function][kSetIndex]));
+
+ // Corresponding pipeline layouts:
+ vk::PipelineLayoutDesc pipelineLayoutDesc;
+
+ pipelineLayoutDesc.updateDescriptorSetLayout(kSetIndex, descriptorSetDesc);
+ pipelineLayoutDesc.updatePushConstantRange(gl::ShaderType::Compute, 0, sizeof(ShaderParams));
+
+ ANGLE_TRY(renderer->getPipelineLayout(
+ context, pipelineLayoutDesc, mDescriptorSetLayouts[function], &mPipelineLayouts[function]));
+
+ ANGLE_TRY(mDescriptorPools[function].init(context, setSizes, setSizesCount));
+
+ return angle::Result::Continue();
+}
+
+angle::Result DispatchUtilsVk::ensureBufferClearInitialized(vk::Context *context)
+{
+ if (mPipelineLayouts[Function::BufferClear].valid())
+ {
+ return angle::Result::Continue();
+ }
+
+ VkDescriptorPoolSize setSizes[1] = {
+ {VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 1},
+ };
+
+ return ensureResourcesInitialized(context, Function::BufferClear, setSizes,
+ ArraySize(setSizes));
+}
+
+angle::Result DispatchUtilsVk::ensureBufferCopyInitialized(vk::Context *context)
+{
+ if (mPipelineLayouts[Function::BufferCopy].valid())
+ {
+ return angle::Result::Continue();
+ }
+
+ VkDescriptorPoolSize setSizes[2] = {
+ {VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 1},
+ {VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 1},
+ };
+
+ return ensureResourcesInitialized(context, Function::BufferCopy, setSizes, ArraySize(setSizes));
+}
+
+angle::Result DispatchUtilsVk::setupProgram(vk::Context *context,
+ uint32_t function,
+ const VkDescriptorSet &descriptorSet,
+ const ShaderParams ¶ms,
+ vk::CommandBuffer *commandBuffer)
+{
+ RendererVk *renderer = context->getRenderer();
+ vk::ShaderLibrary &shaderLibrary = renderer->getShaderLibrary();
+
+ vk::RefCounted<vk::ShaderAndSerial> *shader = nullptr;
+ ANGLE_TRY(shaderLibrary.getBufferUtils_comp(context, function, &shader));
+
+ mPrograms[function].setShader(gl::ShaderType::Compute, shader);
+
+ bool isClear = (function & BufferUtils_comp::kFunctionMask) == BufferUtils_comp::kIsClear;
+ Function pipelineLayoutIndex = isClear ? Function::BufferClear : Function::BufferCopy;
+ const vk::BindingPointer<vk::PipelineLayout> &pipelineLayout =
+ mPipelineLayouts[pipelineLayoutIndex];
+
+ vk::PipelineAndSerial *pipelineAndSerial;
+ ANGLE_TRY(
+ mPrograms[function].getComputePipeline(context, pipelineLayout.get(), &pipelineAndSerial));
+
+ commandBuffer->bindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, pipelineAndSerial->get());
+ pipelineAndSerial->updateSerial(renderer->getCurrentQueueSerial());
+
+ commandBuffer->bindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, pipelineLayout.get(), 0, 1,
+ &descriptorSet, 0, nullptr);
+ commandBuffer->pushConstants(pipelineLayout.get(), VK_SHADER_STAGE_COMPUTE_BIT, 0,
+ sizeof(params), ¶ms);
+
+ return angle::Result::Continue();
+}
+
+angle::Result DispatchUtilsVk::clearBuffer(vk::Context *context,
+ vk::BufferHelper *dest,
+ const ClearParameters ¶ms)
+{
+ ANGLE_TRY(ensureBufferClearInitialized(context));
+
+ vk::CommandBuffer *commandBuffer;
+ ANGLE_TRY(dest->recordCommands(context, &commandBuffer));
+
+ // Tell dest it's being written to.
+ dest->onWrite(VK_ACCESS_SHADER_WRITE_BIT);
+
+ const vk::Format &destFormat = dest->getViewFormat();
+
+ uint32_t function = BufferUtils_comp::kIsClear | GetBufferUtilsFlags(params.size, destFormat);
+
+ ShaderParams shaderParams;
+ shaderParams.destOffset = params.offset;
+ shaderParams.size = params.size;
+ shaderParams.clearValue = params.clearValue;
+
+ VkDescriptorSet descriptorSet;
+ vk::SharedDescriptorPoolBinding descriptorPoolBinding;
+ ANGLE_TRY(mDescriptorPools[Function::BufferClear].allocateSets(
+ context, mDescriptorSetLayouts[Function::BufferClear][kSetIndex].get().ptr(), 1,
+ &descriptorPoolBinding, &descriptorSet));
+
+ VkWriteDescriptorSet writeInfo = {};
+
+ writeInfo.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ writeInfo.dstSet = descriptorSet;
+ writeInfo.dstBinding = kClearOutputBinding;
+ writeInfo.descriptorCount = 1;
+ writeInfo.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER;
+ writeInfo.pTexelBufferView = dest->getBufferView().ptr();
+
+ vkUpdateDescriptorSets(context->getDevice(), 1, &writeInfo, 0, nullptr);
+
+ ANGLE_TRY(setupProgram(context, function, descriptorSet, shaderParams, commandBuffer));
+
+ commandBuffer->dispatch(UnsignedCeilDivide(params.size, 64), 1, 1);
+
+ descriptorPoolBinding.reset();
+
+ return angle::Result::Continue();
+}
+
+angle::Result DispatchUtilsVk::copyBuffer(vk::Context *context,
+ vk::BufferHelper *dest,
+ vk::BufferHelper *src,
+ const CopyParameters ¶ms)
+{
+ ANGLE_TRY(ensureBufferCopyInitialized(context));
+
+ vk::CommandBuffer *commandBuffer;
+ ANGLE_TRY(dest->recordCommands(context, &commandBuffer));
+
+ // Tell src we are going to read from it.
+ src->onRead(dest, VK_ACCESS_SHADER_READ_BIT);
+ // Tell dest it's being written to.
+ dest->onWrite(VK_ACCESS_SHADER_WRITE_BIT);
+
+ const vk::Format &destFormat = dest->getViewFormat();
+ const vk::Format &srcFormat = src->getViewFormat();
+
+ ASSERT(destFormat.vkFormatIsInt == srcFormat.vkFormatIsInt);
+ ASSERT(destFormat.vkFormatIsUnsigned == srcFormat.vkFormatIsUnsigned);
+
+ uint32_t function = BufferUtils_comp::kIsCopy | GetBufferUtilsFlags(params.size, destFormat);
+
+ ShaderParams shaderParams;
+ shaderParams.destOffset = params.destOffset;
+ shaderParams.size = params.size;
+ shaderParams.srcOffset = params.srcOffset;
+
+ VkDescriptorSet descriptorSet;
+ vk::SharedDescriptorPoolBinding descriptorPoolBinding;
+ ANGLE_TRY(mDescriptorPools[Function::BufferCopy].allocateSets(
+ context, mDescriptorSetLayouts[Function::BufferCopy][kSetIndex].get().ptr(), 1,
+ &descriptorPoolBinding, &descriptorSet));
+
+ VkWriteDescriptorSet writeInfo[2] = {};
+
+ writeInfo[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ writeInfo[0].dstSet = descriptorSet;
+ writeInfo[0].dstBinding = kCopyDestinationBinding;
+ writeInfo[0].descriptorCount = 1;
+ writeInfo[0].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER;
+ writeInfo[0].pTexelBufferView = dest->getBufferView().ptr();
+
+ writeInfo[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ writeInfo[1].dstSet = descriptorSet;
+ writeInfo[1].dstBinding = kCopySourceBinding;
+ writeInfo[1].descriptorCount = 1;
+ writeInfo[1].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
+ writeInfo[1].pTexelBufferView = src->getBufferView().ptr();
+
+ vkUpdateDescriptorSets(context->getDevice(), 2, writeInfo, 0, nullptr);
+
+ ANGLE_TRY(setupProgram(context, function, descriptorSet, shaderParams, commandBuffer));
+
+ commandBuffer->dispatch(UnsignedCeilDivide(params.size, 64), 1, 1);
+
+ descriptorPoolBinding.reset();
+
+ return angle::Result::Continue();
+}
+
+} // namespace rx
diff --git a/src/libANGLE/renderer/vulkan/DispatchUtilsVk.h b/src/libANGLE/renderer/vulkan/DispatchUtilsVk.h
new file mode 100644
index 0000000..24ca973
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/DispatchUtilsVk.h
@@ -0,0 +1,115 @@
+//
+// Copyright 2018 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.
+//
+// DispatchUtilsVk.h:
+// Defines the DispatchUtilsVk class, a helper for various internal dispatch utilities such as
+// buffer clear and copy, texture mip map generation, etc.
+//
+// - Buffer clear: Implemented, but no current users
+// - Buffer copy:
+// * Used by VertexArrayVk::updateIndexTranslation() to convert a ubyte index array to ushort
+// - Mipmap generation: Not yet implemented
+//
+
+#ifndef LIBANGLE_RENDERER_VULKAN_DISPATCHUTILSVK_H_
+#define LIBANGLE_RENDERER_VULKAN_DISPATCHUTILSVK_H_
+
+#include "libANGLE/renderer/vulkan/vk_cache_utils.h"
+#include "libANGLE/renderer/vulkan/vk_helpers.h"
+#include "libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h"
+
+namespace rx
+{
+
+class BufferVk;
+class RendererVk;
+
+class DispatchUtilsVk : angle::NonCopyable
+{
+ public:
+ DispatchUtilsVk();
+ ~DispatchUtilsVk();
+
+ void destroy(VkDevice device);
+
+ struct ClearParameters
+ {
+ VkClearColorValue clearValue;
+ size_t offset;
+ size_t size;
+ };
+
+ struct CopyParameters
+ {
+ size_t destOffset;
+ size_t srcOffset;
+ size_t size;
+ };
+
+ angle::Result clearBuffer(vk::Context *context,
+ vk::BufferHelper *dest,
+ const ClearParameters ¶ms);
+ angle::Result copyBuffer(vk::Context *context,
+ vk::BufferHelper *dest,
+ vk::BufferHelper *src,
+ const CopyParameters ¶ms);
+
+ private:
+ struct ShaderParams
+ {
+ // Structure matching PushConstants in BufferUtils.comp
+ uint32_t destOffset = 0;
+ uint32_t size = 0;
+ uint32_t srcOffset = 0;
+ uint32_t padding = 0;
+ VkClearColorValue clearValue = {};
+ };
+
+ // Common function that creates the pipeline for the specified function, binds it and prepares
+ // the dispatch call. The possible values of `function` comes from
+ // vk::InternalShader::BufferUtils_comp defined in vk_internal_shaders_autogen.h
+ angle::Result setupProgram(vk::Context *context,
+ uint32_t function,
+ const VkDescriptorSet &descriptorSet,
+ const ShaderParams ¶ms,
+ vk::CommandBuffer *commandBuffer);
+
+ // Functions implemented by the class:
+ enum class Function
+ {
+ BufferClear = 0,
+ BufferCopy = 1,
+
+ InvalidEnum = 2,
+ EnumCount = 2,
+ };
+
+ // Initializes descriptor set layout, pipeline layout and descriptor pool corresponding to given
+ // function, if not already initialized. Uses setSizes to create the layout. For example, if
+ // this array has two entries {STORAGE_TEXEL_BUFFER, 1} and {UNIFORM_TEXEL_BUFFER, 3}, then the
+ // created set layout would be binding 0 for storage texel buffer and bindings 1 through 3 for
+ // uniform texel buffer. All resources are put in set 0.
+ angle::Result ensureResourcesInitialized(vk::Context *context,
+ Function function,
+ VkDescriptorPoolSize *setSizes,
+ size_t setSizesCount);
+
+ // Initializers corresponding to functions, calling into ensureResourcesInitialized with the
+ // appropriate parameters.
+ angle::Result ensureBufferClearInitialized(vk::Context *context);
+ angle::Result ensureBufferCopyInitialized(vk::Context *context);
+
+ angle::PackedEnumMap<Function, vk::DescriptorSetLayoutPointerArray> mDescriptorSetLayouts;
+ angle::PackedEnumMap<Function, vk::BindingPointer<vk::PipelineLayout>> mPipelineLayouts;
+ angle::PackedEnumMap<Function, vk::DynamicDescriptorPool> mDescriptorPools;
+
+ vk::ShaderProgramHelper mPrograms[vk::InternalShader::BufferUtils_comp::kFlagsMask |
+ vk::InternalShader::BufferUtils_comp::kFunctionMask |
+ vk::InternalShader::BufferUtils_comp::kFormatMask];
+};
+
+} // namespace rx
+
+#endif // LIBANGLE_RENDERER_VULKAN_DISPATCHUTILSVK_H_
diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp
index b2a7e48..7ae8a90 100644
--- a/src/libANGLE/renderer/vulkan/RendererVk.cpp
+++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp
@@ -330,6 +330,8 @@
(void)finish(context);
}
+ mDispatchUtils.destroy(mDevice);
+
mPipelineLayoutCache.destroy(mDevice);
mDescriptorSetLayoutCache.destroy(mDevice);
diff --git a/src/libANGLE/renderer/vulkan/RendererVk.h b/src/libANGLE/renderer/vulkan/RendererVk.h
index 899593b..ce8b11d 100644
--- a/src/libANGLE/renderer/vulkan/RendererVk.h
+++ b/src/libANGLE/renderer/vulkan/RendererVk.h
@@ -17,6 +17,7 @@
#include "libANGLE/BlobCache.h"
#include "libANGLE/Caps.h"
#include "libANGLE/renderer/vulkan/CommandGraph.h"
+#include "libANGLE/renderer/vulkan/DispatchUtilsVk.h"
#include "libANGLE/renderer/vulkan/QueryVk.h"
#include "libANGLE/renderer/vulkan/vk_format_utils.h"
#include "libANGLE/renderer/vulkan/vk_helpers.h"
@@ -160,8 +161,10 @@
// Issues a new serial for linked shader modules. Used in the pipeline cache.
Serial issueShaderSerial();
+ vk::ShaderLibrary &getShaderLibrary() { return mShaderLibrary; }
angle::Result getFullScreenClearShaderProgram(vk::Context *context,
vk::ShaderProgramHelper **programOut);
+ DispatchUtilsVk *getDispatchUtils() { return &mDispatchUtils; }
const angle::FeaturesVk &getFeatures() const { return mFeatures; }
angle::Result getTimestamp(vk::Context *context, uint64_t *timestampOut);
@@ -313,6 +316,7 @@
// Internal shader library.
vk::ShaderLibrary mShaderLibrary;
vk::ShaderProgramHelper mFullScreenClearShaderProgram;
+ DispatchUtilsVk mDispatchUtils;
// The GpuEventQuery struct holds together a timestamp query and enough data to create a
// trace event based on that. Use traceGpuEvent to insert such queries. They will be readback
diff --git a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
index 2b2c61f..e032b1b 100644
--- a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
+++ b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
@@ -23,13 +23,15 @@
{
namespace
{
-constexpr size_t kDynamicVertexDataSize = 1024 * 1024;
-constexpr size_t kDynamicIndexDataSize = 1024 * 8;
-constexpr size_t kMaxVertexFormatAlignment = 4;
-constexpr VkBufferUsageFlags kVertexBufferUsageFlags =
- VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;
-constexpr VkBufferUsageFlags kIndexBufferUsageFlags =
- VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;
+constexpr size_t kDynamicVertexDataSize = 1024 * 1024;
+constexpr size_t kDynamicIndexDataSize = 1024 * 8;
+constexpr size_t kMaxVertexFormatAlignment = 4;
+constexpr VkBufferUsageFlags kVertexBufferUsageFlags = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
+ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
+ VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;
+constexpr VkBufferUsageFlags kIndexBufferUsageFlags = VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
+ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
+ VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;
bool BindingIsAligned(const gl::VertexBinding &binding, unsigned componentSize)
{
@@ -176,7 +178,6 @@
const gl::VertexBinding &binding,
size_t attribIndex)
{
-
// Needed before reading buffer or we could get stale data.
ANGLE_TRY(contextVk->getRenderer()->finish(contextVk));
@@ -557,16 +558,60 @@
{
ASSERT(type != gl::DrawElementsType::InvalidEnum);
+ RendererVk *renderer = contextVk->getRenderer();
gl::Buffer *glBuffer = mState.getElementArrayBuffer();
if (!glBuffer)
{
ANGLE_TRY(streamIndexData(contextVk, type, indexCount, indices, &mDynamicIndexData));
}
+ else if (renderer->getFormat(angle::FormatID::R16_UINT).vkSupportsStorageBuffer)
+ {
+ BufferVk *bufferVk = vk::GetImpl(glBuffer);
+
+ ASSERT(type == gl::DrawElementsType::UnsignedByte);
+
+ intptr_t offsetIntoSrcData = reinterpret_cast<intptr_t>(indices);
+ size_t srcDataSize = static_cast<size_t>(bufferVk->getSize()) - offsetIntoSrcData;
+
+ mTranslatedByteIndexData.releaseRetainedBuffers(renderer);
+
+ ANGLE_TRY(mTranslatedByteIndexData.allocate(contextVk, sizeof(GLushort) * srcDataSize,
+ nullptr, nullptr,
+ &mCurrentElementArrayBufferOffset, nullptr));
+ mCurrentElementArrayBuffer = mTranslatedByteIndexData.getCurrentBuffer();
+
+ vk::BufferHelper *dest = mTranslatedByteIndexData.getCurrentBuffer();
+ vk::BufferHelper *src = &bufferVk->getBuffer();
+
+ ANGLE_TRY(src->initBufferView(contextVk, renderer->getFormat(angle::FormatID::R8_UINT)));
+ ANGLE_TRY(dest->initBufferView(contextVk, renderer->getFormat(angle::FormatID::R16_UINT)));
+
+ // Copy relevant section of the source into destination at allocated offset. Note that the
+ // offset returned by allocate() above is in bytes, while our allocated array is of
+ // GLushorts.
+ DispatchUtilsVk::CopyParameters params = {};
+ params.destOffset =
+ static_cast<size_t>(mCurrentElementArrayBufferOffset) / sizeof(GLushort);
+ params.srcOffset = offsetIntoSrcData;
+ params.size = srcDataSize;
+
+ // Note: this is a copy, which implicitly converts between formats. Once support for
+ // primitive restart is added, a specialized shader is likely needed to special case 0xFF ->
+ // 0xFFFF.
+ ANGLE_TRY(renderer->getDispatchUtils()->copyBuffer(contextVk, dest, src, params));
+ }
else
{
+ // If it's not possible to convert the buffer with compute, opt for a CPU read back for now.
+ // TODO(syoussefi): R8G8B8A8_UINT is required to have storage texel buffer support, so a
+ // specialized shader code can be made to read two ubyte indices and output them in R and B
+ // (or A and G based on endianness?) with 0 on the other channels. If specialized, we might
+ // as well support the ubyte to ushort case with correct handling of primitive restart.
+ // http://anglebug.com/3003
+
// Needed before reading buffer or we could get stale data.
- ANGLE_TRY(contextVk->getRenderer()->finish(contextVk));
+ ANGLE_TRY(renderer->finish(contextVk));
ASSERT(type == gl::DrawElementsType::UnsignedByte);
// Unsigned bytes don't have direct support in Vulkan so we have to expand the
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000000.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000000.inc
new file mode 100644
index 0000000..e56d0ac
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000000.inc
@@ -0,0 +1,91 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000000[] = {
+ 0x07230203,0x00010000,0x00080007,0x0000003d,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000009,
+ 0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,
+ 0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00080005,0x00000009,0x475f6c67,
+ 0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005,0x00000010,0x68737550,
+ 0x736e6f43,0x746e6174,0x00000073,0x00060006,0x00000010,0x00000000,0x74736564,0x7366664f,
+ 0x00007465,0x00050006,0x00000010,0x00000001,0x657a6973,0x00000000,0x00060006,0x00000010,
+ 0x00000002,0x4f637273,0x65736666,0x00000074,0x00050006,0x00000010,0x00000003,0x64646170,
+ 0x00676e69,0x00060006,0x00000010,0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,
+ 0x00000012,0x61726170,0x0000736d,0x00050005,0x0000001e,0x74736564,0x65646e49,0x00000078,
+ 0x00050005,0x00000026,0x49637273,0x7865646e,0x00000000,0x00050005,0x0000002f,0x56637273,
+ 0x65756c61,0x00000000,0x00040005,0x00000036,0x74736564,0x00000000,0x00040047,0x00000009,
+ 0x0000000b,0x0000001c,0x00050048,0x00000010,0x00000000,0x00000023,0x00000000,0x00050048,
+ 0x00000010,0x00000001,0x00000023,0x00000004,0x00050048,0x00000010,0x00000002,0x00000023,
+ 0x00000008,0x00050048,0x00000010,0x00000003,0x00000023,0x0000000c,0x00050048,0x00000010,
+ 0x00000004,0x00000023,0x00000010,0x00030047,0x00000010,0x00000002,0x00040047,0x00000036,
+ 0x00000022,0x00000000,0x00040047,0x00000036,0x00000021,0x00000000,0x00030047,0x00000036,
+ 0x00000019,0x00040047,0x0000003c,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,
+ 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,
+ 0x00000006,0x00000003,0x00040020,0x00000008,0x00000001,0x00000007,0x0004003b,0x00000008,
+ 0x00000009,0x00000001,0x0004002b,0x00000006,0x0000000a,0x00000000,0x00040020,0x0000000b,
+ 0x00000001,0x00000006,0x00030016,0x0000000e,0x00000020,0x00040017,0x0000000f,0x0000000e,
+ 0x00000004,0x0007001e,0x00000010,0x00000006,0x00000006,0x00000006,0x00000006,0x0000000f,
+ 0x00040020,0x00000011,0x00000009,0x00000010,0x0004003b,0x00000011,0x00000012,0x00000009,
+ 0x00040015,0x00000013,0x00000020,0x00000001,0x0004002b,0x00000013,0x00000014,0x00000001,
+ 0x00040020,0x00000015,0x00000009,0x00000006,0x00020014,0x00000018,0x00040020,0x0000001d,
+ 0x00000007,0x00000013,0x0004002b,0x00000013,0x0000001f,0x00000000,0x0004002b,0x00000013,
+ 0x00000027,0x00000002,0x00040020,0x0000002e,0x00000007,0x0000000f,0x0004002b,0x00000013,
+ 0x00000030,0x00000004,0x00040020,0x00000031,0x00000009,0x0000000f,0x00090019,0x00000034,
+ 0x0000000e,0x00000005,0x00000000,0x00000000,0x00000000,0x00000002,0x00000001,0x00040020,
+ 0x00000035,0x00000000,0x00000034,0x0004003b,0x00000035,0x00000036,0x00000000,0x0004002b,
+ 0x00000006,0x0000003a,0x00000040,0x0004002b,0x00000006,0x0000003b,0x00000001,0x0006002c,
+ 0x00000007,0x0000003c,0x0000003a,0x0000003b,0x0000003b,0x00050036,0x00000002,0x00000004,
+ 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000001d,0x0000001e,0x00000007,
+ 0x0004003b,0x0000001d,0x00000026,0x00000007,0x0004003b,0x0000002e,0x0000002f,0x00000007,
+ 0x00050041,0x0000000b,0x0000000c,0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000000d,
+ 0x0000000c,0x00050041,0x00000015,0x00000016,0x00000012,0x00000014,0x0004003d,0x00000006,
+ 0x00000017,0x00000016,0x000500ae,0x00000018,0x00000019,0x0000000d,0x00000017,0x000300f7,
+ 0x0000001b,0x00000000,0x000400fa,0x00000019,0x0000001a,0x0000001b,0x000200f8,0x0000001a,
+ 0x000100fd,0x000200f8,0x0000001b,0x00050041,0x00000015,0x00000020,0x00000012,0x0000001f,
+ 0x0004003d,0x00000006,0x00000021,0x00000020,0x00050041,0x0000000b,0x00000022,0x00000009,
+ 0x0000000a,0x0004003d,0x00000006,0x00000023,0x00000022,0x00050080,0x00000006,0x00000024,
+ 0x00000021,0x00000023,0x0004007c,0x00000013,0x00000025,0x00000024,0x0003003e,0x0000001e,
+ 0x00000025,0x00050041,0x00000015,0x00000028,0x00000012,0x00000027,0x0004003d,0x00000006,
+ 0x00000029,0x00000028,0x00050041,0x0000000b,0x0000002a,0x00000009,0x0000000a,0x0004003d,
+ 0x00000006,0x0000002b,0x0000002a,0x00050080,0x00000006,0x0000002c,0x00000029,0x0000002b,
+ 0x0004007c,0x00000013,0x0000002d,0x0000002c,0x0003003e,0x00000026,0x0000002d,0x00050041,
+ 0x00000031,0x00000032,0x00000012,0x00000030,0x0004003d,0x0000000f,0x00000033,0x00000032,
+ 0x0003003e,0x0000002f,0x00000033,0x0004003d,0x00000034,0x00000037,0x00000036,0x0004003d,
+ 0x00000013,0x00000038,0x0000001e,0x0004003d,0x0000000f,0x00000039,0x0000002f,0x00040063,
+ 0x00000037,0x00000038,0x00000039,0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32f)uniform writeonly imageBuffer dest;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ vec4 clearValue;
+} params;
+
+void main()
+{
+
+ if(gl_GlobalInvocationID . x >= params . size)
+ return;
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ vec4 srcValue = params . clearValue;
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000001.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000001.inc
new file mode 100644
index 0000000..ab526c0
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000001.inc
@@ -0,0 +1,83 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000001[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000033,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000015,
+ 0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,
+ 0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,0x00000008,0x74736564,
+ 0x65646e49,0x00000078,0x00060005,0x0000000c,0x68737550,0x736e6f43,0x746e6174,0x00000073,
+ 0x00060006,0x0000000c,0x00000000,0x74736564,0x7366664f,0x00007465,0x00050006,0x0000000c,
+ 0x00000001,0x657a6973,0x00000000,0x00060006,0x0000000c,0x00000002,0x4f637273,0x65736666,
+ 0x00000074,0x00050006,0x0000000c,0x00000003,0x64646170,0x00676e69,0x00060006,0x0000000c,
+ 0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,0x0000000e,0x61726170,0x0000736d,
+ 0x00080005,0x00000015,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,
+ 0x00050005,0x0000001c,0x49637273,0x7865646e,0x00000000,0x00050005,0x00000025,0x56637273,
+ 0x65756c61,0x00000000,0x00040005,0x0000002c,0x74736564,0x00000000,0x00050048,0x0000000c,
+ 0x00000000,0x00000023,0x00000000,0x00050048,0x0000000c,0x00000001,0x00000023,0x00000004,
+ 0x00050048,0x0000000c,0x00000002,0x00000023,0x00000008,0x00050048,0x0000000c,0x00000003,
+ 0x00000023,0x0000000c,0x00050048,0x0000000c,0x00000004,0x00000023,0x00000010,0x00030047,
+ 0x0000000c,0x00000002,0x00040047,0x00000015,0x0000000b,0x0000001c,0x00040047,0x0000002c,
+ 0x00000022,0x00000000,0x00040047,0x0000002c,0x00000021,0x00000000,0x00030047,0x0000002c,
+ 0x00000019,0x00040047,0x00000032,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,
+ 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000001,0x00040020,0x00000007,
+ 0x00000007,0x00000006,0x00040015,0x00000009,0x00000020,0x00000000,0x00030016,0x0000000a,
+ 0x00000020,0x00040017,0x0000000b,0x0000000a,0x00000004,0x0007001e,0x0000000c,0x00000009,
+ 0x00000009,0x00000009,0x00000009,0x0000000b,0x00040020,0x0000000d,0x00000009,0x0000000c,
+ 0x0004003b,0x0000000d,0x0000000e,0x00000009,0x0004002b,0x00000006,0x0000000f,0x00000000,
+ 0x00040020,0x00000010,0x00000009,0x00000009,0x00040017,0x00000013,0x00000009,0x00000003,
+ 0x00040020,0x00000014,0x00000001,0x00000013,0x0004003b,0x00000014,0x00000015,0x00000001,
+ 0x0004002b,0x00000009,0x00000016,0x00000000,0x00040020,0x00000017,0x00000001,0x00000009,
+ 0x0004002b,0x00000006,0x0000001d,0x00000002,0x00040020,0x00000024,0x00000007,0x0000000b,
+ 0x0004002b,0x00000006,0x00000026,0x00000004,0x00040020,0x00000027,0x00000009,0x0000000b,
+ 0x00090019,0x0000002a,0x0000000a,0x00000005,0x00000000,0x00000000,0x00000000,0x00000002,
+ 0x00000001,0x00040020,0x0000002b,0x00000000,0x0000002a,0x0004003b,0x0000002b,0x0000002c,
+ 0x00000000,0x0004002b,0x00000009,0x00000030,0x00000040,0x0004002b,0x00000009,0x00000031,
+ 0x00000001,0x0006002c,0x00000013,0x00000032,0x00000030,0x00000031,0x00000031,0x00050036,
+ 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,
+ 0x00000008,0x00000007,0x0004003b,0x00000007,0x0000001c,0x00000007,0x0004003b,0x00000024,
+ 0x00000025,0x00000007,0x00050041,0x00000010,0x00000011,0x0000000e,0x0000000f,0x0004003d,
+ 0x00000009,0x00000012,0x00000011,0x00050041,0x00000017,0x00000018,0x00000015,0x00000016,
+ 0x0004003d,0x00000009,0x00000019,0x00000018,0x00050080,0x00000009,0x0000001a,0x00000012,
+ 0x00000019,0x0004007c,0x00000006,0x0000001b,0x0000001a,0x0003003e,0x00000008,0x0000001b,
+ 0x00050041,0x00000010,0x0000001e,0x0000000e,0x0000001d,0x0004003d,0x00000009,0x0000001f,
+ 0x0000001e,0x00050041,0x00000017,0x00000020,0x00000015,0x00000016,0x0004003d,0x00000009,
+ 0x00000021,0x00000020,0x00050080,0x00000009,0x00000022,0x0000001f,0x00000021,0x0004007c,
+ 0x00000006,0x00000023,0x00000022,0x0003003e,0x0000001c,0x00000023,0x00050041,0x00000027,
+ 0x00000028,0x0000000e,0x00000026,0x0004003d,0x0000000b,0x00000029,0x00000028,0x0003003e,
+ 0x00000025,0x00000029,0x0004003d,0x0000002a,0x0000002d,0x0000002c,0x0004003d,0x00000006,
+ 0x0000002e,0x00000008,0x0004003d,0x0000000b,0x0000002f,0x00000025,0x00040063,0x0000002d,
+ 0x0000002e,0x0000002f,0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32f)uniform writeonly imageBuffer dest;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ vec4 clearValue;
+} params;
+
+void main()
+{
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ vec4 srcValue = params . clearValue;
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000002.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000002.inc
new file mode 100644
index 0000000..6f9c01e
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000002.inc
@@ -0,0 +1,97 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000002[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000041,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002e,0x00020011,0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,
+ 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,
+ 0x00000000,0x00000009,0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,
+ 0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00080005,
+ 0x00000009,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005,
+ 0x00000010,0x68737550,0x736e6f43,0x746e6174,0x00000073,0x00060006,0x00000010,0x00000000,
+ 0x74736564,0x7366664f,0x00007465,0x00050006,0x00000010,0x00000001,0x657a6973,0x00000000,
+ 0x00060006,0x00000010,0x00000002,0x4f637273,0x65736666,0x00000074,0x00050006,0x00000010,
+ 0x00000003,0x64646170,0x00676e69,0x00060006,0x00000010,0x00000004,0x61656c63,0x6c615672,
+ 0x00006575,0x00040005,0x00000012,0x61726170,0x0000736d,0x00050005,0x0000001e,0x74736564,
+ 0x65646e49,0x00000078,0x00050005,0x00000026,0x49637273,0x7865646e,0x00000000,0x00050005,
+ 0x0000002f,0x56637273,0x65756c61,0x00000000,0x00030005,0x00000033,0x00637273,0x00040005,
+ 0x0000003a,0x74736564,0x00000000,0x00040047,0x00000009,0x0000000b,0x0000001c,0x00050048,
+ 0x00000010,0x00000000,0x00000023,0x00000000,0x00050048,0x00000010,0x00000001,0x00000023,
+ 0x00000004,0x00050048,0x00000010,0x00000002,0x00000023,0x00000008,0x00050048,0x00000010,
+ 0x00000003,0x00000023,0x0000000c,0x00050048,0x00000010,0x00000004,0x00000023,0x00000010,
+ 0x00030047,0x00000010,0x00000002,0x00040047,0x00000033,0x00000022,0x00000000,0x00040047,
+ 0x00000033,0x00000021,0x00000001,0x00040047,0x0000003a,0x00000022,0x00000000,0x00040047,
+ 0x0000003a,0x00000021,0x00000000,0x00030047,0x0000003a,0x00000019,0x00040047,0x00000040,
+ 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,
+ 0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,0x00000006,0x00000003,0x00040020,
+ 0x00000008,0x00000001,0x00000007,0x0004003b,0x00000008,0x00000009,0x00000001,0x0004002b,
+ 0x00000006,0x0000000a,0x00000000,0x00040020,0x0000000b,0x00000001,0x00000006,0x00030016,
+ 0x0000000e,0x00000020,0x00040017,0x0000000f,0x0000000e,0x00000004,0x0007001e,0x00000010,
+ 0x00000006,0x00000006,0x00000006,0x00000006,0x0000000f,0x00040020,0x00000011,0x00000009,
+ 0x00000010,0x0004003b,0x00000011,0x00000012,0x00000009,0x00040015,0x00000013,0x00000020,
+ 0x00000001,0x0004002b,0x00000013,0x00000014,0x00000001,0x00040020,0x00000015,0x00000009,
+ 0x00000006,0x00020014,0x00000018,0x00040020,0x0000001d,0x00000007,0x00000013,0x0004002b,
+ 0x00000013,0x0000001f,0x00000000,0x0004002b,0x00000013,0x00000027,0x00000002,0x00040020,
+ 0x0000002e,0x00000007,0x0000000f,0x00090019,0x00000030,0x0000000e,0x00000005,0x00000000,
+ 0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,0x00000031,0x00000030,0x00040020,
+ 0x00000032,0x00000000,0x00000031,0x0004003b,0x00000032,0x00000033,0x00000000,0x00090019,
+ 0x00000038,0x0000000e,0x00000005,0x00000000,0x00000000,0x00000000,0x00000002,0x00000001,
+ 0x00040020,0x00000039,0x00000000,0x00000038,0x0004003b,0x00000039,0x0000003a,0x00000000,
+ 0x0004002b,0x00000006,0x0000003e,0x00000040,0x0004002b,0x00000006,0x0000003f,0x00000001,
+ 0x0006002c,0x00000007,0x00000040,0x0000003e,0x0000003f,0x0000003f,0x00050036,0x00000002,
+ 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000001d,0x0000001e,
+ 0x00000007,0x0004003b,0x0000001d,0x00000026,0x00000007,0x0004003b,0x0000002e,0x0000002f,
+ 0x00000007,0x00050041,0x0000000b,0x0000000c,0x00000009,0x0000000a,0x0004003d,0x00000006,
+ 0x0000000d,0x0000000c,0x00050041,0x00000015,0x00000016,0x00000012,0x00000014,0x0004003d,
+ 0x00000006,0x00000017,0x00000016,0x000500ae,0x00000018,0x00000019,0x0000000d,0x00000017,
+ 0x000300f7,0x0000001b,0x00000000,0x000400fa,0x00000019,0x0000001a,0x0000001b,0x000200f8,
+ 0x0000001a,0x000100fd,0x000200f8,0x0000001b,0x00050041,0x00000015,0x00000020,0x00000012,
+ 0x0000001f,0x0004003d,0x00000006,0x00000021,0x00000020,0x00050041,0x0000000b,0x00000022,
+ 0x00000009,0x0000000a,0x0004003d,0x00000006,0x00000023,0x00000022,0x00050080,0x00000006,
+ 0x00000024,0x00000021,0x00000023,0x0004007c,0x00000013,0x00000025,0x00000024,0x0003003e,
+ 0x0000001e,0x00000025,0x00050041,0x00000015,0x00000028,0x00000012,0x00000027,0x0004003d,
+ 0x00000006,0x00000029,0x00000028,0x00050041,0x0000000b,0x0000002a,0x00000009,0x0000000a,
+ 0x0004003d,0x00000006,0x0000002b,0x0000002a,0x00050080,0x00000006,0x0000002c,0x00000029,
+ 0x0000002b,0x0004007c,0x00000013,0x0000002d,0x0000002c,0x0003003e,0x00000026,0x0000002d,
+ 0x0004003d,0x00000031,0x00000034,0x00000033,0x0004003d,0x00000013,0x00000035,0x00000026,
+ 0x00040064,0x00000030,0x00000036,0x00000034,0x0005005f,0x0000000f,0x00000037,0x00000036,
+ 0x00000035,0x0003003e,0x0000002f,0x00000037,0x0004003d,0x00000038,0x0000003b,0x0000003a,
+ 0x0004003d,0x00000013,0x0000003c,0x0000001e,0x0004003d,0x0000000f,0x0000003d,0x0000002f,
+ 0x00040063,0x0000003b,0x0000003c,0x0000003d,0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32f)uniform writeonly imageBuffer dest;
+
+layout(set = 0, binding = 1)uniform samplerBuffer src;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ vec4 clearValue;
+} params;
+
+void main()
+{
+
+ if(gl_GlobalInvocationID . x >= params . size)
+ return;
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ vec4 srcValue = texelFetch(src, srcIndex);
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000003.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000003.inc
new file mode 100644
index 0000000..a441470
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000003.inc
@@ -0,0 +1,89 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000003[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000037,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002e,0x00020011,0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,
+ 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,
+ 0x00000000,0x00000015,0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,
+ 0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,
+ 0x00000008,0x74736564,0x65646e49,0x00000078,0x00060005,0x0000000c,0x68737550,0x736e6f43,
+ 0x746e6174,0x00000073,0x00060006,0x0000000c,0x00000000,0x74736564,0x7366664f,0x00007465,
+ 0x00050006,0x0000000c,0x00000001,0x657a6973,0x00000000,0x00060006,0x0000000c,0x00000002,
+ 0x4f637273,0x65736666,0x00000074,0x00050006,0x0000000c,0x00000003,0x64646170,0x00676e69,
+ 0x00060006,0x0000000c,0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,0x0000000e,
+ 0x61726170,0x0000736d,0x00080005,0x00000015,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,
+ 0x496e6f69,0x00000044,0x00050005,0x0000001c,0x49637273,0x7865646e,0x00000000,0x00050005,
+ 0x00000025,0x56637273,0x65756c61,0x00000000,0x00030005,0x00000029,0x00637273,0x00040005,
+ 0x00000030,0x74736564,0x00000000,0x00050048,0x0000000c,0x00000000,0x00000023,0x00000000,
+ 0x00050048,0x0000000c,0x00000001,0x00000023,0x00000004,0x00050048,0x0000000c,0x00000002,
+ 0x00000023,0x00000008,0x00050048,0x0000000c,0x00000003,0x00000023,0x0000000c,0x00050048,
+ 0x0000000c,0x00000004,0x00000023,0x00000010,0x00030047,0x0000000c,0x00000002,0x00040047,
+ 0x00000015,0x0000000b,0x0000001c,0x00040047,0x00000029,0x00000022,0x00000000,0x00040047,
+ 0x00000029,0x00000021,0x00000001,0x00040047,0x00000030,0x00000022,0x00000000,0x00040047,
+ 0x00000030,0x00000021,0x00000000,0x00030047,0x00000030,0x00000019,0x00040047,0x00000036,
+ 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,
+ 0x00000006,0x00000020,0x00000001,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015,
+ 0x00000009,0x00000020,0x00000000,0x00030016,0x0000000a,0x00000020,0x00040017,0x0000000b,
+ 0x0000000a,0x00000004,0x0007001e,0x0000000c,0x00000009,0x00000009,0x00000009,0x00000009,
+ 0x0000000b,0x00040020,0x0000000d,0x00000009,0x0000000c,0x0004003b,0x0000000d,0x0000000e,
+ 0x00000009,0x0004002b,0x00000006,0x0000000f,0x00000000,0x00040020,0x00000010,0x00000009,
+ 0x00000009,0x00040017,0x00000013,0x00000009,0x00000003,0x00040020,0x00000014,0x00000001,
+ 0x00000013,0x0004003b,0x00000014,0x00000015,0x00000001,0x0004002b,0x00000009,0x00000016,
+ 0x00000000,0x00040020,0x00000017,0x00000001,0x00000009,0x0004002b,0x00000006,0x0000001d,
+ 0x00000002,0x00040020,0x00000024,0x00000007,0x0000000b,0x00090019,0x00000026,0x0000000a,
+ 0x00000005,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,0x00000027,
+ 0x00000026,0x00040020,0x00000028,0x00000000,0x00000027,0x0004003b,0x00000028,0x00000029,
+ 0x00000000,0x00090019,0x0000002e,0x0000000a,0x00000005,0x00000000,0x00000000,0x00000000,
+ 0x00000002,0x00000001,0x00040020,0x0000002f,0x00000000,0x0000002e,0x0004003b,0x0000002f,
+ 0x00000030,0x00000000,0x0004002b,0x00000009,0x00000034,0x00000040,0x0004002b,0x00000009,
+ 0x00000035,0x00000001,0x0006002c,0x00000013,0x00000036,0x00000034,0x00000035,0x00000035,
+ 0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,
+ 0x00000007,0x00000008,0x00000007,0x0004003b,0x00000007,0x0000001c,0x00000007,0x0004003b,
+ 0x00000024,0x00000025,0x00000007,0x00050041,0x00000010,0x00000011,0x0000000e,0x0000000f,
+ 0x0004003d,0x00000009,0x00000012,0x00000011,0x00050041,0x00000017,0x00000018,0x00000015,
+ 0x00000016,0x0004003d,0x00000009,0x00000019,0x00000018,0x00050080,0x00000009,0x0000001a,
+ 0x00000012,0x00000019,0x0004007c,0x00000006,0x0000001b,0x0000001a,0x0003003e,0x00000008,
+ 0x0000001b,0x00050041,0x00000010,0x0000001e,0x0000000e,0x0000001d,0x0004003d,0x00000009,
+ 0x0000001f,0x0000001e,0x00050041,0x00000017,0x00000020,0x00000015,0x00000016,0x0004003d,
+ 0x00000009,0x00000021,0x00000020,0x00050080,0x00000009,0x00000022,0x0000001f,0x00000021,
+ 0x0004007c,0x00000006,0x00000023,0x00000022,0x0003003e,0x0000001c,0x00000023,0x0004003d,
+ 0x00000027,0x0000002a,0x00000029,0x0004003d,0x00000006,0x0000002b,0x0000001c,0x00040064,
+ 0x00000026,0x0000002c,0x0000002a,0x0005005f,0x0000000b,0x0000002d,0x0000002c,0x0000002b,
+ 0x0003003e,0x00000025,0x0000002d,0x0004003d,0x0000002e,0x00000031,0x00000030,0x0004003d,
+ 0x00000006,0x00000032,0x00000008,0x0004003d,0x0000000b,0x00000033,0x00000025,0x00040063,
+ 0x00000031,0x00000032,0x00000033,0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32f)uniform writeonly imageBuffer dest;
+
+layout(set = 0, binding = 1)uniform samplerBuffer src;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ vec4 clearValue;
+} params;
+
+void main()
+{
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ vec4 srcValue = texelFetch(src, srcIndex);
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000004.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000004.inc
new file mode 100644
index 0000000..b5d7ea1
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000004.inc
@@ -0,0 +1,91 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000004[] = {
+ 0x07230203,0x00010000,0x00080007,0x0000003c,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000009,
+ 0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,
+ 0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00080005,0x00000009,0x475f6c67,
+ 0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005,0x00000010,0x68737550,
+ 0x736e6f43,0x746e6174,0x00000073,0x00060006,0x00000010,0x00000000,0x74736564,0x7366664f,
+ 0x00007465,0x00050006,0x00000010,0x00000001,0x657a6973,0x00000000,0x00060006,0x00000010,
+ 0x00000002,0x4f637273,0x65736666,0x00000074,0x00050006,0x00000010,0x00000003,0x64646170,
+ 0x00676e69,0x00060006,0x00000010,0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,
+ 0x00000012,0x61726170,0x0000736d,0x00050005,0x0000001d,0x74736564,0x65646e49,0x00000078,
+ 0x00050005,0x00000025,0x49637273,0x7865646e,0x00000000,0x00050005,0x0000002e,0x56637273,
+ 0x65756c61,0x00000000,0x00040005,0x00000035,0x74736564,0x00000000,0x00040047,0x00000009,
+ 0x0000000b,0x0000001c,0x00050048,0x00000010,0x00000000,0x00000023,0x00000000,0x00050048,
+ 0x00000010,0x00000001,0x00000023,0x00000004,0x00050048,0x00000010,0x00000002,0x00000023,
+ 0x00000008,0x00050048,0x00000010,0x00000003,0x00000023,0x0000000c,0x00050048,0x00000010,
+ 0x00000004,0x00000023,0x00000010,0x00030047,0x00000010,0x00000002,0x00040047,0x00000035,
+ 0x00000022,0x00000000,0x00040047,0x00000035,0x00000021,0x00000000,0x00030047,0x00000035,
+ 0x00000019,0x00040047,0x0000003b,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,
+ 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,
+ 0x00000006,0x00000003,0x00040020,0x00000008,0x00000001,0x00000007,0x0004003b,0x00000008,
+ 0x00000009,0x00000001,0x0004002b,0x00000006,0x0000000a,0x00000000,0x00040020,0x0000000b,
+ 0x00000001,0x00000006,0x00040015,0x0000000e,0x00000020,0x00000001,0x00040017,0x0000000f,
+ 0x0000000e,0x00000004,0x0007001e,0x00000010,0x00000006,0x00000006,0x00000006,0x00000006,
+ 0x0000000f,0x00040020,0x00000011,0x00000009,0x00000010,0x0004003b,0x00000011,0x00000012,
+ 0x00000009,0x0004002b,0x0000000e,0x00000013,0x00000001,0x00040020,0x00000014,0x00000009,
+ 0x00000006,0x00020014,0x00000017,0x00040020,0x0000001c,0x00000007,0x0000000e,0x0004002b,
+ 0x0000000e,0x0000001e,0x00000000,0x0004002b,0x0000000e,0x00000026,0x00000002,0x00040020,
+ 0x0000002d,0x00000007,0x0000000f,0x0004002b,0x0000000e,0x0000002f,0x00000004,0x00040020,
+ 0x00000030,0x00000009,0x0000000f,0x00090019,0x00000033,0x0000000e,0x00000005,0x00000000,
+ 0x00000000,0x00000000,0x00000002,0x00000015,0x00040020,0x00000034,0x00000000,0x00000033,
+ 0x0004003b,0x00000034,0x00000035,0x00000000,0x0004002b,0x00000006,0x00000039,0x00000040,
+ 0x0004002b,0x00000006,0x0000003a,0x00000001,0x0006002c,0x00000007,0x0000003b,0x00000039,
+ 0x0000003a,0x0000003a,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,
+ 0x00000005,0x0004003b,0x0000001c,0x0000001d,0x00000007,0x0004003b,0x0000001c,0x00000025,
+ 0x00000007,0x0004003b,0x0000002d,0x0000002e,0x00000007,0x00050041,0x0000000b,0x0000000c,
+ 0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000000d,0x0000000c,0x00050041,0x00000014,
+ 0x00000015,0x00000012,0x00000013,0x0004003d,0x00000006,0x00000016,0x00000015,0x000500ae,
+ 0x00000017,0x00000018,0x0000000d,0x00000016,0x000300f7,0x0000001a,0x00000000,0x000400fa,
+ 0x00000018,0x00000019,0x0000001a,0x000200f8,0x00000019,0x000100fd,0x000200f8,0x0000001a,
+ 0x00050041,0x00000014,0x0000001f,0x00000012,0x0000001e,0x0004003d,0x00000006,0x00000020,
+ 0x0000001f,0x00050041,0x0000000b,0x00000021,0x00000009,0x0000000a,0x0004003d,0x00000006,
+ 0x00000022,0x00000021,0x00050080,0x00000006,0x00000023,0x00000020,0x00000022,0x0004007c,
+ 0x0000000e,0x00000024,0x00000023,0x0003003e,0x0000001d,0x00000024,0x00050041,0x00000014,
+ 0x00000027,0x00000012,0x00000026,0x0004003d,0x00000006,0x00000028,0x00000027,0x00050041,
+ 0x0000000b,0x00000029,0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000002a,0x00000029,
+ 0x00050080,0x00000006,0x0000002b,0x00000028,0x0000002a,0x0004007c,0x0000000e,0x0000002c,
+ 0x0000002b,0x0003003e,0x00000025,0x0000002c,0x00050041,0x00000030,0x00000031,0x00000012,
+ 0x0000002f,0x0004003d,0x0000000f,0x00000032,0x00000031,0x0003003e,0x0000002e,0x00000032,
+ 0x0004003d,0x00000033,0x00000036,0x00000035,0x0004003d,0x0000000e,0x00000037,0x0000001d,
+ 0x0004003d,0x0000000f,0x00000038,0x0000002e,0x00040063,0x00000036,0x00000037,0x00000038,
+ 0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32i)uniform writeonly iimageBuffer dest;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ ivec4 clearValue;
+} params;
+
+void main()
+{
+
+ if(gl_GlobalInvocationID . x >= params . size)
+ return;
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ ivec4 srcValue = params . clearValue;
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000005.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000005.inc
new file mode 100644
index 0000000..8b80b41
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000005.inc
@@ -0,0 +1,83 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000005[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000032,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000014,
+ 0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,
+ 0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,0x00000008,0x74736564,
+ 0x65646e49,0x00000078,0x00060005,0x0000000b,0x68737550,0x736e6f43,0x746e6174,0x00000073,
+ 0x00060006,0x0000000b,0x00000000,0x74736564,0x7366664f,0x00007465,0x00050006,0x0000000b,
+ 0x00000001,0x657a6973,0x00000000,0x00060006,0x0000000b,0x00000002,0x4f637273,0x65736666,
+ 0x00000074,0x00050006,0x0000000b,0x00000003,0x64646170,0x00676e69,0x00060006,0x0000000b,
+ 0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,0x0000000d,0x61726170,0x0000736d,
+ 0x00080005,0x00000014,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,
+ 0x00050005,0x0000001b,0x49637273,0x7865646e,0x00000000,0x00050005,0x00000024,0x56637273,
+ 0x65756c61,0x00000000,0x00040005,0x0000002b,0x74736564,0x00000000,0x00050048,0x0000000b,
+ 0x00000000,0x00000023,0x00000000,0x00050048,0x0000000b,0x00000001,0x00000023,0x00000004,
+ 0x00050048,0x0000000b,0x00000002,0x00000023,0x00000008,0x00050048,0x0000000b,0x00000003,
+ 0x00000023,0x0000000c,0x00050048,0x0000000b,0x00000004,0x00000023,0x00000010,0x00030047,
+ 0x0000000b,0x00000002,0x00040047,0x00000014,0x0000000b,0x0000001c,0x00040047,0x0000002b,
+ 0x00000022,0x00000000,0x00040047,0x0000002b,0x00000021,0x00000000,0x00030047,0x0000002b,
+ 0x00000019,0x00040047,0x00000031,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,
+ 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000001,0x00040020,0x00000007,
+ 0x00000007,0x00000006,0x00040015,0x00000009,0x00000020,0x00000000,0x00040017,0x0000000a,
+ 0x00000006,0x00000004,0x0007001e,0x0000000b,0x00000009,0x00000009,0x00000009,0x00000009,
+ 0x0000000a,0x00040020,0x0000000c,0x00000009,0x0000000b,0x0004003b,0x0000000c,0x0000000d,
+ 0x00000009,0x0004002b,0x00000006,0x0000000e,0x00000000,0x00040020,0x0000000f,0x00000009,
+ 0x00000009,0x00040017,0x00000012,0x00000009,0x00000003,0x00040020,0x00000013,0x00000001,
+ 0x00000012,0x0004003b,0x00000013,0x00000014,0x00000001,0x0004002b,0x00000009,0x00000015,
+ 0x00000000,0x00040020,0x00000016,0x00000001,0x00000009,0x0004002b,0x00000006,0x0000001c,
+ 0x00000002,0x00040020,0x00000023,0x00000007,0x0000000a,0x0004002b,0x00000006,0x00000025,
+ 0x00000004,0x00040020,0x00000026,0x00000009,0x0000000a,0x00090019,0x00000029,0x00000006,
+ 0x00000005,0x00000000,0x00000000,0x00000000,0x00000002,0x00000015,0x00040020,0x0000002a,
+ 0x00000000,0x00000029,0x0004003b,0x0000002a,0x0000002b,0x00000000,0x0004002b,0x00000009,
+ 0x0000002f,0x00000040,0x0004002b,0x00000009,0x00000030,0x00000001,0x0006002c,0x00000012,
+ 0x00000031,0x0000002f,0x00000030,0x00000030,0x00050036,0x00000002,0x00000004,0x00000000,
+ 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x00000008,0x00000007,0x0004003b,
+ 0x00000007,0x0000001b,0x00000007,0x0004003b,0x00000023,0x00000024,0x00000007,0x00050041,
+ 0x0000000f,0x00000010,0x0000000d,0x0000000e,0x0004003d,0x00000009,0x00000011,0x00000010,
+ 0x00050041,0x00000016,0x00000017,0x00000014,0x00000015,0x0004003d,0x00000009,0x00000018,
+ 0x00000017,0x00050080,0x00000009,0x00000019,0x00000011,0x00000018,0x0004007c,0x00000006,
+ 0x0000001a,0x00000019,0x0003003e,0x00000008,0x0000001a,0x00050041,0x0000000f,0x0000001d,
+ 0x0000000d,0x0000001c,0x0004003d,0x00000009,0x0000001e,0x0000001d,0x00050041,0x00000016,
+ 0x0000001f,0x00000014,0x00000015,0x0004003d,0x00000009,0x00000020,0x0000001f,0x00050080,
+ 0x00000009,0x00000021,0x0000001e,0x00000020,0x0004007c,0x00000006,0x00000022,0x00000021,
+ 0x0003003e,0x0000001b,0x00000022,0x00050041,0x00000026,0x00000027,0x0000000d,0x00000025,
+ 0x0004003d,0x0000000a,0x00000028,0x00000027,0x0003003e,0x00000024,0x00000028,0x0004003d,
+ 0x00000029,0x0000002c,0x0000002b,0x0004003d,0x00000006,0x0000002d,0x00000008,0x0004003d,
+ 0x0000000a,0x0000002e,0x00000024,0x00040063,0x0000002c,0x0000002d,0x0000002e,0x000100fd,
+ 0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32i)uniform writeonly iimageBuffer dest;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ ivec4 clearValue;
+} params;
+
+void main()
+{
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ ivec4 srcValue = params . clearValue;
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000006.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000006.inc
new file mode 100644
index 0000000..126ddca
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000006.inc
@@ -0,0 +1,97 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000006[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000040,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002e,0x00020011,0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,
+ 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,
+ 0x00000000,0x00000009,0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,
+ 0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00080005,
+ 0x00000009,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005,
+ 0x00000010,0x68737550,0x736e6f43,0x746e6174,0x00000073,0x00060006,0x00000010,0x00000000,
+ 0x74736564,0x7366664f,0x00007465,0x00050006,0x00000010,0x00000001,0x657a6973,0x00000000,
+ 0x00060006,0x00000010,0x00000002,0x4f637273,0x65736666,0x00000074,0x00050006,0x00000010,
+ 0x00000003,0x64646170,0x00676e69,0x00060006,0x00000010,0x00000004,0x61656c63,0x6c615672,
+ 0x00006575,0x00040005,0x00000012,0x61726170,0x0000736d,0x00050005,0x0000001d,0x74736564,
+ 0x65646e49,0x00000078,0x00050005,0x00000025,0x49637273,0x7865646e,0x00000000,0x00050005,
+ 0x0000002e,0x56637273,0x65756c61,0x00000000,0x00030005,0x00000032,0x00637273,0x00040005,
+ 0x00000039,0x74736564,0x00000000,0x00040047,0x00000009,0x0000000b,0x0000001c,0x00050048,
+ 0x00000010,0x00000000,0x00000023,0x00000000,0x00050048,0x00000010,0x00000001,0x00000023,
+ 0x00000004,0x00050048,0x00000010,0x00000002,0x00000023,0x00000008,0x00050048,0x00000010,
+ 0x00000003,0x00000023,0x0000000c,0x00050048,0x00000010,0x00000004,0x00000023,0x00000010,
+ 0x00030047,0x00000010,0x00000002,0x00040047,0x00000032,0x00000022,0x00000000,0x00040047,
+ 0x00000032,0x00000021,0x00000001,0x00040047,0x00000039,0x00000022,0x00000000,0x00040047,
+ 0x00000039,0x00000021,0x00000000,0x00030047,0x00000039,0x00000019,0x00040047,0x0000003f,
+ 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,
+ 0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,0x00000006,0x00000003,0x00040020,
+ 0x00000008,0x00000001,0x00000007,0x0004003b,0x00000008,0x00000009,0x00000001,0x0004002b,
+ 0x00000006,0x0000000a,0x00000000,0x00040020,0x0000000b,0x00000001,0x00000006,0x00040015,
+ 0x0000000e,0x00000020,0x00000001,0x00040017,0x0000000f,0x0000000e,0x00000004,0x0007001e,
+ 0x00000010,0x00000006,0x00000006,0x00000006,0x00000006,0x0000000f,0x00040020,0x00000011,
+ 0x00000009,0x00000010,0x0004003b,0x00000011,0x00000012,0x00000009,0x0004002b,0x0000000e,
+ 0x00000013,0x00000001,0x00040020,0x00000014,0x00000009,0x00000006,0x00020014,0x00000017,
+ 0x00040020,0x0000001c,0x00000007,0x0000000e,0x0004002b,0x0000000e,0x0000001e,0x00000000,
+ 0x0004002b,0x0000000e,0x00000026,0x00000002,0x00040020,0x0000002d,0x00000007,0x0000000f,
+ 0x00090019,0x0000002f,0x0000000e,0x00000005,0x00000000,0x00000000,0x00000000,0x00000001,
+ 0x00000000,0x0003001b,0x00000030,0x0000002f,0x00040020,0x00000031,0x00000000,0x00000030,
+ 0x0004003b,0x00000031,0x00000032,0x00000000,0x00090019,0x00000037,0x0000000e,0x00000005,
+ 0x00000000,0x00000000,0x00000000,0x00000002,0x00000015,0x00040020,0x00000038,0x00000000,
+ 0x00000037,0x0004003b,0x00000038,0x00000039,0x00000000,0x0004002b,0x00000006,0x0000003d,
+ 0x00000040,0x0004002b,0x00000006,0x0000003e,0x00000001,0x0006002c,0x00000007,0x0000003f,
+ 0x0000003d,0x0000003e,0x0000003e,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,
+ 0x000200f8,0x00000005,0x0004003b,0x0000001c,0x0000001d,0x00000007,0x0004003b,0x0000001c,
+ 0x00000025,0x00000007,0x0004003b,0x0000002d,0x0000002e,0x00000007,0x00050041,0x0000000b,
+ 0x0000000c,0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000000d,0x0000000c,0x00050041,
+ 0x00000014,0x00000015,0x00000012,0x00000013,0x0004003d,0x00000006,0x00000016,0x00000015,
+ 0x000500ae,0x00000017,0x00000018,0x0000000d,0x00000016,0x000300f7,0x0000001a,0x00000000,
+ 0x000400fa,0x00000018,0x00000019,0x0000001a,0x000200f8,0x00000019,0x000100fd,0x000200f8,
+ 0x0000001a,0x00050041,0x00000014,0x0000001f,0x00000012,0x0000001e,0x0004003d,0x00000006,
+ 0x00000020,0x0000001f,0x00050041,0x0000000b,0x00000021,0x00000009,0x0000000a,0x0004003d,
+ 0x00000006,0x00000022,0x00000021,0x00050080,0x00000006,0x00000023,0x00000020,0x00000022,
+ 0x0004007c,0x0000000e,0x00000024,0x00000023,0x0003003e,0x0000001d,0x00000024,0x00050041,
+ 0x00000014,0x00000027,0x00000012,0x00000026,0x0004003d,0x00000006,0x00000028,0x00000027,
+ 0x00050041,0x0000000b,0x00000029,0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000002a,
+ 0x00000029,0x00050080,0x00000006,0x0000002b,0x00000028,0x0000002a,0x0004007c,0x0000000e,
+ 0x0000002c,0x0000002b,0x0003003e,0x00000025,0x0000002c,0x0004003d,0x00000030,0x00000033,
+ 0x00000032,0x0004003d,0x0000000e,0x00000034,0x00000025,0x00040064,0x0000002f,0x00000035,
+ 0x00000033,0x0005005f,0x0000000f,0x00000036,0x00000035,0x00000034,0x0003003e,0x0000002e,
+ 0x00000036,0x0004003d,0x00000037,0x0000003a,0x00000039,0x0004003d,0x0000000e,0x0000003b,
+ 0x0000001d,0x0004003d,0x0000000f,0x0000003c,0x0000002e,0x00040063,0x0000003a,0x0000003b,
+ 0x0000003c,0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32i)uniform writeonly iimageBuffer dest;
+
+layout(set = 0, binding = 1)uniform isamplerBuffer src;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ ivec4 clearValue;
+} params;
+
+void main()
+{
+
+ if(gl_GlobalInvocationID . x >= params . size)
+ return;
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ ivec4 srcValue = texelFetch(src, srcIndex);
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000007.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000007.inc
new file mode 100644
index 0000000..f114f4d
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000007.inc
@@ -0,0 +1,89 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000007[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000036,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002e,0x00020011,0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,
+ 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,
+ 0x00000000,0x00000014,0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,
+ 0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,
+ 0x00000008,0x74736564,0x65646e49,0x00000078,0x00060005,0x0000000b,0x68737550,0x736e6f43,
+ 0x746e6174,0x00000073,0x00060006,0x0000000b,0x00000000,0x74736564,0x7366664f,0x00007465,
+ 0x00050006,0x0000000b,0x00000001,0x657a6973,0x00000000,0x00060006,0x0000000b,0x00000002,
+ 0x4f637273,0x65736666,0x00000074,0x00050006,0x0000000b,0x00000003,0x64646170,0x00676e69,
+ 0x00060006,0x0000000b,0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,0x0000000d,
+ 0x61726170,0x0000736d,0x00080005,0x00000014,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,
+ 0x496e6f69,0x00000044,0x00050005,0x0000001b,0x49637273,0x7865646e,0x00000000,0x00050005,
+ 0x00000024,0x56637273,0x65756c61,0x00000000,0x00030005,0x00000028,0x00637273,0x00040005,
+ 0x0000002f,0x74736564,0x00000000,0x00050048,0x0000000b,0x00000000,0x00000023,0x00000000,
+ 0x00050048,0x0000000b,0x00000001,0x00000023,0x00000004,0x00050048,0x0000000b,0x00000002,
+ 0x00000023,0x00000008,0x00050048,0x0000000b,0x00000003,0x00000023,0x0000000c,0x00050048,
+ 0x0000000b,0x00000004,0x00000023,0x00000010,0x00030047,0x0000000b,0x00000002,0x00040047,
+ 0x00000014,0x0000000b,0x0000001c,0x00040047,0x00000028,0x00000022,0x00000000,0x00040047,
+ 0x00000028,0x00000021,0x00000001,0x00040047,0x0000002f,0x00000022,0x00000000,0x00040047,
+ 0x0000002f,0x00000021,0x00000000,0x00030047,0x0000002f,0x00000019,0x00040047,0x00000035,
+ 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,
+ 0x00000006,0x00000020,0x00000001,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015,
+ 0x00000009,0x00000020,0x00000000,0x00040017,0x0000000a,0x00000006,0x00000004,0x0007001e,
+ 0x0000000b,0x00000009,0x00000009,0x00000009,0x00000009,0x0000000a,0x00040020,0x0000000c,
+ 0x00000009,0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000009,0x0004002b,0x00000006,
+ 0x0000000e,0x00000000,0x00040020,0x0000000f,0x00000009,0x00000009,0x00040017,0x00000012,
+ 0x00000009,0x00000003,0x00040020,0x00000013,0x00000001,0x00000012,0x0004003b,0x00000013,
+ 0x00000014,0x00000001,0x0004002b,0x00000009,0x00000015,0x00000000,0x00040020,0x00000016,
+ 0x00000001,0x00000009,0x0004002b,0x00000006,0x0000001c,0x00000002,0x00040020,0x00000023,
+ 0x00000007,0x0000000a,0x00090019,0x00000025,0x00000006,0x00000005,0x00000000,0x00000000,
+ 0x00000000,0x00000001,0x00000000,0x0003001b,0x00000026,0x00000025,0x00040020,0x00000027,
+ 0x00000000,0x00000026,0x0004003b,0x00000027,0x00000028,0x00000000,0x00090019,0x0000002d,
+ 0x00000006,0x00000005,0x00000000,0x00000000,0x00000000,0x00000002,0x00000015,0x00040020,
+ 0x0000002e,0x00000000,0x0000002d,0x0004003b,0x0000002e,0x0000002f,0x00000000,0x0004002b,
+ 0x00000009,0x00000033,0x00000040,0x0004002b,0x00000009,0x00000034,0x00000001,0x0006002c,
+ 0x00000012,0x00000035,0x00000033,0x00000034,0x00000034,0x00050036,0x00000002,0x00000004,
+ 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x00000008,0x00000007,
+ 0x0004003b,0x00000007,0x0000001b,0x00000007,0x0004003b,0x00000023,0x00000024,0x00000007,
+ 0x00050041,0x0000000f,0x00000010,0x0000000d,0x0000000e,0x0004003d,0x00000009,0x00000011,
+ 0x00000010,0x00050041,0x00000016,0x00000017,0x00000014,0x00000015,0x0004003d,0x00000009,
+ 0x00000018,0x00000017,0x00050080,0x00000009,0x00000019,0x00000011,0x00000018,0x0004007c,
+ 0x00000006,0x0000001a,0x00000019,0x0003003e,0x00000008,0x0000001a,0x00050041,0x0000000f,
+ 0x0000001d,0x0000000d,0x0000001c,0x0004003d,0x00000009,0x0000001e,0x0000001d,0x00050041,
+ 0x00000016,0x0000001f,0x00000014,0x00000015,0x0004003d,0x00000009,0x00000020,0x0000001f,
+ 0x00050080,0x00000009,0x00000021,0x0000001e,0x00000020,0x0004007c,0x00000006,0x00000022,
+ 0x00000021,0x0003003e,0x0000001b,0x00000022,0x0004003d,0x00000026,0x00000029,0x00000028,
+ 0x0004003d,0x00000006,0x0000002a,0x0000001b,0x00040064,0x00000025,0x0000002b,0x00000029,
+ 0x0005005f,0x0000000a,0x0000002c,0x0000002b,0x0000002a,0x0003003e,0x00000024,0x0000002c,
+ 0x0004003d,0x0000002d,0x00000030,0x0000002f,0x0004003d,0x00000006,0x00000031,0x00000008,
+ 0x0004003d,0x0000000a,0x00000032,0x00000024,0x00040063,0x00000030,0x00000031,0x00000032,
+ 0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32i)uniform writeonly iimageBuffer dest;
+
+layout(set = 0, binding = 1)uniform isamplerBuffer src;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ ivec4 clearValue;
+} params;
+
+void main()
+{
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ ivec4 srcValue = texelFetch(src, srcIndex);
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000008.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000008.inc
new file mode 100644
index 0000000..1147597
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000008.inc
@@ -0,0 +1,91 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000008[] = {
+ 0x07230203,0x00010000,0x00080007,0x0000003c,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000009,
+ 0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,
+ 0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00080005,0x00000009,0x475f6c67,
+ 0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005,0x0000000f,0x68737550,
+ 0x736e6f43,0x746e6174,0x00000073,0x00060006,0x0000000f,0x00000000,0x74736564,0x7366664f,
+ 0x00007465,0x00050006,0x0000000f,0x00000001,0x657a6973,0x00000000,0x00060006,0x0000000f,
+ 0x00000002,0x4f637273,0x65736666,0x00000074,0x00050006,0x0000000f,0x00000003,0x64646170,
+ 0x00676e69,0x00060006,0x0000000f,0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,
+ 0x00000011,0x61726170,0x0000736d,0x00050005,0x0000001d,0x74736564,0x65646e49,0x00000078,
+ 0x00050005,0x00000025,0x49637273,0x7865646e,0x00000000,0x00050005,0x0000002e,0x56637273,
+ 0x65756c61,0x00000000,0x00040005,0x00000035,0x74736564,0x00000000,0x00040047,0x00000009,
+ 0x0000000b,0x0000001c,0x00050048,0x0000000f,0x00000000,0x00000023,0x00000000,0x00050048,
+ 0x0000000f,0x00000001,0x00000023,0x00000004,0x00050048,0x0000000f,0x00000002,0x00000023,
+ 0x00000008,0x00050048,0x0000000f,0x00000003,0x00000023,0x0000000c,0x00050048,0x0000000f,
+ 0x00000004,0x00000023,0x00000010,0x00030047,0x0000000f,0x00000002,0x00040047,0x00000035,
+ 0x00000022,0x00000000,0x00040047,0x00000035,0x00000021,0x00000000,0x00030047,0x00000035,
+ 0x00000019,0x00040047,0x0000003b,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,
+ 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,
+ 0x00000006,0x00000003,0x00040020,0x00000008,0x00000001,0x00000007,0x0004003b,0x00000008,
+ 0x00000009,0x00000001,0x0004002b,0x00000006,0x0000000a,0x00000000,0x00040020,0x0000000b,
+ 0x00000001,0x00000006,0x00040017,0x0000000e,0x00000006,0x00000004,0x0007001e,0x0000000f,
+ 0x00000006,0x00000006,0x00000006,0x00000006,0x0000000e,0x00040020,0x00000010,0x00000009,
+ 0x0000000f,0x0004003b,0x00000010,0x00000011,0x00000009,0x00040015,0x00000012,0x00000020,
+ 0x00000001,0x0004002b,0x00000012,0x00000013,0x00000001,0x00040020,0x00000014,0x00000009,
+ 0x00000006,0x00020014,0x00000017,0x00040020,0x0000001c,0x00000007,0x00000012,0x0004002b,
+ 0x00000012,0x0000001e,0x00000000,0x0004002b,0x00000012,0x00000026,0x00000002,0x00040020,
+ 0x0000002d,0x00000007,0x0000000e,0x0004002b,0x00000012,0x0000002f,0x00000004,0x00040020,
+ 0x00000030,0x00000009,0x0000000e,0x00090019,0x00000033,0x00000006,0x00000005,0x00000000,
+ 0x00000000,0x00000000,0x00000002,0x0000001e,0x00040020,0x00000034,0x00000000,0x00000033,
+ 0x0004003b,0x00000034,0x00000035,0x00000000,0x0004002b,0x00000006,0x00000039,0x00000040,
+ 0x0004002b,0x00000006,0x0000003a,0x00000001,0x0006002c,0x00000007,0x0000003b,0x00000039,
+ 0x0000003a,0x0000003a,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,
+ 0x00000005,0x0004003b,0x0000001c,0x0000001d,0x00000007,0x0004003b,0x0000001c,0x00000025,
+ 0x00000007,0x0004003b,0x0000002d,0x0000002e,0x00000007,0x00050041,0x0000000b,0x0000000c,
+ 0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000000d,0x0000000c,0x00050041,0x00000014,
+ 0x00000015,0x00000011,0x00000013,0x0004003d,0x00000006,0x00000016,0x00000015,0x000500ae,
+ 0x00000017,0x00000018,0x0000000d,0x00000016,0x000300f7,0x0000001a,0x00000000,0x000400fa,
+ 0x00000018,0x00000019,0x0000001a,0x000200f8,0x00000019,0x000100fd,0x000200f8,0x0000001a,
+ 0x00050041,0x00000014,0x0000001f,0x00000011,0x0000001e,0x0004003d,0x00000006,0x00000020,
+ 0x0000001f,0x00050041,0x0000000b,0x00000021,0x00000009,0x0000000a,0x0004003d,0x00000006,
+ 0x00000022,0x00000021,0x00050080,0x00000006,0x00000023,0x00000020,0x00000022,0x0004007c,
+ 0x00000012,0x00000024,0x00000023,0x0003003e,0x0000001d,0x00000024,0x00050041,0x00000014,
+ 0x00000027,0x00000011,0x00000026,0x0004003d,0x00000006,0x00000028,0x00000027,0x00050041,
+ 0x0000000b,0x00000029,0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000002a,0x00000029,
+ 0x00050080,0x00000006,0x0000002b,0x00000028,0x0000002a,0x0004007c,0x00000012,0x0000002c,
+ 0x0000002b,0x0003003e,0x00000025,0x0000002c,0x00050041,0x00000030,0x00000031,0x00000011,
+ 0x0000002f,0x0004003d,0x0000000e,0x00000032,0x00000031,0x0003003e,0x0000002e,0x00000032,
+ 0x0004003d,0x00000033,0x00000036,0x00000035,0x0004003d,0x00000012,0x00000037,0x0000001d,
+ 0x0004003d,0x0000000e,0x00000038,0x0000002e,0x00040063,0x00000036,0x00000037,0x00000038,
+ 0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32ui)uniform writeonly uimageBuffer dest;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ uvec4 clearValue;
+} params;
+
+void main()
+{
+
+ if(gl_GlobalInvocationID . x >= params . size)
+ return;
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ uvec4 srcValue = params . clearValue;
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000009.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000009.inc
new file mode 100644
index 0000000..07de488
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000009.inc
@@ -0,0 +1,83 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_00000009[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000032,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000014,
+ 0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,
+ 0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,0x00000008,0x74736564,
+ 0x65646e49,0x00000078,0x00060005,0x0000000b,0x68737550,0x736e6f43,0x746e6174,0x00000073,
+ 0x00060006,0x0000000b,0x00000000,0x74736564,0x7366664f,0x00007465,0x00050006,0x0000000b,
+ 0x00000001,0x657a6973,0x00000000,0x00060006,0x0000000b,0x00000002,0x4f637273,0x65736666,
+ 0x00000074,0x00050006,0x0000000b,0x00000003,0x64646170,0x00676e69,0x00060006,0x0000000b,
+ 0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,0x0000000d,0x61726170,0x0000736d,
+ 0x00080005,0x00000014,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,
+ 0x00050005,0x0000001b,0x49637273,0x7865646e,0x00000000,0x00050005,0x00000024,0x56637273,
+ 0x65756c61,0x00000000,0x00040005,0x0000002b,0x74736564,0x00000000,0x00050048,0x0000000b,
+ 0x00000000,0x00000023,0x00000000,0x00050048,0x0000000b,0x00000001,0x00000023,0x00000004,
+ 0x00050048,0x0000000b,0x00000002,0x00000023,0x00000008,0x00050048,0x0000000b,0x00000003,
+ 0x00000023,0x0000000c,0x00050048,0x0000000b,0x00000004,0x00000023,0x00000010,0x00030047,
+ 0x0000000b,0x00000002,0x00040047,0x00000014,0x0000000b,0x0000001c,0x00040047,0x0000002b,
+ 0x00000022,0x00000000,0x00040047,0x0000002b,0x00000021,0x00000000,0x00030047,0x0000002b,
+ 0x00000019,0x00040047,0x00000031,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,
+ 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000001,0x00040020,0x00000007,
+ 0x00000007,0x00000006,0x00040015,0x00000009,0x00000020,0x00000000,0x00040017,0x0000000a,
+ 0x00000009,0x00000004,0x0007001e,0x0000000b,0x00000009,0x00000009,0x00000009,0x00000009,
+ 0x0000000a,0x00040020,0x0000000c,0x00000009,0x0000000b,0x0004003b,0x0000000c,0x0000000d,
+ 0x00000009,0x0004002b,0x00000006,0x0000000e,0x00000000,0x00040020,0x0000000f,0x00000009,
+ 0x00000009,0x00040017,0x00000012,0x00000009,0x00000003,0x00040020,0x00000013,0x00000001,
+ 0x00000012,0x0004003b,0x00000013,0x00000014,0x00000001,0x0004002b,0x00000009,0x00000015,
+ 0x00000000,0x00040020,0x00000016,0x00000001,0x00000009,0x0004002b,0x00000006,0x0000001c,
+ 0x00000002,0x00040020,0x00000023,0x00000007,0x0000000a,0x0004002b,0x00000006,0x00000025,
+ 0x00000004,0x00040020,0x00000026,0x00000009,0x0000000a,0x00090019,0x00000029,0x00000009,
+ 0x00000005,0x00000000,0x00000000,0x00000000,0x00000002,0x0000001e,0x00040020,0x0000002a,
+ 0x00000000,0x00000029,0x0004003b,0x0000002a,0x0000002b,0x00000000,0x0004002b,0x00000009,
+ 0x0000002f,0x00000040,0x0004002b,0x00000009,0x00000030,0x00000001,0x0006002c,0x00000012,
+ 0x00000031,0x0000002f,0x00000030,0x00000030,0x00050036,0x00000002,0x00000004,0x00000000,
+ 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x00000008,0x00000007,0x0004003b,
+ 0x00000007,0x0000001b,0x00000007,0x0004003b,0x00000023,0x00000024,0x00000007,0x00050041,
+ 0x0000000f,0x00000010,0x0000000d,0x0000000e,0x0004003d,0x00000009,0x00000011,0x00000010,
+ 0x00050041,0x00000016,0x00000017,0x00000014,0x00000015,0x0004003d,0x00000009,0x00000018,
+ 0x00000017,0x00050080,0x00000009,0x00000019,0x00000011,0x00000018,0x0004007c,0x00000006,
+ 0x0000001a,0x00000019,0x0003003e,0x00000008,0x0000001a,0x00050041,0x0000000f,0x0000001d,
+ 0x0000000d,0x0000001c,0x0004003d,0x00000009,0x0000001e,0x0000001d,0x00050041,0x00000016,
+ 0x0000001f,0x00000014,0x00000015,0x0004003d,0x00000009,0x00000020,0x0000001f,0x00050080,
+ 0x00000009,0x00000021,0x0000001e,0x00000020,0x0004007c,0x00000006,0x00000022,0x00000021,
+ 0x0003003e,0x0000001b,0x00000022,0x00050041,0x00000026,0x00000027,0x0000000d,0x00000025,
+ 0x0004003d,0x0000000a,0x00000028,0x00000027,0x0003003e,0x00000024,0x00000028,0x0004003d,
+ 0x00000029,0x0000002c,0x0000002b,0x0004003d,0x00000006,0x0000002d,0x00000008,0x0004003d,
+ 0x0000000a,0x0000002e,0x00000024,0x00040063,0x0000002c,0x0000002d,0x0000002e,0x000100fd,
+ 0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32ui)uniform writeonly uimageBuffer dest;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ uvec4 clearValue;
+} params;
+
+void main()
+{
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ uvec4 srcValue = params . clearValue;
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000A.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000A.inc
new file mode 100644
index 0000000..1d0ade7
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000A.inc
@@ -0,0 +1,97 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_0000000A[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000040,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002e,0x00020011,0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,
+ 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,
+ 0x00000000,0x00000009,0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,
+ 0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00080005,
+ 0x00000009,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005,
+ 0x0000000f,0x68737550,0x736e6f43,0x746e6174,0x00000073,0x00060006,0x0000000f,0x00000000,
+ 0x74736564,0x7366664f,0x00007465,0x00050006,0x0000000f,0x00000001,0x657a6973,0x00000000,
+ 0x00060006,0x0000000f,0x00000002,0x4f637273,0x65736666,0x00000074,0x00050006,0x0000000f,
+ 0x00000003,0x64646170,0x00676e69,0x00060006,0x0000000f,0x00000004,0x61656c63,0x6c615672,
+ 0x00006575,0x00040005,0x00000011,0x61726170,0x0000736d,0x00050005,0x0000001d,0x74736564,
+ 0x65646e49,0x00000078,0x00050005,0x00000025,0x49637273,0x7865646e,0x00000000,0x00050005,
+ 0x0000002e,0x56637273,0x65756c61,0x00000000,0x00030005,0x00000032,0x00637273,0x00040005,
+ 0x00000039,0x74736564,0x00000000,0x00040047,0x00000009,0x0000000b,0x0000001c,0x00050048,
+ 0x0000000f,0x00000000,0x00000023,0x00000000,0x00050048,0x0000000f,0x00000001,0x00000023,
+ 0x00000004,0x00050048,0x0000000f,0x00000002,0x00000023,0x00000008,0x00050048,0x0000000f,
+ 0x00000003,0x00000023,0x0000000c,0x00050048,0x0000000f,0x00000004,0x00000023,0x00000010,
+ 0x00030047,0x0000000f,0x00000002,0x00040047,0x00000032,0x00000022,0x00000000,0x00040047,
+ 0x00000032,0x00000021,0x00000001,0x00040047,0x00000039,0x00000022,0x00000000,0x00040047,
+ 0x00000039,0x00000021,0x00000000,0x00030047,0x00000039,0x00000019,0x00040047,0x0000003f,
+ 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,
+ 0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,0x00000006,0x00000003,0x00040020,
+ 0x00000008,0x00000001,0x00000007,0x0004003b,0x00000008,0x00000009,0x00000001,0x0004002b,
+ 0x00000006,0x0000000a,0x00000000,0x00040020,0x0000000b,0x00000001,0x00000006,0x00040017,
+ 0x0000000e,0x00000006,0x00000004,0x0007001e,0x0000000f,0x00000006,0x00000006,0x00000006,
+ 0x00000006,0x0000000e,0x00040020,0x00000010,0x00000009,0x0000000f,0x0004003b,0x00000010,
+ 0x00000011,0x00000009,0x00040015,0x00000012,0x00000020,0x00000001,0x0004002b,0x00000012,
+ 0x00000013,0x00000001,0x00040020,0x00000014,0x00000009,0x00000006,0x00020014,0x00000017,
+ 0x00040020,0x0000001c,0x00000007,0x00000012,0x0004002b,0x00000012,0x0000001e,0x00000000,
+ 0x0004002b,0x00000012,0x00000026,0x00000002,0x00040020,0x0000002d,0x00000007,0x0000000e,
+ 0x00090019,0x0000002f,0x00000006,0x00000005,0x00000000,0x00000000,0x00000000,0x00000001,
+ 0x00000000,0x0003001b,0x00000030,0x0000002f,0x00040020,0x00000031,0x00000000,0x00000030,
+ 0x0004003b,0x00000031,0x00000032,0x00000000,0x00090019,0x00000037,0x00000006,0x00000005,
+ 0x00000000,0x00000000,0x00000000,0x00000002,0x0000001e,0x00040020,0x00000038,0x00000000,
+ 0x00000037,0x0004003b,0x00000038,0x00000039,0x00000000,0x0004002b,0x00000006,0x0000003d,
+ 0x00000040,0x0004002b,0x00000006,0x0000003e,0x00000001,0x0006002c,0x00000007,0x0000003f,
+ 0x0000003d,0x0000003e,0x0000003e,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,
+ 0x000200f8,0x00000005,0x0004003b,0x0000001c,0x0000001d,0x00000007,0x0004003b,0x0000001c,
+ 0x00000025,0x00000007,0x0004003b,0x0000002d,0x0000002e,0x00000007,0x00050041,0x0000000b,
+ 0x0000000c,0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000000d,0x0000000c,0x00050041,
+ 0x00000014,0x00000015,0x00000011,0x00000013,0x0004003d,0x00000006,0x00000016,0x00000015,
+ 0x000500ae,0x00000017,0x00000018,0x0000000d,0x00000016,0x000300f7,0x0000001a,0x00000000,
+ 0x000400fa,0x00000018,0x00000019,0x0000001a,0x000200f8,0x00000019,0x000100fd,0x000200f8,
+ 0x0000001a,0x00050041,0x00000014,0x0000001f,0x00000011,0x0000001e,0x0004003d,0x00000006,
+ 0x00000020,0x0000001f,0x00050041,0x0000000b,0x00000021,0x00000009,0x0000000a,0x0004003d,
+ 0x00000006,0x00000022,0x00000021,0x00050080,0x00000006,0x00000023,0x00000020,0x00000022,
+ 0x0004007c,0x00000012,0x00000024,0x00000023,0x0003003e,0x0000001d,0x00000024,0x00050041,
+ 0x00000014,0x00000027,0x00000011,0x00000026,0x0004003d,0x00000006,0x00000028,0x00000027,
+ 0x00050041,0x0000000b,0x00000029,0x00000009,0x0000000a,0x0004003d,0x00000006,0x0000002a,
+ 0x00000029,0x00050080,0x00000006,0x0000002b,0x00000028,0x0000002a,0x0004007c,0x00000012,
+ 0x0000002c,0x0000002b,0x0003003e,0x00000025,0x0000002c,0x0004003d,0x00000030,0x00000033,
+ 0x00000032,0x0004003d,0x00000012,0x00000034,0x00000025,0x00040064,0x0000002f,0x00000035,
+ 0x00000033,0x0005005f,0x0000000e,0x00000036,0x00000035,0x00000034,0x0003003e,0x0000002e,
+ 0x00000036,0x0004003d,0x00000037,0x0000003a,0x00000039,0x0004003d,0x00000012,0x0000003b,
+ 0x0000001d,0x0004003d,0x0000000e,0x0000003c,0x0000002e,0x00040063,0x0000003a,0x0000003b,
+ 0x0000003c,0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32ui)uniform writeonly uimageBuffer dest;
+
+layout(set = 0, binding = 1)uniform usamplerBuffer src;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ uvec4 clearValue;
+} params;
+
+void main()
+{
+
+ if(gl_GlobalInvocationID . x >= params . size)
+ return;
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ uvec4 srcValue = texelFetch(src, srcIndex);
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000B.inc b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000B.inc
new file mode 100644
index 0000000..e261d1b
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000B.inc
@@ -0,0 +1,89 @@
+ // 7.10.2904
+ #pragma once
+const uint32_t kBufferUtils_comp_0000000B[] = {
+ 0x07230203,0x00010000,0x00080007,0x00000036,0x00000000,0x00020011,0x00000001,0x00020011,
+ 0x0000002e,0x00020011,0x0000002f,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,
+ 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,
+ 0x00000000,0x00000014,0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,
+ 0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,
+ 0x00000008,0x74736564,0x65646e49,0x00000078,0x00060005,0x0000000b,0x68737550,0x736e6f43,
+ 0x746e6174,0x00000073,0x00060006,0x0000000b,0x00000000,0x74736564,0x7366664f,0x00007465,
+ 0x00050006,0x0000000b,0x00000001,0x657a6973,0x00000000,0x00060006,0x0000000b,0x00000002,
+ 0x4f637273,0x65736666,0x00000074,0x00050006,0x0000000b,0x00000003,0x64646170,0x00676e69,
+ 0x00060006,0x0000000b,0x00000004,0x61656c63,0x6c615672,0x00006575,0x00040005,0x0000000d,
+ 0x61726170,0x0000736d,0x00080005,0x00000014,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,
+ 0x496e6f69,0x00000044,0x00050005,0x0000001b,0x49637273,0x7865646e,0x00000000,0x00050005,
+ 0x00000024,0x56637273,0x65756c61,0x00000000,0x00030005,0x00000028,0x00637273,0x00040005,
+ 0x0000002f,0x74736564,0x00000000,0x00050048,0x0000000b,0x00000000,0x00000023,0x00000000,
+ 0x00050048,0x0000000b,0x00000001,0x00000023,0x00000004,0x00050048,0x0000000b,0x00000002,
+ 0x00000023,0x00000008,0x00050048,0x0000000b,0x00000003,0x00000023,0x0000000c,0x00050048,
+ 0x0000000b,0x00000004,0x00000023,0x00000010,0x00030047,0x0000000b,0x00000002,0x00040047,
+ 0x00000014,0x0000000b,0x0000001c,0x00040047,0x00000028,0x00000022,0x00000000,0x00040047,
+ 0x00000028,0x00000021,0x00000001,0x00040047,0x0000002f,0x00000022,0x00000000,0x00040047,
+ 0x0000002f,0x00000021,0x00000000,0x00030047,0x0000002f,0x00000019,0x00040047,0x00000035,
+ 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,
+ 0x00000006,0x00000020,0x00000001,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015,
+ 0x00000009,0x00000020,0x00000000,0x00040017,0x0000000a,0x00000009,0x00000004,0x0007001e,
+ 0x0000000b,0x00000009,0x00000009,0x00000009,0x00000009,0x0000000a,0x00040020,0x0000000c,
+ 0x00000009,0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000009,0x0004002b,0x00000006,
+ 0x0000000e,0x00000000,0x00040020,0x0000000f,0x00000009,0x00000009,0x00040017,0x00000012,
+ 0x00000009,0x00000003,0x00040020,0x00000013,0x00000001,0x00000012,0x0004003b,0x00000013,
+ 0x00000014,0x00000001,0x0004002b,0x00000009,0x00000015,0x00000000,0x00040020,0x00000016,
+ 0x00000001,0x00000009,0x0004002b,0x00000006,0x0000001c,0x00000002,0x00040020,0x00000023,
+ 0x00000007,0x0000000a,0x00090019,0x00000025,0x00000009,0x00000005,0x00000000,0x00000000,
+ 0x00000000,0x00000001,0x00000000,0x0003001b,0x00000026,0x00000025,0x00040020,0x00000027,
+ 0x00000000,0x00000026,0x0004003b,0x00000027,0x00000028,0x00000000,0x00090019,0x0000002d,
+ 0x00000009,0x00000005,0x00000000,0x00000000,0x00000000,0x00000002,0x0000001e,0x00040020,
+ 0x0000002e,0x00000000,0x0000002d,0x0004003b,0x0000002e,0x0000002f,0x00000000,0x0004002b,
+ 0x00000009,0x00000033,0x00000040,0x0004002b,0x00000009,0x00000034,0x00000001,0x0006002c,
+ 0x00000012,0x00000035,0x00000033,0x00000034,0x00000034,0x00050036,0x00000002,0x00000004,
+ 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x00000008,0x00000007,
+ 0x0004003b,0x00000007,0x0000001b,0x00000007,0x0004003b,0x00000023,0x00000024,0x00000007,
+ 0x00050041,0x0000000f,0x00000010,0x0000000d,0x0000000e,0x0004003d,0x00000009,0x00000011,
+ 0x00000010,0x00050041,0x00000016,0x00000017,0x00000014,0x00000015,0x0004003d,0x00000009,
+ 0x00000018,0x00000017,0x00050080,0x00000009,0x00000019,0x00000011,0x00000018,0x0004007c,
+ 0x00000006,0x0000001a,0x00000019,0x0003003e,0x00000008,0x0000001a,0x00050041,0x0000000f,
+ 0x0000001d,0x0000000d,0x0000001c,0x0004003d,0x00000009,0x0000001e,0x0000001d,0x00050041,
+ 0x00000016,0x0000001f,0x00000014,0x00000015,0x0004003d,0x00000009,0x00000020,0x0000001f,
+ 0x00050080,0x00000009,0x00000021,0x0000001e,0x00000020,0x0004007c,0x00000006,0x00000022,
+ 0x00000021,0x0003003e,0x0000001b,0x00000022,0x0004003d,0x00000026,0x00000029,0x00000028,
+ 0x0004003d,0x00000006,0x0000002a,0x0000001b,0x00040064,0x00000025,0x0000002b,0x00000029,
+ 0x0005005f,0x0000000a,0x0000002c,0x0000002b,0x0000002a,0x0003003e,0x00000024,0x0000002c,
+ 0x0004003d,0x0000002d,0x00000030,0x0000002f,0x0004003d,0x00000006,0x00000031,0x00000008,
+ 0x0004003d,0x0000000a,0x00000032,0x00000024,0x00040063,0x00000030,0x00000031,0x00000032,
+ 0x000100fd,0x00010038
+};
+
+#if 0 // Generated from:
+#version 450 core
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
+
+layout(set = 0, binding = 0, rgba32ui)uniform writeonly uimageBuffer dest;
+
+layout(set = 0, binding = 1)uniform usamplerBuffer src;
+
+layout(push_constant)uniform PushConstants
+{
+
+ uint destOffset;
+
+ uint size;
+
+ uint srcOffset;
+ uint padding;
+
+ uvec4 clearValue;
+} params;
+
+void main()
+{
+
+ int destIndex = int(params . destOffset . x + gl_GlobalInvocationID . x);
+ int srcIndex = int(params . srcOffset . x + gl_GlobalInvocationID . x);
+
+ uvec4 srcValue = texelFetch(src, srcIndex);
+
+ imageStore(dest, destIndex, srcValue);
+}
+#endif // Preprocessed code
diff --git a/src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp b/src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp
new file mode 100644
index 0000000..328b1df
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp
@@ -0,0 +1,82 @@
+//
+// Copyright 2018 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.
+//
+// BufferUtils.comp: various utilities such as clear and copy.
+//
+// The following defines tweak the functionality, and a different shader is built based on these.
+//
+// - Flags:
+// * IsAligned: if true, assumes the workgroup size divides the buffer size, so there is no
+// need for bound checking
+// - Format:
+// * IsFloat
+// * IsInt
+// * IsUint
+// - Function:
+// * IsClear: the buffer will be cleared
+// * IsCopy: a buffer will be copied to another
+//
+
+#version 450 core
+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+#if IsFloat
+#define ADD_TYPE_PREFIX(type) type
+#define BUFFER_FORMAT rgba32f
+#define GVEC4 vec4
+#elif IsInt
+#define ADD_TYPE_PREFIX(type) i ## type
+#define BUFFER_FORMAT rgba32i
+#define GVEC4 ivec4
+#elif IsUint
+#define ADD_TYPE_PREFIX(type) u ## type
+#define BUFFER_FORMAT rgba32ui
+#define GVEC4 uvec4
+#else
+#error "Not all formats are accounted for"
+#endif
+
+#define BUFFER_WRITE_TYPE ADD_TYPE_PREFIX(imageBuffer)
+#define BUFFER_READ_TYPE ADD_TYPE_PREFIX(samplerBuffer)
+
+layout (set = 0, binding = 0, BUFFER_FORMAT) uniform writeonly BUFFER_WRITE_TYPE dest;
+#if IsCopy
+layout (set = 0, binding = 1) uniform BUFFER_READ_TYPE src;
+#endif // IsCopy
+
+layout (push_constant) uniform PushConstants
+{
+ // destOffset: used in all cases
+ uint destOffset;
+ // size: used if !IsAligned
+ uint size;
+ // srcOffset: used if IsCopy
+ uint srcOffset;
+ uint padding;
+ // clearValue: used if IsClear
+ GVEC4 clearValue;
+} params;
+
+void main()
+{
+#if !IsAligned
+ if (gl_GlobalInvocationID.x >= params.size)
+ return;
+#endif // IsAligned
+
+ int destIndex = int(params.destOffset.x + gl_GlobalInvocationID.x);
+ int srcIndex = int(params.srcOffset.x + gl_GlobalInvocationID.x);
+
+#if IsClear
+ GVEC4 srcValue = params.clearValue;
+#elif IsCopy
+ GVEC4 srcValue = texelFetch(src, srcIndex);
+#else
+#error "Not all functions are accounted for"
+#endif // Function
+
+ imageStore(dest, destIndex, srcValue);
+}
diff --git a/src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp.json b/src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp.json
new file mode 100644
index 0000000..0bf883d
--- /dev/null
+++ b/src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp.json
@@ -0,0 +1,22 @@
+{
+ "Description": [
+ "Copyright 2018 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.",
+ "",
+ "BufferUtils.comp.json: Build parameters for BufferUtils.comp."
+ ],
+ "Flags": [
+ "IsAligned"
+ ],
+ "Format": [
+ "IsFloat",
+ "IsInt",
+ "IsUint"
+ ],
+ "Function": [
+ "IsClear",
+ "IsCopy"
+ ]
+}
+
diff --git a/src/libANGLE/renderer/vulkan/vk_format_utils.cpp b/src/libANGLE/renderer/vulkan/vk_format_utils.cpp
index edccfd3..ef2bcd2 100644
--- a/src/libANGLE/renderer/vulkan/vk_format_utils.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_format_utils.cpp
@@ -120,7 +120,10 @@
textureInitializerFunction(nullptr),
textureLoadFunctions(),
vertexLoadRequiresConversion(false),
- vkBufferFormatIsPacked(false)
+ vkBufferFormatIsPacked(false),
+ vkSupportsStorageBuffer(false),
+ vkFormatIsInt(false),
+ vkFormatIsUnsigned(false)
{}
void Format::initTextureFallback(RendererVk *renderer,
@@ -196,6 +199,9 @@
continue;
}
+ format.vkSupportsStorageBuffer = renderer->hasBufferFormatFeatureBits(
+ format.vkBufferFormat, VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT);
+
gl::TextureCaps textureCaps;
FillTextureFormatCaps(renderer, format.vkTextureFormat, &textureCaps);
outTextureCapsMap->set(formatID, textureCaps);
diff --git a/src/libANGLE/renderer/vulkan/vk_format_utils.h b/src/libANGLE/renderer/vulkan/vk_format_utils.h
index f96d611..348a24c 100644
--- a/src/libANGLE/renderer/vulkan/vk_format_utils.h
+++ b/src/libANGLE/renderer/vulkan/vk_format_utils.h
@@ -77,6 +77,9 @@
bool vertexLoadRequiresConversion;
bool vkBufferFormatIsPacked;
+ bool vkSupportsStorageBuffer;
+ bool vkFormatIsInt;
+ bool vkFormatIsUnsigned;
};
bool operator==(const Format &lhs, const Format &rhs);
diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.cpp b/src/libANGLE/renderer/vulkan/vk_helpers.cpp
index 49bff15..08c29b5 100644
--- a/src/libANGLE/renderer/vulkan/vk_helpers.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_helpers.cpp
@@ -21,7 +21,8 @@
namespace
{
constexpr VkBufferUsageFlags kLineLoopDynamicBufferUsage =
- (VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+ VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT |
+ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;
constexpr int kLineLoopDynamicBufferMinSize = 1024 * 1024;
// This is an arbitrary max. We can change this later if necessary.
@@ -890,6 +891,7 @@
mMemoryPropertyFlags{},
mSize(0),
mMappedMemory(nullptr),
+ mViewFormat(nullptr),
mCurrentWriteAccess(0),
mCurrentReadAccess(0)
{}
@@ -909,7 +911,8 @@
void BufferHelper::destroy(VkDevice device)
{
unmap(device);
- mSize = 0;
+ mSize = 0;
+ mViewFormat = nullptr;
mBuffer.destroy(device);
mBufferView.destroy(device);
@@ -919,7 +922,8 @@
void BufferHelper::release(RendererVk *renderer)
{
unmap(renderer->getDevice());
- mSize = 0;
+ mSize = 0;
+ mViewFormat = nullptr;
renderer->releaseObject(getStoredQueueSerial(), &mBuffer);
renderer->releaseObject(getStoredQueueSerial(), &mBufferView);
@@ -980,9 +984,14 @@
angle::Result BufferHelper::initBufferView(Context *context, const Format &format)
{
- ASSERT(!mBufferView.valid());
ASSERT(format.valid());
+ if (mBufferView.valid())
+ {
+ ASSERT(mViewFormat->vkBufferFormat == format.vkBufferFormat);
+ return angle::Result::Continue();
+ }
+
VkBufferViewCreateInfo viewCreateInfo = {};
viewCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
viewCreateInfo.buffer = mBuffer.getHandle();
@@ -991,6 +1000,7 @@
viewCreateInfo.range = mSize;
ANGLE_VK_TRY(context, mBufferView.init(context->getDevice(), viewCreateInfo));
+ mViewFormat = &format;
return angle::Result::Continue();
}
diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.h b/src/libANGLE/renderer/vulkan/vk_helpers.h
index 418cd6a..ef87a2f 100644
--- a/src/libANGLE/renderer/vulkan/vk_helpers.h
+++ b/src/libANGLE/renderer/vulkan/vk_helpers.h
@@ -400,17 +400,19 @@
const Buffer &buffer,
const VkBufferCopy ©Region);
- angle::Result getBufferView(Context *context, const Format &format, BufferView **bufferViewOut)
- {
- // Note: currently only one view is allowed. If needs be, multiple views can be created
- // based on format.
- if (!mBufferView.valid())
- {
- ANGLE_TRY(initBufferView(context, format));
- }
+ // Note: currently only one view is allowed. If needs be, multiple views can be created
+ // based on format.
+ angle::Result initBufferView(Context *context, const Format &format);
- *bufferViewOut = &mBufferView;
- return angle::Result::Continue();
+ const BufferView &getBufferView() const
+ {
+ ASSERT(mBufferView.valid());
+ return mBufferView;
+ }
+ const Format &getViewFormat() const
+ {
+ ASSERT(mViewFormat);
+ return *mViewFormat;
}
angle::Result map(Context *context, uint8_t **ptrOut)
@@ -432,7 +434,6 @@
private:
angle::Result mapImpl(Context *context);
- angle::Result initBufferView(Context *context, const Format &format);
// Vulkan objects.
Buffer mBuffer;
@@ -443,6 +444,7 @@
VkMemoryPropertyFlags mMemoryPropertyFlags;
VkDeviceSize mSize;
uint8_t *mMappedMemory;
+ const Format *mViewFormat;
// For memory barriers.
VkFlags mCurrentWriteAccess;
diff --git a/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp b/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp
index 87ad3ac..caa3c28 100644
--- a/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp
@@ -16,6 +16,18 @@
{
namespace
{
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000000.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000001.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000002.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000003.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000004.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000005.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000006.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000007.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000008.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000009.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000A.inc"
+#include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000B.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/PushConstantColor.frag.00000000.inc"
@@ -26,6 +38,20 @@
size_t codeSize;
};
+constexpr ShaderBlob kBufferUtils_comp_shaders[] = {
+ {kBufferUtils_comp_00000000, sizeof(kBufferUtils_comp_00000000)},
+ {kBufferUtils_comp_00000001, sizeof(kBufferUtils_comp_00000001)},
+ {kBufferUtils_comp_00000002, sizeof(kBufferUtils_comp_00000002)},
+ {kBufferUtils_comp_00000003, sizeof(kBufferUtils_comp_00000003)},
+ {kBufferUtils_comp_00000004, sizeof(kBufferUtils_comp_00000004)},
+ {kBufferUtils_comp_00000005, sizeof(kBufferUtils_comp_00000005)},
+ {kBufferUtils_comp_00000006, sizeof(kBufferUtils_comp_00000006)},
+ {kBufferUtils_comp_00000007, sizeof(kBufferUtils_comp_00000007)},
+ {kBufferUtils_comp_00000008, sizeof(kBufferUtils_comp_00000008)},
+ {kBufferUtils_comp_00000009, sizeof(kBufferUtils_comp_00000009)},
+ {kBufferUtils_comp_0000000A, sizeof(kBufferUtils_comp_0000000A)},
+ {kBufferUtils_comp_0000000B, sizeof(kBufferUtils_comp_0000000B)},
+};
constexpr ShaderBlob kFullScreenQuad_vert_shaders[] = {
{kFullScreenQuad_vert_00000000, sizeof(kFullScreenQuad_vert_00000000)},
};
@@ -63,6 +89,10 @@
void ShaderLibrary::destroy(VkDevice device)
{
+ for (RefCounted<ShaderAndSerial> &shader : mBufferUtils_comp_shaders)
+ {
+ shader.get().destroy(device);
+ }
for (RefCounted<ShaderAndSerial> &shader : mFullScreenQuad_vert_shaders)
{
shader.get().destroy(device);
@@ -73,6 +103,14 @@
}
}
+angle::Result ShaderLibrary::getBufferUtils_comp(Context *context,
+ uint32_t shaderFlags,
+ RefCounted<ShaderAndSerial> **shaderOut)
+{
+ return GetShader(context, mBufferUtils_comp_shaders, kBufferUtils_comp_shaders,
+ ArraySize(kBufferUtils_comp_shaders), shaderFlags, shaderOut);
+}
+
angle::Result ShaderLibrary::getFullScreenQuad_vert(Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut)
diff --git a/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.gni b/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.gni
index 3b70792..e09d9f2 100644
--- a/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.gni
+++ b/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.gni
@@ -9,6 +9,18 @@
# List of generated shaders for inclusion in ANGLE's build process.
angle_vulkan_internal_shaders = [
+ "shaders/gen/BufferUtils.comp.00000000.inc",
+ "shaders/gen/BufferUtils.comp.00000001.inc",
+ "shaders/gen/BufferUtils.comp.00000002.inc",
+ "shaders/gen/BufferUtils.comp.00000003.inc",
+ "shaders/gen/BufferUtils.comp.00000004.inc",
+ "shaders/gen/BufferUtils.comp.00000005.inc",
+ "shaders/gen/BufferUtils.comp.00000006.inc",
+ "shaders/gen/BufferUtils.comp.00000007.inc",
+ "shaders/gen/BufferUtils.comp.00000008.inc",
+ "shaders/gen/BufferUtils.comp.00000009.inc",
+ "shaders/gen/BufferUtils.comp.0000000A.inc",
+ "shaders/gen/BufferUtils.comp.0000000B.inc",
"shaders/gen/FullScreenQuad.vert.00000000.inc",
"shaders/gen/PushConstantColor.frag.00000000.inc",
]
diff --git a/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h b/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h
index 620a05f..fb4aab7 100644
--- a/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h
+++ b/src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h
@@ -19,6 +19,28 @@
{
namespace InternalShader
{
+namespace BufferUtils_comp
+{
+enum flags
+{
+ kIsAligned = 0x00000001,
+ kFlagsMask = 0x00000001,
+};
+enum Function
+{
+ kIsClear = 0x00000000,
+ kIsCopy = 0x00000002,
+ kFunctionMask = 0x00000002,
+};
+enum Format
+{
+ kIsFloat = 0x00000000,
+ kIsInt = 0x00000004,
+ kIsUint = 0x00000008,
+ kFormatMask = 0x0000000C,
+};
+} // namespace BufferUtils_comp
+
namespace FullScreenQuad_vert
{} // namespace FullScreenQuad_vert
@@ -35,6 +57,9 @@
void destroy(VkDevice device);
+ angle::Result getBufferUtils_comp(Context *context,
+ uint32_t shaderFlags,
+ RefCounted<ShaderAndSerial> **shaderOut);
angle::Result getFullScreenQuad_vert(Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut);
@@ -43,6 +68,10 @@
RefCounted<ShaderAndSerial> **shaderOut);
private:
+ RefCounted<ShaderAndSerial>
+ mBufferUtils_comp_shaders[InternalShader::BufferUtils_comp::kFlagsMask |
+ InternalShader::BufferUtils_comp::kFunctionMask |
+ InternalShader::BufferUtils_comp::kFormatMask];
RefCounted<ShaderAndSerial> mFullScreenQuad_vert_shaders[1];
RefCounted<ShaderAndSerial> mPushConstantColor_frag_shaders[1];
};
diff --git a/src/libANGLE/renderer/vulkan/vk_utils.cpp b/src/libANGLE/renderer/vulkan/vk_utils.cpp
index e95a89a..f2c5945 100644
--- a/src/libANGLE/renderer/vulkan/vk_utils.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_utils.cpp
@@ -1250,6 +1250,9 @@
case HandleType::Buffer:
vkDestroyBuffer(device, reinterpret_cast<VkBuffer>(mHandle), nullptr);
break;
+ case HandleType::BufferView:
+ vkDestroyBufferView(device, reinterpret_cast<VkBufferView>(mHandle), nullptr);
+ break;
case HandleType::Image:
vkDestroyImage(device, reinterpret_cast<VkImage>(mHandle), nullptr);
break;
diff --git a/src/libANGLE/renderer/vulkan/vk_utils.h b/src/libANGLE/renderer/vulkan/vk_utils.h
index 30b1532..3496735 100644
--- a/src/libANGLE/renderer/vulkan/vk_utils.h
+++ b/src/libANGLE/renderer/vulkan/vk_utils.h
@@ -400,6 +400,12 @@
firstInstance);
}
+ void dispatch(uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
+ {
+ ASSERT(valid());
+ vkCmdDispatch(mHandle, groupCountX, groupCountY, groupCountZ);
+ }
+
void bindPipeline(VkPipelineBindPoint pipelineBindPoint, const Pipeline &pipeline);
void bindVertexBuffers(uint32_t firstBinding,
uint32_t bindingCount,