Skip to content

Commit 24120e8

Browse files
ziga-lunargspencer-lunarg
authored andcommitted
layers: Fix tracking linked shader objects
1 parent 70b3b0c commit 24120e8

3 files changed

Lines changed: 13 additions & 13 deletions

File tree

layers/state_tracker/shader_object_state.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ static ShaderObject::SetLayoutVector GetSetLayouts(DeviceState &dev_data, const
3030
}
3131

3232
ShaderObject::ShaderObject(DeviceState &dev_data, const VkShaderCreateInfoEXT &create_info_i, VkShaderEXT handle,
33-
std::shared_ptr<spirv::Module> &spirv_module, uint32_t createInfoCount, VkShaderEXT *pShaders)
33+
std::shared_ptr<spirv::Module> &spirv_module)
3434
: StateObject(handle, kVulkanObjectTypeShaderEXT),
3535
safe_create_info(&create_info_i),
3636
create_info(*safe_create_info.ptr()),
@@ -41,14 +41,6 @@ ShaderObject::ShaderObject(DeviceState &dev_data, const VkShaderCreateInfoEXT &c
4141
set_layouts(GetSetLayouts(dev_data, create_info)),
4242
push_constant_ranges(GetCanonicalId(create_info.pushConstantRangeCount, create_info.pPushConstantRanges)),
4343
set_compat_ids(GetCompatForSet(set_layouts, push_constant_ranges, 0)) {
44-
if ((create_info.flags & VK_SHADER_CREATE_LINK_STAGE_BIT_EXT) != 0) {
45-
for (uint32_t i = 0; i < createInfoCount; ++i) {
46-
const VkShaderEXT shader_handle = pShaders[i];
47-
if (shader_handle != handle && shader_handle != VK_NULL_HANDLE) {
48-
linked_shaders.push_back(shader_handle);
49-
}
50-
}
51-
}
5244
// We need to update handle, but if using VK_SHADER_CODE_TYPE_SPIRV_EXT, it will be null
5345
if (spirv_module) {
5446
spirv_module->handle_ = handle_;

layers/state_tracker/shader_object_state.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ class ShaderObjectSubState;
3131

3232
// Represents a VkShaderEXT (VK_EXT_shader_object) handle
3333
struct ShaderObject : public StateObject, public SubStateManager<ShaderObjectSubState> {
34-
ShaderObject(DeviceState &dev_data, const VkShaderCreateInfoEXT &create_info, VkShaderEXT shader_object,
35-
std::shared_ptr<spirv::Module> &spirv_module, uint32_t createInfoCount, VkShaderEXT *pShaders);
34+
ShaderObject(DeviceState &dev_data, const VkShaderCreateInfoEXT &create_info_i, VkShaderEXT shader_object,
35+
std::shared_ptr<spirv::Module> &spirv_module);
3636

3737
const vku::safe_VkShaderCreateInfoEXT safe_create_info;
3838
const VkShaderCreateInfoEXT &create_info;

layers/state_tracker/state_tracker.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4972,8 +4972,16 @@ void DeviceState::PostCallRecordCreateShadersEXT(VkDevice device, uint32_t creat
49724972
if (shader_handle == VK_NULL_HANDLE) {
49734973
continue;
49744974
}
4975-
Add(std::make_shared<ShaderObject>(*this, pCreateInfos[i], shader_handle, chassis_state.module_states[i], createInfoCount,
4976-
pShaders));
4975+
std::shared_ptr<ShaderObject> shader_object_state =
4976+
std::make_shared<ShaderObject>(*this, pCreateInfos[i], shader_handle, chassis_state.module_states[i]);
4977+
4978+
for (uint32_t j = 0; j < createInfoCount; ++j) {
4979+
if (i != j && pShaders[j] != VK_NULL_HANDLE && (pCreateInfos[j].flags & VK_SHADER_CREATE_LINK_STAGE_BIT_EXT) != 0) {
4980+
shader_object_state->linked_shaders.push_back(pShaders[j]);
4981+
}
4982+
}
4983+
4984+
Add(std::move(shader_object_state));
49774985
}
49784986
}
49794987

0 commit comments

Comments
 (0)