Hash :
43997017
Author :
Date :
2019-03-30T23:24:01
Vulkan: fix non-float clear with draw Instead of using one draw call that clears all attachments, multiple draw calls are issued that clear a single attachment each. This allows us to have a manageable number of variations for the ImageClear.frag shader, now that non-float format support is introduced. Bug: angleproject:3187 Change-Id: Ic0c1067a396250bd80f31d00cad5a272acff8be8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1545523 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_vk_internal_shaders.py using data from shaders/src/*
//
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// vk_internal_shaders_autogen.h:
// Pre-generated shader library for the ANGLE Vulkan back-end.
#ifndef LIBANGLE_RENDERER_VULKAN_VK_INTERNAL_SHADERS_AUTOGEN_H_
#define LIBANGLE_RENDERER_VULKAN_VK_INTERNAL_SHADERS_AUTOGEN_H_
#include "libANGLE/renderer/vulkan/vk_utils.h"
namespace rx
{
namespace vk
{
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 ConvertVertex_comp
{
enum flags
{
kIsAligned = 0x00000001,
kFlagsMask = 0x00000001,
};
enum Conversion
{
kIntToInt = 0x00000000,
kUintToUint = 0x00000002,
kIntToFloat = 0x00000004,
kUintToFloat = 0x00000006,
kSnormToFloat = 0x00000008,
kUnormToFloat = 0x0000000A,
kFixedToFloat = 0x0000000C,
kFloatToFloat = 0x0000000E,
kConversionMask = 0x0000000E,
};
} // namespace ConvertVertex_comp
namespace FullScreenQuad_vert
{} // namespace FullScreenQuad_vert
namespace ImageClear_frag
{
enum AttachmentIndex
{
kAttachment0 = 0x00000000,
kAttachment1 = 0x00000001,
kAttachment2 = 0x00000002,
kAttachment3 = 0x00000003,
kAttachment4 = 0x00000004,
kAttachment5 = 0x00000005,
kAttachment6 = 0x00000006,
kAttachment7 = 0x00000007,
kAttachmentIndexMask = 0x00000007,
};
enum Format
{
kIsFloat = 0x00000000,
kIsInt = 0x00000008,
kIsUint = 0x00000010,
kFormatMask = 0x00000018,
};
} // namespace ImageClear_frag
namespace ImageCopy_frag
{
enum flags
{
kSrcIsArray = 0x00000001,
kFlagsMask = 0x00000001,
};
enum SrcFormat
{
kSrcIsFloat = 0x00000000,
kSrcIsInt = 0x00000002,
kSrcIsUint = 0x00000004,
kSrcFormatMask = 0x00000006,
};
enum DestFormat
{
kDestIsFloat = 0x00000000,
kDestIsInt = 0x00000008,
kDestIsUint = 0x00000010,
kDestFormatMask = 0x00000018,
};
} // namespace ImageCopy_frag
} // namespace InternalShader
class ShaderLibrary final : angle::NonCopyable
{
public:
ShaderLibrary();
~ShaderLibrary();
void destroy(VkDevice device);
angle::Result getBufferUtils_comp(Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut);
angle::Result getConvertVertex_comp(Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut);
angle::Result getFullScreenQuad_vert(Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut);
angle::Result getImageClear_frag(Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut);
angle::Result getImageCopy_frag(Context *context,
uint32_t shaderFlags,
RefCounted<ShaderAndSerial> **shaderOut);
private:
RefCounted<ShaderAndSerial>
mBufferUtils_comp_shaders[InternalShader::BufferUtils_comp::kFlagsMask |
InternalShader::BufferUtils_comp::kFunctionMask |
InternalShader::BufferUtils_comp::kFormatMask];
RefCounted<ShaderAndSerial>
mConvertVertex_comp_shaders[InternalShader::ConvertVertex_comp::kFlagsMask |
InternalShader::ConvertVertex_comp::kConversionMask];
RefCounted<ShaderAndSerial> mFullScreenQuad_vert_shaders[1];
RefCounted<ShaderAndSerial>
mImageClear_frag_shaders[InternalShader::ImageClear_frag::kAttachmentIndexMask |
InternalShader::ImageClear_frag::kFormatMask];
RefCounted<ShaderAndSerial>
mImageCopy_frag_shaders[InternalShader::ImageCopy_frag::kFlagsMask |
InternalShader::ImageCopy_frag::kSrcFormatMask |
InternalShader::ImageCopy_frag::kDestFormatMask];
};
} // namespace vk
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_VK_INTERNAL_SHADERS_AUTOGEN_H_