14 id<MTLRenderPipelineState> pipeline) {
15 if (pipeline == pipeline_) {
19 [encoder_ setRenderPipelineState:pipeline_];
23 id<MTLDepthStencilState> depth_stencil) {
24 if (depth_stencil_ == depth_stencil) {
27 depth_stencil_ = depth_stencil;
28 [encoder_ setDepthStencilState:depth_stencil_];
34 id<MTLBuffer> buffer) {
35 auto& buffers_map = buffers_[stage];
36 auto found = buffers_map.find(index);
37 if (found != buffers_map.end() && found->second.buffer == buffer) {
39 if (found->second.offset ==
offset) {
45 found->second.offset =
offset;
49 [encoder_ setVertexBufferOffset:
offset atIndex:index];
52 [encoder_ setFragmentBufferOffset:
offset atIndex:index];
55 VALIDATION_LOG <<
"Cannot update buffer offset of an unknown stage.";
60 buffers_map[index] = {buffer,
static_cast<size_t>(
offset)};
63 [encoder_ setVertexBuffer:buffer
offset:
offset atIndex:index];
66 [encoder_ setFragmentBuffer:buffer
offset:
offset atIndex:index];
77 id<MTLTexture> texture) {
78 auto& texture_map = textures_[stage];
79 auto found = texture_map.find(index);
80 if (found != texture_map.end() && found->second == texture) {
84 texture_map[index] = texture;
87 [encoder_ setVertexTexture:texture atIndex:index];
90 [encoder_ setFragmentTexture:texture atIndex:index];
101 id<MTLSamplerState> sampler) {
102 auto& sampler_map = samplers_[stage];
103 auto found = sampler_map.find(index);
104 if (found != sampler_map.end() && found->second == sampler) {
108 sampler_map[index] = sampler;
111 [encoder_ setVertexSamplerState:sampler atIndex:index];
114 [encoder_ setFragmentSamplerState:sampler atIndex:index];
124 if (viewport_.has_value() && viewport_.value() == viewport) {
127 [encoder_ setViewport:MTLViewport{
135 viewport_ = viewport;
139 if (scissor_.has_value() && scissor_.value() == scissor) {
143 setScissorRect:MTLScissorRect{
144 .x =
static_cast<NSUInteger
>(scissor.
GetX()),
145 .y =
static_cast<NSUInteger
>(scissor.
GetY()),
146 .width =
static_cast<NSUInteger
>(scissor.
GetWidth()),
147 .height =
static_cast<NSUInteger
>(scissor.
GetHeight()),