Add renderer resource label contract

This commit is contained in:
2026-06-02 17:01:10 +02:00
parent bbe3db1747
commit a5dbf05ab5
7 changed files with 132 additions and 14 deletions

View File

@@ -131,6 +131,19 @@ pp::foundation::Status validate_texture_usage(TextureUsage usage) noexcept
return pp::foundation::Status::success();
}
pp::foundation::Status validate_resource_label(const char* label) noexcept
{
if (label == nullptr) {
return pp::foundation::Status::invalid_argument("resource label must not be null");
}
if (bounded_c_string_length(label, max_resource_label_bytes) > max_resource_label_bytes) {
return pp::foundation::Status::out_of_range("resource label exceeds the configured limit");
}
return pp::foundation::Status::success();
}
pp::foundation::Status validate_texture_desc(TextureDesc desc) noexcept
{
const auto extent_status = validate_extent(desc.extent);
@@ -150,7 +163,12 @@ pp::foundation::Status validate_texture_desc(TextureDesc desc) noexcept
return pp::foundation::Status::out_of_range("texture mip level count exceeds the texture extent");
}
return validate_texture_usage(desc.usage);
const auto usage_status = validate_texture_usage(desc.usage);
if (!usage_status.ok()) {
return usage_status;
}
return validate_resource_label(desc.debug_name);
}
pp::foundation::Result<std::uint64_t> texture_byte_size(TextureDesc desc) noexcept
@@ -417,6 +435,11 @@ pp::foundation::Status validate_sampler_desc(SamplerDesc desc) noexcept
pp::foundation::Status validate_mesh_desc(MeshDesc desc) noexcept
{
const auto label_status = validate_resource_label(desc.debug_name);
if (!label_status.ok()) {
return label_status;
}
if (desc.vertex_count == 0) {
return pp::foundation::Status::invalid_argument("mesh must contain at least one vertex");
}

View File

@@ -17,6 +17,7 @@ constexpr std::uint64_t max_texture_bytes = 1024ULL * 1024ULL * 1024ULL;
constexpr std::size_t max_shader_source_bytes = 4ULL * 1024ULL * 1024ULL;
constexpr std::size_t max_shader_uniform_bytes = 64ULL * 1024ULL;
constexpr std::size_t max_trace_label_bytes = 256;
constexpr std::size_t max_resource_label_bytes = 256;
enum class TextureFormat : std::uint8_t {
rgba8,
@@ -66,6 +67,7 @@ struct TextureDesc {
| TextureUsage::readback_source
| TextureUsage::copy_source
| TextureUsage::copy_destination;
const char* debug_name = "";
};
struct ReadbackRegion {
@@ -190,6 +192,7 @@ struct MeshDesc {
std::uint32_t vertex_count = 0;
std::uint32_t index_count = 0;
PrimitiveTopology topology = PrimitiveTopology::triangles;
const char* debug_name = "";
};
struct DrawDesc {
@@ -322,6 +325,7 @@ public:
[[nodiscard]] bool has_texture_usage(TextureUsage usage, TextureUsage required) noexcept;
[[nodiscard]] pp::foundation::Status validate_extent(Extent2D extent) noexcept;
[[nodiscard]] pp::foundation::Status validate_texture_usage(TextureUsage usage) noexcept;
[[nodiscard]] pp::foundation::Status validate_resource_label(const char* label) noexcept;
[[nodiscard]] pp::foundation::Status validate_texture_desc(TextureDesc desc) noexcept;
[[nodiscard]] pp::foundation::Status validate_viewport(Viewport viewport, Extent2D target_extent) noexcept;
[[nodiscard]] pp::foundation::Status validate_scissor(ScissorRect scissor, Extent2D target_extent) noexcept;