Chromium Code Reviews| Index: src/gpu/vk/GrVkPipelineStateBuilder.cpp |
| diff --git a/src/gpu/vk/GrVkPipelineStateBuilder.cpp b/src/gpu/vk/GrVkPipelineStateBuilder.cpp |
| index a191505a38c89375626622625305b3629278c94a..ff88ba30a830a14b6ac23224c3f385d2830fe6d9 100644 |
| --- a/src/gpu/vk/GrVkPipelineStateBuilder.cpp |
| +++ b/src/gpu/vk/GrVkPipelineStateBuilder.cpp |
| @@ -9,6 +9,9 @@ |
| #include "vk/GrVkGpu.h" |
| #include "vk/GrVkRenderPass.h" |
| +#if USE_SKSL |
| +#include "SkSLCompiler.h" |
| +#endif |
| GrVkPipelineState* GrVkPipelineStateBuilder::CreatePipelineState( |
| GrVkGpu* gpu, |
| @@ -72,6 +75,15 @@ VkShaderStageFlags visibility_to_vk_stage_flags(uint32_t visibility) { |
| return flags; |
| } |
| +#if USE_SKSL |
| +SkSL::Program::Kind vk_shader_stage_to_skiasl_kind(VkShaderStageFlagBits stage) { |
| + if (VK_SHADER_STAGE_VERTEX_BIT == stage) { |
| + return SkSL::Program::kVertex_Kind; |
| + } |
| + SkASSERT(VK_SHADER_STAGE_FRAGMENT_BIT == stage); |
| + return SkSL::Program::kFragment_Kind; |
| +} |
| +#else |
| shaderc_shader_kind vk_shader_stage_to_shaderc_kind(VkShaderStageFlagBits stage) { |
| if (VK_SHADER_STAGE_VERTEX_BIT == stage) { |
| return shaderc_glsl_vertex_shader; |
| @@ -79,12 +91,16 @@ shaderc_shader_kind vk_shader_stage_to_shaderc_kind(VkShaderStageFlagBits stage) |
| SkASSERT(VK_SHADER_STAGE_FRAGMENT_BIT == stage); |
| return shaderc_glsl_fragment_shader; |
| } |
| +#endif |
| +#include <fstream> |
| +#include <sstream> |
| bool GrVkPipelineStateBuilder::CreateVkShaderModule(const GrVkGpu* gpu, |
| VkShaderStageFlagBits stage, |
| const GrGLSLShaderBuilder& builder, |
| VkShaderModule* shaderModule, |
| VkPipelineShaderStageCreateInfo* stageInfo) { |
| + std::stringstream buffer; |
|
dogben
2016/06/20 16:23:17
Unused?
ethannicholas
2016/06/20 17:45:49
A bit of debug code I failed to remove. Oops!
dogben
2016/06/28 02:14:53
(Still there.)
|
| SkString shaderString; |
| for (int i = 0; i < builder.fCompilerStrings.count(); ++i) { |
| if (builder.fCompilerStrings[i]) { |
| @@ -99,13 +115,28 @@ bool GrVkPipelineStateBuilder::CreateVkShaderModule(const GrVkGpu* gpu, |
| moduleCreateInfo.pNext = nullptr; |
| moduleCreateInfo.flags = 0; |
| +#if USE_SKSL |
| + std::string code; |
| +#else |
| shaderc_compilation_result_t result = nullptr; |
| +#endif |
| if (gpu->vkCaps().canUseGLSLForShaderModule()) { |
| moduleCreateInfo.codeSize = strlen(shaderString.c_str()); |
| moduleCreateInfo.pCode = (const uint32_t*)shaderString.c_str(); |
| } else { |
| +#if USE_SKSL |
| + bool result = gpu->shaderCompiler()->toSPIRV(vk_shader_stage_to_skiasl_kind(stage), |
| + std::string(shaderString.c_str()), |
| + &code); |
| + if (!result) { |
| + SkDebugf("%s\n", gpu->shaderCompiler()->errorText().c_str()); |
| + return false; |
| + } |
| + moduleCreateInfo.codeSize = code.size(); |
| + moduleCreateInfo.pCode = (const uint32_t*) code.c_str(); |
| +#else |
| shaderc_compiler_t compiler = gpu->shadercCompiler(); |
| shaderc_compile_options_t options = shaderc_compile_options_initialize(); |
| @@ -125,18 +156,22 @@ bool GrVkPipelineStateBuilder::CreateVkShaderModule(const GrVkGpu* gpu, |
| SkDebugf("%s\n", shaderc_result_get_error_message(result)); |
| return false; |
| } |
| -#endif |
| +#endif // SK_DEBUG |
| moduleCreateInfo.codeSize = shaderc_result_get_length(result); |
| moduleCreateInfo.pCode = (const uint32_t*)shaderc_result_get_bytes(result); |
| +#endif // USE_SKSL |
| } |
| VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateShaderModule(gpu->device(), |
| &moduleCreateInfo, |
| nullptr, |
| shaderModule)); |
| + |
| if (!gpu->vkCaps().canUseGLSLForShaderModule()) { |
| +#if !USE_SKSL |
| shaderc_result_release(result); |
| +#endif |
| } |
| if (err) { |
| return false; |