1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2018 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker // UtilsVk.h: 7*8975f5c5SAndroid Build Coastguard Worker // Defines the UtilsVk class, a helper for various internal draw/dispatch utilities such as 8*8975f5c5SAndroid Build Coastguard Worker // buffer clear and copy, image clear and copy, texture mip map generation, etc. 9*8975f5c5SAndroid Build Coastguard Worker // 10*8975f5c5SAndroid Build Coastguard Worker // - Convert index buffer: 11*8975f5c5SAndroid Build Coastguard Worker // * Used by VertexArrayVk::convertIndexBufferGPU() to convert a ubyte element array to ushort 12*8975f5c5SAndroid Build Coastguard Worker // - Convert vertex buffer: 13*8975f5c5SAndroid Build Coastguard Worker // * Used by VertexArrayVk::convertVertexBufferGPU() to convert vertex attributes from 14*8975f5c5SAndroid Build Coastguard Worker // unsupported formats to their fallbacks. 15*8975f5c5SAndroid Build Coastguard Worker // - Image clear: Used by FramebufferVk::clearWithDraw(). 16*8975f5c5SAndroid Build Coastguard Worker // - Image copy: Used by TextureVk::copySubImageImplWithDraw(). 17*8975f5c5SAndroid Build Coastguard Worker // - Image copy bits: Used by ImageHelper::CopyImageSubData() to perform bitwise copies between 18*8975f5c5SAndroid Build Coastguard Worker // RGB formats where at least one of src and dst use RGBA as fallback. 19*8975f5c5SAndroid Build Coastguard Worker // - Color blit/resolve: Used by FramebufferVk::blit() to implement blit or multisample resolve 20*8975f5c5SAndroid Build Coastguard Worker // on color images. 21*8975f5c5SAndroid Build Coastguard Worker // - Depth/Stencil blit/resolve: Used by FramebufferVk::blit() to implement blit or multisample 22*8975f5c5SAndroid Build Coastguard Worker // resolve on depth/stencil images. 23*8975f5c5SAndroid Build Coastguard Worker // - Generate mipmap: Used by TextureVk::generateMipmapsWithCompute(). 24*8975f5c5SAndroid Build Coastguard Worker // - Overlay Draw: Used by OverlayVk to draw a UI for debugging. 25*8975f5c5SAndroid Build Coastguard Worker // - Mipmap generation: Used by TextureVk to generate mipmaps more efficiently in compute. 26*8975f5c5SAndroid Build Coastguard Worker // 27*8975f5c5SAndroid Build Coastguard Worker 28*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_VULKAN_UTILSVK_H_ 29*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_VULKAN_UTILSVK_H_ 30*8975f5c5SAndroid Build Coastguard Worker 31*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/vulkan/BufferVk.h" 32*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/vulkan/vk_cache_utils.h" 33*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/vulkan/vk_helpers.h" 34*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h" 35*8975f5c5SAndroid Build Coastguard Worker 36*8975f5c5SAndroid Build Coastguard Worker namespace rx 37*8975f5c5SAndroid Build Coastguard Worker { 38*8975f5c5SAndroid Build Coastguard Worker class UtilsVk : angle::NonCopyable 39*8975f5c5SAndroid Build Coastguard Worker { 40*8975f5c5SAndroid Build Coastguard Worker public: 41*8975f5c5SAndroid Build Coastguard Worker UtilsVk(); 42*8975f5c5SAndroid Build Coastguard Worker ~UtilsVk(); 43*8975f5c5SAndroid Build Coastguard Worker 44*8975f5c5SAndroid Build Coastguard Worker void destroy(ContextVk *contextVk); 45*8975f5c5SAndroid Build Coastguard Worker 46*8975f5c5SAndroid Build Coastguard Worker struct ConvertIndexParameters 47*8975f5c5SAndroid Build Coastguard Worker { 48*8975f5c5SAndroid Build Coastguard Worker uint32_t srcOffset = 0; 49*8975f5c5SAndroid Build Coastguard Worker uint32_t dstOffset = 0; 50*8975f5c5SAndroid Build Coastguard Worker uint32_t maxIndex = 0; 51*8975f5c5SAndroid Build Coastguard Worker }; 52*8975f5c5SAndroid Build Coastguard Worker 53*8975f5c5SAndroid Build Coastguard Worker struct ConvertIndexIndirectParameters 54*8975f5c5SAndroid Build Coastguard Worker { 55*8975f5c5SAndroid Build Coastguard Worker uint32_t srcIndirectBufOffset = 0; 56*8975f5c5SAndroid Build Coastguard Worker uint32_t srcIndexBufOffset = 0; 57*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIndexBufOffset = 0; 58*8975f5c5SAndroid Build Coastguard Worker uint32_t maxIndex = 0; 59*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIndirectBufOffset = 0; 60*8975f5c5SAndroid Build Coastguard Worker }; 61*8975f5c5SAndroid Build Coastguard Worker 62*8975f5c5SAndroid Build Coastguard Worker struct ConvertLineLoopIndexIndirectParameters 63*8975f5c5SAndroid Build Coastguard Worker { 64*8975f5c5SAndroid Build Coastguard Worker uint32_t indirectBufferOffset = 0; 65*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIndirectBufferOffset = 0; 66*8975f5c5SAndroid Build Coastguard Worker uint32_t srcIndexBufferOffset = 0; 67*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIndexBufferOffset = 0; 68*8975f5c5SAndroid Build Coastguard Worker uint32_t indicesBitsWidth = 0; 69*8975f5c5SAndroid Build Coastguard Worker }; 70*8975f5c5SAndroid Build Coastguard Worker 71*8975f5c5SAndroid Build Coastguard Worker struct ConvertLineLoopArrayIndirectParameters 72*8975f5c5SAndroid Build Coastguard Worker { 73*8975f5c5SAndroid Build Coastguard Worker uint32_t indirectBufferOffset = 0; 74*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIndirectBufferOffset = 0; 75*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIndexBufferOffset = 0; 76*8975f5c5SAndroid Build Coastguard Worker }; 77*8975f5c5SAndroid Build Coastguard Worker 78*8975f5c5SAndroid Build Coastguard Worker struct OffsetAndVertexCount 79*8975f5c5SAndroid Build Coastguard Worker { 80*8975f5c5SAndroid Build Coastguard Worker uint32_t srcOffset; 81*8975f5c5SAndroid Build Coastguard Worker uint32_t dstOffset; 82*8975f5c5SAndroid Build Coastguard Worker uint32_t vertexCount; 83*8975f5c5SAndroid Build Coastguard Worker }; 84*8975f5c5SAndroid Build Coastguard Worker using OffsetAndVertexCounts = std::vector<OffsetAndVertexCount>; 85*8975f5c5SAndroid Build Coastguard Worker 86*8975f5c5SAndroid Build Coastguard Worker struct ConvertVertexParameters 87*8975f5c5SAndroid Build Coastguard Worker { 88*8975f5c5SAndroid Build Coastguard Worker size_t vertexCount; 89*8975f5c5SAndroid Build Coastguard Worker const angle::Format *srcFormat; 90*8975f5c5SAndroid Build Coastguard Worker const angle::Format *dstFormat; 91*8975f5c5SAndroid Build Coastguard Worker size_t srcStride; 92*8975f5c5SAndroid Build Coastguard Worker size_t srcOffset; 93*8975f5c5SAndroid Build Coastguard Worker size_t dstOffset; 94*8975f5c5SAndroid Build Coastguard Worker }; 95*8975f5c5SAndroid Build Coastguard Worker 96*8975f5c5SAndroid Build Coastguard Worker struct ClearFramebufferParameters 97*8975f5c5SAndroid Build Coastguard Worker { 98*8975f5c5SAndroid Build Coastguard Worker // Satisfy chromium-style with a constructor that does what = {} was already doing in a 99*8975f5c5SAndroid Build Coastguard Worker // safer way. 100*8975f5c5SAndroid Build Coastguard Worker ClearFramebufferParameters(); 101*8975f5c5SAndroid Build Coastguard Worker 102*8975f5c5SAndroid Build Coastguard Worker gl::Rectangle clearArea; 103*8975f5c5SAndroid Build Coastguard Worker 104*8975f5c5SAndroid Build Coastguard Worker bool clearColor; 105*8975f5c5SAndroid Build Coastguard Worker bool clearDepth; 106*8975f5c5SAndroid Build Coastguard Worker bool clearStencil; 107*8975f5c5SAndroid Build Coastguard Worker 108*8975f5c5SAndroid Build Coastguard Worker uint8_t stencilMask; 109*8975f5c5SAndroid Build Coastguard Worker VkColorComponentFlags colorMaskFlags; 110*8975f5c5SAndroid Build Coastguard Worker uint32_t colorAttachmentIndexGL; 111*8975f5c5SAndroid Build Coastguard Worker const angle::Format *colorFormat; 112*8975f5c5SAndroid Build Coastguard Worker 113*8975f5c5SAndroid Build Coastguard Worker VkClearColorValue colorClearValue; 114*8975f5c5SAndroid Build Coastguard Worker VkClearDepthStencilValue depthStencilClearValue; 115*8975f5c5SAndroid Build Coastguard Worker }; 116*8975f5c5SAndroid Build Coastguard Worker 117*8975f5c5SAndroid Build Coastguard Worker struct ClearTextureParameters 118*8975f5c5SAndroid Build Coastguard Worker { 119*8975f5c5SAndroid Build Coastguard Worker VkImageAspectFlags aspectFlags; 120*8975f5c5SAndroid Build Coastguard Worker vk::LevelIndex level; 121*8975f5c5SAndroid Build Coastguard Worker uint32_t layer; 122*8975f5c5SAndroid Build Coastguard Worker gl::Box clearArea; 123*8975f5c5SAndroid Build Coastguard Worker VkClearValue clearValue; 124*8975f5c5SAndroid Build Coastguard Worker }; 125*8975f5c5SAndroid Build Coastguard Worker 126*8975f5c5SAndroid Build Coastguard Worker struct BlitResolveParameters 127*8975f5c5SAndroid Build Coastguard Worker { 128*8975f5c5SAndroid Build Coastguard Worker // |srcOffset| and |dstIndexBufferOffset| define the original blit/resolve offsets, possibly 129*8975f5c5SAndroid Build Coastguard Worker // flipped. 130*8975f5c5SAndroid Build Coastguard Worker int srcOffset[2]; 131*8975f5c5SAndroid Build Coastguard Worker int dstOffset[2]; 132*8975f5c5SAndroid Build Coastguard Worker // Amount to add to x and y axis for certain rotations 133*8975f5c5SAndroid Build Coastguard Worker int rotatedOffsetFactor[2]; 134*8975f5c5SAndroid Build Coastguard Worker // |stretch| is SourceDimension / DestDimension used to transfer dst coordinates to source. 135*8975f5c5SAndroid Build Coastguard Worker float stretch[2]; 136*8975f5c5SAndroid Build Coastguard Worker // |srcExtents| is used to normalize source coordinates for sampling. 137*8975f5c5SAndroid Build Coastguard Worker int srcExtents[2]; 138*8975f5c5SAndroid Build Coastguard Worker // |blitArea| is the area in destination where blit happens. It's expected that scissor 139*8975f5c5SAndroid Build Coastguard Worker // and source clipping effects have already been applied to it. 140*8975f5c5SAndroid Build Coastguard Worker gl::Rectangle blitArea; 141*8975f5c5SAndroid Build Coastguard Worker int srcLayer; 142*8975f5c5SAndroid Build Coastguard Worker // Whether linear or point sampling should be used. 143*8975f5c5SAndroid Build Coastguard Worker bool linear; 144*8975f5c5SAndroid Build Coastguard Worker bool flipX; 145*8975f5c5SAndroid Build Coastguard Worker bool flipY; 146*8975f5c5SAndroid Build Coastguard Worker SurfaceRotation rotation; 147*8975f5c5SAndroid Build Coastguard Worker }; 148*8975f5c5SAndroid Build Coastguard Worker 149*8975f5c5SAndroid Build Coastguard Worker struct ClearImageParameters 150*8975f5c5SAndroid Build Coastguard Worker { 151*8975f5c5SAndroid Build Coastguard Worker gl::Rectangle clearArea; 152*8975f5c5SAndroid Build Coastguard Worker 153*8975f5c5SAndroid Build Coastguard Worker vk::LevelIndex dstMip; 154*8975f5c5SAndroid Build Coastguard Worker int dstLayer; 155*8975f5c5SAndroid Build Coastguard Worker 156*8975f5c5SAndroid Build Coastguard Worker VkColorComponentFlags colorMaskFlags; 157*8975f5c5SAndroid Build Coastguard Worker VkClearColorValue colorClearValue; 158*8975f5c5SAndroid Build Coastguard Worker }; 159*8975f5c5SAndroid Build Coastguard Worker 160*8975f5c5SAndroid Build Coastguard Worker struct CopyImageParameters 161*8975f5c5SAndroid Build Coastguard Worker { 162*8975f5c5SAndroid Build Coastguard Worker int srcOffset[2]; 163*8975f5c5SAndroid Build Coastguard Worker int srcExtents[2]; 164*8975f5c5SAndroid Build Coastguard Worker int dstOffset[2]; 165*8975f5c5SAndroid Build Coastguard Worker int srcMip; 166*8975f5c5SAndroid Build Coastguard Worker int srcLayer; 167*8975f5c5SAndroid Build Coastguard Worker int srcSampleCount; 168*8975f5c5SAndroid Build Coastguard Worker int srcHeight; 169*8975f5c5SAndroid Build Coastguard Worker gl::LevelIndex dstMip; 170*8975f5c5SAndroid Build Coastguard Worker int dstLayer; 171*8975f5c5SAndroid Build Coastguard Worker bool srcPremultiplyAlpha; 172*8975f5c5SAndroid Build Coastguard Worker bool srcUnmultiplyAlpha; 173*8975f5c5SAndroid Build Coastguard Worker bool srcFlipY; 174*8975f5c5SAndroid Build Coastguard Worker bool dstFlipY; 175*8975f5c5SAndroid Build Coastguard Worker SurfaceRotation srcRotation; 176*8975f5c5SAndroid Build Coastguard Worker GLenum srcColorEncoding; 177*8975f5c5SAndroid Build Coastguard Worker GLenum dstColorEncoding; 178*8975f5c5SAndroid Build Coastguard Worker }; 179*8975f5c5SAndroid Build Coastguard Worker 180*8975f5c5SAndroid Build Coastguard Worker struct CopyImageBitsParameters 181*8975f5c5SAndroid Build Coastguard Worker { 182*8975f5c5SAndroid Build Coastguard Worker int srcOffset[3]; 183*8975f5c5SAndroid Build Coastguard Worker gl::LevelIndex srcLevel; 184*8975f5c5SAndroid Build Coastguard Worker int dstOffset[3]; 185*8975f5c5SAndroid Build Coastguard Worker gl::LevelIndex dstLevel; 186*8975f5c5SAndroid Build Coastguard Worker uint32_t copyExtents[3]; 187*8975f5c5SAndroid Build Coastguard Worker }; 188*8975f5c5SAndroid Build Coastguard Worker 189*8975f5c5SAndroid Build Coastguard Worker struct CopyImageToBufferParameters 190*8975f5c5SAndroid Build Coastguard Worker { 191*8975f5c5SAndroid Build Coastguard Worker int srcOffset[2]; 192*8975f5c5SAndroid Build Coastguard Worker vk::LevelIndex srcMip; 193*8975f5c5SAndroid Build Coastguard Worker int srcLayer; 194*8975f5c5SAndroid Build Coastguard Worker uint32_t size[2]; 195*8975f5c5SAndroid Build Coastguard Worker ptrdiff_t outputOffset; 196*8975f5c5SAndroid Build Coastguard Worker uint32_t outputPitch; 197*8975f5c5SAndroid Build Coastguard Worker bool reverseRowOrder; 198*8975f5c5SAndroid Build Coastguard Worker const angle::Format *outputFormat; 199*8975f5c5SAndroid Build Coastguard Worker }; 200*8975f5c5SAndroid Build Coastguard Worker 201*8975f5c5SAndroid Build Coastguard Worker struct OverlayDrawParameters 202*8975f5c5SAndroid Build Coastguard Worker { 203*8975f5c5SAndroid Build Coastguard Worker uint32_t textWidgetCount; 204*8975f5c5SAndroid Build Coastguard Worker uint32_t graphWidgetCount; 205*8975f5c5SAndroid Build Coastguard Worker bool rotateXY; 206*8975f5c5SAndroid Build Coastguard Worker }; 207*8975f5c5SAndroid Build Coastguard Worker 208*8975f5c5SAndroid Build Coastguard Worker struct GenerateMipmapParameters 209*8975f5c5SAndroid Build Coastguard Worker { 210*8975f5c5SAndroid Build Coastguard Worker uint32_t srcLevel; 211*8975f5c5SAndroid Build Coastguard Worker uint32_t dstLevelCount; 212*8975f5c5SAndroid Build Coastguard Worker }; 213*8975f5c5SAndroid Build Coastguard Worker 214*8975f5c5SAndroid Build Coastguard Worker struct UnresolveParameters 215*8975f5c5SAndroid Build Coastguard Worker { 216*8975f5c5SAndroid Build Coastguard Worker gl::DrawBufferMask unresolveColorMask; 217*8975f5c5SAndroid Build Coastguard Worker bool unresolveDepth; 218*8975f5c5SAndroid Build Coastguard Worker bool unresolveStencil; 219*8975f5c5SAndroid Build Coastguard Worker }; 220*8975f5c5SAndroid Build Coastguard Worker 221*8975f5c5SAndroid Build Coastguard Worker struct GenerateFragmentShadingRateParameters 222*8975f5c5SAndroid Build Coastguard Worker { 223*8975f5c5SAndroid Build Coastguard Worker uint32_t textureWidth; 224*8975f5c5SAndroid Build Coastguard Worker uint32_t textureHeight; 225*8975f5c5SAndroid Build Coastguard Worker uint32_t attachmentWidth; 226*8975f5c5SAndroid Build Coastguard Worker uint32_t attachmentHeight; 227*8975f5c5SAndroid Build Coastguard Worker uint32_t attachmentBlockWidth; 228*8975f5c5SAndroid Build Coastguard Worker uint32_t attachmentBlockHeight; 229*8975f5c5SAndroid Build Coastguard Worker uint32_t numFocalPoints; 230*8975f5c5SAndroid Build Coastguard Worker gl::FocalPoint focalPoints[gl::IMPLEMENTATION_MAX_FOCAL_POINTS]; 231*8975f5c5SAndroid Build Coastguard Worker }; 232*8975f5c5SAndroid Build Coastguard Worker 233*8975f5c5SAndroid Build Coastguard Worker // Based on the maximum number of levels in GenerateMipmap.comp. 234*8975f5c5SAndroid Build Coastguard Worker static constexpr uint32_t kGenerateMipmapMaxLevels = 6; 235*8975f5c5SAndroid Build Coastguard Worker static uint32_t GetGenerateMipmapMaxLevels(ContextVk *contextVk); 236*8975f5c5SAndroid Build Coastguard Worker 237*8975f5c5SAndroid Build Coastguard Worker angle::Result convertIndexBuffer(ContextVk *contextVk, 238*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dst, 239*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *src, 240*8975f5c5SAndroid Build Coastguard Worker const ConvertIndexParameters ¶ms); 241*8975f5c5SAndroid Build Coastguard Worker angle::Result convertIndexIndirectBuffer(ContextVk *contextVk, 242*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *srcIndirectBuf, 243*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *srcIndexBuf, 244*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dstIndirectBuf, 245*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dstIndexBuf, 246*8975f5c5SAndroid Build Coastguard Worker const ConvertIndexIndirectParameters ¶ms); 247*8975f5c5SAndroid Build Coastguard Worker 248*8975f5c5SAndroid Build Coastguard Worker angle::Result convertLineLoopIndexIndirectBuffer( 249*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 250*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *srcIndirectBuffer, 251*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *srcIndexBuffer, 252*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dstIndirectBuffer, 253*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dstIndexBuffer, 254*8975f5c5SAndroid Build Coastguard Worker const ConvertLineLoopIndexIndirectParameters ¶ms); 255*8975f5c5SAndroid Build Coastguard Worker 256*8975f5c5SAndroid Build Coastguard Worker angle::Result convertLineLoopArrayIndirectBuffer( 257*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 258*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *srcIndirectBuffer, 259*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dstIndirectBuffer, 260*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dstIndexBuffer, 261*8975f5c5SAndroid Build Coastguard Worker const ConvertLineLoopArrayIndirectParameters ¶ms); 262*8975f5c5SAndroid Build Coastguard Worker 263*8975f5c5SAndroid Build Coastguard Worker angle::Result convertVertexBuffer(ContextVk *contextVk, 264*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dst, 265*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *src, 266*8975f5c5SAndroid Build Coastguard Worker const ConvertVertexParameters ¶ms, 267*8975f5c5SAndroid Build Coastguard Worker const OffsetAndVertexCounts &additionalOffsetVertexCounts); 268*8975f5c5SAndroid Build Coastguard Worker 269*8975f5c5SAndroid Build Coastguard Worker // EXT_clear_texture 270*8975f5c5SAndroid Build Coastguard Worker angle::Result clearTexture(ContextVk *contextVk, 271*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *dst, 272*8975f5c5SAndroid Build Coastguard Worker ClearTextureParameters ¶ms); 273*8975f5c5SAndroid Build Coastguard Worker 274*8975f5c5SAndroid Build Coastguard Worker angle::Result clearFramebuffer(ContextVk *contextVk, 275*8975f5c5SAndroid Build Coastguard Worker FramebufferVk *framebuffer, 276*8975f5c5SAndroid Build Coastguard Worker const ClearFramebufferParameters ¶ms); 277*8975f5c5SAndroid Build Coastguard Worker 278*8975f5c5SAndroid Build Coastguard Worker // Resolve images if multisampled. Blit otherwise. 279*8975f5c5SAndroid Build Coastguard Worker angle::Result colorBlitResolve(ContextVk *contextVk, 280*8975f5c5SAndroid Build Coastguard Worker FramebufferVk *framebuffer, 281*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *src, 282*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcView, 283*8975f5c5SAndroid Build Coastguard Worker const BlitResolveParameters ¶ms); 284*8975f5c5SAndroid Build Coastguard Worker angle::Result depthStencilBlitResolve(ContextVk *contextVk, 285*8975f5c5SAndroid Build Coastguard Worker FramebufferVk *framebuffer, 286*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *src, 287*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcDepthView, 288*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcStencilView, 289*8975f5c5SAndroid Build Coastguard Worker const BlitResolveParameters ¶ms); 290*8975f5c5SAndroid Build Coastguard Worker angle::Result stencilBlitResolveNoShaderExport(ContextVk *contextVk, 291*8975f5c5SAndroid Build Coastguard Worker FramebufferVk *framebuffer, 292*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *src, 293*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcStencilView, 294*8975f5c5SAndroid Build Coastguard Worker const BlitResolveParameters ¶ms); 295*8975f5c5SAndroid Build Coastguard Worker 296*8975f5c5SAndroid Build Coastguard Worker angle::Result clearImage(ContextVk *contextVk, 297*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *dst, 298*8975f5c5SAndroid Build Coastguard Worker const ClearImageParameters ¶ms); 299*8975f5c5SAndroid Build Coastguard Worker 300*8975f5c5SAndroid Build Coastguard Worker angle::Result copyImage(ContextVk *contextVk, 301*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *dst, 302*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *dstView, 303*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *src, 304*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcView, 305*8975f5c5SAndroid Build Coastguard Worker const CopyImageParameters ¶ms); 306*8975f5c5SAndroid Build Coastguard Worker 307*8975f5c5SAndroid Build Coastguard Worker angle::Result copyImageBits(ContextVk *contextVk, 308*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *dst, 309*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *src, 310*8975f5c5SAndroid Build Coastguard Worker const CopyImageBitsParameters ¶ms); 311*8975f5c5SAndroid Build Coastguard Worker 312*8975f5c5SAndroid Build Coastguard Worker angle::Result copyImageToBuffer(ContextVk *contextVk, 313*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dst, 314*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *src, 315*8975f5c5SAndroid Build Coastguard Worker const CopyImageToBufferParameters ¶ms); 316*8975f5c5SAndroid Build Coastguard Worker 317*8975f5c5SAndroid Build Coastguard Worker angle::Result copyRgbToRgba(ContextVk *contextVk, 318*8975f5c5SAndroid Build Coastguard Worker const angle::Format &srcFormat, 319*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *srcBuffer, 320*8975f5c5SAndroid Build Coastguard Worker uint32_t srcOffset, 321*8975f5c5SAndroid Build Coastguard Worker uint32_t pixelCount, 322*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dstBuffer); 323*8975f5c5SAndroid Build Coastguard Worker 324*8975f5c5SAndroid Build Coastguard Worker angle::Result transCodeEtcToBc(ContextVk *contextVk, 325*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *srcBuffer, 326*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *dstImage, 327*8975f5c5SAndroid Build Coastguard Worker const VkBufferImageCopy *copyRegion); 328*8975f5c5SAndroid Build Coastguard Worker 329*8975f5c5SAndroid Build Coastguard Worker using GenerateMipmapDestLevelViews = 330*8975f5c5SAndroid Build Coastguard Worker std::array<const vk::ImageView *, kGenerateMipmapMaxLevels>; 331*8975f5c5SAndroid Build Coastguard Worker angle::Result generateMipmap(ContextVk *contextVk, 332*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *src, 333*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcLevelZeroView, 334*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *dst, 335*8975f5c5SAndroid Build Coastguard Worker const GenerateMipmapDestLevelViews &dstLevelViews, 336*8975f5c5SAndroid Build Coastguard Worker const vk::Sampler &sampler, 337*8975f5c5SAndroid Build Coastguard Worker const GenerateMipmapParameters ¶ms); 338*8975f5c5SAndroid Build Coastguard Worker angle::Result generateMipmapWithDraw(ContextVk *contextVk, 339*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *image, 340*8975f5c5SAndroid Build Coastguard Worker const angle::FormatID actualFormatID, 341*8975f5c5SAndroid Build Coastguard Worker const bool isMipmapFiltered); 342*8975f5c5SAndroid Build Coastguard Worker 343*8975f5c5SAndroid Build Coastguard Worker angle::Result unresolve(ContextVk *contextVk, 344*8975f5c5SAndroid Build Coastguard Worker const FramebufferVk *framebuffer, 345*8975f5c5SAndroid Build Coastguard Worker const UnresolveParameters ¶ms); 346*8975f5c5SAndroid Build Coastguard Worker 347*8975f5c5SAndroid Build Coastguard Worker // Overlay utilities. 348*8975f5c5SAndroid Build Coastguard Worker angle::Result drawOverlay(ContextVk *contextVk, 349*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *textWidgetsBuffer, 350*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *graphWidgetsBuffer, 351*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *font, 352*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *fontView, 353*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *dst, 354*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *dstView, 355*8975f5c5SAndroid Build Coastguard Worker const OverlayDrawParameters ¶ms); 356*8975f5c5SAndroid Build Coastguard Worker 357*8975f5c5SAndroid Build Coastguard Worker // Fragment shading rate utility 358*8975f5c5SAndroid Build Coastguard Worker angle::Result generateFragmentShadingRate( 359*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 360*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *shadingRateAttachmentImageHelper, 361*8975f5c5SAndroid Build Coastguard Worker vk::ImageViewHelper *shadingRateAttachmentImageViewHelper, 362*8975f5c5SAndroid Build Coastguard Worker const GenerateFragmentShadingRateParameters &shadingRateParameters); 363*8975f5c5SAndroid Build Coastguard Worker 364*8975f5c5SAndroid Build Coastguard Worker private: 365*8975f5c5SAndroid Build Coastguard Worker ANGLE_ENABLE_STRUCT_PADDING_WARNINGS 366*8975f5c5SAndroid Build Coastguard Worker 367*8975f5c5SAndroid Build Coastguard Worker struct ConvertIndexShaderParams 368*8975f5c5SAndroid Build Coastguard Worker { 369*8975f5c5SAndroid Build Coastguard Worker uint32_t srcOffset = 0; 370*8975f5c5SAndroid Build Coastguard Worker uint32_t dstOffsetDiv4 = 0; 371*8975f5c5SAndroid Build Coastguard Worker uint32_t maxIndex = 0; 372*8975f5c5SAndroid Build Coastguard Worker uint32_t _padding = 0; 373*8975f5c5SAndroid Build Coastguard Worker }; 374*8975f5c5SAndroid Build Coastguard Worker 375*8975f5c5SAndroid Build Coastguard Worker struct ConvertIndexIndirectShaderParams 376*8975f5c5SAndroid Build Coastguard Worker { 377*8975f5c5SAndroid Build Coastguard Worker uint32_t srcIndirectOffsetDiv4 = 0; 378*8975f5c5SAndroid Build Coastguard Worker uint32_t srcOffset = 0; 379*8975f5c5SAndroid Build Coastguard Worker uint32_t dstOffsetDiv4 = 0; 380*8975f5c5SAndroid Build Coastguard Worker uint32_t maxIndex = 0; 381*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIndirectOffsetDiv4 = 0; 382*8975f5c5SAndroid Build Coastguard Worker }; 383*8975f5c5SAndroid Build Coastguard Worker 384*8975f5c5SAndroid Build Coastguard Worker struct ConvertIndexIndirectLineLoopShaderParams 385*8975f5c5SAndroid Build Coastguard Worker { 386*8975f5c5SAndroid Build Coastguard Worker uint32_t cmdOffsetDiv4 = 0; 387*8975f5c5SAndroid Build Coastguard Worker uint32_t dstCmdOffsetDiv4 = 0; 388*8975f5c5SAndroid Build Coastguard Worker uint32_t srcOffset = 0; 389*8975f5c5SAndroid Build Coastguard Worker uint32_t dstOffsetDiv4 = 0; 390*8975f5c5SAndroid Build Coastguard Worker uint32_t isRestartEnabled = 0; 391*8975f5c5SAndroid Build Coastguard Worker }; 392*8975f5c5SAndroid Build Coastguard Worker 393*8975f5c5SAndroid Build Coastguard Worker struct ConvertIndirectLineLoopShaderParams 394*8975f5c5SAndroid Build Coastguard Worker { 395*8975f5c5SAndroid Build Coastguard Worker uint32_t cmdOffsetDiv4 = 0; 396*8975f5c5SAndroid Build Coastguard Worker uint32_t dstCmdOffsetDiv4 = 0; 397*8975f5c5SAndroid Build Coastguard Worker uint32_t dstOffsetDiv4 = 0; 398*8975f5c5SAndroid Build Coastguard Worker }; 399*8975f5c5SAndroid Build Coastguard Worker 400*8975f5c5SAndroid Build Coastguard Worker struct ConvertVertexShaderParams 401*8975f5c5SAndroid Build Coastguard Worker { 402*8975f5c5SAndroid Build Coastguard Worker ConvertVertexShaderParams(); 403*8975f5c5SAndroid Build Coastguard Worker 404*8975f5c5SAndroid Build Coastguard Worker // Structure matching PushConstants in ConvertVertex.comp 405*8975f5c5SAndroid Build Coastguard Worker uint32_t outputCount = 0; 406*8975f5c5SAndroid Build Coastguard Worker uint32_t componentCount = 0; 407*8975f5c5SAndroid Build Coastguard Worker uint32_t srcOffset = 0; 408*8975f5c5SAndroid Build Coastguard Worker uint32_t dstOffset = 0; 409*8975f5c5SAndroid Build Coastguard Worker uint32_t Ns = 0; 410*8975f5c5SAndroid Build Coastguard Worker uint32_t Bs = 0; 411*8975f5c5SAndroid Build Coastguard Worker uint32_t Ss = 0; 412*8975f5c5SAndroid Build Coastguard Worker uint32_t Es = 0; 413*8975f5c5SAndroid Build Coastguard Worker uint32_t Nd = 0; 414*8975f5c5SAndroid Build Coastguard Worker uint32_t Bd = 0; 415*8975f5c5SAndroid Build Coastguard Worker uint32_t Sd = 0; 416*8975f5c5SAndroid Build Coastguard Worker uint32_t Ed = 0; 417*8975f5c5SAndroid Build Coastguard Worker uint32_t srcEmulatedAlpha = 0; 418*8975f5c5SAndroid Build Coastguard Worker uint32_t isSrcHDR = 0; 419*8975f5c5SAndroid Build Coastguard Worker uint32_t isSrcA2BGR10 = 0; 420*8975f5c5SAndroid Build Coastguard Worker uint32_t _padding = 0; 421*8975f5c5SAndroid Build Coastguard Worker }; 422*8975f5c5SAndroid Build Coastguard Worker 423*8975f5c5SAndroid Build Coastguard Worker struct ImageClearShaderParams 424*8975f5c5SAndroid Build Coastguard Worker { 425*8975f5c5SAndroid Build Coastguard Worker // Structure matching PushConstants in ImageClear.frag 426*8975f5c5SAndroid Build Coastguard Worker VkClearColorValue clearValue = {}; 427*8975f5c5SAndroid Build Coastguard Worker float clearDepth = 0.0f; 428*8975f5c5SAndroid Build Coastguard Worker }; 429*8975f5c5SAndroid Build Coastguard Worker 430*8975f5c5SAndroid Build Coastguard Worker struct ImageCopyShaderParams 431*8975f5c5SAndroid Build Coastguard Worker { 432*8975f5c5SAndroid Build Coastguard Worker ImageCopyShaderParams(); 433*8975f5c5SAndroid Build Coastguard Worker 434*8975f5c5SAndroid Build Coastguard Worker // Structure matching PushConstants in ImageCopy.frag 435*8975f5c5SAndroid Build Coastguard Worker int32_t srcOffset[2] = {}; 436*8975f5c5SAndroid Build Coastguard Worker int32_t dstOffset[2] = {}; 437*8975f5c5SAndroid Build Coastguard Worker int32_t srcMip = 0; 438*8975f5c5SAndroid Build Coastguard Worker int32_t srcLayer = 0; 439*8975f5c5SAndroid Build Coastguard Worker int32_t srcSampleCount = 0; 440*8975f5c5SAndroid Build Coastguard Worker uint32_t flipX = 0; 441*8975f5c5SAndroid Build Coastguard Worker uint32_t flipY = 0; 442*8975f5c5SAndroid Build Coastguard Worker uint32_t premultiplyAlpha = 0; 443*8975f5c5SAndroid Build Coastguard Worker uint32_t unmultiplyAlpha = 0; 444*8975f5c5SAndroid Build Coastguard Worker uint32_t dstHasLuminance = 0; 445*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIsAlpha = 0; 446*8975f5c5SAndroid Build Coastguard Worker uint32_t srcIsSRGB = 0; 447*8975f5c5SAndroid Build Coastguard Worker uint32_t dstIsSRGB = 0; 448*8975f5c5SAndroid Build Coastguard Worker uint32_t dstDefaultChannelsMask = 0; 449*8975f5c5SAndroid Build Coastguard Worker uint32_t rotateXY = 0; 450*8975f5c5SAndroid Build Coastguard Worker }; 451*8975f5c5SAndroid Build Coastguard Worker 452*8975f5c5SAndroid Build Coastguard Worker struct CopyImageToBufferShaderParams 453*8975f5c5SAndroid Build Coastguard Worker { 454*8975f5c5SAndroid Build Coastguard Worker // Structure matching PushConstants in CopyImageToBuffer.comp 455*8975f5c5SAndroid Build Coastguard Worker int32_t srcOffset[2] = {}; 456*8975f5c5SAndroid Build Coastguard Worker int32_t srcDepth = 0; 457*8975f5c5SAndroid Build Coastguard Worker uint32_t reverseRowOrder = 0; 458*8975f5c5SAndroid Build Coastguard Worker uint32_t size[2] = {}; 459*8975f5c5SAndroid Build Coastguard Worker uint32_t outputOffset = 0; 460*8975f5c5SAndroid Build Coastguard Worker uint32_t outputPitch = 0; 461*8975f5c5SAndroid Build Coastguard Worker uint32_t isDstSnorm = 0; 462*8975f5c5SAndroid Build Coastguard Worker }; 463*8975f5c5SAndroid Build Coastguard Worker 464*8975f5c5SAndroid Build Coastguard Worker union BlitResolveOffset 465*8975f5c5SAndroid Build Coastguard Worker { 466*8975f5c5SAndroid Build Coastguard Worker int32_t resolve[2]; 467*8975f5c5SAndroid Build Coastguard Worker float blit[2]; 468*8975f5c5SAndroid Build Coastguard Worker }; 469*8975f5c5SAndroid Build Coastguard Worker 470*8975f5c5SAndroid Build Coastguard Worker struct BlitResolveShaderParams 471*8975f5c5SAndroid Build Coastguard Worker { 472*8975f5c5SAndroid Build Coastguard Worker // Structure matching PushConstants in BlitResolve.frag 473*8975f5c5SAndroid Build Coastguard Worker BlitResolveOffset offset = {}; 474*8975f5c5SAndroid Build Coastguard Worker float stretch[2] = {}; 475*8975f5c5SAndroid Build Coastguard Worker float invSrcExtent[2] = {}; 476*8975f5c5SAndroid Build Coastguard Worker int32_t srcLayer = 0; 477*8975f5c5SAndroid Build Coastguard Worker int32_t samples = 0; 478*8975f5c5SAndroid Build Coastguard Worker float invSamples = 0; 479*8975f5c5SAndroid Build Coastguard Worker uint32_t outputMask = 0; 480*8975f5c5SAndroid Build Coastguard Worker uint32_t flipX = 0; 481*8975f5c5SAndroid Build Coastguard Worker uint32_t flipY = 0; 482*8975f5c5SAndroid Build Coastguard Worker uint32_t rotateXY = 0; 483*8975f5c5SAndroid Build Coastguard Worker }; 484*8975f5c5SAndroid Build Coastguard Worker 485*8975f5c5SAndroid Build Coastguard Worker struct BlitResolveStencilNoExportShaderParams 486*8975f5c5SAndroid Build Coastguard Worker { 487*8975f5c5SAndroid Build Coastguard Worker // Structure matching PushConstants in BlitResolveStencilNoExport.comp 488*8975f5c5SAndroid Build Coastguard Worker BlitResolveOffset offset = {}; 489*8975f5c5SAndroid Build Coastguard Worker float stretch[2] = {}; 490*8975f5c5SAndroid Build Coastguard Worker float invSrcExtent[2] = {}; 491*8975f5c5SAndroid Build Coastguard Worker int32_t srcLayer = 0; 492*8975f5c5SAndroid Build Coastguard Worker int32_t srcWidth = 0; 493*8975f5c5SAndroid Build Coastguard Worker int32_t blitArea[4] = {}; 494*8975f5c5SAndroid Build Coastguard Worker int32_t dstPitch = 0; 495*8975f5c5SAndroid Build Coastguard Worker uint32_t flipX = 0; 496*8975f5c5SAndroid Build Coastguard Worker uint32_t flipY = 0; 497*8975f5c5SAndroid Build Coastguard Worker uint32_t rotateXY = 0; 498*8975f5c5SAndroid Build Coastguard Worker }; 499*8975f5c5SAndroid Build Coastguard Worker 500*8975f5c5SAndroid Build Coastguard Worker struct ExportStencilShaderParams 501*8975f5c5SAndroid Build Coastguard Worker { 502*8975f5c5SAndroid Build Coastguard Worker uint32_t bit = 0; 503*8975f5c5SAndroid Build Coastguard Worker }; 504*8975f5c5SAndroid Build Coastguard Worker 505*8975f5c5SAndroid Build Coastguard Worker struct OverlayDrawShaderParams 506*8975f5c5SAndroid Build Coastguard Worker { 507*8975f5c5SAndroid Build Coastguard Worker // Structure matching PushConstants in OverlayDraw.vert and OverlayDraw.frag 508*8975f5c5SAndroid Build Coastguard Worker uint32_t viewportSize[2] = {}; 509*8975f5c5SAndroid Build Coastguard Worker uint32_t isText = 0; 510*8975f5c5SAndroid Build Coastguard Worker uint32_t rotateXY = 0; 511*8975f5c5SAndroid Build Coastguard Worker }; 512*8975f5c5SAndroid Build Coastguard Worker 513*8975f5c5SAndroid Build Coastguard Worker struct GenerateMipmapShaderParams 514*8975f5c5SAndroid Build Coastguard Worker { 515*8975f5c5SAndroid Build Coastguard Worker // Structure matching PushConstants in GenerateMipmap.comp 516*8975f5c5SAndroid Build Coastguard Worker float invSrcExtent[2] = {}; 517*8975f5c5SAndroid Build Coastguard Worker uint32_t levelCount = 0; 518*8975f5c5SAndroid Build Coastguard Worker }; 519*8975f5c5SAndroid Build Coastguard Worker 520*8975f5c5SAndroid Build Coastguard Worker struct EtcToBcShaderParams 521*8975f5c5SAndroid Build Coastguard Worker { 522*8975f5c5SAndroid Build Coastguard Worker uint32_t offsetX; 523*8975f5c5SAndroid Build Coastguard Worker uint32_t offsetY; 524*8975f5c5SAndroid Build Coastguard Worker int32_t texelOffset; 525*8975f5c5SAndroid Build Coastguard Worker uint32_t width; 526*8975f5c5SAndroid Build Coastguard Worker uint32_t height; 527*8975f5c5SAndroid Build Coastguard Worker uint32_t alphaBits; 528*8975f5c5SAndroid Build Coastguard Worker uint32_t isSigned; 529*8975f5c5SAndroid Build Coastguard Worker uint32_t isEacRg; 530*8975f5c5SAndroid Build Coastguard Worker }; 531*8975f5c5SAndroid Build Coastguard Worker 532*8975f5c5SAndroid Build Coastguard Worker ANGLE_DISABLE_STRUCT_PADDING_WARNINGS 533*8975f5c5SAndroid Build Coastguard Worker 534*8975f5c5SAndroid Build Coastguard Worker // Functions implemented by the class: 535*8975f5c5SAndroid Build Coastguard Worker enum class Function 536*8975f5c5SAndroid Build Coastguard Worker { 537*8975f5c5SAndroid Build Coastguard Worker // Functions implemented in graphics 538*8975f5c5SAndroid Build Coastguard Worker ImageClear, 539*8975f5c5SAndroid Build Coastguard Worker ImageCopy, 540*8975f5c5SAndroid Build Coastguard Worker BlitResolve, 541*8975f5c5SAndroid Build Coastguard Worker Blit3DSrc, 542*8975f5c5SAndroid Build Coastguard Worker ExportStencil, 543*8975f5c5SAndroid Build Coastguard Worker OverlayDraw, 544*8975f5c5SAndroid Build Coastguard Worker // Note: unresolve is special as it has a different layout per attachment count. Depth and 545*8975f5c5SAndroid Build Coastguard Worker // stencil each require a binding, so are counted separately. 546*8975f5c5SAndroid Build Coastguard Worker Unresolve1Attachment, 547*8975f5c5SAndroid Build Coastguard Worker Unresolve2Attachments, 548*8975f5c5SAndroid Build Coastguard Worker Unresolve3Attachments, 549*8975f5c5SAndroid Build Coastguard Worker Unresolve4Attachments, 550*8975f5c5SAndroid Build Coastguard Worker Unresolve5Attachments, 551*8975f5c5SAndroid Build Coastguard Worker Unresolve6Attachments, 552*8975f5c5SAndroid Build Coastguard Worker Unresolve7Attachments, 553*8975f5c5SAndroid Build Coastguard Worker Unresolve8Attachments, 554*8975f5c5SAndroid Build Coastguard Worker Unresolve9Attachments, 555*8975f5c5SAndroid Build Coastguard Worker Unresolve10Attachments, 556*8975f5c5SAndroid Build Coastguard Worker 557*8975f5c5SAndroid Build Coastguard Worker // Functions implemented in compute 558*8975f5c5SAndroid Build Coastguard Worker ComputeStartIndex, // Special value to separate draw and dispatch functions. 559*8975f5c5SAndroid Build Coastguard Worker ConvertIndexBuffer = ComputeStartIndex, 560*8975f5c5SAndroid Build Coastguard Worker ConvertVertexBuffer, 561*8975f5c5SAndroid Build Coastguard Worker ClearTexture, 562*8975f5c5SAndroid Build Coastguard Worker BlitResolveStencilNoExport, 563*8975f5c5SAndroid Build Coastguard Worker ConvertIndexIndirectBuffer, 564*8975f5c5SAndroid Build Coastguard Worker ConvertIndexIndirectLineLoopBuffer, 565*8975f5c5SAndroid Build Coastguard Worker ConvertIndirectLineLoopBuffer, 566*8975f5c5SAndroid Build Coastguard Worker GenerateMipmap, 567*8975f5c5SAndroid Build Coastguard Worker TransCodeEtcToBc, 568*8975f5c5SAndroid Build Coastguard Worker CopyImageToBuffer, 569*8975f5c5SAndroid Build Coastguard Worker GenerateFragmentShadingRate, 570*8975f5c5SAndroid Build Coastguard Worker 571*8975f5c5SAndroid Build Coastguard Worker InvalidEnum, 572*8975f5c5SAndroid Build Coastguard Worker EnumCount = InvalidEnum, 573*8975f5c5SAndroid Build Coastguard Worker }; 574*8975f5c5SAndroid Build Coastguard Worker 575*8975f5c5SAndroid Build Coastguard Worker struct GraphicsShaderProgramAndPipelines 576*8975f5c5SAndroid Build Coastguard Worker { 577*8975f5c5SAndroid Build Coastguard Worker vk::ShaderProgramHelper program; 578*8975f5c5SAndroid Build Coastguard Worker CompleteGraphicsPipelineCache pipelines; 579*8975f5c5SAndroid Build Coastguard Worker }; 580*8975f5c5SAndroid Build Coastguard Worker struct ComputeShaderProgramAndPipelines 581*8975f5c5SAndroid Build Coastguard Worker { 582*8975f5c5SAndroid Build Coastguard Worker vk::ShaderProgramHelper program; 583*8975f5c5SAndroid Build Coastguard Worker vk::ComputePipelineCache pipelines; 584*8975f5c5SAndroid Build Coastguard Worker }; 585*8975f5c5SAndroid Build Coastguard Worker 586*8975f5c5SAndroid Build Coastguard Worker // Common functions that create the pipeline for the specified function, binds it and prepares 587*8975f5c5SAndroid Build Coastguard Worker // the draw/dispatch call. 588*8975f5c5SAndroid Build Coastguard Worker angle::Result setupComputeProgram( 589*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 590*8975f5c5SAndroid Build Coastguard Worker Function function, 591*8975f5c5SAndroid Build Coastguard Worker const vk::ShaderModulePtr &csShader, 592*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines *programAndPipelines, 593*8975f5c5SAndroid Build Coastguard Worker const VkDescriptorSet descriptorSet, 594*8975f5c5SAndroid Build Coastguard Worker const void *pushConstants, 595*8975f5c5SAndroid Build Coastguard Worker size_t pushConstantsSize, 596*8975f5c5SAndroid Build Coastguard Worker vk::OutsideRenderPassCommandBufferHelper *commandBufferHelper); 597*8975f5c5SAndroid Build Coastguard Worker angle::Result setupGraphicsProgramWithLayout( 598*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 599*8975f5c5SAndroid Build Coastguard Worker const vk::PipelineLayout &pipelineLayout, 600*8975f5c5SAndroid Build Coastguard Worker const vk::ShaderModulePtr &vsShader, 601*8975f5c5SAndroid Build Coastguard Worker const vk::ShaderModulePtr &fsShader, 602*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines *programAndPipelines, 603*8975f5c5SAndroid Build Coastguard Worker const vk::GraphicsPipelineDesc *pipelineDesc, 604*8975f5c5SAndroid Build Coastguard Worker const VkDescriptorSet descriptorSet, 605*8975f5c5SAndroid Build Coastguard Worker const void *pushConstants, 606*8975f5c5SAndroid Build Coastguard Worker size_t pushConstantsSize, 607*8975f5c5SAndroid Build Coastguard Worker vk::RenderPassCommandBuffer *commandBuffer); 608*8975f5c5SAndroid Build Coastguard Worker angle::Result setupGraphicsProgram(ContextVk *contextVk, 609*8975f5c5SAndroid Build Coastguard Worker Function function, 610*8975f5c5SAndroid Build Coastguard Worker const vk::ShaderModulePtr &vsShader, 611*8975f5c5SAndroid Build Coastguard Worker const vk::ShaderModulePtr &fsShader, 612*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines *programAndPipelines, 613*8975f5c5SAndroid Build Coastguard Worker const vk::GraphicsPipelineDesc *pipelineDesc, 614*8975f5c5SAndroid Build Coastguard Worker const VkDescriptorSet descriptorSet, 615*8975f5c5SAndroid Build Coastguard Worker const void *pushConstants, 616*8975f5c5SAndroid Build Coastguard Worker size_t pushConstantsSize, 617*8975f5c5SAndroid Build Coastguard Worker vk::RenderPassCommandBuffer *commandBuffer); 618*8975f5c5SAndroid Build Coastguard Worker 619*8975f5c5SAndroid Build Coastguard Worker // Initializes descriptor set layout, pipeline layout and descriptor pool corresponding to given 620*8975f5c5SAndroid Build Coastguard Worker // function, if not already initialized. Uses setSizes to create the layout. For example, if 621*8975f5c5SAndroid Build Coastguard Worker // this array has two entries {STORAGE_TEXEL_BUFFER, 1} and {UNIFORM_TEXEL_BUFFER, 3}, then the 622*8975f5c5SAndroid Build Coastguard Worker // created set layout would be binding 0 for storage texel buffer and bindings 1 through 3 for 623*8975f5c5SAndroid Build Coastguard Worker // uniform texel buffer. All resources are put in set 0. 624*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureResourcesInitialized(ContextVk *contextVk, 625*8975f5c5SAndroid Build Coastguard Worker Function function, 626*8975f5c5SAndroid Build Coastguard Worker VkDescriptorPoolSize *setSizes, 627*8975f5c5SAndroid Build Coastguard Worker size_t setSizesCount, 628*8975f5c5SAndroid Build Coastguard Worker size_t pushConstantsSize); 629*8975f5c5SAndroid Build Coastguard Worker 630*8975f5c5SAndroid Build Coastguard Worker // Initializers corresponding to functions, calling into ensureResourcesInitialized with the 631*8975f5c5SAndroid Build Coastguard Worker // appropriate parameters. 632*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureConvertIndexResourcesInitialized(ContextVk *contextVk); 633*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureConvertIndexIndirectResourcesInitialized(ContextVk *contextVk); 634*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureConvertIndexIndirectLineLoopResourcesInitialized(ContextVk *contextVk); 635*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureConvertIndirectLineLoopResourcesInitialized(ContextVk *contextVk); 636*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureConvertVertexResourcesInitialized(ContextVk *contextVk); 637*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureImageClearResourcesInitialized(ContextVk *contextVk); 638*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureImageCopyResourcesInitialized(ContextVk *contextVk); 639*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureCopyImageToBufferResourcesInitialized(ContextVk *contextVk); 640*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureBlitResolveResourcesInitialized(ContextVk *contextVk); 641*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureBlitResolveStencilNoExportResourcesInitialized(ContextVk *contextVk); 642*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureExportStencilResourcesInitialized(ContextVk *contextVk); 643*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureOverlayDrawResourcesInitialized(ContextVk *contextVk); 644*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureGenerateMipmapResourcesInitialized(ContextVk *contextVk); 645*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureTransCodeEtcToBcResourcesInitialized(ContextVk *contextVk); 646*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureUnresolveResourcesInitialized(ContextVk *contextVk, 647*8975f5c5SAndroid Build Coastguard Worker Function function, 648*8975f5c5SAndroid Build Coastguard Worker uint32_t attachmentIndex); 649*8975f5c5SAndroid Build Coastguard Worker 650*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureImageCopyResourcesInitializedWithSampler( 651*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 652*8975f5c5SAndroid Build Coastguard Worker const vk::SamplerDesc &samplerDesc); 653*8975f5c5SAndroid Build Coastguard Worker 654*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureSamplersInitialized(ContextVk *context); 655*8975f5c5SAndroid Build Coastguard Worker 656*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureGenerateFragmentShadingRateResourcesInitialized(ContextVk *contextVk); 657*8975f5c5SAndroid Build Coastguard Worker 658*8975f5c5SAndroid Build Coastguard Worker angle::Result startRenderPass(ContextVk *contextVk, 659*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *image, 660*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *imageView, 661*8975f5c5SAndroid Build Coastguard Worker const vk::RenderPassDesc &renderPassDesc, 662*8975f5c5SAndroid Build Coastguard Worker const gl::Rectangle &renderArea, 663*8975f5c5SAndroid Build Coastguard Worker const VkImageAspectFlags aspectFlags, 664*8975f5c5SAndroid Build Coastguard Worker const VkClearValue *clearValue, 665*8975f5c5SAndroid Build Coastguard Worker vk::RenderPassSource renderPassSource, 666*8975f5c5SAndroid Build Coastguard Worker vk::RenderPassCommandBuffer **commandBufferOut); 667*8975f5c5SAndroid Build Coastguard Worker 668*8975f5c5SAndroid Build Coastguard Worker // Set up descriptor set and call dispatch. 669*8975f5c5SAndroid Build Coastguard Worker angle::Result convertVertexBufferImpl( 670*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 671*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *dst, 672*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *src, 673*8975f5c5SAndroid Build Coastguard Worker uint32_t flags, 674*8975f5c5SAndroid Build Coastguard Worker vk::OutsideRenderPassCommandBufferHelper *commandBufferHelper, 675*8975f5c5SAndroid Build Coastguard Worker const ConvertVertexShaderParams &shaderParams, 676*8975f5c5SAndroid Build Coastguard Worker const OffsetAndVertexCounts &additionalOffsetVertexCounts); 677*8975f5c5SAndroid Build Coastguard Worker 678*8975f5c5SAndroid Build Coastguard Worker // Blits or resolves either color or depth/stencil, based on which view is given. 679*8975f5c5SAndroid Build Coastguard Worker angle::Result blitResolveImpl(ContextVk *contextVk, 680*8975f5c5SAndroid Build Coastguard Worker FramebufferVk *framebuffer, 681*8975f5c5SAndroid Build Coastguard Worker vk::ImageHelper *src, 682*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcColorView, 683*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcDepthView, 684*8975f5c5SAndroid Build Coastguard Worker const vk::ImageView *srcStencilView, 685*8975f5c5SAndroid Build Coastguard Worker const BlitResolveParameters ¶ms); 686*8975f5c5SAndroid Build Coastguard Worker 687*8975f5c5SAndroid Build Coastguard Worker // Allocates a single descriptor set. 688*8975f5c5SAndroid Build Coastguard Worker angle::Result allocateDescriptorSetWithLayout( 689*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 690*8975f5c5SAndroid Build Coastguard Worker vk::CommandBufferHelperCommon *commandBufferHelper, 691*8975f5c5SAndroid Build Coastguard Worker vk::DynamicDescriptorPool &descriptorPool, 692*8975f5c5SAndroid Build Coastguard Worker const vk::DescriptorSetLayout &descriptorSetLayout, 693*8975f5c5SAndroid Build Coastguard Worker VkDescriptorSet *descriptorSetOut); 694*8975f5c5SAndroid Build Coastguard Worker 695*8975f5c5SAndroid Build Coastguard Worker angle::Result allocateDescriptorSet(ContextVk *contextVk, 696*8975f5c5SAndroid Build Coastguard Worker vk::CommandBufferHelperCommon *commandBufferHelper, 697*8975f5c5SAndroid Build Coastguard Worker Function function, 698*8975f5c5SAndroid Build Coastguard Worker VkDescriptorSet *descriptorSetOut); 699*8975f5c5SAndroid Build Coastguard Worker 700*8975f5c5SAndroid Build Coastguard Worker angle::Result allocateDescriptorSetForImageCopyWithSampler( 701*8975f5c5SAndroid Build Coastguard Worker ContextVk *contextVk, 702*8975f5c5SAndroid Build Coastguard Worker vk::CommandBufferHelperCommon *commandBufferHelper, 703*8975f5c5SAndroid Build Coastguard Worker const vk::SamplerDesc &samplerDesc, 704*8975f5c5SAndroid Build Coastguard Worker VkDescriptorSet *descriptorSetOut); 705*8975f5c5SAndroid Build Coastguard Worker 706*8975f5c5SAndroid Build Coastguard Worker angle::PackedEnumMap<Function, vk::DescriptorSetLayoutPointerArray> mDescriptorSetLayouts; 707*8975f5c5SAndroid Build Coastguard Worker angle::PackedEnumMap<Function, vk::PipelineLayoutPtr> mPipelineLayouts; 708*8975f5c5SAndroid Build Coastguard Worker angle::PackedEnumMap<Function, vk::DynamicDescriptorPool> mDescriptorPools; 709*8975f5c5SAndroid Build Coastguard Worker 710*8975f5c5SAndroid Build Coastguard Worker std::unordered_map<vk::SamplerDesc, vk::DescriptorSetLayoutPointerArray> 711*8975f5c5SAndroid Build Coastguard Worker mImageCopyWithSamplerDescriptorSetLayouts; 712*8975f5c5SAndroid Build Coastguard Worker std::unordered_map<vk::SamplerDesc, vk::PipelineLayoutPtr> mImageCopyWithSamplerPipelineLayouts; 713*8975f5c5SAndroid Build Coastguard Worker std::unordered_map<vk::SamplerDesc, vk::DynamicDescriptorPool> 714*8975f5c5SAndroid Build Coastguard Worker mImageCopyWithSamplerDescriptorPools; 715*8975f5c5SAndroid Build Coastguard Worker 716*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines 717*8975f5c5SAndroid Build Coastguard Worker mConvertIndex[vk::InternalShader::ConvertIndex_comp::kArrayLen]; 718*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines mConvertIndexIndirectLineLoop 719*8975f5c5SAndroid Build Coastguard Worker [vk::InternalShader::ConvertIndexIndirectLineLoop_comp::kArrayLen]; 720*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines 721*8975f5c5SAndroid Build Coastguard Worker mConvertIndirectLineLoop[vk::InternalShader::ConvertIndirectLineLoop_comp::kArrayLen]; 722*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines 723*8975f5c5SAndroid Build Coastguard Worker mConvertVertex[vk::InternalShader::ConvertVertex_comp::kArrayLen]; 724*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines mImageClearVSOnly; 725*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines mImageClear[vk::InternalShader::ImageClear_frag::kArrayLen]; 726*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines mImageCopy[vk::InternalShader::ImageCopy_frag::kArrayLen]; 727*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines mImageCopyFloat; 728*8975f5c5SAndroid Build Coastguard Worker std::unordered_map<vk::SamplerDesc, GraphicsShaderProgramAndPipelines> mImageCopyWithSampler; 729*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines 730*8975f5c5SAndroid Build Coastguard Worker mCopyImageToBuffer[vk::InternalShader::CopyImageToBuffer_comp::kArrayLen]; 731*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines mBlitResolve[vk::InternalShader::BlitResolve_frag::kArrayLen]; 732*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines mBlit3DSrc[vk::InternalShader::Blit3DSrc_frag::kArrayLen]; 733*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines 734*8975f5c5SAndroid Build Coastguard Worker mBlitResolveStencilNoExport[vk::InternalShader::BlitResolveStencilNoExport_comp::kArrayLen]; 735*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines mExportStencil; 736*8975f5c5SAndroid Build Coastguard Worker GraphicsShaderProgramAndPipelines mOverlayDraw; 737*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines 738*8975f5c5SAndroid Build Coastguard Worker mGenerateMipmap[vk::InternalShader::GenerateMipmap_comp::kArrayLen]; 739*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines mEtcToBc[vk::InternalShader::EtcToBc_comp::kArrayLen]; 740*8975f5c5SAndroid Build Coastguard Worker 741*8975f5c5SAndroid Build Coastguard Worker // Unresolve shaders are special as they are generated on the fly due to the large number of 742*8975f5c5SAndroid Build Coastguard Worker // combinations. 743*8975f5c5SAndroid Build Coastguard Worker std::unordered_map<uint32_t, vk::ShaderModulePtr> mUnresolveFragShaders; 744*8975f5c5SAndroid Build Coastguard Worker std::unordered_map<uint32_t, GraphicsShaderProgramAndPipelines> mUnresolve; 745*8975f5c5SAndroid Build Coastguard Worker 746*8975f5c5SAndroid Build Coastguard Worker ComputeShaderProgramAndPipelines mGenerateFragmentShadingRateAttachment; 747*8975f5c5SAndroid Build Coastguard Worker 748*8975f5c5SAndroid Build Coastguard Worker vk::Sampler mPointSampler; 749*8975f5c5SAndroid Build Coastguard Worker vk::Sampler mLinearSampler; 750*8975f5c5SAndroid Build Coastguard Worker }; 751*8975f5c5SAndroid Build Coastguard Worker 752*8975f5c5SAndroid Build Coastguard Worker // This class' responsibility is to create index buffers needed to support line loops in Vulkan. 753*8975f5c5SAndroid Build Coastguard Worker // In the setup phase of drawing, the createIndexBuffer method should be called with the 754*8975f5c5SAndroid Build Coastguard Worker // current draw call parameters. If an element array buffer is bound for an indexed draw, use 755*8975f5c5SAndroid Build Coastguard Worker // createIndexBufferFromElementArrayBuffer. 756*8975f5c5SAndroid Build Coastguard Worker // 757*8975f5c5SAndroid Build Coastguard Worker // If the user wants to draw a loop between [v1, v2, v3], we will create an indexed buffer with 758*8975f5c5SAndroid Build Coastguard Worker // these indexes: [0, 1, 2, 3, 0] to emulate the loop. 759*8975f5c5SAndroid Build Coastguard Worker class LineLoopHelper final : angle::NonCopyable 760*8975f5c5SAndroid Build Coastguard Worker { 761*8975f5c5SAndroid Build Coastguard Worker public: 762*8975f5c5SAndroid Build Coastguard Worker LineLoopHelper(vk::Renderer *renderer); 763*8975f5c5SAndroid Build Coastguard Worker ~LineLoopHelper(); 764*8975f5c5SAndroid Build Coastguard Worker 765*8975f5c5SAndroid Build Coastguard Worker angle::Result getIndexBufferForDrawArrays(ContextVk *contextVk, 766*8975f5c5SAndroid Build Coastguard Worker uint32_t clampedVertexCount, 767*8975f5c5SAndroid Build Coastguard Worker GLint firstVertex, 768*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper **bufferOut); 769*8975f5c5SAndroid Build Coastguard Worker 770*8975f5c5SAndroid Build Coastguard Worker angle::Result getIndexBufferForElementArrayBuffer(ContextVk *contextVk, 771*8975f5c5SAndroid Build Coastguard Worker BufferVk *elementArrayBufferVk, 772*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType glIndexType, 773*8975f5c5SAndroid Build Coastguard Worker int indexCount, 774*8975f5c5SAndroid Build Coastguard Worker intptr_t elementArrayOffset, 775*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper **bufferOut, 776*8975f5c5SAndroid Build Coastguard Worker uint32_t *indexCountOut); 777*8975f5c5SAndroid Build Coastguard Worker 778*8975f5c5SAndroid Build Coastguard Worker angle::Result streamIndices(ContextVk *contextVk, 779*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType glIndexType, 780*8975f5c5SAndroid Build Coastguard Worker GLsizei indexCount, 781*8975f5c5SAndroid Build Coastguard Worker const uint8_t *srcPtr, 782*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper **bufferOut, 783*8975f5c5SAndroid Build Coastguard Worker uint32_t *indexCountOut); 784*8975f5c5SAndroid Build Coastguard Worker 785*8975f5c5SAndroid Build Coastguard Worker angle::Result streamIndicesIndirect(ContextVk *contextVk, 786*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType glIndexType, 787*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *indexBuffer, 788*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *indirectBuffer, 789*8975f5c5SAndroid Build Coastguard Worker VkDeviceSize indirectBufferOffset, 790*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper **indexBufferOut, 791*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper **indirectBufferOut); 792*8975f5c5SAndroid Build Coastguard Worker 793*8975f5c5SAndroid Build Coastguard Worker angle::Result streamArrayIndirect(ContextVk *contextVk, 794*8975f5c5SAndroid Build Coastguard Worker size_t vertexCount, 795*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *arrayIndirectBuffer, 796*8975f5c5SAndroid Build Coastguard Worker VkDeviceSize arrayIndirectBufferOffset, 797*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper **indexBufferOut, 798*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper **indexIndirectBufferOut); 799*8975f5c5SAndroid Build Coastguard Worker 800*8975f5c5SAndroid Build Coastguard Worker void release(ContextVk *contextVk); 801*8975f5c5SAndroid Build Coastguard Worker void destroy(vk::Renderer *renderer); 802*8975f5c5SAndroid Build Coastguard Worker getCurrentIndexBuffer()803*8975f5c5SAndroid Build Coastguard Worker vk::BufferHelper *getCurrentIndexBuffer() { return mDynamicIndexBuffer.getBuffer(); } 804*8975f5c5SAndroid Build Coastguard Worker Draw(uint32_t count,uint32_t baseVertex,vk::RenderPassCommandBuffer * commandBuffer)805*8975f5c5SAndroid Build Coastguard Worker static void Draw(uint32_t count, 806*8975f5c5SAndroid Build Coastguard Worker uint32_t baseVertex, 807*8975f5c5SAndroid Build Coastguard Worker vk::RenderPassCommandBuffer *commandBuffer) 808*8975f5c5SAndroid Build Coastguard Worker { 809*8975f5c5SAndroid Build Coastguard Worker // Our first index is always 0 because that's how we set it up in createIndexBuffer*. 810*8975f5c5SAndroid Build Coastguard Worker commandBuffer->drawIndexedBaseVertex(count, baseVertex); 811*8975f5c5SAndroid Build Coastguard Worker } 812*8975f5c5SAndroid Build Coastguard Worker 813*8975f5c5SAndroid Build Coastguard Worker private: 814*8975f5c5SAndroid Build Coastguard Worker ConversionBuffer mDynamicIndexBuffer; 815*8975f5c5SAndroid Build Coastguard Worker ConversionBuffer mDynamicIndirectBuffer; 816*8975f5c5SAndroid Build Coastguard Worker }; 817*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 818*8975f5c5SAndroid Build Coastguard Worker 819*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_VULKAN_UTILSVK_H_ 820