mirror of
https://github.com/Yours3lf/rpi-vk-driver.git
synced 2025-02-19 16:54:18 +01:00
backup
This commit is contained in:
parent
dda5b3d62b
commit
7f4551f320
@ -214,9 +214,18 @@ typedef struct VkShaderModule_T
|
||||
uint32_t numDescriptorBindings[VK_RPI_ASSEMBLY_TYPE_MAX];
|
||||
} _shaderModule;
|
||||
|
||||
typedef struct VkPipelineLayout_T
|
||||
{
|
||||
map descriptorSetBindingMap;
|
||||
uint32_t setLayoutCount;
|
||||
const _descriptorSetLayout* setLayouts;
|
||||
uint32_t pushConstantRangeCount;
|
||||
const VkPushConstantRange* pushConstantRanges;
|
||||
} _pipelineLayout;
|
||||
|
||||
typedef struct VkPipeline_T
|
||||
{
|
||||
VkShaderModule modules[6];
|
||||
_shaderModule* modules[6];
|
||||
char* names[6];
|
||||
uint32_t vertexBindingDescriptionCount;
|
||||
VkVertexInputBindingDescription* vertexBindingDescriptions;
|
||||
@ -260,7 +269,7 @@ typedef struct VkPipeline_T
|
||||
float blendConstants[4];
|
||||
uint32_t dynamicStateCount;
|
||||
VkDynamicState* dynamicStates;
|
||||
VkPipelineLayout layout;
|
||||
_pipelineLayout* layout;
|
||||
_renderpass* renderPass;
|
||||
uint32_t subpass;
|
||||
} _pipeline;
|
||||
|
@ -381,7 +381,23 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
|
||||
uint32_t dynamicOffsetCount,
|
||||
const uint32_t* pDynamicOffsets)
|
||||
{
|
||||
//TODO dynamic offsets
|
||||
|
||||
assert(commandBuffer);
|
||||
assert(layout);
|
||||
assert(pDescriptorSets);
|
||||
|
||||
_commandBuffer* cb = commandBuffer;
|
||||
|
||||
//use pipeline layout's memory to store what is bound...
|
||||
|
||||
_pipelineLayout* pl = pipelineBindPoint == VK_PIPELINE_BIND_POINT_GRAPHICS ? cb->graphicsPipeline->layout : cb->computePipeline->layout;
|
||||
assert(firstSet + descriptorSetCount <= pl->setLayoutCount);
|
||||
|
||||
for(uint32_t c = firstSet; c < firstSet + descriptorSetCount; ++c)
|
||||
{
|
||||
setMapElement(&pl->descriptorSetBindingMap, c, pDescriptorSets[c]);
|
||||
}
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
|
||||
|
@ -246,6 +246,7 @@ void vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t ins
|
||||
uniform viewport zoffset : 0.500000
|
||||
/**/
|
||||
|
||||
/**
|
||||
//TODO: if fragment shader doesn't use any uniforms, then VS will expect to read the first uniform in the stream
|
||||
//clFit(commandBuffer, &commandBuffer->uniformsCl, 4*(1+4+4));
|
||||
clFit(commandBuffer, &commandBuffer->uniformsCl, 4*(4+4));
|
||||
@ -261,6 +262,58 @@ void vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t ins
|
||||
clInsertUniformConstant(&commandBuffer->uniformsCl, 1065353216);
|
||||
clInsertUniformXYScale(&commandBuffer->uniformsCl, (float)(i->width) * 0.5f * 16.0f);
|
||||
clInsertUniformZOffset(&commandBuffer->uniformsCl, 0.5f);
|
||||
/**/
|
||||
|
||||
_shaderModule* csModule = cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_VERTEX_BIT)];
|
||||
_pipelineLayout* pl = cb->graphicsPipeline->layout;
|
||||
for(uint32_t c = 0; c < csModule->numDescriptorBindings[VK_RPI_ASSEMBLY_TYPE_COORDINATE]; ++c)
|
||||
{
|
||||
uint32_t offset = 0;
|
||||
for(uint32_t d = 0; d < c; ++d)
|
||||
{
|
||||
offset += csModule->numDescriptorBindings[d];
|
||||
}
|
||||
|
||||
_descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, csModule->descriptorSets[offset + c]);
|
||||
|
||||
clFit(commandBuffer, &commandBuffer->uniformsCl, 4*csModule->descriptorCounts[offset + c]);
|
||||
|
||||
switch(csModule->descriptorTypes[offset + c])
|
||||
{
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
_descriptorImage* dib = getMapElement(ds->imageBindingMap, csModule->descriptorBindings[offset + c]);
|
||||
for(uint32_t d = 0; d < csModule->descriptorCounts[offset + c]; ++d)
|
||||
{
|
||||
//TODO
|
||||
//clInsertUniformConstant(&commandBuffer->uniformsCl, );
|
||||
}
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
|
||||
_descriptorBuffer* dbb = getMapElement(ds->bufferBindingMap, csModule->descriptorBindings[offset + c]);
|
||||
for(uint32_t d = 0; d < csModule->descriptorCounts[offset + c]; ++d)
|
||||
{
|
||||
//TODO
|
||||
//csModule->descriptorArrayElems[offset + c]
|
||||
//clInsertUniformConstant(&commandBuffer->uniformsCl, );
|
||||
}
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
_descriptorTexelBuffer* dtb = getMapElement(ds->texelBufferBindingMap, csModule->descriptorBindings[offset + c]);
|
||||
for(uint32_t d = 0; d < csModule->descriptorCounts[offset + c]; ++d)
|
||||
{
|
||||
//TODO
|
||||
//clInsertUniformConstant(&commandBuffer->uniformsCl, );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
|
||||
|
@ -229,6 +229,46 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkPipelineLayout* pPipelineLayout)
|
||||
{
|
||||
assert(device);
|
||||
assert(pCreateInfo);
|
||||
assert(pPipelineLayout);
|
||||
|
||||
_pipelineLayout* pl = ALLOCATE(sizeof(_pipelineLayout), 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
|
||||
if(!pl)
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
|
||||
pl->setLayoutCount = pCreateInfo->setLayoutCount;
|
||||
pl->pushConstantRangeCount = pCreateInfo->pushConstantRangeCount;
|
||||
|
||||
if(pCreateInfo->setLayoutCount > 0 && pCreateInfo->pSetLayouts)
|
||||
{
|
||||
pl->setLayouts = ALLOCATE(sizeof(VkDescriptorSetLayout)*pCreateInfo->setLayoutCount, 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if(!pl->setLayouts)
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
|
||||
memcpy(pl->setLayouts, pCreateInfo->pSetLayouts, sizeof(VkDescriptorSetLayout)*pCreateInfo->setLayoutCount);
|
||||
}
|
||||
|
||||
if(pCreateInfo->pushConstantRangeCount > 0 && pCreateInfo->pPushConstantRanges)
|
||||
{
|
||||
pl->pushConstantRanges = ALLOCATE(sizeof(VkPushConstantRange)*pCreateInfo->pushConstantRangeCount, 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if(!pl->pushConstantRanges)
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
|
||||
memcpy(pl->pushConstantRanges, pCreateInfo->pPushConstantRanges, sizeof(VkPushConstantRange)*pCreateInfo->pushConstantRangeCount);
|
||||
}
|
||||
|
||||
pl->descriptorSetBindingMap = createMap(ALLOCATE(sizeof(_descriptorSet*)*pCreateInfo->setLayoutCount, 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT), pCreateInfo->setLayoutCount);
|
||||
|
||||
*pPipelineLayout = pl;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -51,40 +51,46 @@ VkResult vkCreateShaderModuleFromRpiAssemblyEXT(VkDevice device, VkRpiShaderModu
|
||||
|
||||
if(pCreateInfo->numDescriptorBindings[c] > 0)
|
||||
{
|
||||
uint32_t offset = 0;
|
||||
for(uint32_t d = 0; d < c; ++d)
|
||||
{
|
||||
offset += pCreateInfo->numDescriptorBindings[d];
|
||||
}
|
||||
|
||||
shader->descriptorBindings[c] = ALLOCATE(sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c], 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if(!shader->descriptorBindings[c])
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
memcpy(shader->descriptorBindings[c], pCreateInfo->descriptorBindings + (c*pCreateInfo->numDescriptorBindings[c]), sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c]);
|
||||
memcpy(shader->descriptorBindings[c], pCreateInfo->descriptorBindings + offset, sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c]);
|
||||
|
||||
shader->descriptorSets[c] = ALLOCATE(sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c], 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if(!shader->descriptorSets[c])
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
memcpy(shader->descriptorSets[c], pCreateInfo->descriptorSets + (c*pCreateInfo->numDescriptorBindings[c]), sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c]);
|
||||
memcpy(shader->descriptorSets[c], pCreateInfo->descriptorSets + offset, sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c]);
|
||||
|
||||
shader->descriptorTypes[c] = ALLOCATE(sizeof(VkDescriptorType)*pCreateInfo->numDescriptorBindings[c], 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if(!shader->descriptorTypes[c])
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
memcpy(shader->descriptorTypes[c], pCreateInfo->descriptorTypes + (c*pCreateInfo->numDescriptorBindings[c]), sizeof(VkDescriptorType)*pCreateInfo->numDescriptorBindings[c]);
|
||||
memcpy(shader->descriptorTypes[c], pCreateInfo->descriptorTypes + offset, sizeof(VkDescriptorType)*pCreateInfo->numDescriptorBindings[c]);
|
||||
|
||||
shader->descriptorCounts[c] = ALLOCATE(sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c], 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if(!shader->descriptorCounts[c])
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
memcpy(shader->descriptorCounts[c], pCreateInfo->descriptorCounts + (c*pCreateInfo->numDescriptorBindings[c]), sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c]);
|
||||
memcpy(shader->descriptorCounts[c], pCreateInfo->descriptorCounts + offset, sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c]);
|
||||
|
||||
shader->descriptorArrayElems[c] = ALLOCATE(sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c], 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if(!shader->descriptorArrayElems[c])
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
memcpy(shader->descriptorArrayElems[c], pCreateInfo->descriptorArrayElems + (c*pCreateInfo->numDescriptorBindings[c]), sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c]);
|
||||
memcpy(shader->descriptorArrayElems[c], pCreateInfo->descriptorArrayElems + offset, sizeof(uint32_t)*pCreateInfo->numDescriptorBindings[c]);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user