Lines Matching +full:triangle +full:- +full:v2
7 // http://www.apache.org/licenses/LICENSE-2.0
67 index--; in setBatchIndices()
197 draw->id = id; in draw()
199 const vk::GraphicsState &pipelineState = pipeline->getCombinedState(dynamicState); in draw()
203 // pre-rasterization subsets, but only includes fragment and fragment output interface in draw()
220 pixelProcessor.setBlendConstant(fragmentOutputInterfaceState->getBlendConstants()); in draw()
223 const vk::Inputs &inputs = pipeline->getInputs(); in draw()
229 const sw::SpirvShader *fragmentShader = pipeline->getShader(VK_SHADER_STAGE_FRAGMENT_BIT).get(); in draw()
230 const sw::SpirvShader *vertexShader = pipeline->getShader(VK_SHADER_STAGE_VERTEX_BIT).get(); in draw()
232 const vk::Attachments attachments = pipeline->getAttachments(); in draw()
243 …pixelRoutine = pixelProcessor.routine(pixelState, fragmentState->getPipelineLayout(), fragmentShad… in draw()
247 draw->preRasterizationContainsImageWrite = pipeline->preRasterizationContainsImageWrite(); in draw()
248 draw->fragmentContainsImageWrite = pipeline->fragmentContainsImageWrite(); in draw()
252 int ms = hasRasterizerDiscard ? 1 : fragmentOutputInterfaceState->getSampleCount(); in draw()
257 DrawData *data = draw->data; in draw()
258 draw->occlusionQuery = occlusionQuery; in draw()
259 draw->batchDataPool = &batchDataPool; in draw()
260 draw->numPrimitives = count; in draw()
261 draw->numPrimitivesPerBatch = numPrimitivesPerBatch; in draw()
262 draw->numBatches = (count + draw->numPrimitivesPerBatch - 1) / draw->numPrimitivesPerBatch; in draw()
263 draw->topology = vertexInputInterfaceState.getTopology(); in draw()
264 draw->provokingVertexMode = preRasterizationState.getProvokingVertexMode(); in draw()
265 draw->lineRasterizationMode = preRasterizationState.getLineRasterizationMode(); in draw()
266 draw->descriptorSetObjects = inputs.getDescriptorSetObjects(); in draw()
267 draw->preRasterizationPipelineLayout = preRasterizationState.getPipelineLayout(); in draw()
268 draw->depthClipEnable = preRasterizationState.getDepthClipEnable(); in draw()
269 draw->depthClipNegativeOneToOne = preRasterizationState.getDepthClipNegativeOneToOne(); in draw()
270 data->lineWidth = preRasterizationState.getLineWidth(); in draw()
271 data->rasterizerDiscard = hasRasterizerDiscard; in draw()
273 data->descriptorSets = inputs.getDescriptorSets(); in draw()
274 data->descriptorDynamicOffsets = inputs.getDescriptorDynamicOffsets(); in draw()
279 data->input[i] = stream.buffer; in draw()
280 data->robustnessSize[i] = stream.robustnessSize; in draw()
281 data->stride[i] = inputs.getVertexStride(i); in draw()
284 data->indices = indexBuffer; in draw()
285 data->layer = layer; in draw()
286 data->instanceID = instanceID; in draw()
287 data->baseVertex = baseVertex; in draw()
288 draw->indexType = indexBuffer ? pipeline->getIndexBuffer().getIndexType() : VK_INDEX_TYPE_UINT16; in draw()
290 draw->vertexRoutine = vertexRoutine; in draw()
292 …vk::DescriptorSet::PrepareForSampling(draw->descriptorSetObjects, draw->preRasterizationPipelineLa… in draw()
304 float Z = F - N; in draw()
307 data->WxF = W * subPixF; in draw()
308 data->HxF = H * subPixF; in draw()
309 data->X0xF = X0 * subPixF - subPixF / 2; in draw()
310 data->Y0xF = Y0 * subPixF - subPixF / 2; in draw()
311 data->halfPixelX = 0.5f / W; in draw()
312 data->halfPixelY = 0.5f / H; in draw()
313 data->depthRange = Z; in draw()
314 data->depthNear = N; in draw()
315 data->constantDepthBias = preRasterizationState.getConstantDepthBias(); in draw()
316 data->slopeDepthBias = preRasterizationState.getSlopeDepthBias(); in draw()
317 data->depthBiasClamp = preRasterizationState.getDepthBiasClamp(); in draw()
322 data->depthRange = Z * 0.5f; in draw()
323 data->depthNear = (F + N) * 0.5f; in draw()
335 data->scissorX0 = clamp<int>(scissor.offset.x, x0, x1); in draw()
336 data->scissorX1 = clamp<int>(scissor.offset.x + scissor.extent.width, x0, x1); in draw()
337 data->scissorY0 = clamp<int>(scissor.offset.y, y0, y1); in draw()
338 data->scissorY1 = clamp<int>(scissor.offset.y + scissor.extent.height, y0, y1); in draw()
375 draw->setupState = setupState; in draw()
376 draw->setupRoutine = setupRoutine; in draw()
377 draw->pixelRoutine = pixelRoutine; in draw()
378 draw->setupPrimitives = setupPrimitives; in draw()
379 draw->fragmentPipelineLayout = fragmentState->getPipelineLayout(); in draw()
383 …data->stencil[0].set(fragmentState->getFrontStencil().reference, fragmentState->getFrontStencil().… in draw()
384 …data->stencil[1].set(fragmentState->getBackStencil().reference, fragmentState->getBackStencil().co… in draw()
387 data->factor = pixelProcessor.factor; in draw()
393 data->a2c0 = 0.2f; in draw()
394 data->a2c1 = 0.4f; in draw()
395 data->a2c2 = 0.6f; in draw()
396 data->a2c3 = 0.8f; in draw()
400 data->a2c0 = 0.25f; in draw()
401 data->a2c1 = 0.75f; in draw()
405 data->a2c0 = 0.5f; in draw()
415 data->occlusion[cluster] = 0; in draw()
421 const vk::Attachments attachments = pipeline->getAttachments(); in draw()
424 switch(attachments.depthBuffer->getFormat(VK_IMAGE_ASPECT_DEPTH_BIT)) in draw()
427 // Minimum is 1 unit, but account for potential floating-point rounding errors in draw()
428 data->minimumResolvableDepthDifference = 1.01f / 0xFFFF; in draw()
431 // The minimum resolvable depth difference is determined per-polygon for floating-point depth in draw()
435 …UNSUPPORTED("Depth format: %d", int(attachments.depthBuffer->getFormat(VK_IMAGE_ASPECT_DEPTH_BIT))… in draw()
442 const vk::Attachments attachments = pipeline->getAttachments(); in draw()
446 draw->colorBuffer[index] = attachments.colorBuffer[index]; in draw()
448 if(draw->colorBuffer[index]) in draw()
450 …data->colorBuffer[index] = (unsigned int *)attachments.colorBuffer[index]->getOffsetPointer({ 0, 0… in draw()
451 …data->colorPitchB[index] = attachments.colorBuffer[index]->rowPitchBytes(VK_IMAGE_ASPECT_COLOR_BIT… in draw()
452 …data->colorSliceB[index] = attachments.colorBuffer[index]->slicePitchBytes(VK_IMAGE_ASPECT_COLOR_B… in draw()
456 draw->depthBuffer = attachments.depthBuffer; in draw()
457 draw->stencilBuffer = attachments.stencilBuffer; in draw()
459 if(draw->depthBuffer) in draw()
461 …data->depthBuffer = (float *)attachments.depthBuffer->getOffsetPointer({ 0, 0, 0 }, VK_IMAGE_ASPEC… in draw()
462 data->depthPitchB = attachments.depthBuffer->rowPitchBytes(VK_IMAGE_ASPECT_DEPTH_BIT, 0); in draw()
463 data->depthSliceB = attachments.depthBuffer->slicePitchBytes(VK_IMAGE_ASPECT_DEPTH_BIT, 0); in draw()
466 if(draw->stencilBuffer) in draw()
468 …data->stencilBuffer = (unsigned char *)attachments.stencilBuffer->getOffsetPointer({ 0, 0, 0 }, VK… in draw()
469 data->stencilPitchB = attachments.stencilBuffer->rowPitchBytes(VK_IMAGE_ASPECT_STENCIL_BIT, 0); in draw()
470 … data->stencilSliceB = attachments.stencilBuffer->slicePitchBytes(VK_IMAGE_ASPECT_STENCIL_BIT, 0); in draw()
474 if(draw->fragmentPipelineLayout != draw->preRasterizationPipelineLayout) in draw()
476 …vk::DescriptorSet::PrepareForSampling(draw->descriptorSetObjects, draw->fragmentPipelineLayout, de… in draw()
482 data->pushConstants = pushConstants; in draw()
485 draw->events = events; in draw()
494 occlusionQuery->start(); in setup()
499 events->add(); in setup()
507 events->done(); in teardown()
520 if(!data->rasterizerDiscard) in teardown()
526 occlusionQuery->add(data->occlusion[cluster]); in teardown()
528 occlusionQuery->finish(); in teardown()
535 target->contentsChanged(vk::Image::DIRECT_MEMORY_ACCESS); in teardown()
539 // If pre-rasterization and fragment use the same pipeline, and pre-rasterization in teardown()
540 // also contains image writes, don't double-notify the descriptor set. in teardown()
551 draw->setup(); in run()
553 const auto numPrimitives = draw->numPrimitives; in run()
554 const auto numPrimitivesPerBatch = draw->numPrimitivesPerBatch; in run()
555 const auto numBatches = draw->numBatches; in run()
557 auto ticket = tickets->take(); in run()
559 MARL_SCOPED_EVENT("FINISH draw %d", draw->id); in run()
560 draw->teardown(device); in run()
566 auto batch = draw->batchDataPool->borrow(); in run()
567 batch->id = batchId; in run()
568 batch->firstPrimitive = batch->id * numPrimitivesPerBatch; in run()
569 …batch->numPrimitives = std::min(batch->firstPrimitive + numPrimitivesPerBatch, numPrimitives) - ba… in run()
573 batch->clusterTickets[cluster] = std::move(clusterQueues[cluster].take()); in run()
579 if(!draw->data->rasterizerDiscard) in run()
583 if(batch->numVisible > 0) in run()
592 batch->clusterTickets[cluster].done(); in run()
600 MARL_SCOPED_EVENT("VERTEX draw %d, batch %d", draw->id, batch->id); in processVertices()
607 draw->data->indices, in processVertices()
608 draw->indexType, in processVertices()
609 batch->firstPrimitive, in processVertices()
610 batch->numPrimitives, in processVertices()
611 draw->topology, in processVertices()
612 draw->provokingVertexMode); in processVertices()
615 auto &vertexTask = batch->vertexTask; in processVertices()
616 vertexTask.primitiveStart = batch->firstPrimitive; in processVertices()
618 …vertexTask.vertexCount = batch->numPrimitives * ((draw->topology == VK_PRIMITIVE_TOPOLOGY_POINT_LI… in processVertices()
619 if(vertexTask.vertexCache.drawCall != draw->id) in processVertices()
622 vertexTask.vertexCache.drawCall = draw->id; in processVertices()
625 …draw->vertexRoutine(device, &batch->triangles.front().v0, &triangleIndices[0][0], &vertexTask, dra… in processVertices()
630 MARL_SCOPED_EVENT("PRIMITIVES draw %d batch %d", draw->id, batch->id); in processPrimitives()
631 auto triangles = &batch->triangles[0]; in processPrimitives()
632 auto primitives = &batch->primitives[0]; in processPrimitives()
633 …batch->numVisible = draw->setupPrimitives(device, triangles, primitives, draw, batch->numPrimitive… in processPrimitives()
652 batch->clusterTickets[cluster].onCall([device, data, cluster] { in processPixels()
653 auto &draw = data->draw; in processPixels()
654 auto &batch = data->batch; in processPixels()
655 MARL_SCOPED_EVENT("PIXEL draw %d, batch %d, cluster %d", draw->id, batch->id, cluster); in processPixels()
656 …draw->pixelRoutine(device, &batch->primitives.front(), batch->numVisible, cluster, MaxClusterCount… in processPixels()
657 batch->clusterTickets[cluster].done(); in processPixels()
667 device->updateSamplingRoutineSnapshotCache(); in synchronize()
719 triangleIndicesOut[triangleCount][0] = triangleIndicesOut[triangleCount - 1][2]; in processPrimitiveVertices()
720 triangleIndicesOut[triangleCount][1] = triangleIndicesOut[triangleCount - 1][2]; in processPrimitiveVertices()
721 triangleIndicesOut[triangleCount][2] = triangleIndicesOut[triangleCount - 1][2]; in processPrimitiveVertices()
725 int DrawCall::setupSolidTriangles(vk::Device *device, Triangle *triangles, Primitive *primitives, c… in setupSolidTriangles()
727 auto &state = drawCall->setupState; in setupSolidTriangles()
730 const DrawData *data = drawCall->data; in setupSolidTriangles()
735 Vertex &v0 = triangles->v0; in setupSolidTriangles()
736 Vertex &v1 = triangles->v1; in setupSolidTriangles()
737 Vertex &v2 = triangles->v2; in setupSolidTriangles() local
739 Polygon polygon(&v0.position, &v1.position, &v2.position); in setupSolidTriangles()
741 if((v0.cullMask | v1.cullMask | v2.cullMask) == 0) in setupSolidTriangles()
746 if((v0.clipFlags & v1.clipFlags & v2.clipFlags) != Clipper::CLIP_FINITE) in setupSolidTriangles()
751 int clipFlagsOr = v0.clipFlags | v1.clipFlags | v2.clipFlags; in setupSolidTriangles()
760 if(drawCall->setupRoutine(device, primitives, triangles, &polygon, data)) in setupSolidTriangles()
770 int DrawCall::setupWireframeTriangles(vk::Device *device, Triangle *triangles, Primitive *primitive… in setupWireframeTriangles()
772 auto &state = drawCall->setupState; in setupWireframeTriangles()
781 const Vertex &v2 = triangles[i].v2; in setupWireframeTriangles() local
783 float A = ((float)v0.projected.y - (float)v2.projected.y) * (float)v1.projected.x + in setupWireframeTriangles()
784 ((float)v2.projected.y - (float)v1.projected.y) * (float)v0.projected.x + in setupWireframeTriangles()
785 ((float)v1.projected.y - (float)v0.projected.y) * (float)v2.projected.x; // Area in setupWireframeTriangles()
789 bit_cast<int>(v2.w); in setupWireframeTriangles()
791 A = w0w1w2 < 0 ? -A : A; in setupWireframeTriangles()
804 Triangle lines[3]; in setupWireframeTriangles()
808 lines[1].v1 = v2; in setupWireframeTriangles()
809 lines[2].v0 = v2; in setupWireframeTriangles()
825 int DrawCall::setupPointTriangles(vk::Device *device, Triangle *triangles, Primitive *primitives, c… in setupPointTriangles()
827 auto &state = drawCall->setupState; in setupPointTriangles()
836 const Vertex &v2 = triangles[i].v2; in setupPointTriangles() local
838 float d = (v0.y * v1.x - v0.x * v1.y) * v2.w + in setupPointTriangles()
839 (v0.x * v2.y - v0.y * v2.x) * v1.w + in setupPointTriangles()
840 (v2.x * v1.y - v1.x * v2.y) * v0.w; in setupPointTriangles()
852 Triangle points[3]; in setupPointTriangles()
855 points[2].v0 = v2; in setupPointTriangles()
870 int DrawCall::setupLines(vk::Device *device, Triangle *triangles, Primitive *primitives, const Draw… in setupLines()
872 auto &state = drawCall->setupState; in setupLines()
891 int DrawCall::setupPoints(vk::Device *device, Triangle *triangles, Primitive *primitives, const Dra… in setupPoints()
893 auto &state = drawCall->setupState; in setupPoints()
912 bool DrawCall::setupLine(vk::Device *device, Primitive &primitive, Triangle &triangle, const DrawCa… in setupLine() argument
914 const Vertex &v0 = triangle.v0; in setupLine()
915 const Vertex &v1 = triangle.v1; in setupLine()
938 float dx = W * (P1.x / P1.w - P0.x / P0.w); in setupLine()
939 float dy = H * (P1.y / P1.w - P0.y / P0.w); in setupLine()
968 P[0].x += -dy0w; in setupLine()
971 P[1].x += -dy1w; in setupLine()
975 P[2].y += -dx1h; in setupLine()
978 P[3].y += -dx0h; in setupLine()
987 return draw.setupRoutine(device, &primitive, &triangle, &polygon, &data); in setupLine()
994 // The ideal algorithm requires half-open line rasterization (b/80135519). in setupLine()
1013 P[0].x += -dx0; in setupLine()
1016 P[3].y += -dy0; in setupLine()
1017 P[4].x += -dx1; in setupLine()
1020 P[7].y += -dy1; in setupLine()
1024 if(dx > -dy) in setupLine()
1074 return draw.setupRoutine(device, &primitive, &triangle, &polygon, &data); in setupLine()
1079 // This algorithm does not satisfy the ideal diamond-exit rule, but does avoid the in setupLine()
1099 P[0].x += -dx0; in setupLine()
1102 P[3].y += -dy0; in setupLine()
1103 P[4].x += -dx1; in setupLine()
1106 P[7].y += -dy1; in setupLine()
1110 if(dx > -dy) in setupLine()
1152 return draw.setupRoutine(device, &primitive, &triangle, &polygon, &data); in setupLine()
1158 bool DrawCall::setupPoint(vk::Device *device, Primitive &primitive, Triangle &triangle, const DrawC… in setupPoint() argument
1160 const Vertex &v = triangle.v0; in setupPoint()
1177 P[0].x -= X; in setupPoint()
1186 P[2].y -= Y; in setupPoint()
1189 P[3].x -= X; in setupPoint()
1190 P[3].y -= Y; in setupPoint()
1201 return draw.setupRoutine(device, &primitive, &triangle, &polygon, &data); in setupPoint()
1206 ASSERT(query->getType() == VK_QUERY_TYPE_OCCLUSION); in addQuery()
1214 ASSERT(query->getType() == VK_QUERY_TYPE_OCCLUSION); in removeQuery()