d3d12: Handle null constant buffers
RuneScape ends up hitting this path, and it's easy enough to get some well-defined behavior instead of a crash. Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-By: Bill Kristiansen <billkris@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9342>
This commit is contained in:
parent
6a8c51dc5a
commit
eb27db8681
|
@ -59,16 +59,18 @@ fill_cbv_descriptors(struct d3d12_context *ctx,
|
|||
unsigned binding = shader->cb_bindings[i].binding;
|
||||
struct pipe_constant_buffer *buffer = &ctx->cbufs[stage][binding];
|
||||
|
||||
assert(buffer->buffer_size > 0);
|
||||
assert(buffer->buffer);
|
||||
|
||||
struct d3d12_resource *res = d3d12_resource(buffer->buffer);
|
||||
d3d12_transition_resource_state(ctx, res, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
|
||||
D3D12_CONSTANT_BUFFER_VIEW_DESC cbv_desc = {};
|
||||
cbv_desc.BufferLocation = d3d12_resource_gpu_virtual_address(res) + buffer->buffer_offset;
|
||||
cbv_desc.SizeInBytes = MIN2(D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * 16,
|
||||
align(buffer->buffer_size, 256));
|
||||
d3d12_batch_reference_resource(batch, res);
|
||||
if (buffer) {
|
||||
assert(buffer->buffer_size > 0);
|
||||
assert(buffer->buffer);
|
||||
|
||||
struct d3d12_resource *res = d3d12_resource(buffer->buffer);
|
||||
d3d12_transition_resource_state(ctx, res, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
|
||||
cbv_desc.BufferLocation = d3d12_resource_gpu_virtual_address(res) + buffer->buffer_offset;
|
||||
cbv_desc.SizeInBytes = MIN2(D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * 16,
|
||||
align(buffer->buffer_size, 256));
|
||||
d3d12_batch_reference_resource(batch, res);
|
||||
}
|
||||
|
||||
struct d3d12_descriptor_handle handle;
|
||||
d3d12_descriptor_heap_alloc_handle(batch->view_heap, &handle);
|
||||
|
|
Loading…
Reference in New Issue