aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkPipelineState.cpp
diff options
context:
space:
mode:
authorGravatar jvanverth <jvanverth@google.com>2016-04-26 08:01:44 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-26 08:01:44 -0700
commit62340067270c5c3365afa6b40b8e995ae6a6c1ec (patch)
tree2af5aa524fbf2dd915b652524c23ee76d0dda8ca /src/gpu/vk/GrVkPipelineState.cpp
parent9d5e47f35470edf754dfd4d6fb8e0587b9c8096c (diff)
Add automatic generation of mipmaps to Vulkan
Diffstat (limited to 'src/gpu/vk/GrVkPipelineState.cpp')
-rw-r--r--src/gpu/vk/GrVkPipelineState.cpp12
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();