| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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 "GrVkPipelineState.h" | 8 #include "GrVkPipelineState.h" |
| 9 | 9 |
| 10 #include "GrPipeline.h" | 10 #include "GrPipeline.h" |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; | 229 descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; |
| 230 descriptorWrites[0].pNext = nullptr; | 230 descriptorWrites[0].pNext = nullptr; |
| 231 descriptorWrites[0].dstSet = fDescriptorSets[GrVkUniformHandler::kUnifor
mBufferDescSet]; | 231 descriptorWrites[0].dstSet = fDescriptorSets[GrVkUniformHandler::kUnifor
mBufferDescSet]; |
| 232 descriptorWrites[0].dstBinding = GrVkUniformHandler::kVertexBinding; | 232 descriptorWrites[0].dstBinding = GrVkUniformHandler::kVertexBinding; |
| 233 descriptorWrites[0].dstArrayElement = 0; | 233 descriptorWrites[0].dstArrayElement = 0; |
| 234 descriptorWrites[0].descriptorCount = 1; | 234 descriptorWrites[0].descriptorCount = 1; |
| 235 descriptorWrites[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; | 235 descriptorWrites[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; |
| 236 descriptorWrites[0].pImageInfo = nullptr; | 236 descriptorWrites[0].pImageInfo = nullptr; |
| 237 descriptorWrites[0].pBufferInfo = &vertBufferInfo; | 237 descriptorWrites[0].pBufferInfo = &vertBufferInfo; |
| 238 descriptorWrites[0].pTexelBufferView = nullptr; | 238 descriptorWrites[0].pTexelBufferView = nullptr; |
| 239 | |
| 240 fVertexUniformBuffer->addMemoryBarrier(gpu, | |
| 241 VK_ACCESS_HOST_WRITE_BIT, | |
| 242 VK_ACCESS_UNIFORM_READ_BIT, | |
| 243 VK_PIPELINE_STAGE_HOST_BIT, | |
| 244 VK_PIPELINE_STAGE_VERTEX_SHADER_B
IT, | |
| 245 false); | |
| 246 } | 239 } |
| 247 | 240 |
| 248 VkDescriptorBufferInfo fragBufferInfo; | 241 VkDescriptorBufferInfo fragBufferInfo; |
| 249 // Fragment Uniform Buffer | 242 // Fragment Uniform Buffer |
| 250 if (fFragmentUniformBuffer.get()) { | 243 if (fFragmentUniformBuffer.get()) { |
| 251 if (0 == uniformBindingUpdateCount) { | 244 if (0 == uniformBindingUpdateCount) { |
| 252 firstUniformWrite = 1; | 245 firstUniformWrite = 1; |
| 253 } | 246 } |
| 254 ++uniformBindingUpdateCount; | 247 ++uniformBindingUpdateCount; |
| 255 memset(&fragBufferInfo, 0, sizeof(VkDescriptorBufferInfo)); | 248 memset(&fragBufferInfo, 0, sizeof(VkDescriptorBufferInfo)); |
| 256 fragBufferInfo.buffer = fFragmentUniformBuffer->buffer(); | 249 fragBufferInfo.buffer = fFragmentUniformBuffer->buffer(); |
| 257 fragBufferInfo.offset = 0; | 250 fragBufferInfo.offset = 0; |
| 258 fragBufferInfo.range = fFragmentUniformBuffer->size(); | 251 fragBufferInfo.range = fFragmentUniformBuffer->size(); |
| 259 | 252 |
| 260 descriptorWrites[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; | 253 descriptorWrites[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; |
| 261 descriptorWrites[1].pNext = nullptr; | 254 descriptorWrites[1].pNext = nullptr; |
| 262 descriptorWrites[1].dstSet = fDescriptorSets[GrVkUniformHandler::kUnifor
mBufferDescSet]; | 255 descriptorWrites[1].dstSet = fDescriptorSets[GrVkUniformHandler::kUnifor
mBufferDescSet]; |
| 263 descriptorWrites[1].dstBinding = GrVkUniformHandler::kFragBinding;; | 256 descriptorWrites[1].dstBinding = GrVkUniformHandler::kFragBinding;; |
| 264 descriptorWrites[1].dstArrayElement = 0; | 257 descriptorWrites[1].dstArrayElement = 0; |
| 265 descriptorWrites[1].descriptorCount = 1; | 258 descriptorWrites[1].descriptorCount = 1; |
| 266 descriptorWrites[1].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; | 259 descriptorWrites[1].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; |
| 267 descriptorWrites[1].pImageInfo = nullptr; | 260 descriptorWrites[1].pImageInfo = nullptr; |
| 268 descriptorWrites[1].pBufferInfo = &fragBufferInfo; | 261 descriptorWrites[1].pBufferInfo = &fragBufferInfo; |
| 269 descriptorWrites[1].pTexelBufferView = nullptr; | 262 descriptorWrites[1].pTexelBufferView = nullptr; |
| 270 | |
| 271 fFragmentUniformBuffer->addMemoryBarrier(gpu, | |
| 272 VK_ACCESS_HOST_WRITE_BIT, | |
| 273 VK_ACCESS_UNIFORM_READ_BIT, | |
| 274 VK_PIPELINE_STAGE_HOST_BIT, | |
| 275 VK_PIPELINE_STAGE_FRAGMENT_SHAD
ER_BIT, | |
| 276 false); | |
| 277 } | 263 } |
| 278 | 264 |
| 279 if (uniformBindingUpdateCount) { | 265 if (uniformBindingUpdateCount) { |
| 280 GR_VK_CALL(gpu->vkInterface(), UpdateDescriptorSets(gpu->device(), | 266 GR_VK_CALL(gpu->vkInterface(), UpdateDescriptorSets(gpu->device(), |
| 281 uniformBindingUpdate
Count, | 267 uniformBindingUpdate
Count, |
| 282 &descriptorWrites[fi
rstUniformWrite], | 268 &descriptorWrites[fi
rstUniformWrite], |
| 283 0, nullptr)); | 269 0, nullptr)); |
| 284 } | 270 } |
| 285 } | 271 } |
| 286 | 272 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 fPool = gpu->resourceProvider().findOrCreateCompatibleDescriptorPool(fDe
scType, | 405 fPool = gpu->resourceProvider().findOrCreateCompatibleDescriptorPool(fDe
scType, |
| 420 fMa
xDescriptors); | 406 fMa
xDescriptors); |
| 421 } | 407 } |
| 422 SkASSERT(fPool || !fMaxDescriptors); | 408 SkASSERT(fPool || !fMaxDescriptors); |
| 423 } | 409 } |
| 424 | 410 |
| 425 void GrVkPipelineState::DescriptorPoolManager::getNewDescriptorSet(GrVkGpu* gpu,
VkDescriptorSet* ds) { | 411 void GrVkPipelineState::DescriptorPoolManager::getNewDescriptorSet(GrVkGpu* gpu,
VkDescriptorSet* ds) { |
| 426 if (!fMaxDescriptors) { | 412 if (!fMaxDescriptors) { |
| 427 return; | 413 return; |
| 428 } | 414 } |
| 429 if (fCurrentDescriptorCount == fMaxDescriptors) { | 415 fCurrentDescriptorCount += fDescCountPerSet; |
| 416 if (fCurrentDescriptorCount > fMaxDescriptors) { |
| 430 this->getNewPool(gpu); | 417 this->getNewPool(gpu); |
| 431 fCurrentDescriptorCount = 0; | 418 fCurrentDescriptorCount = fDescCountPerSet; |
| 432 } | 419 } |
| 433 fCurrentDescriptorCount += fDescCountPerSet; | |
| 434 | 420 |
| 435 VkDescriptorSetAllocateInfo dsAllocateInfo; | 421 VkDescriptorSetAllocateInfo dsAllocateInfo; |
| 436 memset(&dsAllocateInfo, 0, sizeof(VkDescriptorSetAllocateInfo)); | 422 memset(&dsAllocateInfo, 0, sizeof(VkDescriptorSetAllocateInfo)); |
| 437 dsAllocateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; | 423 dsAllocateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; |
| 438 dsAllocateInfo.pNext = nullptr; | 424 dsAllocateInfo.pNext = nullptr; |
| 439 dsAllocateInfo.descriptorPool = fPool->descPool(); | 425 dsAllocateInfo.descriptorPool = fPool->descPool(); |
| 440 dsAllocateInfo.descriptorSetCount = 1; | 426 dsAllocateInfo.descriptorSetCount = 1; |
| 441 dsAllocateInfo.pSetLayouts = &fDescLayout; | 427 dsAllocateInfo.pSetLayouts = &fDescLayout; |
| 442 GR_VK_CALL_ERRCHECK(gpu->vkInterface(), AllocateDescriptorSets(gpu->device()
, | 428 GR_VK_CALL_ERRCHECK(gpu->vkInterface(), AllocateDescriptorSets(gpu->device()
, |
| 443 &dsAllocateIn
fo, | 429 &dsAllocateIn
fo, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 | 486 |
| 501 b.add32(get_blend_info_key(pipeline)); | 487 b.add32(get_blend_info_key(pipeline)); |
| 502 | 488 |
| 503 b.add32(primitiveType); | 489 b.add32(primitiveType); |
| 504 | 490 |
| 505 // Set key length | 491 // Set key length |
| 506 int keyLength = key->count(); | 492 int keyLength = key->count(); |
| 507 SkASSERT(0 == (keyLength % 4)); | 493 SkASSERT(0 == (keyLength % 4)); |
| 508 *reinterpret_cast<uint32_t*>(key->begin()) = SkToU32(keyLength); | 494 *reinterpret_cast<uint32_t*>(key->begin()) = SkToU32(keyLength); |
| 509 } | 495 } |
| OLD | NEW |