pre-emptive opengl fixes (it at least works fully which is mostly what I care about)
This commit is contained in:
parent
0a29063869
commit
114bed0d5d
@ -1 +1 @@
|
||||
vulkan
|
||||
opengl
|
@ -7,7 +7,7 @@
|
||||
|
||||
namespace ext {
|
||||
namespace opengl {
|
||||
struct UF_API RenderMode {
|
||||
struct UF_API RenderMode : public Buffers {
|
||||
bool execute = false;
|
||||
bool executed = false;
|
||||
bool rebuild = false;
|
||||
|
@ -119,9 +119,11 @@ namespace {
|
||||
graphic.material.metadata.autoInitializeUniformBuffers = false;
|
||||
graphic.material.attachShader(vertexShaderFilename, uf::renderer::enums::Shader::VERTEX);
|
||||
graphic.material.attachShader(fragmentShaderFilename, uf::renderer::enums::Shader::FRAGMENT);
|
||||
#if UF_USE_VULKAN
|
||||
if ( geometryShaderFilename != "" && uf::renderer::device.enabledFeatures.geometryShader ) { // to-do: should cram in the attachShader itself
|
||||
graphic.material.attachShader(geometryShaderFilename, uf::renderer::enums::Shader::GEOMETRY);
|
||||
}
|
||||
#endif
|
||||
graphic.material.metadata.autoInitializeUniformBuffers = true;
|
||||
// vertex shader
|
||||
{
|
||||
|
@ -357,10 +357,43 @@ void ext::opengl::Graphic::record( CommandBuffer& commandBuffer, const GraphicDe
|
||||
auto shaders = pipeline.getShaders( material.shaders );
|
||||
|
||||
for ( auto shader : shaders ) {
|
||||
// bind aliased buffers
|
||||
for ( auto& descriptor : shader->metadata.aliases.buffers ) {
|
||||
auto matches = uf::string::match(descriptor.name, R"(/^(.+?)\[(\d+)\]$/)");
|
||||
auto name = matches.size() == 2 ? matches[0] : descriptor.name;
|
||||
auto view = matches.size() == 2 ? stoi(matches[1]) : -1;
|
||||
const ext::opengl::Buffer* buffer = &descriptor.fallback;
|
||||
if ( descriptor.renderMode ) {
|
||||
if ( descriptor.renderMode->hasBuffer(name) )
|
||||
buffer = &descriptor.renderMode->getBuffer(name);
|
||||
}/* else if ( renderMode.hasBuffer(name) ) {
|
||||
buffer = &renderMode.getBuffer(name);
|
||||
}*/
|
||||
|
||||
if ( !buffer ) continue;
|
||||
|
||||
if ( buffer->usage & uf::renderer::enums::Buffer::UNIFORM ) uniformBuffers.emplace_back(buffer->descriptor);
|
||||
if ( buffer->usage & uf::renderer::enums::Buffer::STORAGE ) storageBuffers.emplace_back(buffer->descriptor);
|
||||
}
|
||||
// bind shader
|
||||
for ( auto& buffer : shader->buffers ) {
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::UNIFORM ) { uniformBuffers.emplace_back(buffer.descriptor); }
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::STORAGE ) { storageBuffers.emplace_back(buffer.descriptor); }
|
||||
}
|
||||
/*
|
||||
// add per-pipeline buffers
|
||||
for ( auto& buffer : this->buffers ) {
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::UNIFORM ) infos.uniform.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::STORAGE ) infos.storage.emplace_back(buffer.descriptor);
|
||||
// if ( buffer.usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR ) infos.accelerationStructure.emplace_back(buffer.descriptor);
|
||||
}
|
||||
// add per-graphics buffers
|
||||
for ( auto& buffer : graphic.buffers ) {
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::UNIFORM ) infos.uniform.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::STORAGE ) infos.storage.emplace_back(buffer.descriptor);
|
||||
// if ( buffer.usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR ) infos.accelerationStructure.emplace_back(buffer.descriptor);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
auto uniformBufferIt = uniformBuffers.begin();
|
||||
|
@ -83,6 +83,18 @@ ext::opengl::CommandBuffer& ext::opengl::RenderMode::getCommands( std::thread::i
|
||||
void ext::opengl::RenderMode::createCommandBuffers( const uf::stl::vector<ext::opengl::Graphic*>& graphics ) {
|
||||
|
||||
}
|
||||
|
||||
bool ext::opengl::RenderMode::hasBuffer( const uf::stl::string& name ) const {
|
||||
return metadata.buffers.count(name) > 0;
|
||||
}
|
||||
const ext::opengl::Buffer& ext::opengl::RenderMode::getBuffer( const uf::stl::string& name ) const {
|
||||
UF_ASSERT_MSG( hasBuffer( name ), "attachment in `{}`: {} not found: {}", this->getName(), this->getType(), name );
|
||||
return this->buffers[metadata.buffers.at(name)];
|
||||
}
|
||||
size_t ext::opengl::RenderMode::getBufferIndex( const uf::stl::string& name ) const {
|
||||
return hasBuffer( name ) ? metadata.buffers.at(name) : SIZE_MAX;
|
||||
}
|
||||
|
||||
void ext::opengl::RenderMode::bindPipelines() {
|
||||
this->execute = true;
|
||||
|
||||
@ -172,6 +184,12 @@ void ext::opengl::RenderMode::initialize( Device& device ) {
|
||||
if ( this->width > 0 ) renderTarget.width = this->width;
|
||||
if ( this->height > 0 ) renderTarget.height = this->height;
|
||||
}
|
||||
|
||||
/*
|
||||
if ( !this->hasBuffer("camera") ) {
|
||||
this->metadata.buffers["camera"] = this->initializeBuffer( (const void*) nullptr, sizeof(pod::Camera::Viewports), uf::renderer::enums::Buffer::UNIFORM );
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void ext::opengl::RenderMode::tick() {
|
||||
|
@ -532,32 +532,32 @@ void ext::vulkan::Pipeline::update( const Graphic& graphic, const GraphicDescrip
|
||||
if ( !buffer ) continue;
|
||||
|
||||
if ( buffer->usage & uf::renderer::enums::Buffer::UNIFORM ) infos.uniform.emplace_back(buffer->descriptor);
|
||||
if ( buffer->usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT ) infos.storage.emplace_back(buffer->descriptor);
|
||||
if ( buffer->usage & uf::renderer::enums::Buffer::STORAGE ) infos.storage.emplace_back(buffer->descriptor);
|
||||
}
|
||||
#if 0
|
||||
// add per-rendermode buffers
|
||||
for ( auto& buffer : renderMode.buffers ) {
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::UNIFORM ) infos.uniform.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT ) infos.storage.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::STORAGE ) infos.storage.emplace_back(buffer.descriptor);
|
||||
// if ( buffer.usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR ) infos.accelerationStructure.emplace_back(buffer.descriptor);
|
||||
}
|
||||
#endif
|
||||
// add per-shader buffers
|
||||
for ( auto& buffer : shader->buffers ) {
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::UNIFORM ) infos.uniform.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT ) infos.storage.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::STORAGE ) infos.storage.emplace_back(buffer.descriptor);
|
||||
// if ( buffer.usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR ) infos.accelerationStructure.emplace_back(buffer.descriptor);
|
||||
}
|
||||
// add per-pipeline buffers
|
||||
for ( auto& buffer : this->buffers ) {
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::UNIFORM ) infos.uniform.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT ) infos.storage.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::STORAGE ) infos.storage.emplace_back(buffer.descriptor);
|
||||
// if ( buffer.usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR ) infos.accelerationStructure.emplace_back(buffer.descriptor);
|
||||
}
|
||||
// add per-graphics buffers
|
||||
for ( auto& buffer : graphic.buffers ) {
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::UNIFORM ) infos.uniform.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT ) infos.storage.emplace_back(buffer.descriptor);
|
||||
if ( buffer.usage & uf::renderer::enums::Buffer::STORAGE ) infos.storage.emplace_back(buffer.descriptor);
|
||||
// if ( buffer.usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR ) infos.accelerationStructure.emplace_back(buffer.descriptor);
|
||||
}
|
||||
|
||||
@ -1133,10 +1133,10 @@ void ext::vulkan::Graphic::initializeMesh( uf::Mesh& mesh, bool buffer ) {
|
||||
// allocate buffers
|
||||
auto previousRequestedAlignment = this->requestedAlignment;
|
||||
this->requestedAlignment = 16;
|
||||
PARSE_INPUT_INITIALIZE(vertex, uf::renderer::enums::Buffer::VERTEX | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT )
|
||||
PARSE_INPUT_INITIALIZE(vertex, uf::renderer::enums::Buffer::VERTEX | uf::renderer::enums::Buffer::STORAGE )
|
||||
PARSE_INPUT_INITIALIZE(index, uf::renderer::enums::Buffer::INDEX )
|
||||
PARSE_INPUT_INITIALIZE(instance, uf::renderer::enums::Buffer::VERTEX )
|
||||
PARSE_INPUT_INITIALIZE(indirect, uf::renderer::enums::Buffer::INDIRECT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT )
|
||||
PARSE_INPUT_INITIALIZE(indirect, uf::renderer::enums::Buffer::INDIRECT | uf::renderer::enums::Buffer::STORAGE )
|
||||
this->requestedAlignment = previousRequestedAlignment;
|
||||
}
|
||||
|
||||
@ -1745,7 +1745,7 @@ void ext::vulkan::Graphic::generateTopAccelerationStructure( const uf::stl::vect
|
||||
// UF_MSG_DEBUG("Reduced size to {}% ({} -> {} = {})", (float) (oldSize - compactedSize) / (float) (oldSize), oldSize, compactedSize, oldSize - compactedSize);
|
||||
|
||||
ext::vulkan::Buffer oldBuffer;
|
||||
oldBuffer.initialize( NULL, tlasBufferSize, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT );
|
||||
oldBuffer.initialize( NULL, tlasBufferSize, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | uf::renderer::enums::Buffer::STORAGE );
|
||||
this->buffers[tlasBufferIndex].swap(oldBuffer);
|
||||
|
||||
tlas.buffer = this->buffers[tlasBufferIndex].alias();
|
||||
|
@ -64,7 +64,7 @@ const ext::vulkan::Buffer& ext::vulkan::RenderMode::getBuffer( const uf::stl::st
|
||||
return this->buffers[metadata.buffers.at(name)];
|
||||
}
|
||||
size_t ext::vulkan::RenderMode::getBufferIndex( const uf::stl::string& name ) const {
|
||||
return hasAttachment( name ) ? metadata.buffers.at(name) : SIZE_MAX;
|
||||
return hasBuffer( name ) ? metadata.buffers.at(name) : SIZE_MAX;
|
||||
}
|
||||
|
||||
uf::Image ext::vulkan::RenderMode::screenshot( size_t attachmentID, size_t layerID ) {
|
||||
|
Loading…
Reference in New Issue
Block a user