From 13d73f26ae2138482b65f94d3ea5720e6c4651b8 Mon Sep 17 00:00:00 2001 From: Unknown <0.tamas.marton@gmail.com> Date: Tue, 21 Apr 2020 15:22:19 +0100 Subject: [PATCH] changed mapping so that coordinate shaders can have separate --- driver/common.h | 16 +- driver/copy.c | 63 +++-- driver/draw.c | 321 +++++++++++++---------- driver/shader.c | 37 ++- driver/vkExt.h | 19 +- test/ETC/ETC.cpp | 29 +- test/HDR/HDR.cpp | 29 +- test/MSAA/MSAA.cpp | 23 +- test/blending/blending.cpp | 31 ++- test/cubemapping/cubemapping.cpp | 30 ++- test/depthTest/depthTest.cpp | 30 ++- test/depthTex/depthTex.cpp | 30 ++- test/indexedTriangle/indexedTriangle.cpp | 23 +- test/mipmapping/mipmapping.cpp | 30 ++- test/query/query.cpp | 23 +- test/stencilTest/stencilTest.cpp | 30 ++- test/texturing/texturing.cpp | 29 +- test/triangle/triangle.cpp | 23 +- test/varyings/varyings.cpp | 20 +- 19 files changed, 454 insertions(+), 382 deletions(-) diff --git a/driver/common.h b/driver/common.h index ca7e151..663d2bb 100644 --- a/driver/common.h +++ b/driver/common.h @@ -243,21 +243,13 @@ typedef struct VkFramebuffer_T uint32_t width, height, layers; } _framebuffer; -typedef enum RpiAssemblyType { - RPI_ASSEMBLY_TYPE_COORDINATE = 0, - RPI_ASSEMBLY_TYPE_VERTEX = 1, - RPI_ASSEMBLY_TYPE_FRAGMENT = 2, - RPI_ASSEMBLY_TYPE_COMPUTE = 3, - RPI_ASSEMBLY_TYPE_MAX, -} RpiAssemblyType; - typedef struct VkShaderModule_T { - uint32_t bos[RPI_ASSEMBLY_TYPE_MAX]; - uint32_t sizes[RPI_ASSEMBLY_TYPE_MAX]; + uint32_t bos[VK_RPI_ASSEMBLY_TYPE_MAX]; + uint32_t sizes[VK_RPI_ASSEMBLY_TYPE_MAX]; //uint64_t* instructions[RPI_ASSEMBLY_TYPE_MAX]; - VkRpiAssemblyMappingEXT* mappings; - uint32_t numMappings; + VkRpiAssemblyMappingEXT* mappings[VK_RPI_ASSEMBLY_TYPE_MAX]; + uint32_t numMappings[VK_RPI_ASSEMBLY_TYPE_MAX]; uint32_t hasThreadSwitch; uint32_t numVaryings; } _shaderModule; diff --git a/driver/copy.c b/driver/copy.c index f266f6b..8f40792 100644 --- a/driver/copy.c +++ b/driver/copy.c @@ -513,7 +513,7 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad (char*)cs_asm_code, (char*)vs_asm_code, (char*)blit_fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT blit_mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -522,7 +522,6 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -531,7 +530,6 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -540,7 +538,6 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -549,10 +546,10 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; - + VkRpiAssemblyMappingEXT fragmentMappings[] = { //fragment shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR, @@ -561,7 +558,6 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -570,7 +566,6 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -579,7 +574,6 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -588,7 +582,6 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -597,20 +590,27 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = blit_mappings; - shaderModuleCreateInfo.numMappings = sizeof(blit_mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); //TODO use allocator @@ -641,9 +641,6 @@ void createBufferToTextureShaderModule(VkDevice device, VkShaderModule* blitShad assemble_qpu_asm(blit_fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; @@ -808,7 +805,7 @@ void createTextureToTextureShaderModule(VkDevice device, VkShaderModule* blitSha (char*)cs_asm_code, (char*)vs_asm_code, (char*)sample_fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT blit_mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -817,7 +814,6 @@ void createTextureToTextureShaderModule(VkDevice device, VkShaderModule* blitSha 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -826,7 +822,6 @@ void createTextureToTextureShaderModule(VkDevice device, VkShaderModule* blitSha 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -835,7 +830,6 @@ void createTextureToTextureShaderModule(VkDevice device, VkShaderModule* blitSha 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -844,10 +838,10 @@ void createTextureToTextureShaderModule(VkDevice device, VkShaderModule* blitSha 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; - + VkRpiAssemblyMappingEXT fragmentMappings[] = { //fragment shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -856,7 +850,6 @@ void createTextureToTextureShaderModule(VkDevice device, VkShaderModule* blitSha 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR, @@ -865,21 +858,28 @@ void createTextureToTextureShaderModule(VkDevice device, VkShaderModule* blitSha 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT }, }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = blit_mappings; - shaderModuleCreateInfo.numMappings = sizeof(blit_mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); //TODO use allocator @@ -910,9 +910,6 @@ void createTextureToTextureShaderModule(VkDevice device, VkShaderModule* blitSha assemble_qpu_asm(sample_fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/driver/draw.c b/driver/draw.c index 114724d..5f6055c 100644 --- a/driver/draw.c +++ b/driver/draw.c @@ -128,19 +128,43 @@ static uint32_t drawCommon(VkCommandBuffer commandBuffer) 0, //extended shader state record cb->graphicsPipeline->vertexAttributeDescriptionCount & 0x7); //number of attribute arrays, 0 -> 8 + _shaderModule* vertModule = 0, *fragModule = 0; + + //it could be that all stages are contained in a single module, or have separate modules + + if(cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]) + { + fragModule = cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]; + } + + if(cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_VERTEX_BIT)]) + { + fragModule = cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_VERTEX_BIT)]; + } + + if(!vertModule) + { + vertModule = fragModule; + } + + if(!fragModule) + { + fragModule = vertModule; + } + //emit shader record ControlListAddress fragCode = { - .handle = ((_shaderModule*)(cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]))->bos[RPI_ASSEMBLY_TYPE_FRAGMENT], + .handle = fragModule->bos[VK_RPI_ASSEMBLY_TYPE_FRAGMENT], .offset = 0, }; ControlListAddress vertCode = { - .handle = ((_shaderModule*)(cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_VERTEX_BIT)]))->bos[RPI_ASSEMBLY_TYPE_VERTEX], + .handle = vertModule->bos[VK_RPI_ASSEMBLY_TYPE_VERTEX], .offset = 0, }; ControlListAddress coordCode = { - .handle = ((_shaderModule*)(cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_VERTEX_BIT)]))->bos[RPI_ASSEMBLY_TYPE_COORDINATE], + .handle = vertModule->bos[VK_RPI_ASSEMBLY_TYPE_COORDINATE], .offset = 0, }; @@ -177,11 +201,11 @@ static uint32_t drawCommon(VkCommandBuffer commandBuffer) &commandBuffer->handlesCl, cb->binCl.currMarker->handlesBuf, cb->binCl.currMarker->handlesSize, - !cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]->hasThreadSwitch, + !fragModule->hasThreadSwitch, 0, //TODO point size included in shaded vertex data? 1, //enable clipping 0, //TODO fragment number of used uniforms? - cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]->numVaryings, //fragment number of varyings + fragModule->numVaryings, //fragment number of varyings 0, //fragment uniform address? fragCode, //fragment code address 0, //TODO vertex number of used uniforms? @@ -242,172 +266,187 @@ static uint32_t drawCommon(VkCommandBuffer commandBuffer) //write uniforms _pipelineLayout* pl = cb->graphicsPipeline->layout; + //kernel side expects relocations first! - for(uint32_t c = 0; c < cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]->numMappings; ++c) + for(uint32_t c = 0; c < fragModule->numMappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT]; ++c) { - VkRpiAssemblyMappingEXT mapping = cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]->mappings[c]; + VkRpiAssemblyMappingEXT mapping = fragModule->mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT][c]; - if(mapping.shaderStage & VK_SHADER_STAGE_FRAGMENT_BIT) + if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR) { - if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR) + if(mapping.descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER || + mapping.descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE || + mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) { - if(mapping.descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER || - mapping.descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE || - mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) - { - _descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, mapping.descriptorSet); - _descriptorImage* di = getMapElement(ds->imageBindingMap, mapping.descriptorBinding); - di += mapping.descriptorArrayElement; + _descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, mapping.descriptorSet); + _descriptorImage* di = getMapElement(ds->imageBindingMap, mapping.descriptorBinding); + di += mapping.descriptorArrayElement; - //emit reloc for texture BO - clFit(commandBuffer, &commandBuffer->handlesCl, 4); - uint32_t idx = clGetHandleIndex(&commandBuffer->handlesCl, cb->binCl.currMarker->handlesBuf, cb->binCl.currMarker->handlesSize, di->imageView->image->boundMem->bo); + //emit reloc for texture BO + clFit(commandBuffer, &commandBuffer->handlesCl, 4); + uint32_t idx = clGetHandleIndex(&commandBuffer->handlesCl, cb->binCl.currMarker->handlesBuf, cb->binCl.currMarker->handlesSize, di->imageView->image->boundMem->bo); - //emit tex bo reloc index - clFit(commandBuffer, &commandBuffer->uniformsCl, 4); - clInsertData(&commandBuffer->uniformsCl, 4, &idx); - } - else if(mapping.descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER || - mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER || - mapping.descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || - mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) - { - _descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, mapping.descriptorSet); - _descriptorBuffer* db = getMapElement(ds->bufferBindingMap, mapping.descriptorBinding); - db += mapping.descriptorArrayElement; + //emit tex bo reloc index + clFit(commandBuffer, &commandBuffer->uniformsCl, 4); + clInsertData(&commandBuffer->uniformsCl, 4, &idx); + } + else if(mapping.descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER || + mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER || + mapping.descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || + mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) + { + _descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, mapping.descriptorSet); + _descriptorBuffer* db = getMapElement(ds->bufferBindingMap, mapping.descriptorBinding); + db += mapping.descriptorArrayElement; - //emit reloc for BO - clFit(commandBuffer, &commandBuffer->handlesCl, 4); - uint32_t idx = clGetHandleIndex(&commandBuffer->handlesCl, cb->binCl.currMarker->handlesBuf, cb->binCl.currMarker->handlesSize, db->buffer->boundMem->bo); + //emit reloc for BO + clFit(commandBuffer, &commandBuffer->handlesCl, 4); + uint32_t idx = clGetHandleIndex(&commandBuffer->handlesCl, cb->binCl.currMarker->handlesBuf, cb->binCl.currMarker->handlesSize, db->buffer->boundMem->bo); - //emit bo reloc index - clFit(commandBuffer, &commandBuffer->uniformsCl, 4); - clInsertData(&commandBuffer->uniformsCl, 4, &idx); - } - else if(mapping.descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER || - mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER) - { - _descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, mapping.descriptorSet); - _descriptorTexelBuffer* dtb = getMapElement(ds->texelBufferBindingMap, mapping.descriptorBinding); - dtb += mapping.descriptorArrayElement; + //emit bo reloc index + clFit(commandBuffer, &commandBuffer->uniformsCl, 4); + clInsertData(&commandBuffer->uniformsCl, 4, &idx); + } + else if(mapping.descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER || + mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER) + { + _descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, mapping.descriptorSet); + _descriptorTexelBuffer* dtb = getMapElement(ds->texelBufferBindingMap, mapping.descriptorBinding); + dtb += mapping.descriptorArrayElement; - //emit reloc for BO - clFit(commandBuffer, &commandBuffer->handlesCl, 4); - uint32_t idx = clGetHandleIndex(&commandBuffer->handlesCl, cb->binCl.currMarker->handlesBuf, cb->binCl.currMarker->handlesSize, dtb->bufferView->buffer->boundMem->bo); + //emit reloc for BO + clFit(commandBuffer, &commandBuffer->handlesCl, 4); + uint32_t idx = clGetHandleIndex(&commandBuffer->handlesCl, cb->binCl.currMarker->handlesBuf, cb->binCl.currMarker->handlesSize, dtb->bufferView->buffer->boundMem->bo); - //emit bo reloc index - clFit(commandBuffer, &commandBuffer->uniformsCl, 4); - clInsertData(&commandBuffer->uniformsCl, 4, &idx); - } - else - { - assert(0); //shouldn't happen - } + //emit bo reloc index + clFit(commandBuffer, &commandBuffer->uniformsCl, 4); + clInsertData(&commandBuffer->uniformsCl, 4, &idx); + } + else + { + assert(0); //shouldn't happen } } } //after relocs we can proceed with the usual uniforms - for(uint32_t c = 0; c < cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]->numMappings; ++c) + for(uint32_t c = 0; c < fragModule->numMappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT]; ++c) { - VkRpiAssemblyMappingEXT mapping = cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_FRAGMENT_BIT)]->mappings[c]; + VkRpiAssemblyMappingEXT mapping = fragModule->mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT][c]; - if(mapping.shaderStage & VK_SHADER_STAGE_FRAGMENT_BIT) + if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT) { - if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT) + clFit(commandBuffer, &commandBuffer->uniformsCl, 4); + clInsertData(&commandBuffer->uniformsCl, 4, cb->pushConstantBufferPixel + mapping.resourceOffset); + } + else if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR) + { + if(mapping.descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER || + mapping.descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE || + mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) { - clFit(commandBuffer, &commandBuffer->uniformsCl, 4); - clInsertData(&commandBuffer->uniformsCl, 4, cb->pushConstantBufferPixel + mapping.resourceOffset); - } - else if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR) - { - if(mapping.descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER || - mapping.descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE || - mapping.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) + _descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, mapping.descriptorSet); + _descriptorImage* di = getMapElement(ds->imageBindingMap, mapping.descriptorBinding); + di += mapping.descriptorArrayElement; + + uint32_t cubemapStride = (di->imageView->image->width * di->imageView->image->height * getFormatBpp(di->imageView->interpretedFormat)) >> 3; + + fprintf(stderr, "cubemap stride %i\n", cubemapStride); + + //TODO handle miplevels according to subresource rage? + uint32_t params[4]; + encodeTextureUniform(params, + di->imageView->subresourceRange.levelCount - 1, + getTextureDataType(di->imageView->interpretedFormat), + di->imageView->viewType == VK_IMAGE_VIEW_TYPE_CUBE, + cubemapStride >> 12, //TODO cubemap stride in multiples of 4KB + di->imageView->image->levelOffsets[0] >> 12, //Image level 0 offset in multiples of 4KB + di->imageView->image->height & 2047, + di->imageView->image->width & 2047, + getMinFilterType(di->sampler->minFilter, di->sampler->mipmapMode),// di->sampler->maxLod), + di->sampler->magFilter == VK_FILTER_NEAREST, + getWrapMode(di->sampler->addressModeU), + getWrapMode(di->sampler->addressModeV), + di->sampler->disableAutoLod + ); + + uint32_t size = 0; + if(di->imageView->viewType == VK_IMAGE_VIEW_TYPE_1D) { - _descriptorSet* ds = getMapElement(pl->descriptorSetBindingMap, mapping.descriptorSet); - _descriptorImage* di = getMapElement(ds->imageBindingMap, mapping.descriptorBinding); - di += mapping.descriptorArrayElement; - - uint32_t cubemapStride = (di->imageView->image->width * di->imageView->image->height * getFormatBpp(di->imageView->interpretedFormat)) >> 3; - - fprintf(stderr, "cubemap stride %i\n", cubemapStride); - - //TODO handle miplevels according to subresource rage? - uint32_t params[4]; - encodeTextureUniform(params, - di->imageView->subresourceRange.levelCount - 1, - getTextureDataType(di->imageView->interpretedFormat), - di->imageView->viewType == VK_IMAGE_VIEW_TYPE_CUBE, - cubemapStride >> 12, //TODO cubemap stride in multiples of 4KB - di->imageView->image->levelOffsets[0] >> 12, //Image level 0 offset in multiples of 4KB - di->imageView->image->height & 2047, - di->imageView->image->width & 2047, - getMinFilterType(di->sampler->minFilter, di->sampler->mipmapMode),// di->sampler->maxLod), - di->sampler->magFilter == VK_FILTER_NEAREST, - getWrapMode(di->sampler->addressModeU), - getWrapMode(di->sampler->addressModeV), - di->sampler->disableAutoLod - ); - - uint32_t size = 0; - if(di->imageView->viewType == VK_IMAGE_VIEW_TYPE_1D) - { - size = 4; - } - else if(di->imageView->viewType == VK_IMAGE_VIEW_TYPE_2D) - { - size = 8; - } - else if(di->imageView->viewType == VK_IMAGE_VIEW_TYPE_CUBE) - { - size = 12; - } - else - { - assert(0); //unsupported - } - - //TODO handle this properly - //TMU0_B requires an extra uniform written - //we need to signal that somehow from API side - //if mode is cubemap we don't need an extra uniform, it's included! - if(di->imageView->viewType != VK_IMAGE_VIEW_TYPE_CUBE && di->sampler->disableAutoLod) - { - size += 4; - } - - //emit tex parameters - clFit(commandBuffer, &commandBuffer->uniformsCl, size); - clInsertData(&commandBuffer->uniformsCl, size, params); + size = 4; } + else if(di->imageView->viewType == VK_IMAGE_VIEW_TYPE_2D) + { + size = 8; + } + else if(di->imageView->viewType == VK_IMAGE_VIEW_TYPE_CUBE) + { + size = 12; + } + else + { + assert(0); //unsupported + } + + //TODO handle this properly + //TMU0_B requires an extra uniform written + //we need to signal that somehow from API side + //if mode is cubemap we don't need an extra uniform, it's included! + if(di->imageView->viewType != VK_IMAGE_VIEW_TYPE_CUBE && di->sampler->disableAutoLod) + { + size += 4; + } + + //emit tex parameters + clFit(commandBuffer, &commandBuffer->uniformsCl, size); + clInsertData(&commandBuffer->uniformsCl, size, params); } } } - //do it twice for vertex and then coordinate - for(uint32_t d = 0; d < 2; ++d) + //vertex and then coordinate + for(uint32_t c = 0; c < vertModule->numMappings[VK_RPI_ASSEMBLY_TYPE_VERTEX]; ++c) { - for(uint32_t c = 0; c < cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_VERTEX_BIT)]->numMappings; ++c) + VkRpiAssemblyMappingEXT mapping = vertModule->mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX][c]; + + if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT) + { + clFit(commandBuffer, &commandBuffer->uniformsCl, 4); + clInsertData(&commandBuffer->uniformsCl, 4, cb->pushConstantBufferVertex + mapping.resourceOffset); + } + else if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR) { - VkRpiAssemblyMappingEXT mapping = cb->graphicsPipeline->modules[ulog2(VK_SHADER_STAGE_VERTEX_BIT)]->mappings[c]; - if(mapping.shaderStage & VK_SHADER_STAGE_VERTEX_BIT) - { - if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT) - { - clFit(commandBuffer, &commandBuffer->uniformsCl, 4); - clInsertData(&commandBuffer->uniformsCl, 4, cb->pushConstantBufferVertex + mapping.resourceOffset); - } - else if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR) - { + } + else + { + assert(0); //shouldn't happen + } + } - } - else - { - assert(0); //shouldn't happen - } - } + //if there are no coordinate mappings, just use the vertex ones + VkRpiAssemblyTypeEXT coordMappingType = VK_RPI_ASSEMBLY_TYPE_COORDINATE; + if(vertModule->numMappings[VK_RPI_ASSEMBLY_TYPE_COORDINATE] < 1) + { + coordMappingType = VK_RPI_ASSEMBLY_TYPE_VERTEX; + } + + for(uint32_t c = 0; c < vertModule->numMappings[coordMappingType]; ++c) + { + VkRpiAssemblyMappingEXT mapping = vertModule->mappings[coordMappingType][c]; + + if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT) + { + clFit(commandBuffer, &commandBuffer->uniformsCl, 4); + clInsertData(&commandBuffer->uniformsCl, 4, cb->pushConstantBufferVertex + mapping.resourceOffset); + } + else if(mapping.mappingType == VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR) + { + + } + else + { + assert(0); //shouldn't happen } } diff --git a/driver/shader.c b/driver/shader.c index 442a991..e4c0567 100644 --- a/driver/shader.c +++ b/driver/shader.c @@ -38,10 +38,21 @@ VkResult rpi_vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInf shader->hasThreadSwitch = 0; - for(int c = 0; c < RPI_ASSEMBLY_TYPE_MAX; ++c) + uint32_t hadVertex = 0, hadCoordinate = 0; + + for(int c = 0; c < VK_RPI_ASSEMBLY_TYPE_MAX; ++c) { if(ci->instructions[c]) { + if(c == VK_RPI_ASSEMBLY_TYPE_VERTEX) + { + hadVertex = 1; + } + else if(c == VK_RPI_ASSEMBLY_TYPE_COORDINATE) + { + hadCoordinate = 1; + } + for(uint64_t d = 0; d < ci->numInstructions[c]; ++d) { uint64_t s = (ci->instructions[c][d] & (0xfll << 60)) >> 60; @@ -93,22 +104,24 @@ VkResult rpi_vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInf shader->bos[c] = 0; shader->sizes[c] = 0; } - } - shader->numMappings = ci->numMappings; + shader->numMappings[c] = ci->numMappings[c]; - if(ci->numMappings > 0) - { - shader->mappings = ALLOCATE(sizeof(VkRpiAssemblyMappingEXT)*ci->numMappings, 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - - if(!shader->mappings) + if(ci->numMappings[c] > 0) { - return VK_ERROR_OUT_OF_HOST_MEMORY; - } + shader->mappings[c] = ALLOCATE(sizeof(VkRpiAssemblyMappingEXT)*ci->numMappings[c], 1, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - memcpy(shader->mappings, ci->mappings, sizeof(VkRpiAssemblyMappingEXT)*ci->numMappings); + if(!shader->mappings[c]) + { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + memcpy(shader->mappings[c], ci->mappings[c], sizeof(VkRpiAssemblyMappingEXT)*ci->numMappings[c]); + } } + assert(hadVertex == hadCoordinate); + *pShaderModule = shader; return VK_SUCCESS; @@ -122,7 +135,7 @@ void rpi_vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, con if(shader) { - for(int c = 0; c < RPI_ASSEMBLY_TYPE_MAX; ++c) + for(int c = 0; c < VK_RPI_ASSEMBLY_TYPE_MAX; ++c) { if(shader->bos[c]) { diff --git a/driver/vkExt.h b/driver/vkExt.h index d9c6533..5eda6ec 100644 --- a/driver/vkExt.h +++ b/driver/vkExt.h @@ -59,10 +59,22 @@ typedef struct LoaderTrampoline * and the driver should be able to figure out what to put in the uniform queue * based on the mapping * - * vertex and coordinate shader mappings are shared + * Coordinate shader mappings are tricky as they are not a concept in Vulkan. + * However, assuming they were compiled from the same vertex shader, they must share the same uniforms. + * Therefore Coordinate shaders will share the same uniforms, but may employ a different mappping. + * If coordinate shader mapping is absent, they'll just use the same mapping as vertex shaders. + * + * Vertex and coordinate shaders must be in the same shader module. * */ +typedef enum VkRpiAssemblyTypeEXT { + VK_RPI_ASSEMBLY_TYPE_COORDINATE = 0, + VK_RPI_ASSEMBLY_TYPE_VERTEX = 1, + VK_RPI_ASSEMBLY_TYPE_FRAGMENT = 2, + VK_RPI_ASSEMBLY_TYPE_COMPUTE = 3, + VK_RPI_ASSEMBLY_TYPE_MAX, +} VkRpiAssemblyTypeEXT; typedef enum VkRpiAssemblyMappingTypeEXT { VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR = 0, @@ -78,7 +90,6 @@ typedef struct VkRpiAssemblyMappingEXT { uint32_t descriptorBinding; uint32_t descriptorArrayElement; uint32_t resourceOffset; //in bytes - VkShaderStageFlagBits shaderStage; } VkRpiAssemblyMappingEXT; typedef struct VkRpiShaderModuleAssemblyCreateInfoEXT { @@ -86,8 +97,8 @@ typedef struct VkRpiShaderModuleAssemblyCreateInfoEXT { const void* pNext; uint64_t** instructions; uint32_t* numInstructions; - VkRpiAssemblyMappingEXT* mappings; - uint32_t numMappings; + VkRpiAssemblyMappingEXT** mappings; + uint32_t* numMappings; } VkRpiShaderModuleAssemblyCreateInfoEXT; #ifdef __cplusplus diff --git a/test/ETC/ETC.cpp b/test/ETC/ETC.cpp index 18c7eee..f1df266 100644 --- a/test/ETC/ETC.cpp +++ b/test/ETC/ETC.cpp @@ -1129,7 +1129,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)sample_fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT sample_mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1138,7 +1138,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1147,7 +1146,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1156,7 +1154,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1165,8 +1162,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { //fragment shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR, @@ -1175,20 +1174,27 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = sample_mappings; - shaderModuleCreateInfo.numMappings = sizeof(sample_mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1211,9 +1217,6 @@ void CreateShaders() assemble_qpu_asm(sample_fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/HDR/HDR.cpp b/test/HDR/HDR.cpp index 8bc524a..cb72f9d 100644 --- a/test/HDR/HDR.cpp +++ b/test/HDR/HDR.cpp @@ -1139,7 +1139,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)hdr_fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT sample_mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1148,7 +1148,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1157,7 +1156,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1166,7 +1164,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1175,8 +1172,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { //fragment shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR, @@ -1185,20 +1184,27 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = sample_mappings; - shaderModuleCreateInfo.numMappings = sizeof(sample_mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1221,9 +1227,6 @@ void CreateShaders() assemble_qpu_asm(sample_fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/MSAA/MSAA.cpp b/test/MSAA/MSAA.cpp index e46f8c0..c39b519 100644 --- a/test/MSAA/MSAA.cpp +++ b/test/MSAA/MSAA.cpp @@ -1029,7 +1029,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1038,7 +1038,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1047,7 +1046,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1056,7 +1054,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1065,20 +1062,25 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = mappings; - shaderModuleCreateInfo.numMappings = sizeof(mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1101,9 +1103,6 @@ void CreateShaders() assemble_qpu_asm(fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/blending/blending.cpp b/test/blending/blending.cpp index aacbe61..28d1976 100644 --- a/test/blending/blending.cpp +++ b/test/blending/blending.cpp @@ -1020,7 +1020,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1029,7 +1029,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1038,7 +1037,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1047,7 +1045,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1056,7 +1053,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1065,8 +1061,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 16, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, VK_DESCRIPTOR_TYPE_MAX_ENUM, //descriptor type @@ -1074,20 +1072,28 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; + VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = mappings; - shaderModuleCreateInfo.numMappings = sizeof(mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1110,9 +1116,6 @@ void CreateShaders() assemble_qpu_asm(fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/cubemapping/cubemapping.cpp b/test/cubemapping/cubemapping.cpp index 0e874fd..8517107 100644 --- a/test/cubemapping/cubemapping.cpp +++ b/test/cubemapping/cubemapping.cpp @@ -1061,7 +1061,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)sample_fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT sample_mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1070,7 +1070,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1079,7 +1078,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1088,7 +1086,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1097,7 +1094,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1106,8 +1102,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 16, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { //fragment shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR, @@ -1116,20 +1114,27 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = sample_mappings; - shaderModuleCreateInfo.numMappings = sizeof(sample_mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1152,9 +1157,6 @@ void CreateShaders() assemble_qpu_asm(sample_fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/depthTest/depthTest.cpp b/test/depthTest/depthTest.cpp index c4a1f58..5bb7bc5 100644 --- a/test/depthTest/depthTest.cpp +++ b/test/depthTest/depthTest.cpp @@ -1140,7 +1140,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1149,7 +1149,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1158,7 +1157,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1167,7 +1165,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1176,7 +1173,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1185,8 +1181,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 16, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, VK_DESCRIPTOR_TYPE_MAX_ENUM, //descriptor type @@ -1194,20 +1192,27 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = mappings; - shaderModuleCreateInfo.numMappings = sizeof(mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1230,9 +1235,6 @@ void CreateShaders() assemble_qpu_asm(fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/depthTex/depthTex.cpp b/test/depthTex/depthTex.cpp index 9b8454d..2132c23 100644 --- a/test/depthTex/depthTex.cpp +++ b/test/depthTex/depthTex.cpp @@ -1056,7 +1056,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)sample_fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT sample_mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1065,7 +1065,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1074,7 +1073,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1083,7 +1081,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1092,8 +1089,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { //fragment shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR, @@ -1102,7 +1101,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1111,20 +1109,27 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = sample_mappings; - shaderModuleCreateInfo.numMappings = sizeof(sample_mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1147,9 +1152,6 @@ void CreateShaders() assemble_qpu_asm(sample_fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/indexedTriangle/indexedTriangle.cpp b/test/indexedTriangle/indexedTriangle.cpp index 95f0d60..8cb173f 100644 --- a/test/indexedTriangle/indexedTriangle.cpp +++ b/test/indexedTriangle/indexedTriangle.cpp @@ -985,7 +985,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -994,7 +994,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1003,7 +1002,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1012,7 +1010,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1021,20 +1018,25 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = mappings; - shaderModuleCreateInfo.numMappings = sizeof(mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1057,9 +1059,6 @@ void CreateShaders() assemble_qpu_asm(fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/mipmapping/mipmapping.cpp b/test/mipmapping/mipmapping.cpp index 7918b06..42e98ff 100644 --- a/test/mipmapping/mipmapping.cpp +++ b/test/mipmapping/mipmapping.cpp @@ -1072,7 +1072,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)sample_fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT sample_mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1081,7 +1081,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1090,7 +1089,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1099,7 +1097,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1108,7 +1105,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1117,8 +1113,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 16, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { //fragment shader uniforms // { // VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1136,20 +1134,27 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = sample_mappings; - shaderModuleCreateInfo.numMappings = sizeof(sample_mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1172,9 +1177,6 @@ void CreateShaders() assemble_qpu_asm(sample_fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/query/query.cpp b/test/query/query.cpp index eedc244..506976f 100644 --- a/test/query/query.cpp +++ b/test/query/query.cpp @@ -1052,7 +1052,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1061,7 +1061,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1070,7 +1069,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1079,7 +1077,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1088,20 +1085,25 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = mappings; - shaderModuleCreateInfo.numMappings = sizeof(mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1124,9 +1126,6 @@ void CreateShaders() assemble_qpu_asm(fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/stencilTest/stencilTest.cpp b/test/stencilTest/stencilTest.cpp index 367fd5c..c171f86 100644 --- a/test/stencilTest/stencilTest.cpp +++ b/test/stencilTest/stencilTest.cpp @@ -1155,7 +1155,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1164,7 +1164,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1173,7 +1172,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1182,7 +1180,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1191,7 +1188,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1200,8 +1196,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 16, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, VK_DESCRIPTOR_TYPE_MAX_ENUM, //descriptor type @@ -1209,20 +1207,27 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = mappings; - shaderModuleCreateInfo.numMappings = sizeof(mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1245,9 +1250,6 @@ void CreateShaders() assemble_qpu_asm(fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/texturing/texturing.cpp b/test/texturing/texturing.cpp index 058fd50..0871e89 100644 --- a/test/texturing/texturing.cpp +++ b/test/texturing/texturing.cpp @@ -1047,7 +1047,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)sample_fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT sample_mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1056,7 +1056,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1065,7 +1064,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1074,7 +1072,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1083,8 +1080,10 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, + }; + + VkRpiAssemblyMappingEXT fragmentMappings[] = { //fragment shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_DESCRIPTOR, @@ -1093,20 +1092,27 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_FRAGMENT_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = sample_mappings; - shaderModuleCreateInfo.numMappings = sizeof(sample_mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); + asm_mappings[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = fragmentMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_FRAGMENT] = sizeof(fragmentMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1129,9 +1135,6 @@ void CreateShaders() assemble_qpu_asm(sample_fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/triangle/triangle.cpp b/test/triangle/triangle.cpp index fb83cab..e85ad48 100644 --- a/test/triangle/triangle.cpp +++ b/test/triangle/triangle.cpp @@ -1037,7 +1037,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1046,7 +1046,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1055,7 +1054,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1064,7 +1062,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1073,20 +1070,25 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = mappings; - shaderModuleCreateInfo.numMappings = sizeof(mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code); @@ -1109,9 +1111,6 @@ void CreateShaders() assemble_qpu_asm(fs_asm_code, asm_ptrs[2]); } - asm_sizes[3] = 0; - asm_ptrs[3] = 0; - spirv[0] = 0x07230203; spirv[1] = 0x00010000; spirv[2] = 0x14E45250; diff --git a/test/varyings/varyings.cpp b/test/varyings/varyings.cpp index 819ec86..b0f5ecf 100644 --- a/test/varyings/varyings.cpp +++ b/test/varyings/varyings.cpp @@ -1043,7 +1043,7 @@ void CreateShaders() (char*)cs_asm_code, (char*)vs_asm_code, (char*)fs_asm_code, 0 }; - VkRpiAssemblyMappingEXT mappings[] = { + VkRpiAssemblyMappingEXT vertexMappings[] = { //vertex shader uniforms { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1052,7 +1052,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 0, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1061,7 +1060,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 4, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1070,7 +1068,6 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 8, //resource offset - VK_SHADER_STAGE_VERTEX_BIT }, { VK_RPI_ASSEMBLY_MAPPING_TYPE_PUSH_CONSTANT, @@ -1079,20 +1076,25 @@ void CreateShaders() 0, //descriptor binding # 0, //descriptor array element # 12, //resource offset - VK_SHADER_STAGE_VERTEX_BIT } }; uint32_t spirv[6]; - uint64_t* asm_ptrs[4]; - uint32_t asm_sizes[4]; + uint64_t* asm_ptrs[4] = {}; + uint32_t asm_sizes[4] = {}; + + VkRpiAssemblyMappingEXT* asm_mappings[4] = {}; + uint32_t asm_mappings_sizes[4] = {}; VkRpiShaderModuleAssemblyCreateInfoEXT shaderModuleCreateInfo = {}; shaderModuleCreateInfo.instructions = asm_ptrs; shaderModuleCreateInfo.numInstructions = asm_sizes; - shaderModuleCreateInfo.mappings = mappings; - shaderModuleCreateInfo.numMappings = sizeof(mappings) / sizeof(VkRpiAssemblyMappingEXT); + shaderModuleCreateInfo.mappings = asm_mappings; + shaderModuleCreateInfo.numMappings = asm_mappings_sizes; + + asm_mappings[VK_RPI_ASSEMBLY_TYPE_VERTEX] = vertexMappings; + asm_mappings_sizes[VK_RPI_ASSEMBLY_TYPE_VERTEX] = sizeof(vertexMappings) / sizeof(VkRpiAssemblyMappingEXT); { //assemble cs code asm_sizes[0] = get_num_instructions(cs_asm_code);