Add renderer resource label contract
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user