Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Side by Side Diff: src/gpu/vk/GrVkCaps.cpp

Issue 1832613003: Revise layer, extension and feature setup for Vulkan (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Remove extra def of ENABLE_VK_LAYERS Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/vk/GrVkCaps.h ('k') | src/gpu/vk/GrVkExtensions.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrVkCaps.h" 8 #include "GrVkCaps.h"
9 9
10 #include "GrVkUtil.h" 10 #include "GrVkUtil.h"
11 #include "glsl/GrGLSLCaps.h" 11 #include "glsl/GrGLSLCaps.h"
12 #include "vk/GrVkInterface.h" 12 #include "vk/GrVkInterface.h"
13 #include "vk/GrVkBackendContext.h"
13 14
14 GrVkCaps::GrVkCaps(const GrContextOptions& contextOptions, const GrVkInterface* vkInterface, 15 GrVkCaps::GrVkCaps(const GrContextOptions& contextOptions, const GrVkInterface* vkInterface,
15 VkPhysicalDevice physDev) : INHERITED(contextOptions) { 16 VkPhysicalDevice physDev, uint32_t featureFlags) : INHERITED( contextOptions) {
16 /************************************************************************** 17 /**************************************************************************
17 * GrDrawTargetCaps fields 18 * GrDrawTargetCaps fields
18 **************************************************************************/ 19 **************************************************************************/
19 fMipMapSupport = false; //TODO: figure this out 20 fMipMapSupport = false; //TODO: figure this out
20 fNPOTTextureTileSupport = false; //TODO: figure this out 21 fNPOTTextureTileSupport = false; //TODO: figure this out
21 fTwoSidedStencilSupport = false; //TODO: figure this out 22 fTwoSidedStencilSupport = false; //TODO: figure this out
22 fStencilWrapOpsSupport = false; //TODO: figure this out 23 fStencilWrapOpsSupport = false; //TODO: figure this out
23 fDiscardRenderTargetSupport = false; //TODO: figure this out 24 fDiscardRenderTargetSupport = false; //TODO: figure this out
24 fReuseScratchTextures = true; //TODO: figure this out 25 fReuseScratchTextures = true; //TODO: figure this out
25 fGpuTracingSupport = false; //TODO: figure this out 26 fGpuTracingSupport = false; //TODO: figure this out
26 fCompressedTexSubImageSupport = false; //TODO: figure this out 27 fCompressedTexSubImageSupport = false; //TODO: figure this out
27 fOversizedStencilSupport = false; //TODO: figure this out 28 fOversizedStencilSupport = false; //TODO: figure this out
28 29
29 fUseDrawInsteadOfClear = false; //TODO: figure this out 30 fUseDrawInsteadOfClear = false; //TODO: figure this out
30 31
31 fMapBufferFlags = kNone_MapFlags; //TODO: figure this out 32 fMapBufferFlags = kNone_MapFlags; //TODO: figure this out
32 fGeometryBufferMapThreshold = SK_MaxS32; //TODO: figure this out 33 fGeometryBufferMapThreshold = SK_MaxS32; //TODO: figure this out
33 34
34 fMaxRenderTargetSize = 4096; // minimum required by spec 35 fMaxRenderTargetSize = 4096; // minimum required by spec
35 fMaxTextureSize = 4096; // minimum required by spec 36 fMaxTextureSize = 4096; // minimum required by spec
36 fMaxColorSampleCount = 4; // minimum required by spec 37 fMaxColorSampleCount = 4; // minimum required by spec
37 fMaxStencilSampleCount = 4; // minimum required by spec 38 fMaxStencilSampleCount = 4; // minimum required by spec
38 39
39 40
40 fShaderCaps.reset(new GrGLSLCaps(contextOptions)); 41 fShaderCaps.reset(new GrGLSLCaps(contextOptions));
41 42
42 this->init(contextOptions, vkInterface, physDev); 43 this->init(contextOptions, vkInterface, physDev, featureFlags);
43 } 44 }
44 45
45 void GrVkCaps::init(const GrContextOptions& contextOptions, const GrVkInterface* vkInterface, 46 void GrVkCaps::init(const GrContextOptions& contextOptions, const GrVkInterface* vkInterface,
46 VkPhysicalDevice physDev) { 47 VkPhysicalDevice physDev, uint32_t featureFlags) {
47 48
48 VkPhysicalDeviceProperties properties; 49 VkPhysicalDeviceProperties properties;
49 GR_VK_CALL(vkInterface, GetPhysicalDeviceProperties(physDev, &properties)); 50 GR_VK_CALL(vkInterface, GetPhysicalDeviceProperties(physDev, &properties));
50 51
51 VkPhysicalDeviceFeatures features;
52 GR_VK_CALL(vkInterface, GetPhysicalDeviceFeatures(physDev, &features));
53
54 VkPhysicalDeviceMemoryProperties memoryProperties; 52 VkPhysicalDeviceMemoryProperties memoryProperties;
55 GR_VK_CALL(vkInterface, GetPhysicalDeviceMemoryProperties(physDev, &memoryPr operties)); 53 GR_VK_CALL(vkInterface, GetPhysicalDeviceMemoryProperties(physDev, &memoryPr operties));
56 54
57 this->initGrCaps(properties, features, memoryProperties); 55 this->initGrCaps(properties, memoryProperties, featureFlags);
58 this->initGLSLCaps(features, properties); 56 this->initGLSLCaps(properties, featureFlags);
59 this->initConfigTexturableTable(vkInterface, physDev); 57 this->initConfigTexturableTable(vkInterface, physDev);
60 this->initConfigRenderableTable(vkInterface, physDev); 58 this->initConfigRenderableTable(vkInterface, physDev);
61 this->initStencilFormats(vkInterface, physDev); 59 this->initStencilFormats(vkInterface, physDev);
62 60
63 61
64 62
65 this->applyOptionsOverrides(contextOptions); 63 this->applyOptionsOverrides(contextOptions);
66 // need to friend GrVkCaps in GrGLSLCaps.h 64 // need to friend GrVkCaps in GrGLSLCaps.h
67 // GrGLSLCaps* glslCaps = static_cast<GrGLSLCaps*>(fShaderCaps.get()); 65 // GrGLSLCaps* glslCaps = static_cast<GrGLSLCaps*>(fShaderCaps.get());
68 // glslCaps->applyOptionsOverrides(contextOptions); 66 // glslCaps->applyOptionsOverrides(contextOptions);
(...skipping 24 matching lines...) Expand all
93 91
94 void GrVkCaps::initSampleCount(const VkPhysicalDeviceProperties& properties) { 92 void GrVkCaps::initSampleCount(const VkPhysicalDeviceProperties& properties) {
95 VkSampleCountFlags colorSamples = properties.limits.framebufferColorSampleCo unts; 93 VkSampleCountFlags colorSamples = properties.limits.framebufferColorSampleCo unts;
96 VkSampleCountFlags stencilSamples = properties.limits.framebufferStencilSamp leCounts; 94 VkSampleCountFlags stencilSamples = properties.limits.framebufferStencilSamp leCounts;
97 95
98 fMaxColorSampleCount = get_max_sample_count(colorSamples); 96 fMaxColorSampleCount = get_max_sample_count(colorSamples);
99 fMaxStencilSampleCount = get_max_sample_count(stencilSamples); 97 fMaxStencilSampleCount = get_max_sample_count(stencilSamples);
100 } 98 }
101 99
102 void GrVkCaps::initGrCaps(const VkPhysicalDeviceProperties& properties, 100 void GrVkCaps::initGrCaps(const VkPhysicalDeviceProperties& properties,
103 const VkPhysicalDeviceFeatures& features, 101 const VkPhysicalDeviceMemoryProperties& memoryProperti es,
104 const VkPhysicalDeviceMemoryProperties& memoryProperit es) { 102 uint32_t featureFlags) {
105 fMaxVertexAttributes = properties.limits.maxVertexInputAttributes; 103 fMaxVertexAttributes = properties.limits.maxVertexInputAttributes;
106 // We could actually query and get a max size for each config, however maxIm ageDimension2D will 104 // We could actually query and get a max size for each config, however maxIm ageDimension2D will
107 // give the minimum max size across all configs. So for simplicity we will u se that for now. 105 // give the minimum max size across all configs. So for simplicity we will u se that for now.
108 fMaxRenderTargetSize = properties.limits.maxImageDimension2D; 106 fMaxRenderTargetSize = properties.limits.maxImageDimension2D;
109 fMaxTextureSize = properties.limits.maxImageDimension2D; 107 fMaxTextureSize = properties.limits.maxImageDimension2D;
110 108
111 this->initSampleCount(properties); 109 this->initSampleCount(properties);
112 110
113 // Assuming since we will always map in the end to upload the data we might as well just map 111 // Assuming since we will always map in the end to upload the data we might as well just map
114 // from the get go. There is no hard data to suggest this is faster or slowe r. 112 // from the get go. There is no hard data to suggest this is faster or slowe r.
115 fGeometryBufferMapThreshold = 0; 113 fGeometryBufferMapThreshold = 0;
116 114
117 fMapBufferFlags = kCanMap_MapFlag | kSubset_MapFlag; 115 fMapBufferFlags = kCanMap_MapFlag | kSubset_MapFlag;
118 116
119 fStencilWrapOpsSupport = true; 117 fStencilWrapOpsSupport = true;
120 fOversizedStencilSupport = true; 118 fOversizedStencilSupport = true;
121 } 119 }
122 120
123 void GrVkCaps::initGLSLCaps(const VkPhysicalDeviceFeatures& features, 121 void GrVkCaps::initGLSLCaps(const VkPhysicalDeviceProperties& properties,
124 const VkPhysicalDeviceProperties& properties) { 122 uint32_t featureFlags) {
125 GrGLSLCaps* glslCaps = static_cast<GrGLSLCaps*>(fShaderCaps.get()); 123 GrGLSLCaps* glslCaps = static_cast<GrGLSLCaps*>(fShaderCaps.get());
126 glslCaps->fVersionDeclString = "#version 310 es\n"; 124 glslCaps->fVersionDeclString = "#version 310 es\n";
127 125
128 // fConfigOutputSwizzle will default to RGBA so we only need to set it for a lpha only config. 126 // fConfigOutputSwizzle will default to RGBA so we only need to set it for a lpha only config.
129 for (int i = 0; i < kGrPixelConfigCnt; ++i) { 127 for (int i = 0; i < kGrPixelConfigCnt; ++i) {
130 GrPixelConfig config = static_cast<GrPixelConfig>(i); 128 GrPixelConfig config = static_cast<GrPixelConfig>(i);
131 if (GrPixelConfigIsAlphaOnly(config)) { 129 if (GrPixelConfigIsAlphaOnly(config)) {
132 glslCaps->fConfigTextureSwizzle[i] = GrSwizzle::RRRR(); 130 glslCaps->fConfigTextureSwizzle[i] = GrSwizzle::RRRR();
133 glslCaps->fConfigOutputSwizzle[i] = GrSwizzle::AAAA(); 131 glslCaps->fConfigOutputSwizzle[i] = GrSwizzle::AAAA();
134 } else { 132 } else {
135 glslCaps->fConfigTextureSwizzle[i] = GrSwizzle::RGBA(); 133 glslCaps->fConfigTextureSwizzle[i] = GrSwizzle::RGBA();
136 } 134 }
137 } 135 }
138 136
139 // Vulkan is based off ES 3.0 so the following should all be supported 137 // Vulkan is based off ES 3.0 so the following should all be supported
140 glslCaps->fUsesPrecisionModifiers = true; 138 glslCaps->fUsesPrecisionModifiers = true;
141 glslCaps->fFlatInterpolationSupport = true; 139 glslCaps->fFlatInterpolationSupport = true;
142 140
143 // GrShaderCaps 141 // GrShaderCaps
144 142
145 glslCaps->fShaderDerivativeSupport = true; 143 glslCaps->fShaderDerivativeSupport = true;
146 glslCaps->fGeometryShaderSupport = features.geometryShader == VK_TRUE; 144 glslCaps->fGeometryShaderSupport = SkToBool(featureFlags & kGeometryShader_G rVkFeatureFlag);
147 #if 0 145 #if 0
148 // For now disabling dual source blending till we get it hooked up in the re st of system 146 // For now disabling dual source blending till we get it hooked up in the re st of system
149 glslCaps->fDualSourceBlendingSupport = features.dualSrcBlend; 147 glslCaps->fDualSourceBlendingSupport = SkToBool(featureFlags & kDualSrcBlend _GrVkFeatureFlag);
150 #endif 148 #endif
151 glslCaps->fIntegerSupport = true; 149 glslCaps->fIntegerSupport = true;
152 150
153 glslCaps->fMaxVertexSamplers = 151 glslCaps->fMaxVertexSamplers =
154 glslCaps->fMaxGeometrySamplers = 152 glslCaps->fMaxGeometrySamplers =
155 glslCaps->fMaxFragmentSamplers = SkTMin(properties.limits.maxPerStageDescrip torSampledImages, 153 glslCaps->fMaxFragmentSamplers = SkTMin(properties.limits.maxPerStageDescrip torSampledImages,
156 properties.limits.maxPerStageDescrip torSamplers); 154 properties.limits.maxPerStageDescrip torSamplers);
157 glslCaps->fMaxCombinedSamplers = SkTMin(properties.limits.maxDescriptorSetSa mpledImages, 155 glslCaps->fMaxCombinedSamplers = SkTMin(properties.limits.maxDescriptorSetSa mpledImages,
158 properties.limits.maxDescriptorSetSa mplers); 156 properties.limits.maxDescriptorSetSa mplers);
159 } 157 }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 // internal Format stencil bits total bits packed? 269 // internal Format stencil bits total bits packed?
272 gS8 = { VK_FORMAT_S8_UINT, 8, 8, false }, 270 gS8 = { VK_FORMAT_S8_UINT, 8, 8, false },
273 gD24S8 = { VK_FORMAT_D24_UNORM_S8_UINT, 8, 32, true }; 271 gD24S8 = { VK_FORMAT_D24_UNORM_S8_UINT, 8, 32, true };
274 272
275 // I'm simply assuming that these two will be supported since they are used in example code. 273 // I'm simply assuming that these two will be supported since they are used in example code.
276 // TODO: Actaully figure this out 274 // TODO: Actaully figure this out
277 SET_CONFIG_CAN_STENCIL(gS8); 275 SET_CONFIG_CAN_STENCIL(gS8);
278 SET_CONFIG_CAN_STENCIL(gD24S8); 276 SET_CONFIG_CAN_STENCIL(gD24S8);
279 } 277 }
280 278
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkCaps.h ('k') | src/gpu/vk/GrVkExtensions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698