Skip to content

Commit

Permalink
- fix issue with incorrectly swapping only register indices when sort…
Browse files Browse the repository at this point in the history
…ing descriptor bindings
  • Loading branch information
polymonster committed Mar 30, 2023
1 parent 6d0101b commit ca8fe53
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions pmfx_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,8 @@ def generate_descriptor_layout(pmfx, pmfx_pipeline, resources):
"register_space": resource["register_space"],
"binding_type": get_binding_type(resource["register_type"]),
"visibility": get_shader_visibility(resource["visibility"]),
"num_values": num_values
"num_values": num_values,
"name": resource["name"]
}
descriptor_layout["push_constants"].append(push_constants)
continue
Expand All @@ -521,7 +522,8 @@ def generate_descriptor_layout(pmfx, pmfx_pipeline, resources):
"shader_register": resource["shader_register"],
"register_space": resource["register_space"],
"visibility": get_shader_visibility(resource["visibility"]),
"sampler_info": pmfx["sampler_states"][lookup]
"sampler_info": pmfx["sampler_states"][lookup],
"name": resource["name"]
}
descriptor_layout["static_samplers"].append(static_sampler)
continue
Expand All @@ -532,21 +534,22 @@ def generate_descriptor_layout(pmfx, pmfx_pipeline, resources):
"register_space": resource["register_space"],
"binding_type": get_binding_type(resource["register_type"]),
"visibility": get_shader_visibility(resource["visibility"]),
"num_descriptors": get_descriptor_array_size(resource)
"num_descriptors": get_descriptor_array_size(resource),
"name": resource["name"]
}
descriptor_layout["bindings"].append(binding)

# combine bindings on the same slot (allow resource type aliasing)
combined_bindings = dict()
for binding in descriptor_layout["bindings"]:
for binding in descriptor_layout["bindings"]:
bh = pmfx_hash({
"shader_register": binding["shader_register"],
"register_space": binding["register_space"],
"register_space": binding["register_space"],
"binding_type": binding["binding_type"]
})
if bh not in combined_bindings:
combined_bindings[bh] = binding
combined_bindings[bh] = dict(binding)
else:
cur = combined_bindings[bh]
# extend visibility
Expand All @@ -557,20 +560,21 @@ def generate_descriptor_layout(pmfx, pmfx_pipeline, resources):
sorted_bindings = list()
for binding in combined_bindings.values():
sorted_bindings.append(binding)

# bubble sort sort them
sorted = False
while not sorted:
sorted = True
for i in range(0, len(sorted_bindings) - 1):
j = i + 1
if sorted_bindings[j]["shader_register"] < sorted_bindings[i]["shader_register"]:
temp = sorted_bindings[j]["shader_register"]
sorted_bindings[j]["shader_register"] = sorted_bindings[i]["shader_register"]
sorted_bindings[i]["shader_register"] = temp
sorted = False
temp = sorted_bindings[j]
sorted_bindings[j] = dict(sorted_bindings[i])
sorted_bindings[i] = dict(temp)
sorted = False

descriptor_layout["bindings"] = list(sorted_bindings)

descriptor_layout["bindings"] = sorted_bindings
return descriptor_layout


Expand Down Expand Up @@ -947,6 +951,12 @@ def generate_pmfx(file, root):
# if we have errors, we are also still out of date
if "error_pipelines" in existing and len(existing["error_pipelines"]) > 0:
out_of_date = True
if "dependencies" in existing:
for dep in existing["dependencies"]:
mtime = os.path.getmtime(dep)
if mtime > last_built:
out_of_date = True
break
except:
out_of_date = True

Expand Down

0 comments on commit ca8fe53

Please sign in to comment.