void GrGLPathProgram::onSetRenderTargetState(const GrPrimitiveProcessor& primProc, const GrPipeline& pipeline) { SkASSERT(!primProc.willUseGeoShader() && primProc.numAttribs() == 0); const GrRenderTarget* rt = pipeline.getRenderTarget(); SkISize size; size.set(rt->width(), rt->height()); const GrPathProcessor& pathProc = primProc.cast<GrPathProcessor>(); fGpu->glPathRendering()->setProjectionMatrix(pathProc.viewMatrix(), size, rt->origin()); }
bool GrGpuCommandBuffer::draw(const GrPipeline& pipeline, const GrPrimitiveProcessor& primProc, const GrMesh* mesh, int meshCount) { if (primProc.numAttribs() > this->gpu()->caps()->maxVertexAttributes()) { this->gpu()->stats()->incNumFailedDraws(); return false; } this->onDraw(pipeline, primProc, mesh, meshCount); return true; }
static void setup_vertex_input_state(const GrPrimitiveProcessor& primProc, VkPipelineVertexInputStateCreateInfo* vertexInputInfo, VkVertexInputBindingDescription* bindingDesc, int maxBindingDescCount, VkVertexInputAttributeDescription* attributeDesc, int maxAttributeDescCount) { // for now we have only one vertex buffer and one binding memset(bindingDesc, 0, sizeof(VkVertexInputBindingDescription)); bindingDesc->binding = 0; bindingDesc->stride = (uint32_t)primProc.getVertexStride(); bindingDesc->inputRate = VK_VERTEX_INPUT_RATE_VERTEX; // setup attribute descriptions int vaCount = primProc.numAttribs(); SkASSERT(vaCount < maxAttributeDescCount); if (vaCount > 0) { size_t offset = 0; for (int attribIndex = 0; attribIndex < vaCount; attribIndex++) { const GrGeometryProcessor::Attribute& attrib = primProc.getAttrib(attribIndex); GrVertexAttribType attribType = attrib.fType; VkVertexInputAttributeDescription& vkAttrib = attributeDesc[attribIndex]; vkAttrib.location = attribIndex; // for now assume location = attribIndex vkAttrib.binding = 0; // for now only one vertex buffer & binding vkAttrib.format = attrib_type_to_vkformat(attribType); vkAttrib.offset = static_cast<uint32_t>(offset); offset += attrib.fOffset; } } memset(vertexInputInfo, 0, sizeof(VkPipelineVertexInputStateCreateInfo)); vertexInputInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; vertexInputInfo->pNext = nullptr; vertexInputInfo->flags = 0; vertexInputInfo->vertexBindingDescriptionCount = 1; vertexInputInfo->pVertexBindingDescriptions = bindingDesc; vertexInputInfo->vertexAttributeDescriptionCount = vaCount; vertexInputInfo->pVertexAttributeDescriptions = attributeDesc; }