mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-21 03:16:54 +02:00
shader: bind dispatch spans while keeping GPU record counts native
Co-authored-by: TheCruZ <thecruzwtf@gmail.com>
This commit is contained in:
@@ -805,7 +805,8 @@ void RenderExecutor::PrepareBindings(const ShaderStageRuntime& runtime,
|
||||
}
|
||||
}
|
||||
|
||||
void RenderExecutor::FindBuffers(PreparedBindings& prepared) {
|
||||
void RenderExecutor::FindBuffers(PreparedBindings& prepared, uint64_t dispatch_threads_x,
|
||||
uint32_t group_size_x) {
|
||||
KYTY_PROFILER_FUNCTION();
|
||||
EXIT_IF(prepared.runtime == nullptr || !*prepared.runtime);
|
||||
const auto& program = *prepared.runtime->program;
|
||||
@@ -822,8 +823,23 @@ void RenderExecutor::FindBuffers(PreparedBindings& prepared) {
|
||||
for (const auto resource: resources) {
|
||||
auto descriptor = DecodeNativeDescriptor<ShaderBufferResource>(snapshot.buffers[resource]);
|
||||
const auto address = descriptor.Base48();
|
||||
const auto requested_size = descriptor.GetSize();
|
||||
if (address == 0 || requested_size == 0) {
|
||||
if (address == 0u) {
|
||||
prepared.buffer_sources.push_back({});
|
||||
continue;
|
||||
}
|
||||
auto requested_size = descriptor.GetSize();
|
||||
const auto& buffer = program.info.buffers[resource];
|
||||
if (buffer.dispatch_stride != 0u) {
|
||||
if (dispatch_threads_x == 0u || dispatch_threads_x > uint64_t{UINT32_MAX} + 1u ||
|
||||
buffer.dispatch_stride != group_size_x) {
|
||||
EXIT("GPU-sized buffer requires a known matching X dispatch extent\n");
|
||||
}
|
||||
requested_size = (dispatch_threads_x - 1u) * descriptor.Stride() + buffer.max_byte_extent;
|
||||
if (requested_size > uint64_t{UINT32_MAX} + 1u) {
|
||||
EXIT("GPU-sized buffer dispatch wraps its 32-bit byte address\n");
|
||||
}
|
||||
}
|
||||
if (requested_size == 0) {
|
||||
prepared.buffer_sources.push_back({});
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user