diff options
author | 2016-04-26 08:01:44 -0700 | |
---|---|---|
committer | 2016-04-26 08:01:44 -0700 | |
commit | 62340067270c5c3365afa6b40b8e995ae6a6c1ec (patch) | |
tree | 2af5aa524fbf2dd915b652524c23ee76d0dda8ca /src/gpu/vk/GrVkPipelineState.cpp | |
parent | 9d5e47f35470edf754dfd4d6fb8e0587b9c8096c (diff) |
Add automatic generation of mipmaps to Vulkan
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1916563002
Review URL: https://codereview.chromium.org/1916563002
Diffstat (limited to 'src/gpu/vk/GrVkPipelineState.cpp')
-rw-r--r-- | src/gpu/vk/GrVkPipelineState.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp index 0194e290ad..4fe292917a 100644 --- a/src/gpu/vk/GrVkPipelineState.cpp +++ b/src/gpu/vk/GrVkPipelineState.cpp @@ -8,6 +8,7 @@ #include "GrVkPipelineState.h" #include "GrPipeline.h" +#include "GrTexturePriv.h" #include "GrVkCommandBuffer.h" #include "GrVkDescriptorPool.h" #include "GrVkGpu.h" @@ -21,6 +22,7 @@ #include "glsl/GrGLSLFragmentProcessor.h" #include "glsl/GrGLSLGeometryProcessor.h" #include "glsl/GrGLSLXferProcessor.h" +#include "SkMipmap.h" GrVkPipelineState::GrVkPipelineState(GrVkGpu* gpu, const GrVkPipelineState::Desc& desc, @@ -290,9 +292,17 @@ void GrVkPipelineState::writeSamplers(GrVkGpu* gpu, for (int i = 0; i < textureBindings.count(); ++i) { const GrTextureParams& params = textureBindings[i]->getParams(); - fSamplers.push(gpu->resourceProvider().findOrCreateCompatibleSampler(params)); GrVkTexture* texture = static_cast<GrVkTexture*>(textureBindings[i]->getTexture()); + if (GrTextureParams::kMipMap_FilterMode == params.filterMode()) { + if (texture->texturePriv().mipMapsAreDirty()) { + gpu->generateMipmap(texture); + texture->texturePriv().dirtyMipMaps(false); + } + } + + fSamplers.push(gpu->resourceProvider().findOrCreateCompatibleSampler(params, + texture->texturePriv().maxMipMapLevel())); const GrVkImage::Resource* textureResource = texture->resource(); textureResource->ref(); |